/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app-pages-internals"],{ /***/ "(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+accessibility@3.1.1_react@19.2.4/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js": /*!************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@dnd-kit+accessibility@3.1.1_react@19.2.4/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js ***! \************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ HiddenText: () => (/* binding */ HiddenText),\n/* harmony export */ LiveRegion: () => (/* binding */ LiveRegion),\n/* harmony export */ useAnnouncement: () => (/* binding */ useAnnouncement)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nconst hiddenStyles = {\n display: 'none'\n};\nfunction HiddenText(_ref) {\n let {\n id,\n value\n } = _ref;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n id: id,\n style: hiddenStyles\n }, value);\n}\n\nfunction LiveRegion(_ref) {\n let {\n id,\n announcement,\n ariaLiveType = \"assertive\"\n } = _ref;\n // Hide element visually but keep it readable by screen readers\n const visuallyHidden = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(100%)',\n whiteSpace: 'nowrap'\n };\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n id: id,\n style: visuallyHidden,\n role: \"status\",\n \"aria-live\": ariaLiveType,\n \"aria-atomic\": true\n }, announcement);\n}\n\nfunction useAnnouncement() {\n const [announcement, setAnnouncement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');\n const announce = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => {\n if (value != null) {\n setAnnouncement(value);\n }\n }, []);\n return {\n announce,\n announcement\n };\n}\n\n\n//# sourceMappingURL=accessibility.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCthY2Nlc3NpYmlsaXR5QDMuMS4xX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvYWNjZXNzaWJpbGl0eS9kaXN0L2FjY2Vzc2liaWxpdHkuZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXFEOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixTQUFTLDBEQUFtQjtBQUM1QjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywwREFBbUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLDBDQUEwQywrQ0FBUTtBQUNsRCxtQkFBbUIsa0RBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRW1EO0FBQ25EIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K2FjY2Vzc2liaWxpdHlAMy4xLjFfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC9hY2Nlc3NpYmlsaXR5L2Rpc3QvYWNjZXNzaWJpbGl0eS5lc20uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgaGlkZGVuU3R5bGVzID0ge1xuICBkaXNwbGF5OiAnbm9uZSdcbn07XG5mdW5jdGlvbiBIaWRkZW5UZXh0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBpZCxcbiAgICB2YWx1ZVxuICB9ID0gX3JlZjtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGlkOiBpZCxcbiAgICBzdHlsZTogaGlkZGVuU3R5bGVzXG4gIH0sIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gTGl2ZVJlZ2lvbihfcmVmKSB7XG4gIGxldCB7XG4gICAgaWQsXG4gICAgYW5ub3VuY2VtZW50LFxuICAgIGFyaWFMaXZlVHlwZSA9IFwiYXNzZXJ0aXZlXCJcbiAgfSA9IF9yZWY7XG4gIC8vIEhpZGUgZWxlbWVudCB2aXN1YWxseSBidXQga2VlcCBpdCByZWFkYWJsZSBieSBzY3JlZW4gcmVhZGVyc1xuICBjb25zdCB2aXN1YWxseUhpZGRlbiA9IHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICB3aWR0aDogMSxcbiAgICBoZWlnaHQ6IDEsXG4gICAgbWFyZ2luOiAtMSxcbiAgICBib3JkZXI6IDAsXG4gICAgcGFkZGluZzogMCxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgY2xpcDogJ3JlY3QoMCAwIDAgMCknLFxuICAgIGNsaXBQYXRoOiAnaW5zZXQoMTAwJSknLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXG4gIH07XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBpZDogaWQsXG4gICAgc3R5bGU6IHZpc3VhbGx5SGlkZGVuLFxuICAgIHJvbGU6IFwic3RhdHVzXCIsXG4gICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmVUeXBlLFxuICAgIFwiYXJpYS1hdG9taWNcIjogdHJ1ZVxuICB9LCBhbm5vdW5jZW1lbnQpO1xufVxuXG5mdW5jdGlvbiB1c2VBbm5vdW5jZW1lbnQoKSB7XG4gIGNvbnN0IFthbm5vdW5jZW1lbnQsIHNldEFubm91bmNlbWVudF0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGFubm91bmNlID0gdXNlQ2FsbGJhY2sodmFsdWUgPT4ge1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBzZXRBbm5vdW5jZW1lbnQodmFsdWUpO1xuICAgIH1cbiAgfSwgW10pO1xuICByZXR1cm4ge1xuICAgIGFubm91bmNlLFxuICAgIGFubm91bmNlbWVudFxuICB9O1xufVxuXG5leHBvcnQgeyBIaWRkZW5UZXh0LCBMaXZlUmVnaW9uLCB1c2VBbm5vdW5jZW1lbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFjY2Vzc2liaWxpdHkuZXNtLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+accessibility@3.1.1_react@19.2.4/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@dnd-kit/core/dist/core.esm.js": /*!****************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@dnd-kit/core/dist/core.esm.js ***! \****************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AutoScrollActivator: () => (/* binding */ AutoScrollActivator),\n/* harmony export */ DndContext: () => (/* binding */ DndContext),\n/* harmony export */ DragOverlay: () => (/* binding */ DragOverlay),\n/* harmony export */ KeyboardCode: () => (/* binding */ KeyboardCode),\n/* harmony export */ KeyboardSensor: () => (/* binding */ KeyboardSensor),\n/* harmony export */ MeasuringFrequency: () => (/* binding */ MeasuringFrequency),\n/* harmony export */ MeasuringStrategy: () => (/* binding */ MeasuringStrategy),\n/* harmony export */ MouseSensor: () => (/* binding */ MouseSensor),\n/* harmony export */ PointerSensor: () => (/* binding */ PointerSensor),\n/* harmony export */ TouchSensor: () => (/* binding */ TouchSensor),\n/* harmony export */ TraversalOrder: () => (/* binding */ TraversalOrder),\n/* harmony export */ applyModifiers: () => (/* binding */ applyModifiers),\n/* harmony export */ closestCenter: () => (/* binding */ closestCenter),\n/* harmony export */ closestCorners: () => (/* binding */ closestCorners),\n/* harmony export */ defaultAnnouncements: () => (/* binding */ defaultAnnouncements),\n/* harmony export */ defaultCoordinates: () => (/* binding */ defaultCoordinates),\n/* harmony export */ defaultDropAnimation: () => (/* binding */ defaultDropAnimationConfiguration),\n/* harmony export */ defaultDropAnimationSideEffects: () => (/* binding */ defaultDropAnimationSideEffects),\n/* harmony export */ defaultKeyboardCoordinateGetter: () => (/* binding */ defaultKeyboardCoordinateGetter),\n/* harmony export */ defaultScreenReaderInstructions: () => (/* binding */ defaultScreenReaderInstructions),\n/* harmony export */ getClientRect: () => (/* binding */ getClientRect),\n/* harmony export */ getFirstCollision: () => (/* binding */ getFirstCollision),\n/* harmony export */ getScrollableAncestors: () => (/* binding */ getScrollableAncestors),\n/* harmony export */ pointerWithin: () => (/* binding */ pointerWithin),\n/* harmony export */ rectIntersection: () => (/* binding */ rectIntersection),\n/* harmony export */ useDndContext: () => (/* binding */ useDndContext),\n/* harmony export */ useDndMonitor: () => (/* binding */ useDndMonitor),\n/* harmony export */ useDraggable: () => (/* binding */ useDraggable),\n/* harmony export */ useDroppable: () => (/* binding */ useDroppable),\n/* harmony export */ useSensor: () => (/* binding */ useSensor),\n/* harmony export */ useSensors: () => (/* binding */ useSensors)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react-dom/index.js\");\n/* harmony import */ var _dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @dnd-kit/utilities */ \"(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.2.4/node_modules/@dnd-kit/utilities/dist/utilities.esm.js\");\n/* harmony import */ var _dnd_kit_accessibility__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @dnd-kit/accessibility */ \"(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+accessibility@3.1.1_react@19.2.4/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js\");\n\n\n\n\n\nconst DndMonitorContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);\n\nfunction useDndMonitor(listener) {\n const registerListener = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(DndMonitorContext);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!registerListener) {\n throw new Error('useDndMonitor must be used within a children of ');\n }\n\n const unsubscribe = registerListener(listener);\n return unsubscribe;\n }, [listener, registerListener]);\n}\n\nfunction useDndMonitorProvider() {\n const [listeners] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(() => new Set());\n const registerListener = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(listener => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }, [listeners]);\n const dispatch = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(_ref => {\n let {\n type,\n event\n } = _ref;\n listeners.forEach(listener => {\n var _listener$type;\n\n return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event);\n });\n }, [listeners]);\n return [dispatch, registerListener];\n}\n\nconst defaultScreenReaderInstructions = {\n draggable: \"\\n To pick up a draggable item, press the space bar.\\n While dragging, use the arrow keys to move the item.\\n Press space again to drop the item in its new position, or press escape to cancel.\\n \"\n};\nconst defaultAnnouncements = {\n onDragStart(_ref) {\n let {\n active\n } = _ref;\n return \"Picked up draggable item \" + active.id + \".\";\n },\n\n onDragOver(_ref2) {\n let {\n active,\n over\n } = _ref2;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was moved over droppable area \" + over.id + \".\";\n }\n\n return \"Draggable item \" + active.id + \" is no longer over a droppable area.\";\n },\n\n onDragEnd(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was dropped over droppable area \" + over.id;\n }\n\n return \"Draggable item \" + active.id + \" was dropped.\";\n },\n\n onDragCancel(_ref4) {\n let {\n active\n } = _ref4;\n return \"Dragging was cancelled. Draggable item \" + active.id + \" was dropped.\";\n }\n\n};\n\nfunction Accessibility(_ref) {\n let {\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions\n } = _ref;\n const {\n announce,\n announcement\n } = (0,_dnd_kit_accessibility__WEBPACK_IMPORTED_MODULE_3__.useAnnouncement)();\n const liveRegionId = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useUniqueId)(\"DndLiveRegion\");\n const [mounted, setMounted] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setMounted(true);\n }, []);\n useDndMonitor((0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n onDragStart(_ref2) {\n let {\n active\n } = _ref2;\n announce(announcements.onDragStart({\n active\n }));\n },\n\n onDragMove(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({\n active,\n over\n }));\n }\n },\n\n onDragOver(_ref4) {\n let {\n active,\n over\n } = _ref4;\n announce(announcements.onDragOver({\n active,\n over\n }));\n },\n\n onDragEnd(_ref5) {\n let {\n active,\n over\n } = _ref5;\n announce(announcements.onDragEnd({\n active,\n over\n }));\n },\n\n onDragCancel(_ref6) {\n let {\n active,\n over\n } = _ref6;\n announce(announcements.onDragCancel({\n active,\n over\n }));\n }\n\n }), [announce, announcements]));\n\n if (!mounted) {\n return null;\n }\n\n const markup = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dnd_kit_accessibility__WEBPACK_IMPORTED_MODULE_3__.HiddenText, {\n id: hiddenTextDescribedById,\n value: screenReaderInstructions.draggable\n }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_dnd_kit_accessibility__WEBPACK_IMPORTED_MODULE_3__.LiveRegion, {\n id: liveRegionId,\n announcement: announcement\n }));\n return container ? (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(markup, container) : markup;\n}\n\nvar Action;\n\n(function (Action) {\n Action[\"DragStart\"] = \"dragStart\";\n Action[\"DragMove\"] = \"dragMove\";\n Action[\"DragEnd\"] = \"dragEnd\";\n Action[\"DragCancel\"] = \"dragCancel\";\n Action[\"DragOver\"] = \"dragOver\";\n Action[\"RegisterDroppable\"] = \"registerDroppable\";\n Action[\"SetDroppableDisabled\"] = \"setDroppableDisabled\";\n Action[\"UnregisterDroppable\"] = \"unregisterDroppable\";\n})(Action || (Action = {}));\n\nfunction noop() {}\n\nfunction useSensor(sensor, options) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n sensor,\n options: options != null ? options : {}\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]);\n}\n\nfunction useSensors() {\n for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) {\n sensors[_key] = arguments[_key];\n }\n\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => [...sensors].filter(sensor => sensor != null), // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]);\n}\n\nconst defaultCoordinates = /*#__PURE__*/Object.freeze({\n x: 0,\n y: 0\n});\n\n/**\r\n * Returns the distance between two points\r\n */\nfunction distanceBetween(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\nfunction getRelativeTransformOrigin(event, rect) {\n const eventCoordinates = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getEventCoordinates)(event);\n\n if (!eventCoordinates) {\n return '0 0';\n }\n\n const transformOrigin = {\n x: (eventCoordinates.x - rect.left) / rect.width * 100,\n y: (eventCoordinates.y - rect.top) / rect.height * 100\n };\n return transformOrigin.x + \"% \" + transformOrigin.y + \"%\";\n}\n\n/**\r\n * Sort collisions from smallest to greatest value\r\n */\nfunction sortCollisionsAsc(_ref, _ref2) {\n let {\n data: {\n value: a\n }\n } = _ref;\n let {\n data: {\n value: b\n }\n } = _ref2;\n return a - b;\n}\n/**\r\n * Sort collisions from greatest to smallest value\r\n */\n\nfunction sortCollisionsDesc(_ref3, _ref4) {\n let {\n data: {\n value: a\n }\n } = _ref3;\n let {\n data: {\n value: b\n }\n } = _ref4;\n return b - a;\n}\n/**\r\n * Returns the coordinates of the corners of a given rectangle:\r\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\r\n */\n\nfunction cornersOfRectangle(_ref5) {\n let {\n left,\n top,\n height,\n width\n } = _ref5;\n return [{\n x: left,\n y: top\n }, {\n x: left + width,\n y: top\n }, {\n x: left,\n y: top + height\n }, {\n x: left + width,\n y: top + height\n }];\n}\nfunction getFirstCollision(collisions, property) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n return property ? firstCollision[property] : firstCollision;\n}\n\n/**\r\n * Returns the coordinates of the center of a given ClientRect\r\n */\n\nfunction centerOfRectangle(rect, left, top) {\n if (left === void 0) {\n left = rect.left;\n }\n\n if (top === void 0) {\n top = rect.top;\n }\n\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5\n };\n}\n/**\r\n * Returns the closest rectangles from an array of rectangles to the center of a given\r\n * rectangle.\r\n */\n\n\nconst closestCenter = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: distBetween\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the closest rectangles from an array of rectangles to the corners of\r\n * another rectangle.\r\n */\n\nconst closestCorners = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const corners = cornersOfRectangle(collisionRect);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const rectCorners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner, index) => {\n return accumulator + distanceBetween(rectCorners[index], corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the intersecting rectangle area between two rectangles\r\n */\n\nfunction getIntersectionRatio(entry, target) {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea);\n return Number(intersectionRatio.toFixed(4));\n } // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n\n\n return 0;\n}\n/**\r\n * Returns the rectangles that has the greatest intersection area with a given\r\n * rectangle in an array of rectangles.\r\n */\n\nconst rectIntersection = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: intersectionRatio\n }\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n\n/**\r\n * Check if a given point is contained within a bounding rectangle\r\n */\n\nfunction isPointWithinRect(point, rect) {\n const {\n top,\n left,\n bottom,\n right\n } = rect;\n return top <= point.y && point.y <= bottom && left <= point.x && point.x <= right;\n}\n/**\r\n * Returns the rectangles that the pointer is hovering over\r\n */\n\n\nconst pointerWithin = _ref => {\n let {\n droppableContainers,\n droppableRects,\n pointerCoordinates\n } = _ref;\n\n if (!pointerCoordinates) {\n return [];\n }\n\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect && isPointWithinRect(pointerCoordinates, rect)) {\n /* There may be more than a single rectangle intersecting\r\n * with the pointer coordinates. In order to sort the\r\n * colliding rectangles, we measure the distance between\r\n * the pointer and the corners of the intersecting rectangle\r\n */\n const corners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner) => {\n return accumulator + distanceBetween(pointerCoordinates, corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\nfunction adjustScale(transform, rect1, rect2) {\n return { ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1\n };\n}\n\nfunction getRectDelta(rect1, rect2) {\n return rect1 && rect2 ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top\n } : defaultCoordinates;\n}\n\nfunction createRectAdjustmentFn(modifier) {\n return function adjustClientRect(rect) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((acc, adjustment) => ({ ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x\n }), { ...rect\n });\n };\n}\nconst getAdjustedRect = /*#__PURE__*/createRectAdjustmentFn(1);\n\nfunction parseTransform(transform) {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5]\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3]\n };\n }\n\n return null;\n}\n\nfunction inverseTransform(rect, transform, transformOrigin) {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {\n scaleX,\n scaleY,\n x: translateX,\n y: translateY\n } = parsedTransform;\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x\n };\n}\n\nconst defaultOptions = {\n ignoreTransform: false\n};\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n */\n\nfunction getClientRect(element, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n let rect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {\n transform,\n transformOrigin\n } = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {\n top,\n left,\n width,\n height,\n bottom,\n right\n } = rect;\n return {\n top,\n left,\n width,\n height,\n bottom,\n right\n };\n}\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n *\r\n * @remarks\r\n * The ClientRect returned by this method does not take into account transforms\r\n * applied to the element it measures.\r\n *\r\n */\n\nfunction getTransformAgnosticClientRect(element) {\n return getClientRect(element, {\n ignoreTransform: true\n });\n}\n\nfunction getWindowClientRect(element) {\n const width = element.innerWidth;\n const height = element.innerHeight;\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height\n };\n}\n\nfunction isFixed(node, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(node).getComputedStyle(node);\n }\n\n return computedStyle.position === 'fixed';\n}\n\nfunction isScrollable(element, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(element).getComputedStyle(element);\n }\n\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n return properties.some(property => {\n const value = computedStyle[property];\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n\nfunction getScrollableAncestors(element, limit) {\n const scrollParents = [];\n\n function findScrollableAncestors(node) {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isDocument)(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) {\n scrollParents.push(node.scrollingElement);\n return scrollParents;\n }\n\n if (!(0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(node) || (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isSVGElement)(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\nfunction getFirstScrollableAncestor(node) {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n return firstScrollableAncestor != null ? firstScrollableAncestor : null;\n}\n\nfunction getScrollableElement(element) {\n if (!_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.canUseDOM || !element) {\n return null;\n }\n\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isWindow)(element)) {\n return element;\n }\n\n if (!(0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isNode)(element)) {\n return null;\n }\n\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isDocument)(element) || element === (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getOwnerDocument)(element).scrollingElement) {\n return window;\n }\n\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(element)) {\n return element;\n }\n\n return null;\n}\n\nfunction getScrollXCoordinate(element) {\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isWindow)(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\nfunction getScrollYCoordinate(element) {\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isWindow)(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\nfunction getScrollCoordinates(element) {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element)\n };\n}\n\nvar Direction;\n\n(function (Direction) {\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n\nfunction isDocumentScrollingElement(element) {\n if (!_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n\nfunction getScrollPosition(scrollingContainer) {\n const minScroll = {\n x: 0,\n y: 0\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer) ? {\n height: window.innerHeight,\n width: window.innerWidth\n } : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height\n };\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll\n };\n}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2\n};\nfunction getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) {\n let {\n top,\n left,\n right,\n bottom\n } = _ref;\n\n if (acceleration === void 0) {\n acceleration = 10;\n }\n\n if (thresholdPercentage === void 0) {\n thresholdPercentage = defaultThreshold;\n }\n\n const {\n isTop,\n isBottom,\n isLeft,\n isRight\n } = getScrollPosition(scrollContainer);\n const direction = {\n x: 0,\n y: 0\n };\n const speed = {\n x: 0,\n y: 0\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height);\n } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height);\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width);\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width);\n }\n\n return {\n direction,\n speed\n };\n}\n\nfunction getScrollElementRect(element) {\n if (element === document.scrollingElement) {\n const {\n innerWidth,\n innerHeight\n } = window;\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight\n };\n }\n\n const {\n top,\n left,\n right,\n bottom\n } = element.getBoundingClientRect();\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getScrollOffsets(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.add)(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\nfunction getScrollXOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\nfunction getScrollYOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n\nfunction scrollIntoViewIfNeeded(element, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n if (!element) {\n return;\n }\n\n const {\n top,\n left,\n bottom,\n right\n } = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center'\n });\n }\n}\n\nconst properties = [['x', ['left', 'right'], getScrollXOffset], ['y', ['top', 'bottom'], getScrollYOffset]];\nclass Rect {\n constructor(rect, element) {\n this.rect = void 0;\n this.width = void 0;\n this.height = void 0;\n this.top = void 0;\n this.bottom = void 0;\n this.right = void 0;\n this.left = void 0;\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n this.rect = { ...rect\n };\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {\n enumerable: false\n });\n }\n\n}\n\nclass Listeners {\n constructor(target) {\n this.target = void 0;\n this.listeners = [];\n\n this.removeAll = () => {\n this.listeners.forEach(listener => {\n var _this$target;\n\n return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener);\n });\n };\n\n this.target = target;\n }\n\n add(eventName, handler, options) {\n var _this$target2;\n\n (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options);\n this.listeners.push([eventName, handler, options]);\n }\n\n}\n\nfunction getEventListenerTarget(target) {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n const {\n EventTarget\n } = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(target);\n return target instanceof EventTarget ? target : (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getOwnerDocument)(target);\n}\n\nfunction hasExceededDistance(delta, measurement) {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n\nvar EventName;\n\n(function (EventName) {\n EventName[\"Click\"] = \"click\";\n EventName[\"DragStart\"] = \"dragstart\";\n EventName[\"Keydown\"] = \"keydown\";\n EventName[\"ContextMenu\"] = \"contextmenu\";\n EventName[\"Resize\"] = \"resize\";\n EventName[\"SelectionChange\"] = \"selectionchange\";\n EventName[\"VisibilityChange\"] = \"visibilitychange\";\n})(EventName || (EventName = {}));\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n}\n\nvar KeyboardCode;\n\n(function (KeyboardCode) {\n KeyboardCode[\"Space\"] = \"Space\";\n KeyboardCode[\"Down\"] = \"ArrowDown\";\n KeyboardCode[\"Right\"] = \"ArrowRight\";\n KeyboardCode[\"Left\"] = \"ArrowLeft\";\n KeyboardCode[\"Up\"] = \"ArrowUp\";\n KeyboardCode[\"Esc\"] = \"Escape\";\n KeyboardCode[\"Enter\"] = \"Enter\";\n KeyboardCode[\"Tab\"] = \"Tab\";\n})(KeyboardCode || (KeyboardCode = {}));\n\nconst defaultKeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab]\n};\nconst defaultKeyboardCoordinateGetter = (event, _ref) => {\n let {\n currentCoordinates\n } = _ref;\n\n switch (event.code) {\n case KeyboardCode.Right:\n return { ...currentCoordinates,\n x: currentCoordinates.x + 25\n };\n\n case KeyboardCode.Left:\n return { ...currentCoordinates,\n x: currentCoordinates.x - 25\n };\n\n case KeyboardCode.Down:\n return { ...currentCoordinates,\n y: currentCoordinates.y + 25\n };\n\n case KeyboardCode.Up:\n return { ...currentCoordinates,\n y: currentCoordinates.y - 25\n };\n }\n\n return undefined;\n};\n\nclass KeyboardSensor {\n constructor(props) {\n this.props = void 0;\n this.autoScrollEnabled = false;\n this.referenceCoordinates = void 0;\n this.listeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n const {\n event: {\n target\n }\n } = props;\n this.props = props;\n this.listeners = new Listeners((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getOwnerDocument)(target));\n this.windowListeners = new Listeners((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.attach();\n }\n\n attach() {\n this.handleStart();\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n handleStart() {\n const {\n activeNode,\n onStart\n } = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n handleKeyDown(event) {\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isKeyboardEvent)(event)) {\n const {\n active,\n context,\n options\n } = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth'\n } = options;\n const {\n code\n } = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {\n collisionRect\n } = context.current;\n const currentCoordinates = collisionRect ? {\n x: collisionRect.left,\n y: collisionRect.top\n } : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates\n });\n\n if (newCoordinates) {\n const coordinatesDelta = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.subtract)(newCoordinates, currentCoordinates);\n const scrollDelta = {\n x: 0,\n y: 0\n };\n const {\n scrollableAncestors\n } = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {\n isTop,\n isRight,\n isLeft,\n isBottom,\n maxScroll,\n minScroll\n } = getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n const clampedCoordinates = {\n x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)),\n y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y))\n };\n const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft;\n const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop;\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior\n });\n }\n\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior\n });\n }\n\n break;\n }\n }\n\n this.handleMove(event, (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.add)((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.subtract)(newCoordinates, this.referenceCoordinates), scrollDelta));\n }\n }\n }\n\n handleMove(event, coordinates) {\n const {\n onMove\n } = this.props;\n event.preventDefault();\n onMove(coordinates);\n }\n\n handleEnd(event) {\n const {\n onEnd\n } = this.props;\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n handleCancel(event) {\n const {\n onCancel\n } = this.props;\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n}\nKeyboardSensor.activators = [{\n eventName: 'onKeyDown',\n handler: (event, _ref, _ref2) => {\n let {\n keyboardCodes = defaultKeyboardCodes,\n onActivation\n } = _ref;\n let {\n active\n } = _ref2;\n const {\n code\n } = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n onActivation == null ? void 0 : onActivation({\n event: event.nativeEvent\n });\n return true;\n }\n\n return false;\n }\n}];\n\nfunction isDistanceConstraint(constraint) {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(constraint) {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nclass AbstractPointerSensor {\n constructor(props, events, listenerTarget) {\n var _getEventCoordinates;\n\n if (listenerTarget === void 0) {\n listenerTarget = getEventListenerTarget(props.event.target);\n }\n\n this.props = void 0;\n this.events = void 0;\n this.autoScrollEnabled = true;\n this.document = void 0;\n this.activated = false;\n this.initialCoordinates = void 0;\n this.timeoutId = null;\n this.listeners = void 0;\n this.documentListeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n this.events = events;\n const {\n event\n } = props;\n const {\n target\n } = event;\n this.props = props;\n this.events = events;\n this.document = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getOwnerDocument)(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(target));\n this.initialCoordinates = (_getEventCoordinates = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getEventCoordinates)(event)) != null ? _getEventCoordinates : defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n this.attach();\n }\n\n attach() {\n const {\n events,\n props: {\n options: {\n activationConstraint,\n bypassActivationConstraint\n }\n }\n } = this;\n this.listeners.add(events.move.name, this.handleMove, {\n passive: false\n });\n this.listeners.add(events.end.name, this.handleEnd);\n\n if (events.cancel) {\n this.listeners.add(events.cancel.name, this.handleCancel);\n }\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (bypassActivationConstraint != null && bypassActivationConstraint({\n event: this.props.event,\n activeNode: this.props.activeNode,\n options: this.props.options\n })) {\n return this.handleStart();\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay);\n this.handlePending(activationConstraint);\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n this.handlePending(activationConstraint);\n return;\n }\n }\n\n this.handleStart();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll(); // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n handlePending(constraint, offset) {\n const {\n active,\n onPending\n } = this.props;\n onPending(active, constraint, this.initialCoordinates, offset);\n }\n\n handleStart() {\n const {\n initialCoordinates\n } = this;\n const {\n onStart\n } = this.props;\n\n if (initialCoordinates) {\n this.activated = true; // Stop propagation of click events once activation constraints are met\n\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true\n }); // Remove any text selection from the document\n\n this.removeTextSelection(); // Prevent further text selection while dragging\n\n this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection);\n onStart(initialCoordinates);\n }\n }\n\n handleMove(event) {\n var _getEventCoordinates2;\n\n const {\n activated,\n initialCoordinates,\n props\n } = this;\n const {\n onMove,\n options: {\n activationConstraint\n }\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = (_getEventCoordinates2 = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getEventCoordinates)(event)) != null ? _getEventCoordinates2 : defaultCoordinates;\n const delta = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.subtract)(initialCoordinates, coordinates); // Constraint validation\n\n if (!activated && activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n }\n\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n }\n\n this.handlePending(activationConstraint, delta);\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n handleEnd() {\n const {\n onAbort,\n onEnd\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onEnd();\n }\n\n handleCancel() {\n const {\n onAbort,\n onCancel\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onCancel();\n }\n\n handleKeydown(event) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n removeTextSelection() {\n var _this$document$getSel;\n\n (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges();\n }\n\n}\n\nconst events = {\n cancel: {\n name: 'pointercancel'\n },\n move: {\n name: 'pointermove'\n },\n end: {\n name: 'pointerup'\n }\n};\nclass PointerSensor extends AbstractPointerSensor {\n constructor(props) {\n const {\n event\n } = props; // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n\n const listenerTarget = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getOwnerDocument)(event.target);\n super(props, events, listenerTarget);\n }\n\n}\nPointerSensor.activators = [{\n eventName: 'onPointerDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$1 = {\n move: {\n name: 'mousemove'\n },\n end: {\n name: 'mouseup'\n }\n};\nvar MouseButton;\n\n(function (MouseButton) {\n MouseButton[MouseButton[\"RightClick\"] = 2] = \"RightClick\";\n})(MouseButton || (MouseButton = {}));\n\nclass MouseSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$1, (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getOwnerDocument)(props.event.target));\n }\n\n}\nMouseSensor.activators = [{\n eventName: 'onMouseDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$2 = {\n cancel: {\n name: 'touchcancel'\n },\n move: {\n name: 'touchmove'\n },\n end: {\n name: 'touchend'\n }\n};\nclass TouchSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$2);\n }\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events$2.move.name, noop, {\n capture: false,\n passive: false\n });\n return function teardown() {\n window.removeEventListener(events$2.move.name, noop);\n }; // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n\n function noop() {}\n }\n\n}\nTouchSensor.activators = [{\n eventName: 'onTouchStart',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n const {\n touches\n } = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nvar AutoScrollActivator;\n\n(function (AutoScrollActivator) {\n AutoScrollActivator[AutoScrollActivator[\"Pointer\"] = 0] = \"Pointer\";\n AutoScrollActivator[AutoScrollActivator[\"DraggableRect\"] = 1] = \"DraggableRect\";\n})(AutoScrollActivator || (AutoScrollActivator = {}));\n\nvar TraversalOrder;\n\n(function (TraversalOrder) {\n TraversalOrder[TraversalOrder[\"TreeOrder\"] = 0] = \"TreeOrder\";\n TraversalOrder[TraversalOrder[\"ReversedTreeOrder\"] = 1] = \"ReversedTreeOrder\";\n})(TraversalOrder || (TraversalOrder = {}));\n\nfunction useAutoScroller(_ref) {\n let {\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold\n } = _ref;\n const scrollIntent = useScrollIntent({\n delta,\n disabled: !enabled\n });\n const [setAutoScrollInterval, clearAutoScrollInterval] = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useInterval)();\n const scrollSpeed = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n x: 0,\n y: 0\n });\n const scrollDirection = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n x: 0,\n y: 0\n });\n const rect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x\n } : null;\n\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const autoScroll = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {\n direction,\n speed\n } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold);\n\n for (const axis of ['x', 'y']) {\n if (!scrollIntent[axis][direction[axis]]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n return;\n }\n }\n\n scrollSpeed.current = {\n x: 0,\n y: 0\n };\n scrollDirection.current = {\n x: 0,\n y: 0\n };\n clearAutoScrollInterval();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [acceleration, autoScroll, canScroll, clearAutoScrollInterval, enabled, interval, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect), // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent), setAutoScrollInterval, scrollableAncestors, sortedScrollableAncestors, scrollableAncestorRects, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold)]);\n}\nconst defaultScrollIntent = {\n x: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n },\n y: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n }\n};\n\nfunction useScrollIntent(_ref2) {\n let {\n delta,\n disabled\n } = _ref2;\n const previousDelta = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.usePrevious)(delta);\n return (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLazyMemo)(previousIntent => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y)\n }; // Keep track of the user intent to scroll in each direction for both axis\n\n return {\n x: {\n [Direction.Backward]: previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]: previousIntent.x[Direction.Forward] || direction.x === 1\n },\n y: {\n [Direction.Backward]: previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]: previousIntent.y[Direction.Forward] || direction.y === 1\n }\n };\n }, [disabled, delta, previousDelta]);\n}\n\nfunction useCachedNode(draggableNodes, id) {\n const draggableNode = id != null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n return (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLazyMemo)(cachedNode => {\n var _ref;\n\n if (id == null) {\n return null;\n } // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n\n\n return (_ref = node != null ? node : cachedNode) != null ? _ref : null;\n }, [node, id]);\n}\n\nfunction useCombineActivators(sensors, getSyntheticHandler) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => sensors.reduce((accumulator, sensor) => {\n const {\n sensor: Sensor\n } = sensor;\n const sensorActivators = Sensor.activators.map(activator => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor)\n }));\n return [...accumulator, ...sensorActivators];\n }, []), [sensors, getSyntheticHandler]);\n}\n\nvar MeasuringStrategy;\n\n(function (MeasuringStrategy) {\n MeasuringStrategy[MeasuringStrategy[\"Always\"] = 0] = \"Always\";\n MeasuringStrategy[MeasuringStrategy[\"BeforeDragging\"] = 1] = \"BeforeDragging\";\n MeasuringStrategy[MeasuringStrategy[\"WhileDragging\"] = 2] = \"WhileDragging\";\n})(MeasuringStrategy || (MeasuringStrategy = {}));\n\nvar MeasuringFrequency;\n\n(function (MeasuringFrequency) {\n MeasuringFrequency[\"Optimized\"] = \"optimized\";\n})(MeasuringFrequency || (MeasuringFrequency = {}));\n\nconst defaultValue = /*#__PURE__*/new Map();\nfunction useDroppableMeasuring(containers, _ref) {\n let {\n dragging,\n dependencies,\n config\n } = _ref;\n const [queue, setQueue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const {\n frequency,\n measure,\n strategy\n } = config;\n const containersRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(containers);\n const disabled = isDisabled();\n const disabledRef = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLatestValue)(disabled);\n const measureDroppableContainers = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function (ids) {\n if (ids === void 0) {\n ids = [];\n }\n\n if (disabledRef.current) {\n return;\n }\n\n setQueue(value => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter(id => !value.includes(id)));\n });\n }, [disabledRef]);\n const timeoutId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const droppableRects = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLazyMemo)(previousValue => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || queue != null) {\n const map = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (queue && queue.length > 0 && !queue.includes(container.id) && container.rect.current) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n }, [containers, queue, dragging, disabled, measure]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n containersRef.current = containers;\n }, [containers]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (disabled || typeof frequency !== 'number' || timeoutId.current !== null) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]);\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n\n default:\n return !dragging;\n }\n }\n}\n\nfunction useInitialValue(value, computeFn) {\n return (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLazyMemo)(previousValue => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n }, [computeFn, value]);\n}\n\nfunction useInitialRect(node, measure) {\n return useInitialValue(node, measure);\n}\n\n/**\r\n * Returns a new MutationObserver instance.\r\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useMutationObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleMutations = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useEvent)(callback);\n const mutationObserver = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (disabled || typeof window === 'undefined' || typeof window.MutationObserver === 'undefined') {\n return undefined;\n }\n\n const {\n MutationObserver\n } = window;\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n return () => mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }, [mutationObserver]);\n return mutationObserver;\n}\n\n/**\r\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\r\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useResizeObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleResize = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useEvent)(callback);\n const resizeObserver = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (disabled || typeof window === 'undefined' || typeof window.ResizeObserver === 'undefined') {\n return undefined;\n }\n\n const {\n ResizeObserver\n } = window;\n return new ResizeObserver(handleResize);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n return () => resizeObserver == null ? void 0 : resizeObserver.disconnect();\n }, [resizeObserver]);\n return resizeObserver;\n}\n\nfunction defaultMeasure(element) {\n return new Rect(getClientRect(element), element);\n}\n\nfunction useRect(element, measure, fallbackRect) {\n if (measure === void 0) {\n measure = defaultMeasure;\n }\n\n const [rect, setRect] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n\n function measureRect() {\n setRect(currentRect => {\n if (!element) {\n return null;\n }\n\n if (element.isConnected === false) {\n var _ref;\n\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null;\n }\n\n const newRect = measure(element);\n\n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n\n return newRect;\n });\n }\n\n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {\n type,\n target\n } = record;\n\n if (type === 'childList' && target instanceof HTMLElement && target.contains(element)) {\n measureRect();\n break;\n }\n }\n }\n\n });\n const resizeObserver = useResizeObserver({\n callback: measureRect\n });\n (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useIsomorphicLayoutEffect)(() => {\n measureRect();\n\n if (element) {\n resizeObserver == null ? void 0 : resizeObserver.observe(element);\n mutationObserver == null ? void 0 : mutationObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n } else {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }\n }, [element]);\n return rect;\n}\n\nfunction useRectDelta(rect) {\n const initialRect = useInitialValue(rect);\n return getRectDelta(rect, initialRect);\n}\n\nconst defaultValue$1 = [];\nfunction useScrollableAncestors(node) {\n const previousNode = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(node);\n const ancestors = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLazyMemo)(previousValue => {\n if (!node) {\n return defaultValue$1;\n }\n\n if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n }, [node]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n previousNode.current = node;\n }, [node]);\n return ancestors;\n}\n\nfunction useScrollOffsets(elements) {\n const [scrollCoordinates, setScrollCoordinates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const prevElements = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(elements); // To-do: Throttle the handleScroll callback\n\n const handleScroll = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(event => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates(scrollCoordinates => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(scrollingElement, getScrollCoordinates(scrollingElement));\n return new Map(scrollCoordinates);\n });\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n const entries = elements.map(element => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true\n });\n return [scrollableElement, getScrollCoordinates(scrollableElement)];\n }\n\n return null;\n }).filter(entry => entry != null);\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements) {\n elements.forEach(element => {\n const scrollableElement = getScrollableElement(element);\n scrollableElement == null ? void 0 : scrollableElement.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (elements.length) {\n return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.add)(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n\nfunction useScrollOffsetsDelta(scrollOffsets, dependencies) {\n if (dependencies === void 0) {\n dependencies = [];\n }\n\n const initialScrollOffsets = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initialScrollOffsets.current = null;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n return initialScrollOffsets.current ? (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.subtract)(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates;\n}\n\nfunction useSensorSetup(sensors) {\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(_ref => {\n let {\n sensor\n } = _ref;\n return sensor.setup == null ? void 0 : sensor.setup();\n });\n return () => {\n for (const teardown of teardownFns) {\n teardown == null ? void 0 : teardown();\n }\n };\n }, // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(_ref2 => {\n let {\n sensor\n } = _ref2;\n return sensor;\n }));\n}\n\nfunction useSyntheticListeners(listeners, id) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return listeners.reduce((acc, _ref) => {\n let {\n eventName,\n handler\n } = _ref;\n\n acc[eventName] = event => {\n handler(event, id);\n };\n\n return acc;\n }, {});\n }, [listeners, id]);\n}\n\nfunction useWindowRect(element) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => element ? getWindowClientRect(element) : null, [element]);\n}\n\nconst defaultValue$2 = [];\nfunction useRects(elements, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n const [firstElement] = elements;\n const windowRect = useWindowRect(firstElement ? (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(firstElement) : null);\n const [rects, setRects] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(defaultValue$2);\n\n function measureRects() {\n setRects(() => {\n if (!elements.length) {\n return defaultValue$2;\n }\n\n return elements.map(element => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element));\n });\n }\n\n const resizeObserver = useResizeObserver({\n callback: measureRects\n });\n (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useIsomorphicLayoutEffect)(() => {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n measureRects();\n elements.forEach(element => resizeObserver == null ? void 0 : resizeObserver.observe(element));\n }, [elements]);\n return rects;\n}\n\nfunction getMeasurableNode(node) {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n\n const firstChild = node.children[0];\n return (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(firstChild) ? firstChild : node;\n}\n\nfunction useDragOverlayMeasuring(_ref) {\n let {\n measure\n } = _ref;\n const [rect, setRect] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const handleResize = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(entries => {\n for (const {\n target\n } of entries) {\n if ((0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(target)) {\n setRect(rect => {\n const newRect = measure(target);\n return rect ? { ...rect,\n width: newRect.width,\n height: newRect.height\n } : newRect;\n });\n break;\n }\n }\n }, [measure]);\n const resizeObserver = useResizeObserver({\n callback: handleResize\n });\n const handleNodeChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(element => {\n const node = getMeasurableNode(element);\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n\n if (node) {\n resizeObserver == null ? void 0 : resizeObserver.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n }, [measure, resizeObserver]);\n const [nodeRef, setRef] = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useNodeRef)(handleNodeChange);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n nodeRef,\n rect,\n setRef\n }), [rect, nodeRef, setRef]);\n}\n\nconst defaultSensors = [{\n sensor: PointerSensor,\n options: {}\n}, {\n sensor: KeyboardSensor,\n options: {}\n}];\nconst defaultData = {\n current: {}\n};\nconst defaultMeasuringConfiguration = {\n draggable: {\n measure: getTransformAgnosticClientRect\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized\n },\n dragOverlay: {\n measure: getClientRect\n }\n};\n\nclass DroppableContainersMap extends Map {\n get(id) {\n var _super$get;\n\n return id != null ? (_super$get = super.get(id)) != null ? _super$get : undefined : undefined;\n }\n\n toArray() {\n return Array.from(this.values());\n }\n\n getEnabled() {\n return this.toArray().filter(_ref => {\n let {\n disabled\n } = _ref;\n return !disabled;\n });\n }\n\n getNodeFor(id) {\n var _this$get$node$curren, _this$get;\n\n return (_this$get$node$curren = (_this$get = this.get(id)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : undefined;\n }\n\n}\n\nconst defaultPublicContext = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: /*#__PURE__*/new Map(),\n droppableRects: /*#__PURE__*/new Map(),\n droppableContainers: /*#__PURE__*/new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null\n },\n rect: null,\n setRef: noop\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false\n};\nconst defaultInternalContext = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: ''\n },\n dispatch: noop,\n draggableNodes: /*#__PURE__*/new Map(),\n over: null,\n measureDroppableContainers: noop\n};\nconst InternalContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(defaultInternalContext);\nconst PublicContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(defaultPublicContext);\n\nfunction getInitialState() {\n return {\n draggable: {\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n nodes: new Map(),\n translate: {\n x: 0,\n y: 0\n }\n },\n droppable: {\n containers: new DroppableContainersMap()\n }\n };\n}\nfunction reducer(state, action) {\n switch (action.type) {\n case Action.DragStart:\n return { ...state,\n draggable: { ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active\n }\n };\n\n case Action.DragMove:\n if (state.draggable.active == null) {\n return state;\n }\n\n return { ...state,\n draggable: { ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y\n }\n }\n };\n\n case Action.DragEnd:\n case Action.DragCancel:\n return { ...state,\n draggable: { ...state.draggable,\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n translate: {\n x: 0,\n y: 0\n }\n }\n };\n\n case Action.RegisterDroppable:\n {\n const {\n element\n } = action;\n const {\n id\n } = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.SetDroppableDisabled:\n {\n const {\n id,\n key,\n disabled\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, { ...element,\n disabled\n });\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.UnregisterDroppable:\n {\n const {\n id,\n key\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n default:\n {\n return state;\n }\n }\n}\n\nfunction RestoreFocus(_ref) {\n let {\n disabled\n } = _ref;\n const {\n active,\n activatorEvent,\n draggableNodes\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(InternalContext);\n const previousActivatorEvent = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.usePrevious)(activatorEvent);\n const previousActiveId = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.usePrevious)(active == null ? void 0 : active.id); // Restore keyboard focus on the activator node\n\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!(0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isKeyboardEvent)(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n activatorNode,\n node\n } = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.findFirstFocusableNode)(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]);\n return null;\n}\n\nfunction applyModifiers(modifiers, _ref) {\n let {\n transform,\n ...args\n } = _ref;\n return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args\n });\n }, transform) : transform;\n}\n\nfunction useMeasuringConfiguration(config) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n draggable: { ...defaultMeasuringConfiguration.draggable,\n ...(config == null ? void 0 : config.draggable)\n },\n droppable: { ...defaultMeasuringConfiguration.droppable,\n ...(config == null ? void 0 : config.droppable)\n },\n dragOverlay: { ...defaultMeasuringConfiguration.dragOverlay,\n ...(config == null ? void 0 : config.dragOverlay)\n }\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay]);\n}\n\nfunction useLayoutShiftScrollCompensation(_ref) {\n let {\n activeNode,\n measure,\n initialRect,\n config = true\n } = _ref;\n const initialized = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const {\n x,\n y\n } = typeof config === 'boolean' ? {\n x: config,\n y: config\n } : config;\n (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useIsomorphicLayoutEffect)(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n } // Get the most up to date node ref for the active draggable\n\n\n const node = activeNode == null ? void 0 : activeNode.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n } // Only perform layout shift scroll compensation once\n\n\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n\nconst ActiveDraggableContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({ ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1\n});\nvar Status;\n\n(function (Status) {\n Status[Status[\"Uninitialized\"] = 0] = \"Uninitialized\";\n Status[Status[\"Initializing\"] = 1] = \"Initializing\";\n Status[Status[\"Initialized\"] = 2] = \"Initialized\";\n})(Status || (Status = {}));\n\nconst DndContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function DndContext(_ref) {\n var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect;\n\n let {\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n } = _ref;\n const store = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider();\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {\n active: activeId,\n nodes: draggableNodes,\n translate\n },\n droppable: {\n containers: droppableContainers\n }\n } = state;\n const node = activeId != null ? draggableNodes.get(activeId) : null;\n const activeRects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n initial: null,\n translated: null\n });\n const active = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n var _node$data;\n\n return activeId != null ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData,\n rect: activeRects\n } : null;\n }, [activeId, node]);\n const activeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const [activeSensor, setActiveSensor] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [activatorEvent, setActivatorEvent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const latestProps = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLatestValue)(props, Object.values(props));\n const draggableDescribedById = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useUniqueId)(\"DndDescribedBy\", id);\n const enabledDroppableContainers = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => droppableContainers.getEnabled(), [droppableContainers]);\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled\n } = useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => activatorEvent ? (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getEventCoordinates)(activatorEvent) : null, [activatorEvent]);\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure);\n useLayoutShiftScrollCompensation({\n activeNode: activeId != null ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure\n });\n const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect);\n const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null);\n const sensorContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null\n });\n const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id);\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure\n }); // Use the rect of the drag overlay if it is mounted\n\n const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode;\n const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null;\n const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); // Get the window rect of the dragging node\n\n const windowRect = useWindowRect(draggingNode ? (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(draggingNode) : null); // Get scrollable ancestors of the dragging node\n\n const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null);\n const scrollableAncestorRects = useRects(scrollableAncestors); // Apply modifiers\n\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n });\n const pointerCoordinates = activationCoordinates ? (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.add)(activationCoordinates, translate) : null;\n const scrollOffsets = useScrollOffsets(scrollableAncestors); // Represents the scroll delta since dragging was initiated\n\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); // Represents the scroll delta since the last time the active node rect was measured\n\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]);\n const scrollAdjustedTranslate = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.add)(modifiedTranslate, scrollAdjustment);\n const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null;\n const collisions = active && collisionRect ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates\n }) : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); // When there is no drag overlay used, we need to account for the\n // window scroll delta\n\n const appliedTranslate = usesDragOverlay ? modifiedTranslate : (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.add)(modifiedTranslate, activeNodeScrollDelta);\n const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect);\n const activeSensorRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const instantiateSensor = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((event, _ref2) => {\n let {\n sensor: Sensor,\n options\n } = _ref2;\n\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n\n onAbort(id) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragAbort\n } = latestProps.current;\n const event = {\n id\n };\n onDragAbort == null ? void 0 : onDragAbort(event);\n dispatchMonitorEvent({\n type: 'onDragAbort',\n event\n });\n },\n\n onPending(id, constraint, initialCoordinates, offset) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragPending\n } = latestProps.current;\n const event = {\n id,\n constraint,\n initialCoordinates,\n offset\n };\n onDragPending == null ? void 0 : onDragPending(event);\n dispatchMonitorEvent({\n type: 'onDragPending',\n event\n });\n },\n\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragStart\n } = latestProps.current;\n const event = {\n activatorEvent,\n active: {\n id,\n data: draggableNode.data,\n rect: activeRects\n }\n };\n (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.unstable_batchedUpdates)(() => {\n onDragStart == null ? void 0 : onDragStart(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id\n });\n dispatchMonitorEvent({\n type: 'onDragStart',\n event\n });\n setActiveSensor(activeSensorRef.current);\n setActivatorEvent(activatorEvent);\n });\n },\n\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates\n });\n },\n\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel)\n });\n activeSensorRef.current = sensorInstance;\n\n function createHandler(type) {\n return async function handler() {\n const {\n active,\n collisions,\n over,\n scrollAdjustedTranslate\n } = sensorContext.current;\n let event = null;\n\n if (active && scrollAdjustedTranslate) {\n const {\n cancelDrop\n } = latestProps.current;\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.unstable_batchedUpdates)(() => {\n dispatch({\n type\n });\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n activeSensorRef.current = null;\n const eventName = type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n handler == null ? void 0 : handler(event);\n dispatchMonitorEvent({\n type: eventName,\n event\n });\n }\n });\n };\n }\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]);\n const bindActivatorToSensorInstantiator = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((handler, sensor) => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if ( // Another sensor is already instantiating\n activeRef.current !== null || // No active draggable\n !activeDraggableNode || // Event has already been captured\n nativeEvent.dndKit || nativeEvent.defaultPrevented) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode\n };\n const shouldActivate = handler(event, sensor.options, activationContext);\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor\n };\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n }, [draggableNodes, instantiateSensor]);\n const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator);\n useSensorSetup(sensors);\n (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useIsomorphicLayoutEffect)(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const {\n onDragMove\n } = latestProps.current;\n const {\n active,\n activatorEvent,\n collisions,\n over\n } = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.unstable_batchedUpdates)(() => {\n onDragMove == null ? void 0 : onDragMove(event);\n dispatchMonitorEvent({\n type: 'onDragMove',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate\n } = sensorContext.current;\n\n if (!active || activeRef.current == null || !activatorEvent || !scrollAdjustedTranslate) {\n return;\n }\n\n const {\n onDragOver\n } = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over = overContainer && overContainer.rect.current ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled\n } : null;\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.unstable_batchedUpdates)(() => {\n setOver(over);\n onDragOver == null ? void 0 : onDragOver(event);\n dispatchMonitorEvent({\n type: 'onDragOver',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]);\n (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useIsomorphicLayoutEffect)(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate\n };\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect\n };\n }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]);\n useAutoScroller({ ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects\n });\n const publicContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const context = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect\n };\n return context;\n }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]);\n const internalContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const context = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers\n };\n return context;\n }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]);\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DndMonitorContext.Provider, {\n value: registerMonitorListener\n }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InternalContext.Provider, {\n value: internalContext\n }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PublicContext.Provider, {\n value: publicContext\n }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ActiveDraggableContext.Provider, {\n value: transform\n }, children)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(RestoreFocus, {\n disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false\n })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Accessibility, { ...accessibility,\n hiddenTextDescribedById: draggableDescribedById\n }));\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false;\n const autoScrollGloballyDisabled = typeof autoScroll === 'object' ? autoScroll.enabled === false : autoScroll === false;\n const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return { ...autoScroll,\n enabled\n };\n }\n\n return {\n enabled\n };\n }\n});\n\nconst NullContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);\nconst defaultRole = 'button';\nconst ID_PREFIX = 'Draggable';\nfunction useDraggable(_ref) {\n let {\n id,\n data,\n disabled = false,\n attributes\n } = _ref;\n const key = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useUniqueId)(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0\n } = attributes != null ? attributes : {};\n const isDragging = (active == null ? void 0 : active.id) === id;\n const transform = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(isDragging ? ActiveDraggableContext : NullContext);\n const [node, setNodeRef] = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useNodeRef)();\n const [activatorNode, setActivatorNodeRef] = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useNodeRef)();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLatestValue)(data);\n (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useIsomorphicLayoutEffect)(() => {\n draggableNodes.set(id, {\n id,\n key,\n node,\n activatorNode,\n data: dataRef\n });\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]);\n const memoizedAttributes = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable\n }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]);\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform\n };\n}\n\nfunction useDndContext() {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(PublicContext);\n}\n\nconst ID_PREFIX$1 = 'Droppable';\nconst defaultResizeObserverConfig = {\n timeout: 25\n};\nfunction useDroppable(_ref) {\n let {\n data,\n disabled = false,\n id,\n resizeObserverConfig\n } = _ref;\n const key = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useUniqueId)(ID_PREFIX$1);\n const {\n active,\n dispatch,\n over,\n measureDroppableContainers\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(InternalContext);\n const previous = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n disabled\n });\n const resizeObserverConnected = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const rect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const callbackId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout\n } = { ...defaultResizeObserverConfig,\n ...resizeObserverConfig\n };\n const ids = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLatestValue)(updateMeasurementsFor != null ? updateMeasurementsFor : id);\n const handleResize = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(Array.isArray(ids.current) ? ids.current : [ids.current]);\n callbackId.current = null;\n }, resizeObserverTimeout);\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]);\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active\n });\n const handleNodeChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((newElement, previousElement) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n }, [resizeObserver]);\n const [nodeRef, setNodeRef] = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useNodeRef)(handleNodeChange);\n const dataRef = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useLatestValue)(data);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef\n }\n });\n return () => dispatch({\n type: Action.UnregisterDroppable,\n key,\n id\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled\n });\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n return {\n active,\n rect,\n isOver: (over == null ? void 0 : over.id) === id,\n node: nodeRef,\n over,\n setNodeRef\n };\n}\n\nfunction AnimationManager(_ref) {\n let {\n animation,\n children\n } = _ref;\n const [clonedChildren, setClonedChildren] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [element, setElement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const previousChildren = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.usePrevious)(children);\n\n if (!children && !clonedChildren && previousChildren) {\n setClonedChildren(previousChildren);\n }\n\n (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useIsomorphicLayoutEffect)(() => {\n if (!element) {\n return;\n }\n\n const key = clonedChildren == null ? void 0 : clonedChildren.key;\n const id = clonedChildren == null ? void 0 : clonedChildren.props.id;\n\n if (key == null || id == null) {\n setClonedChildren(null);\n return;\n }\n\n Promise.resolve(animation(id, element)).then(() => {\n setClonedChildren(null);\n });\n }, [animation, clonedChildren, element]);\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, children, clonedChildren ? (0,react__WEBPACK_IMPORTED_MODULE_0__.cloneElement)(clonedChildren, {\n ref: setElement\n }) : null);\n}\n\nconst defaultTransform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1\n};\nfunction NullifiedContextProvider(_ref) {\n let {\n children\n } = _ref;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InternalContext.Provider, {\n value: defaultInternalContext\n }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ActiveDraggableContext.Provider, {\n value: defaultTransform\n }, children));\n}\n\nconst baseStyles = {\n position: 'fixed',\n touchAction: 'none'\n};\n\nconst defaultTransition = activatorEvent => {\n const isKeyboardActivator = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.isKeyboardEvent)(activatorEvent);\n return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nconst PositionedOverlay = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)((_ref, ref) => {\n let {\n as,\n activatorEvent,\n adjustScale,\n children,\n className,\n rect,\n style,\n transform,\n transition = defaultTransition\n } = _ref;\n\n if (!rect) {\n return null;\n }\n\n const scaleAdjustedTransform = adjustScale ? transform : { ...transform,\n scaleX: 1,\n scaleY: 1\n };\n const styles = { ...baseStyles,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n left: rect.left,\n transform: _dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.CSS.Transform.toString(scaleAdjustedTransform),\n transformOrigin: adjustScale && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : undefined,\n transition: typeof transition === 'function' ? transition(activatorEvent) : transition,\n ...style\n };\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(as, {\n className,\n style: styles,\n ref\n }, children);\n});\n\nconst defaultDropAnimationSideEffects = options => _ref => {\n let {\n active,\n dragOverlay\n } = _ref;\n const originalStyles = {};\n const {\n styles,\n className\n } = options;\n\n if (styles != null && styles.active) {\n for (const [key, value] of Object.entries(styles.active)) {\n if (value === undefined) {\n continue;\n }\n\n originalStyles[key] = active.node.style.getPropertyValue(key);\n active.node.style.setProperty(key, value);\n }\n }\n\n if (styles != null && styles.dragOverlay) {\n for (const [key, value] of Object.entries(styles.dragOverlay)) {\n if (value === undefined) {\n continue;\n }\n\n dragOverlay.node.style.setProperty(key, value);\n }\n }\n\n if (className != null && className.active) {\n active.node.classList.add(className.active);\n }\n\n if (className != null && className.dragOverlay) {\n dragOverlay.node.classList.add(className.dragOverlay);\n }\n\n return function cleanup() {\n for (const [key, value] of Object.entries(originalStyles)) {\n active.node.style.setProperty(key, value);\n }\n\n if (className != null && className.active) {\n active.node.classList.remove(className.active);\n }\n };\n};\n\nconst defaultKeyframeResolver = _ref2 => {\n let {\n transform: {\n initial,\n final\n }\n } = _ref2;\n return [{\n transform: _dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.CSS.Transform.toString(initial)\n }, {\n transform: _dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.CSS.Transform.toString(final)\n }];\n};\n\nconst defaultDropAnimationConfiguration = {\n duration: 250,\n easing: 'ease',\n keyframes: defaultKeyframeResolver,\n sideEffects: /*#__PURE__*/defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0'\n }\n }\n })\n};\nfunction useDropAnimation(_ref3) {\n let {\n config,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n } = _ref3;\n return (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.useEvent)((id, node) => {\n if (config === null) {\n return;\n }\n\n const activeDraggable = draggableNodes.get(id);\n\n if (!activeDraggable) {\n return;\n }\n\n const activeNode = activeDraggable.node.current;\n\n if (!activeNode) {\n return;\n }\n\n const measurableNode = getMeasurableNode(node);\n\n if (!measurableNode) {\n return;\n }\n\n const {\n transform\n } = (0,_dnd_kit_utilities__WEBPACK_IMPORTED_MODULE_2__.getWindow)(node).getComputedStyle(node);\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return;\n }\n\n const animation = typeof config === 'function' ? config : createDefaultDropAnimation(config);\n scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure);\n return animation({\n active: {\n id,\n data: activeDraggable.data,\n node: activeNode,\n rect: measuringConfiguration.draggable.measure(activeNode)\n },\n draggableNodes,\n dragOverlay: {\n node,\n rect: measuringConfiguration.dragOverlay.measure(measurableNode)\n },\n droppableContainers,\n measuringConfiguration,\n transform: parsedTransform\n });\n });\n}\n\nfunction createDefaultDropAnimation(options) {\n const {\n duration,\n easing,\n sideEffects,\n keyframes\n } = { ...defaultDropAnimationConfiguration,\n ...options\n };\n return _ref4 => {\n let {\n active,\n dragOverlay,\n transform,\n ...rest\n } = _ref4;\n\n if (!duration) {\n // Do not animate if animation duration is zero.\n return;\n }\n\n const delta = {\n x: dragOverlay.rect.left - active.rect.left,\n y: dragOverlay.rect.top - active.rect.top\n };\n const scale = {\n scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1,\n scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1\n };\n const finalTransform = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n ...scale\n };\n const animationKeyframes = keyframes({ ...rest,\n active,\n dragOverlay,\n transform: {\n initial: transform,\n final: finalTransform\n }\n });\n const [firstKeyframe] = animationKeyframes;\n const lastKeyframe = animationKeyframes[animationKeyframes.length - 1];\n\n if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) {\n // The start and end keyframes are the same, infer that there is no animation needed.\n return;\n }\n\n const cleanup = sideEffects == null ? void 0 : sideEffects({\n active,\n dragOverlay,\n ...rest\n });\n const animation = dragOverlay.node.animate(animationKeyframes, {\n duration,\n easing,\n fill: 'forwards'\n });\n return new Promise(resolve => {\n animation.onfinish = () => {\n cleanup == null ? void 0 : cleanup();\n resolve();\n };\n });\n };\n}\n\nlet key = 0;\nfunction useKey(id) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (id == null) {\n return;\n }\n\n key++;\n return key;\n }, [id]);\n}\n\nconst DragOverlay = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().memo(_ref => {\n let {\n adjustScale = false,\n children,\n dropAnimation: dropAnimationConfig,\n style,\n transition,\n modifiers,\n wrapperElement = 'div',\n className,\n zIndex = 999\n } = _ref;\n const {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggableNodes,\n droppableContainers,\n dragOverlay,\n over,\n measuringConfiguration,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n } = useDndContext();\n const transform = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ActiveDraggableContext);\n const key = useKey(active == null ? void 0 : active.id);\n const modifiedTransform = applyModifiers(modifiers, {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect: dragOverlay.rect,\n over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n transform,\n windowRect\n });\n const initialRect = useInitialValue(activeNodeRect);\n const dropAnimation = useDropAnimation({\n config: dropAnimationConfig,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n }); // We need to wait for the active node to be measured before connecting the drag overlay ref\n // otherwise collisions can be computed against a mispositioned drag overlay\n\n const ref = initialRect ? dragOverlay.setRef : undefined;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NullifiedContextProvider, null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AnimationManager, {\n animation: dropAnimation\n }, active && key ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PositionedOverlay, {\n key: key,\n id: active.id,\n ref: ref,\n as: wrapperElement,\n activatorEvent: activatorEvent,\n adjustScale: adjustScale,\n className: className,\n transition: transition,\n rect: initialRect,\n style: {\n zIndex,\n ...style\n },\n transform: modifiedTransform\n }, children) : null));\n});\n\n\n//# sourceMappingURL=core.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L2NvcmUvZGlzdC9jb3JlLmVzbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBd0o7QUFDdEY7QUFDNFE7QUFDN1A7O0FBRWpGLHVDQUF1QyxvREFBYTs7QUFFcEQ7QUFDQSwyQkFBMkIsaURBQVU7QUFDckMsRUFBRSxnREFBUztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0Esc0JBQXNCLCtDQUFRO0FBQzlCLDJCQUEyQixrREFBVztBQUN0QztBQUNBO0FBQ0EsR0FBRztBQUNILG1CQUFtQixrREFBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUksRUFBRSx1RUFBZTtBQUNyQix1QkFBdUIsK0RBQVc7QUFDbEMsZ0NBQWdDLCtDQUFRO0FBQ3hDLEVBQUUsZ0RBQVM7QUFDWDtBQUNBLEdBQUc7QUFDSCxnQkFBZ0IsOENBQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsMERBQW1CLENBQUMsdURBQWMsUUFBUSwwREFBbUIsQ0FBQyw4REFBVTtBQUN6RjtBQUNBO0FBQ0EsR0FBRyxHQUFHLDBEQUFtQixDQUFDLDhEQUFVO0FBQ3BDO0FBQ0E7QUFDQSxHQUFHO0FBQ0gscUJBQXFCLHVEQUFZO0FBQ2pDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0JBQXdCOztBQUV6Qjs7QUFFQTtBQUNBLFNBQVMsOENBQU87QUFDaEI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGFBQWE7QUFDdEY7QUFDQTs7QUFFQSxTQUFTLDhDQUFPO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsdUVBQW1COztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxLQUFLLFlBQVksS0FBSyxjQUFjLEtBQUssZUFBZSxLQUFLO0FBQzFFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQSxrR0FBa0csYUFBYTtBQUMvRztBQUNBOztBQUVBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssS0FBSztBQUNWLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sRUFBRSw2REFBUzs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsNkRBQVM7QUFDN0I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLDZEQUFTO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSw4REFBVTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxpRUFBYSxVQUFVLGdFQUFZO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBCQUEwQiw2REFBUzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTyx5REFBUztBQUNoQjtBQUNBOztBQUVBLE1BQU0sNERBQVE7QUFDZDtBQUNBOztBQUVBLE9BQU8sMERBQU07QUFDYjtBQUNBOztBQUVBLE1BQU0sOERBQVUseUJBQXlCLG9FQUFnQjtBQUN6RDtBQUNBOztBQUVBLE1BQU0saUVBQWE7QUFDbkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSw0REFBUTtBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSw0REFBUTtBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLDhCQUE4Qjs7QUFFL0I7QUFDQSxPQUFPLHlEQUFTO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyx1REFBRztBQUNkLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7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QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0EsT0FBTyxHQUFHOztBQUVWLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUEsaURBQWlELHVFQUFtQjtBQUNwRSxrQkFBa0IsNERBQVEsbUNBQW1DOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLFNBQVM7QUFDZjs7QUFFQSwyQkFBMkIsb0VBQWdCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNOztB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MkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLDhDQUFPO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLGlDQUFpQyxpREFBVTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixvQkFBb0IsaURBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxHQUFHO0FBQ047O0FBRUE7QUFDQSxTQUFTLDBEQUFtQixpQ0FBaUMsMERBQW1CO0FBQ2hGO0FBQ0EsR0FBRyxrQkFBa0IsMERBQW1CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUV3bEI7QUFDemxCIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K2NvcmVANi4zLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvY29yZS9kaXN0L2NvcmUuZXNtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVmLCBtZW1vLCB1c2VSZWR1Y2VyLCBjbG9uZUVsZW1lbnQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwsIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IHVzZVVuaXF1ZUlkLCBnZXRFdmVudENvb3JkaW5hdGVzLCBnZXRXaW5kb3csIGlzRG9jdW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU1ZHRWxlbWVudCwgY2FuVXNlRE9NLCBpc1dpbmRvdywgaXNOb2RlLCBnZXRPd25lckRvY3VtZW50LCBhZGQsIGlzS2V5Ym9hcmRFdmVudCwgc3VidHJhY3QsIHVzZUxhenlNZW1vLCB1c2VJbnRlcnZhbCwgdXNlUHJldmlvdXMsIHVzZUxhdGVzdFZhbHVlLCB1c2VFdmVudCwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlTm9kZVJlZiwgZmluZEZpcnN0Rm9jdXNhYmxlTm9kZSwgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7IHVzZUFubm91bmNlbWVudCwgSGlkZGVuVGV4dCwgTGl2ZVJlZ2lvbiB9IGZyb20gJ0BkbmQta2l0L2FjY2Vzc2liaWxpdHknO1xuXG5jb25zdCBEbmRNb25pdG9yQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VEbmRNb25pdG9yKGxpc3RlbmVyKSB7XG4gIGNvbnN0IHJlZ2lzdGVyTGlzdGVuZXIgPSB1c2VDb250ZXh0KERuZE1vbml0b3JDb250ZXh0KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJlZ2lzdGVyTGlzdGVuZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXNlRG5kTW9uaXRvciBtdXN0IGJlIHVzZWQgd2l0aGluIGEgY2hpbGRyZW4gb2YgPERuZENvbnRleHQ+Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSByZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH0sIFtsaXN0ZW5lciwgcmVnaXN0ZXJMaXN0ZW5lcl0pO1xufVxuXG5mdW5jdGlvbiB1c2VEbmRNb25pdG9yUHJvdmlkZXIoKSB7XG4gIGNvbnN0IFtsaXN0ZW5lcnNdID0gdXNlU3RhdGUoKCkgPT4gbmV3IFNldCgpKTtcbiAgY29uc3QgcmVnaXN0ZXJMaXN0ZW5lciA9IHVzZUNhbGxiYWNrKGxpc3RlbmVyID0+IHtcbiAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gIH0sIFtsaXN0ZW5lcnNdKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhfcmVmID0+IHtcbiAgICBsZXQge1xuICAgICAgdHlwZSxcbiAgICAgIGV2ZW50XG4gICAgfSA9IF9yZWY7XG4gICAgbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgdmFyIF9saXN0ZW5lciR0eXBlO1xuXG4gICAgICByZXR1cm4gKF9saXN0ZW5lciR0eXBlID0gbGlzdGVuZXJbdHlwZV0pID09IG51bGwgPyB2b2lkIDAgOiBfbGlzdGVuZXIkdHlwZS5jYWxsKGxpc3RlbmVyLCBldmVudCk7XG4gICAgfSk7XG4gIH0sIFtsaXN0ZW5lcnNdKTtcbiAgcmV0dXJuIFtkaXNwYXRjaCwgcmVnaXN0ZXJMaXN0ZW5lcl07XG59XG5cbmNvbnN0IGRlZmF1bHRTY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMgPSB7XG4gIGRyYWdnYWJsZTogXCJcXG4gICAgVG8gcGljayB1cCBhIGRyYWdnYWJsZSBpdGVtLCBwcmVzcyB0aGUgc3BhY2UgYmFyLlxcbiAgICBXaGlsZSBkcmFnZ2luZywgdXNlIHRoZSBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIGl0ZW0uXFxuICAgIFByZXNzIHNwYWNlIGFnYWluIHRvIGRyb3AgdGhlIGl0ZW0gaW4gaXRzIG5ldyBwb3NpdGlvbiwgb3IgcHJlc3MgZXNjYXBlIHRvIGNhbmNlbC5cXG4gIFwiXG59O1xuY29uc3QgZGVmYXVsdEFubm91bmNlbWVudHMgPSB7XG4gIG9uRHJhZ1N0YXJ0KF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgYWN0aXZlXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIFwiUGlja2VkIHVwIGRyYWdnYWJsZSBpdGVtIFwiICsgYWN0aXZlLmlkICsgXCIuXCI7XG4gIH0sXG5cbiAgb25EcmFnT3ZlcihfcmVmMikge1xuICAgIGxldCB7XG4gICAgICBhY3RpdmUsXG4gICAgICBvdmVyXG4gICAgfSA9IF9yZWYyO1xuXG4gICAgaWYgKG92ZXIpIHtcbiAgICAgIHJldHVybiBcIkRyYWdnYWJsZSBpdGVtIFwiICsgYWN0aXZlLmlkICsgXCIgd2FzIG1vdmVkIG92ZXIgZHJvcHBhYmxlIGFyZWEgXCIgKyBvdmVyLmlkICsgXCIuXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiRHJhZ2dhYmxlIGl0ZW0gXCIgKyBhY3RpdmUuaWQgKyBcIiBpcyBubyBsb25nZXIgb3ZlciBhIGRyb3BwYWJsZSBhcmVhLlwiO1xuICB9LFxuXG4gIG9uRHJhZ0VuZChfcmVmMykge1xuICAgIGxldCB7XG4gICAgICBhY3RpdmUsXG4gICAgICBvdmVyXG4gICAgfSA9IF9yZWYzO1xuXG4gICAgaWYgKG92ZXIpIHtcbiAgICAgIHJldHVybiBcIkRyYWdnYWJsZSBpdGVtIFwiICsgYWN0aXZlLmlkICsgXCIgd2FzIGRyb3BwZWQgb3ZlciBkcm9wcGFibGUgYXJlYSBcIiArIG92ZXIuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiRHJhZ2dhYmxlIGl0ZW0gXCIgKyBhY3RpdmUuaWQgKyBcIiB3YXMgZHJvcHBlZC5cIjtcbiAgfSxcblxuICBvbkRyYWdDYW5jZWwoX3JlZjQpIHtcbiAgICBsZXQge1xuICAgICAgYWN0aXZlXG4gICAgfSA9IF9yZWY0O1xuICAgIHJldHVybiBcIkRyYWdnaW5nIHdhcyBjYW5jZWxsZWQuIERyYWdnYWJsZSBpdGVtIFwiICsgYWN0aXZlLmlkICsgXCIgd2FzIGRyb3BwZWQuXCI7XG4gIH1cblxufTtcblxuZnVuY3Rpb24gQWNjZXNzaWJpbGl0eShfcmVmKSB7XG4gIGxldCB7XG4gICAgYW5ub3VuY2VtZW50cyA9IGRlZmF1bHRBbm5vdW5jZW1lbnRzLFxuICAgIGNvbnRhaW5lcixcbiAgICBoaWRkZW5UZXh0RGVzY3JpYmVkQnlJZCxcbiAgICBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMgPSBkZWZhdWx0U2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zXG4gIH0gPSBfcmVmO1xuICBjb25zdCB7XG4gICAgYW5ub3VuY2UsXG4gICAgYW5ub3VuY2VtZW50XG4gIH0gPSB1c2VBbm5vdW5jZW1lbnQoKTtcbiAgY29uc3QgbGl2ZVJlZ2lvbklkID0gdXNlVW5pcXVlSWQoXCJEbmRMaXZlUmVnaW9uXCIpO1xuICBjb25zdCBbbW91bnRlZCwgc2V0TW91bnRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TW91bnRlZCh0cnVlKTtcbiAgfSwgW10pO1xuICB1c2VEbmRNb25pdG9yKHVzZU1lbW8oKCkgPT4gKHtcbiAgICBvbkRyYWdTdGFydChfcmVmMikge1xuICAgICAgbGV0IHtcbiAgICAgICAgYWN0aXZlXG4gICAgICB9ID0gX3JlZjI7XG4gICAgICBhbm5vdW5jZShhbm5vdW5jZW1lbnRzLm9uRHJhZ1N0YXJ0KHtcbiAgICAgICAgYWN0aXZlXG4gICAgICB9KSk7XG4gICAgfSxcblxuICAgIG9uRHJhZ01vdmUoX3JlZjMpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGFjdGl2ZSxcbiAgICAgICAgb3ZlclxuICAgICAgfSA9IF9yZWYzO1xuXG4gICAgICBpZiAoYW5ub3VuY2VtZW50cy5vbkRyYWdNb3ZlKSB7XG4gICAgICAgIGFubm91bmNlKGFubm91bmNlbWVudHMub25EcmFnTW92ZSh7XG4gICAgICAgICAgYWN0aXZlLFxuICAgICAgICAgIG92ZXJcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkRyYWdPdmVyKF9yZWY0KSB7XG4gICAgICBsZXQge1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIG92ZXJcbiAgICAgIH0gPSBfcmVmNDtcbiAgICAgIGFubm91bmNlKGFubm91bmNlbWVudHMub25EcmFnT3Zlcih7XG4gICAgICAgIGFjdGl2ZSxcbiAgICAgICAgb3ZlclxuICAgICAgfSkpO1xuICAgIH0sXG5cbiAgICBvbkRyYWdFbmQoX3JlZjUpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGFjdGl2ZSxcbiAgICAgICAgb3ZlclxuICAgICAgfSA9IF9yZWY1O1xuICAgICAgYW5ub3VuY2UoYW5ub3VuY2VtZW50cy5vbkRyYWdFbmQoe1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIG92ZXJcbiAgICAgIH0pKTtcbiAgICB9LFxuXG4gICAgb25EcmFnQ2FuY2VsKF9yZWY2KSB7XG4gICAgICBsZXQge1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIG92ZXJcbiAgICAgIH0gPSBfcmVmNjtcbiAgICAgIGFubm91bmNlKGFubm91bmNlbWVudHMub25EcmFnQ2FuY2VsKHtcbiAgICAgICAgYWN0aXZlLFxuICAgICAgICBvdmVyXG4gICAgICB9KSk7XG4gICAgfVxuXG4gIH0pLCBbYW5ub3VuY2UsIGFubm91bmNlbWVudHNdKSk7XG5cbiAgaWYgKCFtb3VudGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXJrdXAgPSBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KEhpZGRlblRleHQsIHtcbiAgICBpZDogaGlkZGVuVGV4dERlc2NyaWJlZEJ5SWQsXG4gICAgdmFsdWU6IHNjcmVlblJlYWRlckluc3RydWN0aW9ucy5kcmFnZ2FibGVcbiAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGl2ZVJlZ2lvbiwge1xuICAgIGlkOiBsaXZlUmVnaW9uSWQsXG4gICAgYW5ub3VuY2VtZW50OiBhbm5vdW5jZW1lbnRcbiAgfSkpO1xuICByZXR1cm4gY29udGFpbmVyID8gY3JlYXRlUG9ydGFsKG1hcmt1cCwgY29udGFpbmVyKSA6IG1hcmt1cDtcbn1cblxudmFyIEFjdGlvbjtcblxuKGZ1bmN0aW9uIChBY3Rpb24pIHtcbiAgQWN0aW9uW1wiRHJhZ1N0YXJ0XCJdID0gXCJkcmFnU3RhcnRcIjtcbiAgQWN0aW9uW1wiRHJhZ01vdmVcIl0gPSBcImRyYWdNb3ZlXCI7XG4gIEFjdGlvbltcIkRyYWdFbmRcIl0gPSBcImRyYWdFbmRcIjtcbiAgQWN0aW9uW1wiRHJhZ0NhbmNlbFwiXSA9IFwiZHJhZ0NhbmNlbFwiO1xuICBBY3Rpb25bXCJEcmFnT3ZlclwiXSA9IFwiZHJhZ092ZXJcIjtcbiAgQWN0aW9uW1wiUmVnaXN0ZXJEcm9wcGFibGVcIl0gPSBcInJlZ2lzdGVyRHJvcHBhYmxlXCI7XG4gIEFjdGlvbltcIlNldERyb3BwYWJsZURpc2FibGVkXCJdID0gXCJzZXREcm9wcGFibGVEaXNhYmxlZFwiO1xuICBBY3Rpb25bXCJVbnJlZ2lzdGVyRHJvcHBhYmxlXCJdID0gXCJ1bnJlZ2lzdGVyRHJvcHBhYmxlXCI7XG59KShBY3Rpb24gfHwgKEFjdGlvbiA9IHt9KSk7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiB1c2VTZW5zb3Ioc2Vuc29yLCBvcHRpb25zKSB7XG4gIHJldHVybiB1c2VNZW1vKCgpID0+ICh7XG4gICAgc2Vuc29yLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMgOiB7fVxuICB9KSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBbc2Vuc29yLCBvcHRpb25zXSk7XG59XG5cbmZ1bmN0aW9uIHVzZVNlbnNvcnMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzZW5zb3JzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHNlbnNvcnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gdXNlTWVtbygoKSA9PiBbLi4uc2Vuc29yc10uZmlsdGVyKHNlbnNvciA9PiBzZW5zb3IgIT0gbnVsbCksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgWy4uLnNlbnNvcnNdKTtcbn1cblxuY29uc3QgZGVmYXVsdENvb3JkaW5hdGVzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICB4OiAwLFxuICB5OiAwXG59KTtcblxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xyXG4gKi9cbmZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlbihwMSwgcDIpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwMS54IC0gcDIueCwgMikgKyBNYXRoLnBvdyhwMS55IC0gcDIueSwgMikpO1xufVxuXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZVRyYW5zZm9ybU9yaWdpbihldmVudCwgcmVjdCkge1xuICBjb25zdCBldmVudENvb3JkaW5hdGVzID0gZ2V0RXZlbnRDb29yZGluYXRlcyhldmVudCk7XG5cbiAgaWYgKCFldmVudENvb3JkaW5hdGVzKSB7XG4gICAgcmV0dXJuICcwIDAnO1xuICB9XG5cbiAgY29uc3QgdHJhbnNmb3JtT3JpZ2luID0ge1xuICAgIHg6IChldmVudENvb3JkaW5hdGVzLnggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aCAqIDEwMCxcbiAgICB5OiAoZXZlbnRDb29yZGluYXRlcy55IC0gcmVjdC50b3ApIC8gcmVjdC5oZWlnaHQgKiAxMDBcbiAgfTtcbiAgcmV0dXJuIHRyYW5zZm9ybU9yaWdpbi54ICsgXCIlIFwiICsgdHJhbnNmb3JtT3JpZ2luLnkgKyBcIiVcIjtcbn1cblxuLyoqXHJcbiAqIFNvcnQgY29sbGlzaW9ucyBmcm9tIHNtYWxsZXN0IHRvIGdyZWF0ZXN0IHZhbHVlXHJcbiAqL1xuZnVuY3Rpb24gc29ydENvbGxpc2lvbnNBc2MoX3JlZiwgX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBkYXRhOiB7XG4gICAgICB2YWx1ZTogYVxuICAgIH1cbiAgfSA9IF9yZWY7XG4gIGxldCB7XG4gICAgZGF0YToge1xuICAgICAgdmFsdWU6IGJcbiAgICB9XG4gIH0gPSBfcmVmMjtcbiAgcmV0dXJuIGEgLSBiO1xufVxuLyoqXHJcbiAqIFNvcnQgY29sbGlzaW9ucyBmcm9tIGdyZWF0ZXN0IHRvIHNtYWxsZXN0IHZhbHVlXHJcbiAqL1xuXG5mdW5jdGlvbiBzb3J0Q29sbGlzaW9uc0Rlc2MoX3JlZjMsIF9yZWY0KSB7XG4gIGxldCB7XG4gICAgZGF0YToge1xuICAgICAgdmFsdWU6IGFcbiAgICB9XG4gIH0gPSBfcmVmMztcbiAgbGV0IHtcbiAgICBkYXRhOiB7XG4gICAgICB2YWx1ZTogYlxuICAgIH1cbiAgfSA9IF9yZWY0O1xuICByZXR1cm4gYiAtIGE7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgb2YgYSBnaXZlbiByZWN0YW5nbGU6XHJcbiAqIFtUb3BMZWZ0IHt4LCB5fSwgVG9wUmlnaHQge3gsIHl9LCBCb3R0b21MZWZ0IHt4LCB5fSwgQm90dG9tUmlnaHQge3gsIHl9XVxyXG4gKi9cblxuZnVuY3Rpb24gY29ybmVyc09mUmVjdGFuZ2xlKF9yZWY1KSB7XG4gIGxldCB7XG4gICAgbGVmdCxcbiAgICB0b3AsXG4gICAgaGVpZ2h0LFxuICAgIHdpZHRoXG4gIH0gPSBfcmVmNTtcbiAgcmV0dXJuIFt7XG4gICAgeDogbGVmdCxcbiAgICB5OiB0b3BcbiAgfSwge1xuICAgIHg6IGxlZnQgKyB3aWR0aCxcbiAgICB5OiB0b3BcbiAgfSwge1xuICAgIHg6IGxlZnQsXG4gICAgeTogdG9wICsgaGVpZ2h0XG4gIH0sIHtcbiAgICB4OiBsZWZ0ICsgd2lkdGgsXG4gICAgeTogdG9wICsgaGVpZ2h0XG4gIH1dO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RDb2xsaXNpb24oY29sbGlzaW9ucywgcHJvcGVydHkpIHtcbiAgaWYgKCFjb2xsaXNpb25zIHx8IGNvbGxpc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBbZmlyc3RDb2xsaXNpb25dID0gY29sbGlzaW9ucztcbiAgcmV0dXJuIHByb3BlcnR5ID8gZmlyc3RDb2xsaXNpb25bcHJvcGVydHldIDogZmlyc3RDb2xsaXNpb247XG59XG5cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIGEgZ2l2ZW4gQ2xpZW50UmVjdFxyXG4gKi9cblxuZnVuY3Rpb24gY2VudGVyT2ZSZWN0YW5nbGUocmVjdCwgbGVmdCwgdG9wKSB7XG4gIGlmIChsZWZ0ID09PSB2b2lkIDApIHtcbiAgICBsZWZ0ID0gcmVjdC5sZWZ0O1xuICB9XG5cbiAgaWYgKHRvcCA9PT0gdm9pZCAwKSB7XG4gICAgdG9wID0gcmVjdC50b3A7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGxlZnQgKyByZWN0LndpZHRoICogMC41LFxuICAgIHk6IHRvcCArIHJlY3QuaGVpZ2h0ICogMC41XG4gIH07XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgY2xvc2VzdCByZWN0YW5nbGVzIGZyb20gYW4gYXJyYXkgb2YgcmVjdGFuZ2xlcyB0byB0aGUgY2VudGVyIG9mIGEgZ2l2ZW5cclxuICogcmVjdGFuZ2xlLlxyXG4gKi9cblxuXG5jb25zdCBjbG9zZXN0Q2VudGVyID0gX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgY29sbGlzaW9uUmVjdCxcbiAgICBkcm9wcGFibGVSZWN0cyxcbiAgICBkcm9wcGFibGVDb250YWluZXJzXG4gIH0gPSBfcmVmO1xuICBjb25zdCBjZW50ZXJSZWN0ID0gY2VudGVyT2ZSZWN0YW5nbGUoY29sbGlzaW9uUmVjdCwgY29sbGlzaW9uUmVjdC5sZWZ0LCBjb2xsaXNpb25SZWN0LnRvcCk7XG4gIGNvbnN0IGNvbGxpc2lvbnMgPSBbXTtcblxuICBmb3IgKGNvbnN0IGRyb3BwYWJsZUNvbnRhaW5lciBvZiBkcm9wcGFibGVDb250YWluZXJzKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWRcbiAgICB9ID0gZHJvcHBhYmxlQ29udGFpbmVyO1xuICAgIGNvbnN0IHJlY3QgPSBkcm9wcGFibGVSZWN0cy5nZXQoaWQpO1xuXG4gICAgaWYgKHJlY3QpIHtcbiAgICAgIGNvbnN0IGRpc3RCZXR3ZWVuID0gZGlzdGFuY2VCZXR3ZWVuKGNlbnRlck9mUmVjdGFuZ2xlKHJlY3QpLCBjZW50ZXJSZWN0KTtcbiAgICAgIGNvbGxpc2lvbnMucHVzaCh7XG4gICAgICAgIGlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZHJvcHBhYmxlQ29udGFpbmVyLFxuICAgICAgICAgIHZhbHVlOiBkaXN0QmV0d2VlblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29sbGlzaW9ucy5zb3J0KHNvcnRDb2xsaXNpb25zQXNjKTtcbn07XG5cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBjbG9zZXN0IHJlY3RhbmdsZXMgZnJvbSBhbiBhcnJheSBvZiByZWN0YW5nbGVzIHRvIHRoZSBjb3JuZXJzIG9mXHJcbiAqIGFub3RoZXIgcmVjdGFuZ2xlLlxyXG4gKi9cblxuY29uc3QgY2xvc2VzdENvcm5lcnMgPSBfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBjb2xsaXNpb25SZWN0LFxuICAgIGRyb3BwYWJsZVJlY3RzLFxuICAgIGRyb3BwYWJsZUNvbnRhaW5lcnNcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGNvcm5lcnMgPSBjb3JuZXJzT2ZSZWN0YW5nbGUoY29sbGlzaW9uUmVjdCk7XG4gIGNvbnN0IGNvbGxpc2lvbnMgPSBbXTtcblxuICBmb3IgKGNvbnN0IGRyb3BwYWJsZUNvbnRhaW5lciBvZiBkcm9wcGFibGVDb250YWluZXJzKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWRcbiAgICB9ID0gZHJvcHBhYmxlQ29udGFpbmVyO1xuICAgIGNvbnN0IHJlY3QgPSBkcm9wcGFibGVSZWN0cy5nZXQoaWQpO1xuXG4gICAgaWYgKHJlY3QpIHtcbiAgICAgIGNvbnN0IHJlY3RDb3JuZXJzID0gY29ybmVyc09mUmVjdGFuZ2xlKHJlY3QpO1xuICAgICAgY29uc3QgZGlzdGFuY2VzID0gY29ybmVycy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjb3JuZXIsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGRpc3RhbmNlQmV0d2VlbihyZWN0Q29ybmVyc1tpbmRleF0sIGNvcm5lcik7XG4gICAgICB9LCAwKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZURpc3RhbmNlID0gTnVtYmVyKChkaXN0YW5jZXMgLyA0KS50b0ZpeGVkKDQpKTtcbiAgICAgIGNvbGxpc2lvbnMucHVzaCh7XG4gICAgICAgIGlkLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZHJvcHBhYmxlQ29udGFpbmVyLFxuICAgICAgICAgIHZhbHVlOiBlZmZlY3RpdmVEaXN0YW5jZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29sbGlzaW9ucy5zb3J0KHNvcnRDb2xsaXNpb25zQXNjKTtcbn07XG5cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpbnRlcnNlY3RpbmcgcmVjdGFuZ2xlIGFyZWEgYmV0d2VlbiB0d28gcmVjdGFuZ2xlc1xyXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9uUmF0aW8oZW50cnksIHRhcmdldCkge1xuICBjb25zdCB0b3AgPSBNYXRoLm1heCh0YXJnZXQudG9wLCBlbnRyeS50b3ApO1xuICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgodGFyZ2V0LmxlZnQsIGVudHJ5LmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWluKHRhcmdldC5sZWZ0ICsgdGFyZ2V0LndpZHRoLCBlbnRyeS5sZWZ0ICsgZW50cnkud2lkdGgpO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih0YXJnZXQudG9wICsgdGFyZ2V0LmhlaWdodCwgZW50cnkudG9wICsgZW50cnkuaGVpZ2h0KTtcbiAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcblxuICBpZiAobGVmdCA8IHJpZ2h0ICYmIHRvcCA8IGJvdHRvbSkge1xuICAgIGNvbnN0IHRhcmdldEFyZWEgPSB0YXJnZXQud2lkdGggKiB0YXJnZXQuaGVpZ2h0O1xuICAgIGNvbnN0IGVudHJ5QXJlYSA9IGVudHJ5LndpZHRoICogZW50cnkuaGVpZ2h0O1xuICAgIGNvbnN0IGludGVyc2VjdGlvbkFyZWEgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBpbnRlcnNlY3Rpb25SYXRpbyA9IGludGVyc2VjdGlvbkFyZWEgLyAodGFyZ2V0QXJlYSArIGVudHJ5QXJlYSAtIGludGVyc2VjdGlvbkFyZWEpO1xuICAgIHJldHVybiBOdW1iZXIoaW50ZXJzZWN0aW9uUmF0aW8udG9GaXhlZCg0KSk7XG4gIH0gLy8gUmVjdGFuZ2xlcyBkbyBub3Qgb3ZlcmxhcCwgb3Igb3ZlcmxhcCBoYXMgYW4gYXJlYSBvZiB6ZXJvIChlZGdlL2Nvcm5lciBvdmVybGFwKVxuXG5cbiAgcmV0dXJuIDA7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgcmVjdGFuZ2xlcyB0aGF0IGhhcyB0aGUgZ3JlYXRlc3QgaW50ZXJzZWN0aW9uIGFyZWEgd2l0aCBhIGdpdmVuXHJcbiAqIHJlY3RhbmdsZSBpbiBhbiBhcnJheSBvZiByZWN0YW5nbGVzLlxyXG4gKi9cblxuY29uc3QgcmVjdEludGVyc2VjdGlvbiA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGNvbGxpc2lvblJlY3QsXG4gICAgZHJvcHBhYmxlUmVjdHMsXG4gICAgZHJvcHBhYmxlQ29udGFpbmVyc1xuICB9ID0gX3JlZjtcbiAgY29uc3QgY29sbGlzaW9ucyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZHJvcHBhYmxlQ29udGFpbmVyIG9mIGRyb3BwYWJsZUNvbnRhaW5lcnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZFxuICAgIH0gPSBkcm9wcGFibGVDb250YWluZXI7XG4gICAgY29uc3QgcmVjdCA9IGRyb3BwYWJsZVJlY3RzLmdldChpZCk7XG5cbiAgICBpZiAocmVjdCkge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uUmF0aW8gPSBnZXRJbnRlcnNlY3Rpb25SYXRpbyhyZWN0LCBjb2xsaXNpb25SZWN0KTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvblJhdGlvID4gMCkge1xuICAgICAgICBjb2xsaXNpb25zLnB1c2goe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGRyb3BwYWJsZUNvbnRhaW5lcixcbiAgICAgICAgICAgIHZhbHVlOiBpbnRlcnNlY3Rpb25SYXRpb1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbGxpc2lvbnMuc29ydChzb3J0Q29sbGlzaW9uc0Rlc2MpO1xufTtcblxuLyoqXHJcbiAqIENoZWNrIGlmIGEgZ2l2ZW4gcG9pbnQgaXMgY29udGFpbmVkIHdpdGhpbiBhIGJvdW5kaW5nIHJlY3RhbmdsZVxyXG4gKi9cblxuZnVuY3Rpb24gaXNQb2ludFdpdGhpblJlY3QocG9pbnQsIHJlY3QpIHtcbiAgY29uc3Qge1xuICAgIHRvcCxcbiAgICBsZWZ0LFxuICAgIGJvdHRvbSxcbiAgICByaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHRvcCA8PSBwb2ludC55ICYmIHBvaW50LnkgPD0gYm90dG9tICYmIGxlZnQgPD0gcG9pbnQueCAmJiBwb2ludC54IDw9IHJpZ2h0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHJlY3RhbmdsZXMgdGhhdCB0aGUgcG9pbnRlciBpcyBob3ZlcmluZyBvdmVyXHJcbiAqL1xuXG5cbmNvbnN0IHBvaW50ZXJXaXRoaW4gPSBfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBkcm9wcGFibGVDb250YWluZXJzLFxuICAgIGRyb3BwYWJsZVJlY3RzLFxuICAgIHBvaW50ZXJDb29yZGluYXRlc1xuICB9ID0gX3JlZjtcblxuICBpZiAoIXBvaW50ZXJDb29yZGluYXRlcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGNvbGxpc2lvbnMgPSBbXTtcblxuICBmb3IgKGNvbnN0IGRyb3BwYWJsZUNvbnRhaW5lciBvZiBkcm9wcGFibGVDb250YWluZXJzKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWRcbiAgICB9ID0gZHJvcHBhYmxlQ29udGFpbmVyO1xuICAgIGNvbnN0IHJlY3QgPSBkcm9wcGFibGVSZWN0cy5nZXQoaWQpO1xuXG4gICAgaWYgKHJlY3QgJiYgaXNQb2ludFdpdGhpblJlY3QocG9pbnRlckNvb3JkaW5hdGVzLCByZWN0KSkge1xuICAgICAgLyogVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBhIHNpbmdsZSByZWN0YW5nbGUgaW50ZXJzZWN0aW5nXHJcbiAgICAgICAqIHdpdGggdGhlIHBvaW50ZXIgY29vcmRpbmF0ZXMuIEluIG9yZGVyIHRvIHNvcnQgdGhlXHJcbiAgICAgICAqIGNvbGxpZGluZyByZWN0YW5nbGVzLCB3ZSBtZWFzdXJlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuXHJcbiAgICAgICAqIHRoZSBwb2ludGVyIGFuZCB0aGUgY29ybmVycyBvZiB0aGUgaW50ZXJzZWN0aW5nIHJlY3RhbmdsZVxyXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGNvcm5lcnMgPSBjb3JuZXJzT2ZSZWN0YW5nbGUocmVjdCk7XG4gICAgICBjb25zdCBkaXN0YW5jZXMgPSBjb3JuZXJzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGNvcm5lcikgPT4ge1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBkaXN0YW5jZUJldHdlZW4ocG9pbnRlckNvb3JkaW5hdGVzLCBjb3JuZXIpO1xuICAgICAgfSwgMCk7XG4gICAgICBjb25zdCBlZmZlY3RpdmVEaXN0YW5jZSA9IE51bWJlcigoZGlzdGFuY2VzIC8gNCkudG9GaXhlZCg0KSk7XG4gICAgICBjb2xsaXNpb25zLnB1c2goe1xuICAgICAgICBpZCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGRyb3BwYWJsZUNvbnRhaW5lcixcbiAgICAgICAgICB2YWx1ZTogZWZmZWN0aXZlRGlzdGFuY2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbGxpc2lvbnMuc29ydChzb3J0Q29sbGlzaW9uc0FzYyk7XG59O1xuXG5mdW5jdGlvbiBhZGp1c3RTY2FsZSh0cmFuc2Zvcm0sIHJlY3QxLCByZWN0Mikge1xuICByZXR1cm4geyAuLi50cmFuc2Zvcm0sXG4gICAgc2NhbGVYOiByZWN0MSAmJiByZWN0MiA/IHJlY3QxLndpZHRoIC8gcmVjdDIud2lkdGggOiAxLFxuICAgIHNjYWxlWTogcmVjdDEgJiYgcmVjdDIgPyByZWN0MS5oZWlnaHQgLyByZWN0Mi5oZWlnaHQgOiAxXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3REZWx0YShyZWN0MSwgcmVjdDIpIHtcbiAgcmV0dXJuIHJlY3QxICYmIHJlY3QyID8ge1xuICAgIHg6IHJlY3QxLmxlZnQgLSByZWN0Mi5sZWZ0LFxuICAgIHk6IHJlY3QxLnRvcCAtIHJlY3QyLnRvcFxuICB9IDogZGVmYXVsdENvb3JkaW5hdGVzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZWN0QWRqdXN0bWVudEZuKG1vZGlmaWVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhZGp1c3RDbGllbnRSZWN0KHJlY3QpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYWRqdXN0bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYWRqdXN0bWVudHNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBhZGp1c3RtZW50cy5yZWR1Y2UoKGFjYywgYWRqdXN0bWVudCkgPT4gKHsgLi4uYWNjLFxuICAgICAgdG9wOiBhY2MudG9wICsgbW9kaWZpZXIgKiBhZGp1c3RtZW50LnksXG4gICAgICBib3R0b206IGFjYy5ib3R0b20gKyBtb2RpZmllciAqIGFkanVzdG1lbnQueSxcbiAgICAgIGxlZnQ6IGFjYy5sZWZ0ICsgbW9kaWZpZXIgKiBhZGp1c3RtZW50LngsXG4gICAgICByaWdodDogYWNjLnJpZ2h0ICsgbW9kaWZpZXIgKiBhZGp1c3RtZW50LnhcbiAgICB9KSwgeyAuLi5yZWN0XG4gICAgfSk7XG4gIH07XG59XG5jb25zdCBnZXRBZGp1c3RlZFJlY3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlUmVjdEFkanVzdG1lbnRGbigxKTtcblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gIGlmICh0cmFuc2Zvcm0uc3RhcnRzV2l0aCgnbWF0cml4M2QoJykpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1BcnJheSA9IHRyYW5zZm9ybS5zbGljZSg5LCAtMSkuc3BsaXQoLywgLyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6ICt0cmFuc2Zvcm1BcnJheVsxMl0sXG4gICAgICB5OiArdHJhbnNmb3JtQXJyYXlbMTNdLFxuICAgICAgc2NhbGVYOiArdHJhbnNmb3JtQXJyYXlbMF0sXG4gICAgICBzY2FsZVk6ICt0cmFuc2Zvcm1BcnJheVs1XVxuICAgIH07XG4gIH0gZWxzZSBpZiAodHJhbnNmb3JtLnN0YXJ0c1dpdGgoJ21hdHJpeCgnKSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybUFycmF5ID0gdHJhbnNmb3JtLnNsaWNlKDcsIC0xKS5zcGxpdCgvLCAvKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogK3RyYW5zZm9ybUFycmF5WzRdLFxuICAgICAgeTogK3RyYW5zZm9ybUFycmF5WzVdLFxuICAgICAgc2NhbGVYOiArdHJhbnNmb3JtQXJyYXlbMF0sXG4gICAgICBzY2FsZVk6ICt0cmFuc2Zvcm1BcnJheVszXVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW52ZXJzZVRyYW5zZm9ybShyZWN0LCB0cmFuc2Zvcm0sIHRyYW5zZm9ybU9yaWdpbikge1xuICBjb25zdCBwYXJzZWRUcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gIGlmICghcGFyc2VkVHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cblxuICBjb25zdCB7XG4gICAgc2NhbGVYLFxuICAgIHNjYWxlWSxcbiAgICB4OiB0cmFuc2xhdGVYLFxuICAgIHk6IHRyYW5zbGF0ZVlcbiAgfSA9IHBhcnNlZFRyYW5zZm9ybTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCAtIHRyYW5zbGF0ZVggLSAoMSAtIHNjYWxlWCkgKiBwYXJzZUZsb2F0KHRyYW5zZm9ybU9yaWdpbik7XG4gIGNvbnN0IHkgPSByZWN0LnRvcCAtIHRyYW5zbGF0ZVkgLSAoMSAtIHNjYWxlWSkgKiBwYXJzZUZsb2F0KHRyYW5zZm9ybU9yaWdpbi5zbGljZSh0cmFuc2Zvcm1PcmlnaW4uaW5kZXhPZignICcpICsgMSkpO1xuICBjb25zdCB3ID0gc2NhbGVYID8gcmVjdC53aWR0aCAvIHNjYWxlWCA6IHJlY3Qud2lkdGg7XG4gIGNvbnN0IGggPSBzY2FsZVkgPyByZWN0LmhlaWdodCAvIHNjYWxlWSA6IHJlY3QuaGVpZ2h0O1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3LFxuICAgIGhlaWdodDogaCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3LFxuICAgIGJvdHRvbTogeSArIGgsXG4gICAgbGVmdDogeFxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgaWdub3JlVHJhbnNmb3JtOiBmYWxzZVxufTtcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydC5cclxuICovXG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3QoZWxlbWVudCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICB9XG5cbiAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGlmIChvcHRpb25zLmlnbm9yZVRyYW5zZm9ybSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHRyYW5zZm9ybU9yaWdpblxuICAgIH0gPSBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIHJlY3QgPSBpbnZlcnNlVHJhbnNmb3JtKHJlY3QsIHRyYW5zZm9ybSwgdHJhbnNmb3JtT3JpZ2luKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB7XG4gICAgdG9wLFxuICAgIGxlZnQsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGJvdHRvbSxcbiAgICByaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB0b3AsXG4gICAgbGVmdCxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgYm90dG9tLFxuICAgIHJpZ2h0XG4gIH07XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgYm91bmRpbmcgY2xpZW50IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoZSBDbGllbnRSZWN0IHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXNcclxuICogYXBwbGllZCB0byB0aGUgZWxlbWVudCBpdCBtZWFzdXJlcy5cclxuICpcclxuICovXG5cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybUFnbm9zdGljQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDbGllbnRSZWN0KGVsZW1lbnQsIHtcbiAgICBpZ25vcmVUcmFuc2Zvcm06IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd0NsaWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuaW5uZXJXaWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5pbm5lckhlaWdodDtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogd2lkdGgsXG4gICAgYm90dG9tOiBoZWlnaHQsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRml4ZWQobm9kZSwgY29tcHV0ZWRTdHlsZSkge1xuICBpZiAoY29tcHV0ZWRTdHlsZSA9PT0gdm9pZCAwKSB7XG4gICAgY29tcHV0ZWRTdHlsZSA9IGdldFdpbmRvdyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCc7XG59XG5cbmZ1bmN0aW9uIGlzU2Nyb2xsYWJsZShlbGVtZW50LCBjb21wdXRlZFN0eWxlKSB7XG4gIGlmIChjb21wdXRlZFN0eWxlID09PSB2b2lkIDApIHtcbiAgICBjb21wdXRlZFN0eWxlID0gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIH1cblxuICBjb25zdCBvdmVyZmxvd1JlZ2V4ID0gLyhhdXRvfHNjcm9sbHxvdmVybGF5KS87XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBbJ292ZXJmbG93JywgJ292ZXJmbG93WCcsICdvdmVyZmxvd1knXTtcbiAgcmV0dXJuIHByb3BlcnRpZXMuc29tZShwcm9wZXJ0eSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlZFN0eWxlW3Byb3BlcnR5XTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG92ZXJmbG93UmVnZXgudGVzdCh2YWx1ZSkgOiBmYWxzZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGFibGVBbmNlc3RvcnMoZWxlbWVudCwgbGltaXQpIHtcbiAgY29uc3Qgc2Nyb2xsUGFyZW50cyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGZpbmRTY3JvbGxhYmxlQW5jZXN0b3JzKG5vZGUpIHtcbiAgICBpZiAobGltaXQgIT0gbnVsbCAmJiBzY3JvbGxQYXJlbnRzLmxlbmd0aCA+PSBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNjcm9sbFBhcmVudHM7XG4gICAgfVxuXG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm4gc2Nyb2xsUGFyZW50cztcbiAgICB9XG5cbiAgICBpZiAoaXNEb2N1bWVudChub2RlKSAmJiBub2RlLnNjcm9sbGluZ0VsZW1lbnQgIT0gbnVsbCAmJiAhc2Nyb2xsUGFyZW50cy5pbmNsdWRlcyhub2RlLnNjcm9sbGluZ0VsZW1lbnQpKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLnB1c2gobm9kZS5zY3JvbGxpbmdFbGVtZW50KTtcbiAgICAgIHJldHVybiBzY3JvbGxQYXJlbnRzO1xuICAgIH1cblxuICAgIGlmICghaXNIVE1MRWxlbWVudChub2RlKSB8fCBpc1NWR0VsZW1lbnQobm9kZSkpIHtcbiAgICAgIHJldHVybiBzY3JvbGxQYXJlbnRzO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxQYXJlbnRzLmluY2x1ZGVzKG5vZGUpKSB7XG4gICAgICByZXR1cm4gc2Nyb2xsUGFyZW50cztcbiAgICB9XG5cbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG5cbiAgICBpZiAobm9kZSAhPT0gZWxlbWVudCkge1xuICAgICAgaWYgKGlzU2Nyb2xsYWJsZShub2RlLCBjb21wdXRlZFN0eWxlKSkge1xuICAgICAgICBzY3JvbGxQYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzRml4ZWQobm9kZSwgY29tcHV0ZWRTdHlsZSkpIHtcbiAgICAgIHJldHVybiBzY3JvbGxQYXJlbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5kU2Nyb2xsYWJsZUFuY2VzdG9ycyhub2RlLnBhcmVudE5vZGUpO1xuICB9XG5cbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIHNjcm9sbFBhcmVudHM7XG4gIH1cblxuICByZXR1cm4gZmluZFNjcm9sbGFibGVBbmNlc3RvcnMoZWxlbWVudCk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdFNjcm9sbGFibGVBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IFtmaXJzdFNjcm9sbGFibGVBbmNlc3Rvcl0gPSBnZXRTY3JvbGxhYmxlQW5jZXN0b3JzKG5vZGUsIDEpO1xuICByZXR1cm4gZmlyc3RTY3JvbGxhYmxlQW5jZXN0b3IgIT0gbnVsbCA/IGZpcnN0U2Nyb2xsYWJsZUFuY2VzdG9yIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICBpZiAoIWNhblVzZURPTSB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGlzV2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBpZiAoIWlzTm9kZShlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGlzRG9jdW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudCA9PT0gZ2V0T3duZXJEb2N1bWVudChlbGVtZW50KS5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsWENvb3JkaW5hdGUoZWxlbWVudCkge1xuICBpZiAoaXNXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxYO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsTGVmdDtcbn1cbmZ1bmN0aW9uIGdldFNjcm9sbFlDb29yZGluYXRlKGVsZW1lbnQpIHtcbiAgaWYgKGlzV2luZG93KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsWTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50LnNjcm9sbFRvcDtcbn1cbmZ1bmN0aW9uIGdldFNjcm9sbENvb3JkaW5hdGVzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBnZXRTY3JvbGxYQ29vcmRpbmF0ZShlbGVtZW50KSxcbiAgICB5OiBnZXRTY3JvbGxZQ29vcmRpbmF0ZShlbGVtZW50KVxuICB9O1xufVxuXG52YXIgRGlyZWN0aW9uO1xuXG4oZnVuY3Rpb24gKERpcmVjdGlvbikge1xuICBEaXJlY3Rpb25bRGlyZWN0aW9uW1wiRm9yd2FyZFwiXSA9IDFdID0gXCJGb3J3YXJkXCI7XG4gIERpcmVjdGlvbltEaXJlY3Rpb25bXCJCYWNrd2FyZFwiXSA9IC0xXSA9IFwiQmFja3dhcmRcIjtcbn0pKERpcmVjdGlvbiB8fCAoRGlyZWN0aW9uID0ge30pKTtcblxuZnVuY3Rpb24gaXNEb2N1bWVudFNjcm9sbGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICBpZiAoIWNhblVzZURPTSB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50ID09PSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxpbmdDb250YWluZXIpIHtcbiAgY29uc3QgbWluU2Nyb2xsID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuICBjb25zdCBkaW1lbnNpb25zID0gaXNEb2N1bWVudFNjcm9sbGluZ0VsZW1lbnQoc2Nyb2xsaW5nQ29udGFpbmVyKSA/IHtcbiAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGhcbiAgfSA6IHtcbiAgICBoZWlnaHQ6IHNjcm9sbGluZ0NvbnRhaW5lci5jbGllbnRIZWlnaHQsXG4gICAgd2lkdGg6IHNjcm9sbGluZ0NvbnRhaW5lci5jbGllbnRXaWR0aFxuICB9O1xuICBjb25zdCBtYXhTY3JvbGwgPSB7XG4gICAgeDogc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbFdpZHRoIC0gZGltZW5zaW9ucy53aWR0aCxcbiAgICB5OiBzY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gZGltZW5zaW9ucy5oZWlnaHRcbiAgfTtcbiAgY29uc3QgaXNUb3AgPSBzY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsVG9wIDw9IG1pblNjcm9sbC55O1xuICBjb25zdCBpc0xlZnQgPSBzY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsTGVmdCA8PSBtaW5TY3JvbGwueDtcbiAgY29uc3QgaXNCb3R0b20gPSBzY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsVG9wID49IG1heFNjcm9sbC55O1xuICBjb25zdCBpc1JpZ2h0ID0gc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbExlZnQgPj0gbWF4U2Nyb2xsLng7XG4gIHJldHVybiB7XG4gICAgaXNUb3AsXG4gICAgaXNMZWZ0LFxuICAgIGlzQm90dG9tLFxuICAgIGlzUmlnaHQsXG4gICAgbWF4U2Nyb2xsLFxuICAgIG1pblNjcm9sbFxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0VGhyZXNob2xkID0ge1xuICB4OiAwLjIsXG4gIHk6IDAuMlxufTtcbmZ1bmN0aW9uIGdldFNjcm9sbERpcmVjdGlvbkFuZFNwZWVkKHNjcm9sbENvbnRhaW5lciwgc2Nyb2xsQ29udGFpbmVyUmVjdCwgX3JlZiwgYWNjZWxlcmF0aW9uLCB0aHJlc2hvbGRQZXJjZW50YWdlKSB7XG4gIGxldCB7XG4gICAgdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgYm90dG9tXG4gIH0gPSBfcmVmO1xuXG4gIGlmIChhY2NlbGVyYXRpb24gPT09IHZvaWQgMCkge1xuICAgIGFjY2VsZXJhdGlvbiA9IDEwO1xuICB9XG5cbiAgaWYgKHRocmVzaG9sZFBlcmNlbnRhZ2UgPT09IHZvaWQgMCkge1xuICAgIHRocmVzaG9sZFBlcmNlbnRhZ2UgPSBkZWZhdWx0VGhyZXNob2xkO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzVG9wLFxuICAgIGlzQm90dG9tLFxuICAgIGlzTGVmdCxcbiAgICBpc1JpZ2h0XG4gIH0gPSBnZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxDb250YWluZXIpO1xuICBjb25zdCBkaXJlY3Rpb24gPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG4gIGNvbnN0IHNwZWVkID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuICBjb25zdCB0aHJlc2hvbGQgPSB7XG4gICAgaGVpZ2h0OiBzY3JvbGxDb250YWluZXJSZWN0LmhlaWdodCAqIHRocmVzaG9sZFBlcmNlbnRhZ2UueSxcbiAgICB3aWR0aDogc2Nyb2xsQ29udGFpbmVyUmVjdC53aWR0aCAqIHRocmVzaG9sZFBlcmNlbnRhZ2UueFxuICB9O1xuXG4gIGlmICghaXNUb3AgJiYgdG9wIDw9IHNjcm9sbENvbnRhaW5lclJlY3QudG9wICsgdGhyZXNob2xkLmhlaWdodCkge1xuICAgIC8vIFNjcm9sbCBVcFxuICAgIGRpcmVjdGlvbi55ID0gRGlyZWN0aW9uLkJhY2t3YXJkO1xuICAgIHNwZWVkLnkgPSBhY2NlbGVyYXRpb24gKiBNYXRoLmFicygoc2Nyb2xsQ29udGFpbmVyUmVjdC50b3AgKyB0aHJlc2hvbGQuaGVpZ2h0IC0gdG9wKSAvIHRocmVzaG9sZC5oZWlnaHQpO1xuICB9IGVsc2UgaWYgKCFpc0JvdHRvbSAmJiBib3R0b20gPj0gc2Nyb2xsQ29udGFpbmVyUmVjdC5ib3R0b20gLSB0aHJlc2hvbGQuaGVpZ2h0KSB7XG4gICAgLy8gU2Nyb2xsIERvd25cbiAgICBkaXJlY3Rpb24ueSA9IERpcmVjdGlvbi5Gb3J3YXJkO1xuICAgIHNwZWVkLnkgPSBhY2NlbGVyYXRpb24gKiBNYXRoLmFicygoc2Nyb2xsQ29udGFpbmVyUmVjdC5ib3R0b20gLSB0aHJlc2hvbGQuaGVpZ2h0IC0gYm90dG9tKSAvIHRocmVzaG9sZC5oZWlnaHQpO1xuICB9XG5cbiAgaWYgKCFpc1JpZ2h0ICYmIHJpZ2h0ID49IHNjcm9sbENvbnRhaW5lclJlY3QucmlnaHQgLSB0aHJlc2hvbGQud2lkdGgpIHtcbiAgICAvLyBTY3JvbGwgUmlnaHRcbiAgICBkaXJlY3Rpb24ueCA9IERpcmVjdGlvbi5Gb3J3YXJkO1xuICAgIHNwZWVkLnggPSBhY2NlbGVyYXRpb24gKiBNYXRoLmFicygoc2Nyb2xsQ29udGFpbmVyUmVjdC5yaWdodCAtIHRocmVzaG9sZC53aWR0aCAtIHJpZ2h0KSAvIHRocmVzaG9sZC53aWR0aCk7XG4gIH0gZWxzZSBpZiAoIWlzTGVmdCAmJiBsZWZ0IDw9IHNjcm9sbENvbnRhaW5lclJlY3QubGVmdCArIHRocmVzaG9sZC53aWR0aCkge1xuICAgIC8vIFNjcm9sbCBMZWZ0XG4gICAgZGlyZWN0aW9uLnggPSBEaXJlY3Rpb24uQmFja3dhcmQ7XG4gICAgc3BlZWQueCA9IGFjY2VsZXJhdGlvbiAqIE1hdGguYWJzKChzY3JvbGxDb250YWluZXJSZWN0LmxlZnQgKyB0aHJlc2hvbGQud2lkdGggLSBsZWZ0KSAvIHRocmVzaG9sZC53aWR0aCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRpcmVjdGlvbixcbiAgICBzcGVlZFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxFbGVtZW50UmVjdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5uZXJXaWR0aCxcbiAgICAgIGlubmVySGVpZ2h0XG4gICAgfSA9IHdpbmRvdztcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiBpbm5lcldpZHRoLFxuICAgICAgYm90dG9tOiBpbm5lckhlaWdodCxcbiAgICAgIHdpZHRoOiBpbm5lcldpZHRoLFxuICAgICAgaGVpZ2h0OiBpbm5lckhlaWdodFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7XG4gICAgdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgYm90dG9tXG4gIH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIGJvdHRvbSxcbiAgICB3aWR0aDogZWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICBoZWlnaHQ6IGVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbE9mZnNldHMoc2Nyb2xsYWJsZUFuY2VzdG9ycykge1xuICByZXR1cm4gc2Nyb2xsYWJsZUFuY2VzdG9ycy5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICAgIHJldHVybiBhZGQoYWNjLCBnZXRTY3JvbGxDb29yZGluYXRlcyhub2RlKSk7XG4gIH0sIGRlZmF1bHRDb29yZGluYXRlcyk7XG59XG5mdW5jdGlvbiBnZXRTY3JvbGxYT2Zmc2V0KHNjcm9sbGFibGVBbmNlc3RvcnMpIHtcbiAgcmV0dXJuIHNjcm9sbGFibGVBbmNlc3RvcnMucmVkdWNlKChhY2MsIG5vZGUpID0+IHtcbiAgICByZXR1cm4gYWNjICsgZ2V0U2Nyb2xsWENvb3JkaW5hdGUobm9kZSk7XG4gIH0sIDApO1xufVxuZnVuY3Rpb24gZ2V0U2Nyb2xsWU9mZnNldChzY3JvbGxhYmxlQW5jZXN0b3JzKSB7XG4gIHJldHVybiBzY3JvbGxhYmxlQW5jZXN0b3JzLnJlZHVjZSgoYWNjLCBub2RlKSA9PiB7XG4gICAgcmV0dXJuIGFjYyArIGdldFNjcm9sbFlDb29yZGluYXRlKG5vZGUpO1xuICB9LCAwKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChlbGVtZW50LCBtZWFzdXJlKSB7XG4gIGlmIChtZWFzdXJlID09PSB2b2lkIDApIHtcbiAgICBtZWFzdXJlID0gZ2V0Q2xpZW50UmVjdDtcbiAgfVxuXG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB0b3AsXG4gICAgbGVmdCxcbiAgICBib3R0b20sXG4gICAgcmlnaHRcbiAgfSA9IG1lYXN1cmUoZWxlbWVudCk7XG4gIGNvbnN0IGZpcnN0U2Nyb2xsYWJsZUFuY2VzdG9yID0gZ2V0Rmlyc3RTY3JvbGxhYmxlQW5jZXN0b3IoZWxlbWVudCk7XG5cbiAgaWYgKCFmaXJzdFNjcm9sbGFibGVBbmNlc3Rvcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChib3R0b20gPD0gMCB8fCByaWdodCA8PSAwIHx8IHRvcCA+PSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgbGVmdCA+PSB3aW5kb3cuaW5uZXJXaWR0aCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgaW5saW5lOiAnY2VudGVyJ1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBbWyd4JywgWydsZWZ0JywgJ3JpZ2h0J10sIGdldFNjcm9sbFhPZmZzZXRdLCBbJ3knLCBbJ3RvcCcsICdib3R0b20nXSwgZ2V0U2Nyb2xsWU9mZnNldF1dO1xuY2xhc3MgUmVjdCB7XG4gIGNvbnN0cnVjdG9yKHJlY3QsIGVsZW1lbnQpIHtcbiAgICB0aGlzLnJlY3QgPSB2b2lkIDA7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLnRvcCA9IHZvaWQgMDtcbiAgICB0aGlzLmJvdHRvbSA9IHZvaWQgMDtcbiAgICB0aGlzLnJpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMubGVmdCA9IHZvaWQgMDtcbiAgICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3JzID0gZ2V0U2Nyb2xsYWJsZUFuY2VzdG9ycyhlbGVtZW50KTtcbiAgICBjb25zdCBzY3JvbGxPZmZzZXRzID0gZ2V0U2Nyb2xsT2Zmc2V0cyhzY3JvbGxhYmxlQW5jZXN0b3JzKTtcbiAgICB0aGlzLnJlY3QgPSB7IC4uLnJlY3RcbiAgICB9O1xuICAgIHRoaXMud2lkdGggPSByZWN0LndpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XG5cbiAgICBmb3IgKGNvbnN0IFtheGlzLCBrZXlzLCBnZXRTY3JvbGxPZmZzZXRdIG9mIHByb3BlcnRpZXMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE9mZnNldHMgPSBnZXRTY3JvbGxPZmZzZXQoc2Nyb2xsYWJsZUFuY2VzdG9ycyk7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxPZmZzZXRzRGVsdGxhID0gc2Nyb2xsT2Zmc2V0c1theGlzXSAtIGN1cnJlbnRPZmZzZXRzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjdFtrZXldICsgc2Nyb2xsT2Zmc2V0c0RlbHRsYTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdyZWN0Jywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIExpc3RlbmVycyB7XG4gIGNvbnN0cnVjdG9yKHRhcmdldCkge1xuICAgIHRoaXMudGFyZ2V0ID0gdm9pZCAwO1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG5cbiAgICB0aGlzLnJlbW92ZUFsbCA9ICgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgICB2YXIgX3RoaXMkdGFyZ2V0O1xuXG4gICAgICAgIHJldHVybiAoX3RoaXMkdGFyZ2V0ID0gdGhpcy50YXJnZXQpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lciguLi5saXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIH1cblxuICBhZGQoZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJHRhcmdldDI7XG5cbiAgICAoX3RoaXMkdGFyZ2V0MiA9IHRoaXMudGFyZ2V0KSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdGFyZ2V0Mi5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChbZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zXSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXRFdmVudExpc3RlbmVyVGFyZ2V0KHRhcmdldCkge1xuICAvLyBJZiB0aGUgYGV2ZW50LnRhcmdldGAgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGV2ZW50cyB3aWxsIHN0aWxsIGJlIHRhcmdldGVkXG4gIC8vIGF0IGl0LCBhbmQgaGVuY2Ugd29uJ3QgYWx3YXlzIGJ1YmJsZSB1cCB0byB0aGUgd2luZG93IG9yIGRvY3VtZW50IGFueW1vcmUuXG4gIC8vIElmIHRoZXJlIGlzIGFueSByaXNrIG9mIGFuIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZCB3aGlsZSBpdCBpcyBiZWluZyBkcmFnZ2VkLFxuICAvLyB0aGUgYmVzdCBwcmFjdGljZSBpcyB0byBhdHRhY2ggdGhlIGV2ZW50IGxpc3RlbmVycyBkaXJlY3RseSB0byB0aGUgdGFyZ2V0LlxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXRcbiAgY29uc3Qge1xuICAgIEV2ZW50VGFyZ2V0XG4gIH0gPSBnZXRXaW5kb3codGFyZ2V0KTtcbiAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0ID8gdGFyZ2V0IDogZ2V0T3duZXJEb2N1bWVudCh0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBoYXNFeGNlZWRlZERpc3RhbmNlKGRlbHRhLCBtZWFzdXJlbWVudCkge1xuICBjb25zdCBkeCA9IE1hdGguYWJzKGRlbHRhLngpO1xuICBjb25zdCBkeSA9IE1hdGguYWJzKGRlbHRhLnkpO1xuXG4gIGlmICh0eXBlb2YgbWVhc3VyZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqKiAyICsgZHkgKiogMikgPiBtZWFzdXJlbWVudDtcbiAgfVxuXG4gIGlmICgneCcgaW4gbWVhc3VyZW1lbnQgJiYgJ3knIGluIG1lYXN1cmVtZW50KSB7XG4gICAgcmV0dXJuIGR4ID4gbWVhc3VyZW1lbnQueCAmJiBkeSA+IG1lYXN1cmVtZW50Lnk7XG4gIH1cblxuICBpZiAoJ3gnIGluIG1lYXN1cmVtZW50KSB7XG4gICAgcmV0dXJuIGR4ID4gbWVhc3VyZW1lbnQueDtcbiAgfVxuXG4gIGlmICgneScgaW4gbWVhc3VyZW1lbnQpIHtcbiAgICByZXR1cm4gZHkgPiBtZWFzdXJlbWVudC55O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgRXZlbnROYW1lO1xuXG4oZnVuY3Rpb24gKEV2ZW50TmFtZSkge1xuICBFdmVudE5hbWVbXCJDbGlja1wiXSA9IFwiY2xpY2tcIjtcbiAgRXZlbnROYW1lW1wiRHJhZ1N0YXJ0XCJdID0gXCJkcmFnc3RhcnRcIjtcbiAgRXZlbnROYW1lW1wiS2V5ZG93blwiXSA9IFwia2V5ZG93blwiO1xuICBFdmVudE5hbWVbXCJDb250ZXh0TWVudVwiXSA9IFwiY29udGV4dG1lbnVcIjtcbiAgRXZlbnROYW1lW1wiUmVzaXplXCJdID0gXCJyZXNpemVcIjtcbiAgRXZlbnROYW1lW1wiU2VsZWN0aW9uQ2hhbmdlXCJdID0gXCJzZWxlY3Rpb25jaGFuZ2VcIjtcbiAgRXZlbnROYW1lW1wiVmlzaWJpbGl0eUNoYW5nZVwiXSA9IFwidmlzaWJpbGl0eWNoYW5nZVwiO1xufSkoRXZlbnROYW1lIHx8IChFdmVudE5hbWUgPSB7fSkpO1xuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG52YXIgS2V5Ym9hcmRDb2RlO1xuXG4oZnVuY3Rpb24gKEtleWJvYXJkQ29kZSkge1xuICBLZXlib2FyZENvZGVbXCJTcGFjZVwiXSA9IFwiU3BhY2VcIjtcbiAgS2V5Ym9hcmRDb2RlW1wiRG93blwiXSA9IFwiQXJyb3dEb3duXCI7XG4gIEtleWJvYXJkQ29kZVtcIlJpZ2h0XCJdID0gXCJBcnJvd1JpZ2h0XCI7XG4gIEtleWJvYXJkQ29kZVtcIkxlZnRcIl0gPSBcIkFycm93TGVmdFwiO1xuICBLZXlib2FyZENvZGVbXCJVcFwiXSA9IFwiQXJyb3dVcFwiO1xuICBLZXlib2FyZENvZGVbXCJFc2NcIl0gPSBcIkVzY2FwZVwiO1xuICBLZXlib2FyZENvZGVbXCJFbnRlclwiXSA9IFwiRW50ZXJcIjtcbiAgS2V5Ym9hcmRDb2RlW1wiVGFiXCJdID0gXCJUYWJcIjtcbn0pKEtleWJvYXJkQ29kZSB8fCAoS2V5Ym9hcmRDb2RlID0ge30pKTtcblxuY29uc3QgZGVmYXVsdEtleWJvYXJkQ29kZXMgPSB7XG4gIHN0YXJ0OiBbS2V5Ym9hcmRDb2RlLlNwYWNlLCBLZXlib2FyZENvZGUuRW50ZXJdLFxuICBjYW5jZWw6IFtLZXlib2FyZENvZGUuRXNjXSxcbiAgZW5kOiBbS2V5Ym9hcmRDb2RlLlNwYWNlLCBLZXlib2FyZENvZGUuRW50ZXIsIEtleWJvYXJkQ29kZS5UYWJdXG59O1xuY29uc3QgZGVmYXVsdEtleWJvYXJkQ29vcmRpbmF0ZUdldHRlciA9IChldmVudCwgX3JlZikgPT4ge1xuICBsZXQge1xuICAgIGN1cnJlbnRDb29yZGluYXRlc1xuICB9ID0gX3JlZjtcblxuICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICBjYXNlIEtleWJvYXJkQ29kZS5SaWdodDpcbiAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRDb29yZGluYXRlcyxcbiAgICAgICAgeDogY3VycmVudENvb3JkaW5hdGVzLnggKyAyNVxuICAgICAgfTtcblxuICAgIGNhc2UgS2V5Ym9hcmRDb2RlLkxlZnQ6XG4gICAgICByZXR1cm4geyAuLi5jdXJyZW50Q29vcmRpbmF0ZXMsXG4gICAgICAgIHg6IGN1cnJlbnRDb29yZGluYXRlcy54IC0gMjVcbiAgICAgIH07XG5cbiAgICBjYXNlIEtleWJvYXJkQ29kZS5Eb3duOlxuICAgICAgcmV0dXJuIHsgLi4uY3VycmVudENvb3JkaW5hdGVzLFxuICAgICAgICB5OiBjdXJyZW50Q29vcmRpbmF0ZXMueSArIDI1XG4gICAgICB9O1xuXG4gICAgY2FzZSBLZXlib2FyZENvZGUuVXA6XG4gICAgICByZXR1cm4geyAuLi5jdXJyZW50Q29vcmRpbmF0ZXMsXG4gICAgICAgIHk6IGN1cnJlbnRDb29yZGluYXRlcy55IC0gMjVcbiAgICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY2xhc3MgS2V5Ym9hcmRTZW5zb3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSB2b2lkIDA7XG4gICAgdGhpcy5hdXRvU2Nyb2xsRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVmZXJlbmNlQ29vcmRpbmF0ZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy53aW5kb3dMaXN0ZW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIHRhcmdldFxuICAgICAgfVxuICAgIH0gPSBwcm9wcztcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBuZXcgTGlzdGVuZXJzKGdldE93bmVyRG9jdW1lbnQodGFyZ2V0KSk7XG4gICAgdGhpcy53aW5kb3dMaXN0ZW5lcnMgPSBuZXcgTGlzdGVuZXJzKGdldFdpbmRvdyh0YXJnZXQpKTtcbiAgICB0aGlzLmhhbmRsZUtleURvd24gPSB0aGlzLmhhbmRsZUtleURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUNhbmNlbCA9IHRoaXMuaGFuZGxlQ2FuY2VsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hdHRhY2goKTtcbiAgfVxuXG4gIGF0dGFjaCgpIHtcbiAgICB0aGlzLmhhbmRsZVN0YXJ0KCk7XG4gICAgdGhpcy53aW5kb3dMaXN0ZW5lcnMuYWRkKEV2ZW50TmFtZS5SZXNpemUsIHRoaXMuaGFuZGxlQ2FuY2VsKTtcbiAgICB0aGlzLndpbmRvd0xpc3RlbmVycy5hZGQoRXZlbnROYW1lLlZpc2liaWxpdHlDaGFuZ2UsIHRoaXMuaGFuZGxlQ2FuY2VsKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubGlzdGVuZXJzLmFkZChFdmVudE5hbWUuS2V5ZG93biwgdGhpcy5oYW5kbGVLZXlEb3duKSk7XG4gIH1cblxuICBoYW5kbGVTdGFydCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVOb2RlLFxuICAgICAgb25TdGFydFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG5vZGUgPSBhY3RpdmVOb2RlLm5vZGUuY3VycmVudDtcblxuICAgIGlmIChub2RlKSB7XG4gICAgICBzY3JvbGxJbnRvVmlld0lmTmVlZGVkKG5vZGUpO1xuICAgIH1cblxuICAgIG9uU3RhcnQoZGVmYXVsdENvb3JkaW5hdGVzKTtcbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50KGV2ZW50KSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge1xuICAgICAgICBrZXlib2FyZENvZGVzID0gZGVmYXVsdEtleWJvYXJkQ29kZXMsXG4gICAgICAgIGNvb3JkaW5hdGVHZXR0ZXIgPSBkZWZhdWx0S2V5Ym9hcmRDb29yZGluYXRlR2V0dGVyLFxuICAgICAgICBzY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29kZVxuICAgICAgfSA9IGV2ZW50O1xuXG4gICAgICBpZiAoa2V5Ym9hcmRDb2Rlcy5lbmQuaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFbmQoZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXlib2FyZENvZGVzLmNhbmNlbC5pbmNsdWRlcyhjb2RlKSkge1xuICAgICAgICB0aGlzLmhhbmRsZUNhbmNlbChldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBjb2xsaXNpb25SZWN0XG4gICAgICB9ID0gY29udGV4dC5jdXJyZW50O1xuICAgICAgY29uc3QgY3VycmVudENvb3JkaW5hdGVzID0gY29sbGlzaW9uUmVjdCA/IHtcbiAgICAgICAgeDogY29sbGlzaW9uUmVjdC5sZWZ0LFxuICAgICAgICB5OiBjb2xsaXNpb25SZWN0LnRvcFxuICAgICAgfSA6IGRlZmF1bHRDb29yZGluYXRlcztcblxuICAgICAgaWYgKCF0aGlzLnJlZmVyZW5jZUNvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlQ29vcmRpbmF0ZXMgPSBjdXJyZW50Q29vcmRpbmF0ZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0Nvb3JkaW5hdGVzID0gY29vcmRpbmF0ZUdldHRlcihldmVudCwge1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQuY3VycmVudCxcbiAgICAgICAgY3VycmVudENvb3JkaW5hdGVzXG4gICAgICB9KTtcblxuICAgICAgaWYgKG5ld0Nvb3JkaW5hdGVzKSB7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzRGVsdGEgPSBzdWJ0cmFjdChuZXdDb29yZGluYXRlcywgY3VycmVudENvb3JkaW5hdGVzKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsRGVsdGEgPSB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY3JvbGxhYmxlQW5jZXN0b3JzXG4gICAgICAgIH0gPSBjb250ZXh0LmN1cnJlbnQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBzY3JvbGxDb250YWluZXIgb2Ygc2Nyb2xsYWJsZUFuY2VzdG9ycykge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGV2ZW50LmNvZGU7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaXNUb3AsXG4gICAgICAgICAgICBpc1JpZ2h0LFxuICAgICAgICAgICAgaXNMZWZ0LFxuICAgICAgICAgICAgaXNCb3R0b20sXG4gICAgICAgICAgICBtYXhTY3JvbGwsXG4gICAgICAgICAgICBtaW5TY3JvbGxcbiAgICAgICAgICB9ID0gZ2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsQ29udGFpbmVyKTtcbiAgICAgICAgICBjb25zdCBzY3JvbGxFbGVtZW50UmVjdCA9IGdldFNjcm9sbEVsZW1lbnRSZWN0KHNjcm9sbENvbnRhaW5lcik7XG4gICAgICAgICAgY29uc3QgY2xhbXBlZENvb3JkaW5hdGVzID0ge1xuICAgICAgICAgICAgeDogTWF0aC5taW4oZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuUmlnaHQgPyBzY3JvbGxFbGVtZW50UmVjdC5yaWdodCAtIHNjcm9sbEVsZW1lbnRSZWN0LndpZHRoIC8gMiA6IHNjcm9sbEVsZW1lbnRSZWN0LnJpZ2h0LCBNYXRoLm1heChkaXJlY3Rpb24gPT09IEtleWJvYXJkQ29kZS5SaWdodCA/IHNjcm9sbEVsZW1lbnRSZWN0LmxlZnQgOiBzY3JvbGxFbGVtZW50UmVjdC5sZWZ0ICsgc2Nyb2xsRWxlbWVudFJlY3Qud2lkdGggLyAyLCBuZXdDb29yZGluYXRlcy54KSksXG4gICAgICAgICAgICB5OiBNYXRoLm1pbihkaXJlY3Rpb24gPT09IEtleWJvYXJkQ29kZS5Eb3duID8gc2Nyb2xsRWxlbWVudFJlY3QuYm90dG9tIC0gc2Nyb2xsRWxlbWVudFJlY3QuaGVpZ2h0IC8gMiA6IHNjcm9sbEVsZW1lbnRSZWN0LmJvdHRvbSwgTWF0aC5tYXgoZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuRG93biA/IHNjcm9sbEVsZW1lbnRSZWN0LnRvcCA6IHNjcm9sbEVsZW1lbnRSZWN0LnRvcCArIHNjcm9sbEVsZW1lbnRSZWN0LmhlaWdodCAvIDIsIG5ld0Nvb3JkaW5hdGVzLnkpKVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgY2FuU2Nyb2xsWCA9IGRpcmVjdGlvbiA9PT0gS2V5Ym9hcmRDb2RlLlJpZ2h0ICYmICFpc1JpZ2h0IHx8IGRpcmVjdGlvbiA9PT0gS2V5Ym9hcmRDb2RlLkxlZnQgJiYgIWlzTGVmdDtcbiAgICAgICAgICBjb25zdCBjYW5TY3JvbGxZID0gZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuRG93biAmJiAhaXNCb3R0b20gfHwgZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuVXAgJiYgIWlzVG9wO1xuXG4gICAgICAgICAgaWYgKGNhblNjcm9sbFggJiYgY2xhbXBlZENvb3JkaW5hdGVzLnggIT09IG5ld0Nvb3JkaW5hdGVzLngpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Njcm9sbENvb3JkaW5hdGVzID0gc2Nyb2xsQ29udGFpbmVyLnNjcm9sbExlZnQgKyBjb29yZGluYXRlc0RlbHRhLng7XG4gICAgICAgICAgICBjb25zdCBjYW5TY3JvbGxUb05ld0Nvb3JkaW5hdGVzID0gZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuUmlnaHQgJiYgbmV3U2Nyb2xsQ29vcmRpbmF0ZXMgPD0gbWF4U2Nyb2xsLnggfHwgZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuTGVmdCAmJiBuZXdTY3JvbGxDb29yZGluYXRlcyA+PSBtaW5TY3JvbGwueDtcblxuICAgICAgICAgICAgaWYgKGNhblNjcm9sbFRvTmV3Q29vcmRpbmF0ZXMgJiYgIWNvb3JkaW5hdGVzRGVsdGEueSkge1xuICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBjb29yZGluYXRlcywgdGhlIHNjcm9sbCBhZGp1c3RtZW50IGFsb25lIHdpbGwgdHJpZ2dlclxuICAgICAgICAgICAgICAvLyBsb2dpYyB0byBhdXRvLWRldGVjdCB0aGUgbmV3IGNvbnRhaW5lciB3ZSBhcmUgb3ZlclxuICAgICAgICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgICAgIGxlZnQ6IG5ld1Njcm9sbENvb3JkaW5hdGVzLFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBzY3JvbGxCZWhhdmlvclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2FuU2Nyb2xsVG9OZXdDb29yZGluYXRlcykge1xuICAgICAgICAgICAgICBzY3JvbGxEZWx0YS54ID0gc2Nyb2xsQ29udGFpbmVyLnNjcm9sbExlZnQgLSBuZXdTY3JvbGxDb29yZGluYXRlcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjcm9sbERlbHRhLnggPSBkaXJlY3Rpb24gPT09IEtleWJvYXJkQ29kZS5SaWdodCA/IHNjcm9sbENvbnRhaW5lci5zY3JvbGxMZWZ0IC0gbWF4U2Nyb2xsLnggOiBzY3JvbGxDb250YWluZXIuc2Nyb2xsTGVmdCAtIG1pblNjcm9sbC54O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2Nyb2xsRGVsdGEueCkge1xuICAgICAgICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsQnkoe1xuICAgICAgICAgICAgICAgIGxlZnQ6IC1zY3JvbGxEZWx0YS54LFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBzY3JvbGxCZWhhdmlvclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChjYW5TY3JvbGxZICYmIGNsYW1wZWRDb29yZGluYXRlcy55ICE9PSBuZXdDb29yZGluYXRlcy55KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTY3JvbGxDb29yZGluYXRlcyA9IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgKyBjb29yZGluYXRlc0RlbHRhLnk7XG4gICAgICAgICAgICBjb25zdCBjYW5TY3JvbGxUb05ld0Nvb3JkaW5hdGVzID0gZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuRG93biAmJiBuZXdTY3JvbGxDb29yZGluYXRlcyA8PSBtYXhTY3JvbGwueSB8fCBkaXJlY3Rpb24gPT09IEtleWJvYXJkQ29kZS5VcCAmJiBuZXdTY3JvbGxDb29yZGluYXRlcyA+PSBtaW5TY3JvbGwueTtcblxuICAgICAgICAgICAgaWYgKGNhblNjcm9sbFRvTmV3Q29vcmRpbmF0ZXMgJiYgIWNvb3JkaW5hdGVzRGVsdGEueCkge1xuICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBjb29yZGluYXRlcywgdGhlIHNjcm9sbCBhZGp1c3RtZW50IGFsb25lIHdpbGwgdHJpZ2dlclxuICAgICAgICAgICAgICAvLyBsb2dpYyB0byBhdXRvLWRldGVjdCB0aGUgbmV3IGNvbnRhaW5lciB3ZSBhcmUgb3ZlclxuICAgICAgICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgICAgIHRvcDogbmV3U2Nyb2xsQ29vcmRpbmF0ZXMsXG4gICAgICAgICAgICAgICAgYmVoYXZpb3I6IHNjcm9sbEJlaGF2aW9yXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjYW5TY3JvbGxUb05ld0Nvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICAgIHNjcm9sbERlbHRhLnkgPSBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wIC0gbmV3U2Nyb2xsQ29vcmRpbmF0ZXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY3JvbGxEZWx0YS55ID0gZGlyZWN0aW9uID09PSBLZXlib2FyZENvZGUuRG93biA/IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgLSBtYXhTY3JvbGwueSA6IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgLSBtaW5TY3JvbGwueTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjcm9sbERlbHRhLnkpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbEJ5KHtcbiAgICAgICAgICAgICAgICB0b3A6IC1zY3JvbGxEZWx0YS55LFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBzY3JvbGxCZWhhdmlvclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVNb3ZlKGV2ZW50LCBhZGQoc3VidHJhY3QobmV3Q29vcmRpbmF0ZXMsIHRoaXMucmVmZXJlbmNlQ29vcmRpbmF0ZXMpLCBzY3JvbGxEZWx0YSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1vdmUoZXZlbnQsIGNvb3JkaW5hdGVzKSB7XG4gICAgY29uc3Qge1xuICAgICAgb25Nb3ZlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBvbk1vdmUoY29vcmRpbmF0ZXMpO1xuICB9XG5cbiAgaGFuZGxlRW5kKGV2ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgb25FbmRcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZGV0YWNoKCk7XG4gICAgb25FbmQoKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbChldmVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uQ2FuY2VsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmRldGFjaCgpO1xuICAgIG9uQ2FuY2VsKCk7XG4gIH1cblxuICBkZXRhY2goKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMucmVtb3ZlQWxsKCk7XG4gICAgdGhpcy53aW5kb3dMaXN0ZW5lcnMucmVtb3ZlQWxsKCk7XG4gIH1cblxufVxuS2V5Ym9hcmRTZW5zb3IuYWN0aXZhdG9ycyA9IFt7XG4gIGV2ZW50TmFtZTogJ29uS2V5RG93bicsXG4gIGhhbmRsZXI6IChldmVudCwgX3JlZiwgX3JlZjIpID0+IHtcbiAgICBsZXQge1xuICAgICAga2V5Ym9hcmRDb2RlcyA9IGRlZmF1bHRLZXlib2FyZENvZGVzLFxuICAgICAgb25BY3RpdmF0aW9uXG4gICAgfSA9IF9yZWY7XG4gICAgbGV0IHtcbiAgICAgIGFjdGl2ZVxuICAgIH0gPSBfcmVmMjtcbiAgICBjb25zdCB7XG4gICAgICBjb2RlXG4gICAgfSA9IGV2ZW50Lm5hdGl2ZUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkQ29kZXMuc3RhcnQuaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgIGNvbnN0IGFjdGl2YXRvciA9IGFjdGl2ZS5hY3RpdmF0b3JOb2RlLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChhY3RpdmF0b3IgJiYgZXZlbnQudGFyZ2V0ICE9PSBhY3RpdmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgb25BY3RpdmF0aW9uID09IG51bGwgPyB2b2lkIDAgOiBvbkFjdGl2YXRpb24oe1xuICAgICAgICBldmVudDogZXZlbnQubmF0aXZlRXZlbnRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XTtcblxuZnVuY3Rpb24gaXNEaXN0YW5jZUNvbnN0cmFpbnQoY29uc3RyYWludCkge1xuICByZXR1cm4gQm9vbGVhbihjb25zdHJhaW50ICYmICdkaXN0YW5jZScgaW4gY29uc3RyYWludCk7XG59XG5cbmZ1bmN0aW9uIGlzRGVsYXlDb25zdHJhaW50KGNvbnN0cmFpbnQpIHtcbiAgcmV0dXJuIEJvb2xlYW4oY29uc3RyYWludCAmJiAnZGVsYXknIGluIGNvbnN0cmFpbnQpO1xufVxuXG5jbGFzcyBBYnN0cmFjdFBvaW50ZXJTZW5zb3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wcywgZXZlbnRzLCBsaXN0ZW5lclRhcmdldCkge1xuICAgIHZhciBfZ2V0RXZlbnRDb29yZGluYXRlcztcblxuICAgIGlmIChsaXN0ZW5lclRhcmdldCA9PT0gdm9pZCAwKSB7XG4gICAgICBsaXN0ZW5lclRhcmdldCA9IGdldEV2ZW50TGlzdGVuZXJUYXJnZXQocHJvcHMuZXZlbnQudGFyZ2V0KTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzID0gdm9pZCAwO1xuICAgIHRoaXMuZXZlbnRzID0gdm9pZCAwO1xuICAgIHRoaXMuYXV0b1Njcm9sbEVuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuZG9jdW1lbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRpYWxDb29yZGluYXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnRpbWVvdXRJZCA9IG51bGw7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5kb2N1bWVudExpc3RlbmVycyA9IHZvaWQgMDtcbiAgICB0aGlzLndpbmRvd0xpc3RlbmVycyA9IHZvaWQgMDtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5ldmVudHMgPSBldmVudHM7XG4gICAgY29uc3Qge1xuICAgICAgZXZlbnRcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgdGFyZ2V0XG4gICAgfSA9IGV2ZW50O1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmV2ZW50cyA9IGV2ZW50cztcbiAgICB0aGlzLmRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudCh0YXJnZXQpO1xuICAgIHRoaXMuZG9jdW1lbnRMaXN0ZW5lcnMgPSBuZXcgTGlzdGVuZXJzKHRoaXMuZG9jdW1lbnQpO1xuICAgIHRoaXMubGlzdGVuZXJzID0gbmV3IExpc3RlbmVycyhsaXN0ZW5lclRhcmdldCk7XG4gICAgdGhpcy53aW5kb3dMaXN0ZW5lcnMgPSBuZXcgTGlzdGVuZXJzKGdldFdpbmRvdyh0YXJnZXQpKTtcbiAgICB0aGlzLmluaXRpYWxDb29yZGluYXRlcyA9IChfZ2V0RXZlbnRDb29yZGluYXRlcyA9IGdldEV2ZW50Q29vcmRpbmF0ZXMoZXZlbnQpKSAhPSBudWxsID8gX2dldEV2ZW50Q29vcmRpbmF0ZXMgOiBkZWZhdWx0Q29vcmRpbmF0ZXM7XG4gICAgdGhpcy5oYW5kbGVTdGFydCA9IHRoaXMuaGFuZGxlU3RhcnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU1vdmUgPSB0aGlzLmhhbmRsZU1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUVuZCA9IHRoaXMuaGFuZGxlRW5kLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVDYW5jZWwgPSB0aGlzLmhhbmRsZUNhbmNlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlS2V5ZG93biA9IHRoaXMuaGFuZGxlS2V5ZG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVtb3ZlVGV4dFNlbGVjdGlvbiA9IHRoaXMucmVtb3ZlVGV4dFNlbGVjdGlvbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYXR0YWNoKCk7XG4gIH1cblxuICBhdHRhY2goKSB7XG4gICAgY29uc3Qge1xuICAgICAgZXZlbnRzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGFjdGl2YXRpb25Db25zdHJhaW50LFxuICAgICAgICAgIGJ5cGFzc0FjdGl2YXRpb25Db25zdHJhaW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9ID0gdGhpcztcbiAgICB0aGlzLmxpc3RlbmVycy5hZGQoZXZlbnRzLm1vdmUubmFtZSwgdGhpcy5oYW5kbGVNb3ZlLCB7XG4gICAgICBwYXNzaXZlOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMubGlzdGVuZXJzLmFkZChldmVudHMuZW5kLm5hbWUsIHRoaXMuaGFuZGxlRW5kKTtcblxuICAgIGlmIChldmVudHMuY2FuY2VsKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5hZGQoZXZlbnRzLmNhbmNlbC5uYW1lLCB0aGlzLmhhbmRsZUNhbmNlbCk7XG4gICAgfVxuXG4gICAgdGhpcy53aW5kb3dMaXN0ZW5lcnMuYWRkKEV2ZW50TmFtZS5SZXNpemUsIHRoaXMuaGFuZGxlQ2FuY2VsKTtcbiAgICB0aGlzLndpbmRvd0xpc3RlbmVycy5hZGQoRXZlbnROYW1lLkRyYWdTdGFydCwgcHJldmVudERlZmF1bHQpO1xuICAgIHRoaXMud2luZG93TGlzdGVuZXJzLmFkZChFdmVudE5hbWUuVmlzaWJpbGl0eUNoYW5nZSwgdGhpcy5oYW5kbGVDYW5jZWwpO1xuICAgIHRoaXMud2luZG93TGlzdGVuZXJzLmFkZChFdmVudE5hbWUuQ29udGV4dE1lbnUsIHByZXZlbnREZWZhdWx0KTtcbiAgICB0aGlzLmRvY3VtZW50TGlzdGVuZXJzLmFkZChFdmVudE5hbWUuS2V5ZG93biwgdGhpcy5oYW5kbGVLZXlkb3duKTtcblxuICAgIGlmIChhY3RpdmF0aW9uQ29uc3RyYWludCkge1xuICAgICAgaWYgKGJ5cGFzc0FjdGl2YXRpb25Db25zdHJhaW50ICE9IG51bGwgJiYgYnlwYXNzQWN0aXZhdGlvbkNvbnN0cmFpbnQoe1xuICAgICAgICBldmVudDogdGhpcy5wcm9wcy5ldmVudCxcbiAgICAgICAgYWN0aXZlTm9kZTogdGhpcy5wcm9wcy5hY3RpdmVOb2RlLFxuICAgICAgICBvcHRpb25zOiB0aGlzLnByb3BzLm9wdGlvbnNcbiAgICAgIH0pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVN0YXJ0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RlbGF5Q29uc3RyYWludChhY3RpdmF0aW9uQ29uc3RyYWludCkpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuaGFuZGxlU3RhcnQsIGFjdGl2YXRpb25Db25zdHJhaW50LmRlbGF5KTtcbiAgICAgICAgdGhpcy5oYW5kbGVQZW5kaW5nKGFjdGl2YXRpb25Db25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNEaXN0YW5jZUNvbnN0cmFpbnQoYWN0aXZhdGlvbkNvbnN0cmFpbnQpKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUGVuZGluZyhhY3RpdmF0aW9uQ29uc3RyYWludCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVN0YXJ0KCk7XG4gIH1cblxuICBkZXRhY2goKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMucmVtb3ZlQWxsKCk7XG4gICAgdGhpcy53aW5kb3dMaXN0ZW5lcnMucmVtb3ZlQWxsKCk7IC8vIFdhaXQgdW50aWwgdGhlIG5leHQgZXZlbnQgbG9vcCBiZWZvcmUgcmVtb3ZpbmcgZG9jdW1lbnQgbGlzdGVuZXJzXG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBsaXN0ZW4gZm9yIGBjbGlja2AgYW5kIGBzZWxlY3Rpb25gIGV2ZW50cyBvbiB0aGUgZG9jdW1lbnRcblxuICAgIHNldFRpbWVvdXQodGhpcy5kb2N1bWVudExpc3RlbmVycy5yZW1vdmVBbGwsIDUwKTtcblxuICAgIGlmICh0aGlzLnRpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICAgIHRoaXMudGltZW91dElkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVQZW5kaW5nKGNvbnN0cmFpbnQsIG9mZnNldCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGl2ZSxcbiAgICAgIG9uUGVuZGluZ1xuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIG9uUGVuZGluZyhhY3RpdmUsIGNvbnN0cmFpbnQsIHRoaXMuaW5pdGlhbENvb3JkaW5hdGVzLCBvZmZzZXQpO1xuICB9XG5cbiAgaGFuZGxlU3RhcnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5pdGlhbENvb3JkaW5hdGVzXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgb25TdGFydFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKGluaXRpYWxDb29yZGluYXRlcykge1xuICAgICAgdGhpcy5hY3RpdmF0ZWQgPSB0cnVlOyAvLyBTdG9wIHByb3BhZ2F0aW9uIG9mIGNsaWNrIGV2ZW50cyBvbmNlIGFjdGl2YXRpb24gY29uc3RyYWludHMgYXJlIG1ldFxuXG4gICAgICB0aGlzLmRvY3VtZW50TGlzdGVuZXJzLmFkZChFdmVudE5hbWUuQ2xpY2ssIHN0b3BQcm9wYWdhdGlvbiwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTsgLy8gUmVtb3ZlIGFueSB0ZXh0IHNlbGVjdGlvbiBmcm9tIHRoZSBkb2N1bWVudFxuXG4gICAgICB0aGlzLnJlbW92ZVRleHRTZWxlY3Rpb24oKTsgLy8gUHJldmVudCBmdXJ0aGVyIHRleHQgc2VsZWN0aW9uIHdoaWxlIGRyYWdnaW5nXG5cbiAgICAgIHRoaXMuZG9jdW1lbnRMaXN0ZW5lcnMuYWRkKEV2ZW50TmFtZS5TZWxlY3Rpb25DaGFuZ2UsIHRoaXMucmVtb3ZlVGV4dFNlbGVjdGlvbik7XG4gICAgICBvblN0YXJ0KGluaXRpYWxDb29yZGluYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTW92ZShldmVudCkge1xuICAgIHZhciBfZ2V0RXZlbnRDb29yZGluYXRlczI7XG5cbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmF0ZWQsXG4gICAgICBpbml0aWFsQ29vcmRpbmF0ZXMsXG4gICAgICBwcm9wc1xuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIG9uTW92ZSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYWN0aXZhdGlvbkNvbnN0cmFpbnRcbiAgICAgIH1cbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZiAoIWluaXRpYWxDb29yZGluYXRlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gKF9nZXRFdmVudENvb3JkaW5hdGVzMiA9IGdldEV2ZW50Q29vcmRpbmF0ZXMoZXZlbnQpKSAhPSBudWxsID8gX2dldEV2ZW50Q29vcmRpbmF0ZXMyIDogZGVmYXVsdENvb3JkaW5hdGVzO1xuICAgIGNvbnN0IGRlbHRhID0gc3VidHJhY3QoaW5pdGlhbENvb3JkaW5hdGVzLCBjb29yZGluYXRlcyk7IC8vIENvbnN0cmFpbnQgdmFsaWRhdGlvblxuXG4gICAgaWYgKCFhY3RpdmF0ZWQgJiYgYWN0aXZhdGlvbkNvbnN0cmFpbnQpIHtcbiAgICAgIGlmIChpc0Rpc3RhbmNlQ29uc3RyYWludChhY3RpdmF0aW9uQ29uc3RyYWludCkpIHtcbiAgICAgICAgaWYgKGFjdGl2YXRpb25Db25zdHJhaW50LnRvbGVyYW5jZSAhPSBudWxsICYmIGhhc0V4Y2VlZGVkRGlzdGFuY2UoZGVsdGEsIGFjdGl2YXRpb25Db25zdHJhaW50LnRvbGVyYW5jZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVDYW5jZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNFeGNlZWRlZERpc3RhbmNlKGRlbHRhLCBhY3RpdmF0aW9uQ29uc3RyYWludC5kaXN0YW5jZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTdGFydCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RlbGF5Q29uc3RyYWludChhY3RpdmF0aW9uQ29uc3RyYWludCkpIHtcbiAgICAgICAgaWYgKGhhc0V4Y2VlZGVkRGlzdGFuY2UoZGVsdGEsIGFjdGl2YXRpb25Db25zdHJhaW50LnRvbGVyYW5jZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVDYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmhhbmRsZVBlbmRpbmcoYWN0aXZhdGlvbkNvbnN0cmFpbnQsIGRlbHRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbk1vdmUoY29vcmRpbmF0ZXMpO1xuICB9XG5cbiAgaGFuZGxlRW5kKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uQWJvcnQsXG4gICAgICBvbkVuZFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuZGV0YWNoKCk7XG5cbiAgICBpZiAoIXRoaXMuYWN0aXZhdGVkKSB7XG4gICAgICBvbkFib3J0KHRoaXMucHJvcHMuYWN0aXZlKTtcbiAgICB9XG5cbiAgICBvbkVuZCgpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uQWJvcnQsXG4gICAgICBvbkNhbmNlbFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuZGV0YWNoKCk7XG5cbiAgICBpZiAoIXRoaXMuYWN0aXZhdGVkKSB7XG4gICAgICBvbkFib3J0KHRoaXMucHJvcHMuYWN0aXZlKTtcbiAgICB9XG5cbiAgICBvbkNhbmNlbCgpO1xuICB9XG5cbiAgaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgIGlmIChldmVudC5jb2RlID09PSBLZXlib2FyZENvZGUuRXNjKSB7XG4gICAgICB0aGlzLmhhbmRsZUNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVRleHRTZWxlY3Rpb24oKSB7XG4gICAgdmFyIF90aGlzJGRvY3VtZW50JGdldFNlbDtcblxuICAgIChfdGhpcyRkb2N1bWVudCRnZXRTZWwgPSB0aGlzLmRvY3VtZW50LmdldFNlbGVjdGlvbigpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkZG9jdW1lbnQkZ2V0U2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICB9XG5cbn1cblxuY29uc3QgZXZlbnRzID0ge1xuICBjYW5jZWw6IHtcbiAgICBuYW1lOiAncG9pbnRlcmNhbmNlbCdcbiAgfSxcbiAgbW92ZToge1xuICAgIG5hbWU6ICdwb2ludGVybW92ZSdcbiAgfSxcbiAgZW5kOiB7XG4gICAgbmFtZTogJ3BvaW50ZXJ1cCdcbiAgfVxufTtcbmNsYXNzIFBvaW50ZXJTZW5zb3IgZXh0ZW5kcyBBYnN0cmFjdFBvaW50ZXJTZW5zb3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgIGV2ZW50XG4gICAgfSA9IHByb3BzOyAvLyBQb2ludGVyIGV2ZW50cyBzdG9wIGZpcmluZyBpZiB0aGUgdGFyZ2V0IGlzIHVubW91bnRlZCB3aGlsZSBkcmFnZ2luZ1xuICAgIC8vIFRoZXJlZm9yZSB3ZSBhdHRhY2ggbGlzdGVuZXJzIHRvIHRoZSBvd25lciBkb2N1bWVudCBpbnN0ZWFkXG5cbiAgICBjb25zdCBsaXN0ZW5lclRhcmdldCA9IGdldE93bmVyRG9jdW1lbnQoZXZlbnQudGFyZ2V0KTtcbiAgICBzdXBlcihwcm9wcywgZXZlbnRzLCBsaXN0ZW5lclRhcmdldCk7XG4gIH1cblxufVxuUG9pbnRlclNlbnNvci5hY3RpdmF0b3JzID0gW3tcbiAgZXZlbnROYW1lOiAnb25Qb2ludGVyRG93bicsXG4gIGhhbmRsZXI6IChfcmVmLCBfcmVmMikgPT4ge1xuICAgIGxldCB7XG4gICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICB9ID0gX3JlZjtcbiAgICBsZXQge1xuICAgICAgb25BY3RpdmF0aW9uXG4gICAgfSA9IF9yZWYyO1xuXG4gICAgaWYgKCFldmVudC5pc1ByaW1hcnkgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25BY3RpdmF0aW9uID09IG51bGwgPyB2b2lkIDAgOiBvbkFjdGl2YXRpb24oe1xuICAgICAgZXZlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufV07XG5cbmNvbnN0IGV2ZW50cyQxID0ge1xuICBtb3ZlOiB7XG4gICAgbmFtZTogJ21vdXNlbW92ZSdcbiAgfSxcbiAgZW5kOiB7XG4gICAgbmFtZTogJ21vdXNldXAnXG4gIH1cbn07XG52YXIgTW91c2VCdXR0b247XG5cbihmdW5jdGlvbiAoTW91c2VCdXR0b24pIHtcbiAgTW91c2VCdXR0b25bTW91c2VCdXR0b25bXCJSaWdodENsaWNrXCJdID0gMl0gPSBcIlJpZ2h0Q2xpY2tcIjtcbn0pKE1vdXNlQnV0dG9uIHx8IChNb3VzZUJ1dHRvbiA9IHt9KSk7XG5cbmNsYXNzIE1vdXNlU2Vuc29yIGV4dGVuZHMgQWJzdHJhY3RQb2ludGVyU2Vuc29yIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcywgZXZlbnRzJDEsIGdldE93bmVyRG9jdW1lbnQocHJvcHMuZXZlbnQudGFyZ2V0KSk7XG4gIH1cblxufVxuTW91c2VTZW5zb3IuYWN0aXZhdG9ycyA9IFt7XG4gIGV2ZW50TmFtZTogJ29uTW91c2VEb3duJyxcbiAgaGFuZGxlcjogKF9yZWYsIF9yZWYyKSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudFxuICAgIH0gPSBfcmVmO1xuICAgIGxldCB7XG4gICAgICBvbkFjdGl2YXRpb25cbiAgICB9ID0gX3JlZjI7XG5cbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSBNb3VzZUJ1dHRvbi5SaWdodENsaWNrKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25BY3RpdmF0aW9uID09IG51bGwgPyB2b2lkIDAgOiBvbkFjdGl2YXRpb24oe1xuICAgICAgZXZlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufV07XG5cbmNvbnN0IGV2ZW50cyQyID0ge1xuICBjYW5jZWw6IHtcbiAgICBuYW1lOiAndG91Y2hjYW5jZWwnXG4gIH0sXG4gIG1vdmU6IHtcbiAgICBuYW1lOiAndG91Y2htb3ZlJ1xuICB9LFxuICBlbmQ6IHtcbiAgICBuYW1lOiAndG91Y2hlbmQnXG4gIH1cbn07XG5jbGFzcyBUb3VjaFNlbnNvciBleHRlbmRzIEFic3RyYWN0UG9pbnRlclNlbnNvciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMsIGV2ZW50cyQyKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXR1cCgpIHtcbiAgICAvLyBBZGRpbmcgYSBub24tY2FwdHVyZSBhbmQgbm9uLXBhc3NpdmUgYHRvdWNobW92ZWAgbGlzdGVuZXIgaW4gb3JkZXJcbiAgICAvLyB0byBmb3JjZSBgZXZlbnQucHJldmVudERlZmF1bHQoKWAgY2FsbHMgdG8gd29yayBpbiBkeW5hbWljYWxseSBhZGRlZFxuICAgIC8vIHRvdWNobW92ZSBldmVudCBoYW5kbGVycy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgaU9TIFNhZmFyaS5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldmVudHMkMi5tb3ZlLm5hbWUsIG5vb3AsIHtcbiAgICAgIGNhcHR1cmU6IGZhbHNlLFxuICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gdGVhcmRvd24oKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudHMkMi5tb3ZlLm5hbWUsIG5vb3ApO1xuICAgIH07IC8vIFdlIGNyZWF0ZSBhIG5ldyBoYW5kbGVyIGJlY2F1c2UgdGhlIHRlYXJkb3duIGZ1bmN0aW9uIG9mIGFub3RoZXIgc2Vuc29yXG4gICAgLy8gY291bGQgcmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lciBpZiB3ZSB1c2UgYSByZWZlcmVudGlhbGx5IGVxdWFsIGxpc3RlbmVyLlxuXG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gIH1cblxufVxuVG91Y2hTZW5zb3IuYWN0aXZhdG9ycyA9IFt7XG4gIGV2ZW50TmFtZTogJ29uVG91Y2hTdGFydCcsXG4gIGhhbmRsZXI6IChfcmVmLCBfcmVmMikgPT4ge1xuICAgIGxldCB7XG4gICAgICBuYXRpdmVFdmVudDogZXZlbnRcbiAgICB9ID0gX3JlZjtcbiAgICBsZXQge1xuICAgICAgb25BY3RpdmF0aW9uXG4gICAgfSA9IF9yZWYyO1xuICAgIGNvbnN0IHtcbiAgICAgIHRvdWNoZXNcbiAgICB9ID0gZXZlbnQ7XG5cbiAgICBpZiAodG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25BY3RpdmF0aW9uID09IG51bGwgPyB2b2lkIDAgOiBvbkFjdGl2YXRpb24oe1xuICAgICAgZXZlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufV07XG5cbnZhciBBdXRvU2Nyb2xsQWN0aXZhdG9yO1xuXG4oZnVuY3Rpb24gKEF1dG9TY3JvbGxBY3RpdmF0b3IpIHtcbiAgQXV0b1Njcm9sbEFjdGl2YXRvcltBdXRvU2Nyb2xsQWN0aXZhdG9yW1wiUG9pbnRlclwiXSA9IDBdID0gXCJQb2ludGVyXCI7XG4gIEF1dG9TY3JvbGxBY3RpdmF0b3JbQXV0b1Njcm9sbEFjdGl2YXRvcltcIkRyYWdnYWJsZVJlY3RcIl0gPSAxXSA9IFwiRHJhZ2dhYmxlUmVjdFwiO1xufSkoQXV0b1Njcm9sbEFjdGl2YXRvciB8fCAoQXV0b1Njcm9sbEFjdGl2YXRvciA9IHt9KSk7XG5cbnZhciBUcmF2ZXJzYWxPcmRlcjtcblxuKGZ1bmN0aW9uIChUcmF2ZXJzYWxPcmRlcikge1xuICBUcmF2ZXJzYWxPcmRlcltUcmF2ZXJzYWxPcmRlcltcIlRyZWVPcmRlclwiXSA9IDBdID0gXCJUcmVlT3JkZXJcIjtcbiAgVHJhdmVyc2FsT3JkZXJbVHJhdmVyc2FsT3JkZXJbXCJSZXZlcnNlZFRyZWVPcmRlclwiXSA9IDFdID0gXCJSZXZlcnNlZFRyZWVPcmRlclwiO1xufSkoVHJhdmVyc2FsT3JkZXIgfHwgKFRyYXZlcnNhbE9yZGVyID0ge30pKTtcblxuZnVuY3Rpb24gdXNlQXV0b1Njcm9sbGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBhY2NlbGVyYXRpb24sXG4gICAgYWN0aXZhdG9yID0gQXV0b1Njcm9sbEFjdGl2YXRvci5Qb2ludGVyLFxuICAgIGNhblNjcm9sbCxcbiAgICBkcmFnZ2luZ1JlY3QsXG4gICAgZW5hYmxlZCxcbiAgICBpbnRlcnZhbCA9IDUsXG4gICAgb3JkZXIgPSBUcmF2ZXJzYWxPcmRlci5UcmVlT3JkZXIsXG4gICAgcG9pbnRlckNvb3JkaW5hdGVzLFxuICAgIHNjcm9sbGFibGVBbmNlc3RvcnMsXG4gICAgc2Nyb2xsYWJsZUFuY2VzdG9yUmVjdHMsXG4gICAgZGVsdGEsXG4gICAgdGhyZXNob2xkXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzY3JvbGxJbnRlbnQgPSB1c2VTY3JvbGxJbnRlbnQoe1xuICAgIGRlbHRhLFxuICAgIGRpc2FibGVkOiAhZW5hYmxlZFxuICB9KTtcbiAgY29uc3QgW3NldEF1dG9TY3JvbGxJbnRlcnZhbCwgY2xlYXJBdXRvU2Nyb2xsSW50ZXJ2YWxdID0gdXNlSW50ZXJ2YWwoKTtcbiAgY29uc3Qgc2Nyb2xsU3BlZWQgPSB1c2VSZWYoe1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9KTtcbiAgY29uc3Qgc2Nyb2xsRGlyZWN0aW9uID0gdXNlUmVmKHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfSk7XG4gIGNvbnN0IHJlY3QgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBzd2l0Y2ggKGFjdGl2YXRvcikge1xuICAgICAgY2FzZSBBdXRvU2Nyb2xsQWN0aXZhdG9yLlBvaW50ZXI6XG4gICAgICAgIHJldHVybiBwb2ludGVyQ29vcmRpbmF0ZXMgPyB7XG4gICAgICAgICAgdG9wOiBwb2ludGVyQ29vcmRpbmF0ZXMueSxcbiAgICAgICAgICBib3R0b206IHBvaW50ZXJDb29yZGluYXRlcy55LFxuICAgICAgICAgIGxlZnQ6IHBvaW50ZXJDb29yZGluYXRlcy54LFxuICAgICAgICAgIHJpZ2h0OiBwb2ludGVyQ29vcmRpbmF0ZXMueFxuICAgICAgICB9IDogbnVsbDtcblxuICAgICAgY2FzZSBBdXRvU2Nyb2xsQWN0aXZhdG9yLkRyYWdnYWJsZVJlY3Q6XG4gICAgICAgIHJldHVybiBkcmFnZ2luZ1JlY3Q7XG4gICAgfVxuICB9LCBbYWN0aXZhdG9yLCBkcmFnZ2luZ1JlY3QsIHBvaW50ZXJDb29yZGluYXRlc10pO1xuICBjb25zdCBzY3JvbGxDb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGF1dG9TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoIXNjcm9sbENvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbExlZnQgPSBzY3JvbGxTcGVlZC5jdXJyZW50LnggKiBzY3JvbGxEaXJlY3Rpb24uY3VycmVudC54O1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHNjcm9sbFNwZWVkLmN1cnJlbnQueSAqIHNjcm9sbERpcmVjdGlvbi5jdXJyZW50Lnk7XG4gICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbEJ5KHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc29ydGVkU2Nyb2xsYWJsZUFuY2VzdG9ycyA9IHVzZU1lbW8oKCkgPT4gb3JkZXIgPT09IFRyYXZlcnNhbE9yZGVyLlRyZWVPcmRlciA/IFsuLi5zY3JvbGxhYmxlQW5jZXN0b3JzXS5yZXZlcnNlKCkgOiBzY3JvbGxhYmxlQW5jZXN0b3JzLCBbb3JkZXIsIHNjcm9sbGFibGVBbmNlc3RvcnNdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuYWJsZWQgfHwgIXNjcm9sbGFibGVBbmNlc3RvcnMubGVuZ3RoIHx8ICFyZWN0KSB7XG4gICAgICBjbGVhckF1dG9TY3JvbGxJbnRlcnZhbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2Nyb2xsQ29udGFpbmVyIG9mIHNvcnRlZFNjcm9sbGFibGVBbmNlc3RvcnMpIHtcbiAgICAgIGlmICgoY2FuU2Nyb2xsID09IG51bGwgPyB2b2lkIDAgOiBjYW5TY3JvbGwoc2Nyb2xsQ29udGFpbmVyKSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmRleCA9IHNjcm9sbGFibGVBbmNlc3RvcnMuaW5kZXhPZihzY3JvbGxDb250YWluZXIpO1xuICAgICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyUmVjdCA9IHNjcm9sbGFibGVBbmNlc3RvclJlY3RzW2luZGV4XTtcblxuICAgICAgaWYgKCFzY3JvbGxDb250YWluZXJSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgc3BlZWRcbiAgICAgIH0gPSBnZXRTY3JvbGxEaXJlY3Rpb25BbmRTcGVlZChzY3JvbGxDb250YWluZXIsIHNjcm9sbENvbnRhaW5lclJlY3QsIHJlY3QsIGFjY2VsZXJhdGlvbiwgdGhyZXNob2xkKTtcblxuICAgICAgZm9yIChjb25zdCBheGlzIG9mIFsneCcsICd5J10pIHtcbiAgICAgICAgaWYgKCFzY3JvbGxJbnRlbnRbYXhpc11bZGlyZWN0aW9uW2F4aXNdXSkge1xuICAgICAgICAgIHNwZWVkW2F4aXNdID0gMDtcbiAgICAgICAgICBkaXJlY3Rpb25bYXhpc10gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGVlZC54ID4gMCB8fCBzcGVlZC55ID4gMCkge1xuICAgICAgICBjbGVhckF1dG9TY3JvbGxJbnRlcnZhbCgpO1xuICAgICAgICBzY3JvbGxDb250YWluZXJSZWYuY3VycmVudCA9IHNjcm9sbENvbnRhaW5lcjtcbiAgICAgICAgc2V0QXV0b1Njcm9sbEludGVydmFsKGF1dG9TY3JvbGwsIGludGVydmFsKTtcbiAgICAgICAgc2Nyb2xsU3BlZWQuY3VycmVudCA9IHNwZWVkO1xuICAgICAgICBzY3JvbGxEaXJlY3Rpb24uY3VycmVudCA9IGRpcmVjdGlvbjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNjcm9sbFNwZWVkLmN1cnJlbnQgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gICAgc2Nyb2xsRGlyZWN0aW9uLmN1cnJlbnQgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gICAgY2xlYXJBdXRvU2Nyb2xsSW50ZXJ2YWwoKTtcbiAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBbYWNjZWxlcmF0aW9uLCBhdXRvU2Nyb2xsLCBjYW5TY3JvbGwsIGNsZWFyQXV0b1Njcm9sbEludGVydmFsLCBlbmFibGVkLCBpbnRlcnZhbCwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBKU09OLnN0cmluZ2lmeShyZWN0KSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBKU09OLnN0cmluZ2lmeShzY3JvbGxJbnRlbnQpLCBzZXRBdXRvU2Nyb2xsSW50ZXJ2YWwsIHNjcm9sbGFibGVBbmNlc3RvcnMsIHNvcnRlZFNjcm9sbGFibGVBbmNlc3RvcnMsIHNjcm9sbGFibGVBbmNlc3RvclJlY3RzLCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIEpTT04uc3RyaW5naWZ5KHRocmVzaG9sZCldKTtcbn1cbmNvbnN0IGRlZmF1bHRTY3JvbGxJbnRlbnQgPSB7XG4gIHg6IHtcbiAgICBbRGlyZWN0aW9uLkJhY2t3YXJkXTogZmFsc2UsXG4gICAgW0RpcmVjdGlvbi5Gb3J3YXJkXTogZmFsc2VcbiAgfSxcbiAgeToge1xuICAgIFtEaXJlY3Rpb24uQmFja3dhcmRdOiBmYWxzZSxcbiAgICBbRGlyZWN0aW9uLkZvcndhcmRdOiBmYWxzZVxuICB9XG59O1xuXG5mdW5jdGlvbiB1c2VTY3JvbGxJbnRlbnQoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBkZWx0YSxcbiAgICBkaXNhYmxlZFxuICB9ID0gX3JlZjI7XG4gIGNvbnN0IHByZXZpb3VzRGVsdGEgPSB1c2VQcmV2aW91cyhkZWx0YSk7XG4gIHJldHVybiB1c2VMYXp5TWVtbyhwcmV2aW91c0ludGVudCA9PiB7XG4gICAgaWYgKGRpc2FibGVkIHx8ICFwcmV2aW91c0RlbHRhIHx8ICFwcmV2aW91c0ludGVudCkge1xuICAgICAgLy8gUmVzZXQgc2Nyb2xsIGludGVudCB0cmFja2luZyB3aGVuIGF1dG8tc2Nyb2xsaW5nIGlzIGRpc2FibGVkXG4gICAgICByZXR1cm4gZGVmYXVsdFNjcm9sbEludGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSB7XG4gICAgICB4OiBNYXRoLnNpZ24oZGVsdGEueCAtIHByZXZpb3VzRGVsdGEueCksXG4gICAgICB5OiBNYXRoLnNpZ24oZGVsdGEueSAtIHByZXZpb3VzRGVsdGEueSlcbiAgICB9OyAvLyBLZWVwIHRyYWNrIG9mIHRoZSB1c2VyIGludGVudCB0byBzY3JvbGwgaW4gZWFjaCBkaXJlY3Rpb24gZm9yIGJvdGggYXhpc1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHtcbiAgICAgICAgW0RpcmVjdGlvbi5CYWNrd2FyZF06IHByZXZpb3VzSW50ZW50LnhbRGlyZWN0aW9uLkJhY2t3YXJkXSB8fCBkaXJlY3Rpb24ueCA9PT0gLTEsXG4gICAgICAgIFtEaXJlY3Rpb24uRm9yd2FyZF06IHByZXZpb3VzSW50ZW50LnhbRGlyZWN0aW9uLkZvcndhcmRdIHx8IGRpcmVjdGlvbi54ID09PSAxXG4gICAgICB9LFxuICAgICAgeToge1xuICAgICAgICBbRGlyZWN0aW9uLkJhY2t3YXJkXTogcHJldmlvdXNJbnRlbnQueVtEaXJlY3Rpb24uQmFja3dhcmRdIHx8IGRpcmVjdGlvbi55ID09PSAtMSxcbiAgICAgICAgW0RpcmVjdGlvbi5Gb3J3YXJkXTogcHJldmlvdXNJbnRlbnQueVtEaXJlY3Rpb24uRm9yd2FyZF0gfHwgZGlyZWN0aW9uLnkgPT09IDFcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIGRlbHRhLCBwcmV2aW91c0RlbHRhXSk7XG59XG5cbmZ1bmN0aW9uIHVzZUNhY2hlZE5vZGUoZHJhZ2dhYmxlTm9kZXMsIGlkKSB7XG4gIGNvbnN0IGRyYWdnYWJsZU5vZGUgPSBpZCAhPSBudWxsID8gZHJhZ2dhYmxlTm9kZXMuZ2V0KGlkKSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgbm9kZSA9IGRyYWdnYWJsZU5vZGUgPyBkcmFnZ2FibGVOb2RlLm5vZGUuY3VycmVudCA6IG51bGw7XG4gIHJldHVybiB1c2VMYXp5TWVtbyhjYWNoZWROb2RlID0+IHtcbiAgICB2YXIgX3JlZjtcblxuICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIEluIHNvbWUgY2FzZXMsIHRoZSBkcmFnZ2FibGUgbm9kZSBjYW4gdW5tb3VudCB3aGlsZSBkcmFnZ2luZ1xuICAgIC8vIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHZpcnR1YWxpemVkIGxpc3RzLiBJbiB0aG9zZSBzaXR1YXRpb25zLFxuICAgIC8vIHdlIGZhbGwgYmFjayB0byB0aGUgbGFzdCBrbm93biB2YWx1ZSBmb3IgdGhhdCBub2RlLlxuXG5cbiAgICByZXR1cm4gKF9yZWYgPSBub2RlICE9IG51bGwgPyBub2RlIDogY2FjaGVkTm9kZSkgIT0gbnVsbCA/IF9yZWYgOiBudWxsO1xuICB9LCBbbm9kZSwgaWRdKTtcbn1cblxuZnVuY3Rpb24gdXNlQ29tYmluZUFjdGl2YXRvcnMoc2Vuc29ycywgZ2V0U3ludGhldGljSGFuZGxlcikge1xuICByZXR1cm4gdXNlTWVtbygoKSA9PiBzZW5zb3JzLnJlZHVjZSgoYWNjdW11bGF0b3IsIHNlbnNvcikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbnNvcjogU2Vuc29yXG4gICAgfSA9IHNlbnNvcjtcbiAgICBjb25zdCBzZW5zb3JBY3RpdmF0b3JzID0gU2Vuc29yLmFjdGl2YXRvcnMubWFwKGFjdGl2YXRvciA9PiAoe1xuICAgICAgZXZlbnROYW1lOiBhY3RpdmF0b3IuZXZlbnROYW1lLFxuICAgICAgaGFuZGxlcjogZ2V0U3ludGhldGljSGFuZGxlcihhY3RpdmF0b3IuaGFuZGxlciwgc2Vuc29yKVxuICAgIH0pKTtcbiAgICByZXR1cm4gWy4uLmFjY3VtdWxhdG9yLCAuLi5zZW5zb3JBY3RpdmF0b3JzXTtcbiAgfSwgW10pLCBbc2Vuc29ycywgZ2V0U3ludGhldGljSGFuZGxlcl0pO1xufVxuXG52YXIgTWVhc3VyaW5nU3RyYXRlZ3k7XG5cbihmdW5jdGlvbiAoTWVhc3VyaW5nU3RyYXRlZ3kpIHtcbiAgTWVhc3VyaW5nU3RyYXRlZ3lbTWVhc3VyaW5nU3RyYXRlZ3lbXCJBbHdheXNcIl0gPSAwXSA9IFwiQWx3YXlzXCI7XG4gIE1lYXN1cmluZ1N0cmF0ZWd5W01lYXN1cmluZ1N0cmF0ZWd5W1wiQmVmb3JlRHJhZ2dpbmdcIl0gPSAxXSA9IFwiQmVmb3JlRHJhZ2dpbmdcIjtcbiAgTWVhc3VyaW5nU3RyYXRlZ3lbTWVhc3VyaW5nU3RyYXRlZ3lbXCJXaGlsZURyYWdnaW5nXCJdID0gMl0gPSBcIldoaWxlRHJhZ2dpbmdcIjtcbn0pKE1lYXN1cmluZ1N0cmF0ZWd5IHx8IChNZWFzdXJpbmdTdHJhdGVneSA9IHt9KSk7XG5cbnZhciBNZWFzdXJpbmdGcmVxdWVuY3k7XG5cbihmdW5jdGlvbiAoTWVhc3VyaW5nRnJlcXVlbmN5KSB7XG4gIE1lYXN1cmluZ0ZyZXF1ZW5jeVtcIk9wdGltaXplZFwiXSA9IFwib3B0aW1pemVkXCI7XG59KShNZWFzdXJpbmdGcmVxdWVuY3kgfHwgKE1lYXN1cmluZ0ZyZXF1ZW5jeSA9IHt9KSk7XG5cbmNvbnN0IGRlZmF1bHRWYWx1ZSA9IC8qI19fUFVSRV9fKi9uZXcgTWFwKCk7XG5mdW5jdGlvbiB1c2VEcm9wcGFibGVNZWFzdXJpbmcoY29udGFpbmVycywgX3JlZikge1xuICBsZXQge1xuICAgIGRyYWdnaW5nLFxuICAgIGRlcGVuZGVuY2llcyxcbiAgICBjb25maWdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IFtxdWV1ZSwgc2V0UXVldWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHtcbiAgICBmcmVxdWVuY3ksXG4gICAgbWVhc3VyZSxcbiAgICBzdHJhdGVneVxuICB9ID0gY29uZmlnO1xuICBjb25zdCBjb250YWluZXJzUmVmID0gdXNlUmVmKGNvbnRhaW5lcnMpO1xuICBjb25zdCBkaXNhYmxlZCA9IGlzRGlzYWJsZWQoKTtcbiAgY29uc3QgZGlzYWJsZWRSZWYgPSB1c2VMYXRlc3RWYWx1ZShkaXNhYmxlZCk7XG4gIGNvbnN0IG1lYXN1cmVEcm9wcGFibGVDb250YWluZXJzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGlkcykge1xuICAgIGlmIChpZHMgPT09IHZvaWQgMCkge1xuICAgICAgaWRzID0gW107XG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRRdWV1ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlkcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlLmNvbmNhdChpZHMuZmlsdGVyKGlkID0+ICF2YWx1ZS5pbmNsdWRlcyhpZCkpKTtcbiAgICB9KTtcbiAgfSwgW2Rpc2FibGVkUmVmXSk7XG4gIGNvbnN0IHRpbWVvdXRJZCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZHJvcHBhYmxlUmVjdHMgPSB1c2VMYXp5TWVtbyhwcmV2aW91c1ZhbHVlID0+IHtcbiAgICBpZiAoZGlzYWJsZWQgJiYgIWRyYWdnaW5nKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGlmICghcHJldmlvdXNWYWx1ZSB8fCBwcmV2aW91c1ZhbHVlID09PSBkZWZhdWx0VmFsdWUgfHwgY29udGFpbmVyc1JlZi5jdXJyZW50ICE9PSBjb250YWluZXJzIHx8IHF1ZXVlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcblxuICAgICAgZm9yIChsZXQgY29udGFpbmVyIG9mIGNvbnRhaW5lcnMpIHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWV1ZSAmJiBxdWV1ZS5sZW5ndGggPiAwICYmICFxdWV1ZS5pbmNsdWRlcyhjb250YWluZXIuaWQpICYmIGNvbnRhaW5lci5yZWN0LmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbnRhaW5lciBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlLW1lYXN1cmVkXG4gICAgICAgICAgbWFwLnNldChjb250YWluZXIuaWQsIGNvbnRhaW5lci5yZWN0LmN1cnJlbnQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lci5ub2RlLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBub2RlID8gbmV3IFJlY3QobWVhc3VyZShub2RlKSwgbm9kZSkgOiBudWxsO1xuICAgICAgICBjb250YWluZXIucmVjdC5jdXJyZW50ID0gcmVjdDtcblxuICAgICAgICBpZiAocmVjdCkge1xuICAgICAgICAgIG1hcC5zZXQoY29udGFpbmVyLmlkLCByZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwO1xuICAgIH1cblxuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICB9LCBbY29udGFpbmVycywgcXVldWUsIGRyYWdnaW5nLCBkaXNhYmxlZCwgbWVhc3VyZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnRhaW5lcnNSZWYuY3VycmVudCA9IGNvbnRhaW5lcnM7XG4gIH0sIFtjb250YWluZXJzXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbWVhc3VyZURyb3BwYWJsZUNvbnRhaW5lcnMoKTtcbiAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBbZHJhZ2dpbmcsIGRpc2FibGVkXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHF1ZXVlICYmIHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHNldFF1ZXVlKG51bGwpO1xuICAgIH1cbiAgfSwgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtKU09OLnN0cmluZ2lmeShxdWV1ZSldKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQgfHwgdHlwZW9mIGZyZXF1ZW5jeSAhPT0gJ251bWJlcicgfHwgdGltZW91dElkLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aW1lb3V0SWQuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbWVhc3VyZURyb3BwYWJsZUNvbnRhaW5lcnMoKTtcbiAgICAgIHRpbWVvdXRJZC5jdXJyZW50ID0gbnVsbDtcbiAgICB9LCBmcmVxdWVuY3kpO1xuICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtmcmVxdWVuY3ksIGRpc2FibGVkLCBtZWFzdXJlRHJvcHBhYmxlQ29udGFpbmVycywgLi4uZGVwZW5kZW5jaWVzXSk7XG4gIHJldHVybiB7XG4gICAgZHJvcHBhYmxlUmVjdHMsXG4gICAgbWVhc3VyZURyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgbWVhc3VyaW5nU2NoZWR1bGVkOiBxdWV1ZSAhPSBudWxsXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNEaXNhYmxlZCgpIHtcbiAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICBjYXNlIE1lYXN1cmluZ1N0cmF0ZWd5LkFsd2F5czpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjYXNlIE1lYXN1cmluZ1N0cmF0ZWd5LkJlZm9yZURyYWdnaW5nOlxuICAgICAgICByZXR1cm4gZHJhZ2dpbmc7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAhZHJhZ2dpbmc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZUluaXRpYWxWYWx1ZSh2YWx1ZSwgY29tcHV0ZUZuKSB7XG4gIHJldHVybiB1c2VMYXp5TWVtbyhwcmV2aW91c1ZhbHVlID0+IHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBjb21wdXRlRm4gPT09ICdmdW5jdGlvbicgPyBjb21wdXRlRm4odmFsdWUpIDogdmFsdWU7XG4gIH0sIFtjb21wdXRlRm4sIHZhbHVlXSk7XG59XG5cbmZ1bmN0aW9uIHVzZUluaXRpYWxSZWN0KG5vZGUsIG1lYXN1cmUpIHtcbiAgcmV0dXJuIHVzZUluaXRpYWxWYWx1ZShub2RlLCBtZWFzdXJlKTtcbn1cblxuLyoqXHJcbiAqIFJldHVybnMgYSBuZXcgTXV0YXRpb25PYnNlcnZlciBpbnN0YW5jZS5cclxuICogSWYgYE11dGF0aW9uT2JzZXJ2ZXJgIGlzIHVuZGVmaW5lZCBpbiB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LCByZXR1cm5zIGB1bmRlZmluZWRgLlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcihfcmVmKSB7XG4gIGxldCB7XG4gICAgY2FsbGJhY2ssXG4gICAgZGlzYWJsZWRcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGhhbmRsZU11dGF0aW9ucyA9IHVzZUV2ZW50KGNhbGxiYWNrKTtcbiAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIE11dGF0aW9uT2JzZXJ2ZXJcbiAgICB9ID0gd2luZG93O1xuICAgIHJldHVybiBuZXcgTXV0YXRpb25PYnNlcnZlcihoYW5kbGVNdXRhdGlvbnMpO1xuICB9LCBbaGFuZGxlTXV0YXRpb25zLCBkaXNhYmxlZF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiBtdXRhdGlvbk9ic2VydmVyID09IG51bGwgPyB2b2lkIDAgOiBtdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSwgW211dGF0aW9uT2JzZXJ2ZXJdKTtcbiAgcmV0dXJuIG11dGF0aW9uT2JzZXJ2ZXI7XG59XG5cbi8qKlxyXG4gKiBSZXR1cm5zIGEgbmV3IFJlc2l6ZU9ic2VydmVyIGluc3RhbmNlIGJvdW5kIHRvIHRoZSBgb25SZXNpemVgIGNhbGxiYWNrLlxyXG4gKiBJZiBgUmVzaXplT2JzZXJ2ZXJgIGlzIHVuZGVmaW5lZCBpbiB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LCByZXR1cm5zIGB1bmRlZmluZWRgLlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIoX3JlZikge1xuICBsZXQge1xuICAgIGNhbGxiYWNrLFxuICAgIGRpc2FibGVkXG4gIH0gPSBfcmVmO1xuICBjb25zdCBoYW5kbGVSZXNpemUgPSB1c2VFdmVudChjYWxsYmFjayk7XG4gIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIFJlc2l6ZU9ic2VydmVyXG4gICAgfSA9IHdpbmRvdztcbiAgICByZXR1cm4gbmV3IFJlc2l6ZU9ic2VydmVyKGhhbmRsZVJlc2l6ZSk7XG4gIH0sIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgW2Rpc2FibGVkXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHJlc2l6ZU9ic2VydmVyID09IG51bGwgPyB2b2lkIDAgOiByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH0sIFtyZXNpemVPYnNlcnZlcl0pO1xuICByZXR1cm4gcmVzaXplT2JzZXJ2ZXI7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRNZWFzdXJlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIG5ldyBSZWN0KGdldENsaWVudFJlY3QoZWxlbWVudCksIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiB1c2VSZWN0KGVsZW1lbnQsIG1lYXN1cmUsIGZhbGxiYWNrUmVjdCkge1xuICBpZiAobWVhc3VyZSA9PT0gdm9pZCAwKSB7XG4gICAgbWVhc3VyZSA9IGRlZmF1bHRNZWFzdXJlO1xuICB9XG5cbiAgY29uc3QgW3JlY3QsIHNldFJlY3RdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgZnVuY3Rpb24gbWVhc3VyZVJlY3QoKSB7XG4gICAgc2V0UmVjdChjdXJyZW50UmVjdCA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50LmlzQ29ubmVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICB2YXIgX3JlZjtcblxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gbGFzdCByZWN0IHdlIG1lYXN1cmVkIGlmIHRoZSBlbGVtZW50IGlzXG4gICAgICAgIC8vIG5vIGxvbmdlciBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAgICAgICAgcmV0dXJuIChfcmVmID0gY3VycmVudFJlY3QgIT0gbnVsbCA/IGN1cnJlbnRSZWN0IDogZmFsbGJhY2tSZWN0KSAhPSBudWxsID8gX3JlZiA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1JlY3QgPSBtZWFzdXJlKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY3VycmVudFJlY3QpID09PSBKU09OLnN0cmluZ2lmeShuZXdSZWN0KSkge1xuICAgICAgICByZXR1cm4gY3VycmVudFJlY3Q7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdSZWN0O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IHVzZU11dGF0aW9uT2JzZXJ2ZXIoe1xuICAgIGNhbGxiYWNrKHJlY29yZHMpIHtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH0gPSByZWNvcmQ7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjaGlsZExpc3QnICYmIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICAgIG1lYXN1cmVSZWN0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgfSk7XG4gIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gdXNlUmVzaXplT2JzZXJ2ZXIoe1xuICAgIGNhbGxiYWNrOiBtZWFzdXJlUmVjdFxuICB9KTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgbWVhc3VyZVJlY3QoKTtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlciA9PSBudWxsID8gdm9pZCAwIDogcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgICAgIG11dGF0aW9uT2JzZXJ2ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyID09IG51bGwgPyB2b2lkIDAgOiByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyID09IG51bGwgPyB2b2lkIDAgOiBtdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH0sIFtlbGVtZW50XSk7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiB1c2VSZWN0RGVsdGEocmVjdCkge1xuICBjb25zdCBpbml0aWFsUmVjdCA9IHVzZUluaXRpYWxWYWx1ZShyZWN0KTtcbiAgcmV0dXJuIGdldFJlY3REZWx0YShyZWN0LCBpbml0aWFsUmVjdCk7XG59XG5cbmNvbnN0IGRlZmF1bHRWYWx1ZSQxID0gW107XG5mdW5jdGlvbiB1c2VTY3JvbGxhYmxlQW5jZXN0b3JzKG5vZGUpIHtcbiAgY29uc3QgcHJldmlvdXNOb2RlID0gdXNlUmVmKG5vZGUpO1xuICBjb25zdCBhbmNlc3RvcnMgPSB1c2VMYXp5TWVtbyhwcmV2aW91c1ZhbHVlID0+IHtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUkMTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNWYWx1ZSAmJiBwcmV2aW91c1ZhbHVlICE9PSBkZWZhdWx0VmFsdWUkMSAmJiBub2RlICYmIHByZXZpb3VzTm9kZS5jdXJyZW50ICYmIG5vZGUucGFyZW50Tm9kZSA9PT0gcHJldmlvdXNOb2RlLmN1cnJlbnQucGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFNjcm9sbGFibGVBbmNlc3RvcnMobm9kZSk7XG4gIH0sIFtub2RlXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJldmlvdXNOb2RlLmN1cnJlbnQgPSBub2RlO1xuICB9LCBbbm9kZV0pO1xuICByZXR1cm4gYW5jZXN0b3JzO1xufVxuXG5mdW5jdGlvbiB1c2VTY3JvbGxPZmZzZXRzKGVsZW1lbnRzKSB7XG4gIGNvbnN0IFtzY3JvbGxDb29yZGluYXRlcywgc2V0U2Nyb2xsQ29vcmRpbmF0ZXNdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHByZXZFbGVtZW50cyA9IHVzZVJlZihlbGVtZW50cyk7IC8vIFRvLWRvOiBUaHJvdHRsZSB0aGUgaGFuZGxlU2Nyb2xsIGNhbGxiYWNrXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGNvbnN0IHNjcm9sbGluZ0VsZW1lbnQgPSBnZXRTY3JvbGxhYmxlRWxlbWVudChldmVudC50YXJnZXQpO1xuXG4gICAgaWYgKCFzY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0U2Nyb2xsQ29vcmRpbmF0ZXMoc2Nyb2xsQ29vcmRpbmF0ZXMgPT4ge1xuICAgICAgaWYgKCFzY3JvbGxDb29yZGluYXRlcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgc2Nyb2xsQ29vcmRpbmF0ZXMuc2V0KHNjcm9sbGluZ0VsZW1lbnQsIGdldFNjcm9sbENvb3JkaW5hdGVzKHNjcm9sbGluZ0VsZW1lbnQpKTtcbiAgICAgIHJldHVybiBuZXcgTWFwKHNjcm9sbENvb3JkaW5hdGVzKTtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzRWxlbWVudHMgPSBwcmV2RWxlbWVudHMuY3VycmVudDtcblxuICAgIGlmIChlbGVtZW50cyAhPT0gcHJldmlvdXNFbGVtZW50cykge1xuICAgICAgY2xlYW51cChwcmV2aW91c0VsZW1lbnRzKTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBlbGVtZW50cy5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50ID0gZ2V0U2Nyb2xsYWJsZUVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHNjcm9sbGFibGVFbGVtZW50KSB7XG4gICAgICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsLCB7XG4gICAgICAgICAgICBwYXNzaXZlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFtzY3JvbGxhYmxlRWxlbWVudCwgZ2V0U2Nyb2xsQ29vcmRpbmF0ZXMoc2Nyb2xsYWJsZUVsZW1lbnQpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSkuZmlsdGVyKGVudHJ5ID0+IGVudHJ5ICE9IG51bGwpO1xuICAgICAgc2V0U2Nyb2xsQ29vcmRpbmF0ZXMoZW50cmllcy5sZW5ndGggPyBuZXcgTWFwKGVudHJpZXMpIDogbnVsbCk7XG4gICAgICBwcmV2RWxlbWVudHMuY3VycmVudCA9IGVsZW1lbnRzO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwKGVsZW1lbnRzKTtcbiAgICAgIGNsZWFudXAocHJldmlvdXNFbGVtZW50cyk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNsZWFudXAoZWxlbWVudHMpIHtcbiAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50ID0gZ2V0U2Nyb2xsYWJsZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIHNjcm9sbGFibGVFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBzY3JvbGxhYmxlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaGFuZGxlU2Nyb2xsLCBlbGVtZW50c10pO1xuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHNjcm9sbENvb3JkaW5hdGVzID8gQXJyYXkuZnJvbShzY3JvbGxDb29yZGluYXRlcy52YWx1ZXMoKSkucmVkdWNlKChhY2MsIGNvb3JkaW5hdGVzKSA9PiBhZGQoYWNjLCBjb29yZGluYXRlcyksIGRlZmF1bHRDb29yZGluYXRlcykgOiBnZXRTY3JvbGxPZmZzZXRzKGVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdENvb3JkaW5hdGVzO1xuICB9LCBbZWxlbWVudHMsIHNjcm9sbENvb3JkaW5hdGVzXSk7XG59XG5cbmZ1bmN0aW9uIHVzZVNjcm9sbE9mZnNldHNEZWx0YShzY3JvbGxPZmZzZXRzLCBkZXBlbmRlbmNpZXMpIHtcbiAgaWYgKGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwKSB7XG4gICAgZGVwZW5kZW5jaWVzID0gW107XG4gIH1cblxuICBjb25zdCBpbml0aWFsU2Nyb2xsT2Zmc2V0cyA9IHVzZVJlZihudWxsKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpbml0aWFsU2Nyb2xsT2Zmc2V0cy5jdXJyZW50ID0gbnVsbDtcbiAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBkZXBlbmRlbmNpZXMpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhc1Njcm9sbE9mZnNldHMgPSBzY3JvbGxPZmZzZXRzICE9PSBkZWZhdWx0Q29vcmRpbmF0ZXM7XG5cbiAgICBpZiAoaGFzU2Nyb2xsT2Zmc2V0cyAmJiAhaW5pdGlhbFNjcm9sbE9mZnNldHMuY3VycmVudCkge1xuICAgICAgaW5pdGlhbFNjcm9sbE9mZnNldHMuY3VycmVudCA9IHNjcm9sbE9mZnNldHM7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNTY3JvbGxPZmZzZXRzICYmIGluaXRpYWxTY3JvbGxPZmZzZXRzLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxTY3JvbGxPZmZzZXRzLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW3Njcm9sbE9mZnNldHNdKTtcbiAgcmV0dXJuIGluaXRpYWxTY3JvbGxPZmZzZXRzLmN1cnJlbnQgPyBzdWJ0cmFjdChzY3JvbGxPZmZzZXRzLCBpbml0aWFsU2Nyb2xsT2Zmc2V0cy5jdXJyZW50KSA6IGRlZmF1bHRDb29yZGluYXRlcztcbn1cblxuZnVuY3Rpb24gdXNlU2Vuc29yU2V0dXAoc2Vuc29ycykge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2FuVXNlRE9NKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGVhcmRvd25GbnMgPSBzZW5zb3JzLm1hcChfcmVmID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIHNlbnNvclxuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4gc2Vuc29yLnNldHVwID09IG51bGwgPyB2b2lkIDAgOiBzZW5zb3Iuc2V0dXAoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCB0ZWFyZG93biBvZiB0ZWFyZG93bkZucykge1xuICAgICAgICB0ZWFyZG93biA9PSBudWxsID8gdm9pZCAwIDogdGVhcmRvd24oKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCAvLyBUTy1ETzogU2Vuc29ycyBsZW5ndGggY291bGQgdGhlb3JldGljYWxseSBjaGFuZ2Ugd2hpY2ggd291bGQgbm90IGJlIGEgdmFsaWQgZGVwZW5kZW5jeVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIHNlbnNvcnMubWFwKF9yZWYyID0+IHtcbiAgICBsZXQge1xuICAgICAgc2Vuc29yXG4gICAgfSA9IF9yZWYyO1xuICAgIHJldHVybiBzZW5zb3I7XG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gdXNlU3ludGhldGljTGlzdGVuZXJzKGxpc3RlbmVycywgaWQpIHtcbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBsaXN0ZW5lcnMucmVkdWNlKChhY2MsIF9yZWYpID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgaGFuZGxlclxuICAgICAgfSA9IF9yZWY7XG5cbiAgICAgIGFjY1tldmVudE5hbWVdID0gZXZlbnQgPT4ge1xuICAgICAgICBoYW5kbGVyKGV2ZW50LCBpZCk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfSwgW2xpc3RlbmVycywgaWRdKTtcbn1cblxuZnVuY3Rpb24gdXNlV2luZG93UmVjdChlbGVtZW50KSB7XG4gIHJldHVybiB1c2VNZW1vKCgpID0+IGVsZW1lbnQgPyBnZXRXaW5kb3dDbGllbnRSZWN0KGVsZW1lbnQpIDogbnVsbCwgW2VsZW1lbnRdKTtcbn1cblxuY29uc3QgZGVmYXVsdFZhbHVlJDIgPSBbXTtcbmZ1bmN0aW9uIHVzZVJlY3RzKGVsZW1lbnRzLCBtZWFzdXJlKSB7XG4gIGlmIChtZWFzdXJlID09PSB2b2lkIDApIHtcbiAgICBtZWFzdXJlID0gZ2V0Q2xpZW50UmVjdDtcbiAgfVxuXG4gIGNvbnN0IFtmaXJzdEVsZW1lbnRdID0gZWxlbWVudHM7XG4gIGNvbnN0IHdpbmRvd1JlY3QgPSB1c2VXaW5kb3dSZWN0KGZpcnN0RWxlbWVudCA/IGdldFdpbmRvdyhmaXJzdEVsZW1lbnQpIDogbnVsbCk7XG4gIGNvbnN0IFtyZWN0cywgc2V0UmVjdHNdID0gdXNlU3RhdGUoZGVmYXVsdFZhbHVlJDIpO1xuXG4gIGZ1bmN0aW9uIG1lYXN1cmVSZWN0cygpIHtcbiAgICBzZXRSZWN0cygoKSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlJDI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbGVtZW50cy5tYXAoZWxlbWVudCA9PiBpc0RvY3VtZW50U2Nyb2xsaW5nRWxlbWVudChlbGVtZW50KSA/IHdpbmRvd1JlY3QgOiBuZXcgUmVjdChtZWFzdXJlKGVsZW1lbnQpLCBlbGVtZW50KSk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXNpemVPYnNlcnZlciA9IHVzZVJlc2l6ZU9ic2VydmVyKHtcbiAgICBjYWxsYmFjazogbWVhc3VyZVJlY3RzXG4gIH0pO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICByZXNpemVPYnNlcnZlciA9PSBudWxsID8gdm9pZCAwIDogcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIG1lYXN1cmVSZWN0cygpO1xuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiByZXNpemVPYnNlcnZlciA9PSBudWxsID8gdm9pZCAwIDogcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KSk7XG4gIH0sIFtlbGVtZW50c10pO1xuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldE1lYXN1cmFibGVOb2RlKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBjb25zdCBmaXJzdENoaWxkID0gbm9kZS5jaGlsZHJlblswXTtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoZmlyc3RDaGlsZCkgPyBmaXJzdENoaWxkIDogbm9kZTtcbn1cblxuZnVuY3Rpb24gdXNlRHJhZ092ZXJsYXlNZWFzdXJpbmcoX3JlZikge1xuICBsZXQge1xuICAgIG1lYXN1cmVcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IFtyZWN0LCBzZXRSZWN0XSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZXNpemUgPSB1c2VDYWxsYmFjayhlbnRyaWVzID0+IHtcbiAgICBmb3IgKGNvbnN0IHtcbiAgICAgIHRhcmdldFxuICAgIH0gb2YgZW50cmllcykge1xuICAgICAgaWYgKGlzSFRNTEVsZW1lbnQodGFyZ2V0KSkge1xuICAgICAgICBzZXRSZWN0KHJlY3QgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1JlY3QgPSBtZWFzdXJlKHRhcmdldCk7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgPyB7IC4uLnJlY3QsXG4gICAgICAgICAgICB3aWR0aDogbmV3UmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogbmV3UmVjdC5oZWlnaHRcbiAgICAgICAgICB9IDogbmV3UmVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW21lYXN1cmVdKTtcbiAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSB1c2VSZXNpemVPYnNlcnZlcih7XG4gICAgY2FsbGJhY2s6IGhhbmRsZVJlc2l6ZVxuICB9KTtcbiAgY29uc3QgaGFuZGxlTm9kZUNoYW5nZSA9IHVzZUNhbGxiYWNrKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRNZWFzdXJhYmxlTm9kZShlbGVtZW50KTtcbiAgICByZXNpemVPYnNlcnZlciA9PSBudWxsID8gdm9pZCAwIDogcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyID09IG51bGwgPyB2b2lkIDAgOiByZXNpemVPYnNlcnZlci5vYnNlcnZlKG5vZGUpO1xuICAgIH1cblxuICAgIHNldFJlY3Qobm9kZSA/IG1lYXN1cmUobm9kZSkgOiBudWxsKTtcbiAgfSwgW21lYXN1cmUsIHJlc2l6ZU9ic2VydmVyXSk7XG4gIGNvbnN0IFtub2RlUmVmLCBzZXRSZWZdID0gdXNlTm9kZVJlZihoYW5kbGVOb2RlQ2hhbmdlKTtcbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4gKHtcbiAgICBub2RlUmVmLFxuICAgIHJlY3QsXG4gICAgc2V0UmVmXG4gIH0pLCBbcmVjdCwgbm9kZVJlZiwgc2V0UmVmXSk7XG59XG5cbmNvbnN0IGRlZmF1bHRTZW5zb3JzID0gW3tcbiAgc2Vuc29yOiBQb2ludGVyU2Vuc29yLFxuICBvcHRpb25zOiB7fVxufSwge1xuICBzZW5zb3I6IEtleWJvYXJkU2Vuc29yLFxuICBvcHRpb25zOiB7fVxufV07XG5jb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgY3VycmVudDoge31cbn07XG5jb25zdCBkZWZhdWx0TWVhc3VyaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgZHJhZ2dhYmxlOiB7XG4gICAgbWVhc3VyZTogZ2V0VHJhbnNmb3JtQWdub3N0aWNDbGllbnRSZWN0XG4gIH0sXG4gIGRyb3BwYWJsZToge1xuICAgIG1lYXN1cmU6IGdldFRyYW5zZm9ybUFnbm9zdGljQ2xpZW50UmVjdCxcbiAgICBzdHJhdGVneTogTWVhc3VyaW5nU3RyYXRlZ3kuV2hpbGVEcmFnZ2luZyxcbiAgICBmcmVxdWVuY3k6IE1lYXN1cmluZ0ZyZXF1ZW5jeS5PcHRpbWl6ZWRcbiAgfSxcbiAgZHJhZ092ZXJsYXk6IHtcbiAgICBtZWFzdXJlOiBnZXRDbGllbnRSZWN0XG4gIH1cbn07XG5cbmNsYXNzIERyb3BwYWJsZUNvbnRhaW5lcnNNYXAgZXh0ZW5kcyBNYXAge1xuICBnZXQoaWQpIHtcbiAgICB2YXIgX3N1cGVyJGdldDtcblxuICAgIHJldHVybiBpZCAhPSBudWxsID8gKF9zdXBlciRnZXQgPSBzdXBlci5nZXQoaWQpKSAhPSBudWxsID8gX3N1cGVyJGdldCA6IHVuZGVmaW5lZCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52YWx1ZXMoKSk7XG4gIH1cblxuICBnZXRFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKS5maWx0ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICBkaXNhYmxlZFxuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4gIWRpc2FibGVkO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Tm9kZUZvcihpZCkge1xuICAgIHZhciBfdGhpcyRnZXQkbm9kZSRjdXJyZW4sIF90aGlzJGdldDtcblxuICAgIHJldHVybiAoX3RoaXMkZ2V0JG5vZGUkY3VycmVuID0gKF90aGlzJGdldCA9IHRoaXMuZ2V0KGlkKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGdldC5ub2RlLmN1cnJlbnQpICE9IG51bGwgPyBfdGhpcyRnZXQkbm9kZSRjdXJyZW4gOiB1bmRlZmluZWQ7XG4gIH1cblxufVxuXG5jb25zdCBkZWZhdWx0UHVibGljQ29udGV4dCA9IHtcbiAgYWN0aXZhdG9yRXZlbnQ6IG51bGwsXG4gIGFjdGl2ZTogbnVsbCxcbiAgYWN0aXZlTm9kZTogbnVsbCxcbiAgYWN0aXZlTm9kZVJlY3Q6IG51bGwsXG4gIGNvbGxpc2lvbnM6IG51bGwsXG4gIGNvbnRhaW5lck5vZGVSZWN0OiBudWxsLFxuICBkcmFnZ2FibGVOb2RlczogLyojX19QVVJFX18qL25ldyBNYXAoKSxcbiAgZHJvcHBhYmxlUmVjdHM6IC8qI19fUFVSRV9fKi9uZXcgTWFwKCksXG4gIGRyb3BwYWJsZUNvbnRhaW5lcnM6IC8qI19fUFVSRV9fKi9uZXcgRHJvcHBhYmxlQ29udGFpbmVyc01hcCgpLFxuICBvdmVyOiBudWxsLFxuICBkcmFnT3ZlcmxheToge1xuICAgIG5vZGVSZWY6IHtcbiAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICB9LFxuICAgIHJlY3Q6IG51bGwsXG4gICAgc2V0UmVmOiBub29wXG4gIH0sXG4gIHNjcm9sbGFibGVBbmNlc3RvcnM6IFtdLFxuICBzY3JvbGxhYmxlQW5jZXN0b3JSZWN0czogW10sXG4gIG1lYXN1cmluZ0NvbmZpZ3VyYXRpb246IGRlZmF1bHRNZWFzdXJpbmdDb25maWd1cmF0aW9uLFxuICBtZWFzdXJlRHJvcHBhYmxlQ29udGFpbmVyczogbm9vcCxcbiAgd2luZG93UmVjdDogbnVsbCxcbiAgbWVhc3VyaW5nU2NoZWR1bGVkOiBmYWxzZVxufTtcbmNvbnN0IGRlZmF1bHRJbnRlcm5hbENvbnRleHQgPSB7XG4gIGFjdGl2YXRvckV2ZW50OiBudWxsLFxuICBhY3RpdmF0b3JzOiBbXSxcbiAgYWN0aXZlOiBudWxsLFxuICBhY3RpdmVOb2RlUmVjdDogbnVsbCxcbiAgYXJpYURlc2NyaWJlZEJ5SWQ6IHtcbiAgICBkcmFnZ2FibGU6ICcnXG4gIH0sXG4gIGRpc3BhdGNoOiBub29wLFxuICBkcmFnZ2FibGVOb2RlczogLyojX19QVVJFX18qL25ldyBNYXAoKSxcbiAgb3ZlcjogbnVsbCxcbiAgbWVhc3VyZURyb3BwYWJsZUNvbnRhaW5lcnM6IG5vb3Bcbn07XG5jb25zdCBJbnRlcm5hbENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChkZWZhdWx0SW50ZXJuYWxDb250ZXh0KTtcbmNvbnN0IFB1YmxpY0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChkZWZhdWx0UHVibGljQ29udGV4dCk7XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIGFjdGl2ZTogbnVsbCxcbiAgICAgIGluaXRpYWxDb29yZGluYXRlczoge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9LFxuICAgICAgbm9kZXM6IG5ldyBNYXAoKSxcbiAgICAgIHRyYW5zbGF0ZToge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9XG4gICAgfSxcbiAgICBkcm9wcGFibGU6IHtcbiAgICAgIGNvbnRhaW5lcnM6IG5ldyBEcm9wcGFibGVDb250YWluZXJzTWFwKClcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgQWN0aW9uLkRyYWdTdGFydDpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgICBkcmFnZ2FibGU6IHsgLi4uc3RhdGUuZHJhZ2dhYmxlLFxuICAgICAgICAgIGluaXRpYWxDb29yZGluYXRlczogYWN0aW9uLmluaXRpYWxDb29yZGluYXRlcyxcbiAgICAgICAgICBhY3RpdmU6IGFjdGlvbi5hY3RpdmVcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIGNhc2UgQWN0aW9uLkRyYWdNb3ZlOlxuICAgICAgaWYgKHN0YXRlLmRyYWdnYWJsZS5hY3RpdmUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgICBkcmFnZ2FibGU6IHsgLi4uc3RhdGUuZHJhZ2dhYmxlLFxuICAgICAgICAgIHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgeDogYWN0aW9uLmNvb3JkaW5hdGVzLnggLSBzdGF0ZS5kcmFnZ2FibGUuaW5pdGlhbENvb3JkaW5hdGVzLngsXG4gICAgICAgICAgICB5OiBhY3Rpb24uY29vcmRpbmF0ZXMueSAtIHN0YXRlLmRyYWdnYWJsZS5pbml0aWFsQ29vcmRpbmF0ZXMueVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIGNhc2UgQWN0aW9uLkRyYWdFbmQ6XG4gICAgY2FzZSBBY3Rpb24uRHJhZ0NhbmNlbDpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLFxuICAgICAgICBkcmFnZ2FibGU6IHsgLi4uc3RhdGUuZHJhZ2dhYmxlLFxuICAgICAgICAgIGFjdGl2ZTogbnVsbCxcbiAgICAgICAgICBpbml0aWFsQ29vcmRpbmF0ZXM6IHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cmFuc2xhdGU6IHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgY2FzZSBBY3Rpb24uUmVnaXN0ZXJEcm9wcGFibGU6XG4gICAgICB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBlbGVtZW50XG4gICAgICAgIH0gPSBhY3Rpb247XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpZFxuICAgICAgICB9ID0gZWxlbWVudDtcbiAgICAgICAgY29uc3QgY29udGFpbmVycyA9IG5ldyBEcm9wcGFibGVDb250YWluZXJzTWFwKHN0YXRlLmRyb3BwYWJsZS5jb250YWluZXJzKTtcbiAgICAgICAgY29udGFpbmVycy5zZXQoaWQsIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgICBkcm9wcGFibGU6IHsgLi4uc3RhdGUuZHJvcHBhYmxlLFxuICAgICAgICAgICAgY29udGFpbmVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgIGNhc2UgQWN0aW9uLlNldERyb3BwYWJsZURpc2FibGVkOlxuICAgICAge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgIH0gPSBhY3Rpb247XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBzdGF0ZS5kcm9wcGFibGUuY29udGFpbmVycy5nZXQoaWQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudCB8fCBrZXkgIT09IGVsZW1lbnQua2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGFpbmVycyA9IG5ldyBEcm9wcGFibGVDb250YWluZXJzTWFwKHN0YXRlLmRyb3BwYWJsZS5jb250YWluZXJzKTtcbiAgICAgICAgY29udGFpbmVycy5zZXQoaWQsIHsgLi4uZWxlbWVudCxcbiAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsXG4gICAgICAgICAgZHJvcHBhYmxlOiB7IC4uLnN0YXRlLmRyb3BwYWJsZSxcbiAgICAgICAgICAgIGNvbnRhaW5lcnNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICBjYXNlIEFjdGlvbi5VbnJlZ2lzdGVyRHJvcHBhYmxlOlxuICAgICAge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAga2V5XG4gICAgICAgIH0gPSBhY3Rpb247XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBzdGF0ZS5kcm9wcGFibGUuY29udGFpbmVycy5nZXQoaWQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudCB8fCBrZXkgIT09IGVsZW1lbnQua2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGFpbmVycyA9IG5ldyBEcm9wcGFibGVDb250YWluZXJzTWFwKHN0YXRlLmRyb3BwYWJsZS5jb250YWluZXJzKTtcbiAgICAgICAgY29udGFpbmVycy5kZWxldGUoaWQpO1xuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSxcbiAgICAgICAgICBkcm9wcGFibGU6IHsgLi4uc3RhdGUuZHJvcHBhYmxlLFxuICAgICAgICAgICAgY29udGFpbmVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBSZXN0b3JlRm9jdXMoX3JlZikge1xuICBsZXQge1xuICAgIGRpc2FibGVkXG4gIH0gPSBfcmVmO1xuICBjb25zdCB7XG4gICAgYWN0aXZlLFxuICAgIGFjdGl2YXRvckV2ZW50LFxuICAgIGRyYWdnYWJsZU5vZGVzXG4gIH0gPSB1c2VDb250ZXh0KEludGVybmFsQ29udGV4dCk7XG4gIGNvbnN0IHByZXZpb3VzQWN0aXZhdG9yRXZlbnQgPSB1c2VQcmV2aW91cyhhY3RpdmF0b3JFdmVudCk7XG4gIGNvbnN0IHByZXZpb3VzQWN0aXZlSWQgPSB1c2VQcmV2aW91cyhhY3RpdmUgPT0gbnVsbCA/IHZvaWQgMCA6IGFjdGl2ZS5pZCk7IC8vIFJlc3RvcmUga2V5Ym9hcmQgZm9jdXMgb24gdGhlIGFjdGl2YXRvciBub2RlXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWFjdGl2YXRvckV2ZW50ICYmIHByZXZpb3VzQWN0aXZhdG9yRXZlbnQgJiYgcHJldmlvdXNBY3RpdmVJZCAhPSBudWxsKSB7XG4gICAgICBpZiAoIWlzS2V5Ym9hcmRFdmVudChwcmV2aW91c0FjdGl2YXRvckV2ZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwcmV2aW91c0FjdGl2YXRvckV2ZW50LnRhcmdldCkge1xuICAgICAgICAvLyBObyBuZWVkIHRvIHJlc3RvcmUgZm9jdXNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkcmFnZ2FibGVOb2RlID0gZHJhZ2dhYmxlTm9kZXMuZ2V0KHByZXZpb3VzQWN0aXZlSWQpO1xuXG4gICAgICBpZiAoIWRyYWdnYWJsZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFjdGl2YXRvck5vZGUsXG4gICAgICAgIG5vZGVcbiAgICAgIH0gPSBkcmFnZ2FibGVOb2RlO1xuXG4gICAgICBpZiAoIWFjdGl2YXRvck5vZGUuY3VycmVudCAmJiAhbm9kZS5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFthY3RpdmF0b3JOb2RlLmN1cnJlbnQsIG5vZGUuY3VycmVudF0pIHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZvY3VzYWJsZU5vZGUgPSBmaW5kRmlyc3RGb2N1c2FibGVOb2RlKGVsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKGZvY3VzYWJsZU5vZGUpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZU5vZGUuZm9jdXMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbYWN0aXZhdG9yRXZlbnQsIGRpc2FibGVkLCBkcmFnZ2FibGVOb2RlcywgcHJldmlvdXNBY3RpdmVJZCwgcHJldmlvdXNBY3RpdmF0b3JFdmVudF0pO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYXBwbHlNb2RpZmllcnMobW9kaWZpZXJzLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgdHJhbnNmb3JtLFxuICAgIC4uLmFyZ3NcbiAgfSA9IF9yZWY7XG4gIHJldHVybiBtb2RpZmllcnMgIT0gbnVsbCAmJiBtb2RpZmllcnMubGVuZ3RoID8gbW9kaWZpZXJzLnJlZHVjZSgoYWNjdW11bGF0b3IsIG1vZGlmaWVyKSA9PiB7XG4gICAgcmV0dXJuIG1vZGlmaWVyKHtcbiAgICAgIHRyYW5zZm9ybTogYWNjdW11bGF0b3IsXG4gICAgICAuLi5hcmdzXG4gICAgfSk7XG4gIH0sIHRyYW5zZm9ybSkgOiB0cmFuc2Zvcm07XG59XG5cbmZ1bmN0aW9uIHVzZU1lYXN1cmluZ0NvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gIHJldHVybiB1c2VNZW1vKCgpID0+ICh7XG4gICAgZHJhZ2dhYmxlOiB7IC4uLmRlZmF1bHRNZWFzdXJpbmdDb25maWd1cmF0aW9uLmRyYWdnYWJsZSxcbiAgICAgIC4uLihjb25maWcgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5kcmFnZ2FibGUpXG4gICAgfSxcbiAgICBkcm9wcGFibGU6IHsgLi4uZGVmYXVsdE1lYXN1cmluZ0NvbmZpZ3VyYXRpb24uZHJvcHBhYmxlLFxuICAgICAgLi4uKGNvbmZpZyA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLmRyb3BwYWJsZSlcbiAgICB9LFxuICAgIGRyYWdPdmVybGF5OiB7IC4uLmRlZmF1bHRNZWFzdXJpbmdDb25maWd1cmF0aW9uLmRyYWdPdmVybGF5LFxuICAgICAgLi4uKGNvbmZpZyA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLmRyYWdPdmVybGF5KVxuICAgIH1cbiAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgW2NvbmZpZyA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLmRyYWdnYWJsZSwgY29uZmlnID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcuZHJvcHBhYmxlLCBjb25maWcgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5kcmFnT3ZlcmxheV0pO1xufVxuXG5mdW5jdGlvbiB1c2VMYXlvdXRTaGlmdFNjcm9sbENvbXBlbnNhdGlvbihfcmVmKSB7XG4gIGxldCB7XG4gICAgYWN0aXZlTm9kZSxcbiAgICBtZWFzdXJlLFxuICAgIGluaXRpYWxSZWN0LFxuICAgIGNvbmZpZyA9IHRydWVcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGluaXRpYWxpemVkID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeVxuICB9ID0gdHlwZW9mIGNvbmZpZyA9PT0gJ2Jvb2xlYW4nID8ge1xuICAgIHg6IGNvbmZpZyxcbiAgICB5OiBjb25maWdcbiAgfSA6IGNvbmZpZztcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSAheCAmJiAheTtcblxuICAgIGlmIChkaXNhYmxlZCB8fCAhYWN0aXZlTm9kZSkge1xuICAgICAgaW5pdGlhbGl6ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbml0aWFsaXplZC5jdXJyZW50IHx8ICFpbml0aWFsUmVjdCkge1xuICAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIGxheW91dCBzaGlmdCBzY3JvbGwgY29tcGVuc2F0aW9uIHdhcyBhbHJlYWR5IGF0dGVtcHRlZFxuICAgICAgLy8gb3IgaWYgdGhlcmUgaXMgbm8gaW5pdGlhbFJlY3QgdG8gY29tcGFyZSB0by5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEdldCB0aGUgbW9zdCB1cCB0byBkYXRlIG5vZGUgcmVmIGZvciB0aGUgYWN0aXZlIGRyYWdnYWJsZVxuXG5cbiAgICBjb25zdCBub2RlID0gYWN0aXZlTm9kZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aXZlTm9kZS5ub2RlLmN1cnJlbnQ7XG5cbiAgICBpZiAoIW5vZGUgfHwgbm9kZS5pc0Nvbm5lY3RlZCA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIFJldHVybiBlYXJseSBpZiB0aGVyZSBpcyBubyBhdHRhY2hlZCBub2RlIHJlZiBvciBpZiB0aGUgbm9kZSBpc1xuICAgICAgLy8gZGlzY29ubmVjdGVkIGZyb20gdGhlIGRvY3VtZW50LlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY3QgPSBtZWFzdXJlKG5vZGUpO1xuICAgIGNvbnN0IHJlY3REZWx0YSA9IGdldFJlY3REZWx0YShyZWN0LCBpbml0aWFsUmVjdCk7XG5cbiAgICBpZiAoIXgpIHtcbiAgICAgIHJlY3REZWx0YS54ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIXkpIHtcbiAgICAgIHJlY3REZWx0YS55ID0gMDtcbiAgICB9IC8vIE9ubHkgcGVyZm9ybSBsYXlvdXQgc2hpZnQgc2Nyb2xsIGNvbXBlbnNhdGlvbiBvbmNlXG5cblxuICAgIGluaXRpYWxpemVkLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgaWYgKE1hdGguYWJzKHJlY3REZWx0YS54KSA+IDAgfHwgTWF0aC5hYnMocmVjdERlbHRhLnkpID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RTY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXRGaXJzdFNjcm9sbGFibGVBbmNlc3Rvcihub2RlKTtcblxuICAgICAgaWYgKGZpcnN0U2Nyb2xsYWJsZUFuY2VzdG9yKSB7XG4gICAgICAgIGZpcnN0U2Nyb2xsYWJsZUFuY2VzdG9yLnNjcm9sbEJ5KHtcbiAgICAgICAgICB0b3A6IHJlY3REZWx0YS55LFxuICAgICAgICAgIGxlZnQ6IHJlY3REZWx0YS54XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2FjdGl2ZU5vZGUsIHgsIHksIGluaXRpYWxSZWN0LCBtZWFzdXJlXSk7XG59XG5cbmNvbnN0IEFjdGl2ZURyYWdnYWJsZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7IC4uLmRlZmF1bHRDb29yZGluYXRlcyxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn0pO1xudmFyIFN0YXR1cztcblxuKGZ1bmN0aW9uIChTdGF0dXMpIHtcbiAgU3RhdHVzW1N0YXR1c1tcIlVuaW5pdGlhbGl6ZWRcIl0gPSAwXSA9IFwiVW5pbml0aWFsaXplZFwiO1xuICBTdGF0dXNbU3RhdHVzW1wiSW5pdGlhbGl6aW5nXCJdID0gMV0gPSBcIkluaXRpYWxpemluZ1wiO1xuICBTdGF0dXNbU3RhdHVzW1wiSW5pdGlhbGl6ZWRcIl0gPSAyXSA9IFwiSW5pdGlhbGl6ZWRcIjtcbn0pKFN0YXR1cyB8fCAoU3RhdHVzID0ge30pKTtcblxuY29uc3QgRG5kQ29udGV4dCA9IC8qI19fUFVSRV9fKi9tZW1vKGZ1bmN0aW9uIERuZENvbnRleHQoX3JlZikge1xuICB2YXIgX3NlbnNvckNvbnRleHQkY3VycmVuLCBfZHJhZ092ZXJsYXkkbm9kZVJlZiQsIF9kcmFnT3ZlcmxheSRyZWN0LCBfb3ZlciRyZWN0O1xuXG4gIGxldCB7XG4gICAgaWQsXG4gICAgYWNjZXNzaWJpbGl0eSxcbiAgICBhdXRvU2Nyb2xsID0gdHJ1ZSxcbiAgICBjaGlsZHJlbixcbiAgICBzZW5zb3JzID0gZGVmYXVsdFNlbnNvcnMsXG4gICAgY29sbGlzaW9uRGV0ZWN0aW9uID0gcmVjdEludGVyc2VjdGlvbixcbiAgICBtZWFzdXJpbmcsXG4gICAgbW9kaWZpZXJzLFxuICAgIC4uLnByb3BzXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzdG9yZSA9IHVzZVJlZHVjZXIocmVkdWNlciwgdW5kZWZpbmVkLCBnZXRJbml0aWFsU3RhdGUpO1xuICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHN0b3JlO1xuICBjb25zdCBbZGlzcGF0Y2hNb25pdG9yRXZlbnQsIHJlZ2lzdGVyTW9uaXRvckxpc3RlbmVyXSA9IHVzZURuZE1vbml0b3JQcm92aWRlcigpO1xuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGUoU3RhdHVzLlVuaW5pdGlhbGl6ZWQpO1xuICBjb25zdCBpc0luaXRpYWxpemVkID0gc3RhdHVzID09PSBTdGF0dXMuSW5pdGlhbGl6ZWQ7XG4gIGNvbnN0IHtcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIGFjdGl2ZTogYWN0aXZlSWQsXG4gICAgICBub2RlczogZHJhZ2dhYmxlTm9kZXMsXG4gICAgICB0cmFuc2xhdGVcbiAgICB9LFxuICAgIGRyb3BwYWJsZToge1xuICAgICAgY29udGFpbmVyczogZHJvcHBhYmxlQ29udGFpbmVyc1xuICAgIH1cbiAgfSA9IHN0YXRlO1xuICBjb25zdCBub2RlID0gYWN0aXZlSWQgIT0gbnVsbCA/IGRyYWdnYWJsZU5vZGVzLmdldChhY3RpdmVJZCkgOiBudWxsO1xuICBjb25zdCBhY3RpdmVSZWN0cyA9IHVzZVJlZih7XG4gICAgaW5pdGlhbDogbnVsbCxcbiAgICB0cmFuc2xhdGVkOiBudWxsXG4gIH0pO1xuICBjb25zdCBhY3RpdmUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB2YXIgX25vZGUkZGF0YTtcblxuICAgIHJldHVybiBhY3RpdmVJZCAhPSBudWxsID8ge1xuICAgICAgaWQ6IGFjdGl2ZUlkLFxuICAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3IgdGhlIGFjdGl2ZSBub2RlIHRvIHVubW91bnQgd2hpbGUgZHJhZ2dpbmdcbiAgICAgIGRhdGE6IChfbm9kZSRkYXRhID0gbm9kZSA9PSBudWxsID8gdm9pZCAwIDogbm9kZS5kYXRhKSAhPSBudWxsID8gX25vZGUkZGF0YSA6IGRlZmF1bHREYXRhLFxuICAgICAgcmVjdDogYWN0aXZlUmVjdHNcbiAgICB9IDogbnVsbDtcbiAgfSwgW2FjdGl2ZUlkLCBub2RlXSk7XG4gIGNvbnN0IGFjdGl2ZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW2FjdGl2ZVNlbnNvciwgc2V0QWN0aXZlU2Vuc29yXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYWN0aXZhdG9yRXZlbnQsIHNldEFjdGl2YXRvckV2ZW50XSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBsYXRlc3RQcm9wcyA9IHVzZUxhdGVzdFZhbHVlKHByb3BzLCBPYmplY3QudmFsdWVzKHByb3BzKSk7XG4gIGNvbnN0IGRyYWdnYWJsZURlc2NyaWJlZEJ5SWQgPSB1c2VVbmlxdWVJZChcIkRuZERlc2NyaWJlZEJ5XCIsIGlkKTtcbiAgY29uc3QgZW5hYmxlZERyb3BwYWJsZUNvbnRhaW5lcnMgPSB1c2VNZW1vKCgpID0+IGRyb3BwYWJsZUNvbnRhaW5lcnMuZ2V0RW5hYmxlZCgpLCBbZHJvcHBhYmxlQ29udGFpbmVyc10pO1xuICBjb25zdCBtZWFzdXJpbmdDb25maWd1cmF0aW9uID0gdXNlTWVhc3VyaW5nQ29uZmlndXJhdGlvbihtZWFzdXJpbmcpO1xuICBjb25zdCB7XG4gICAgZHJvcHBhYmxlUmVjdHMsXG4gICAgbWVhc3VyZURyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgbWVhc3VyaW5nU2NoZWR1bGVkXG4gIH0gPSB1c2VEcm9wcGFibGVNZWFzdXJpbmcoZW5hYmxlZERyb3BwYWJsZUNvbnRhaW5lcnMsIHtcbiAgICBkcmFnZ2luZzogaXNJbml0aWFsaXplZCxcbiAgICBkZXBlbmRlbmNpZXM6IFt0cmFuc2xhdGUueCwgdHJhbnNsYXRlLnldLFxuICAgIGNvbmZpZzogbWVhc3VyaW5nQ29uZmlndXJhdGlvbi5kcm9wcGFibGVcbiAgfSk7XG4gIGNvbnN0IGFjdGl2ZU5vZGUgPSB1c2VDYWNoZWROb2RlKGRyYWdnYWJsZU5vZGVzLCBhY3RpdmVJZCk7XG4gIGNvbnN0IGFjdGl2YXRpb25Db29yZGluYXRlcyA9IHVzZU1lbW8oKCkgPT4gYWN0aXZhdG9yRXZlbnQgPyBnZXRFdmVudENvb3JkaW5hdGVzKGFjdGl2YXRvckV2ZW50KSA6IG51bGwsIFthY3RpdmF0b3JFdmVudF0pO1xuICBjb25zdCBhdXRvU2Nyb2xsT3B0aW9ucyA9IGdldEF1dG9TY3JvbGxlck9wdGlvbnMoKTtcbiAgY29uc3QgaW5pdGlhbEFjdGl2ZU5vZGVSZWN0ID0gdXNlSW5pdGlhbFJlY3QoYWN0aXZlTm9kZSwgbWVhc3VyaW5nQ29uZmlndXJhdGlvbi5kcmFnZ2FibGUubWVhc3VyZSk7XG4gIHVzZUxheW91dFNoaWZ0U2Nyb2xsQ29tcGVuc2F0aW9uKHtcbiAgICBhY3RpdmVOb2RlOiBhY3RpdmVJZCAhPSBudWxsID8gZHJhZ2dhYmxlTm9kZXMuZ2V0KGFjdGl2ZUlkKSA6IG51bGwsXG4gICAgY29uZmlnOiBhdXRvU2Nyb2xsT3B0aW9ucy5sYXlvdXRTaGlmdENvbXBlbnNhdGlvbixcbiAgICBpbml0aWFsUmVjdDogaW5pdGlhbEFjdGl2ZU5vZGVSZWN0LFxuICAgIG1lYXN1cmU6IG1lYXN1cmluZ0NvbmZpZ3VyYXRpb24uZHJhZ2dhYmxlLm1lYXN1cmVcbiAgfSk7XG4gIGNvbnN0IGFjdGl2ZU5vZGVSZWN0ID0gdXNlUmVjdChhY3RpdmVOb2RlLCBtZWFzdXJpbmdDb25maWd1cmF0aW9uLmRyYWdnYWJsZS5tZWFzdXJlLCBpbml0aWFsQWN0aXZlTm9kZVJlY3QpO1xuICBjb25zdCBjb250YWluZXJOb2RlUmVjdCA9IHVzZVJlY3QoYWN0aXZlTm9kZSA/IGFjdGl2ZU5vZGUucGFyZW50RWxlbWVudCA6IG51bGwpO1xuICBjb25zdCBzZW5zb3JDb250ZXh0ID0gdXNlUmVmKHtcbiAgICBhY3RpdmF0b3JFdmVudDogbnVsbCxcbiAgICBhY3RpdmU6IG51bGwsXG4gICAgYWN0aXZlTm9kZSxcbiAgICBjb2xsaXNpb25SZWN0OiBudWxsLFxuICAgIGNvbGxpc2lvbnM6IG51bGwsXG4gICAgZHJvcHBhYmxlUmVjdHMsXG4gICAgZHJhZ2dhYmxlTm9kZXMsXG4gICAgZHJhZ2dpbmdOb2RlOiBudWxsLFxuICAgIGRyYWdnaW5nTm9kZVJlY3Q6IG51bGwsXG4gICAgZHJvcHBhYmxlQ29udGFpbmVycyxcbiAgICBvdmVyOiBudWxsLFxuICAgIHNjcm9sbGFibGVBbmNlc3RvcnM6IFtdLFxuICAgIHNjcm9sbEFkanVzdGVkVHJhbnNsYXRlOiBudWxsXG4gIH0pO1xuICBjb25zdCBvdmVyTm9kZSA9IGRyb3BwYWJsZUNvbnRhaW5lcnMuZ2V0Tm9kZUZvcigoX3NlbnNvckNvbnRleHQkY3VycmVuID0gc2Vuc29yQ29udGV4dC5jdXJyZW50Lm92ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfc2Vuc29yQ29udGV4dCRjdXJyZW4uaWQpO1xuICBjb25zdCBkcmFnT3ZlcmxheSA9IHVzZURyYWdPdmVybGF5TWVhc3VyaW5nKHtcbiAgICBtZWFzdXJlOiBtZWFzdXJpbmdDb25maWd1cmF0aW9uLmRyYWdPdmVybGF5Lm1lYXN1cmVcbiAgfSk7IC8vIFVzZSB0aGUgcmVjdCBvZiB0aGUgZHJhZyBvdmVybGF5IGlmIGl0IGlzIG1vdW50ZWRcblxuICBjb25zdCBkcmFnZ2luZ05vZGUgPSAoX2RyYWdPdmVybGF5JG5vZGVSZWYkID0gZHJhZ092ZXJsYXkubm9kZVJlZi5jdXJyZW50KSAhPSBudWxsID8gX2RyYWdPdmVybGF5JG5vZGVSZWYkIDogYWN0aXZlTm9kZTtcbiAgY29uc3QgZHJhZ2dpbmdOb2RlUmVjdCA9IGlzSW5pdGlhbGl6ZWQgPyAoX2RyYWdPdmVybGF5JHJlY3QgPSBkcmFnT3ZlcmxheS5yZWN0KSAhPSBudWxsID8gX2RyYWdPdmVybGF5JHJlY3QgOiBhY3RpdmVOb2RlUmVjdCA6IG51bGw7XG4gIGNvbnN0IHVzZXNEcmFnT3ZlcmxheSA9IEJvb2xlYW4oZHJhZ092ZXJsYXkubm9kZVJlZi5jdXJyZW50ICYmIGRyYWdPdmVybGF5LnJlY3QpOyAvLyBUaGUgZGVsdGEgYmV0d2VlbiB0aGUgcHJldmlvdXMgYW5kIG5ldyBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dhYmxlIG5vZGVcbiAgLy8gaXMgb25seSByZWxldmFudCB3aGVuIHRoZXJlIGlzIG5vIGRyYWcgb3ZlcmxheVxuXG4gIGNvbnN0IG5vZGVSZWN0RGVsdGEgPSB1c2VSZWN0RGVsdGEodXNlc0RyYWdPdmVybGF5ID8gbnVsbCA6IGFjdGl2ZU5vZGVSZWN0KTsgLy8gR2V0IHRoZSB3aW5kb3cgcmVjdCBvZiB0aGUgZHJhZ2dpbmcgbm9kZVxuXG4gIGNvbnN0IHdpbmRvd1JlY3QgPSB1c2VXaW5kb3dSZWN0KGRyYWdnaW5nTm9kZSA/IGdldFdpbmRvdyhkcmFnZ2luZ05vZGUpIDogbnVsbCk7IC8vIEdldCBzY3JvbGxhYmxlIGFuY2VzdG9ycyBvZiB0aGUgZHJhZ2dpbmcgbm9kZVxuXG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvcnMgPSB1c2VTY3JvbGxhYmxlQW5jZXN0b3JzKGlzSW5pdGlhbGl6ZWQgPyBvdmVyTm9kZSAhPSBudWxsID8gb3Zlck5vZGUgOiBhY3RpdmVOb2RlIDogbnVsbCk7XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvclJlY3RzID0gdXNlUmVjdHMoc2Nyb2xsYWJsZUFuY2VzdG9ycyk7IC8vIEFwcGx5IG1vZGlmaWVyc1xuXG4gIGNvbnN0IG1vZGlmaWVkVHJhbnNsYXRlID0gYXBwbHlNb2RpZmllcnMobW9kaWZpZXJzLCB7XG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICB4OiB0cmFuc2xhdGUueCAtIG5vZGVSZWN0RGVsdGEueCxcbiAgICAgIHk6IHRyYW5zbGF0ZS55IC0gbm9kZVJlY3REZWx0YS55LFxuICAgICAgc2NhbGVYOiAxLFxuICAgICAgc2NhbGVZOiAxXG4gICAgfSxcbiAgICBhY3RpdmF0b3JFdmVudCxcbiAgICBhY3RpdmUsXG4gICAgYWN0aXZlTm9kZVJlY3QsXG4gICAgY29udGFpbmVyTm9kZVJlY3QsXG4gICAgZHJhZ2dpbmdOb2RlUmVjdCxcbiAgICBvdmVyOiBzZW5zb3JDb250ZXh0LmN1cnJlbnQub3ZlcixcbiAgICBvdmVybGF5Tm9kZVJlY3Q6IGRyYWdPdmVybGF5LnJlY3QsXG4gICAgc2Nyb2xsYWJsZUFuY2VzdG9ycyxcbiAgICBzY3JvbGxhYmxlQW5jZXN0b3JSZWN0cyxcbiAgICB3aW5kb3dSZWN0XG4gIH0pO1xuICBjb25zdCBwb2ludGVyQ29vcmRpbmF0ZXMgPSBhY3RpdmF0aW9uQ29vcmRpbmF0ZXMgPyBhZGQoYWN0aXZhdGlvbkNvb3JkaW5hdGVzLCB0cmFuc2xhdGUpIDogbnVsbDtcbiAgY29uc3Qgc2Nyb2xsT2Zmc2V0cyA9IHVzZVNjcm9sbE9mZnNldHMoc2Nyb2xsYWJsZUFuY2VzdG9ycyk7IC8vIFJlcHJlc2VudHMgdGhlIHNjcm9sbCBkZWx0YSBzaW5jZSBkcmFnZ2luZyB3YXMgaW5pdGlhdGVkXG5cbiAgY29uc3Qgc2Nyb2xsQWRqdXN0bWVudCA9IHVzZVNjcm9sbE9mZnNldHNEZWx0YShzY3JvbGxPZmZzZXRzKTsgLy8gUmVwcmVzZW50cyB0aGUgc2Nyb2xsIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGFjdGl2ZSBub2RlIHJlY3Qgd2FzIG1lYXN1cmVkXG5cbiAgY29uc3QgYWN0aXZlTm9kZVNjcm9sbERlbHRhID0gdXNlU2Nyb2xsT2Zmc2V0c0RlbHRhKHNjcm9sbE9mZnNldHMsIFthY3RpdmVOb2RlUmVjdF0pO1xuICBjb25zdCBzY3JvbGxBZGp1c3RlZFRyYW5zbGF0ZSA9IGFkZChtb2RpZmllZFRyYW5zbGF0ZSwgc2Nyb2xsQWRqdXN0bWVudCk7XG4gIGNvbnN0IGNvbGxpc2lvblJlY3QgPSBkcmFnZ2luZ05vZGVSZWN0ID8gZ2V0QWRqdXN0ZWRSZWN0KGRyYWdnaW5nTm9kZVJlY3QsIG1vZGlmaWVkVHJhbnNsYXRlKSA6IG51bGw7XG4gIGNvbnN0IGNvbGxpc2lvbnMgPSBhY3RpdmUgJiYgY29sbGlzaW9uUmVjdCA/IGNvbGxpc2lvbkRldGVjdGlvbih7XG4gICAgYWN0aXZlLFxuICAgIGNvbGxpc2lvblJlY3QsXG4gICAgZHJvcHBhYmxlUmVjdHMsXG4gICAgZHJvcHBhYmxlQ29udGFpbmVyczogZW5hYmxlZERyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgcG9pbnRlckNvb3JkaW5hdGVzXG4gIH0pIDogbnVsbDtcbiAgY29uc3Qgb3ZlcklkID0gZ2V0Rmlyc3RDb2xsaXNpb24oY29sbGlzaW9ucywgJ2lkJyk7XG4gIGNvbnN0IFtvdmVyLCBzZXRPdmVyXSA9IHVzZVN0YXRlKG51bGwpOyAvLyBXaGVuIHRoZXJlIGlzIG5vIGRyYWcgb3ZlcmxheSB1c2VkLCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoZVxuICAvLyB3aW5kb3cgc2Nyb2xsIGRlbHRhXG5cbiAgY29uc3QgYXBwbGllZFRyYW5zbGF0ZSA9IHVzZXNEcmFnT3ZlcmxheSA/IG1vZGlmaWVkVHJhbnNsYXRlIDogYWRkKG1vZGlmaWVkVHJhbnNsYXRlLCBhY3RpdmVOb2RlU2Nyb2xsRGVsdGEpO1xuICBjb25zdCB0cmFuc2Zvcm0gPSBhZGp1c3RTY2FsZShhcHBsaWVkVHJhbnNsYXRlLCAoX292ZXIkcmVjdCA9IG92ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG92ZXIucmVjdCkgIT0gbnVsbCA/IF9vdmVyJHJlY3QgOiBudWxsLCBhY3RpdmVOb2RlUmVjdCk7XG4gIGNvbnN0IGFjdGl2ZVNlbnNvclJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgaW5zdGFudGlhdGVTZW5zb3IgPSB1c2VDYWxsYmFjaygoZXZlbnQsIF9yZWYyKSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHNlbnNvcjogU2Vuc29yLFxuICAgICAgb3B0aW9uc1xuICAgIH0gPSBfcmVmMjtcblxuICAgIGlmIChhY3RpdmVSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlTm9kZSA9IGRyYWdnYWJsZU5vZGVzLmdldChhY3RpdmVSZWYuY3VycmVudCk7XG5cbiAgICBpZiAoIWFjdGl2ZU5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmF0b3JFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50O1xuICAgIGNvbnN0IHNlbnNvckluc3RhbmNlID0gbmV3IFNlbnNvcih7XG4gICAgICBhY3RpdmU6IGFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgYWN0aXZlTm9kZSxcbiAgICAgIGV2ZW50OiBhY3RpdmF0b3JFdmVudCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICAvLyBTZW5zb3JzIG5lZWQgdG8gYmUgaW5zdGFudGlhdGVkIHdpdGggcmVmcyBmb3IgYXJndW1lbnRzIHRoYXQgY2hhbmdlIG92ZXIgdGltZVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoZXkgYXJlIGZyb3plbiBpbiB0aW1lIHdpdGggdGhlIHN0YWxlIGFyZ3VtZW50c1xuICAgICAgY29udGV4dDogc2Vuc29yQ29udGV4dCxcblxuICAgICAgb25BYm9ydChpZCkge1xuICAgICAgICBjb25zdCBkcmFnZ2FibGVOb2RlID0gZHJhZ2dhYmxlTm9kZXMuZ2V0KGlkKTtcblxuICAgICAgICBpZiAoIWRyYWdnYWJsZU5vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25EcmFnQWJvcnRcbiAgICAgICAgfSA9IGxhdGVzdFByb3BzLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgIGlkXG4gICAgICAgIH07XG4gICAgICAgIG9uRHJhZ0Fib3J0ID09IG51bGwgPyB2b2lkIDAgOiBvbkRyYWdBYm9ydChldmVudCk7XG4gICAgICAgIGRpc3BhdGNoTW9uaXRvckV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnb25EcmFnQWJvcnQnLFxuICAgICAgICAgIGV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgb25QZW5kaW5nKGlkLCBjb25zdHJhaW50LCBpbml0aWFsQ29vcmRpbmF0ZXMsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBkcmFnZ2FibGVOb2RlID0gZHJhZ2dhYmxlTm9kZXMuZ2V0KGlkKTtcblxuICAgICAgICBpZiAoIWRyYWdnYWJsZU5vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25EcmFnUGVuZGluZ1xuICAgICAgICB9ID0gbGF0ZXN0UHJvcHMuY3VycmVudDtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgICBpbml0aWFsQ29vcmRpbmF0ZXMsXG4gICAgICAgICAgb2Zmc2V0XG4gICAgICAgIH07XG4gICAgICAgIG9uRHJhZ1BlbmRpbmcgPT0gbnVsbCA/IHZvaWQgMCA6IG9uRHJhZ1BlbmRpbmcoZXZlbnQpO1xuICAgICAgICBkaXNwYXRjaE1vbml0b3JFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ29uRHJhZ1BlbmRpbmcnLFxuICAgICAgICAgIGV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgb25TdGFydChpbml0aWFsQ29vcmRpbmF0ZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBhY3RpdmVSZWYuY3VycmVudDtcblxuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyYWdnYWJsZU5vZGUgPSBkcmFnZ2FibGVOb2Rlcy5nZXQoaWQpO1xuXG4gICAgICAgIGlmICghZHJhZ2dhYmxlTm9kZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBvbkRyYWdTdGFydFxuICAgICAgICB9ID0gbGF0ZXN0UHJvcHMuY3VycmVudDtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgICAgICAgYWN0aXZlOiB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGRhdGE6IGRyYWdnYWJsZU5vZGUuZGF0YSxcbiAgICAgICAgICAgIHJlY3Q6IGFjdGl2ZVJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcygoKSA9PiB7XG4gICAgICAgICAgb25EcmFnU3RhcnQgPT0gbnVsbCA/IHZvaWQgMCA6IG9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgICAgICBzZXRTdGF0dXMoU3RhdHVzLkluaXRpYWxpemluZyk7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogQWN0aW9uLkRyYWdTdGFydCxcbiAgICAgICAgICAgIGluaXRpYWxDb29yZGluYXRlcyxcbiAgICAgICAgICAgIGFjdGl2ZTogaWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkaXNwYXRjaE1vbml0b3JFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnb25EcmFnU3RhcnQnLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzZXRBY3RpdmVTZW5zb3IoYWN0aXZlU2Vuc29yUmVmLmN1cnJlbnQpO1xuICAgICAgICAgIHNldEFjdGl2YXRvckV2ZW50KGFjdGl2YXRvckV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuXG4gICAgICBvbk1vdmUoY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IEFjdGlvbi5EcmFnTW92ZSxcbiAgICAgICAgICBjb29yZGluYXRlc1xuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIG9uRW5kOiBjcmVhdGVIYW5kbGVyKEFjdGlvbi5EcmFnRW5kKSxcbiAgICAgIG9uQ2FuY2VsOiBjcmVhdGVIYW5kbGVyKEFjdGlvbi5EcmFnQ2FuY2VsKVxuICAgIH0pO1xuICAgIGFjdGl2ZVNlbnNvclJlZi5jdXJyZW50ID0gc2Vuc29ySW5zdGFuY2U7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVIYW5kbGVyKHR5cGUpIHtcbiAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgYWN0aXZlLFxuICAgICAgICAgIGNvbGxpc2lvbnMsXG4gICAgICAgICAgb3ZlcixcbiAgICAgICAgICBzY3JvbGxBZGp1c3RlZFRyYW5zbGF0ZVxuICAgICAgICB9ID0gc2Vuc29yQ29udGV4dC5jdXJyZW50O1xuICAgICAgICBsZXQgZXZlbnQgPSBudWxsO1xuXG4gICAgICAgIGlmIChhY3RpdmUgJiYgc2Nyb2xsQWRqdXN0ZWRUcmFuc2xhdGUpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjYW5jZWxEcm9wXG4gICAgICAgICAgfSA9IGxhdGVzdFByb3BzLmN1cnJlbnQ7XG4gICAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgICBhY3RpdmF0b3JFdmVudCxcbiAgICAgICAgICAgIGFjdGl2ZTogYWN0aXZlLFxuICAgICAgICAgICAgY29sbGlzaW9ucyxcbiAgICAgICAgICAgIGRlbHRhOiBzY3JvbGxBZGp1c3RlZFRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG92ZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT09IEFjdGlvbi5EcmFnRW5kICYmIHR5cGVvZiBjYW5jZWxEcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRDYW5jZWwgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoY2FuY2VsRHJvcChldmVudCkpO1xuXG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2FuY2VsKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSBBY3Rpb24uRHJhZ0NhbmNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhY3RpdmVSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKCgpID0+IHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2V0U3RhdHVzKFN0YXR1cy5VbmluaXRpYWxpemVkKTtcbiAgICAgICAgICBzZXRPdmVyKG51bGwpO1xuICAgICAgICAgIHNldEFjdGl2ZVNlbnNvcihudWxsKTtcbiAgICAgICAgICBzZXRBY3RpdmF0b3JFdmVudChudWxsKTtcbiAgICAgICAgICBhY3RpdmVTZW5zb3JSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gdHlwZSA9PT0gQWN0aW9uLkRyYWdFbmQgPyAnb25EcmFnRW5kJyA6ICdvbkRyYWdDYW5jZWwnO1xuXG4gICAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gbGF0ZXN0UHJvcHMuY3VycmVudFtldmVudE5hbWVdO1xuICAgICAgICAgICAgaGFuZGxlciA9PSBudWxsID8gdm9pZCAwIDogaGFuZGxlcihldmVudCk7XG4gICAgICAgICAgICBkaXNwYXRjaE1vbml0b3JFdmVudCh7XG4gICAgICAgICAgICAgIHR5cGU6IGV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBbZHJhZ2dhYmxlTm9kZXNdKTtcbiAgY29uc3QgYmluZEFjdGl2YXRvclRvU2Vuc29ySW5zdGFudGlhdG9yID0gdXNlQ2FsbGJhY2soKGhhbmRsZXIsIHNlbnNvcikgPT4ge1xuICAgIHJldHVybiAoZXZlbnQsIGFjdGl2ZSkgPT4ge1xuICAgICAgY29uc3QgbmF0aXZlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICAgIGNvbnN0IGFjdGl2ZURyYWdnYWJsZU5vZGUgPSBkcmFnZ2FibGVOb2Rlcy5nZXQoYWN0aXZlKTtcblxuICAgICAgaWYgKCAvLyBBbm90aGVyIHNlbnNvciBpcyBhbHJlYWR5IGluc3RhbnRpYXRpbmdcbiAgICAgIGFjdGl2ZVJlZi5jdXJyZW50ICE9PSBudWxsIHx8IC8vIE5vIGFjdGl2ZSBkcmFnZ2FibGVcbiAgICAgICFhY3RpdmVEcmFnZ2FibGVOb2RlIHx8IC8vIEV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gY2FwdHVyZWRcbiAgICAgIG5hdGl2ZUV2ZW50LmRuZEtpdCB8fCBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aXZhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGFjdGl2ZTogYWN0aXZlRHJhZ2dhYmxlTm9kZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNob3VsZEFjdGl2YXRlID0gaGFuZGxlcihldmVudCwgc2Vuc29yLm9wdGlvbnMsIGFjdGl2YXRpb25Db250ZXh0KTtcblxuICAgICAgaWYgKHNob3VsZEFjdGl2YXRlID09PSB0cnVlKSB7XG4gICAgICAgIG5hdGl2ZUV2ZW50LmRuZEtpdCA9IHtcbiAgICAgICAgICBjYXB0dXJlZEJ5OiBzZW5zb3Iuc2Vuc29yXG4gICAgICAgIH07XG4gICAgICAgIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlO1xuICAgICAgICBpbnN0YW50aWF0ZVNlbnNvcihldmVudCwgc2Vuc29yKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbZHJhZ2dhYmxlTm9kZXMsIGluc3RhbnRpYXRlU2Vuc29yXSk7XG4gIGNvbnN0IGFjdGl2YXRvcnMgPSB1c2VDb21iaW5lQWN0aXZhdG9ycyhzZW5zb3JzLCBiaW5kQWN0aXZhdG9yVG9TZW5zb3JJbnN0YW50aWF0b3IpO1xuICB1c2VTZW5zb3JTZXR1cChzZW5zb3JzKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFjdGl2ZU5vZGVSZWN0ICYmIHN0YXR1cyA9PT0gU3RhdHVzLkluaXRpYWxpemluZykge1xuICAgICAgc2V0U3RhdHVzKFN0YXR1cy5Jbml0aWFsaXplZCk7XG4gICAgfVxuICB9LCBbYWN0aXZlTm9kZVJlY3QsIHN0YXR1c10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uRHJhZ01vdmVcbiAgICB9ID0gbGF0ZXN0UHJvcHMuY3VycmVudDtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmUsXG4gICAgICBhY3RpdmF0b3JFdmVudCxcbiAgICAgIGNvbGxpc2lvbnMsXG4gICAgICBvdmVyXG4gICAgfSA9IHNlbnNvckNvbnRleHQuY3VycmVudDtcblxuICAgIGlmICghYWN0aXZlIHx8ICFhY3RpdmF0b3JFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgYWN0aXZlLFxuICAgICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgICBjb2xsaXNpb25zLFxuICAgICAgZGVsdGE6IHtcbiAgICAgICAgeDogc2Nyb2xsQWRqdXN0ZWRUcmFuc2xhdGUueCxcbiAgICAgICAgeTogc2Nyb2xsQWRqdXN0ZWRUcmFuc2xhdGUueVxuICAgICAgfSxcbiAgICAgIG92ZXJcbiAgICB9O1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKCgpID0+IHtcbiAgICAgIG9uRHJhZ01vdmUgPT0gbnVsbCA/IHZvaWQgMCA6IG9uRHJhZ01vdmUoZXZlbnQpO1xuICAgICAgZGlzcGF0Y2hNb25pdG9yRXZlbnQoe1xuICAgICAgICB0eXBlOiAnb25EcmFnTW92ZScsXG4gICAgICAgIGV2ZW50XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICBbc2Nyb2xsQWRqdXN0ZWRUcmFuc2xhdGUueCwgc2Nyb2xsQWRqdXN0ZWRUcmFuc2xhdGUueV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGFjdGl2YXRvckV2ZW50LFxuICAgICAgY29sbGlzaW9ucyxcbiAgICAgIGRyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgICBzY3JvbGxBZGp1c3RlZFRyYW5zbGF0ZVxuICAgIH0gPSBzZW5zb3JDb250ZXh0LmN1cnJlbnQ7XG5cbiAgICBpZiAoIWFjdGl2ZSB8fCBhY3RpdmVSZWYuY3VycmVudCA9PSBudWxsIHx8ICFhY3RpdmF0b3JFdmVudCB8fCAhc2Nyb2xsQWRqdXN0ZWRUcmFuc2xhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBvbkRyYWdPdmVyXG4gICAgfSA9IGxhdGVzdFByb3BzLmN1cnJlbnQ7XG4gICAgY29uc3Qgb3ZlckNvbnRhaW5lciA9IGRyb3BwYWJsZUNvbnRhaW5lcnMuZ2V0KG92ZXJJZCk7XG4gICAgY29uc3Qgb3ZlciA9IG92ZXJDb250YWluZXIgJiYgb3ZlckNvbnRhaW5lci5yZWN0LmN1cnJlbnQgPyB7XG4gICAgICBpZDogb3ZlckNvbnRhaW5lci5pZCxcbiAgICAgIHJlY3Q6IG92ZXJDb250YWluZXIucmVjdC5jdXJyZW50LFxuICAgICAgZGF0YTogb3ZlckNvbnRhaW5lci5kYXRhLFxuICAgICAgZGlzYWJsZWQ6IG92ZXJDb250YWluZXIuZGlzYWJsZWRcbiAgICB9IDogbnVsbDtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGFjdGl2YXRvckV2ZW50LFxuICAgICAgY29sbGlzaW9ucyxcbiAgICAgIGRlbHRhOiB7XG4gICAgICAgIHg6IHNjcm9sbEFkanVzdGVkVHJhbnNsYXRlLngsXG4gICAgICAgIHk6IHNjcm9sbEFkanVzdGVkVHJhbnNsYXRlLnlcbiAgICAgIH0sXG4gICAgICBvdmVyXG4gICAgfTtcbiAgICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcygoKSA9PiB7XG4gICAgICBzZXRPdmVyKG92ZXIpO1xuICAgICAgb25EcmFnT3ZlciA9PSBudWxsID8gdm9pZCAwIDogb25EcmFnT3ZlcihldmVudCk7XG4gICAgICBkaXNwYXRjaE1vbml0b3JFdmVudCh7XG4gICAgICAgIHR5cGU6ICdvbkRyYWdPdmVyJyxcbiAgICAgICAgZXZlbnRcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtvdmVySWRdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgc2Vuc29yQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgICBhY3RpdmUsXG4gICAgICBhY3RpdmVOb2RlLFxuICAgICAgY29sbGlzaW9uUmVjdCxcbiAgICAgIGNvbGxpc2lvbnMsXG4gICAgICBkcm9wcGFibGVSZWN0cyxcbiAgICAgIGRyYWdnYWJsZU5vZGVzLFxuICAgICAgZHJhZ2dpbmdOb2RlLFxuICAgICAgZHJhZ2dpbmdOb2RlUmVjdCxcbiAgICAgIGRyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgICBvdmVyLFxuICAgICAgc2Nyb2xsYWJsZUFuY2VzdG9ycyxcbiAgICAgIHNjcm9sbEFkanVzdGVkVHJhbnNsYXRlXG4gICAgfTtcbiAgICBhY3RpdmVSZWN0cy5jdXJyZW50ID0ge1xuICAgICAgaW5pdGlhbDogZHJhZ2dpbmdOb2RlUmVjdCxcbiAgICAgIHRyYW5zbGF0ZWQ6IGNvbGxpc2lvblJlY3RcbiAgICB9O1xuICB9LCBbYWN0aXZlLCBhY3RpdmVOb2RlLCBjb2xsaXNpb25zLCBjb2xsaXNpb25SZWN0LCBkcmFnZ2FibGVOb2RlcywgZHJhZ2dpbmdOb2RlLCBkcmFnZ2luZ05vZGVSZWN0LCBkcm9wcGFibGVSZWN0cywgZHJvcHBhYmxlQ29udGFpbmVycywgb3Zlciwgc2Nyb2xsYWJsZUFuY2VzdG9ycywgc2Nyb2xsQWRqdXN0ZWRUcmFuc2xhdGVdKTtcbiAgdXNlQXV0b1Njcm9sbGVyKHsgLi4uYXV0b1Njcm9sbE9wdGlvbnMsXG4gICAgZGVsdGE6IHRyYW5zbGF0ZSxcbiAgICBkcmFnZ2luZ1JlY3Q6IGNvbGxpc2lvblJlY3QsXG4gICAgcG9pbnRlckNvb3JkaW5hdGVzLFxuICAgIHNjcm9sbGFibGVBbmNlc3RvcnMsXG4gICAgc2Nyb2xsYWJsZUFuY2VzdG9yUmVjdHNcbiAgfSk7XG4gIGNvbnN0IHB1YmxpY0NvbnRleHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgYWN0aXZlLFxuICAgICAgYWN0aXZlTm9kZSxcbiAgICAgIGFjdGl2ZU5vZGVSZWN0LFxuICAgICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgICBjb2xsaXNpb25zLFxuICAgICAgY29udGFpbmVyTm9kZVJlY3QsXG4gICAgICBkcmFnT3ZlcmxheSxcbiAgICAgIGRyYWdnYWJsZU5vZGVzLFxuICAgICAgZHJvcHBhYmxlQ29udGFpbmVycyxcbiAgICAgIGRyb3BwYWJsZVJlY3RzLFxuICAgICAgb3ZlcixcbiAgICAgIG1lYXN1cmVEcm9wcGFibGVDb250YWluZXJzLFxuICAgICAgc2Nyb2xsYWJsZUFuY2VzdG9ycyxcbiAgICAgIHNjcm9sbGFibGVBbmNlc3RvclJlY3RzLFxuICAgICAgbWVhc3VyaW5nQ29uZmlndXJhdGlvbixcbiAgICAgIG1lYXN1cmluZ1NjaGVkdWxlZCxcbiAgICAgIHdpbmRvd1JlY3RcbiAgICB9O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9LCBbYWN0aXZlLCBhY3RpdmVOb2RlLCBhY3RpdmVOb2RlUmVjdCwgYWN0aXZhdG9yRXZlbnQsIGNvbGxpc2lvbnMsIGNvbnRhaW5lck5vZGVSZWN0LCBkcmFnT3ZlcmxheSwgZHJhZ2dhYmxlTm9kZXMsIGRyb3BwYWJsZUNvbnRhaW5lcnMsIGRyb3BwYWJsZVJlY3RzLCBvdmVyLCBtZWFzdXJlRHJvcHBhYmxlQ29udGFpbmVycywgc2Nyb2xsYWJsZUFuY2VzdG9ycywgc2Nyb2xsYWJsZUFuY2VzdG9yUmVjdHMsIG1lYXN1cmluZ0NvbmZpZ3VyYXRpb24sIG1lYXN1cmluZ1NjaGVkdWxlZCwgd2luZG93UmVjdF0pO1xuICBjb25zdCBpbnRlcm5hbENvbnRleHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgICBhY3RpdmF0b3JzLFxuICAgICAgYWN0aXZlLFxuICAgICAgYWN0aXZlTm9kZVJlY3QsXG4gICAgICBhcmlhRGVzY3JpYmVkQnlJZDoge1xuICAgICAgICBkcmFnZ2FibGU6IGRyYWdnYWJsZURlc2NyaWJlZEJ5SWRcbiAgICAgIH0sXG4gICAgICBkaXNwYXRjaCxcbiAgICAgIGRyYWdnYWJsZU5vZGVzLFxuICAgICAgb3ZlcixcbiAgICAgIG1lYXN1cmVEcm9wcGFibGVDb250YWluZXJzXG4gICAgfTtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfSwgW2FjdGl2YXRvckV2ZW50LCBhY3RpdmF0b3JzLCBhY3RpdmUsIGFjdGl2ZU5vZGVSZWN0LCBkaXNwYXRjaCwgZHJhZ2dhYmxlRGVzY3JpYmVkQnlJZCwgZHJhZ2dhYmxlTm9kZXMsIG92ZXIsIG1lYXN1cmVEcm9wcGFibGVDb250YWluZXJzXSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KERuZE1vbml0b3JDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHJlZ2lzdGVyTW9uaXRvckxpc3RlbmVyXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGludGVybmFsQ29udGV4dFxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFB1YmxpY0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcHVibGljQ29udGV4dFxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KEFjdGl2ZURyYWdnYWJsZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdHJhbnNmb3JtXG4gIH0sIGNoaWxkcmVuKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVzdG9yZUZvY3VzLCB7XG4gICAgZGlzYWJsZWQ6IChhY2Nlc3NpYmlsaXR5ID09IG51bGwgPyB2b2lkIDAgOiBhY2Nlc3NpYmlsaXR5LnJlc3RvcmVGb2N1cykgPT09IGZhbHNlXG4gIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChBY2Nlc3NpYmlsaXR5LCB7IC4uLmFjY2Vzc2liaWxpdHksXG4gICAgaGlkZGVuVGV4dERlc2NyaWJlZEJ5SWQ6IGRyYWdnYWJsZURlc2NyaWJlZEJ5SWRcbiAgfSkpO1xuXG4gIGZ1bmN0aW9uIGdldEF1dG9TY3JvbGxlck9wdGlvbnMoKSB7XG4gICAgY29uc3QgYWN0aXZlU2Vuc29yRGlzYWJsZXNBdXRvc2Nyb2xsID0gKGFjdGl2ZVNlbnNvciA9PSBudWxsID8gdm9pZCAwIDogYWN0aXZlU2Vuc29yLmF1dG9TY3JvbGxFbmFibGVkKSA9PT0gZmFsc2U7XG4gICAgY29uc3QgYXV0b1Njcm9sbEdsb2JhbGx5RGlzYWJsZWQgPSB0eXBlb2YgYXV0b1Njcm9sbCA9PT0gJ29iamVjdCcgPyBhdXRvU2Nyb2xsLmVuYWJsZWQgPT09IGZhbHNlIDogYXV0b1Njcm9sbCA9PT0gZmFsc2U7XG4gICAgY29uc3QgZW5hYmxlZCA9IGlzSW5pdGlhbGl6ZWQgJiYgIWFjdGl2ZVNlbnNvckRpc2FibGVzQXV0b3Njcm9sbCAmJiAhYXV0b1Njcm9sbEdsb2JhbGx5RGlzYWJsZWQ7XG5cbiAgICBpZiAodHlwZW9mIGF1dG9TY3JvbGwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4geyAuLi5hdXRvU2Nyb2xsLFxuICAgICAgICBlbmFibGVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbmFibGVkXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IE51bGxDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQobnVsbCk7XG5jb25zdCBkZWZhdWx0Um9sZSA9ICdidXR0b24nO1xuY29uc3QgSURfUFJFRklYID0gJ0RyYWdnYWJsZSc7XG5mdW5jdGlvbiB1c2VEcmFnZ2FibGUoX3JlZikge1xuICBsZXQge1xuICAgIGlkLFxuICAgIGRhdGEsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBhdHRyaWJ1dGVzXG4gIH0gPSBfcmVmO1xuICBjb25zdCBrZXkgPSB1c2VVbmlxdWVJZChJRF9QUkVGSVgpO1xuICBjb25zdCB7XG4gICAgYWN0aXZhdG9ycyxcbiAgICBhY3RpdmF0b3JFdmVudCxcbiAgICBhY3RpdmUsXG4gICAgYWN0aXZlTm9kZVJlY3QsXG4gICAgYXJpYURlc2NyaWJlZEJ5SWQsXG4gICAgZHJhZ2dhYmxlTm9kZXMsXG4gICAgb3ZlclxuICB9ID0gdXNlQ29udGV4dChJbnRlcm5hbENvbnRleHQpO1xuICBjb25zdCB7XG4gICAgcm9sZSA9IGRlZmF1bHRSb2xlLFxuICAgIHJvbGVEZXNjcmlwdGlvbiA9ICdkcmFnZ2FibGUnLFxuICAgIHRhYkluZGV4ID0gMFxuICB9ID0gYXR0cmlidXRlcyAhPSBudWxsID8gYXR0cmlidXRlcyA6IHt9O1xuICBjb25zdCBpc0RyYWdnaW5nID0gKGFjdGl2ZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aXZlLmlkKSA9PT0gaWQ7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IHVzZUNvbnRleHQoaXNEcmFnZ2luZyA/IEFjdGl2ZURyYWdnYWJsZUNvbnRleHQgOiBOdWxsQ29udGV4dCk7XG4gIGNvbnN0IFtub2RlLCBzZXROb2RlUmVmXSA9IHVzZU5vZGVSZWYoKTtcbiAgY29uc3QgW2FjdGl2YXRvck5vZGUsIHNldEFjdGl2YXRvck5vZGVSZWZdID0gdXNlTm9kZVJlZigpO1xuICBjb25zdCBsaXN0ZW5lcnMgPSB1c2VTeW50aGV0aWNMaXN0ZW5lcnMoYWN0aXZhdG9ycywgaWQpO1xuICBjb25zdCBkYXRhUmVmID0gdXNlTGF0ZXN0VmFsdWUoZGF0YSk7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGRyYWdnYWJsZU5vZGVzLnNldChpZCwge1xuICAgICAgaWQsXG4gICAgICBrZXksXG4gICAgICBub2RlLFxuICAgICAgYWN0aXZhdG9yTm9kZSxcbiAgICAgIGRhdGE6IGRhdGFSZWZcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGRyYWdnYWJsZU5vZGVzLmdldChpZCk7XG5cbiAgICAgIGlmIChub2RlICYmIG5vZGUua2V5ID09PSBrZXkpIHtcbiAgICAgICAgZHJhZ2dhYmxlTm9kZXMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtkcmFnZ2FibGVOb2RlcywgaWRdKTtcbiAgY29uc3QgbWVtb2l6ZWRBdHRyaWJ1dGVzID0gdXNlTWVtbygoKSA9PiAoe1xuICAgIHJvbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgJ2FyaWEtZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAnYXJpYS1wcmVzc2VkJzogaXNEcmFnZ2luZyAmJiByb2xlID09PSBkZWZhdWx0Um9sZSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJzogcm9sZURlc2NyaXB0aW9uLFxuICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZEJ5SWQuZHJhZ2dhYmxlXG4gIH0pLCBbZGlzYWJsZWQsIHJvbGUsIHRhYkluZGV4LCBpc0RyYWdnaW5nLCByb2xlRGVzY3JpcHRpb24sIGFyaWFEZXNjcmliZWRCeUlkLmRyYWdnYWJsZV0pO1xuICByZXR1cm4ge1xuICAgIGFjdGl2ZSxcbiAgICBhY3RpdmF0b3JFdmVudCxcbiAgICBhY3RpdmVOb2RlUmVjdCxcbiAgICBhdHRyaWJ1dGVzOiBtZW1vaXplZEF0dHJpYnV0ZXMsXG4gICAgaXNEcmFnZ2luZyxcbiAgICBsaXN0ZW5lcnM6IGRpc2FibGVkID8gdW5kZWZpbmVkIDogbGlzdGVuZXJzLFxuICAgIG5vZGUsXG4gICAgb3ZlcixcbiAgICBzZXROb2RlUmVmLFxuICAgIHNldEFjdGl2YXRvck5vZGVSZWYsXG4gICAgdHJhbnNmb3JtXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZURuZENvbnRleHQoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KFB1YmxpY0NvbnRleHQpO1xufVxuXG5jb25zdCBJRF9QUkVGSVgkMSA9ICdEcm9wcGFibGUnO1xuY29uc3QgZGVmYXVsdFJlc2l6ZU9ic2VydmVyQ29uZmlnID0ge1xuICB0aW1lb3V0OiAyNVxufTtcbmZ1bmN0aW9uIHVzZURyb3BwYWJsZShfcmVmKSB7XG4gIGxldCB7XG4gICAgZGF0YSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIGlkLFxuICAgIHJlc2l6ZU9ic2VydmVyQ29uZmlnXG4gIH0gPSBfcmVmO1xuICBjb25zdCBrZXkgPSB1c2VVbmlxdWVJZChJRF9QUkVGSVgkMSk7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmUsXG4gICAgZGlzcGF0Y2gsXG4gICAgb3ZlcixcbiAgICBtZWFzdXJlRHJvcHBhYmxlQ29udGFpbmVyc1xuICB9ID0gdXNlQ29udGV4dChJbnRlcm5hbENvbnRleHQpO1xuICBjb25zdCBwcmV2aW91cyA9IHVzZVJlZih7XG4gICAgZGlzYWJsZWRcbiAgfSk7XG4gIGNvbnN0IHJlc2l6ZU9ic2VydmVyQ29ubmVjdGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgcmVjdCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgY2FsbGJhY2tJZCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkOiByZXNpemVPYnNlcnZlckRpc2FibGVkLFxuICAgIHVwZGF0ZU1lYXN1cmVtZW50c0ZvcixcbiAgICB0aW1lb3V0OiByZXNpemVPYnNlcnZlclRpbWVvdXRcbiAgfSA9IHsgLi4uZGVmYXVsdFJlc2l6ZU9ic2VydmVyQ29uZmlnLFxuICAgIC4uLnJlc2l6ZU9ic2VydmVyQ29uZmlnXG4gIH07XG4gIGNvbnN0IGlkcyA9IHVzZUxhdGVzdFZhbHVlKHVwZGF0ZU1lYXN1cmVtZW50c0ZvciAhPSBudWxsID8gdXBkYXRlTWVhc3VyZW1lbnRzRm9yIDogaWQpO1xuICBjb25zdCBoYW5kbGVSZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFyZXNpemVPYnNlcnZlckNvbm5lY3RlZC5jdXJyZW50KSB7XG4gICAgICAvLyBSZXNpemVPYnNlcnZlciBpbnZva2VzIHRoZSBgaGFuZGxlUmVzaXplYCBjYWxsYmFjayBhcyBzb29uIGFzIGBvYnNlcnZlYCBpcyBjYWxsZWQsXG4gICAgICAvLyBhc3N1bWluZyB0aGUgZWxlbWVudCBpcyByZW5kZXJlZCBhbmQgZGlzcGxheWVkLlxuICAgICAgcmVzaXplT2JzZXJ2ZXJDb25uZWN0ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrSWQuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQoY2FsbGJhY2tJZC5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBjYWxsYmFja0lkLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIG1lYXN1cmVEcm9wcGFibGVDb250YWluZXJzKEFycmF5LmlzQXJyYXkoaWRzLmN1cnJlbnQpID8gaWRzLmN1cnJlbnQgOiBbaWRzLmN1cnJlbnRdKTtcbiAgICAgIGNhbGxiYWNrSWQuY3VycmVudCA9IG51bGw7XG4gICAgfSwgcmVzaXplT2JzZXJ2ZXJUaW1lb3V0KTtcbiAgfSwgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtyZXNpemVPYnNlcnZlclRpbWVvdXRdKTtcbiAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSB1c2VSZXNpemVPYnNlcnZlcih7XG4gICAgY2FsbGJhY2s6IGhhbmRsZVJlc2l6ZSxcbiAgICBkaXNhYmxlZDogcmVzaXplT2JzZXJ2ZXJEaXNhYmxlZCB8fCAhYWN0aXZlXG4gIH0pO1xuICBjb25zdCBoYW5kbGVOb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG5ld0VsZW1lbnQsIHByZXZpb3VzRWxlbWVudCkgPT4ge1xuICAgIGlmICghcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNFbGVtZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci51bm9ic2VydmUocHJldmlvdXNFbGVtZW50KTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyQ29ubmVjdGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV3RWxlbWVudCkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShuZXdFbGVtZW50KTtcbiAgICB9XG4gIH0sIFtyZXNpemVPYnNlcnZlcl0pO1xuICBjb25zdCBbbm9kZVJlZiwgc2V0Tm9kZVJlZl0gPSB1c2VOb2RlUmVmKGhhbmRsZU5vZGVDaGFuZ2UpO1xuICBjb25zdCBkYXRhUmVmID0gdXNlTGF0ZXN0VmFsdWUoZGF0YSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFyZXNpemVPYnNlcnZlciB8fCAhbm9kZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHJlc2l6ZU9ic2VydmVyQ29ubmVjdGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKG5vZGVSZWYuY3VycmVudCk7XG4gIH0sIFtub2RlUmVmLCByZXNpemVPYnNlcnZlcl0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFjdGlvbi5SZWdpc3RlckRyb3BwYWJsZSxcbiAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGtleSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIG5vZGU6IG5vZGVSZWYsXG4gICAgICAgIHJlY3QsXG4gICAgICAgIGRhdGE6IGRhdGFSZWZcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uLlVucmVnaXN0ZXJEcm9wcGFibGUsXG4gICAgICBrZXksXG4gICAgICBpZFxuICAgIH0pO1xuICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFtpZF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCAhPT0gcHJldmlvdXMuY3VycmVudC5kaXNhYmxlZCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBBY3Rpb24uU2V0RHJvcHBhYmxlRGlzYWJsZWQsXG4gICAgICAgIGlkLFxuICAgICAgICBrZXksXG4gICAgICAgIGRpc2FibGVkXG4gICAgICB9KTtcbiAgICAgIHByZXZpb3VzLmN1cnJlbnQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9XG4gIH0sIFtpZCwga2V5LCBkaXNhYmxlZCwgZGlzcGF0Y2hdKTtcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmUsXG4gICAgcmVjdCxcbiAgICBpc092ZXI6IChvdmVyID09IG51bGwgPyB2b2lkIDAgOiBvdmVyLmlkKSA9PT0gaWQsXG4gICAgbm9kZTogbm9kZVJlZixcbiAgICBvdmVyLFxuICAgIHNldE5vZGVSZWZcbiAgfTtcbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uTWFuYWdlcihfcmVmKSB7XG4gIGxldCB7XG4gICAgYW5pbWF0aW9uLFxuICAgIGNoaWxkcmVuXG4gIH0gPSBfcmVmO1xuICBjb25zdCBbY2xvbmVkQ2hpbGRyZW4sIHNldENsb25lZENoaWxkcmVuXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZWxlbWVudCwgc2V0RWxlbWVudF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgcHJldmlvdXNDaGlsZHJlbiA9IHVzZVByZXZpb3VzKGNoaWxkcmVuKTtcblxuICBpZiAoIWNoaWxkcmVuICYmICFjbG9uZWRDaGlsZHJlbiAmJiBwcmV2aW91c0NoaWxkcmVuKSB7XG4gICAgc2V0Q2xvbmVkQ2hpbGRyZW4ocHJldmlvdXNDaGlsZHJlbik7XG4gIH1cblxuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBjbG9uZWRDaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2xvbmVkQ2hpbGRyZW4ua2V5O1xuICAgIGNvbnN0IGlkID0gY2xvbmVkQ2hpbGRyZW4gPT0gbnVsbCA/IHZvaWQgMCA6IGNsb25lZENoaWxkcmVuLnByb3BzLmlkO1xuXG4gICAgaWYgKGtleSA9PSBudWxsIHx8IGlkID09IG51bGwpIHtcbiAgICAgIHNldENsb25lZENoaWxkcmVuKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFByb21pc2UucmVzb2x2ZShhbmltYXRpb24oaWQsIGVsZW1lbnQpKS50aGVuKCgpID0+IHtcbiAgICAgIHNldENsb25lZENoaWxkcmVuKG51bGwpO1xuICAgIH0pO1xuICB9LCBbYW5pbWF0aW9uLCBjbG9uZWRDaGlsZHJlbiwgZWxlbWVudF0pO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4sIGNsb25lZENoaWxkcmVuID8gY2xvbmVFbGVtZW50KGNsb25lZENoaWxkcmVuLCB7XG4gICAgcmVmOiBzZXRFbGVtZW50XG4gIH0pIDogbnVsbCk7XG59XG5cbmNvbnN0IGRlZmF1bHRUcmFuc2Zvcm0gPSB7XG4gIHg6IDAsXG4gIHk6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuZnVuY3Rpb24gTnVsbGlmaWVkQ29udGV4dFByb3ZpZGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBjaGlsZHJlblxuICB9ID0gX3JlZjtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJuYWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRJbnRlcm5hbENvbnRleHRcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChBY3RpdmVEcmFnZ2FibGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRUcmFuc2Zvcm1cbiAgfSwgY2hpbGRyZW4pKTtcbn1cblxuY29uc3QgYmFzZVN0eWxlcyA9IHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHRvdWNoQWN0aW9uOiAnbm9uZSdcbn07XG5cbmNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uID0gYWN0aXZhdG9yRXZlbnQgPT4ge1xuICBjb25zdCBpc0tleWJvYXJkQWN0aXZhdG9yID0gaXNLZXlib2FyZEV2ZW50KGFjdGl2YXRvckV2ZW50KTtcbiAgcmV0dXJuIGlzS2V5Ym9hcmRBY3RpdmF0b3IgPyAndHJhbnNmb3JtIDI1MG1zIGVhc2UnIDogdW5kZWZpbmVkO1xufTtcblxuY29uc3QgUG9zaXRpb25lZE92ZXJsYXkgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZigoX3JlZiwgcmVmKSA9PiB7XG4gIGxldCB7XG4gICAgYXMsXG4gICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgYWRqdXN0U2NhbGUsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIHJlY3QsXG4gICAgc3R5bGUsXG4gICAgdHJhbnNmb3JtLFxuICAgIHRyYW5zaXRpb24gPSBkZWZhdWx0VHJhbnNpdGlvblxuICB9ID0gX3JlZjtcblxuICBpZiAoIXJlY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlQWRqdXN0ZWRUcmFuc2Zvcm0gPSBhZGp1c3RTY2FsZSA/IHRyYW5zZm9ybSA6IHsgLi4udHJhbnNmb3JtLFxuICAgIHNjYWxlWDogMSxcbiAgICBzY2FsZVk6IDFcbiAgfTtcbiAgY29uc3Qgc3R5bGVzID0geyAuLi5iYXNlU3R5bGVzLFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHNjYWxlQWRqdXN0ZWRUcmFuc2Zvcm0pLFxuICAgIHRyYW5zZm9ybU9yaWdpbjogYWRqdXN0U2NhbGUgJiYgYWN0aXZhdG9yRXZlbnQgPyBnZXRSZWxhdGl2ZVRyYW5zZm9ybU9yaWdpbihhY3RpdmF0b3JFdmVudCwgcmVjdCkgOiB1bmRlZmluZWQsXG4gICAgdHJhbnNpdGlvbjogdHlwZW9mIHRyYW5zaXRpb24gPT09ICdmdW5jdGlvbicgPyB0cmFuc2l0aW9uKGFjdGl2YXRvckV2ZW50KSA6IHRyYW5zaXRpb24sXG4gICAgLi4uc3R5bGVcbiAgfTtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXMsIHtcbiAgICBjbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlcyxcbiAgICByZWZcbiAgfSwgY2hpbGRyZW4pO1xufSk7XG5cbmNvbnN0IGRlZmF1bHREcm9wQW5pbWF0aW9uU2lkZUVmZmVjdHMgPSBvcHRpb25zID0+IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGFjdGl2ZSxcbiAgICBkcmFnT3ZlcmxheVxuICB9ID0gX3JlZjtcbiAgY29uc3Qgb3JpZ2luYWxTdHlsZXMgPSB7fTtcbiAgY29uc3Qge1xuICAgIHN0eWxlcyxcbiAgICBjbGFzc05hbWVcbiAgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKHN0eWxlcyAhPSBudWxsICYmIHN0eWxlcy5hY3RpdmUpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzdHlsZXMuYWN0aXZlKSkge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG9yaWdpbmFsU3R5bGVzW2tleV0gPSBhY3RpdmUubm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGtleSk7XG4gICAgICBhY3RpdmUubm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzICE9IG51bGwgJiYgc3R5bGVzLmRyYWdPdmVybGF5KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzLmRyYWdPdmVybGF5KSkge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGRyYWdPdmVybGF5Lm5vZGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNsYXNzTmFtZSAhPSBudWxsICYmIGNsYXNzTmFtZS5hY3RpdmUpIHtcbiAgICBhY3RpdmUubm9kZS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZS5hY3RpdmUpO1xuICB9XG5cbiAgaWYgKGNsYXNzTmFtZSAhPSBudWxsICYmIGNsYXNzTmFtZS5kcmFnT3ZlcmxheSkge1xuICAgIGRyYWdPdmVybGF5Lm5vZGUuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUuZHJhZ092ZXJsYXkpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3JpZ2luYWxTdHlsZXMpKSB7XG4gICAgICBhY3RpdmUubm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwgJiYgY2xhc3NOYW1lLmFjdGl2ZSkge1xuICAgICAgYWN0aXZlLm5vZGUuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUuYWN0aXZlKTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBkZWZhdWx0S2V5ZnJhbWVSZXNvbHZlciA9IF9yZWYyID0+IHtcbiAgbGV0IHtcbiAgICB0cmFuc2Zvcm06IHtcbiAgICAgIGluaXRpYWwsXG4gICAgICBmaW5hbFxuICAgIH1cbiAgfSA9IF9yZWYyO1xuICByZXR1cm4gW3tcbiAgICB0cmFuc2Zvcm06IENTUy5UcmFuc2Zvcm0udG9TdHJpbmcoaW5pdGlhbClcbiAgfSwge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyhmaW5hbClcbiAgfV07XG59O1xuXG5jb25zdCBkZWZhdWx0RHJvcEFuaW1hdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2luZzogJ2Vhc2UnLFxuICBrZXlmcmFtZXM6IGRlZmF1bHRLZXlmcmFtZVJlc29sdmVyLFxuICBzaWRlRWZmZWN0czogLyojX19QVVJFX18qL2RlZmF1bHREcm9wQW5pbWF0aW9uU2lkZUVmZmVjdHMoe1xuICAgIHN0eWxlczoge1xuICAgICAgYWN0aXZlOiB7XG4gICAgICAgIG9wYWNpdHk6ICcwJ1xuICAgICAgfVxuICAgIH1cbiAgfSlcbn07XG5mdW5jdGlvbiB1c2VEcm9wQW5pbWF0aW9uKF9yZWYzKSB7XG4gIGxldCB7XG4gICAgY29uZmlnLFxuICAgIGRyYWdnYWJsZU5vZGVzLFxuICAgIGRyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgbWVhc3VyaW5nQ29uZmlndXJhdGlvblxuICB9ID0gX3JlZjM7XG4gIHJldHVybiB1c2VFdmVudCgoaWQsIG5vZGUpID0+IHtcbiAgICBpZiAoY29uZmlnID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRHJhZ2dhYmxlID0gZHJhZ2dhYmxlTm9kZXMuZ2V0KGlkKTtcblxuICAgIGlmICghYWN0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlTm9kZSA9IGFjdGl2ZURyYWdnYWJsZS5ub2RlLmN1cnJlbnQ7XG5cbiAgICBpZiAoIWFjdGl2ZU5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZWFzdXJhYmxlTm9kZSA9IGdldE1lYXN1cmFibGVOb2RlKG5vZGUpO1xuXG4gICAgaWYgKCFtZWFzdXJhYmxlTm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHRyYW5zZm9ybVxuICAgIH0gPSBnZXRXaW5kb3cobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICBjb25zdCBwYXJzZWRUcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbmltYXRpb24gPSB0eXBlb2YgY29uZmlnID09PSAnZnVuY3Rpb24nID8gY29uZmlnIDogY3JlYXRlRGVmYXVsdERyb3BBbmltYXRpb24oY29uZmlnKTtcbiAgICBzY3JvbGxJbnRvVmlld0lmTmVlZGVkKGFjdGl2ZU5vZGUsIG1lYXN1cmluZ0NvbmZpZ3VyYXRpb24uZHJhZ2dhYmxlLm1lYXN1cmUpO1xuICAgIHJldHVybiBhbmltYXRpb24oe1xuICAgICAgYWN0aXZlOiB7XG4gICAgICAgIGlkLFxuICAgICAgICBkYXRhOiBhY3RpdmVEcmFnZ2FibGUuZGF0YSxcbiAgICAgICAgbm9kZTogYWN0aXZlTm9kZSxcbiAgICAgICAgcmVjdDogbWVhc3VyaW5nQ29uZmlndXJhdGlvbi5kcmFnZ2FibGUubWVhc3VyZShhY3RpdmVOb2RlKVxuICAgICAgfSxcbiAgICAgIGRyYWdnYWJsZU5vZGVzLFxuICAgICAgZHJhZ092ZXJsYXk6IHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgcmVjdDogbWVhc3VyaW5nQ29uZmlndXJhdGlvbi5kcmFnT3ZlcmxheS5tZWFzdXJlKG1lYXN1cmFibGVOb2RlKVxuICAgICAgfSxcbiAgICAgIGRyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgICBtZWFzdXJpbmdDb25maWd1cmF0aW9uLFxuICAgICAgdHJhbnNmb3JtOiBwYXJzZWRUcmFuc2Zvcm1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHREcm9wQW5pbWF0aW9uKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIGR1cmF0aW9uLFxuICAgIGVhc2luZyxcbiAgICBzaWRlRWZmZWN0cyxcbiAgICBrZXlmcmFtZXNcbiAgfSA9IHsgLi4uZGVmYXVsdERyb3BBbmltYXRpb25Db25maWd1cmF0aW9uLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgcmV0dXJuIF9yZWY0ID0+IHtcbiAgICBsZXQge1xuICAgICAgYWN0aXZlLFxuICAgICAgZHJhZ092ZXJsYXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IF9yZWY0O1xuXG4gICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgLy8gRG8gbm90IGFuaW1hdGUgaWYgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGEgPSB7XG4gICAgICB4OiBkcmFnT3ZlcmxheS5yZWN0LmxlZnQgLSBhY3RpdmUucmVjdC5sZWZ0LFxuICAgICAgeTogZHJhZ092ZXJsYXkucmVjdC50b3AgLSBhY3RpdmUucmVjdC50b3BcbiAgICB9O1xuICAgIGNvbnN0IHNjYWxlID0ge1xuICAgICAgc2NhbGVYOiB0cmFuc2Zvcm0uc2NhbGVYICE9PSAxID8gYWN0aXZlLnJlY3Qud2lkdGggKiB0cmFuc2Zvcm0uc2NhbGVYIC8gZHJhZ092ZXJsYXkucmVjdC53aWR0aCA6IDEsXG4gICAgICBzY2FsZVk6IHRyYW5zZm9ybS5zY2FsZVkgIT09IDEgPyBhY3RpdmUucmVjdC5oZWlnaHQgKiB0cmFuc2Zvcm0uc2NhbGVZIC8gZHJhZ092ZXJsYXkucmVjdC5oZWlnaHQgOiAxXG4gICAgfTtcbiAgICBjb25zdCBmaW5hbFRyYW5zZm9ybSA9IHtcbiAgICAgIHg6IHRyYW5zZm9ybS54IC0gZGVsdGEueCxcbiAgICAgIHk6IHRyYW5zZm9ybS55IC0gZGVsdGEueSxcbiAgICAgIC4uLnNjYWxlXG4gICAgfTtcbiAgICBjb25zdCBhbmltYXRpb25LZXlmcmFtZXMgPSBrZXlmcmFtZXMoeyAuLi5yZXN0LFxuICAgICAgYWN0aXZlLFxuICAgICAgZHJhZ092ZXJsYXksXG4gICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgaW5pdGlhbDogdHJhbnNmb3JtLFxuICAgICAgICBmaW5hbDogZmluYWxUcmFuc2Zvcm1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBbZmlyc3RLZXlmcmFtZV0gPSBhbmltYXRpb25LZXlmcmFtZXM7XG4gICAgY29uc3QgbGFzdEtleWZyYW1lID0gYW5pbWF0aW9uS2V5ZnJhbWVzW2FuaW1hdGlvbktleWZyYW1lcy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChKU09OLnN0cmluZ2lmeShmaXJzdEtleWZyYW1lKSA9PT0gSlNPTi5zdHJpbmdpZnkobGFzdEtleWZyYW1lKSkge1xuICAgICAgLy8gVGhlIHN0YXJ0IGFuZCBlbmQga2V5ZnJhbWVzIGFyZSB0aGUgc2FtZSwgaW5mZXIgdGhhdCB0aGVyZSBpcyBubyBhbmltYXRpb24gbmVlZGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsZWFudXAgPSBzaWRlRWZmZWN0cyA9PSBudWxsID8gdm9pZCAwIDogc2lkZUVmZmVjdHMoe1xuICAgICAgYWN0aXZlLFxuICAgICAgZHJhZ092ZXJsYXksXG4gICAgICAuLi5yZXN0XG4gICAgfSk7XG4gICAgY29uc3QgYW5pbWF0aW9uID0gZHJhZ092ZXJsYXkubm9kZS5hbmltYXRlKGFuaW1hdGlvbktleWZyYW1lcywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBlYXNpbmcsXG4gICAgICBmaWxsOiAnZm9yd2FyZHMnXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgYW5pbWF0aW9uLm9uZmluaXNoID0gKCkgPT4ge1xuICAgICAgICBjbGVhbnVwID09IG51bGwgPyB2b2lkIDAgOiBjbGVhbnVwKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG59XG5cbmxldCBrZXkgPSAwO1xuZnVuY3Rpb24gdXNlS2V5KGlkKSB7XG4gIHJldHVybiB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGtleSsrO1xuICAgIHJldHVybiBrZXk7XG4gIH0sIFtpZF0pO1xufVxuXG5jb25zdCBEcmFnT3ZlcmxheSA9IC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGFkanVzdFNjYWxlID0gZmFsc2UsXG4gICAgY2hpbGRyZW4sXG4gICAgZHJvcEFuaW1hdGlvbjogZHJvcEFuaW1hdGlvbkNvbmZpZyxcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIG1vZGlmaWVycyxcbiAgICB3cmFwcGVyRWxlbWVudCA9ICdkaXYnLFxuICAgIGNsYXNzTmFtZSxcbiAgICB6SW5kZXggPSA5OTlcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmF0b3JFdmVudCxcbiAgICBhY3RpdmUsXG4gICAgYWN0aXZlTm9kZVJlY3QsXG4gICAgY29udGFpbmVyTm9kZVJlY3QsXG4gICAgZHJhZ2dhYmxlTm9kZXMsXG4gICAgZHJvcHBhYmxlQ29udGFpbmVycyxcbiAgICBkcmFnT3ZlcmxheSxcbiAgICBvdmVyLFxuICAgIG1lYXN1cmluZ0NvbmZpZ3VyYXRpb24sXG4gICAgc2Nyb2xsYWJsZUFuY2VzdG9ycyxcbiAgICBzY3JvbGxhYmxlQW5jZXN0b3JSZWN0cyxcbiAgICB3aW5kb3dSZWN0XG4gIH0gPSB1c2VEbmRDb250ZXh0KCk7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IHVzZUNvbnRleHQoQWN0aXZlRHJhZ2dhYmxlQ29udGV4dCk7XG4gIGNvbnN0IGtleSA9IHVzZUtleShhY3RpdmUgPT0gbnVsbCA/IHZvaWQgMCA6IGFjdGl2ZS5pZCk7XG4gIGNvbnN0IG1vZGlmaWVkVHJhbnNmb3JtID0gYXBwbHlNb2RpZmllcnMobW9kaWZpZXJzLCB7XG4gICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgYWN0aXZlLFxuICAgIGFjdGl2ZU5vZGVSZWN0LFxuICAgIGNvbnRhaW5lck5vZGVSZWN0LFxuICAgIGRyYWdnaW5nTm9kZVJlY3Q6IGRyYWdPdmVybGF5LnJlY3QsXG4gICAgb3ZlcixcbiAgICBvdmVybGF5Tm9kZVJlY3Q6IGRyYWdPdmVybGF5LnJlY3QsXG4gICAgc2Nyb2xsYWJsZUFuY2VzdG9ycyxcbiAgICBzY3JvbGxhYmxlQW5jZXN0b3JSZWN0cyxcbiAgICB0cmFuc2Zvcm0sXG4gICAgd2luZG93UmVjdFxuICB9KTtcbiAgY29uc3QgaW5pdGlhbFJlY3QgPSB1c2VJbml0aWFsVmFsdWUoYWN0aXZlTm9kZVJlY3QpO1xuICBjb25zdCBkcm9wQW5pbWF0aW9uID0gdXNlRHJvcEFuaW1hdGlvbih7XG4gICAgY29uZmlnOiBkcm9wQW5pbWF0aW9uQ29uZmlnLFxuICAgIGRyYWdnYWJsZU5vZGVzLFxuICAgIGRyb3BwYWJsZUNvbnRhaW5lcnMsXG4gICAgbWVhc3VyaW5nQ29uZmlndXJhdGlvblxuICB9KTsgLy8gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgYWN0aXZlIG5vZGUgdG8gYmUgbWVhc3VyZWQgYmVmb3JlIGNvbm5lY3RpbmcgdGhlIGRyYWcgb3ZlcmxheSByZWZcbiAgLy8gb3RoZXJ3aXNlIGNvbGxpc2lvbnMgY2FuIGJlIGNvbXB1dGVkIGFnYWluc3QgYSBtaXNwb3NpdGlvbmVkIGRyYWcgb3ZlcmxheVxuXG4gIGNvbnN0IHJlZiA9IGluaXRpYWxSZWN0ID8gZHJhZ092ZXJsYXkuc2V0UmVmIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChOdWxsaWZpZWRDb250ZXh0UHJvdmlkZXIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5pbWF0aW9uTWFuYWdlciwge1xuICAgIGFuaW1hdGlvbjogZHJvcEFuaW1hdGlvblxuICB9LCBhY3RpdmUgJiYga2V5ID8gUmVhY3QuY3JlYXRlRWxlbWVudChQb3NpdGlvbmVkT3ZlcmxheSwge1xuICAgIGtleToga2V5LFxuICAgIGlkOiBhY3RpdmUuaWQsXG4gICAgcmVmOiByZWYsXG4gICAgYXM6IHdyYXBwZXJFbGVtZW50LFxuICAgIGFjdGl2YXRvckV2ZW50OiBhY3RpdmF0b3JFdmVudCxcbiAgICBhZGp1c3RTY2FsZTogYWRqdXN0U2NhbGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbixcbiAgICByZWN0OiBpbml0aWFsUmVjdCxcbiAgICBzdHlsZToge1xuICAgICAgekluZGV4LFxuICAgICAgLi4uc3R5bGVcbiAgICB9LFxuICAgIHRyYW5zZm9ybTogbW9kaWZpZWRUcmFuc2Zvcm1cbiAgfSwgY2hpbGRyZW4pIDogbnVsbCkpO1xufSk7XG5cbmV4cG9ydCB7IEF1dG9TY3JvbGxBY3RpdmF0b3IsIERuZENvbnRleHQsIERyYWdPdmVybGF5LCBLZXlib2FyZENvZGUsIEtleWJvYXJkU2Vuc29yLCBNZWFzdXJpbmdGcmVxdWVuY3ksIE1lYXN1cmluZ1N0cmF0ZWd5LCBNb3VzZVNlbnNvciwgUG9pbnRlclNlbnNvciwgVG91Y2hTZW5zb3IsIFRyYXZlcnNhbE9yZGVyLCBhcHBseU1vZGlmaWVycywgY2xvc2VzdENlbnRlciwgY2xvc2VzdENvcm5lcnMsIGRlZmF1bHRBbm5vdW5jZW1lbnRzLCBkZWZhdWx0Q29vcmRpbmF0ZXMsIGRlZmF1bHREcm9wQW5pbWF0aW9uQ29uZmlndXJhdGlvbiBhcyBkZWZhdWx0RHJvcEFuaW1hdGlvbiwgZGVmYXVsdERyb3BBbmltYXRpb25TaWRlRWZmZWN0cywgZGVmYXVsdEtleWJvYXJkQ29vcmRpbmF0ZUdldHRlciwgZGVmYXVsdFNjcmVlblJlYWRlckluc3RydWN0aW9ucywgZ2V0Q2xpZW50UmVjdCwgZ2V0Rmlyc3RDb2xsaXNpb24sIGdldFNjcm9sbGFibGVBbmNlc3RvcnMsIHBvaW50ZXJXaXRoaW4sIHJlY3RJbnRlcnNlY3Rpb24sIHVzZURuZENvbnRleHQsIHVzZURuZE1vbml0b3IsIHVzZURyYWdnYWJsZSwgdXNlRHJvcHBhYmxlLCB1c2VTZW5zb3IsIHVzZVNlbnNvcnMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuZXNtLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@dnd-kit/core/dist/core.esm.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.2.4/node_modules/@dnd-kit/utilities/dist/utilities.esm.js": /*!************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.2.4/node_modules/@dnd-kit/utilities/dist/utilities.esm.js ***! \************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CSS: () => (/* binding */ CSS),\n/* harmony export */ add: () => (/* binding */ add),\n/* harmony export */ canUseDOM: () => (/* binding */ canUseDOM),\n/* harmony export */ findFirstFocusableNode: () => (/* binding */ findFirstFocusableNode),\n/* harmony export */ getEventCoordinates: () => (/* binding */ getEventCoordinates),\n/* harmony export */ getOwnerDocument: () => (/* binding */ getOwnerDocument),\n/* harmony export */ getWindow: () => (/* binding */ getWindow),\n/* harmony export */ hasViewportRelativeCoordinates: () => (/* binding */ hasViewportRelativeCoordinates),\n/* harmony export */ isDocument: () => (/* binding */ isDocument),\n/* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement),\n/* harmony export */ isKeyboardEvent: () => (/* binding */ isKeyboardEvent),\n/* harmony export */ isNode: () => (/* binding */ isNode),\n/* harmony export */ isSVGElement: () => (/* binding */ isSVGElement),\n/* harmony export */ isTouchEvent: () => (/* binding */ isTouchEvent),\n/* harmony export */ isWindow: () => (/* binding */ isWindow),\n/* harmony export */ subtract: () => (/* binding */ subtract),\n/* harmony export */ useCombinedRefs: () => (/* binding */ useCombinedRefs),\n/* harmony export */ useEvent: () => (/* binding */ useEvent),\n/* harmony export */ useInterval: () => (/* binding */ useInterval),\n/* harmony export */ useIsomorphicLayoutEffect: () => (/* binding */ useIsomorphicLayoutEffect),\n/* harmony export */ useLatestValue: () => (/* binding */ useLatestValue),\n/* harmony export */ useLazyMemo: () => (/* binding */ useLazyMemo),\n/* harmony export */ useNodeRef: () => (/* binding */ useNodeRef),\n/* harmony export */ usePrevious: () => (/* binding */ usePrevious),\n/* harmony export */ useUniqueId: () => (/* binding */ useUniqueId)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction useCombinedRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => node => {\n refs.forEach(ref => ref(node));\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n refs);\n}\n\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nconst canUseDOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';\n\nfunction isWindow(element) {\n const elementString = Object.prototype.toString.call(element);\n return elementString === '[object Window]' || // In Electron context the Window object serializes to [object global]\n elementString === '[object global]';\n}\n\nfunction isNode(node) {\n return 'nodeType' in node;\n}\n\nfunction getWindow(target) {\n var _target$ownerDocument, _target$ownerDocument2;\n\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window;\n}\n\nfunction isDocument(node) {\n const {\n Document\n } = getWindow(node);\n return node instanceof Document;\n}\n\nfunction isHTMLElement(node) {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n\nfunction isSVGElement(node) {\n return node instanceof getWindow(node).SVGElement;\n}\n\nfunction getOwnerDocument(target) {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target) || isSVGElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n\n/**\r\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\r\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\r\n */\n\nconst useIsomorphicLayoutEffect = canUseDOM ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\n\nfunction useEvent(handler) {\n const handlerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(handler);\n useIsomorphicLayoutEffect(() => {\n handlerRef.current = handler;\n });\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return handlerRef.current == null ? void 0 : handlerRef.current(...args);\n }, []);\n}\n\nfunction useInterval() {\n const intervalRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const set = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((listener, duration) => {\n intervalRef.current = setInterval(listener, duration);\n }, []);\n const clear = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n return [set, clear];\n}\n\nfunction useLatestValue(value, dependencies) {\n if (dependencies === void 0) {\n dependencies = [value];\n }\n\n const valueRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(value);\n useIsomorphicLayoutEffect(() => {\n if (valueRef.current !== value) {\n valueRef.current = value;\n }\n }, dependencies);\n return valueRef;\n}\n\nfunction useLazyMemo(callback, dependencies) {\n const valueRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const newValue = callback(valueRef.current);\n valueRef.current = newValue;\n return newValue;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [...dependencies]);\n}\n\nfunction useNodeRef(onChange) {\n const onChangeHandler = useEvent(onChange);\n const node = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const setNodeRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(element => {\n if (element !== node.current) {\n onChangeHandler == null ? void 0 : onChangeHandler(element, node.current);\n }\n\n node.current = element;\n }, //eslint-disable-next-line\n []);\n return [node, setNodeRef];\n}\n\nfunction usePrevious(value) {\n const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n\nlet ids = {};\nfunction useUniqueId(prefix, value) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (value) {\n return value;\n }\n\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n return prefix + \"-\" + id;\n }, [prefix, value]);\n}\n\nfunction createAdjustmentFn(modifier) {\n return function (object) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((accumulator, adjustment) => {\n const entries = Object.entries(adjustment);\n\n for (const [key, valueAdjustment] of entries) {\n const value = accumulator[key];\n\n if (value != null) {\n accumulator[key] = value + modifier * valueAdjustment;\n }\n }\n\n return accumulator;\n }, { ...object\n });\n };\n}\n\nconst add = /*#__PURE__*/createAdjustmentFn(1);\nconst subtract = /*#__PURE__*/createAdjustmentFn(-1);\n\nfunction hasViewportRelativeCoordinates(event) {\n return 'clientX' in event && 'clientY' in event;\n}\n\nfunction isKeyboardEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n KeyboardEvent\n } = getWindow(event.target);\n return KeyboardEvent && event instanceof KeyboardEvent;\n}\n\nfunction isTouchEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n TouchEvent\n } = getWindow(event.target);\n return TouchEvent && event instanceof TouchEvent;\n}\n\n/**\r\n * Returns the normalized x and y coordinates for mouse and touch events.\r\n */\n\nfunction getEventCoordinates(event) {\n if (isTouchEvent(event)) {\n if (event.touches && event.touches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.touches[0];\n return {\n x,\n y\n };\n } else if (event.changedTouches && event.changedTouches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.changedTouches[0];\n return {\n x,\n y\n };\n }\n }\n\n if (hasViewportRelativeCoordinates(event)) {\n return {\n x: event.clientX,\n y: event.clientY\n };\n }\n\n return null;\n}\n\nconst CSS = /*#__PURE__*/Object.freeze({\n Translate: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n x,\n y\n } = transform;\n return \"translate3d(\" + (x ? Math.round(x) : 0) + \"px, \" + (y ? Math.round(y) : 0) + \"px, 0)\";\n }\n\n },\n Scale: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n scaleX,\n scaleY\n } = transform;\n return \"scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\";\n }\n\n },\n Transform: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(' ');\n }\n\n },\n Transition: {\n toString(_ref) {\n let {\n property,\n duration,\n easing\n } = _ref;\n return property + \" \" + duration + \"ms \" + easing;\n }\n\n }\n});\n\nconst SELECTOR = 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]';\nfunction findFirstFocusableNode(element) {\n if (element.matches(SELECTOR)) {\n return element;\n }\n\n return element.querySelector(SELECTOR);\n}\n\n\n//# sourceMappingURL=utilities.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvZGlzdC91dGlsaXRpZXMuZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRjs7QUFFakY7QUFDQSxzRUFBc0UsYUFBYTtBQUNuRjtBQUNBOztBQUVBLFNBQVMsOENBQU87QUFDaEI7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFVBQVU7QUFDOUI7O0FBRUEsOENBQThDLGtEQUFlLEdBQUcsNENBQVM7O0FBRXpFO0FBQ0EscUJBQXFCLDZDQUFNO0FBQzNCO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsU0FBUyxrREFBVztBQUNwQix3RUFBd0UsYUFBYTtBQUNyRjtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0Esc0JBQXNCLDZDQUFNO0FBQzVCLGNBQWMsa0RBQVc7QUFDekI7QUFDQSxHQUFHO0FBQ0gsZ0JBQWdCLGtEQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLDZDQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsNkNBQU07QUFDekIsU0FBUyw4Q0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSw2Q0FBTTtBQUNyQixxQkFBcUIsa0RBQVc7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMsNkNBQU07QUFDcEIsRUFBRSxnREFBUztBQUNYO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsOENBQU87QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0Esa0dBQWtHLGFBQWE7QUFDL0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLElBQUk7QUFDVCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFbVg7QUFDblgiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL2Rpc3QvdXRpbGl0aWVzLmVzbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VNZW1vLCB1c2VMYXlvdXRFZmZlY3QsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVmcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZWZzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4gbm9kZSA9PiB7XG4gICAgcmVmcy5mb3JFYWNoKHJlZiA9PiByZWYobm9kZSkpO1xuICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIHJlZnMpO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYXN0ZXIvcGFja2FnZXMvc2hhcmVkL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzXG5jb25zdCBjYW5Vc2VET00gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5mdW5jdGlvbiBpc1dpbmRvdyhlbGVtZW50KSB7XG4gIGNvbnN0IGVsZW1lbnRTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWxlbWVudCk7XG4gIHJldHVybiBlbGVtZW50U3RyaW5nID09PSAnW29iamVjdCBXaW5kb3ddJyB8fCAvLyBJbiBFbGVjdHJvbiBjb250ZXh0IHRoZSBXaW5kb3cgb2JqZWN0IHNlcmlhbGl6ZXMgdG8gW29iamVjdCBnbG9iYWxdXG4gIGVsZW1lbnRTdHJpbmcgPT09ICdbb2JqZWN0IGdsb2JhbF0nO1xufVxuXG5mdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICByZXR1cm4gJ25vZGVUeXBlJyBpbiBub2RlO1xufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3codGFyZ2V0KSB7XG4gIHZhciBfdGFyZ2V0JG93bmVyRG9jdW1lbnQsIF90YXJnZXQkb3duZXJEb2N1bWVudDI7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKGlzV2luZG93KHRhcmdldCkpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgaWYgKCFpc05vZGUodGFyZ2V0KSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gKF90YXJnZXQkb3duZXJEb2N1bWVudCA9IChfdGFyZ2V0JG93bmVyRG9jdW1lbnQyID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfdGFyZ2V0JG93bmVyRG9jdW1lbnQyLmRlZmF1bHRWaWV3KSAhPSBudWxsID8gX3RhcmdldCRvd25lckRvY3VtZW50IDogd2luZG93O1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50KG5vZGUpIHtcbiAgY29uc3Qge1xuICAgIERvY3VtZW50XG4gIH0gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICBpZiAoaXNXaW5kb3cobm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTVkdFbGVtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBnZXRXaW5kb3cobm9kZSkuU1ZHRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudCh0YXJnZXQpIHtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQ7XG4gIH1cblxuICBpZiAoaXNXaW5kb3codGFyZ2V0KSkge1xuICAgIHJldHVybiB0YXJnZXQuZG9jdW1lbnQ7XG4gIH1cblxuICBpZiAoIWlzTm9kZSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50O1xuICB9XG5cbiAgaWYgKGlzRG9jdW1lbnQodGFyZ2V0KSkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudCh0YXJnZXQpIHx8IGlzU1ZHRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRhcmdldC5vd25lckRvY3VtZW50O1xuICB9XG5cbiAgcmV0dXJuIGRvY3VtZW50O1xufVxuXG4vKipcclxuICogQSBob29rIHRoYXQgcmVzb2x2ZXMgdG8gdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgYW5kIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgY2xpZW50XHJcbiAqIEBwYXJhbSBjYWxsYmFjayB7ZnVuY3Rpb259IENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGhvb2sgY2hhbmdlXHJcbiAqL1xuXG5jb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NID8gdXNlTGF5b3V0RWZmZWN0IDogdXNlRWZmZWN0O1xuXG5mdW5jdGlvbiB1c2VFdmVudChoYW5kbGVyKSB7XG4gIGNvbnN0IGhhbmRsZXJSZWYgPSB1c2VSZWYoaGFuZGxlcik7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGhhbmRsZXJSZWYuY3VycmVudCA9IGhhbmRsZXI7XG4gIH0pO1xuICByZXR1cm4gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlclJlZi5jdXJyZW50ID09IG51bGwgPyB2b2lkIDAgOiBoYW5kbGVyUmVmLmN1cnJlbnQoLi4uYXJncyk7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gdXNlSW50ZXJ2YWwoKSB7XG4gIGNvbnN0IGludGVydmFsUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBzZXQgPSB1c2VDYWxsYmFjaygobGlzdGVuZXIsIGR1cmF0aW9uKSA9PiB7XG4gICAgaW50ZXJ2YWxSZWYuY3VycmVudCA9IHNldEludGVydmFsKGxpc3RlbmVyLCBkdXJhdGlvbik7XG4gIH0sIFtdKTtcbiAgY29uc3QgY2xlYXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGludGVydmFsUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxSZWYuY3VycmVudCk7XG4gICAgICBpbnRlcnZhbFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtzZXQsIGNsZWFyXTtcbn1cblxuZnVuY3Rpb24gdXNlTGF0ZXN0VmFsdWUodmFsdWUsIGRlcGVuZGVuY2llcykge1xuICBpZiAoZGVwZW5kZW5jaWVzID09PSB2b2lkIDApIHtcbiAgICBkZXBlbmRlbmNpZXMgPSBbdmFsdWVdO1xuICB9XG5cbiAgY29uc3QgdmFsdWVSZWYgPSB1c2VSZWYodmFsdWUpO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWVSZWYuY3VycmVudCAhPT0gdmFsdWUpIHtcbiAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gIH0sIGRlcGVuZGVuY2llcyk7XG4gIHJldHVybiB2YWx1ZVJlZjtcbn1cblxuZnVuY3Rpb24gdXNlTGF6eU1lbW8oY2FsbGJhY2ssIGRlcGVuZGVuY2llcykge1xuICBjb25zdCB2YWx1ZVJlZiA9IHVzZVJlZigpO1xuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBjYWxsYmFjayh2YWx1ZVJlZi5jdXJyZW50KTtcbiAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbmV3VmFsdWU7XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIFsuLi5kZXBlbmRlbmNpZXNdKTtcbn1cblxuZnVuY3Rpb24gdXNlTm9kZVJlZihvbkNoYW5nZSkge1xuICBjb25zdCBvbkNoYW5nZUhhbmRsZXIgPSB1c2VFdmVudChvbkNoYW5nZSk7XG4gIGNvbnN0IG5vZGUgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNldE5vZGVSZWYgPSB1c2VDYWxsYmFjayhlbGVtZW50ID0+IHtcbiAgICBpZiAoZWxlbWVudCAhPT0gbm9kZS5jdXJyZW50KSB7XG4gICAgICBvbkNoYW5nZUhhbmRsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG9uQ2hhbmdlSGFuZGxlcihlbGVtZW50LCBub2RlLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIG5vZGUuY3VycmVudCA9IGVsZW1lbnQ7XG4gIH0sIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFtdKTtcbiAgcmV0dXJuIFtub2RlLCBzZXROb2RlUmVmXTtcbn1cblxuZnVuY3Rpb24gdXNlUHJldmlvdXModmFsdWUpIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmKCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiByZWYuY3VycmVudDtcbn1cblxubGV0IGlkcyA9IHt9O1xuZnVuY3Rpb24gdXNlVW5pcXVlSWQocHJlZml4LCB2YWx1ZSkge1xuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSBpZHNbcHJlZml4XSA9PSBudWxsID8gMCA6IGlkc1twcmVmaXhdICsgMTtcbiAgICBpZHNbcHJlZml4XSA9IGlkO1xuICAgIHJldHVybiBwcmVmaXggKyBcIi1cIiArIGlkO1xuICB9LCBbcHJlZml4LCB2YWx1ZV0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZGp1c3RtZW50Rm4obW9kaWZpZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYWRqdXN0bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYWRqdXN0bWVudHNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBhZGp1c3RtZW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBhZGp1c3RtZW50KSA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoYWRqdXN0bWVudCk7XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVBZGp1c3RtZW50XSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYWNjdW11bGF0b3Jba2V5XTtcblxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZSArIG1vZGlmaWVyICogdmFsdWVBZGp1c3RtZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9LCB7IC4uLm9iamVjdFxuICAgIH0pO1xuICB9O1xufVxuXG5jb25zdCBhZGQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQWRqdXN0bWVudEZuKDEpO1xuY29uc3Qgc3VidHJhY3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlQWRqdXN0bWVudEZuKC0xKTtcblxuZnVuY3Rpb24gaGFzVmlld3BvcnRSZWxhdGl2ZUNvb3JkaW5hdGVzKGV2ZW50KSB7XG4gIHJldHVybiAnY2xpZW50WCcgaW4gZXZlbnQgJiYgJ2NsaWVudFknIGluIGV2ZW50O1xufVxuXG5mdW5jdGlvbiBpc0tleWJvYXJkRXZlbnQoZXZlbnQpIHtcbiAgaWYgKCFldmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBLZXlib2FyZEV2ZW50XG4gIH0gPSBnZXRXaW5kb3coZXZlbnQudGFyZ2V0KTtcbiAgcmV0dXJuIEtleWJvYXJkRXZlbnQgJiYgZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50O1xufVxuXG5mdW5jdGlvbiBpc1RvdWNoRXZlbnQoZXZlbnQpIHtcbiAgaWYgKCFldmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBUb3VjaEV2ZW50XG4gIH0gPSBnZXRXaW5kb3coZXZlbnQudGFyZ2V0KTtcbiAgcmV0dXJuIFRvdWNoRXZlbnQgJiYgZXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50O1xufVxuXG4vKipcclxuICogUmV0dXJucyB0aGUgbm9ybWFsaXplZCB4IGFuZCB5IGNvb3JkaW5hdGVzIGZvciBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzLlxyXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRDb29yZGluYXRlcyhldmVudCkge1xuICBpZiAoaXNUb3VjaEV2ZW50KGV2ZW50KSkge1xuICAgIGlmIChldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFg6IHgsXG4gICAgICAgIGNsaWVudFk6IHlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRYOiB4LFxuICAgICAgICBjbGllbnRZOiB5XG4gICAgICB9ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYXNWaWV3cG9ydFJlbGF0aXZlQ29vcmRpbmF0ZXMoZXZlbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICB5OiBldmVudC5jbGllbnRZXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBDU1MgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIFRyYW5zbGF0ZToge1xuICAgIHRvU3RyaW5nKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKCF0cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSB0cmFuc2Zvcm07XG4gICAgICByZXR1cm4gXCJ0cmFuc2xhdGUzZChcIiArICh4ID8gTWF0aC5yb3VuZCh4KSA6IDApICsgXCJweCwgXCIgKyAoeSA/IE1hdGgucm91bmQoeSkgOiAwKSArIFwicHgsIDApXCI7XG4gICAgfVxuXG4gIH0sXG4gIFNjYWxlOiB7XG4gICAgdG9TdHJpbmcodHJhbnNmb3JtKSB7XG4gICAgICBpZiAoIXRyYW5zZm9ybSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc2NhbGVYLFxuICAgICAgICBzY2FsZVlcbiAgICAgIH0gPSB0cmFuc2Zvcm07XG4gICAgICByZXR1cm4gXCJzY2FsZVgoXCIgKyBzY2FsZVggKyBcIikgc2NhbGVZKFwiICsgc2NhbGVZICsgXCIpXCI7XG4gICAgfVxuXG4gIH0sXG4gIFRyYW5zZm9ybToge1xuICAgIHRvU3RyaW5nKHRyYW5zZm9ybSkge1xuICAgICAgaWYgKCF0cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW0NTUy5UcmFuc2xhdGUudG9TdHJpbmcodHJhbnNmb3JtKSwgQ1NTLlNjYWxlLnRvU3RyaW5nKHRyYW5zZm9ybSldLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgfSxcbiAgVHJhbnNpdGlvbjoge1xuICAgIHRvU3RyaW5nKF9yZWYpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgZWFzaW5nXG4gICAgICB9ID0gX3JlZjtcbiAgICAgIHJldHVybiBwcm9wZXJ0eSArIFwiIFwiICsgZHVyYXRpb24gKyBcIm1zIFwiICsgZWFzaW5nO1xuICAgIH1cblxuICB9XG59KTtcblxuY29uc3QgU0VMRUNUT1IgPSAnYSxmcmFtZSxpZnJhbWUsaW5wdXQ6bm90KFt0eXBlPWhpZGRlbl0pOm5vdCg6ZGlzYWJsZWQpLHNlbGVjdDpub3QoOmRpc2FibGVkKSx0ZXh0YXJlYTpub3QoOmRpc2FibGVkKSxidXR0b246bm90KDpkaXNhYmxlZCksKlt0YWJpbmRleF0nO1xuZnVuY3Rpb24gZmluZEZpcnN0Rm9jdXNhYmxlTm9kZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50Lm1hdGNoZXMoU0VMRUNUT1IpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNFTEVDVE9SKTtcbn1cblxuZXhwb3J0IHsgQ1NTLCBhZGQsIGNhblVzZURPTSwgZmluZEZpcnN0Rm9jdXNhYmxlTm9kZSwgZ2V0RXZlbnRDb29yZGluYXRlcywgZ2V0T3duZXJEb2N1bWVudCwgZ2V0V2luZG93LCBoYXNWaWV3cG9ydFJlbGF0aXZlQ29vcmRpbmF0ZXMsIGlzRG9jdW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzS2V5Ym9hcmRFdmVudCwgaXNOb2RlLCBpc1NWR0VsZW1lbnQsIGlzVG91Y2hFdmVudCwgaXNXaW5kb3csIHN1YnRyYWN0LCB1c2VDb21iaW5lZFJlZnMsIHVzZUV2ZW50LCB1c2VJbnRlcnZhbCwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlTGF0ZXN0VmFsdWUsIHVzZUxhenlNZW1vLCB1c2VOb2RlUmVmLCB1c2VQcmV2aW91cywgdXNlVW5pcXVlSWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxpdGllcy5lc20uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.2.4/node_modules/@dnd-kit/utilities/dist/utilities.esm.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/AiMediaButtons.js": /*!***********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/AiMediaButtons.js ***! \***********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AiMediaButtons: () => (/* binding */ AiMediaButtons)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @payloadcms/ui */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js\");\n/* __next_internal_client_entry_do_not_use__ AiMediaButtons auto */ var _s = $RefreshSig$();\n\n\n\nconst AiMediaButtons = ()=>{\n _s();\n const { id } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useDocumentInfo)();\n const [upscale, setUpscale] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n loading: false\n });\n const [recover, setRecover] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n loading: false\n });\n if (!id) return null; // Only show on existing documents\n const runAction = async (action)=>{\n const setter = action === \"upscale\" ? setUpscale : setRecover;\n setter({\n loading: true\n });\n const label = action === \"upscale\" ? \"AI Upscale\" : \"AI Recover\";\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.toast.info(`${label} started – this can take 30–90 seconds, please wait…`);\n try {\n // The API path is hardcoded here and assuming that's where the host app registers the endpoint. \n const response = await fetch(`/api/media/${id}/ai-process`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action\n })\n });\n const result = await response.json();\n if (!response.ok) {\n throw new Error(result.error || `${label} failed`);\n }\n setter({\n loading: false,\n resultId: result.mediaId\n });\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.toast.success(`✅ ${label} erfolgreich! Neues Bild (ID: ${result.mediaId}) wurde gespeichert.`);\n } catch (err) {\n console.error(`[AiMediaButtons] ${action} error:`, err);\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.toast.error(err instanceof Error ? err.message : `${label} fehlgeschlagen`);\n setter({\n loading: false\n });\n }\n };\n const buttonStyle = {\n background: \"var(--theme-elevation-150)\",\n border: \"1px solid var(--theme-elevation-200)\",\n color: \"var(--theme-text)\",\n padding: \"8px 14px\",\n borderRadius: \"4px\",\n fontSize: \"13px\",\n fontWeight: 500,\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n transition: \"opacity 0.15s ease\"\n };\n const disabledStyle = {\n opacity: 0.55,\n cursor: \"not-allowed\"\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n style: {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"10px\",\n marginBottom: \"1.5rem\",\n marginTop: \"0.5rem\"\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\"\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", {\n type: \"button\",\n disabled: upscale.loading || recover.loading,\n onClick: ()=>runAction(\"upscale\"),\n style: {\n ...buttonStyle,\n ...upscale.loading || recover.loading ? disabledStyle : {\n cursor: \"pointer\"\n }\n },\n children: upscale.loading ? \"⏳ AI Upscale läuft…\" : \"✨ AI Upscale\"\n }),\n upscale.resultId && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"a\", {\n href: `/admin/collections/media/${upscale.resultId}`,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n style: {\n fontSize: \"12px\",\n color: \"var(--theme-elevation-500)\",\n textDecoration: \"underline\"\n },\n children: [\n \"\\u2192 Neues Bild \\u00F6ffnen (ID: \",\n upscale.resultId,\n \")\"\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\"\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", {\n type: \"button\",\n disabled: upscale.loading || recover.loading,\n onClick: ()=>runAction(\"recover\"),\n style: {\n ...buttonStyle,\n ...upscale.loading || recover.loading ? disabledStyle : {\n cursor: \"pointer\"\n }\n },\n children: recover.loading ? \"⏳ AI Recover läuft…\" : \"🔄 AI Recover\"\n }),\n recover.resultId && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"a\", {\n href: `/admin/collections/media/${recover.resultId}`,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n style: {\n fontSize: \"12px\",\n color: \"var(--theme-elevation-500)\",\n textDecoration: \"underline\"\n },\n children: [\n \"\\u2192 Neues Bild \\u00F6ffnen (ID: \",\n recover.resultId,\n \")\"\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"p\", {\n style: {\n width: \"100%\",\n fontSize: \"0.8rem\",\n color: \"var(--theme-elevation-500)\",\n margin: 0,\n lineHeight: 1.4\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"strong\", {\n children: \"AI Upscale\"\n }),\n \" verbessert die Aufl\\u00F6sung via\",\n \" \",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"code\", {\n children: \"google/upscaler\"\n }),\n \". \",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"strong\", {\n children: \"AI Recover\"\n }),\n \" restauriert alte/besch\\u00E4digte Fotos via\",\n \" \",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"code\", {\n children: \"microsoft/bringing-old-photos-back-to-life\"\n }),\n \". Das Ergebnis wird als neues Medium gespeichert.\"\n ]\n })\n ]\n });\n}; //# sourceMappingURL=AiMediaButtons.js.map\n_s(AiMediaButtons, \"ydXwqpxvzbwBvtewcGZq9yG719A=\", false, function() {\n return [\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useDocumentInfo\n ];\n});\n_c = AiMediaButtons;\nvar _c;\n$RefreshReg$(_c, \"AiMediaButtons\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AbWludGVsK3BheWxvYWQtYWlAMS45LjE1X3BhdGNoX2hhc2g9OTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTkvbm9kZV9tb2R1bGVzL0BtaW50ZWwvcGF5bG9hZC1haS9kaXN0L2NvbXBvbmVudHMvQWlNZWRpYUJ1dHRvbnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRXdDO0FBQ2dCO0FBU2pELHVCQUFpQyxHQUFHLEVBQUU7O0lBQ3pDLE1BQU0sRUFBRSxFQUFFLEVBQUU7SUFFWixNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLCtDQUFRLENBQWM7UUFBRSxPQUFPLEVBQUUsS0FBSztJQUFBLENBQUUsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsK0NBQVEsQ0FBYztRQUFFLE9BQU8sRUFBRSxLQUFLO0lBQUEsQ0FBRSxDQUFDLENBQUM7SUFFeEUsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLGtDQUFrQztJQUV4RCxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDOUQsTUFBTSxDQUFDO1lBQUUsT0FBTyxFQUFFLElBQUk7UUFBQSxDQUFFLENBQUMsQ0FBQztRQUUxQixNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUVqRSxpREFBSyxDQUFDLElBQUksQ0FDTixHQUFHLEtBQUssc0RBQXNELENBQ2pFLENBQUM7UUFFRixJQUFJLENB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LFFBQVEsRUFBRSxNQUFNOzRCQUNoQixLQUFLLEVBQUUsNEJBQTRCOzRCQUNuQyxjQUFjLEVBQUUsV0FBVzt5QkFDOUI7d0JBQUE7NEJBQUE7NEJBRXlCLE9BQU8sQ0FBQyxRQUFROzRCQUFBO3lCQUFBO29CQUFBLEVBQzFDO2lCQUNQO1lBQUEsRUFDQztZQUVOO2dCQUNJLEtBQUssRUFBRTtvQkFDSCxLQUFLLEVBQUUsTUFBTTtvQkFDYixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsS0FBSyxFQUFFLDRCQUE0QjtvQkFDbkMsTUFBTSxFQUFFLENBQUM7b0JBQ1QsVUFBVSxFQUFFLEdBQUc7aUJBQ2xCO2dCQUFBO29CQUVEO3dCQUFBO29CQUFBLEVBQTJCO29CQUFBO29CQUE4QixHQUFHO29CQUM1RDt3QkFBQTtvQkFBQSxFQUE0QjtvQkFBQTtvQkFBRTt3QkFBQTtvQkFBQSxFQUEyQjtvQkFBQTtvQkFDOUIsR0FBRztvQkFDOUI7d0JBQUE7b0JBQUEsRUFBdUQ7b0JBQUE7aUJBQUE7WUFBQSxFQUV2RDtTQUFBO0lBQUEsRUFDRixDQUNUO0FBQ0wsQ0FBQyxDQUFDOzs7UUFySmlCLDJEQUFlOzs7S0FEckIsY0FBYyIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvc3JjL2NvbXBvbmVudHMvQWlNZWRpYUJ1dHRvbnMudHN4Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/AiMediaButtons.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/AiFieldButton.js": /*!**************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/AiFieldButton.js ***! \**************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AiFieldButton: () => (/* binding */ AiFieldButton)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @payloadcms/ui */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js\");\n/* __next_internal_client_entry_do_not_use__ AiFieldButton auto */ var _s = $RefreshSig$();\n\n\n\nfunction AiFieldButton({ path, field }) {\n _s();\n const [isGenerating, setIsGenerating] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [instructions, setInstructions] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [showInstructions, setShowInstructions] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n // Payload hooks\n const { value, setValue } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useField)({\n path\n });\n const { title } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useDocumentInfo)();\n const { fields } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm)();\n const extractText = (lexicalRoot)=>{\n if (!lexicalRoot) return \"\";\n let text = \"\";\n const iterate = (node)=>{\n if (node.text) text += node.text + \" \";\n if (node.children) node.children.forEach(iterate);\n };\n iterate(lexicalRoot);\n return text;\n };\n const handleGenerate = async (e)=>{\n e.preventDefault();\n const lexicalValue = fields?.content?.value;\n const legacyValue = fields?.legacyMdx?.value;\n let draftContent = legacyValue || \"\";\n if (!draftContent && lexicalValue?.root) {\n draftContent = extractText(lexicalValue.root);\n }\n setIsGenerating(true);\n try {\n // Field name is passed as a label usually, fallback to path\n const fieldName = typeof field?.label === \"string\" ? field.label : path;\n const fieldDescription = typeof field?.admin?.description === \"string\" ? field.admin.description : \"\";\n const resData = await fetch(\"/api/api/mintel-ai/generate-single-field\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n documentTitle: title || \"\",\n documentContent: draftContent,\n fieldName,\n fieldDescription,\n instructions\n })\n });\n const res = await resData.json();\n if (res.success && res.text) {\n setValue(res.text);\n } else {\n alert(\"Fehler: \" + res.error);\n }\n } catch (e) {\n console.error(e);\n alert(\"Fehler bei der Generierung.\");\n } finally{\n setIsGenerating(false);\n setShowInstructions(false);\n }\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n style: {\n marginTop: \"8px\",\n marginBottom: \"8px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\"\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n style: {\n display: \"flex\",\n gap: \"8px\",\n alignItems: \"center\"\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", {\n type: \"button\",\n onClick: handleGenerate,\n disabled: isGenerating,\n style: {\n background: \"var(--theme-elevation-150)\",\n border: \"1px solid var(--theme-elevation-200)\",\n color: \"var(--theme-text)\",\n padding: \"4px 12px\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n cursor: isGenerating ? \"not-allowed\" : \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n opacity: isGenerating ? 0.6 : 1\n },\n children: isGenerating ? \"✨ AI arbeitet...\" : \"✨ AI Ausfüllen\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", {\n type: \"button\",\n onClick: (e)=>{\n e.preventDefault();\n setShowInstructions(!showInstructions);\n },\n style: {\n background: \"transparent\",\n border: \"none\",\n color: \"var(--theme-elevation-500)\",\n fontSize: \"12px\",\n cursor: \"pointer\",\n textDecoration: \"underline\"\n },\n children: showInstructions ? \"Prompt verbergen\" : \"Mit Prompt...\"\n })\n ]\n }),\n showInstructions && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"textarea\", {\n value: instructions,\n onChange: (e)=>setInstructions(e.target.value),\n placeholder: \"Eigene Anweisung an AI (z.B. 'als catchy slogan')\",\n disabled: isGenerating,\n style: {\n width: \"100%\",\n padding: \"6px 8px\",\n fontSize: \"12px\",\n borderRadius: \"4px\",\n border: \"1px solid var(--theme-elevation-200)\",\n background: \"var(--theme-elevation-50)\",\n color: \"var(--theme-text)\"\n },\n rows: 2\n })\n ]\n });\n} //# sourceMappingURL=AiFieldButton.js.map\n_s(AiFieldButton, \"Mb4JyQ3r8nMJ4UtJiVOkA7SkiQg=\", false, function() {\n return [\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useField,\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useDocumentInfo,\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm\n ];\n});\n_c = AiFieldButton;\nvar _c;\n$RefreshReg$(_c, \"AiFieldButton\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AbWludGVsK3BheWxvYWQtYWlAMS45LjE1X3BhdGNoX2hhc2g9OTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTkvbm9kZV9tb2R1bGVzL0BtaW50ZWwvcGF5bG9hZC1haS9kaXN0L2NvbXBvbmVudHMvRmllbGRHZW5lcmF0b3JzL0FpRmllbGRCdXR0b24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRXdDO0FBQzRCO0FBQzlELHVCQUF3QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQWdDOztJQUN2RSxNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLCtDQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsTUFBTSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsR0FBRywrQ0FBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLCtDQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEUsZ0JBQWdCO0lBQ2hCLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLDREQUFvQjtRQUFFLElBQUk7SUFBQSxDQUFFLENBQUMsQ0FBQztJQUN2RCxNQUFNLEVBQUUsS0FBSyxFQUFFO0lBQ2YsTUFBTSxFQUFFLE1BQU0sRUFBRTtJQUVoQixNQUFNLFdBQVcsR0FBRyxDQUFDLFdBQWdCLEVBQVUsRUFBRTtRQUM3QyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcs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QWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ2hELFdBQVcsRUFBQyxtREFBbUQ7Z0JBQy9ELFFBQVEsRUFBRSxZQUFZO2dCQUN0QixLQUFLLEVBQUU7b0JBQ0gsS0FBSyxFQUFFLE1BQU07b0JBQ2IsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLFFBQVEsRUFBRSxNQUFNO29CQUNoQixZQUFZLEVBQUUsS0FBSztvQkFDbkIsTUFBTSxFQUFFLHNDQUFzQztvQkFDOUMsVUFBVSxFQUFFLDJCQUEyQjtvQkFDdkMsS0FBSyxFQUFFLG1CQUFtQjtpQkFDN0I7Z0JBQ0QsSUFBSSxFQUFFLENBQUM7WUFBQSxFQUNUO1NBQ0w7SUFBQSxFQUNDLENBQ1Q7QUFDTCxDQUFDOzs7UUFsSStCLG9EQUFRO1FBQ2xCLDJEQUFlO1FBQ2QsbURBQU87OztLQVJkLGFBQWEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcmMvY29tcG9uZW50cy9GaWVsZEdlbmVyYXRvcnMvQWlGaWVsZEJ1dHRvbi50c3giXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/AiFieldButton.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateSlugButton.js": /*!*******************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateSlugButton.js ***! \*******************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GenerateSlugButton: () => (/* binding */ GenerateSlugButton)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @payloadcms/ui */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js\");\n/* __next_internal_client_entry_do_not_use__ GenerateSlugButton auto */ var _s = $RefreshSig$();\n\n\n\nfunction GenerateSlugButton({ path }) {\n _s();\n const [isGenerating, setIsGenerating] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [instructions, setInstructions] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"GenerateSlugButton.useEffect\": ()=>{\n if (!isGenerating) return;\n const handleBeforeUnload = {\n \"GenerateSlugButton.useEffect.handleBeforeUnload\": (e)=>{\n e.preventDefault();\n e.returnValue = \"Slug-Generierung läuft noch. Wenn Sie neu laden, bricht der Vorgang ab!\";\n }\n }[\"GenerateSlugButton.useEffect.handleBeforeUnload\"];\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n return ({\n \"GenerateSlugButton.useEffect\": ()=>window.removeEventListener(\"beforeunload\", handleBeforeUnload)\n })[\"GenerateSlugButton.useEffect\"];\n }\n }[\"GenerateSlugButton.useEffect\"], [\n isGenerating\n ]);\n const { fields, replaceState } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm)();\n const { value, initialValue, setValue } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useField)({\n path\n });\n const extractText = (lexicalRoot)=>{\n if (!lexicalRoot) return \"\";\n let text = \"\";\n const iterate = (node)=>{\n if (node.text) text += node.text + \" \";\n if (node.children) node.children.forEach(iterate);\n };\n iterate(lexicalRoot);\n return text;\n };\n const handleGenerate = async ()=>{\n const title = fields?.title?.value || \"\";\n const lexicalValue = fields?.content?.value;\n const legacyValue = fields?.legacyMdx?.value;\n let draftContent = legacyValue || \"\";\n if (!draftContent && lexicalValue?.root) {\n draftContent = extractText(lexicalValue.root);\n }\n setIsGenerating(true);\n try {\n const resData = await fetch(\"/api/api/mintel-ai/generate-slug\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n title,\n draftContent,\n oldSlug: initialValue,\n instructions\n })\n });\n const res = await resData.json();\n if (res.success && res.slug) {\n setValue(res.slug);\n } else {\n alert(\"Fehler: \" + res.error);\n }\n } catch (e) {\n console.error(e);\n alert(\"Unerwarteter Fehler.\");\n } finally{\n setIsGenerating(false);\n }\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n className: \"flex gap-2 items-center mb-4\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"textarea\", {\n value: instructions,\n onChange: (e)=>setInstructions(e.target.value),\n placeholder: \"Optionale AI Anweisung f\\u00FCr den Slug...\",\n disabled: isGenerating,\n style: {\n width: \"100%\",\n minHeight: \"40px\",\n padding: \"8px 12px\",\n fontSize: \"14px\",\n borderRadius: \"4px\",\n border: \"1px solid var(--theme-elevation-200)\",\n background: \"var(--theme-elevation-50)\",\n color: \"var(--theme-text)\",\n marginBottom: \"8px\"\n }\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", {\n type: \"button\",\n onClick: handleGenerate,\n disabled: isGenerating,\n className: \"btn btn--icon-style-none btn--size-medium ml-auto\",\n style: {\n background: \"var(--theme-elevation-150)\",\n border: \"1px solid var(--theme-elevation-200)\",\n color: \"var(--theme-text)\",\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n transition: \"all 0.2s ease\",\n opacity: isGenerating ? 0.6 : 1,\n cursor: isGenerating ? \"not-allowed\" : \"pointer\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", {\n className: \"btn__content\",\n children: isGenerating ? \"✨ Generiere (ca 10s)...\" : \"✨ AI Slug Generieren\"\n })\n })\n ]\n });\n} //# sourceMappingURL=GenerateSlugButton.js.map\n_s(GenerateSlugButton, \"lSmhjOneqi+Ai5BFE9Ze/4DWffs=\", false, function() {\n return [\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm,\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useField\n ];\n});\n_c = GenerateSlugButton;\nvar _c;\n$RefreshReg$(_c, \"GenerateSlugButton\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AbWludGVsK3BheWxvYWQtYWlAMS45LjE1X3BhdGNoX2hhc2g9OTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTkvbm9kZV9tb2R1bGVzL0BtaW50ZWwvcGF5bG9hZC1haS9kaXN0L2NvbXBvbmVudHMvRmllbGRHZW5lcmF0b3JzL0dlbmVyYXRlU2x1Z0J1dHRvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFbUQ7QUFDQTtBQUM3Qyw0QkFBNkIsRUFBRSxJQUFJLEVBQW9COztJQUN6RCxNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLCtDQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsTUFBTSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsR0FBRywrQ0FBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXJELGdEQUFTO3dDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTztZQUMxQixNQUFNLGtCQUFrQjttRUFBRyxDQUFDLENBQW9CLEVBQUUsRUFBRTtvQkFDaEQsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNuQixDQUFDLENBQUMsV0FBVyxHQUNULHlFQUF5RSxDQUFDO2dCQUNsRixDQUFDOztZQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM1RDtnREFBTyxHQUFHLENBQUcsQ0FBRCxLQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDOztRQUMvRSxDQUFDO3VDQUFFO1FBQUMsWUFBWTtLQUFDLENBQUMsQ0FBQztJQUVuQixNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtJQUM5QixNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVB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O29CQUNuQixNQUFNLEVBQUUsc0NBQXNDO29CQUM5QyxVQUFVLEVBQUUsMkJBQTJCO29CQUN2QyxLQUFLLEVBQUUsbUJBQW1CO29CQUMxQixZQUFZLEVBQUUsS0FBSztpQkFDdEI7WUFBQSxFQUNIO1lBQ0Y7Z0JBQ0ksSUFBSSxFQUFDLFFBQVE7Z0JBQ2IsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixTQUFTLEVBQUMsbURBQW1EO2dCQUM3RCxLQUFLLEVBQUU7b0JBQ0gsVUFBVSxFQUFFLDRCQUE0QjtvQkFDeEMsTUFBTSxFQUFFLHNDQUFzQztvQkFDOUMsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsU0FBUyxFQUFFLDRCQUE0QjtvQkFDdkMsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTO2lCQUNuRDtnQkFBQSxVQUVEO29CQUFNLFNBQVMsRUFBQyxjQUFjO29CQUFBLFVBQ3pCLFlBQVksQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtnQkFBQSxFQUMvRDtZQUFBLEVBQ0Y7U0FBQTtJQUFBLEVBQ1AsQ0FDVDtBQUNMLENBQUM7R0ExR2Usa0JBQWtCOztRQWVHLG1EQUFPO1FBQ0Usb0RBQVEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcmMvY29tcG9uZW50cy9GaWVsZEdlbmVyYXRvcnMvR2VuZXJhdGVTbHVnQnV0dG9uLnRzeCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateSlugButton.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateThumbnailButton.js": /*!************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateThumbnailButton.js ***! \************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GenerateThumbnailButton: () => (/* binding */ GenerateThumbnailButton)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @payloadcms/ui */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js\");\n/* __next_internal_client_entry_do_not_use__ GenerateThumbnailButton auto */ var _s = $RefreshSig$();\n\n\n\nfunction GenerateThumbnailButton({ path }) {\n _s();\n const [isGenerating, setIsGenerating] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [instructions, setInstructions] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"GenerateThumbnailButton.useEffect\": ()=>{\n if (!isGenerating) return;\n const handleBeforeUnload = {\n \"GenerateThumbnailButton.useEffect.handleBeforeUnload\": (e)=>{\n e.preventDefault();\n e.returnValue = \"Bild-Generierung läuft noch (dies dauert bis zu 2 Minuten). Wenn Sie neu laden, bricht der Vorgang ab!\";\n }\n }[\"GenerateThumbnailButton.useEffect.handleBeforeUnload\"];\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n return ({\n \"GenerateThumbnailButton.useEffect\": ()=>window.removeEventListener(\"beforeunload\", handleBeforeUnload)\n })[\"GenerateThumbnailButton.useEffect\"];\n }\n }[\"GenerateThumbnailButton.useEffect\"], [\n isGenerating\n ]);\n const { fields } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm)();\n const { value, setValue } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useField)({\n path\n });\n const extractText = (lexicalRoot)=>{\n if (!lexicalRoot) return \"\";\n let text = \"\";\n const iterate = (node)=>{\n if (node.text) text += node.text + \" \";\n if (node.children) node.children.forEach(iterate);\n };\n iterate(lexicalRoot);\n return text;\n };\n const handleGenerate = async ()=>{\n const title = fields?.title?.value || \"\";\n const lexicalValue = fields?.content?.value;\n const legacyValue = fields?.legacyMdx?.value;\n let draftContent = legacyValue || \"\";\n if (!draftContent && lexicalValue?.root) {\n draftContent = extractText(lexicalValue.root);\n }\n setIsGenerating(true);\n try {\n const resData = await fetch(\"/api/api/mintel-ai/generate-thumbnail\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n draftContent,\n title,\n instructions\n })\n });\n const res = await resData.json();\n if (res.success && res.mediaId) {\n setValue(res.mediaId);\n } else {\n alert(\"Fehler: \" + res.error);\n }\n } catch (e) {\n console.error(e);\n alert(\"Unerwarteter Fehler.\");\n } finally{\n setIsGenerating(false);\n }\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n className: \"flex gap-2 items-center mt-2 mb-4\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"textarea\", {\n value: instructions,\n onChange: (e)=>setInstructions(e.target.value),\n placeholder: \"Optionale Thumbnail-Detailanweisung (Farben, Stimmung, etc.)...\",\n disabled: isGenerating,\n style: {\n width: \"100%\",\n minHeight: \"40px\",\n padding: \"8px 12px\",\n fontSize: \"14px\",\n borderRadius: \"4px\",\n border: \"1px solid var(--theme-elevation-200)\",\n background: \"var(--theme-elevation-50)\",\n color: \"var(--theme-text)\",\n marginBottom: \"8px\"\n }\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", {\n type: \"button\",\n onClick: handleGenerate,\n disabled: isGenerating,\n className: \"btn btn--icon-style-none btn--size-medium\",\n style: {\n background: \"var(--theme-elevation-150)\",\n border: \"1px solid var(--theme-elevation-200)\",\n color: \"var(--theme-text)\",\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n transition: \"all 0.2s ease\",\n opacity: isGenerating ? 0.6 : 1,\n cursor: isGenerating ? \"not-allowed\" : \"pointer\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", {\n className: \"btn__content\",\n children: isGenerating ? \"✨ AI arbeitet (dauert ca. 1-2 Min)...\" : \"✨ AI Thumbnail Generieren\"\n })\n })\n ]\n });\n} //# sourceMappingURL=GenerateThumbnailButton.js.map\n_s(GenerateThumbnailButton, \"GP++DQmeWYEsp9zx01J1zY7tRLA=\", false, function() {\n return [\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm,\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useField\n ];\n});\n_c = GenerateThumbnailButton;\nvar _c;\n$RefreshReg$(_c, \"GenerateThumbnailButton\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AbWludGVsK3BheWxvYWQtYWlAMS45LjE1X3BhdGNoX2hhc2g9OTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTkvbm9kZV9tb2R1bGVzL0BtaW50ZWwvcGF5bG9hZC1haS9kaXN0L2NvbXBvbmVudHMvRmllbGRHZW5lcmF0b3JzL0dlbmVyYXRlVGh1bWJuYWlsQnV0dG9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVtRDtBQUNBO0FBQzdDLGlDQUFrQyxFQUFFLElBQUksRUFBb0I7O0lBQzlELE1BQU0sQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEdBQUcsK0NBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxNQUFNLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxHQUFHLCtDQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFckQsZ0RBQVM7NkNBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPO1lBQzFCLE1BQU0sa0JBQWtCO3dFQUFHLENBQUMsQ0FBb0IsRUFBRSxFQUFFO29CQUNoRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxXQUFXLEdBQ1Qsd0dBQXdHLENBQUM7Z0JBQ2pILENBQUM7O1lBQ0QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzVEO3FEQUFPLEdBQUcsQ0FBRyxDQUFELEtBQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUM7O1FBQy9FLENBQUM7NENBQUU7UUFBQyxZQUFZO0tBQUMsQ0FBQyxDQUFDO0lBRW5CLE1BQU0sRUFBRSxNQUFNLEVBQUU7SUFDaEIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsNERBQVk7UUFBRSxJ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QUFFLDJCQUEyQjtvQkFDdkMsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsWUFBWSxFQUFFLEtBQUs7aUJBQ3RCO1lBQUEsRUFDSDtZQUNGO2dCQUNJLElBQUksRUFBQyxRQUFRO2dCQUNiLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixRQUFRLEVBQUUsWUFBWTtnQkFDdEIsU0FBUyxFQUFDLDJDQUEyQztnQkFDckQsS0FBSyxFQUFFO29CQUNILFVBQVUsRUFBRSw0QkFBNEI7b0JBQ3hDLE1BQU0sRUFBRSxzQ0FBc0M7b0JBQzlDLEtBQUssRUFBRSxtQkFBbUI7b0JBQzFCLFNBQVMsRUFBRSw0QkFBNEI7b0JBQ3ZDLFVBQVUsRUFBRSxlQUFlO29CQUMzQixPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDbkQ7Z0JBQUEsVUFFRDtvQkFBTSxTQUFTLEVBQUMsY0FBYztvQkFBQSxVQUN6QixZQUFZLEdBQ1AsdUNBQXVDLEdBQ3ZDLDJCQUEyQjtnQkFBQSxFQUM5QjtZQUFBLEVBQ0Y7U0FBQTtJQUFBLEVBQ1AsQ0FDVDtBQUNMLENBQUM7R0EzR2UsdUJBQXVCOztRQWVoQixtREFBTztRQUNFLG9EQUFRIiwic291cmNlcyI6WyIvVXNlcnMvc3JjL2NvbXBvbmVudHMvRmllbGRHZW5lcmF0b3JzL0dlbmVyYXRlVGh1bWJuYWlsQnV0dG9uLnRzeCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateThumbnailButton.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/OptimizeButton.js": /*!***********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/OptimizeButton.js ***! \***********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ OptimizeButton: () => (/* binding */ OptimizeButton)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @payloadcms/ui */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js\");\n/* __next_internal_client_entry_do_not_use__ OptimizeButton auto */ var _s = $RefreshSig$();\n\n\n\nfunction OptimizeButton() {\n _s();\n const [isOptimizing, setIsOptimizing] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [instructions, setInstructions] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"OptimizeButton.useEffect\": ()=>{\n if (!isOptimizing) return;\n const handleBeforeUnload = {\n \"OptimizeButton.useEffect.handleBeforeUnload\": (e)=>{\n e.preventDefault();\n e.returnValue = \"Lexical Block-Optimierung läuft noch (dies dauert bis zu 45 Sekunden). Wenn Sie neu laden, bricht der Vorgang ab!\";\n }\n }[\"OptimizeButton.useEffect.handleBeforeUnload\"];\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n return ({\n \"OptimizeButton.useEffect\": ()=>window.removeEventListener(\"beforeunload\", handleBeforeUnload)\n })[\"OptimizeButton.useEffect\"];\n }\n }[\"OptimizeButton.useEffect\"], [\n isOptimizing\n ]);\n const { fields, setModified, replaceState } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm)();\n const { title } = (0,_payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useDocumentInfo)();\n const handleOptimize = async ()=>{\n // ... gathering draftContent logic\n const lexicalValue = fields?.content?.value;\n const legacyValue = fields?.legacyMdx?.value;\n let draftContent = legacyValue || \"\";\n const extractText = (lexicalRoot)=>{\n if (!lexicalRoot) return \"\";\n let text = \"\";\n const iterate = (node)=>{\n if (node.text) text += node.text + \" \";\n if (node.children) node.children.forEach(iterate);\n };\n iterate(lexicalRoot);\n return text;\n };\n if (!draftContent && lexicalValue?.root) {\n draftContent = extractText(lexicalValue.root);\n }\n if (!draftContent || draftContent.trim().length < 50) {\n alert(\"Der Entwurf ist zu kurz. Bitte tippe zuerst ein paar Stichpunkte oder einen Rohling ein.\");\n return;\n }\n setIsOptimizing(true);\n try {\n // 2. We inject the title so the AI knows what it's writing about\n const payloadText = `---\\ntitle: \"${title}\"\\n---\\n\\n${draftContent}`;\n const res = await fetch(\"/api/api/mintel-ai/optimize\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n draftContent: payloadText,\n instructions\n })\n });\n const response = await res.json();\n if (response.success && response.lexicalAST) {\n // 3. Inject the new Lexical AST directly into the field form state\n // We use Payload's useForm hook replacing the value of the 'content' field.\n replaceState({\n ...fields,\n content: {\n ...fields.content,\n value: response.lexicalAST,\n initialValue: response.lexicalAST\n }\n });\n setModified(true);\n alert(\"🎉 Artikel wurde erfolgreich von der AI optimiert und mit Lexical Components angereichert.\");\n } else {\n alert(\"❌ Fehler: \" + response.error);\n }\n } catch (error) {\n console.error(\"Optimization failed:\", error);\n alert(\"Ein unerwarteter Fehler ist aufgetreten.\");\n } finally{\n setIsOptimizing(false);\n }\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", {\n className: \"mb-8 p-4 bg-slate-50 border border-slate-200 rounded-md\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", {\n className: \"text-sm font-semibold mb-2\",\n children: \"AI Post Optimizer\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", {\n className: \"text-xs text-slate-500 mb-4\",\n children: \"Lass Mintel AI deinen Text-Rohentwurf analysieren und automatisch in einen voll formatierten Lexical Artikel mit passenden B2B Komponenten (MemeCards, Mermaids) umwandeln.\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"textarea\", {\n value: instructions,\n onChange: (e)=>setInstructions(e.target.value),\n placeholder: \"Optionale Anweisungen an die AI (z.B. 'schreibe etwas lockerer' oder 'fokussiere dich auf SEO')...\",\n disabled: isOptimizing,\n style: {\n width: \"100%\",\n minHeight: \"60px\",\n padding: \"8px 12px\",\n fontSize: \"14px\",\n borderRadius: \"4px\",\n border: \"1px solid var(--theme-elevation-200)\",\n background: \"var(--theme-elevation-50)\",\n color: \"var(--theme-text)\",\n marginBottom: \"16px\"\n }\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", {\n type: \"button\",\n onClick: handleOptimize,\n disabled: isOptimizing,\n className: \"btn btn--icon-style-none btn--size-medium mt-4\",\n style: {\n background: \"var(--theme-elevation-150)\",\n border: \"1px solid var(--theme-elevation-200)\",\n color: \"var(--theme-text)\",\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n transition: \"all 0.2s ease\",\n opacity: isOptimizing ? 0.7 : 1,\n cursor: isOptimizing ? \"not-allowed\" : \"pointer\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", {\n className: \"btn__content\",\n style: {\n fontWeight: 600\n },\n children: isOptimizing ? \"✨ AI arbeitet (ca 30s)...\" : \"✨ Jetzt optimieren\"\n })\n })\n ]\n });\n} //# sourceMappingURL=OptimizeButton.js.map\n_s(OptimizeButton, \"pXRPhz5yTBtgwbtjvtF3qsQ8Wa8=\", false, function() {\n return [\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useForm,\n _payloadcms_ui__WEBPACK_IMPORTED_MODULE_2__.useDocumentInfo\n ];\n});\n_c = OptimizeButton;\nvar _c;\n$RefreshReg$(_c, \"OptimizeButton\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AbWludGVsK3BheWxvYWQtYWlAMS45LjE1X3BhdGNoX2hhc2g9OTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTkvbm9kZV9tb2R1bGVzL0BtaW50ZWwvcGF5bG9hZC1haS9kaXN0L2NvbXBvbmVudHMvT3B0aW1pemVCdXR0b24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRW1EO0FBQ087QUFHcEQ7O0lBQ0YsTUFBTSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsR0FBRywrQ0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEdBQUcsK0NBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVyRCxnREFBUztvQ0FBQyxHQUFHLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU87WUFDMUIsTUFBTSxrQkFBa0I7K0RBQUcsQ0FBQyxDQUFvQixFQUFFLEVBQUU7b0JBQ2hELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsQ0FBQyxDQUFDLFdBQVcsR0FDVCxtSEFBbUgsQ0FBQztnQkFDNUgsQ0FBQzs7WUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDNUQ7NENBQU8sR0FBRyxDQUFHLENBQUQsS0FBTyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQzs7UUFDL0UsQ0FBQzttQ0FBRTtRQUFDLFlBQVk7S0FBQyxDQUFDLENBQUM7SUFFbkIsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFO0lBQzNDLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFFZixNQUFNLGNBQWMsR0FBRyxLQUFLLElBQUksRUFBRTtRQUM5QixtQ0FBbUM7UUFD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RUFBQyw0QkFBNEI7Z0JBQUE7WUFBQSxFQUF1QjtZQUNqRTtnQkFBRyxTQUFTLEVBQUMsNkJBQTZCO2dCQUFBO1lBQUEsRUFJdEM7WUFDSjtnQkFDSSxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUcsQ0FBRCxjQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNoRCxXQUFXLEVBQUMsb0dBQW9HO2dCQUNoSCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsS0FBSyxFQUFFO29CQUNILEtBQUssRUFBRSxNQUFNO29CQUNiLFNBQVMsRUFBRSxNQUFNO29CQUNqQixPQUFPLEVBQUUsVUFBVTtvQkFDbkIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLFlBQVksRUFBRSxLQUFLO29CQUNuQixNQUFNLEVBQUUsc0NBQXNDO29CQUM5QyxVQUFVLEVBQUUsMkJBQTJCO29CQUN2QyxLQUFLLEVBQUUsbUJBQW1CO29CQUMxQixZQUFZLEVBQUUsTUFBTTtpQkFDdkI7WUFBQSxFQUNIO1lBQ0Y7Z0JBQ0ksSUFBSSxFQUFDLFFBQVE7Z0JBQ2IsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixTQUFTLEVBQUMsZ0RBQWdEO2dCQUMxRCxLQUFLLEVBQUU7b0JBQ0gsVUFBVSxFQUFFLDRCQUE0QjtvQkFDeEMsTUFBTSxFQUFFLHNDQUFzQztvQkFDOUMsS0FBSyxFQUFFLG1CQUFtQjtvQkFDMUIsU0FBUyxFQUFFLDRCQUE0QjtvQkFDdkMsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTO2lCQUNuRDtnQkFBQSxVQUVEO29CQUFNLFNBQVMsRUFBQyxjQUFjO29CQUFDLEtBQUssRUFBRTt3QkFBRSxVQUFVLEVBQUUsR0FBRztvQkFBQSxDQUFFO29CQUFBLFVBQ3BELFlBQVksQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtnQkFBQSxFQUMvRDtZQUFBLEVBQ0Y7U0FBQTtJQUFBLEVBQ1AsQ0FDVDtBQUNMLENBQUM7OztRQXRIaUQsbURBQU87UUFDbkMsMkRBQWU7OztLQWhCckIsY0FBYyIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvc3JjL2NvbXBvbmVudHMvT3B0aW1pemVCdXR0b24udHN4Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/OptimizeButton.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/clientKeys.js": /*!*********************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/clientKeys.js ***! \*********************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clientTranslationKeys: () => (/* binding */ clientTranslationKeys)\n/* harmony export */ });\nfunction createClientTranslationKeys(keys) {\n return keys;\n}\nconst clientTranslationKeys = createClientTranslationKeys([\n 'authentication:account',\n 'authentication:accountOfCurrentUser',\n 'authentication:accountVerified',\n 'authentication:alreadyActivated',\n 'authentication:alreadyLoggedIn',\n 'authentication:apiKey',\n 'authentication:authenticated',\n 'authentication:backToLogin',\n 'authentication:beginCreateFirstUser',\n 'authentication:changePassword',\n 'authentication:checkYourEmailForPasswordReset',\n 'authentication:confirmGeneration',\n 'authentication:confirmPassword',\n 'authentication:createFirstUser',\n 'authentication:emailNotValid',\n 'authentication:usernameNotValid',\n 'authentication:emailOrUsername',\n 'authentication:emailSent',\n 'authentication:emailVerified',\n 'authentication:enableAPIKey',\n 'authentication:failedToUnlock',\n 'authentication:forceUnlock',\n 'authentication:forgotPassword',\n 'authentication:forgotPasswordEmailInstructions',\n 'authentication:forgotPasswordUsernameInstructions',\n 'authentication:forgotPasswordQuestion',\n 'authentication:generate',\n 'authentication:generateNewAPIKey',\n 'authentication:generatingNewAPIKeyWillInvalidate',\n 'authentication:logBackIn',\n 'authentication:loggedOutInactivity',\n 'authentication:loggedOutSuccessfully',\n 'authentication:loggingOut',\n 'authentication:login',\n 'authentication:logOut',\n 'authentication:loggedIn',\n 'authentication:loggedInChangePassword',\n 'authentication:logout',\n 'authentication:logoutUser',\n 'authentication:logoutSuccessful',\n 'authentication:newAPIKeyGenerated',\n 'authentication:newPassword',\n 'authentication:passed',\n 'authentication:passwordResetSuccessfully',\n 'authentication:resetPassword',\n 'authentication:stayLoggedIn',\n 'authentication:successfullyRegisteredFirstUser',\n 'authentication:successfullyUnlocked',\n 'authentication:username',\n 'authentication:unableToVerify',\n 'authentication:tokenRefreshSuccessful',\n 'authentication:verified',\n 'authentication:verifiedSuccessfully',\n 'authentication:verify',\n 'authentication:verifyUser',\n 'authentication:youAreInactive',\n 'dashboard:addWidget',\n 'dashboard:deleteWidget',\n 'dashboard:searchWidgets',\n 'dashboard:editDashboard',\n 'dashboard:editingDashboard',\n 'dashboard:resetLayout',\n 'dashboard:addButton',\n 'dashboard:discardConfirmLabel',\n 'dashboard:discardMessage',\n 'dashboard:discardTitle',\n 'dashboard:noItems',\n 'error:autosaving',\n 'error:correctInvalidFields',\n 'error:deletingTitle',\n 'error:documentNotFound',\n 'error:emailOrPasswordIncorrect',\n 'error:usernameOrPasswordIncorrect',\n 'error:loadingDocument',\n 'error:insufficientClipboardPermissions',\n 'error:invalidClipboardData',\n 'error:invalidRequestArgs',\n 'error:invalidFileType',\n 'error:logoutFailed',\n 'error:noMatchedField',\n 'error:notAllowedToAccessPage',\n 'error:notAllowedToPerformAction',\n 'error:previewing',\n 'error:unableToCopy',\n 'error:unableToDeleteCount',\n 'error:unableToReindexCollection',\n 'error:unableToUpdateCount',\n 'error:unauthorized',\n 'error:unauthorizedAdmin',\n 'error:unknown',\n 'error:unspecific',\n 'error:unverifiedEmail',\n 'error:userEmailAlreadyRegistered',\n 'error:usernameAlreadyRegistered',\n 'error:tokenNotProvided',\n 'error:unPublishingDocument',\n 'error:revertingDocument',\n 'error:problemUploadingFile',\n 'error:restoringTitle',\n 'error:failedToSaveLayout',\n 'error:failedToResetLayout',\n 'fields:addLabel',\n 'fields:addLink',\n 'fields:addNew',\n 'fields:addNewLabel',\n 'fields:addRelationship',\n 'fields:addUpload',\n 'fields:block',\n 'fields:blocks',\n 'fields:blockType',\n 'fields:chooseBetweenCustomTextOrDocument',\n 'fields:customURL',\n 'fields:chooseDocumentToLink',\n 'fields:openInNewTab',\n 'fields:enterURL',\n 'fields:internalLink',\n 'fields:chooseFromExisting',\n 'fields:linkType',\n 'fields:textToDisplay',\n 'fields:searchForLanguage',\n 'fields:collapseAll',\n 'fields:editLink',\n 'fields:editRelationship',\n 'fields:itemsAndMore',\n 'fields:labelRelationship',\n 'fields:latitude',\n 'fields:linkedTo',\n 'fields:longitude',\n 'fields:passwordsDoNotMatch',\n 'fields:removeRelationship',\n 'fields:removeUpload',\n 'fields:saveChanges',\n 'fields:searchForBlock',\n 'fields:selectFieldsToEdit',\n 'fields:showAll',\n 'fields:swapRelationship',\n 'fields:swapUpload',\n 'fields:toggleBlock',\n 'fields:uploadNewLabel',\n 'folder:byFolder',\n 'folder:browseByFolder',\n 'folder:deleteFolder',\n 'folder:folders',\n 'folder:folderTypeDescription',\n 'folder:folderName',\n 'folder:itemsMovedToFolder',\n 'folder:itemsMovedToRoot',\n 'folder:itemHasBeenMoved',\n 'folder:itemHasBeenMovedToRoot',\n 'folder:moveFolder',\n 'folder:movingFromFolder',\n 'folder:moveItemsToFolderConfirmation',\n 'folder:moveItemsToRootConfirmation',\n 'folder:moveItemToFolderConfirmation',\n 'folder:moveItemToRootConfirmation',\n 'folder:noFolder',\n 'folder:newFolder',\n 'folder:renameFolder',\n 'folder:searchByNameInFolder',\n 'folder:selectFolderForItem',\n 'general:all',\n 'general:aboutToDeleteCount',\n 'general:aboutToDelete',\n 'general:aboutToPermanentlyDelete',\n 'general:aboutToPermanentlyDeleteTrash',\n 'general:aboutToRestore',\n 'general:aboutToRestoreAsDraft',\n 'general:aboutToRestoreAsDraftCount',\n 'general:aboutToRestoreCount',\n 'general:aboutToTrash',\n 'general:aboutToTrashCount',\n 'general:addBelow',\n 'general:addFilter',\n 'general:adminTheme',\n 'general:allCollections',\n 'general:and',\n 'general:anotherUser',\n 'general:anotherUserTakenOver',\n 'general:applyChanges',\n 'general:ascending',\n 'general:automatic',\n 'general:backToDashboard',\n 'general:cancel',\n 'general:changesNotSaved',\n 'general:close',\n 'general:collapse',\n 'general:collections',\n 'general:confirmMove',\n 'general:yes',\n 'general:no',\n 'general:columns',\n 'general:columnToSort',\n 'general:confirm',\n 'general:confirmCopy',\n 'general:confirmDeletion',\n 'general:confirmDuplication',\n 'general:confirmReindex',\n 'general:confirmReindexAll',\n 'general:confirmReindexDescription',\n 'general:confirmReindexDescriptionAll',\n 'general:confirmRestoration',\n 'general:copied',\n 'general:clear',\n 'general:clearAll',\n 'general:copy',\n 'general:copyField',\n 'general:copyRow',\n 'general:copyWarning',\n 'general:copying',\n 'general:create',\n 'general:created',\n 'general:createdAt',\n 'general:createNew',\n 'general:createNewLabel',\n 'general:creating',\n 'general:creatingNewLabel',\n 'general:currentlyEditing',\n 'general:custom',\n 'general:dark',\n 'general:dashboard',\n 'general:delete',\n 'general:deleted',\n 'general:deletedAt',\n 'general:deletePermanently',\n 'general:deleteLabel',\n 'general:deletedSuccessfully',\n 'general:deletedCountSuccessfully',\n 'general:deleting',\n 'general:descending',\n 'general:depth',\n 'general:deselectAllRows',\n 'general:document',\n 'general:documentIsTrashed',\n 'general:documentLocked',\n 'general:documentModified',\n 'general:documentOutOfDate',\n 'general:documents',\n 'general:duplicate',\n 'general:duplicateWithoutSaving',\n 'general:edit',\n 'general:editAll',\n 'general:editing',\n 'general:editingLabel',\n 'general:editingTakenOver',\n 'general:editLabel',\n 'general:editedSince',\n 'general:email',\n 'general:emailAddress',\n 'general:emptyTrash',\n 'general:emptyTrashLabel',\n 'general:enterAValue',\n 'general:error',\n 'general:errors',\n 'general:fallbackToDefaultLocale',\n 'general:false',\n 'general:filters',\n 'general:filterWhere',\n 'general:globals',\n 'general:goBack',\n 'general:groupByLabel',\n 'general:isEditing',\n 'general:item',\n 'general:items',\n 'general:language',\n 'general:lastModified',\n 'general:layout',\n 'general:leaveAnyway',\n 'general:leaveWithoutSaving',\n 'general:light',\n 'general:livePreview',\n 'general:lock',\n 'general:exitLivePreview',\n 'general:loading',\n 'general:locale',\n 'general:locales',\n 'general:menu',\n 'general:moreOptions',\n 'general:move',\n 'general:moveConfirm',\n 'general:moveCount',\n 'general:moveDown',\n 'general:moveUp',\n 'general:moving',\n 'general:movingCount',\n 'general:name',\n 'general:next',\n 'general:newLabel',\n 'general:noDateSelected',\n 'general:noFiltersSet',\n 'general:noLabel',\n 'general:none',\n 'general:noOptions',\n 'general:noResults',\n 'general:noResultsDescription',\n 'general:noResultsFound',\n 'general:notFound',\n 'general:nothingFound',\n 'general:noTrashResults',\n 'general:noUpcomingEventsScheduled',\n 'general:noValue',\n 'general:of',\n 'general:open',\n 'general:only',\n 'general:or',\n 'general:order',\n 'general:overwriteExistingData',\n 'general:pageNotFound',\n 'general:password',\n 'general:pasteField',\n 'general:pasteRow',\n 'general:payloadSettings',\n 'general:permanentlyDelete',\n 'general:permanentlyDeletedCountSuccessfully',\n 'general:perPage',\n 'general:previous',\n 'general:reindex',\n 'general:reindexingAll',\n 'general:reloadDocument',\n 'general:remove',\n 'general:rename',\n 'general:reset',\n 'general:resetPreferences',\n 'general:resetPreferencesDescription',\n 'general:resettingPreferences',\n 'general:restore',\n 'general:restoreAsPublished',\n 'general:restoredCountSuccessfully',\n 'general:restoring',\n 'general:row',\n 'general:rows',\n 'general:save',\n 'general:saveChanges',\n 'general:schedulePublishFor',\n 'general:saving',\n 'general:searchBy',\n 'general:select',\n 'general:selectAll',\n 'general:selectAllRows',\n 'general:selectedCount',\n 'general:selectLabel',\n 'general:selectValue',\n 'general:showAllLabel',\n 'general:sorryNotFound',\n 'general:sort',\n 'general:sortByLabelDirection',\n 'general:stayOnThisPage',\n 'general:submissionSuccessful',\n 'general:submit',\n 'general:submitting',\n 'general:success',\n 'general:successfullyCreated',\n 'general:successfullyDuplicated',\n 'general:successfullyReindexed',\n 'general:takeOver',\n 'general:thisLanguage',\n 'general:time',\n 'general:timezone',\n 'general:titleDeleted',\n 'general:titleTrashed',\n 'general:titleRestored',\n 'general:trash',\n 'general:trashedCountSuccessfully',\n 'general:import',\n 'general:export',\n 'general:allLocales',\n 'general:true',\n 'general:upcomingEvents',\n 'general:users',\n 'general:user',\n 'general:username',\n 'general:unauthorized',\n 'general:unlock',\n 'general:unsavedChanges',\n 'general:unsavedChangesDuplicate',\n 'general:untitled',\n 'general:updatedAt',\n 'general:updatedLabelSuccessfully',\n 'general:updatedCountSuccessfully',\n 'general:updateForEveryone',\n 'general:updatedSuccessfully',\n 'general:updating',\n 'general:value',\n 'general:viewing',\n 'general:viewReadOnly',\n 'general:uploading',\n 'general:uploadingBulk',\n 'general:welcome',\n 'localization:localeToPublish',\n 'localization:copyToLocale',\n 'localization:copyFromTo',\n 'localization:selectedLocales',\n 'localization:selectLocaleToCopy',\n 'localization:selectLocaleToDuplicate',\n 'localization:cannotCopySameLocale',\n 'localization:copyFrom',\n 'localization:copyTo',\n 'operators:equals',\n 'operators:exists',\n 'operators:isNotIn',\n 'operators:isIn',\n 'operators:contains',\n 'operators:isLike',\n 'operators:isNotLike',\n 'operators:isNotEqualTo',\n 'operators:near',\n 'operators:isGreaterThan',\n 'operators:isLessThan',\n 'operators:isGreaterThanOrEqualTo',\n 'operators:isLessThanOrEqualTo',\n 'operators:within',\n 'operators:intersects',\n 'upload:addFile',\n 'upload:addFiles',\n 'upload:bulkUpload',\n 'upload:crop',\n 'upload:cropToolDescription',\n 'upload:dragAndDrop',\n 'upload:editImage',\n 'upload:fileToUpload',\n 'upload:filesToUpload',\n 'upload:focalPoint',\n 'upload:focalPointDescription',\n 'upload:height',\n 'upload:pasteURL',\n 'upload:previewSizes',\n 'upload:selectCollectionToBrowse',\n 'upload:selectFile',\n 'upload:setCropArea',\n 'upload:setFocalPoint',\n 'upload:sizesFor',\n 'upload:sizes',\n 'upload:width',\n 'upload:fileName',\n 'upload:fileSize',\n 'upload:noFile',\n 'upload:download',\n 'validation:emailAddress',\n 'validation:enterNumber',\n 'validation:fieldHasNo',\n 'validation:greaterThanMax',\n 'validation:invalidInput',\n 'validation:invalidSelection',\n 'validation:invalidSelections',\n 'validation:latitudeOutOfBounds',\n 'validation:lessThanMin',\n 'validation:limitReached',\n 'validation:longitudeOutOfBounds',\n 'validation:invalidBlock',\n 'validation:invalidBlocks',\n 'validation:longerThanMin',\n 'validation:notValidDate',\n 'validation:required',\n 'validation:requiresAtLeast',\n 'validation:requiresNoMoreThan',\n 'validation:requiresTwoNumbers',\n 'validation:shorterThanMax',\n 'validation:trueOrFalse',\n 'validation:timezoneRequired',\n 'validation:username',\n 'validation:validUploadID',\n 'version:aboutToPublishSelection',\n 'version:aboutToRestore',\n 'version:aboutToRestoreGlobal',\n 'version:aboutToRevertToPublished',\n 'version:aboutToUnpublish',\n 'version:aboutToUnpublishIn',\n 'version:aboutToUnpublishSelection',\n 'version:autosave',\n 'version:autosavedSuccessfully',\n 'version:autosavedVersion',\n 'version:versionAgo',\n 'version:moreVersions',\n 'version:changed',\n 'version:changedFieldsCount',\n 'version:confirmRevertToSaved',\n 'version:compareVersions',\n 'version:comparingAgainst',\n 'version:currentlyViewing',\n 'version:confirmPublish',\n 'version:confirmUnpublish',\n 'version:confirmVersionRestoration',\n 'version:currentDraft',\n 'version:currentPublishedVersion',\n 'version:currentlyPublished',\n 'version:draft',\n 'version:draftHasPublishedVersion',\n 'version:draftSavedSuccessfully',\n 'version:lastSavedAgo',\n 'version:modifiedOnly',\n 'version:noFurtherVersionsFound',\n 'version:noLabelGroup',\n 'version:noRowsFound',\n 'version:noRowsSelected',\n 'version:preview',\n 'version:previouslyDraft',\n 'version:previouslyPublished',\n 'version:previousVersion',\n 'version:problemRestoringVersion',\n 'version:publish',\n 'version:publishAllLocales',\n 'version:publishChanges',\n 'version:published',\n 'version:publishIn',\n 'version:publishing',\n 'version:restoreAsDraft',\n 'version:restoredSuccessfully',\n 'version:restoreThisVersion',\n 'version:restoring',\n 'version:reverting',\n 'version:revertUnsuccessful',\n 'version:revertToPublished',\n 'version:saveDraft',\n 'version:scheduledSuccessfully',\n 'version:schedulePublish',\n 'version:selectLocales',\n 'version:selectVersionToCompare',\n 'version:showLocales',\n 'version:specificVersion',\n 'version:status',\n 'version:type',\n 'version:unpublish',\n 'version:unpublished',\n 'version:unpublishIn',\n 'version:unpublishing',\n 'version:unpublishedSuccessfully',\n 'version:versionID',\n 'version:version',\n 'version:versions',\n 'version:viewingVersion',\n 'version:viewingVersionGlobal',\n 'version:viewingVersions',\n 'version:viewingVersionsGlobal'\n]);\n\n//# sourceMappingURL=clientKeys.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC9jbGllbnRLZXlzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQHBheWxvYWRjbXMrdHJhbnNsYXRpb25zQDMuODEuMC9ub2RlX21vZHVsZXMvQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zL2Rpc3QvY2xpZW50S2V5cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBjcmVhdGVDbGllbnRUcmFuc2xhdGlvbktleXMoa2V5cykge1xuICAgIHJldHVybiBrZXlzO1xufVxuZXhwb3J0IGNvbnN0IGNsaWVudFRyYW5zbGF0aW9uS2V5cyA9IGNyZWF0ZUNsaWVudFRyYW5zbGF0aW9uS2V5cyhbXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmFjY291bnQnLFxuICAgICdhdXRoZW50aWNhdGlvbjphY2NvdW50T2ZDdXJyZW50VXNlcicsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmFjY291bnRWZXJpZmllZCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmFscmVhZHlBY3RpdmF0ZWQnLFxuICAgICdhdXRoZW50aWNhdGlvbjphbHJlYWR5TG9nZ2VkSW4nLFxuICAgICdhdXRoZW50aWNhdGlvbjphcGlLZXknLFxuICAgICdhdXRoZW50aWNhdGlvbjphdXRoZW50aWNhdGVkJyxcbiAgICAnYXV0aGVudGljYXRpb246YmFja1RvTG9naW4nLFxuICAgICdhdXRoZW50aWNhdGlvbjpiZWdpbkNyZWF0ZUZpcnN0VXNlcicsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmNoYW5nZVBhc3N3b3JkJyxcbiAgICAnYXV0aGVudGljYXRpb246Y2hlY2tZb3VyRW1haWxGb3JQYXNzd29yZFJlc2V0JyxcbiAgICAnYXV0aGVudGljYXRpb246Y29uZmlybUdlbmVyYXRpb24nLFxuICAgICdhdXRoZW50aWNhdGlvbjpjb25maXJtUGFzc3dvcmQnLFxuICAgICdhdXRoZW50aWNhdGlvbjpjcmVhdGVGaXJzdFVzZXInLFxuICAgICdhdXRoZW50aWNhdGlvbjplbWFpbE5vdFZhbGlkJyxcbiAgICAnYXV0aGVudGljYXRpb246dXNlcm5hbWVOb3RWYWxpZCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmVtYWlsT3JVc2VybmFtZScsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmVtYWlsU2VudCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmVtYWlsVmVyaWZpZWQnLFxuICAgICdhdXRoZW50aWNhdGlvbjplbmFibGVBUElLZXknLFxuICAgICdhdXRoZW50aWNhdGlvbjpmYWlsZWRUb1VubG9jaycsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmZvcmNlVW5sb2NrJyxcbiAgICAnYXV0aGVudGljYXRpb246Zm9yZ290UGFzc3dvcmQnLFxuICAgICdhdXRoZW50aWNhdGlvbjpmb3Jnb3RQYXNzd29yZEVtYWlsSW5zdHJ1Y3Rpb25zJyxcbiAgICAnYXV0aGVudGljYXRpb246Zm9yZ290UGFzc3dvcmRVc2VybmFtZUluc3RydWN0aW9ucycsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmZvcmdvdFBhc3N3b3JkUXVlc3Rpb24nLFxuICAgICdhdXRoZW50aWNhdGlvbjpnZW5lcmF0ZScsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmdlbmVyYXRlTmV3QVBJS2V5JyxcbiAgICAnYXV0aGVudGljYXRpb246Z2VuZXJhdGluZ05ld0FQSUtleVdpbGxJbnZhbGlkYXRlJyxcbiAgICAnYXV0aGVudGljYXRpb246bG9nQmFja0luJyxcbiAgICAnYXV0aGVudGljYXRpb246bG9nZ2VkT3V0SW5hY3Rpdml0eScsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmxvZ2dlZE91dFN1Y2Nlc3NmdWxseScsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmxvZ2dpbmdPdXQnLFxuICAgICdhdXRoZW50aWNhdGlvbjpsb2dpbicsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmxvZ091dCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmxvZ2dlZEluJyxcbiAgICAnYXV0aGVudGljYXRpb246bG9nZ2VkSW5DaGFuZ2VQYXNzd29yZCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmxvZ291dCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOmxvZ291dFVzZXInLFxuICAgICdhdXRoZW50aWNhdGlvbjpsb2dvdXRTdWNjZXNzZnVsJyxcbiAgICAnYXV0aGVudGljYXRpb246bmV3QVBJS2V5R2VuZXJhdGVkJyxcbiAgICAnYXV0aGVudGljYXRpb246bmV3UGFzc3dvcmQnLFxuICAgICdhdXRoZW50aWNhdGlvbjpwYXNzZWQnLFxuICAgICdhdXRoZW50aWNhdGlvbjpwYXNzd29yZFJlc2V0U3VjY2Vzc2Z1bGx5JyxcbiAgICAnYXV0aGVudGljYXRpb246cmVzZXRQYXNzd29yZCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOnN0YXlMb2dnZWRJbicsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOnN1Y2Nlc3NmdWxseVJlZ2lzdGVyZWRGaXJzdFVzZXInLFxuICAgICdhdXRoZW50aWNhdGlvbjpzdWNjZXNzZnVsbHlVbmxvY2tlZCcsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOnVzZXJuYW1lJyxcbiAgICAnYXV0aGVudGljYXRpb246dW5hYmxlVG9WZXJpZnknLFxuICAgICdhdXRoZW50aWNhdGlvbjp0b2tlblJlZnJlc2hTdWNjZXNzZnVsJyxcbiAgICAnYXV0aGVudGljYXRpb246dmVyaWZpZWQnLFxuICAgICdhdXRoZW50aWNhdGlvbjp2ZXJpZmllZFN1Y2Nlc3NmdWxseScsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOnZlcmlmeScsXG4gICAgJ2F1dGhlbnRpY2F0aW9uOnZlcmlmeVVzZXInLFxuICAgICdhdXRoZW50aWNhdGlvbjp5b3VBcmVJbmFjdGl2ZScsXG4gICAgJ2Rhc2hib2FyZDphZGRXaWRnZXQnLFxuICAgICdkYXNoYm9hcmQ6ZGVsZXRlV2lkZ2V0JyxcbiAgICAnZGFzaGJvYXJkOnNlYXJjaFdpZGdldHMnLFxuICAgICdkYXNoYm9hcmQ6ZWRpdERhc2hib2FyZCcsXG4gICAgJ2Rhc2hib2FyZDplZGl0aW5nRGFzaGJvYXJkJyxcbiAgICAnZGFzaGJvYXJkOnJlc2V0TGF5b3V0JyxcbiAgICAnZGFzaGJvYXJkOmFkZEJ1dHRvbicsXG4gICAgJ2Rhc2hib2FyZDpkaXNjYXJkQ29uZmlybUxhYmVsJyxcbiAgICAnZGFzaGJvYXJkOmRpc2NhcmRNZXNzYWdlJyxcbiAgICAnZGFzaGJvYXJkOmRpc2NhcmRUaXRsZScsXG4gICAgJ2Rhc2hib2FyZDpub0l0ZW1zJyxcbiAgICAnZXJyb3I6YXV0b3NhdmluZycsXG4gICAgJ2Vycm9yOmNvcnJlY3RJbnZhbGlkRmllbGRzJyxcbiAgICAnZXJyb3I6ZGVsZXRpbmdUaXRsZScsXG4gICAgJ2Vycm9yOmRvY3VtZW50Tm90Rm91bmQnLFxuICAgICdlcnJvcjplbWFpbE9yUGFzc3dvcmRJbmNvcnJlY3QnLFxuICAgICdlcnJvcjp1c2VybmFtZU9yUGFzc3dvcmRJbmNvcnJlY3QnLFxuICAgICdlcnJvcjpsb2FkaW5nRG9jdW1lbnQnLFxuICAgICdlcnJvcjppbnN1ZmZpY2llbnRDbGlwYm9hcmRQZXJtaXNzaW9ucycsXG4gICAgJ2Vycm9yOmludmFsaWRDbGlwYm9hcmREYXRhJyxcbiAgICAnZXJyb3I6aW52YWxpZFJlcXVlc3RBcmdzJyxcbiAgICAnZXJyb3I6aW52YWxpZEZpbGVUeXBlJyxcbiAgICAnZXJyb3I6bG9nb3V0RmFpbGVkJyxcbiAgICAnZXJyb3I6bm9NYXRjaGVkRmllbGQnLFxuICAgICdlcnJvcjpub3RBbGxvd2VkVG9BY2Nlc3NQYWdlJyxcbiAgICAnZXJyb3I6bm90QWxsb3dlZFRvUGVyZm9ybUFjdGlvbicsXG4gICAgJ2Vycm9yOnByZXZpZXdpbmcnLFxuICAgICdlcnJvcjp1bmFibGVUb0NvcHknLFxuICAgICdlcnJvcjp1bmFibGVUb0RlbGV0ZUNvdW50JyxcbiAgICAnZXJyb3I6dW5hYmxlVG9SZWluZGV4Q29sbGVjdGlvbicsXG4gICAgJ2Vycm9yOnVuYWJsZVRvVXBkYXRlQ291bnQnLFxuICAgICdlcnJvcjp1bmF1dGhvcml6ZWQnLFxuICAgICdlcnJvcjp1bmF1dGhvcml6ZWRBZG1pbicsXG4gICAgJ2Vycm9yOnVua25vd24nLFxuICAgICdlcnJvcjp1bnNwZWNpZmljJyxcbiAgICAnZXJyb3I6dW52ZXJpZmllZEVtYWlsJyxcbiAgICAnZXJyb3I6dXNlckVtYWlsQWxyZWFkeVJlZ2lzdGVyZWQnLFxuICAgICdlcnJvcjp1c2VybmFtZUFscmVhZHlSZWdpc3RlcmVkJyxcbiAgICAnZXJyb3I6dG9rZW5Ob3RQcm92aWRlZCcsXG4gICAgJ2Vycm9yOnVuUHVibGlzaGluZ0RvY3VtZW50JyxcbiAgICAnZXJyb3I6cmV2ZXJ0aW5nRG9jdW1lbnQnLFxuICAgICdlcnJvcjpwcm9ibGVtVXBsb2FkaW5nRmlsZScsXG4gICAgJ2Vycm9yOnJlc3RvcmluZ1RpdGxlJyxcbiAgICAnZXJyb3I6ZmFpbGVkVG9TYXZlTGF5b3V0JyxcbiAgICAnZXJyb3I6ZmFpbGVkVG9SZXNldExheW91dCcsXG4gICAgJ2ZpZWxkczphZGRMYWJlbCcsXG4gICAgJ2ZpZWxkczphZGRMaW5rJyxcbiAgICAnZmllbGRzOmFkZE5ldycsXG4gICAgJ2ZpZWxkczphZGROZXdMYWJlbCcsXG4gICAgJ2ZpZWxkczphZGRSZWxhdGlvbnNoaXAnLFxuICAgICdmaWVsZHM6YWRkVXBsb2FkJyxcbiAgICAnZmllbGRzOmJsb2NrJyxcbiAgICAnZmllbGRzOmJsb2NrcycsXG4gICAgJ2ZpZWxkczpibG9ja1R5cGUnLFxuICAgICdmaWVsZHM6Y2hvb3NlQmV0d2VlbkN1c3RvbVRleHRPckRvY3VtZW50JyxcbiAgICAnZmllbGRzOmN1c3RvbVVSTCcsXG4gICAgJ2ZpZWxkczpjaG9vc2VEb2N1bWVudFRvTGluaycsXG4gICAgJ2ZpZWxkczpvcGVuSW5OZXdUYWInLFxuICAgICdmaWVsZHM6ZW50ZXJVUkwnLFxuICAgICdmaWVsZHM6aW50ZXJuYWxMaW5rJyxcbiAgICAnZmllbGRzOmNob29zZUZyb21FeGlzdGluZycsXG4gICAgJ2ZpZWxkczpsaW5rVHlwZScsXG4gICAgJ2ZpZWxkczp0ZXh0VG9EaXNwbGF5JyxcbiAgICAnZmllbGRzOnNlYXJjaEZvckxhbmd1YWdlJyxcbiAgICAnZmllbGRzOmNvbGxhcHNlQWxsJyxcbiAgICAnZmllbGRzOmVkaXRMaW5rJyxcbiAgICAnZmllbGRzOmVkaXRSZWxhdGlvbnNoaXAnLFxuICAgICdmaWVsZHM6aXRlbXNBbmRNb3JlJyxcbiAgICAnZmllbGRzOmxhYmVsUmVsYXRpb25zaGlwJyxcbiAgICAnZmllbGRzOmxhdGl0dWRlJyxcbiAgICAnZmllbGRzOmxpbmtlZFRvJyxcbiAgICAnZmllbGRzOmxvbmdpdHVkZScsXG4gICAgJ2ZpZWxkczpwYXNzd29yZHNEb05vdE1hdGNoJyxcbiAgICAnZmllbGRzOnJlbW92ZVJlbGF0aW9uc2hpcCcsXG4gICAgJ2ZpZWxkczpyZW1vdmVVcGxvYWQnLFxuICAgICdmaWVsZHM6c2F2ZUNoYW5nZXMnLFxuICAgICdmaWVsZHM6c2VhcmNoRm9yQmxvY2snLFxuICAgICdmaWVsZHM6c2VsZWN0RmllbGRzVG9FZGl0JyxcbiAgICAnZmllbGRzOnNob3dBbGwnLFxuICAgICdmaWVsZHM6c3dhcFJlbGF0aW9uc2hpcCcsXG4gICAgJ2ZpZWxkczpzd2FwVXBsb2FkJyxcbiAgICAnZmllbGRzOnRvZ2dsZUJsb2NrJyxcbiAgICAnZmllbGRzOnVwbG9hZE5ld0xhYmVsJyxcbiAgICAnZm9sZGVyOmJ5Rm9sZGVyJyxcbiAgICAnZm9sZGVyOmJyb3dzZUJ5Rm9sZGVyJyxcbiAgICAnZm9sZGVyOmRlbGV0ZUZvbGRlcicsXG4gICAgJ2ZvbGRlcjpmb2xkZXJzJyxcbiAgICAnZm9sZGVyOmZvbGRlclR5cGVEZXNjcmlwdGlvbicsXG4gICAgJ2ZvbGRlcjpmb2xkZXJOYW1lJyxcbiAgICAnZm9sZGVyOml0ZW1zTW92ZWRUb0ZvbGRlcicsXG4gICAgJ2ZvbGRlcjppdGVtc01vdmVkVG9Sb290JyxcbiAgICAnZm9sZGVyOml0ZW1IYXNCZWVuTW92ZWQnLFxuICAgICdmb2xkZXI6aXRlbUhhc0JlZW5Nb3ZlZFRvUm9vdCcsXG4gICAgJ2ZvbGRlcjptb3ZlRm9sZGVyJyxcbiAgICAnZm9sZGVyOm1vdmluZ0Zyb21Gb2xkZXInLFxuICAgICdmb2xkZXI6bW92ZUl0ZW1zVG9Gb2xkZXJDb25maXJtYXRpb24nLFxuICAgICdmb2xkZXI6bW92ZUl0ZW1zVG9Sb290Q29uZmlybWF0aW9uJyxcbiAgICAnZm9sZGVyOm1vdmVJdGVtVG9Gb2xkZXJDb25maXJtYXRpb24nLFxuICAgICdmb2xkZXI6bW92ZUl0ZW1Ub1Jvb3RDb25maXJtYXRpb24nLFxuICAgICdmb2xkZXI6bm9Gb2xkZXInLFxuICAgICdmb2xkZXI6bmV3Rm9sZGVyJyxcbiAgICAnZm9sZGVyOnJlbmFtZUZvbGRlcicsXG4gICAgJ2ZvbGRlcjpzZWFyY2hCeU5hbWVJbkZvbGRlcicsXG4gICAgJ2ZvbGRlcjpzZWxlY3RGb2xkZXJGb3JJdGVtJyxcbiAgICAnZ2VuZXJhbDphbGwnLFxuICAgICdnZW5lcmFsOmFib3V0VG9EZWxldGVDb3VudCcsXG4gICAgJ2dlbmVyYWw6YWJvdXRUb0RlbGV0ZScsXG4gICAgJ2dlbmVyYWw6YWJvdXRUb1Blcm1hbmVudGx5RGVsZXRlJyxcbiAgICAnZ2VuZXJhbDphYm91dFRvUGVybWFuZW50bHlEZWxldGVUcmFzaCcsXG4gICAgJ2dlbmVyYWw6YWJvdXRUb1Jlc3RvcmUnLFxuICAgICdnZW5lcmFsOmFib3V0VG9SZXN0b3JlQXNEcmFmdCcsXG4gICAgJ2dlbmVyYWw6YWJvdXRUb1Jlc3RvcmVBc0RyYWZ0Q291bnQnLFxuICAgICdnZW5lcmFsOmFib3V0VG9SZXN0b3JlQ291bnQnLFxuICAgICdnZW5lcmFsOmFib3V0VG9UcmFzaCcsXG4gICAgJ2dlbmVyYWw6YWJvdXRUb1RyYXNoQ291bnQnLFxuICAgICdnZW5lcmFsOmFkZEJlbG93JyxcbiAgICAnZ2VuZXJhbDphZGRGaWx0ZXInLFxuICAgICdnZW5lcmFsOmFkbWluVGhlbWUnLFxuICAgICdnZW5lcmFsOmFsbENvbGxlY3Rpb25zJyxcbiAgICAnZ2VuZXJhbDphbmQnLFxuICAgICdnZW5lcmFsOmFub3RoZXJVc2VyJyxcbiAgICAnZ2VuZXJhbDphbm90aGVyVXNlclRha2VuT3ZlcicsXG4gICAgJ2dlbmVyYWw6YXBwbHlDaGFuZ2VzJyxcbiAgICAnZ2VuZXJhbDphc2NlbmRpbmcnLFxuICAgICdnZW5lcmFsOmF1dG9tYXRpYycsXG4gICAgJ2dlbmVyYWw6YmFja1RvRGFzaGJvYXJkJyxcbiAgICAnZ2VuZXJhbDpjYW5jZWwnLFxuICAgICdnZW5lcmFsOmNoYW5nZXNOb3RTYXZlZCcsXG4gICAgJ2dlbmVyYWw6Y2xvc2UnLFxuICAgICdnZW5lcmFsOmNvbGxhcHNlJyxcbiAgICAnZ2VuZXJhbDpjb2xsZWN0aW9ucycsXG4gICAgJ2dlbmVyYWw6Y29uZmlybU1vdmUnLFxuICAgICdnZW5lcmFsOnllcycsXG4gICAgJ2dlbmVyYWw6bm8nLFxuICAgICdnZW5lcmFsOmNvbHVtbnMnLFxuICAgICdnZW5lcmFsOmNvbHVtblRvU29ydCcsXG4gICAgJ2dlbmVyYWw6Y29uZmlybScsXG4gICAgJ2dlbmVyYWw6Y29uZmlybUNvcHknLFxuICAgICdnZW5lcmFsOmNvbmZpcm1EZWxldGlvbicsXG4gICAgJ2dlbmVyYWw6Y29uZmlybUR1cGxpY2F0aW9uJyxcbiAgICAnZ2VuZXJhbDpjb25maXJtUmVpbmRleCcsXG4gICAgJ2dlbmVyYWw6Y29uZmlybVJlaW5kZXhBbGwnLFxuICAgICdnZW5lcmFsOmNvbmZpcm1SZWluZGV4RGVzY3JpcHRpb24nLFxuICAgICdnZW5lcmFsOmNvbmZpcm1SZWluZGV4RGVzY3JpcHRpb25BbGwnLFxuICAgICdnZW5lcmFsOmNvbmZpcm1SZXN0b3JhdGlvbicsXG4gICAgJ2dlbmVyYWw6Y29waWVkJyxcbiAgICAnZ2VuZXJhbDpjbGVhcicsXG4gICAgJ2dlbmVyYWw6Y2xlYXJBbGwnLFxuICAgICdnZW5lcmFsOmNvcHknLFxuICAgICdnZW5lcmFsOmNvcHlGaWVsZCcsXG4gICAgJ2dlbmVyYWw6Y29weVJvdycsXG4gICAgJ2dlbmVyYWw6Y29weVdhcm5pbmcnLFxuICAgICdnZW5lcmFsOmNvcHlpbmcnLFxuICAgICdnZW5lcmFsOmNyZWF0ZScsXG4gICAgJ2dlbmVyYWw6Y3JlYXRlZCcsXG4gICAgJ2dlbmVyYWw6Y3JlYXRlZEF0JyxcbiAgICAnZ2VuZXJhbDpjcmVhdGVOZXcnLFxuICAgICdnZW5lcmFsOmNyZWF0ZU5ld0xhYmVsJyxcbiAgICAnZ2VuZXJhbDpjcmVhdGluZycsXG4gICAgJ2dlbmVyYWw6Y3JlYXRpbmdOZXdMYWJlbCcsXG4gICAgJ2dlbmVyYWw6Y3VycmVudGx5RWRpdGluZycsXG4gICAgJ2dlbmVyYWw6Y3VzdG9tJyxcbiAgICAnZ2VuZXJhbDpkYXJrJyxcbiAgICAnZ2VuZXJhbDpkYXNoYm9hcmQnLFxuICAgICdnZW5lcmFsOmRlbGV0ZScsXG4gICAgJ2dlbmVyYWw6ZGVsZXRlZCcsXG4gICAgJ2dlbmVyYWw6ZGVsZXRlZEF0JyxcbiAgICAnZ2VuZXJhbDpkZWxldGVQZXJtYW5lbnRseScsXG4gICAgJ2dlbmVyYWw6ZGVsZXRlTGFiZWwnLFxuICAgICdnZW5lcmFsOmRlbGV0ZWRTdWNjZXNzZnVsbHknLFxuICAgICdnZW5lcmFsOmRlbGV0ZWRDb3VudFN1Y2Nlc3NmdWxseScsXG4gICAgJ2dlbmVyYWw6ZGVsZXRpbmcnLFxuICAgICdnZW5lcmFsOmRlc2NlbmRpbmcnLFxuICAgICdnZW5lcmFsOmRlcHRoJyxcbiAgICAnZ2VuZXJhbDpkZXNlbGVjdEFsbFJvd3MnLFxuICAgICdnZW5lcmFsOmRvY3VtZW50JyxcbiAgICAnZ2VuZXJhbDpkb2N1bWVudElzVHJhc2hlZCcsXG4gICAgJ2dlbmVyYWw6ZG9jdW1lbnRMb2NrZWQnLFxuICAgICdnZW5lcmFsOmRvY3VtZW50TW9kaWZpZWQnLFxuICAgICdnZW5lcmFsOmRvY3VtZW50T3V0T2ZEYXRlJyxcbiAgICAnZ2VuZXJhbDpkb2N1bWVudHMnLFxuICAgICdnZW5lcmFsOmR1cGxpY2F0ZScsXG4gICAgJ2dlbmVyYWw6ZHVwbGljYXRlV2l0aG91dFNhdmluZycsXG4gICAgJ2dlbmVyYWw6ZWRpdCcsXG4gICAgJ2dlbmVyYWw6ZWRpdEFsbCcsXG4gICAgJ2dlbmVyYWw6ZWRpdGluZycsXG4gICAgJ2dlbmVyYWw6ZWRpdGluZ0xhYmVsJyxcbiAgICAnZ2VuZXJhbDplZGl0aW5nVGFrZW5PdmVyJyxcbiAgICAnZ2VuZXJhbDplZGl0TGFiZWwnLFxuICAgICdnZW5lcmFsOmVkaXRlZFNpbmNlJyxcbiAgICAnZ2VuZXJhbDplbWFpbCcsXG4gICAgJ2dlbmVyYWw6ZW1haWxBZGRyZXNzJyxcbiAgICAnZ2VuZXJhbDplbXB0eVRyYXNoJyxcbiAgICAnZ2VuZXJhbDplbXB0eVRyYXNoTGFiZWwnLFxuICAgICdnZW5lcmFsOmVudGVyQVZhbHVlJyxcbiAgICAnZ2VuZXJhbDplcnJvcicsXG4gICAgJ2dlbmVyYWw6ZXJyb3JzJyxcbiAgICAnZ2VuZXJhbDpmYWxsYmFja1RvRGVmYXVsdExvY2FsZScsXG4gICAgJ2dlbmVyYWw6ZmFsc2UnLFxuICAgICdnZW5lcmFsOmZpbHRlcnMnLFxuICAgICdnZW5lcmFsOmZpbHRlcldoZXJlJyxcbiAgICAnZ2VuZXJhbDpnbG9iYWxzJyxcbiAgICAnZ2VuZXJhbDpnb0JhY2snLFxuICAgICdnZW5lcmFsOmdyb3VwQnlMYWJlbCcsXG4gICAgJ2dlbmVyYWw6aXNFZGl0aW5nJyxcbiAgICAnZ2VuZXJhbDppdGVtJyxcbiAgICAnZ2VuZXJhbDppdGVtcycsXG4gICAgJ2dlbmVyYWw6bGFuZ3VhZ2UnLFxuICAgICdnZW5lcmFsOmxhc3RNb2RpZmllZCcsXG4gICAgJ2dlbmVyYWw6bGF5b3V0JyxcbiAgICAnZ2VuZXJhbDpsZWF2ZUFueXdheScsXG4gICAgJ2dlbmVyYWw6bGVhdmVXaXRob3V0U2F2aW5nJyxcbiAgICAnZ2VuZXJhbDpsaWdodCcsXG4gICAgJ2dlbmVyYWw6bGl2ZVByZXZpZXcnLFxuICAgICdnZW5lcmFsOmxvY2snLFxuICAgICdnZW5lcmFsOmV4aXRMaXZlUHJldmlldycsXG4gICAgJ2dlbmVyYWw6bG9hZGluZycsXG4gICAgJ2dlbmVyYWw6bG9jYWxlJyxcbiAgICAnZ2VuZXJhbDpsb2NhbGVzJyxcbiAgICAnZ2VuZXJhbDptZW51JyxcbiAgICAnZ2VuZXJhbDptb3JlT3B0aW9ucycsXG4gICAgJ2dlbmVyYWw6bW92ZScsXG4gICAgJ2dlbmVyYWw6bW92ZUNvbmZpcm0nLFxuICAgICdnZW5lcmFsOm1vdmVDb3VudCcsXG4gICAgJ2dlbmVyYWw6bW92ZURvd24nLFxuICAgICdnZW5lcmFsOm1vdmVVcCcsXG4gICAgJ2dlbmVyYWw6bW92aW5nJyxcbiAgICAnZ2VuZXJhbDptb3ZpbmdDb3VudCcsXG4gICAgJ2dlbmVyYWw6bmFtZScsXG4gICAgJ2dlbmVyYWw6bmV4dCcsXG4gICAgJ2dlbmVyYWw6bmV3TGFiZWwnLFxuICAgICdnZW5lcmFsOm5vRGF0ZVNlbGVjdGVkJyxcbiAgICAnZ2VuZXJhbDpub0ZpbHRlcnNTZXQnLFxuICAgICdnZW5lcmFsOm5vTGFiZWwnLFxuICAgICdnZW5lcmFsOm5vbmUnLFxuICAgICdnZW5lcmFsOm5vT3B0aW9ucycsXG4gICAgJ2dlbmVyYWw6bm9SZXN1bHRzJyxcbiAgICAnZ2VuZXJhbDpub1Jlc3VsdHNEZXNjcmlwdGlvbicsXG4gICAgJ2dlbmVyYWw6bm9SZXN1bHRzRm91bmQnLFxuICAgICdnZW5lcmFsOm5vdEZvdW5kJyxcbiAgICAnZ2VuZXJhbDpub3RoaW5nRm91bmQnLFxuICAgICdnZW5lcmFsOm5vVHJhc2hSZXN1bHRzJyxcbiAgICAnZ2VuZXJhbDpub1VwY29taW5nRXZlbnRzU2NoZWR1bGVkJyxcbiAgICAnZ2VuZXJhbDpub1ZhbHVlJyxcbiAgICAnZ2VuZXJhbDpvZicsXG4gICAgJ2dlbmVyYWw6b3BlbicsXG4gICAgJ2dlbmVyYWw6b25seScsXG4gICAgJ2dlbmVyYWw6b3InLFxuICAgICdnZW5lcmFsOm9yZGVyJyxcbiAgICAnZ2VuZXJhbDpvdmVyd3JpdGVFeGlzdGluZ0RhdGEnLFxuICAgICdnZW5lcmFsOnBhZ2VOb3RGb3VuZCcsXG4gICAgJ2dlbmVyYWw6cGFzc3dvcmQnLFxuICAgICdnZW5lcmFsOnBhc3RlRmllbGQnLFxuICAgICdnZW5lcmFsOnBhc3RlUm93JyxcbiAgICAnZ2VuZXJhbDpwYXlsb2FkU2V0dGluZ3MnLFxuICAgICdnZW5lcmFsOnBlcm1hbmVudGx5RGVsZXRlJyxcbiAgICAnZ2VuZXJhbDpwZXJtYW5lbnRseURlbGV0ZWRDb3VudFN1Y2Nlc3NmdWxseScsXG4gICAgJ2dlbmVyYWw6cGVyUGFnZScsXG4gICAgJ2dlbmVyYWw6cHJldmlvdXMnLFxuICAgICdnZW5lcmFsOnJlaW5kZXgnLFxuICAgICdnZW5lcmFsOnJlaW5kZXhpbmdBbGwnLFxuICAgICdnZW5lcmFsOnJlbG9hZERvY3VtZW50JyxcbiAgICAnZ2VuZXJhbDpyZW1vdmUnLFxuICAgICdnZW5lcmFsOnJlbmFtZScsXG4gICAgJ2dlbmVyYWw6cmVzZXQnLFxuICAgICdnZW5lcmFsOnJlc2V0UHJlZmVyZW5jZXMnLFxuICAgICdnZW5lcmFsOnJlc2V0UHJlZmVyZW5jZXNEZXNjcmlwdGlvbicsXG4gICAgJ2dlbmVyYWw6cmVzZXR0aW5nUHJlZmVyZW5jZXMnLFxuICAgICdnZW5lcmFsOnJlc3RvcmUnLFxuICAgICdnZW5lcmFsOnJlc3RvcmVBc1B1Ymxpc2hlZCcsXG4gICAgJ2dlbmVyYWw6cmVzdG9yZWRDb3VudFN1Y2Nlc3NmdWxseScsXG4gICAgJ2dlbmVyYWw6cmVzdG9yaW5nJyxcbiAgICAnZ2VuZXJhbDpyb3cnLFxuICAgICdnZW5lcmFsOnJvd3MnLFxuICAgICdnZW5lcmFsOnNhdmUnLFxuICAgICdnZW5lcmFsOnNhdmVDaGFuZ2VzJyxcbiAgICAnZ2VuZXJhbDpzY2hlZHVsZVB1Ymxpc2hGb3InLFxuICAgICdnZW5lcmFsOnNhdmluZycsXG4gICAgJ2dlbmVyYWw6c2VhcmNoQnknLFxuICAgICdnZW5lcmFsOnNlbGVjdCcsXG4gICAgJ2dlbmVyYWw6c2VsZWN0QWxsJyxcbiAgICAnZ2VuZXJhbDpzZWxlY3RBbGxSb3dzJyxcbiAgICAnZ2VuZXJhbDpzZWxlY3RlZENvdW50JyxcbiAgICAnZ2VuZXJhbDpzZWxlY3RMYWJlbCcsXG4gICAgJ2dlbmVyYWw6c2VsZWN0VmFsdWUnLFxuICAgICdnZW5lcmFsOnNob3dBbGxMYWJlbCcsXG4gICAgJ2dlbmVyYWw6c29ycnlOb3RGb3VuZCcsXG4gICAgJ2dlbmVyYWw6c29ydCcsXG4gICAgJ2dlbmVyYWw6c29ydEJ5TGFiZWxEaXJlY3Rpb24nLFxuICAgICdnZW5lcmFsOnN0YXlPblRoaXNQYWdlJyxcbiAgICAnZ2VuZXJhbDpzdWJtaXNzaW9uU3VjY2Vzc2Z1bCcsXG4gICAgJ2dlbmVyYWw6c3VibWl0JyxcbiAgICAnZ2VuZXJhbDpzdWJtaXR0aW5nJyxcbiAgICAnZ2VuZXJhbDpzdWNjZXNzJyxcbiAgICAnZ2VuZXJhbDpzdWNjZXNzZnVsbHlDcmVhdGVkJyxcbiAgICAnZ2VuZXJhbDpzdWNjZXNzZnVsbHlEdXBsaWNhdGVkJyxcbiAgICAnZ2VuZXJhbDpzdWNjZXNzZnVsbHlSZWluZGV4ZWQnLFxuICAgICdnZW5lcmFsOnRha2VPdmVyJyxcbiAgICAnZ2VuZXJhbDp0aGlzTGFuZ3VhZ2UnLFxuICAgICdnZW5lcmFsOnRpbWUnLFxuICAgICdnZW5lcmFsOnRpbWV6b25lJyxcbiAgICAnZ2VuZXJhbDp0aXRsZURlbGV0ZWQnLFxuICAgICdnZW5lcmFsOnRpdGxlVHJhc2hlZCcsXG4gICAgJ2dlbmVyYWw6dGl0bGVSZXN0b3JlZCcsXG4gICAgJ2dlbmVyYWw6dHJhc2gnLFxuICAgICdnZW5lcmFsOnRyYXNoZWRDb3VudFN1Y2Nlc3NmdWxseScsXG4gICAgJ2dlbmVyYWw6aW1wb3J0JyxcbiAgICAnZ2VuZXJhbDpleHBvcnQnLFxuICAgICdnZW5lcmFsOmFsbExvY2FsZXMnLFxuICAgICdnZW5lcmFsOnRydWUnLFxuICAgICdnZW5lcmFsOnVwY29taW5nRXZlbnRzJyxcbiAgICAnZ2VuZXJhbDp1c2VycycsXG4gICAgJ2dlbmVyYWw6dXNlcicsXG4gICAgJ2dlbmVyYWw6dXNlcm5hbWUnLFxuICAgICdnZW5lcmFsOnVuYXV0aG9yaXplZCcsXG4gICAgJ2dlbmVyYWw6dW5sb2NrJyxcbiAgICAnZ2VuZXJhbDp1bnNhdmVkQ2hhbmdlcycsXG4gICAgJ2dlbmVyYWw6dW5zYXZlZENoYW5nZXNEdXBsaWNhdGUnLFxuICAgICdnZW5lcmFsOnVudGl0bGVkJyxcbiAgICAnZ2VuZXJhbDp1cGRhdGVkQXQnLFxuICAgICdnZW5lcmFsOnVwZGF0ZWRMYWJlbFN1Y2Nlc3NmdWxseScsXG4gICAgJ2dlbmVyYWw6dXBkYXRlZENvdW50U3VjY2Vzc2Z1bGx5JyxcbiAgICAnZ2VuZXJhbDp1cGRhdGVGb3JFdmVyeW9uZScsXG4gICAgJ2dlbmVyYWw6dXBkYXRlZFN1Y2Nlc3NmdWxseScsXG4gICAgJ2dlbmVyYWw6dXBkYXRpbmcnLFxuICAgICdnZW5lcmFsOnZhbHVlJyxcbiAgICAnZ2VuZXJhbDp2aWV3aW5nJyxcbiAgICAnZ2VuZXJhbDp2aWV3UmVhZE9ubHknLFxuICAgICdnZW5lcmFsOnVwbG9hZGluZycsXG4gICAgJ2dlbmVyYWw6dXBsb2FkaW5nQnVsaycsXG4gICAgJ2dlbmVyYWw6d2VsY29tZScsXG4gICAgJ2xvY2FsaXphdGlvbjpsb2NhbGVUb1B1Ymxpc2gnLFxuICAgICdsb2NhbGl6YXRpb246Y29weVRvTG9jYWxlJyxcbiAgICAnbG9jYWxpemF0aW9uOmNvcHlGcm9tVG8nLFxuICAgICdsb2NhbGl6YXRpb246c2VsZWN0ZWRMb2NhbGVzJyxcbiAgICAnbG9jYWxpemF0aW9uOnNlbGVjdExvY2FsZVRvQ29weScsXG4gICAgJ2xvY2FsaXphdGlvbjpzZWxlY3RMb2NhbGVUb0R1cGxpY2F0ZScsXG4gICAgJ2xvY2FsaXphdGlvbjpjYW5ub3RDb3B5U2FtZUxvY2FsZScsXG4gICAgJ2xvY2FsaXphdGlvbjpjb3B5RnJvbScsXG4gICAgJ2xvY2FsaXphdGlvbjpjb3B5VG8nLFxuICAgICdvcGVyYXRvcnM6ZXF1YWxzJyxcbiAgICAnb3BlcmF0b3JzOmV4aXN0cycsXG4gICAgJ29wZXJhdG9yczppc05vdEluJyxcbiAgICAnb3BlcmF0b3JzOmlzSW4nLFxuICAgICdvcGVyYXRvcnM6Y29udGFpbnMnLFxuICAgICdvcGVyYXRvcnM6aXNMaWtlJyxcbiAgICAnb3BlcmF0b3JzOmlzTm90TGlrZScsXG4gICAgJ29wZXJhdG9yczppc05vdEVxdWFsVG8nLFxuICAgICdvcGVyYXRvcnM6bmVhcicsXG4gICAgJ29wZXJhdG9yczppc0dyZWF0ZXJUaGFuJyxcbiAgICAnb3BlcmF0b3JzOmlzTGVzc1RoYW4nLFxuICAgICdvcGVyYXRvcnM6aXNHcmVhdGVyVGhhbk9yRXF1YWxUbycsXG4gICAgJ29wZXJhdG9yczppc0xlc3NUaGFuT3JFcXVhbFRvJyxcbiAgICAnb3BlcmF0b3JzOndpdGhpbicsXG4gICAgJ29wZXJhdG9yczppbnRlcnNlY3RzJyxcbiAgICAndXBsb2FkOmFkZEZpbGUnLFxuICAgICd1cGxvYWQ6YWRkRmlsZXMnLFxuICAgICd1cGxvYWQ6YnVsa1VwbG9hZCcsXG4gICAgJ3VwbG9hZDpjcm9wJyxcbiAgICAndXBsb2FkOmNyb3BUb29sRGVzY3JpcHRpb24nLFxuICAgICd1cGxvYWQ6ZHJhZ0FuZERyb3AnLFxuICAgICd1cGxvYWQ6ZWRpdEltYWdlJyxcbiAgICAndXBsb2FkOmZpbGVUb1VwbG9hZCcsXG4gICAgJ3VwbG9hZDpmaWxlc1RvVXBsb2FkJyxcbiAgICAndXBsb2FkOmZvY2FsUG9pbnQnLFxuICAgICd1cGxvYWQ6Zm9jYWxQb2ludERlc2NyaXB0aW9uJyxcbiAgICAndXBsb2FkOmhlaWdodCcsXG4gICAgJ3VwbG9hZDpwYXN0ZVVSTCcsXG4gICAgJ3VwbG9hZDpwcmV2aWV3U2l6ZXMnLFxuICAgICd1cGxvYWQ6c2VsZWN0Q29sbGVjdGlvblRvQnJvd3NlJyxcbiAgICAndXBsb2FkOnNlbGVjdEZpbGUnLFxuICAgICd1cGxvYWQ6c2V0Q3JvcEFyZWEnLFxuICAgICd1cGxvYWQ6c2V0Rm9jYWxQb2ludCcsXG4gICAgJ3VwbG9hZDpzaXplc0ZvcicsXG4gICAgJ3VwbG9hZDpzaXplcycsXG4gICAgJ3VwbG9hZDp3aWR0aCcsXG4gICAgJ3VwbG9hZDpmaWxlTmFtZScsXG4gICAgJ3VwbG9hZDpmaWxlU2l6ZScsXG4gICAgJ3VwbG9hZDpub0ZpbGUnLFxuICAgICd1cGxvYWQ6ZG93bmxvYWQnLFxuICAgICd2YWxpZGF0aW9uOmVtYWlsQWRkcmVzcycsXG4gICAgJ3ZhbGlkYXRpb246ZW50ZXJOdW1iZXInLFxuICAgICd2YWxpZGF0aW9uOmZpZWxkSGFzTm8nLFxuICAgICd2YWxpZGF0aW9uOmdyZWF0ZXJUaGFuTWF4JyxcbiAgICAndmFsaWRhdGlvbjppbnZhbGlkSW5wdXQnLFxuICAgICd2YWxpZGF0aW9uOmludmFsaWRTZWxlY3Rpb24nLFxuICAgICd2YWxpZGF0aW9uOmludmFsaWRTZWxlY3Rpb25zJyxcbiAgICAndmFsaWRhdGlvbjpsYXRpdHVkZU91dE9mQm91bmRzJyxcbiAgICAndmFsaWRhdGlvbjpsZXNzVGhhbk1pbicsXG4gICAgJ3ZhbGlkYXRpb246bGltaXRSZWFjaGVkJyxcbiAgICAndmFsaWRhdGlvbjpsb25naXR1ZGVPdXRPZkJvdW5kcycsXG4gICAgJ3ZhbGlkYXRpb246aW52YWxpZEJsb2NrJyxcbiAgICAndmFsaWRhdGlvbjppbnZhbGlkQmxvY2tzJyxcbiAgICAndmFsaWRhdGlvbjpsb25nZXJUaGFuTWluJyxcbiAgICAndmFsaWRhdGlvbjpub3RWYWxpZERhdGUnLFxuICAgICd2YWxpZGF0aW9uOnJlcXVpcmVkJyxcbiAgICAndmFsaWRhdGlvbjpyZXF1aXJlc0F0TGVhc3QnLFxuICAgICd2YWxpZGF0aW9uOnJlcXVpcmVzTm9Nb3JlVGhhbicsXG4gICAgJ3ZhbGlkYXRpb246cmVxdWlyZXNUd29OdW1iZXJzJyxcbiAgICAndmFsaWRhdGlvbjpzaG9ydGVyVGhhbk1heCcsXG4gICAgJ3ZhbGlkYXRpb246dHJ1ZU9yRmFsc2UnLFxuICAgICd2YWxpZGF0aW9uOnRpbWV6b25lUmVxdWlyZWQnLFxuICAgICd2YWxpZGF0aW9uOnVzZXJuYW1lJyxcbiAgICAndmFsaWRhdGlvbjp2YWxpZFVwbG9hZElEJyxcbiAgICAndmVyc2lvbjphYm91dFRvUHVibGlzaFNlbGVjdGlvbicsXG4gICAgJ3ZlcnNpb246YWJvdXRUb1Jlc3RvcmUnLFxuICAgICd2ZXJzaW9uOmFib3V0VG9SZXN0b3JlR2xvYmFsJyxcbiAgICAndmVyc2lvbjphYm91dFRvUmV2ZXJ0VG9QdWJsaXNoZWQnLFxuICAgICd2ZXJzaW9uOmFib3V0VG9VbnB1Ymxpc2gnLFxuICAgICd2ZXJzaW9uOmFib3V0VG9VbnB1Ymxpc2hJbicsXG4gICAgJ3ZlcnNpb246YWJvdXRUb1VucHVibGlzaFNlbGVjdGlvbicsXG4gICAgJ3ZlcnNpb246YXV0b3NhdmUnLFxuICAgICd2ZXJzaW9uOmF1dG9zYXZlZFN1Y2Nlc3NmdWxseScsXG4gICAgJ3ZlcnNpb246YXV0b3NhdmVkVmVyc2lvbicsXG4gICAgJ3ZlcnNpb246dmVyc2lvbkFnbycsXG4gICAgJ3ZlcnNpb246bW9yZVZlcnNpb25zJyxcbiAgICAndmVyc2lvbjpjaGFuZ2VkJyxcbiAgICAndmVyc2lvbjpjaGFuZ2VkRmllbGRzQ291bnQnLFxuICAgICd2ZXJzaW9uOmNvbmZpcm1SZXZlcnRUb1NhdmVkJyxcbiAgICAndmVyc2lvbjpjb21wYXJlVmVyc2lvbnMnLFxuICAgICd2ZXJzaW9uOmNvbXBhcmluZ0FnYWluc3QnLFxuICAgICd2ZXJzaW9uOmN1cnJlbnRseVZpZXdpbmcnLFxuICAgICd2ZXJzaW9uOmNvbmZpcm1QdWJsaXNoJyxcbiAgICAndmVyc2lvbjpjb25maXJtVW5wdWJsaXNoJyxcbiAgICAndmVyc2lvbjpjb25maXJtVmVyc2lvblJlc3RvcmF0aW9uJyxcbiAgICAndmVyc2lvbjpjdXJyZW50RHJhZnQnLFxuICAgICd2ZXJzaW9uOmN1cnJlbnRQdWJsaXNoZWRWZXJzaW9uJyxcbiAgICAndmVyc2lvbjpjdXJyZW50bHlQdWJsaXNoZWQnLFxuICAgICd2ZXJzaW9uOmRyYWZ0JyxcbiAgICAndmVyc2lvbjpkcmFmdEhhc1B1Ymxpc2hlZFZlcnNpb24nLFxuICAgICd2ZXJzaW9uOmRyYWZ0U2F2ZWRTdWNjZXNzZnVsbHknLFxuICAgICd2ZXJzaW9uOmxhc3RTYXZlZEFnbycsXG4gICAgJ3ZlcnNpb246bW9kaWZpZWRPbmx5JyxcbiAgICAndmVyc2lvbjpub0Z1cnRoZXJWZXJzaW9uc0ZvdW5kJyxcbiAgICAndmVyc2lvbjpub0xhYmVsR3JvdXAnLFxuICAgICd2ZXJzaW9uOm5vUm93c0ZvdW5kJyxcbiAgICAndmVyc2lvbjpub1Jvd3NTZWxlY3RlZCcsXG4gICAgJ3ZlcnNpb246cHJldmlldycsXG4gICAgJ3ZlcnNpb246cHJldmlvdXNseURyYWZ0JyxcbiAgICAndmVyc2lvbjpwcmV2aW91c2x5UHVibGlzaGVkJyxcbiAgICAndmVyc2lvbjpwcmV2aW91c1ZlcnNpb24nLFxuICAgICd2ZXJzaW9uOnByb2JsZW1SZXN0b3JpbmdWZXJzaW9uJyxcbiAgICAndmVyc2lvbjpwdWJsaXNoJyxcbiAgICAndmVyc2lvbjpwdWJsaXNoQWxsTG9jYWxlcycsXG4gICAgJ3ZlcnNpb246cHVibGlzaENoYW5nZXMnLFxuICAgICd2ZXJzaW9uOnB1Ymxpc2hlZCcsXG4gICAgJ3ZlcnNpb246cHVibGlzaEluJyxcbiAgICAndmVyc2lvbjpwdWJsaXNoaW5nJyxcbiAgICAndmVyc2lvbjpyZXN0b3JlQXNEcmFmdCcsXG4gICAgJ3ZlcnNpb246cmVzdG9yZWRTdWNjZXNzZnVsbHknLFxuICAgICd2ZXJzaW9uOnJlc3RvcmVUaGlzVmVyc2lvbicsXG4gICAgJ3ZlcnNpb246cmVzdG9yaW5nJyxcbiAgICAndmVyc2lvbjpyZXZlcnRpbmcnLFxuICAgICd2ZXJzaW9uOnJldmVydFVuc3VjY2Vzc2Z1bCcsXG4gICAgJ3ZlcnNpb246cmV2ZXJ0VG9QdWJsaXNoZWQnLFxuICAgICd2ZXJzaW9uOnNhdmVEcmFmdCcsXG4gICAgJ3ZlcnNpb246c2NoZWR1bGVkU3VjY2Vzc2Z1bGx5JyxcbiAgICAndmVyc2lvbjpzY2hlZHVsZVB1Ymxpc2gnLFxuICAgICd2ZXJzaW9uOnNlbGVjdExvY2FsZXMnLFxuICAgICd2ZXJzaW9uOnNlbGVjdFZlcnNpb25Ub0NvbXBhcmUnLFxuICAgICd2ZXJzaW9uOnNob3dMb2NhbGVzJyxcbiAgICAndmVyc2lvbjpzcGVjaWZpY1ZlcnNpb24nLFxuICAgICd2ZXJzaW9uOnN0YXR1cycsXG4gICAgJ3ZlcnNpb246dHlwZScsXG4gICAgJ3ZlcnNpb246dW5wdWJsaXNoJyxcbiAgICAndmVyc2lvbjp1bnB1Ymxpc2hlZCcsXG4gICAgJ3ZlcnNpb246dW5wdWJsaXNoSW4nLFxuICAgICd2ZXJzaW9uOnVucHVibGlzaGluZycsXG4gICAgJ3ZlcnNpb246dW5wdWJsaXNoZWRTdWNjZXNzZnVsbHknLFxuICAgICd2ZXJzaW9uOnZlcnNpb25JRCcsXG4gICAgJ3ZlcnNpb246dmVyc2lvbicsXG4gICAgJ3ZlcnNpb246dmVyc2lvbnMnLFxuICAgICd2ZXJzaW9uOnZpZXdpbmdWZXJzaW9uJyxcbiAgICAndmVyc2lvbjp2aWV3aW5nVmVyc2lvbkdsb2JhbCcsXG4gICAgJ3ZlcnNpb246dmlld2luZ1ZlcnNpb25zJyxcbiAgICAndmVyc2lvbjp2aWV3aW5nVmVyc2lvbnNHbG9iYWwnXG5dKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50S2V5cy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/clientKeys.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/importDateFNSLocale.js": /*!******************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/importDateFNSLocale.js ***! \******************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ importDateFNSLocale: () => (/* binding */ importDateFNSLocale)\n/* harmony export */ });\nconst importDateFNSLocale = async (locale)=>{\n let result;\n switch(locale){\n case 'ar':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_ar_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/ar */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ar.js\"))).ar;\n break;\n case 'az':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_az_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/az */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/az.js\"))).az;\n break;\n case 'bg':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_bg_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/bg */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/bg.js\"))).bg;\n break;\n case 'bn-BD':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_bn_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/bn */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/bn.js\"))).bn;\n break;\n case 'bn-IN':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_bn_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/bn */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/bn.js\"))).bn;\n break;\n case 'ca':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_ca_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/ca */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ca.js\"))).ca;\n break;\n case 'cs':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_cs_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/cs */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/cs.js\"))).cs;\n break;\n case 'da':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_da_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/da */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/da.js\"))).da;\n break;\n case 'de':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_de_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/de */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/de.js\"))).de;\n break;\n case 'en-US':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_en-US_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/en-US */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US.js\"))).enUS;\n break;\n case 'es':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_es_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/es */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/es.js\"))).es;\n break;\n case 'et':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_et_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/et */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/et.js\"))).et;\n break;\n case 'fa-IR':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_fa-IR_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/fa-IR */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/fa-IR.js\"))).faIR;\n break;\n case 'fr':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_fr_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/fr */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/fr.js\"))).fr;\n break;\n case 'he':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_he_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/he */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/he.js\"))).he;\n break;\n case 'hr':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_hr_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/hr */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/hr.js\"))).hr;\n break;\n case 'hu':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_hu_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/hu */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/hu.js\"))).hu;\n break;\n case 'id':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_id_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/id */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/id.js\"))).id;\n break;\n case 'is':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_is_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/is */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/is.js\"))).is;\n break;\n case 'it':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_it_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/it */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/it.js\"))).it;\n break;\n case 'ja':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_ja_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/ja */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ja.js\"))).ja;\n break;\n case 'ko':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_ko_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/ko */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ko.js\"))).ko;\n break;\n case 'lt':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_lt_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/lt */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/lt.js\"))).lt;\n break;\n case 'lv':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_lv_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/lv */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/lv.js\"))).lv;\n break;\n case 'nb':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_nb_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/nb */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/nb.js\"))).nb;\n break;\n case 'nl':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_nl_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/nl */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/nl.js\"))).nl;\n break;\n case 'pl':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_pl_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/pl */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/pl.js\"))).pl;\n break;\n case 'pt':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_pt_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/pt */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/pt.js\"))).pt;\n break;\n case 'ro':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_ro_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/ro */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ro.js\"))).ro;\n break;\n case 'rs':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_sr_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/sr */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/sr.js\"))).sr;\n break;\n case 'rs-Latin':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_sr-Latn_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/sr-Latn */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/sr-Latn.js\"))).srLatn;\n break;\n case 'ru':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_ru_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/ru */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ru.js\"))).ru;\n break;\n case 'sk':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_sk_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/sk */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/sk.js\"))).sk;\n break;\n case 'sl-SI':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_sl_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/sl */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/sl.js\"))).sl;\n break;\n case 'sv':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_sv_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/sv */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/sv.js\"))).sv;\n break;\n case 'ta':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_ta_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/ta */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ta.js\"))).ta;\n break;\n case 'th':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_th_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/th */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/th.js\"))).th;\n break;\n case 'tr':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_tr_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/tr */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/tr.js\"))).tr;\n break;\n case 'uk':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_uk_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/uk */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/uk.js\"))).uk;\n break;\n case 'vi':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_vi_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/vi */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/vi.js\"))).vi;\n break;\n case 'zh-CN':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_zh-CN_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/zh-CN */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/zh-CN.js\"))).zhCN;\n break;\n case 'zh-TW':\n result = (await __webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_date-fns_4_1_0_node_modules_date-fns_locale_zh-TW_js\").then(__webpack_require__.bind(__webpack_require__, /*! date-fns/locale/zh-TW */ \"(app-pages-browser)/./node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/zh-TW.js\"))).zhTW;\n break;\n }\n // @ts-expect-error - I'm not sure if this is still necessary.\n if (result?.default) {\n // @ts-expect-error - I'm not sure if this is still necessary.\n return result.default;\n }\n return result;\n};\n\n//# sourceMappingURL=importDateFNSLocale.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC9pbXBvcnREYXRlRk5TTG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QixvVEFBK0I7QUFDM0Q7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QixvVEFBK0I7QUFDM0Q7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwwVEFBaUM7QUFDN0Q7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QiwyU0FBNEI7QUFDeEQ7QUFDQTtBQUNBLDRCQUE0QixvVEFBK0I7QUFDM0Q7QUFDQTtBQUNBLDRCQUE0QixvVEFBK0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BwYXlsb2FkY21zK3RyYW5zbGF0aW9uc0AzLjgxLjAvbm9kZV9tb2R1bGVzL0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucy9kaXN0L2ltcG9ydERhdGVGTlNMb2NhbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGltcG9ydERhdGVGTlNMb2NhbGUgPSBhc3luYyAobG9jYWxlKT0+e1xuICAgIGxldCByZXN1bHQ7XG4gICAgc3dpdGNoKGxvY2FsZSl7XG4gICAgICAgIGNhc2UgJ2FyJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9hcicpKS5hcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdheic6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvYXonKSkuYXo7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmcnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2JnJykpLmJnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JuLUJEJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9ibicpKS5ibjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdibi1JTic6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvYm4nKSkuYm47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2EnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2NhJykpLmNhO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NzJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9jcycpKS5jcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYSc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvZGEnKSkuZGE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGUnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2RlJykpLmRlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VuLVVTJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9lbi1VUycpKS5lblVTO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VzJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9lcycpKS5lcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdldCc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvZXQnKSkuZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZmEtSVInOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2ZhLUlSJykpLmZhSVI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZnInOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2ZyJykpLmZyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hlJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9oZScpKS5oZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdocic6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvaHInKSkuaHI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaHUnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2h1JykpLmh1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2lkJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9pZCcpKS5pZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpcyc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvaXMnKSkuaXM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaXQnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2l0JykpLml0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2phJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9qYScpKS5qYTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdrbyc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUva28nKSkua287XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbHQnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL2x0JykpLmx0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2x2JzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9sdicpKS5sdjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICduYic6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvbmInKSkubmI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmwnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL25sJykpLm5sO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BsJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9wbCcpKS5wbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwdCc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvcHQnKSkucHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncm8nOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL3JvJykpLnJvO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JzJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9zcicpKS5zcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdycy1MYXRpbic6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvc3ItTGF0bicpKS5zckxhdG47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncnUnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL3J1JykpLnJ1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NrJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS9zaycpKS5zaztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzbC1TSSc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvc2wnKSkuc2w7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3YnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL3N2JykpLnN2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RhJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS90YScpKS50YTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0aCc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvdGgnKSkudGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHInOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL3RyJykpLnRyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VrJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IChhd2FpdCBpbXBvcnQoJ2RhdGUtZm5zL2xvY2FsZS91aycpKS51aztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd2aSc6XG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgaW1wb3J0KCdkYXRlLWZucy9sb2NhbGUvdmknKSkudmk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnemgtQ04nOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL3poLUNOJykpLnpoQ047XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnemgtVFcnOlxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IGltcG9ydCgnZGF0ZS1mbnMvbG9jYWxlL3poLVRXJykpLnpoVFc7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIEknbSBub3Qgc3VyZSBpZiB0aGlzIGlzIHN0aWxsIG5lY2Vzc2FyeS5cbiAgICBpZiAocmVzdWx0Py5kZWZhdWx0KSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBJJ20gbm90IHN1cmUgaWYgdGhpcyBpcyBzdGlsbCBuZWNlc3NhcnkuXG4gICAgICAgIHJldHVybiByZXN1bHQuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltcG9ydERhdGVGTlNMb2NhbGUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/importDateFNSLocale.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/deepMergeSimple.js": /*!************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/deepMergeSimple.js ***! \************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepMergeSimple: () => (/* binding */ deepMergeSimple)\n/* harmony export */ });\n/**\n * Very simple, but fast deepMerge implementation. Only deepMerges objects, not arrays and clones everything.\n * Do not use this if your object contains any complex objects like React Components, or if you would like to combine Arrays.\n * If you only have simple objects and need a fast deepMerge, this is the function for you.\n *\n * obj2 takes precedence over obj1 - thus if obj2 has a key that obj1 also has, obj2's value will be used.\n *\n * @param obj1 base object\n * @param obj2 object to merge \"into\" obj1\n */ function deepMergeSimple(obj1, obj2) {\n const output = {\n ...obj1\n };\n for(const key in obj2){\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (typeof obj2[key] === 'object' && !Array.isArray(obj2[key]) && obj1[key]) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n output[key] = deepMergeSimple(obj1[key], obj2[key]);\n } else {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n output[key] = obj2[key];\n }\n }\n }\n return output;\n}\n\n//# sourceMappingURL=deepMergeSimple.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC91dGlsaXRpZXMvZGVlcE1lcmdlU2ltcGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BwYXlsb2FkY21zK3RyYW5zbGF0aW9uc0AzLjgxLjAvbm9kZV9tb2R1bGVzL0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucy9kaXN0L3V0aWxpdGllcy9kZWVwTWVyZ2VTaW1wbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZXJ5IHNpbXBsZSwgYnV0IGZhc3QgZGVlcE1lcmdlIGltcGxlbWVudGF0aW9uLiBPbmx5IGRlZXBNZXJnZXMgb2JqZWN0cywgbm90IGFycmF5cyBhbmQgY2xvbmVzIGV2ZXJ5dGhpbmcuXG4gKiBEbyBub3QgdXNlIHRoaXMgaWYgeW91ciBvYmplY3QgY29udGFpbnMgYW55IGNvbXBsZXggb2JqZWN0cyBsaWtlIFJlYWN0IENvbXBvbmVudHMsIG9yIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGNvbWJpbmUgQXJyYXlzLlxuICogSWYgeW91IG9ubHkgaGF2ZSBzaW1wbGUgb2JqZWN0cyBhbmQgbmVlZCBhIGZhc3QgZGVlcE1lcmdlLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiBmb3IgeW91LlxuICpcbiAqIG9iajIgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG9iajEgLSB0aHVzIGlmIG9iajIgaGFzIGEga2V5IHRoYXQgb2JqMSBhbHNvIGhhcywgb2JqMidzIHZhbHVlIHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAcGFyYW0gb2JqMSBiYXNlIG9iamVjdFxuICogQHBhcmFtIG9iajIgb2JqZWN0IHRvIG1lcmdlIFwiaW50b1wiIG9iajFcbiAqLyBleHBvcnQgZnVuY3Rpb24gZGVlcE1lcmdlU2ltcGxlKG9iajEsIG9iajIpIHtcbiAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgIC4uLm9iajFcbiAgICB9O1xuICAgIGZvcihjb25zdCBrZXkgaW4gb2JqMil7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqMiwga2V5KSkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHZlc3RpZ2VzIG9mIHdoZW4gdHNjb25maWcgd2FzIG5vdCBzdHJpY3QuIEZlZWwgZnJlZSB0byBpbXByb3ZlXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iajJba2V5XSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob2JqMltrZXldKSAmJiBvYmoxW2tleV0pIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdmVzdGlnZXMgb2Ygd2hlbiB0c2NvbmZpZyB3YXMgbm90IHN0cmljdC4gRmVlbCBmcmVlIHRvIGltcHJvdmVcbiAgICAgICAgICAgICAgICBvdXRwdXRba2V5XSA9IGRlZXBNZXJnZVNpbXBsZShvYmoxW2tleV0sIG9iajJba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB2ZXN0aWdlcyBvZiB3aGVuIHRzY29uZmlnIHdhcyBub3Qgc3RyaWN0LiBGZWVsIGZyZWUgdG8gaW1wcm92ZVxuICAgICAgICAgICAgICAgIG91dHB1dFtrZXldID0gb2JqMltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZXBNZXJnZVNpbXBsZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/deepMergeSimple.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslation.js": /*!***********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslation.js ***! \***********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getTranslation: () => (/* binding */ getTranslation)\n/* harmony export */ });\nconst getTranslation = (label, /**\n * @todo type as I18nClient in 4.0\n */ i18n)=>{\n // If it's a Record, look for translation. If string or React Element, pass through\n if (typeof label === 'object' && !Object.prototype.hasOwnProperty.call(label, '$$typeof')) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (label[i18n.language]) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return label[i18n.language];\n }\n let fallbacks = [];\n if (typeof i18n.fallbackLanguage === 'string') {\n fallbacks = [\n i18n.fallbackLanguage\n ];\n } else if (Array.isArray(i18n.fallbackLanguage)) {\n fallbacks = i18n.fallbackLanguage;\n }\n const fallbackLang = fallbacks.find((language)=>label[language]);\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n return fallbackLang && label[fallbackLang] ? label[fallbackLang] : label[Object.keys(label)[0]];\n }\n if (typeof label === 'function') {\n return label({\n i18n: i18n,\n t: i18n.t\n });\n }\n // If it's a React Element or string, then we should just pass it through\n return label;\n};\n\n//# sourceMappingURL=getTranslation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC91dGlsaXRpZXMvZ2V0VHJhbnNsYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC91dGlsaXRpZXMvZ2V0VHJhbnNsYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGdldFRyYW5zbGF0aW9uID0gKGxhYmVsLCAvKipcbiAgICogQHRvZG8gdHlwZSBhcyBJMThuQ2xpZW50IGluIDQuMFxuICAgKi8gaTE4bik9PntcbiAgICAvLyBJZiBpdCdzIGEgUmVjb3JkLCBsb29rIGZvciB0cmFuc2xhdGlvbi4gSWYgc3RyaW5nIG9yIFJlYWN0IEVsZW1lbnQsIHBhc3MgdGhyb3VnaFxuICAgIGlmICh0eXBlb2YgbGFiZWwgPT09ICdvYmplY3QnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGFiZWwsICckJHR5cGVvZicpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB2ZXN0aWdlcyBvZiB3aGVuIHRzY29uZmlnIHdhcyBub3Qgc3RyaWN0LiBGZWVsIGZyZWUgdG8gaW1wcm92ZVxuICAgICAgICBpZiAobGFiZWxbaTE4bi5sYW5ndWFnZV0pIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB2ZXN0aWdlcyBvZiB3aGVuIHRzY29uZmlnIHdhcyBub3Qgc3RyaWN0LiBGZWVsIGZyZWUgdG8gaW1wcm92ZVxuICAgICAgICAgICAgcmV0dXJuIGxhYmVsW2kxOG4ubGFuZ3VhZ2VdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmYWxsYmFja3MgPSBbXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpMThuLmZhbGxiYWNrTGFuZ3VhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmYWxsYmFja3MgPSBbXG4gICAgICAgICAgICAgICAgaTE4bi5mYWxsYmFja0xhbmd1YWdlXG4gICAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaTE4bi5mYWxsYmFja0xhbmd1YWdlKSkge1xuICAgICAgICAgICAgZmFsbGJhY2tzID0gaTE4bi5mYWxsYmFja0xhbmd1YWdlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrTGFuZyA9IGZhbGxiYWNrcy5maW5kKChsYW5ndWFnZSk9PmxhYmVsW2xhbmd1YWdlXSk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB2ZXN0aWdlcyBvZiB3aGVuIHRzY29uZmlnIHdhcyBub3Qgc3RyaWN0LiBGZWVsIGZyZWUgdG8gaW1wcm92ZVxuICAgICAgICByZXR1cm4gZmFsbGJhY2tMYW5nICYmIGxhYmVsW2ZhbGxiYWNrTGFuZ10gPyBsYWJlbFtmYWxsYmFja0xhbmddIDogbGFiZWxbT2JqZWN0LmtleXMobGFiZWwpWzBdXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsYWJlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbGFiZWwoe1xuICAgICAgICAgICAgaTE4bjogaTE4bixcbiAgICAgICAgICAgIHQ6IGkxOG4udFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gSWYgaXQncyBhIFJlYWN0IEVsZW1lbnQgb3Igc3RyaW5nLCB0aGVuIHdlIHNob3VsZCBqdXN0IHBhc3MgaXQgdGhyb3VnaFxuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldFRyYW5zbGF0aW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslation.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslationsByContext.js": /*!*********************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslationsByContext.js ***! \*********************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getTranslationsByContext: () => (/* binding */ getTranslationsByContext)\n/* harmony export */ });\n/* harmony import */ var _clientKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../clientKeys.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/clientKeys.js\");\n\nfunction filterKeys(obj, parentGroupKey = '', keys) {\n const result = {};\n for (const [namespaceKey, value] of Object.entries(obj)){\n // Skip $schema key\n if (namespaceKey === '$schema') {\n result[namespaceKey] = value;\n continue;\n }\n if (typeof value === 'object') {\n const filteredObject = filterKeys(value, namespaceKey, keys);\n if (Object.keys(filteredObject).length > 0) {\n result[namespaceKey] = filteredObject;\n }\n } else {\n for (const key of keys){\n const [groupKey, selector] = key.split(':');\n if (parentGroupKey === groupKey) {\n if (namespaceKey === selector) {\n result[selector] = value;\n } else {\n const pluralKeys = [\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n 'other'\n ];\n pluralKeys.forEach((pluralKey)=>{\n if (namespaceKey === `${selector}_${pluralKey}`) {\n result[`${selector}_${pluralKey}`] = value;\n }\n });\n }\n }\n }\n }\n }\n return result;\n}\nfunction sortObject(obj) {\n const sortedObject = {};\n Object.keys(obj).sort().forEach((key)=>{\n if (typeof obj[key] === 'object') {\n sortedObject[key] = sortObject(obj[key]);\n } else {\n sortedObject[key] = obj[key];\n }\n });\n return sortedObject;\n}\nconst getTranslationsByContext = (selectedLanguage, context)=>{\n if (context === 'client') {\n return sortObject(filterKeys(selectedLanguage.translations, '', _clientKeys_js__WEBPACK_IMPORTED_MODULE_0__.clientTranslationKeys));\n } else {\n return selectedLanguage.translations;\n }\n};\n\n//# sourceMappingURL=getTranslationsByContext.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC91dGlsaXRpZXMvZ2V0VHJhbnNsYXRpb25zQnlDb250ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXlEO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELFNBQVMsR0FBRyxVQUFVO0FBQzFFLDBDQUEwQyxTQUFTLEdBQUcsVUFBVTtBQUNoRTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBLHdFQUF3RSxpRUFBcUI7QUFDN0YsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC91dGlsaXRpZXMvZ2V0VHJhbnNsYXRpb25zQnlDb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsaWVudFRyYW5zbGF0aW9uS2V5cyB9IGZyb20gJy4uL2NsaWVudEtleXMuanMnO1xuZnVuY3Rpb24gZmlsdGVyS2V5cyhvYmosIHBhcmVudEdyb3VwS2V5ID0gJycsIGtleXMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lc3BhY2VLZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKXtcbiAgICAgICAgLy8gU2tpcCAkc2NoZW1hIGtleVxuICAgICAgICBpZiAobmFtZXNwYWNlS2V5ID09PSAnJHNjaGVtYScpIHtcbiAgICAgICAgICAgIHJlc3VsdFtuYW1lc3BhY2VLZXldID0gdmFsdWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3QgPSBmaWx0ZXJLZXlzKHZhbHVlLCBuYW1lc3BhY2VLZXksIGtleXMpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcmVkT2JqZWN0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25hbWVzcGFjZUtleV0gPSBmaWx0ZXJlZE9iamVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpe1xuICAgICAgICAgICAgICAgIGNvbnN0IFtncm91cEtleSwgc2VsZWN0b3JdID0ga2V5LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEdyb3VwS2V5ID09PSBncm91cEtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZXNwYWNlS2V5ID09PSBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3NlbGVjdG9yXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGx1cmFsS2V5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemVybycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R3bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hbnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdGhlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVyYWxLZXlzLmZvckVhY2goKHBsdXJhbEtleSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZXNwYWNlS2V5ID09PSBgJHtzZWxlY3Rvcn1fJHtwbHVyYWxLZXl9YCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbYCR7c2VsZWN0b3J9XyR7cGx1cmFsS2V5fWBdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNvcnRPYmplY3Qob2JqKSB7XG4gICAgY29uc3Qgc29ydGVkT2JqZWN0ID0ge307XG4gICAgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc29ydGVkT2JqZWN0W2tleV0gPSBzb3J0T2JqZWN0KG9ialtrZXldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvcnRlZE9iamVjdFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc29ydGVkT2JqZWN0O1xufVxuZXhwb3J0IGNvbnN0IGdldFRyYW5zbGF0aW9uc0J5Q29udGV4dCA9IChzZWxlY3RlZExhbmd1YWdlLCBjb250ZXh0KT0+e1xuICAgIGlmIChjb250ZXh0ID09PSAnY2xpZW50Jykge1xuICAgICAgICByZXR1cm4gc29ydE9iamVjdChmaWx0ZXJLZXlzKHNlbGVjdGVkTGFuZ3VhZ2UudHJhbnNsYXRpb25zLCAnJywgY2xpZW50VHJhbnNsYXRpb25LZXlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkTGFuZ3VhZ2UudHJhbnNsYXRpb25zO1xuICAgIH1cbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldFRyYW5zbGF0aW9uc0J5Q29udGV4dC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslationsByContext.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/init.js": /*!*************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/init.js ***! \*************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getTranslationString: () => (/* binding */ getTranslationString),\n/* harmony export */ initI18n: () => (/* binding */ initI18n),\n/* harmony export */ t: () => (/* binding */ t)\n/* harmony export */ });\n/* harmony import */ var _importDateFNSLocale_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../importDateFNSLocale.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/importDateFNSLocale.js\");\n/* harmony import */ var _deepMergeSimple_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./deepMergeSimple.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/deepMergeSimple.js\");\n/* harmony import */ var _getTranslationsByContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getTranslationsByContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslationsByContext.js\");\n\n\n\n/**\n * @function getTranslationString\n *\n * Gets a translation string from a translations object\n *\n * @returns string\n */ const getTranslationString = ({ count, key, translations })=>{\n const keys = key.split(':');\n let keySuffix = '';\n const translation = keys.reduce((acc, key, index)=>{\n if (typeof acc === 'string') {\n return acc;\n }\n if (typeof count === 'number') {\n if (count === 0 && `${key}_zero` in acc) {\n keySuffix = '_zero';\n } else if (count === 1 && `${key}_one` in acc) {\n keySuffix = '_one';\n } else if (count === 2 && `${key}_two` in acc) {\n keySuffix = '_two';\n } else if (count > 5 && `${key}_many` in acc) {\n keySuffix = '_many';\n } else if (count > 2 && count <= 5 && `${key}_few` in acc) {\n keySuffix = '_few';\n } else if (`${key}_other` in acc) {\n keySuffix = '_other';\n }\n }\n let keyToUse = key;\n if (index === keys.length - 1 && keySuffix) {\n keyToUse = `${key}${keySuffix}`;\n }\n if (acc && keyToUse in acc) {\n return acc[keyToUse];\n }\n return undefined;\n }, translations);\n if (!translation) {\n console.log('key not found:', key);\n }\n return translation || key;\n};\n/**\n * @function replaceVars\n *\n * Replaces variables in a translation string with values from an object\n *\n * @returns string\n */ const replaceVars = ({ translationString, vars })=>{\n const parts = translationString.split(/(\\{\\{.*?\\}\\})/);\n return parts.map((part)=>{\n if (part.startsWith('{{') && part.endsWith('}}')) {\n const placeholder = part.substring(2, part.length - 2).trim();\n const value = vars[placeholder];\n return value !== undefined && value !== null ? value : part;\n } else {\n return part;\n }\n }).join('');\n};\n/**\n * @function t\n *\n * Merges config defined translations with translations passed in as an argument\n * returns a function that can be used to translate a string\n *\n * @returns string\n */ function t({ key, translations, vars }) {\n let translationString = getTranslationString({\n count: typeof vars?.count === 'number' ? vars.count : undefined,\n key,\n translations\n });\n if (vars) {\n translationString = replaceVars({\n translationString,\n vars\n });\n }\n if (!translationString) {\n translationString = key;\n }\n return translationString;\n}\nconst initTFunction = (args)=>{\n const { config, language, translations } = args;\n const mergedTranslations = language && config?.translations?.[language] ? (0,_deepMergeSimple_js__WEBPACK_IMPORTED_MODULE_0__.deepMergeSimple)(translations, config.translations[language]) : translations;\n return {\n t: (key, vars)=>{\n return t({\n key,\n translations: mergedTranslations,\n vars\n });\n },\n translations: mergedTranslations\n };\n};\nfunction memoize(fn, keys) {\n const cacheMap = new Map();\n const memoized = async (args)=>{\n const cacheKey = keys.reduce((acc, key)=>acc + String(args[key]), '');\n if (!cacheMap.has(cacheKey)) {\n const result = await fn(args);\n cacheMap.set(cacheKey, result);\n }\n return cacheMap.get(cacheKey);\n };\n return memoized;\n}\nconst initI18n = memoize(async ({ config, context, language = config.fallbackLanguage })=>{\n if (!language || !config.supportedLanguages?.[language]) {\n throw new Error(`Language ${language} not supported`);\n }\n const translations = (0,_getTranslationsByContext_js__WEBPACK_IMPORTED_MODULE_1__.getTranslationsByContext)(config.supportedLanguages?.[language], context);\n const { t, translations: mergedTranslations } = initTFunction({\n config: config,\n language: language || config.fallbackLanguage,\n translations: translations\n });\n const dateFNSKey = config.supportedLanguages[language]?.dateFNSKey || 'en-US';\n const dateFNS = await (0,_importDateFNSLocale_js__WEBPACK_IMPORTED_MODULE_2__.importDateFNSLocale)(dateFNSKey);\n const i18n = {\n dateFNS,\n dateFNSKey,\n fallbackLanguage: config.fallbackLanguage,\n language: language || config.fallbackLanguage,\n t,\n translations: mergedTranslations\n };\n return i18n;\n}, [\n 'language',\n 'context'\n]);\n\n//# sourceMappingURL=init.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC91dGlsaXRpZXMvaW5pdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBZ0U7QUFDVDtBQUNrQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXLGdDQUFnQywwQkFBMEI7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsSUFBSTtBQUN0QztBQUNBLGNBQWMsMkJBQTJCLElBQUk7QUFDN0M7QUFDQSxjQUFjLDJCQUEyQixJQUFJO0FBQzdDO0FBQ0EsY0FBYyx5QkFBeUIsSUFBSTtBQUMzQztBQUNBLGNBQWMsdUNBQXVDLElBQUk7QUFDekQ7QUFDQSxjQUFjLFlBQVksSUFBSTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLElBQUksRUFBRSxVQUFVO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix5QkFBeUI7QUFDcEQsOENBQThDLEVBQUUsS0FBSyxFQUFFO0FBQ3ZEO0FBQ0EsK0JBQStCLHVCQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVyxhQUFhLHlCQUF5QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUNBQWlDO0FBQzdDLDhFQUE4RSxvRUFBZTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLGtDQUFrQyxxREFBcUQ7QUFDOUY7QUFDQSxvQ0FBb0MsVUFBVTtBQUM5QztBQUNBLHlCQUF5QixzRkFBd0I7QUFDakQsWUFBWSxzQ0FBc0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMEJBQTBCLDRFQUFtQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BwYXlsb2FkY21zK3RyYW5zbGF0aW9uc0AzLjgxLjAvbm9kZV9tb2R1bGVzL0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucy9kaXN0L3V0aWxpdGllcy9pbml0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGltcG9ydERhdGVGTlNMb2NhbGUgfSBmcm9tICcuLi9pbXBvcnREYXRlRk5TTG9jYWxlLmpzJztcbmltcG9ydCB7IGRlZXBNZXJnZVNpbXBsZSB9IGZyb20gJy4vZGVlcE1lcmdlU2ltcGxlLmpzJztcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uc0J5Q29udGV4dCB9IGZyb20gJy4vZ2V0VHJhbnNsYXRpb25zQnlDb250ZXh0LmpzJztcbi8qKlxuICogQGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uU3RyaW5nXG4gKlxuICogR2V0cyBhIHRyYW5zbGF0aW9uIHN0cmluZyBmcm9tIGEgdHJhbnNsYXRpb25zIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovIGV4cG9ydCBjb25zdCBnZXRUcmFuc2xhdGlvblN0cmluZyA9ICh7IGNvdW50LCBrZXksIHRyYW5zbGF0aW9ucyB9KT0+e1xuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJzonKTtcbiAgICBsZXQga2V5U3VmZml4ID0gJyc7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXksIGluZGV4KT0+e1xuICAgICAgICBpZiAodHlwZW9mIGFjYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCAmJiBgJHtrZXl9X3plcm9gIGluIGFjYykge1xuICAgICAgICAgICAgICAgIGtleVN1ZmZpeCA9ICdfemVybyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09PSAxICYmIGAke2tleX1fb25lYCBpbiBhY2MpIHtcbiAgICAgICAgICAgICAgICBrZXlTdWZmaXggPSAnX29uZSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09PSAyICYmIGAke2tleX1fdHdvYCBpbiBhY2MpIHtcbiAgICAgICAgICAgICAgICBrZXlTdWZmaXggPSAnX3R3byc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID4gNSAmJiBgJHtrZXl9X21hbnlgIGluIGFjYykge1xuICAgICAgICAgICAgICAgIGtleVN1ZmZpeCA9ICdfbWFueSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ID4gMiAmJiBjb3VudCA8PSA1ICYmIGAke2tleX1fZmV3YCBpbiBhY2MpIHtcbiAgICAgICAgICAgICAgICBrZXlTdWZmaXggPSAnX2Zldyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGAke2tleX1fb3RoZXJgIGluIGFjYykge1xuICAgICAgICAgICAgICAgIGtleVN1ZmZpeCA9ICdfb3RoZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBrZXlUb1VzZSA9IGtleTtcbiAgICAgICAgaWYgKGluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEgJiYga2V5U3VmZml4KSB7XG4gICAgICAgICAgICBrZXlUb1VzZSA9IGAke2tleX0ke2tleVN1ZmZpeH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY2MgJiYga2V5VG9Vc2UgaW4gYWNjKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjW2tleVRvVXNlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sIHRyYW5zbGF0aW9ucyk7XG4gICAgaWYgKCF0cmFuc2xhdGlvbikge1xuICAgICAgICBjb25zb2xlLmxvZygna2V5IG5vdCBmb3VuZDonLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNsYXRpb24gfHwga2V5O1xufTtcbi8qKlxuICogQGZ1bmN0aW9uIHJlcGxhY2VWYXJzXG4gKlxuICogUmVwbGFjZXMgdmFyaWFibGVzIGluIGEgdHJhbnNsYXRpb24gc3RyaW5nIHdpdGggdmFsdWVzIGZyb20gYW4gb2JqZWN0XG4gKlxuICogQHJldHVybnMgc3RyaW5nXG4gKi8gY29uc3QgcmVwbGFjZVZhcnMgPSAoeyB0cmFuc2xhdGlvblN0cmluZywgdmFycyB9KT0+e1xuICAgIGNvbnN0IHBhcnRzID0gdHJhbnNsYXRpb25TdHJpbmcuc3BsaXQoLyhcXHtcXHsuKj9cXH1cXH0pLyk7XG4gICAgcmV0dXJuIHBhcnRzLm1hcCgocGFydCk9PntcbiAgICAgICAgaWYgKHBhcnQuc3RhcnRzV2l0aCgne3snKSAmJiBwYXJ0LmVuZHNXaXRoKCd9fScpKSB7XG4gICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHBhcnQuc3Vic3RyaW5nKDIsIHBhcnQubGVuZ3RoIC0gMikudHJpbSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YXJzW3BsYWNlaG9sZGVyXTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsID8gdmFsdWUgOiBwYXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgIH1cbiAgICB9KS5qb2luKCcnKTtcbn07XG4vKipcbiAqIEBmdW5jdGlvbiB0XG4gKlxuICogTWVyZ2VzIGNvbmZpZyBkZWZpbmVkIHRyYW5zbGF0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnRcbiAqIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHRyYW5zbGF0ZSBhIHN0cmluZ1xuICpcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovIGV4cG9ydCBmdW5jdGlvbiB0KHsga2V5LCB0cmFuc2xhdGlvbnMsIHZhcnMgfSkge1xuICAgIGxldCB0cmFuc2xhdGlvblN0cmluZyA9IGdldFRyYW5zbGF0aW9uU3RyaW5nKHtcbiAgICAgICAgY291bnQ6IHR5cGVvZiB2YXJzPy5jb3VudCA9PT0gJ251bWJlcicgPyB2YXJzLmNvdW50IDogdW5kZWZpbmVkLFxuICAgICAgICBrZXksXG4gICAgICAgIHRyYW5zbGF0aW9uc1xuICAgIH0pO1xuICAgIGlmICh2YXJzKSB7XG4gICAgICAgIHRyYW5zbGF0aW9uU3RyaW5nID0gcmVwbGFjZVZhcnMoe1xuICAgICAgICAgICAgdHJhbnNsYXRpb25TdHJpbmcsXG4gICAgICAgICAgICB2YXJzXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXRyYW5zbGF0aW9uU3RyaW5nKSB7XG4gICAgICAgIHRyYW5zbGF0aW9uU3RyaW5nID0ga2V5O1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNsYXRpb25TdHJpbmc7XG59XG5jb25zdCBpbml0VEZ1bmN0aW9uID0gKGFyZ3MpPT57XG4gICAgY29uc3QgeyBjb25maWcsIGxhbmd1YWdlLCB0cmFuc2xhdGlvbnMgfSA9IGFyZ3M7XG4gICAgY29uc3QgbWVyZ2VkVHJhbnNsYXRpb25zID0gbGFuZ3VhZ2UgJiYgY29uZmlnPy50cmFuc2xhdGlvbnM/LltsYW5ndWFnZV0gPyBkZWVwTWVyZ2VTaW1wbGUodHJhbnNsYXRpb25zLCBjb25maWcudHJhbnNsYXRpb25zW2xhbmd1YWdlXSkgOiB0cmFuc2xhdGlvbnM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdDogKGtleSwgdmFycyk9PntcbiAgICAgICAgICAgIHJldHVybiB0KHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBtZXJnZWRUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgdmFyc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zbGF0aW9uczogbWVyZ2VkVHJhbnNsYXRpb25zXG4gICAgfTtcbn07XG5mdW5jdGlvbiBtZW1vaXplKGZuLCBrZXlzKSB7XG4gICAgY29uc3QgY2FjaGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbWVtb2l6ZWQgPSBhc3luYyAoYXJncyk9PntcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpPT5hY2MgKyBTdHJpbmcoYXJnc1trZXldKSwgJycpO1xuICAgICAgICBpZiAoIWNhY2hlTWFwLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKGFyZ3MpO1xuICAgICAgICAgICAgY2FjaGVNYXAuc2V0KGNhY2hlS2V5LCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZU1hcC5nZXQoY2FjaGVLZXkpO1xuICAgIH07XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuZXhwb3J0IGNvbnN0IGluaXRJMThuID0gbWVtb2l6ZShhc3luYyAoeyBjb25maWcsIGNvbnRleHQsIGxhbmd1YWdlID0gY29uZmlnLmZhbGxiYWNrTGFuZ3VhZ2UgfSk9PntcbiAgICBpZiAoIWxhbmd1YWdlIHx8ICFjb25maWcuc3VwcG9ydGVkTGFuZ3VhZ2VzPy5bbGFuZ3VhZ2VdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGFuZ3VhZ2UgJHtsYW5ndWFnZX0gbm90IHN1cHBvcnRlZGApO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNCeUNvbnRleHQoY29uZmlnLnN1cHBvcnRlZExhbmd1YWdlcz8uW2xhbmd1YWdlXSwgY29udGV4dCk7XG4gICAgY29uc3QgeyB0LCB0cmFuc2xhdGlvbnM6IG1lcmdlZFRyYW5zbGF0aW9ucyB9ID0gaW5pdFRGdW5jdGlvbih7XG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UgfHwgY29uZmlnLmZhbGxiYWNrTGFuZ3VhZ2UsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdHJhbnNsYXRpb25zXG4gICAgfSk7XG4gICAgY29uc3QgZGF0ZUZOU0tleSA9IGNvbmZpZy5zdXBwb3J0ZWRMYW5ndWFnZXNbbGFuZ3VhZ2VdPy5kYXRlRk5TS2V5IHx8ICdlbi1VUyc7XG4gICAgY29uc3QgZGF0ZUZOUyA9IGF3YWl0IGltcG9ydERhdGVGTlNMb2NhbGUoZGF0ZUZOU0tleSk7XG4gICAgY29uc3QgaTE4biA9IHtcbiAgICAgICAgZGF0ZUZOUyxcbiAgICAgICAgZGF0ZUZOU0tleSxcbiAgICAgICAgZmFsbGJhY2tMYW5ndWFnZTogY29uZmlnLmZhbGxiYWNrTGFuZ3VhZ2UsXG4gICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZSB8fCBjb25maWcuZmFsbGJhY2tMYW5ndWFnZSxcbiAgICAgICAgdCxcbiAgICAgICAgdHJhbnNsYXRpb25zOiBtZXJnZWRUcmFuc2xhdGlvbnNcbiAgICB9O1xuICAgIHJldHVybiBpMThuO1xufSwgW1xuICAgICdsYW5ndWFnZScsXG4gICAgJ2NvbnRleHQnXG5dKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5pdC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/init.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/languages.js": /*!******************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/languages.js ***! \******************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ acceptedLanguages: () => (/* binding */ acceptedLanguages),\n/* harmony export */ extractHeaderLanguage: () => (/* binding */ extractHeaderLanguage),\n/* harmony export */ rtlLanguages: () => (/* binding */ rtlLanguages)\n/* harmony export */ });\nconst rtlLanguages = [\n 'ar',\n 'fa',\n 'he'\n];\nconst acceptedLanguages = [\n 'ar',\n 'az',\n 'bg',\n 'bn-BD',\n 'bn-IN',\n 'ca',\n 'cs',\n 'bn-BD',\n 'bn-IN',\n 'da',\n 'de',\n 'en',\n 'es',\n 'et',\n 'fa',\n 'fr',\n 'he',\n 'hr',\n 'hu',\n 'hy',\n 'id',\n 'is',\n 'it',\n 'ja',\n 'ko',\n 'lt',\n 'lv',\n 'my',\n 'nb',\n 'nl',\n 'pl',\n 'pt',\n 'ro',\n 'rs',\n 'rs-latin',\n 'ru',\n 'sk',\n 'sl',\n 'sv',\n 'ta',\n 'th',\n 'tr',\n 'uk',\n 'vi',\n 'zh',\n 'zh-TW'\n];\nfunction parseAcceptLanguage(acceptLanguageHeader) {\n return acceptLanguageHeader.split(',').map((lang)=>{\n const [language, quality] = lang.trim().split(';q=');\n return {\n language,\n quality: quality ? parseFloat(quality) : 1\n };\n }).sort((a, b)=>b.quality - a.quality) // Sort by quality, highest to lowest\n ;\n}\nfunction extractHeaderLanguage(acceptLanguageHeader) {\n const parsedHeader = parseAcceptLanguage(acceptLanguageHeader);\n let matchedLanguage;\n for (const { language } of parsedHeader){\n if (!matchedLanguage && acceptedLanguages.includes(language)) {\n matchedLanguage = language;\n }\n }\n return matchedLanguage;\n}\n\n//# sourceMappingURL=languages.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt0cmFuc2xhdGlvbnNAMy44MS4wL25vZGVfbW9kdWxlcy9AcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMvZGlzdC91dGlsaXRpZXMvbGFuZ3VhZ2VzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxpQkFBaUIsV0FBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQHBheWxvYWRjbXMrdHJhbnNsYXRpb25zQDMuODEuMC9ub2RlX21vZHVsZXMvQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zL2Rpc3QvdXRpbGl0aWVzL2xhbmd1YWdlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcnRsTGFuZ3VhZ2VzID0gW1xuICAgICdhcicsXG4gICAgJ2ZhJyxcbiAgICAnaGUnXG5dO1xuZXhwb3J0IGNvbnN0IGFjY2VwdGVkTGFuZ3VhZ2VzID0gW1xuICAgICdhcicsXG4gICAgJ2F6JyxcbiAgICAnYmcnLFxuICAgICdibi1CRCcsXG4gICAgJ2JuLUlOJyxcbiAgICAnY2EnLFxuICAgICdjcycsXG4gICAgJ2JuLUJEJyxcbiAgICAnYm4tSU4nLFxuICAgICdkYScsXG4gICAgJ2RlJyxcbiAgICAnZW4nLFxuICAgICdlcycsXG4gICAgJ2V0JyxcbiAgICAnZmEnLFxuICAgICdmcicsXG4gICAgJ2hlJyxcbiAgICAnaHInLFxuICAgICdodScsXG4gICAgJ2h5JyxcbiAgICAnaWQnLFxuICAgICdpcycsXG4gICAgJ2l0JyxcbiAgICAnamEnLFxuICAgICdrbycsXG4gICAgJ2x0JyxcbiAgICAnbHYnLFxuICAgICdteScsXG4gICAgJ25iJyxcbiAgICAnbmwnLFxuICAgICdwbCcsXG4gICAgJ3B0JyxcbiAgICAncm8nLFxuICAgICdycycsXG4gICAgJ3JzLWxhdGluJyxcbiAgICAncnUnLFxuICAgICdzaycsXG4gICAgJ3NsJyxcbiAgICAnc3YnLFxuICAgICd0YScsXG4gICAgJ3RoJyxcbiAgICAndHInLFxuICAgICd1aycsXG4gICAgJ3ZpJyxcbiAgICAnemgnLFxuICAgICd6aC1UVydcbl07XG5mdW5jdGlvbiBwYXJzZUFjY2VwdExhbmd1YWdlKGFjY2VwdExhbmd1YWdlSGVhZGVyKSB7XG4gICAgcmV0dXJuIGFjY2VwdExhbmd1YWdlSGVhZGVyLnNwbGl0KCcsJykubWFwKChsYW5nKT0+e1xuICAgICAgICBjb25zdCBbbGFuZ3VhZ2UsIHF1YWxpdHldID0gbGFuZy50cmltKCkuc3BsaXQoJztxPScpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICBxdWFsaXR5OiBxdWFsaXR5ID8gcGFyc2VGbG9hdChxdWFsaXR5KSA6IDFcbiAgICAgICAgfTtcbiAgICB9KS5zb3J0KChhLCBiKT0+Yi5xdWFsaXR5IC0gYS5xdWFsaXR5KSAvLyBTb3J0IGJ5IHF1YWxpdHksIGhpZ2hlc3QgdG8gbG93ZXN0XG4gICAgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RIZWFkZXJMYW5ndWFnZShhY2NlcHRMYW5ndWFnZUhlYWRlcikge1xuICAgIGNvbnN0IHBhcnNlZEhlYWRlciA9IHBhcnNlQWNjZXB0TGFuZ3VhZ2UoYWNjZXB0TGFuZ3VhZ2VIZWFkZXIpO1xuICAgIGxldCBtYXRjaGVkTGFuZ3VhZ2U7XG4gICAgZm9yIChjb25zdCB7IGxhbmd1YWdlIH0gb2YgcGFyc2VkSGVhZGVyKXtcbiAgICAgICAgaWYgKCFtYXRjaGVkTGFuZ3VhZ2UgJiYgYWNjZXB0ZWRMYW5ndWFnZXMuaW5jbHVkZXMobGFuZ3VhZ2UpKSB7XG4gICAgICAgICAgICBtYXRjaGVkTGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZExhbmd1YWdlO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5ndWFnZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/languages.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-5LKBKI4T.js": /*!***********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-5LKBKI4T.js ***! \***********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache; var react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ a: () => (/* binding */ m), /* harmony export */ b: () => (/* binding */ n), /* harmony export */ c: () => (/* binding */ o), /* harmony export */ d: () => (/* binding */ p), /* harmony export */ e: () => (/* binding */ q), /* harmony export */ f: () => (/* binding */ r) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react-dom/index.js"); /* __next_internal_client_entry_do_not_use__ a,b,c,d,e,f auto */ // Workaround for react-datepicker and other cjs dependencies potentially inserting require("react") statements function require(m) { if (m === 'react') return /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2))); if (m === 'react-dom') return /*#__PURE__*/ (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react_dom__WEBPACK_IMPORTED_MODULE_1__, 2))); throw new Error(`Unknown module ${m}`); } // Workaround end var h = Object.create; var e = Object.defineProperty; var i = Object.getOwnPropertyDescriptor; var j = Object.getOwnPropertyNames; var k = Object.getPrototypeOf, l = Object.prototype.hasOwnProperty; var m = ((a)=>typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(a, { get: (b, c)=>(typeof require < "u" ? require : b)[c] }) : a)(function(a) { if (typeof require < "u") return require.apply(this, arguments); throw Error('Dynamic require of "' + a + '" is not supported'); }); var n = (a, b)=>()=>(a && (b = a(a = 0)), b); var o = (a, b)=>()=>(b || a((b = { exports: {} }).exports, b), b.exports), p = (a, b)=>{ for(var c in b)e(a, c, { get: b[c], enumerable: !0 }); }, g = (a, b, c, f)=>{ if (b && typeof b == "object" || typeof b == "function") for (let d of j(b))!l.call(a, d) && d !== c && e(a, d, { get: ()=>b[d], enumerable: !(f = i(b, d)) || f.enumerable }); return a; }; var q = (a, b, c)=>(c = a != null ? h(k(a)) : {}, g(b || !a || !a.__esModule ? e(c, "default", { value: a, enumerable: !0 }) : c, a)), r = (a)=>g(e({}, "__esModule", { value: !0 }), a); //# sourceMappingURL=chunk-5LKBKI4T.js.map /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-QP5KC7MG.js": /*!***********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-QP5KC7MG.js ***! \***********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;\nvar react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache;\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ a: () => (/* binding */ $e),\n/* harmony export */ b: () => (/* binding */ br),\n/* harmony export */ c: () => (/* binding */ se),\n/* harmony export */ d: () => (/* binding */ Tn),\n/* harmony export */ e: () => (/* binding */ Fe),\n/* harmony export */ f: () => (/* binding */ le),\n/* harmony export */ g: () => (/* binding */ Un),\n/* harmony export */ h: () => (/* binding */ Pr),\n/* harmony export */ i: () => (/* binding */ Wn),\n/* harmony export */ j: () => (/* binding */ Ve),\n/* harmony export */ k: () => (/* binding */ ee),\n/* harmony export */ l: () => (/* binding */ to)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react-dom/index.js\");\n/* harmony import */ var react_compiler_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/compiler-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/compiler-runtime.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* __next_internal_client_entry_do_not_use__ a,b,c,d,e,f,g,h,i,j,k,l auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$();\n// Workaround for react-datepicker and other cjs dependencies potentially inserting require(\"react\") statements\n\n\nfunction require(m) {\n if (m === 'react') return /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)));\n if (m === 'react-dom') return /*#__PURE__*/ (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react_dom__WEBPACK_IMPORTED_MODULE_1__, 2)));\n throw new Error(`Unknown module ${m}`);\n}\n// Workaround end\n\n\nfunction me(t, e) {\n (e == null || e > t.length) && (e = t.length);\n for(var r = 0, n = Array(e); r < e; r++)n[r] = t[r];\n return n;\n}\nfunction Je(t) {\n if (Array.isArray(t)) return t;\n}\n_c = Je;\nfunction Qe(t, e, r) {\n return (e = rt(e)) in t ? Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = r, t;\n}\n_c1 = Qe;\nfunction Xe(t, e) {\n var r = t == null ? null : typeof Symbol < \"u\" && t[Symbol.iterator] || t[\"@@iterator\"];\n if (r != null) {\n var n, o, i, c, u = [], a = !0, s = !1;\n try {\n if (i = (r = r.call(t)).next, e !== 0) for(; !(a = (n = i.call(r)).done) && (u.push(n.value), u.length !== e); a = !0);\n } catch (l) {\n s = !0, o = l;\n } finally{\n try {\n if (!a && r.return != null && (c = r.return(), Object(c) !== c)) return;\n } finally{\n if (s) throw o;\n }\n }\n return u;\n }\n}\n_c2 = Xe;\nfunction Ze() {\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}\n_c3 = Ze;\nfunction pe(t, e) {\n var r = Object.keys(t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(t);\n e && (n = n.filter(function(o) {\n return Object.getOwnPropertyDescriptor(t, o).enumerable;\n })), r.push.apply(r, n);\n }\n return r;\n}\nfunction oe(t) {\n for(var e = 1; e < arguments.length; e++){\n var r = arguments[e] != null ? arguments[e] : {};\n e % 2 ? pe(Object(r), !0).forEach(function(n) {\n Qe(t, n, r[n]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(r)) : pe(Object(r)).forEach(function(n) {\n Object.defineProperty(t, n, Object.getOwnPropertyDescriptor(r, n));\n });\n }\n return t;\n}\nfunction ge(t, e) {\n if (t == null) return {};\n var r, n, o = et(t, e);\n if (Object.getOwnPropertySymbols) {\n var i = Object.getOwnPropertySymbols(t);\n for(n = 0; n < i.length; n++)r = i[n], e.indexOf(r) === -1 && ({}).propertyIsEnumerable.call(t, r) && (o[r] = t[r]);\n }\n return o;\n}\nfunction et(t, e) {\n if (t == null) return {};\n var r = {};\n for(var n in t)if (({}).hasOwnProperty.call(t, n)) {\n if (e.indexOf(n) !== -1) continue;\n r[n] = t[n];\n }\n return r;\n}\nfunction he(t, e) {\n return Je(t) || Xe(t, e) || nt(t, e) || Ze();\n}\nfunction tt(t, e) {\n if (typeof t != \"object\" || !t) return t;\n var r = t[Symbol.toPrimitive];\n if (r !== void 0) {\n var n = r.call(t, e);\n if (typeof n != \"object\") return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (e === \"string\" ? String : Number)(t);\n}\nfunction rt(t) {\n var e = tt(t, \"string\");\n return typeof e == \"symbol\" ? e : e + \"\";\n}\nfunction nt(t, e) {\n if (t) {\n if (typeof t == \"string\") return me(t, e);\n var r = ({}).toString.call(t).slice(8, -1);\n return r === \"Object\" && t.constructor && (r = t.constructor.name), r === \"Map\" || r === \"Set\" ? Array.from(t) : r === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? me(t, e) : void 0;\n }\n}\nfunction ot(t, e, r) {\n return e in t ? Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = r, t;\n}\nfunction ve(t, e) {\n var r = Object.keys(t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(t);\n e && (n = n.filter(function(o) {\n return Object.getOwnPropertyDescriptor(t, o).enumerable;\n })), r.push.apply(r, n);\n }\n return r;\n}\nfunction be(t) {\n for(var e = 1; e < arguments.length; e++){\n var r = arguments[e] != null ? arguments[e] : {};\n e % 2 ? ve(Object(r), !0).forEach(function(n) {\n ot(t, n, r[n]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(r)) : ve(Object(r)).forEach(function(n) {\n Object.defineProperty(t, n, Object.getOwnPropertyDescriptor(r, n));\n });\n }\n return t;\n}\nfunction it() {\n for(var t = arguments.length, e = new Array(t), r = 0; r < t; r++)e[r] = arguments[r];\n return function(n) {\n return e.reduceRight(function(o, i) {\n return i(o);\n }, n);\n };\n}\nfunction z(t) {\n return function e() {\n for(var r = this, n = arguments.length, o = new Array(n), i = 0; i < n; i++)o[i] = arguments[i];\n return o.length >= t.length ? t.apply(this, o) : function() {\n for(var c = arguments.length, u = new Array(c), a = 0; a < c; a++)u[a] = arguments[a];\n return e.apply(r, [].concat(o, u));\n };\n };\n}\nfunction G(t) {\n return ({}).toString.call(t).includes(\"Object\");\n}\n_c4 = G;\nfunction at(t) {\n return !Object.keys(t).length;\n}\nfunction B(t) {\n return typeof t == \"function\";\n}\n_c5 = B;\nfunction ct(t, e) {\n return Object.prototype.hasOwnProperty.call(t, e);\n}\nfunction ut(t, e) {\n return G(e) || D(\"changeType\"), Object.keys(e).some(function(r) {\n return !ct(t, r);\n }) && D(\"changeField\"), e;\n}\nfunction st(t) {\n B(t) || D(\"selectorType\");\n}\nfunction lt(t) {\n B(t) || G(t) || D(\"handlerType\"), G(t) && Object.values(t).some(function(e) {\n return !B(e);\n }) && D(\"handlersType\");\n}\nfunction ft(t) {\n t || D(\"initialIsRequired\"), G(t) || D(\"initialType\"), at(t) && D(\"initialContent\");\n}\nfunction dt(t, e) {\n throw new Error(t[e] || t.default);\n}\nvar mt = {\n initialIsRequired: \"initial state is required\",\n initialType: \"initial state should be an object\",\n initialContent: \"initial state shouldn't be an empty object\",\n handlerType: \"handler should be an object or a function\",\n handlersType: \"all handlers should be a functions\",\n selectorType: \"selector should be a function\",\n changeType: \"provided value of changes should be an object\",\n changeField: 'it seams you want to change a field in the state which is not specified in the \"initial\" state',\n default: \"an unknown error accured in `state-local` package\"\n}, D = z(dt)(mt), K = {\n changes: ut,\n selector: st,\n handler: lt,\n initial: ft\n};\nfunction pt(t) {\n var e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n K.initial(t), K.handler(e);\n var r = {\n current: t\n }, n = z(vt)(r, e), o = z(ht)(r), i = z(K.changes)(t), c = z(gt)(r);\n function u() {\n var s = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function(l) {\n return l;\n };\n return K.selector(s), s(r.current);\n }\n function a(s) {\n it(n, o, i, c)(s);\n }\n return [\n u,\n a\n ];\n}\nfunction gt(t, e) {\n return B(e) ? e(t.current) : e;\n}\nfunction ht(t, e) {\n return t.current = be(be({}, t.current), e), e;\n}\nfunction vt(t, e, r) {\n return B(e) ? e(t.current) : Object.keys(r).forEach(function(n) {\n var o;\n return (o = e[n]) === null || o === void 0 ? void 0 : o.call(e, t.current[n]);\n }), r;\n}\nvar bt = {\n create: pt\n}, ye = bt;\nvar we = {\n paths: {\n vs: \"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs\"\n }\n};\nfunction Oe(t) {\n return function e() {\n for(var r = this, n = arguments.length, o = new Array(n), i = 0; i < n; i++)o[i] = arguments[i];\n return o.length >= t.length ? t.apply(this, o) : function() {\n for(var c = arguments.length, u = new Array(c), a = 0; a < c; a++)u[a] = arguments[a];\n return e.apply(r, [].concat(o, u));\n };\n };\n}\n_c6 = Oe;\nfunction je(t) {\n return ({}).toString.call(t).includes(\"Object\");\n}\nfunction yt(t) {\n return t || Se(\"configIsRequired\"), je(t) || Se(\"configType\"), t.urls ? (wt(), {\n paths: {\n vs: t.urls.monacoBase\n }\n }) : t;\n}\nfunction wt() {\n console.warn(Me.deprecation);\n}\nfunction Ot(t, e) {\n throw new Error(t[e] || t.default);\n}\n_c7 = Ot;\nvar Me = {\n configIsRequired: \"the configuration object is required\",\n configType: \"the configuration object should be an object\",\n default: \"an unknown error accured in `@monaco-editor/loader` package\",\n deprecation: `Deprecation warning!\n You are using deprecated way of configuration.\n\n Instead of using\n monaco.config({ urls: { monacoBase: '...' } })\n use\n monaco.config({ paths: { vs: '...' } })\n\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\n `\n}, Se = Oe(Ot)(Me), xe = {\n config: yt\n};\nvar Pe = function() {\n for(var e = arguments.length, r = new Array(e), n = 0; n < e; n++)r[n] = arguments[n];\n return function(o) {\n return r.reduceRight(function(i, c) {\n return c(i);\n }, o);\n };\n};\n_c8 = Pe;\nfunction ie(t, e) {\n return Object.keys(e).forEach(function(r) {\n e[r] instanceof Object && t[r] && Object.assign(e[r], ie(t[r], e[r]));\n }), oe(oe({}, t), e);\n}\nvar jt = {\n type: \"cancelation\",\n msg: \"operation is manually canceled\"\n};\nfunction Y(t) {\n var e = !1, r = new Promise(function(n, o) {\n t.then(function(i) {\n return e ? o(jt) : n(i);\n }), t.catch(o);\n });\n return r.cancel = function() {\n return e = !0;\n }, r;\n}\n_c9 = Y;\nvar St = [\n \"monaco\"\n], Mt = ye.create({\n config: we,\n isInitialized: !1,\n resolve: null,\n reject: null,\n monaco: null\n}), Ce = he(Mt, 2), V = Ce[0], J = Ce[1];\nfunction xt(t) {\n var e = xe.config(t), r = e.monaco, n = ge(e, St);\n J(function(o) {\n return {\n config: ie(o.config, n),\n monaco: r\n };\n });\n}\nfunction Pt() {\n var t = V(function(e) {\n var r = e.monaco, n = e.isInitialized, o = e.resolve;\n return {\n monaco: r,\n isInitialized: n,\n resolve: o\n };\n });\n if (!t.isInitialized) {\n if (J({\n isInitialized: !0\n }), t.monaco) return t.resolve(t.monaco), Y(ae);\n if (window.monaco && window.monaco.editor) return Ee(window.monaco), t.resolve(window.monaco), Y(ae);\n Pe(Ct, Tt)(At);\n }\n return Y(ae);\n}\n_c10 = Pt;\nfunction Ct(t) {\n return document.body.appendChild(t);\n}\n_c11 = Ct;\nfunction Et(t) {\n var e = document.createElement(\"script\");\n return t && (e.src = t), e;\n}\n_c12 = Et;\nfunction Tt(t) {\n var e = V(function(n) {\n var o = n.config, i = n.reject;\n return {\n config: o,\n reject: i\n };\n }), r = Et(\"\".concat(e.config.paths.vs, \"/loader.js\"));\n return r.onload = function() {\n return t();\n }, r.onerror = e.reject, r;\n}\n_c13 = Tt;\nfunction At() {\n var t = V(function(r) {\n var n = r.config, o = r.resolve, i = r.reject;\n return {\n config: n,\n resolve: o,\n reject: i\n };\n }), e = window.require;\n e.config(t.config), e([\n \"vs/editor/editor.main\"\n ], function(r) {\n var n = r.m || r;\n Ee(n), t.resolve(n);\n }, function(r) {\n t.reject(r);\n });\n}\n_c14 = At;\nfunction Ee(t) {\n V().monaco || J({\n monaco: t\n });\n}\n_c15 = Ee;\nfunction Rt() {\n return V(function(t) {\n var e = t.monaco;\n return e;\n });\n}\n_c16 = Rt;\nvar ae = new Promise(function(t, e) {\n return J({\n resolve: t,\n reject: e\n });\n}), $ = {\n config: xt,\n init: Pt,\n __getMonacoInstance: Rt\n};\n\n\n\n\n\n\n\n\n\n\n\nvar _t = {\n wrapper: {\n display: \"flex\",\n position: \"relative\",\n textAlign: \"initial\"\n },\n fullWidth: {\n width: \"100%\"\n },\n hide: {\n display: \"none\"\n }\n}, ue = _t, Wt = {\n container: {\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }\n}, kt = Wt;\nfunction Nt({ children: t }) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n style: kt.container\n }, t);\n}\n_c17 = Nt;\nvar Ht = Nt, zt = Ht;\nfunction Bt({ width: t, height: e, isEditorReady: r, loading: n, _ref: o, className: i, wrapperProps: c }) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"section\", {\n style: {\n ...ue.wrapper,\n width: t,\n height: e\n },\n ...c\n }, !r && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(zt, null, n), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n ref: o,\n style: {\n ...ue.fullWidth,\n ...!r && ue.hide\n },\n className: i\n }));\n}\n_c18 = Bt;\nvar Vt = Bt, De = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(Vt);\nfunction Ut(t) {\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(t, []);\n}\n_c19 = Ut;\nvar Le = Ut;\nfunction Gt(t, e, r = !0) {\n let n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(n.current || !r ? ()=>{\n n.current = !1;\n } : t, e);\n}\n_c20 = Gt;\nvar M = Gt;\nfunction F() {}\n_c21 = F;\nfunction k(t, e, r, n) {\n return Yt(t, n) || Jt(t, e, r, n);\n}\nfunction Yt(t, e) {\n return t.editor.getModel(_e(t, e));\n}\n_c22 = Yt;\nfunction Jt(t, e, r, n) {\n return t.editor.createModel(e, r, n ? _e(t, n) : void 0);\n}\n_c23 = Jt;\nfunction _e(t, e) {\n return t.Uri.parse(e);\n}\nfunction Qt({ original: t, modified: e, language: r, originalLanguage: n, modifiedLanguage: o, originalModelPath: i, modifiedModelPath: c, keepCurrentOriginalModel: u = !1, keepCurrentModifiedModel: a = !1, theme: s = \"light\", loading: l = \"Loading...\", options: d = {}, height: x = \"100%\", width: w = \"100%\", className: S, wrapperProps: C = {}, beforeMount: p = F, onMount: P = F }) {\n let [y, L] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [A, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(P), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(p), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);\n Le(()=>{\n let m = $.init();\n return m.then((O)=>(v.current = O) && g(!1)).catch((O)=>O?.type !== \"cancelation\" && console.error(\"Monaco initialization: error:\", O)), ()=>h.current ? H() : m.cancel();\n }), M(()=>{\n if (h.current && v.current) {\n let m = h.current.getOriginalEditor(), O = k(v.current, t || \"\", n || r || \"text\", i || \"\");\n O !== m.getModel() && m.setModel(O);\n }\n }, [\n i\n ], y), M(()=>{\n if (h.current && v.current) {\n let m = h.current.getModifiedEditor(), O = k(v.current, e || \"\", o || r || \"text\", c || \"\");\n O !== m.getModel() && m.setModel(O);\n }\n }, [\n c\n ], y), M(()=>{\n let m = h.current.getModifiedEditor();\n m.getOption(v.current.editor.EditorOption.readOnly) ? m.setValue(e || \"\") : e !== m.getValue() && (m.executeEdits(\"\", [\n {\n range: m.getModel().getFullModelRange(),\n text: e || \"\",\n forceMoveMarkers: !0\n }\n ]), m.pushUndoStop());\n }, [\n e\n ], y), M(()=>{\n h.current?.getModel()?.original.setValue(t || \"\");\n }, [\n t\n ], y), M(()=>{\n let { original: m, modified: O } = h.current.getModel();\n v.current.editor.setModelLanguage(m, n || r || \"text\"), v.current.editor.setModelLanguage(O, o || r || \"text\");\n }, [\n r,\n n,\n o\n ], y), M(()=>{\n v.current?.editor.setTheme(s);\n }, [\n s\n ], y), M(()=>{\n h.current?.updateOptions(d);\n }, [\n d\n ], y);\n let _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n if (!v.current) return;\n f.current(v.current);\n let m = k(v.current, t || \"\", n || r || \"text\", i || \"\"), O = k(v.current, e || \"\", o || r || \"text\", c || \"\");\n h.current?.setModel({\n original: m,\n modified: O\n });\n }, [\n r,\n e,\n o,\n t,\n n,\n i,\n c\n ]), q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n !T.current && E.current && (h.current = v.current.editor.createDiffEditor(E.current, {\n automaticLayout: !0,\n ...d\n }), _(), v.current?.editor.setTheme(s), L(!0), T.current = !0);\n }, [\n d,\n s,\n _\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n y && b.current(h.current, v.current);\n }, [\n y\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n !A && !y && q();\n }, [\n A,\n y,\n q\n ]);\n function H() {\n let m = h.current?.getModel();\n u || m?.original?.dispose(), a || m?.modified?.dispose(), h.current?.dispose();\n }\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(De, {\n width: w,\n height: x,\n isEditorReady: y,\n loading: l,\n _ref: E,\n className: S,\n wrapperProps: C\n });\n}\n_c24 = Qt;\nvar Xt = Qt, dn = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(Xt);\nfunction or(t) {\n let e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n e.current = t;\n }, [\n t\n ]), e.current;\n}\nvar ir = or, X = new Map;\nfunction ar({ defaultValue: t, defaultLanguage: e, defaultPath: r, value: n, language: o, path: i, theme: c = \"light\", line: u, loading: a = \"Loading...\", options: s = {}, overrideServices: l = {}, saveViewState: d = !0, keepCurrentModel: x = !1, width: w = \"100%\", height: S = \"100%\", className: C, wrapperProps: p = {}, beforeMount: P = F, onMount: y = F, onChange: L, onValidate: A = F }) {\n let [g, h] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [v, E] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(y), q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(P), H = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(n), O = ir(i), fe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), te = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);\n Le(()=>{\n let j = $.init();\n return j.then((I)=>(b.current = I) && E(!1)).catch((I)=>I?.type !== \"cancelation\" && console.error(\"Monaco initialization: error:\", I)), ()=>f.current ? Ye() : j.cancel();\n }), M(()=>{\n let j = k(b.current, t || n || \"\", e || o || \"\", i || r || \"\");\n j !== f.current?.getModel() && (d && X.set(O, f.current?.saveViewState()), f.current?.setModel(j), d && f.current?.restoreViewState(X.get(i)));\n }, [\n i\n ], g), M(()=>{\n f.current?.updateOptions(s);\n }, [\n s\n ], g), M(()=>{\n !f.current || n === void 0 || (f.current.getOption(b.current.editor.EditorOption.readOnly) ? f.current.setValue(n) : n !== f.current.getValue() && (te.current = !0, f.current.executeEdits(\"\", [\n {\n range: f.current.getModel().getFullModelRange(),\n text: n,\n forceMoveMarkers: !0\n }\n ]), f.current.pushUndoStop(), te.current = !1));\n }, [\n n\n ], g), M(()=>{\n let j = f.current?.getModel();\n j && o && b.current?.editor.setModelLanguage(j, o);\n }, [\n o\n ], g), M(()=>{\n u !== void 0 && f.current?.revealLine(u);\n }, [\n u\n ], g), M(()=>{\n b.current?.editor.setTheme(c);\n }, [\n c\n ], g);\n let de = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n if (!(!T.current || !b.current) && !fe.current) {\n q.current(b.current);\n let j = i || r, I = k(b.current, n || t || \"\", e || o || \"\", j || \"\");\n f.current = b.current?.editor.create(T.current, {\n model: I,\n automaticLayout: !0,\n ...s\n }, l), d && f.current.restoreViewState(X.get(j)), b.current.editor.setTheme(c), u !== void 0 && f.current.revealLine(u), h(!0), fe.current = !0;\n }\n }, [\n t,\n e,\n r,\n n,\n o,\n i,\n s,\n l,\n d,\n c,\n u\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n g && _.current(f.current, b.current);\n }, [\n g\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n !v && !g && de();\n }, [\n v,\n g,\n de\n ]), m.current = n, (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n g && L && (H.current?.dispose(), H.current = f.current?.onDidChangeModelContent((j)=>{\n te.current || L(f.current.getValue(), j);\n }));\n }, [\n g,\n L\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (g) {\n let j = b.current.editor.onDidChangeMarkers((I)=>{\n let re = f.current.getModel()?.uri;\n if (re && I.find((ne)=>ne.path === re.path)) {\n let ne = b.current.editor.getModelMarkers({\n resource: re\n });\n A?.(ne);\n }\n });\n return ()=>{\n j?.dispose();\n };\n }\n return ()=>{};\n }, [\n g,\n A\n ]);\n function Ye() {\n H.current?.dispose(), x ? d && X.set(i, f.current.saveViewState()) : f.current.getModel()?.dispose(), f.current.dispose();\n }\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(De, {\n width: w,\n height: S,\n isEditorReady: g,\n loading: a,\n _ref: T,\n className: C,\n wrapperProps: p\n });\n}\nvar cr = ar, ur = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(cr), Z = ur;\n\n\n\n\n\n\n\n\n\nfunction $e(t, e) {\n let r = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_2__.c)(5), [n, o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(t), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0), c, u;\n r[0] !== t ? (c = ()=>{\n if (i.current) {\n i.current = !1;\n return;\n }\n o(t);\n }, u = [\n t\n ], r[0] = t, r[1] = c, r[2] = u) : (c = r[1], u = r[2]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(c, u);\n let a = n ?? e, s;\n return r[3] !== a ? (s = [\n a,\n o\n ], r[3] = a, r[4] = s) : s = r[4], s;\n}\nvar Ne = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(void 0), br = ({ children: t, config: e })=>{\n let [r, n] = $e(e), { collectionsBySlug: o, globalsBySlug: i } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let a = {}, s = {};\n for (let l of r.collections)a[l.slug] = l;\n for (let l of r.globals)s[l.slug] = l;\n return {\n collectionsBySlug: a,\n globalsBySlug: s\n };\n }, [\n r\n ]), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((a)=>\"collectionSlug\" in a && a.collectionSlug ? o[a.collectionSlug] ?? null : \"globalSlug\" in a && a.globalSlug ? i[a.globalSlug] ?? null : null, [\n o,\n i\n ]), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({\n config: r,\n getEntityConfig: c,\n setConfig: n\n }), [\n r,\n c,\n n\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ne, {\n value: u,\n children: t\n });\n}, se = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(Ne), Tn = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_2__.c)(7), { children: r, config: n } = t, { config: o, setConfig: i } = se(), c, u;\n if (e[0] !== n || e[1] !== i ? (c = ()=>{\n i(n);\n }, u = [\n n,\n i\n ], e[0] = n, e[1] = i, e[2] = c, e[3] = u) : (c = e[2], u = e[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(c, u), o !== n && o.unauthenticated !== n.unauthenticated) {\n let a;\n return e[4] !== r || e[5] !== n ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(br, {\n config: n,\n children: r\n }), e[4] = r, e[5] = n, e[6] = a) : a = e[6], a;\n }\n return r;\n};\nvar Mr = {\n autoMode: !0,\n setTheme: ()=>null,\n theme: \"light\"\n}, Be = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(Mr);\nfunction ze(t, e, r) {\n let n = new Date;\n n.setTime(n.getTime() + r * 24 * 60 * 60 * 1e3);\n let o = \"expires=\" + n.toUTCString();\n document.cookie = t + \"=\" + e + \";\" + o + \";path=/\";\n}\nvar xr = (t)=>{\n let e, r = window.document.cookie.split(\"; \").find((n)=>n.startsWith(`${t}=`))?.split(\"=\")[1];\n return r === \"light\" || r === \"dark\" ? e = r : e = window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\", document.documentElement.setAttribute(\"data-theme\", e), {\n theme: e,\n themeFromCookies: r\n };\n}, Pr = \"light\", Wn = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_2__.c)(11), { children: r, theme: n } = t, { config: o } = se(), i = o.admin.theme, c = `${o.cookiePrefix || \"payload\"}-theme`, [u, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(n || Pr), [s, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), d, x;\n e[0] !== c || e[1] !== i ? (d = ()=>{\n if (i !== \"all\") return;\n let { theme: p, themeFromCookies: P } = xr(c);\n a(p), l(!P);\n }, x = [\n i,\n c\n ], e[0] = c, e[1] = i, e[2] = d, e[3] = x) : (d = e[2], x = e[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(d, x);\n let w;\n e[4] !== c ? (w = (p)=>{\n if (p === \"light\" || p === \"dark\") a(p), l(!1), ze(c, p, 365), document.documentElement.setAttribute(\"data-theme\", p);\n else if (p === \"auto\") {\n ze(c, p, -1);\n let P = window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n document.documentElement.setAttribute(\"data-theme\", P), l(!0), a(P);\n }\n }, e[4] = c, e[5] = w) : w = e[5];\n let S = w, C;\n return e[6] !== s || e[7] !== r || e[8] !== S || e[9] !== u ? (C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Be, {\n value: {\n autoMode: s,\n setTheme: S,\n theme: u\n },\n children: r\n }), e[6] = s, e[7] = r, e[8] = S, e[9] = u, e[10] = C) : C = e[10], C;\n}, Ve = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(Be);\n\n\n\n\n\nvar Fe = (t, e)=>{\n _s();\n let r = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_2__.c)(9), n = e === void 0 ? !1 : e, [o, i] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), c = react__WEBPACK_IMPORTED_MODULE_0__.useRef(void 0), u;\n r[0] !== t ? (u = ()=>(i(!1), clearTimeout(c.current), c.current = setTimeout(()=>{\n i(!0);\n }, t), ()=>{\n clearTimeout(c.current);\n }), r[0] = t, r[1] = u) : u = r[1];\n let a = u, s, l;\n r[2] !== a || r[3] !== n ? (s = ()=>{\n n && a();\n }, l = [\n a,\n n\n ], r[2] = a, r[3] = n, r[4] = s, r[5] = l) : (s = r[4], l = r[5]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(s, l);\n let d;\n return r[6] !== o || r[7] !== a ? (d = [\n o,\n a\n ], r[6] = o, r[7] = a, r[8] = d) : d = r[8], d;\n};\n_s(Fe, \"yVRuS0Ypkj4bBxEcIIaDgazOGEo=\");\n_c25 = Fe;\nvar Ue = \"shimmer-effect\", le = ({ animationDelay: t = \"0ms\", className: e, disableInlineStyles: r = !1, height: n = \"60px\", transparent: o, width: i = \"100%\", ...c })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n ...c,\n className: [\n Ue,\n o && `${Ue}--transparent`,\n e\n ].filter(Boolean).join(\" \"),\n style: {\n ...c?.style || {},\n height: !r && (typeof n == \"number\" ? `${n}px` : n),\n width: !r && (typeof i == \"number\" ? `${i}px` : i)\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"shimmer-effect__shine\",\n style: {\n animationDelay: t\n }\n })\n }), Un = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_2__.c)(9), { className: r, count: n, height: o, renderDelay: i, shimmerDelay: c, shimmerItemClassName: u, width: a } = t, s = i === void 0 ? 500 : i, l = c === void 0 ? 25 : c, d = typeof l == \"number\" ? `${l}ms` : l, [x] = Fe(s, !0);\n if (!x) return null;\n let w;\n e[0] !== n ? (w = [\n ...Array(n)\n ], e[0] = n, e[1] = w) : w = e[1];\n let S;\n return e[2] !== r || e[3] !== o || e[4] !== d || e[5] !== u || e[6] !== w || e[7] !== a ? (S = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: r,\n children: w.map((C, p)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: u,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(le, {\n animationDelay: `calc(${p} * ${d})`,\n height: o,\n width: a\n })\n }, p))\n }), e[2] = r, e[3] = o, e[4] = d, e[5] = u, e[6] = w, e[7] = a, e[8] = S) : S = e[8], S;\n};\nvar ee = {\n insertSpaces: !1,\n tabSize: 4,\n trimAutoWhitespace: !1\n}, qe = {\n hideCursorInOverviewRuler: !0,\n minimap: {\n enabled: !1\n },\n overviewRulerBorder: !1,\n readOnly: !1,\n scrollbar: {\n alwaysConsumeMouseWheel: !1\n },\n scrollBeyondLastLine: !1,\n wordWrap: \"on\"\n};\nvar Rr = \"default\" in Z ? Z.default : Z, Ir = \"code-editor\", Dr = (t)=>{\n _s1();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_2__.c)(10), { className: r, maxHeight: n, minHeight: o, options: i, readOnly: c, recalculatedHeightAt: u, value: a, ...s } = t, l = o ?? 56, d = react__WEBPACK_IMPORTED_MODULE_0__.useRef(u), { insertSpaces: x, tabSize: w, trimAutoWhitespace: S, ...C } = i || {}, p = i?.padding ? (i.padding.top || 0) + (i.padding?.bottom || 0) : 0, [P, y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(l), { theme: L } = Ve(), A = s?.defaultLanguage ? `language--${s.defaultLanguage}` : \"\", g = c && \"read-only\", h;\n e[0] !== r || e[1] !== A || e[2] !== g ? (h = [\n Ir,\n r,\n A,\n g\n ].filter(Boolean), e[0] = r, e[1] = A, e[2] = g, e[3] = h) : h = e[3];\n let v = h.join(\" \"), E, b;\n return e[4] !== l || e[5] !== p || e[6] !== u || e[7] !== a ? (E = ()=>{\n u && u > d.current && (y(a ? Math.max(l, a.split(`\n`).length * 18 + 2 + p) : l), d.current = u);\n }, b = [\n a,\n l,\n p,\n u\n ], e[4] = l, e[5] = p, e[6] = u, e[7] = a, e[8] = E, e[9] = b) : (E = e[8], b = e[9]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(E, b), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Rr, {\n className: v,\n height: n ? Math.min(P, n) : P,\n loading: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(le, {\n height: P\n }),\n options: {\n ...qe,\n ...C,\n readOnly: !!c,\n detectIndentation: !1,\n insertSpaces: void 0,\n tabSize: void 0,\n trimAutoWhitespace: void 0\n },\n theme: L === \"dark\" ? \"vs-dark\" : \"vs\",\n value: a,\n ...s,\n onChange: (f, T)=>{\n s.onChange?.(f, T), y(f ? Math.max(l, f.split(`\n`).length * 18 + 2 + p) : l);\n },\n onMount: (f, T)=>{\n s.onMount?.(f, T);\n let _ = f.getModel();\n _ && _.updateOptions({\n insertSpaces: x ?? ee.insertSpaces,\n tabSize: w ?? ee.tabSize,\n trimAutoWhitespace: S ?? ee.trimAutoWhitespace\n }), y(Math.max(l, f.getValue().split(`\n`).length * 18 + 2 + p));\n }\n });\n}, to = Dr;\n_s1(Dr, \"Mgr9uOq5qSh+F+ZbGblHps6jsZY=\");\n //# sourceMappingURL=chunk-QP5KC7MG.js.map\nvar _c, _c1, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c10, _c11, _c12, _c13, _c14, _c15, _c16, _c17, _c18, _c19, _c20, _c21, _c22, _c23, _c24, _c25;\n$RefreshReg$(_c, \"Je\");\n$RefreshReg$(_c1, \"Qe\");\n$RefreshReg$(_c2, \"Xe\");\n$RefreshReg$(_c3, \"Ze\");\n$RefreshReg$(_c4, \"G\");\n$RefreshReg$(_c5, \"B\");\n$RefreshReg$(_c6, \"Oe\");\n$RefreshReg$(_c7, \"Ot\");\n$RefreshReg$(_c8, \"Pe\");\n$RefreshReg$(_c9, \"Y\");\n$RefreshReg$(_c10, \"Pt\");\n$RefreshReg$(_c11, \"Ct\");\n$RefreshReg$(_c12, \"Et\");\n$RefreshReg$(_c13, \"Tt\");\n$RefreshReg$(_c14, \"At\");\n$RefreshReg$(_c15, \"Ee\");\n$RefreshReg$(_c16, \"Rt\");\n$RefreshReg$(_c17, \"Nt\");\n$RefreshReg$(_c18, \"Bt\");\n$RefreshReg$(_c19, \"Ut\");\n$RefreshReg$(_c20, \"Gt\");\n$RefreshReg$(_c21, \"F\");\n$RefreshReg$(_c22, \"Yt\");\n$RefreshReg$(_c23, \"Jt\");\n$RefreshReg$(_c24, \"Qt\");\n$RefreshReg$(_c25, \"Fe\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt1aUAzLjgxLjBfQHR5cGVzK3JlYWN0QDE5LjIuMTRfbW9uYWNvLWVkaXRvckAwLjU1LjFfbmV4dEAxNi4xLjZfQGJhYmVsK2NvcmVfMWEwNzIzZmY3ZDMyZDQ0NDliYmExNWVmZDdlZGUyYTQvbm9kZV9tb2R1bGVzL0BwYXlsb2FkY21zL3VpL2Rpc3QvZXhwb3J0cy9jbGllbnQvY2h1bmstUVA1S0M3TUcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3lDc0I7QUFDdEI7QUFDQSxTQUFTaUIsR0FBUVosQ0FBQUEsRUFBR0YsQ0FBQUEsQ0FBRyxDQUNyQjtJQUFBLE1BQUlLLEVBQUksV0FBTyxLQUFLSCxFQUFDLENBQ3JCLEtBQUksU0FBTztJQUFBLHNCQUF1QixDQUNoQyxJQUFJVSxFQUFBQSxDQUFJLFVBQU87SUFBQTtBQUFBO0FBQUEsR0FBc0JWLENBQUMsRUFDdENGLEdBQUFBLEdBQVVZLENBQUFBLENBQUU7SUFBQSxPQUFPLFNBQVVaLENBQUFBLENBQUcsQ0FDOUIsUUFBTztBQUFBO0tBRFRBLENBQU1ZO0FBQ0csR0FBTztJQUFBLFlBQXlCVixFQUFHRixDQUFDLEdBQUUsWUFDL0MsQ0FBQyxHQUFJSyxFQUFFLEtBQUssTUFBTUEsQ0FBQUEsQ0FBR08sRUFBQyxDQUN4QixFQUNBO1FBQUEsT0FBT1AsQ0FDVDtRQUNBLFNBQVNVLEdBQUFBLENBQWViO1FBQUcsQ0FDekIsUUFBU0YsRUFBSSxHQUFHQSxDQUFBQSxDQUFJO1FBQUEsVUFBVTtJQUFBLE9BQVFBLEVBQUFBLEdBQUFBLENBQUssRUFDekM7QUFBQTtNQVBnQjtBQU9oQixFQUFJSyxFQUFZLFdBQVVMLENBQUM7SUFBQSxDQUFuQixPQUF1QixjQUFVQSxDQUFDLElBQUksQ0FBQyxFQUMvQ0EsRUFBSSxFQUFJYyxHQUFRLFNBQU9ULENBQUMsSUFBRyxFQUFJLEVBQUUsUUFBUSxXQUFVTCxFQUFHLENBQ3BESSxHQUFnQkYsRUFBR0YsRUFBR0ssRUFBRUwsQ0FBQztJQUFDLENBQzVCLENBQUMsR0FBSSxVQUFPO1FBQUEscUNBQTRCO1FBQUE7WUFBQSxDQUFPLHVCQUFpQkUsQ0FBRyxRQUFPLGtDQUEwQkcsQ0FBQyxDQUFDLEtBQVksU0FBT0EsQ0FBQyxDQUFDLEVBQUUsU0FBUSxZQUFVTCxFQUFHLENBQ2hKO1FBQUEsRUFBTztZQUFBLFNBQWVFLEdBQUFBO1FBQUdGLEVBQUc7WUFBTztnQkFBQSwwQkFBeUJLLEVBQUdMLEdBQUMsQ0FBQyxHQUNuRSxDQUFDLENBQ0gsQ0FDQSxPQUFPRSxFQUNULENBQ0EsU0FBU2MsSUFBQUEsQ0FBQUEsQ0FBeUJkLEVBQUdHLEVBQUcsQ0FDdEM7WUFBWUgsR0FBUixNQUFXO2dCQUFBLE9BQU8sQ0FBQyxFQUN2QjtZQUFJVTtRQUFBQTtRQUNGWixFQUNBaUIsRUFBSUMsR0FBOEJoQjtJQUFBQTtBQUFHRztNQWJyQjtBQWFzQixFQUN4QyxHQUFJLE9BQU87SUFBQSxvQkFBdUIsQ0FDaEMsSUFBSUksRUFBSSxPQUFPLHNCQUFzQlAsQ0FBQyxFQUN0QyxJQUFLRixFQUFJLEVBQUdBLEVBQUlTLEVBQUU7a0ZLcENQO0FBQUE7TUxrQ1Q7QUtsQ1M7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7TUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtNQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO01BQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtNQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTs7Ozs7Ozs7O0VOYXdDeVU7QUFBQUEsR0FBQUEsS0FBQUEsRUFBQTlHLENBQUFBLEVBQUFBLEVBQThCZ0gsQ0FBQSxFQUFBSCxFQUFBLEVBQy9FSSxHQUFBQTtJQUNFLFNBQ0lMO0FBQUFBO0FBQUFBLENBRzJCN0MsRUFBQSxNQUFBOEMsQ0FBQUcsRUFBQUosQ0FBQSxFQUVsQzdDLEVBQUE7SUFBQzNRLEVBQTBEc00sRUFBQSxHQUFBbUgsQ0FBQUEsQ0FBQW5ILEdBQUFBLENBQUEsR0FBQXNILEVBQUF0SCxFQUFBLEdBQUFrSCxFQUFBbEgsRUFBQSxJQUFBdE0sR0FBQUEsQ0FBQXNNLEVBQUEsR0FBQVEsSUFBQUEsRUFBQVIsRUFBQUEsQ0FBQSxNQUFBUSxJQUFBUixHQUFBLElBQUFwRyxDQUFBQSxDQUFBQSxDQUFBLFlBQUE0RyxDQUFBQSxDQUFBNkQsQ0FBQTtJQVQ5RHJLLEdBQUFBLEdBU0dxSyxDQUEyRCxVQUc1RG5HO1FBQUF2RCxPQUFBQSxFQUNhLFNBQUFnTixFQUFBWCxDQUFBLEVBQUFXLEVBQUFuTixLQUFBQSxDQUFBQSxFQUFBQSxDQUNId007WUFBQUEsQ0FBQUEsR0FBcUJXLENBQTRCak4sRUFBQUEsRUFBQUE7UUFBQUEsQ0FDaEQ4RyxFQUFBQTtJQUFBQTtBQUF1QjtNQVJDOU4sRUFBQXlUO0FBUUQ7SUFBQSxVQUczQkUsRUFBQUEsRUFBbUJiLElBQUFBLENBQUFBLEdBQUFBLE9BQUFBLENBQUFBLEVBQ0pBLEdBQUFvQixJQUFBQSxDQUFBQTtRQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxFQUFBQSxPQUFBNUIsR0FBQUEsTUFBQUEsSUFBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsQ0FBQUMsR0FBQUEsT0FBQUEsTUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsRUFBQSxnQkFBQTNKO0lBQUFBLElBQUE7QUFBQTtBQUFBLFNBQUFBO0lBQUFBLE1BQUFBLEVBWWtCNUksR0FBQUEsRUFBQTtJQUFBLEVBRTlCLENBQUFtVSxFQUFBQSxDQUFBQyxJQUFBLENBQUFwSixFQUFBQSxXQUFBbUosRUFBQUMsQ0FBQSxFQU1OekMsRUFBZ0IzUixFQUFPO0FBQUE7QUFBQSxHQUFBeVQsRUFBQVUsRUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtNQUFBO0FBQUE7SUFBQTtDQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO0tBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTthQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztJQUFBO0lBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtBQUFBO0dBQUE7T0FBQTtBQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1dBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBOztJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO0NBQUEsb0JBQUFQLENBQUEsSUFBQUgsQ0FBQSxJQUlqQixZQUFBWTtJQUFBelAsR0FBQUEsSUFBQTtRQUFBbUU7UUFBQTtRQUFBO1FBQUE7S0FBQSxLQUFBc0wsQ0FBQUEsR0FBQXpQLENBQUEsR0FJTitNLENBQUFBLEVBQUFBLEdBQUE1SSxHQUFBc0wsQ0FBQUEsQ0FBZSxZQUFRLElBR3ZCekssRUFBQUEsQ0FBQUEsQ0FBNkJBLEVBQ3pCQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxDQUFBQSxJQUFBQSxDQUFBQSxJQUFBLENBQ0ZBLENBQUFBLEVBQUFBLEVBQUFBLElBQUFBLENBQUFBLENBQUFBLEVBQUFBLEdBQUEsMEdBQUEwSSxDQUFBQSxJQUFBQTtRQUFBQSxHQUFBQSxHQUNnQkEsR0FBQUQsRUFBQUE7UUFBQUEsS0FBMkNFLEdBQUFBLElBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLENBQ2hERjtRQUFBQSxFQUFpQ0EsR0FBQTtZQUFBO1FBQUE7UUFFNUN3QixFQUFBO1lBQUEsRUFBQUosQ0FBQUEsQ0FBQVksQ0FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Q0FBQSxvQkFBQVQsQ0FBQTtRQUFBO1FBQUEsQ0FXVlcsR0FBQWxCLEtBQUFBLENBQUFBLEdBQUFBO1lBQUFBLEVBQUFBLE9BQUFBLEdBQUFBLEdBQUFBO1lBQUFBLElBQUFBLElBQUFBLEVBQUFBLFFBQUFBO1lBQUFBLEtBQUFBLEVBQUFBLGFBQUFBLENBQUFBO2dCQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtnQkFBQUEsU0FBQUEsS0FBQUEsR0FBQUEsT0FBQUE7Z0JBQUFBLG9CQUFBQSxLQUFBQSxHQUFBQSxrQkFBQUE7WUFBQUEsSUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsRUFBQUEsUUFBQUEsR0FBQUEsS0FBQUEsQ0FBQUEsQ0FBQUE7Ozs7O0lBNUIrQiIsInNvdXJjZXMiOlsiL1VzZXJzL3NyYy9lbGVtZW50cy9Db2RlRWRpdG9yL0NvZGVFZGl0b3IudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcitsb2FkZXJAMS43LjAvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL2xvYWRlci9saWIvZXMvX3ZpcnR1YWwvX3JvbGx1cFBsdWdpbkJhYmVsSGVscGVycy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vc3RhdGUtbG9jYWxAMS4wLjcvbm9kZV9tb2R1bGVzL3N0YXRlLWxvY2FsL2xpYi9lcy9zdGF0ZS1sb2NhbC5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrbG9hZGVyQDEuNy4wL25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9sb2FkZXIvbGliL2VzL2NvbmZpZy9pbmRleC5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrbG9hZGVyQDEuNy4wL25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9sb2FkZXIvbGliL2VzL3V0aWxzL2N1cnJ5LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcitsb2FkZXJAMS43LjAvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL2xvYWRlci9saWIvZXMvdXRpbHMvaXNPYmplY3QuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0Btb25hY28tZWRpdG9yK2xvYWRlckAxLjcuMC9ub2RlX21vZHVsZXMvQG1vbmFjby1lZGl0b3IvbG9hZGVyL2xpYi9lcy92YWxpZGF0b3JzL2luZGV4LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcitsb2FkZXJAMS43LjAvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL2xvYWRlci9saWIvZXMvdXRpbHMvY29tcG9zZS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrbG9hZGVyQDEuNy4wL25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9sb2FkZXIvbGliL2VzL3V0aWxzL2RlZXBNZXJnZS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrbG9hZGVyQDEuNy4wL25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9sb2FkZXIvbGliL2VzL3V0aWxzL21ha2VDYW5jZWxhYmxlLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcitsb2FkZXJAMS43LjAvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL2xvYWRlci9saWIvZXMvbG9hZGVyL2luZGV4LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcityZWFjdEA0LjcuMF9tb25hY28tZWRpdG9yQDAuNTUuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9yZWFjdC9zcmMvaW5kZXgudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0Btb25hY28tZWRpdG9yK3JlYWN0QDQuNy4wX21vbmFjby1lZGl0b3JAMC41NS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL3JlYWN0L3NyYy9EaWZmRWRpdG9yL2luZGV4LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcityZWFjdEA0LjcuMF9tb25hY28tZWRpdG9yQDAuNTUuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9yZWFjdC9zcmMvRGlmZkVkaXRvci9EaWZmRWRpdG9yLnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrcmVhY3RANC43LjBfbW9uYWNvLWVkaXRvckAwLjU1LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQG1vbmFjby1lZGl0b3IvcmVhY3Qvc3JjL01vbmFjb0NvbnRhaW5lci9pbmRleC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrcmVhY3RANC43LjBfbW9uYWNvLWVkaXRvckAwLjU1LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQG1vbmFjby1lZGl0b3IvcmVhY3Qvc3JjL01vbmFjb0NvbnRhaW5lci9Nb25hY29Db250YWluZXIudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcityZWFjdEA0LjcuMF9tb25hY28tZWRpdG9yQDAuNTUuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9yZWFjdC9zcmMvTW9uYWNvQ29udGFpbmVyL3N0eWxlcy50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrcmVhY3RANC43LjBfbW9uYWNvLWVkaXRvckAwLjU1LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQG1vbmFjby1lZGl0b3IvcmVhY3Qvc3JjL0xvYWRpbmcvTG9hZGluZy50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0Btb25hY28tZWRpdG9yK3JlYWN0QDQuNy4wX21vbmFjby1lZGl0b3JAMC41NS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL3JlYWN0L3NyYy9Mb2FkaW5nL3N0eWxlcy50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrcmVhY3RANC43LjBfbW9uYWNvLWVkaXRvckAwLjU1LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQG1vbmFjby1lZGl0b3IvcmVhY3Qvc3JjL0xvYWRpbmcvaW5kZXgudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0Btb25hY28tZWRpdG9yK3JlYWN0QDQuNy4wX21vbmFjby1lZGl0b3JAMC41NS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL3JlYWN0L3NyYy9ob29rcy91c2VNb3VudC9pbmRleC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrcmVhY3RANC43LjBfbW9uYWNvLWVkaXRvckAwLjU1LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQG1vbmFjby1lZGl0b3IvcmVhY3Qvc3JjL2hvb2tzL3VzZVVwZGF0ZS9pbmRleC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQG1vbmFjby1lZGl0b3IrcmVhY3RANC43LjBfbW9uYWNvLWVkaXRvckAwLjU1LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQG1vbmFjby1lZGl0b3IvcmVhY3Qvc3JjL3V0aWxzL2luZGV4LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcityZWFjdEA0LjcuMF9tb25hY28tZWRpdG9yQDAuNTUuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9yZWFjdC9zcmMvaG9va3MvdXNlTW9uYWNvL2luZGV4LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcityZWFjdEA0LjcuMF9tb25hY28tZWRpdG9yQDAuNTUuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9yZWFjdC9zcmMvRWRpdG9yL2luZGV4LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AbW9uYWNvLWVkaXRvcityZWFjdEA0LjcuMF9tb25hY28tZWRpdG9yQDAuNTUuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AbW9uYWNvLWVkaXRvci9yZWFjdC9zcmMvRWRpdG9yL0VkaXRvci50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0Btb25hY28tZWRpdG9yK3JlYWN0QDQuNy4wX21vbmFjby1lZGl0b3JAMC41NS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0Btb25hY28tZWRpdG9yL3JlYWN0L3NyYy9ob29rcy91c2VQcmV2aW91cy9pbmRleC50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1RoZW1lL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL0NvbmZpZy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2hvb2tzL3VzZUNvbnRyb2xsYWJsZVN0YXRlLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9TaGltbWVyRWZmZWN0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaG9va3MvdXNlRGVsYXkudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0NvZGVFZGl0b3IvY29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuaW1wb3J0IEVkaXRvckltcG9ydCBmcm9tICdAbW9uYWNvLWVkaXRvci9yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlVGhlbWUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVGhlbWUvaW5kZXguanMnXG5pbXBvcnQgeyBTaGltbWVyRWZmZWN0IH0gZnJvbSAnLi4vU2hpbW1lckVmZmVjdC9pbmRleC5qcydcbmltcG9ydCB7IGRlZmF1bHRHbG9iYWxFZGl0b3JPcHRpb25zLCBkZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IEVkaXRvciA9ICdkZWZhdWx0JyBpbiBFZGl0b3JJbXBvcnQgPyBFZGl0b3JJbXBvcnQuZGVmYXVsdCA6IEVkaXRvckltcG9ydFxuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29kZS1lZGl0b3InXG5cbmNvbnN0IENvZGVFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIG1heEhlaWdodCxcbiAgICBtaW5IZWlnaHQsXG4gICAgb3B0aW9ucyxcbiAgICByZWFkT25seSxcbiAgICByZWNhbGN1bGF0ZWRIZWlnaHRBdCxcbiAgICB2YWx1ZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wc1xuICBjb25zdCBNSU5fSEVJR0hUID0gbWluSGVpZ2h0ID8/IDU2IC8vIGVxdWl2YWxlbnQgdG8gMyBsaW5lc1xuICBjb25zdCBwcmV2Q2FsY3VsYXRlZEhlaWdodEF0ID0gUmVhY3QudXNlUmVmPG51bWJlciB8IHVuZGVmaW5lZD4ocmVjYWxjdWxhdGVkSGVpZ2h0QXQpXG5cbiAgLy8gRXh0cmFjdCBwZXItbW9kZWwgc2V0dGluZ3MgdG8gYXZvaWQgZ2xvYmFsIGNvbmZsaWN0c1xuICBjb25zdCB7IGluc2VydFNwYWNlcywgdGFiU2l6ZSwgdHJpbUF1dG9XaGl0ZXNwYWNlLCAuLi5nbG9iYWxFZGl0b3JPcHRpb25zIH0gPSBvcHRpb25zIHx8IHt9XG4gIGNvbnN0IHBhZGRpbmdGcm9tUHJvcHMgPSBvcHRpb25zPy5wYWRkaW5nXG4gICAgPyAob3B0aW9ucy5wYWRkaW5nLnRvcCB8fCAwKSArIChvcHRpb25zLnBhZGRpbmc/LmJvdHRvbSB8fCAwKVxuICAgIDogMFxuXG4gIGNvbnN0IFtkeW5hbWljSGVpZ2h0LCBzZXREeW5hbWljSGVpZ2h0XSA9IHVzZVN0YXRlKE1JTl9IRUlHSFQpXG4gIGNvbnN0IHsgdGhlbWUgfSA9IHVzZVRoZW1lKClcblxuICBjb25zdCBjbGFzc2VzID0gW1xuICAgIGJhc2VDbGFzcyxcbiAgICBjbGFzc05hbWUsXG4gICAgcmVzdD8uZGVmYXVsdExhbmd1YWdlID8gYGxhbmd1YWdlLS0ke3Jlc3QuZGVmYXVsdExhbmd1YWdlfWAgOiAnJyxcbiAgICByZWFkT25seSAmJiAncmVhZC1vbmx5JyxcbiAgXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmVjYWxjdWxhdGVkSGVpZ2h0QXQgJiYgcmVjYWxjdWxhdGVkSGVpZ2h0QXQgPiBwcmV2Q2FsY3VsYXRlZEhlaWdodEF0LmN1cnJlbnQpIHtcbiAgICAgIHNldER5bmFtaWNIZWlnaHQoXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPyBNYXRoLm1heChNSU5fSEVJR0hULCB2YWx1ZS5zcGxpdCgnXFxuJykubGVuZ3RoICogMTggKyAyICsgcGFkZGluZ0Zyb21Qcm9wcylcbiAgICAgICAgICA6IE1JTl9IRUlHSFQsXG4gICAgICApXG4gICAgICBwcmV2Q2FsY3VsYXRlZEhlaWdodEF0LmN1cnJlbnQgPSByZWNhbGN1bGF0ZWRIZWlnaHRBdFxuICAgIH1cbiAgfSwgW3ZhbHVlLCBNSU5fSEVJR0hULCBwYWRkaW5nRnJvbVByb3BzLCByZWNhbGN1bGF0ZWRIZWlnaHRBdF0pXG5cbiAgcmV0dXJuIChcbiAgICA8RWRpdG9yXG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICBoZWlnaHQ9e21heEhlaWdodCA/IE1hdGgubWluKGR5bmFtaWNIZWlnaHQsIG1heEhlaWdodCkgOiBkeW5hbWljSGVpZ2h0fVxuICAgICAgbG9hZGluZz17PFNoaW1tZXJFZmZlY3QgaGVpZ2h0PXtkeW5hbWljSGVpZ2h0fSAvPn1cbiAgICAgIG9wdGlvbnM9e3tcbiAgICAgICAgLi4uZGVmYXVsdEdsb2JhbEVkaXRvck9wdGlvbnMsXG4gICAgICAgIC4uLmdsb2JhbEVkaXRvck9wdGlvbnMsXG4gICAgICAgIHJlYWRPbmx5OiBCb29sZWFuKHJlYWRPbmx5KSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIG9uTW91bnQgdGhlIG1vZGVsIHdpbGwgc2V0OlxuICAgICAgICAgKiAtIGluc2VydFNwYWNlc1xuICAgICAgICAgKiAtIHRhYlNpemVcbiAgICAgICAgICogLSB0cmltQXV0b1doaXRlc3BhY2VcbiAgICAgICAgICovXG4gICAgICAgIGRldGVjdEluZGVudGF0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5zZXJ0U3BhY2VzOiB1bmRlZmluZWQsXG4gICAgICAgIHRhYlNpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgdHJpbUF1dG9XaGl0ZXNwYWNlOiB1bmRlZmluZWQsXG4gICAgICB9fVxuICAgICAgdGhlbWU9e3RoZW1lID09PSAnZGFyaycgPyAndnMtZGFyaycgOiAndnMnfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgey4uLnJlc3R9XG4gICAgICAvLyBTaW5jZSB3ZSBhcmUgbm90IGJ1aWxkaW5nIGFuIElERSBhbmQgdGhlIGNvbnRhaW5lclxuICAgICAgLy8gY2FuIGFscmVhZHkgaGF2ZSBzY3JvbGxpbmcsIHdlIHdhbnQgdGhlIGhlaWdodCBvZiB0aGVcbiAgICAgIC8vIGVkaXRvciB0byBmaXQgaXRzIGNvbnRlbnQuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvbW9uYWNvLWVkaXRvci9kaXNjdXNzaW9ucy8zNjc3XG4gICAgICBvbkNoYW5nZT17KHZhbHVlLCBldikgPT4ge1xuICAgICAgICByZXN0Lm9uQ2hhbmdlPy4odmFsdWUsIGV2KVxuICAgICAgICBzZXREeW5hbWljSGVpZ2h0KFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICA/IE1hdGgubWF4KE1JTl9IRUlHSFQsIHZhbHVlLnNwbGl0KCdcXG4nKS5sZW5ndGggKiAxOCArIDIgKyBwYWRkaW5nRnJvbVByb3BzKVxuICAgICAgICAgICAgOiBNSU5fSEVJR0hULFxuICAgICAgICApXG4gICAgICB9fVxuICAgICAgb25Nb3VudD17KGVkaXRvciwgbW9uYWNvKSA9PiB7XG4gICAgICAgIHJlc3Qub25Nb3VudD8uKGVkaXRvciwgbW9uYWNvKVxuXG4gICAgICAgIC8vIFNldCBwZXItbW9kZWwgb3B0aW9ucyB0byBhdm9pZCBnbG9iYWwgY29uZmxpY3RzXG4gICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKClcbiAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgbW9kZWwudXBkYXRlT3B0aW9ucyh7XG4gICAgICAgICAgICBpbnNlcnRTcGFjZXM6IGluc2VydFNwYWNlcyA/PyBkZWZhdWx0T3B0aW9ucy5pbnNlcnRTcGFjZXMsXG4gICAgICAgICAgICB0YWJTaXplOiB0YWJTaXplID8/IGRlZmF1bHRPcHRpb25zLnRhYlNpemUsXG4gICAgICAgICAgICB0cmltQXV0b1doaXRlc3BhY2U6IHRyaW1BdXRvV2hpdGVzcGFjZSA/PyBkZWZhdWx0T3B0aW9ucy50cmltQXV0b1doaXRlc3BhY2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHNldER5bmFtaWNIZWlnaHQoXG4gICAgICAgICAgTWF0aC5tYXgoTUlOX0hFSUdIVCwgZWRpdG9yLmdldFZhbHVlKCkuc3BsaXQoJ1xcbicpLmxlbmd0aCAqIDE4ICsgMiArIHBhZGRpbmdGcm9tUHJvcHMpLFxuICAgICAgICApXG4gICAgICB9fVxuICAgIC8+XG4gIClcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgQ29kZUVkaXRvclxuIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xuICAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7XG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9IHRydWUsXG4gICAgICBvID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIDsgZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gdHJ1ZSwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGUsIHQpIHtcbiAgaWYgKG51bGwgPT0gZSkgcmV0dXJuIHt9O1xuICB2YXIgbyxcbiAgICByLFxuICAgIGkgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkociwgZSkge1xuICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgZSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiO1xufVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcbiAgaWYgKHIpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XG4gIH1cbn1cblxuZXhwb3J0IHsgX2FycmF5TGlrZVRvQXJyYXkgYXMgYXJyYXlMaWtlVG9BcnJheSwgX2FycmF5V2l0aEhvbGVzIGFzIGFycmF5V2l0aEhvbGVzLCBfZGVmaW5lUHJvcGVydHkgYXMgZGVmaW5lUHJvcGVydHksIF9pdGVyYWJsZVRvQXJyYXlMaW1pdCBhcyBpdGVyYWJsZVRvQXJyYXlMaW1pdCwgX25vbkl0ZXJhYmxlUmVzdCBhcyBub25JdGVyYWJsZVJlc3QsIF9vYmplY3RTcHJlYWQyIGFzIG9iamVjdFNwcmVhZDIsIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBhcyBvYmplY3RXaXRob3V0UHJvcGVydGllcywgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSwgX3NsaWNlZFRvQXJyYXkgYXMgc2xpY2VkVG9BcnJheSwgX3RvUHJpbWl0aXZlIGFzIHRvUHJpbWl0aXZlLCBfdG9Qcm9wZXJ0eUtleSBhcyB0b1Byb3BlcnR5S2V5LCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgYXMgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgfTtcbiIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21wb3NlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZm5zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZuc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBmbnMucmVkdWNlUmlnaHQoZnVuY3Rpb24gKHksIGYpIHtcbiAgICAgIHJldHVybiBmKHkpO1xuICAgIH0sIHgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjdXJyeShmbikge1xuICByZXR1cm4gZnVuY3Rpb24gY3VycmllZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoID49IGZuLmxlbmd0aCA/IGZuLmFwcGx5KHRoaXMsIGFyZ3MpIDogZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBuZXh0QXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBuZXh0QXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmllZC5hcHBseShfdGhpcywgW10uY29uY2F0KGFyZ3MsIG5leHRBcmdzKSk7XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwodmFsdWUpLmluY2x1ZGVzKCdPYmplY3QnKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuICFPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hhbmdlcyhpbml0aWFsLCBjaGFuZ2VzKSB7XG4gIGlmICghaXNPYmplY3QoY2hhbmdlcykpIGVycm9ySGFuZGxlcignY2hhbmdlVHlwZScpO1xuICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlcykuc29tZShmdW5jdGlvbiAoZmllbGQpIHtcbiAgICByZXR1cm4gIWhhc093blByb3BlcnR5KGluaXRpYWwsIGZpZWxkKTtcbiAgfSkpIGVycm9ySGFuZGxlcignY2hhbmdlRmllbGQnKTtcbiAgcmV0dXJuIGNoYW5nZXM7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgaWYgKCFpc0Z1bmN0aW9uKHNlbGVjdG9yKSkgZXJyb3JIYW5kbGVyKCdzZWxlY3RvclR5cGUnKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIpIHtcbiAgaWYgKCEoaXNGdW5jdGlvbihoYW5kbGVyKSB8fCBpc09iamVjdChoYW5kbGVyKSkpIGVycm9ySGFuZGxlcignaGFuZGxlclR5cGUnKTtcbiAgaWYgKGlzT2JqZWN0KGhhbmRsZXIpICYmIE9iamVjdC52YWx1ZXMoaGFuZGxlcikuc29tZShmdW5jdGlvbiAoX2hhbmRsZXIpIHtcbiAgICByZXR1cm4gIWlzRnVuY3Rpb24oX2hhbmRsZXIpO1xuICB9KSkgZXJyb3JIYW5kbGVyKCdoYW5kbGVyc1R5cGUnKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbml0aWFsKGluaXRpYWwpIHtcbiAgaWYgKCFpbml0aWFsKSBlcnJvckhhbmRsZXIoJ2luaXRpYWxJc1JlcXVpcmVkJyk7XG4gIGlmICghaXNPYmplY3QoaW5pdGlhbCkpIGVycm9ySGFuZGxlcignaW5pdGlhbFR5cGUnKTtcbiAgaWYgKGlzRW1wdHkoaW5pdGlhbCkpIGVycm9ySGFuZGxlcignaW5pdGlhbENvbnRlbnQnKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2VzLCB0eXBlKSB7XG4gIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VzW3R5cGVdIHx8IGVycm9yTWVzc2FnZXNbXCJkZWZhdWx0XCJdKTtcbn1cblxudmFyIGVycm9yTWVzc2FnZXMgPSB7XG4gIGluaXRpYWxJc1JlcXVpcmVkOiAnaW5pdGlhbCBzdGF0ZSBpcyByZXF1aXJlZCcsXG4gIGluaXRpYWxUeXBlOiAnaW5pdGlhbCBzdGF0ZSBzaG91bGQgYmUgYW4gb2JqZWN0JyxcbiAgaW5pdGlhbENvbnRlbnQ6ICdpbml0aWFsIHN0YXRlIHNob3VsZG5cXCd0IGJlIGFuIGVtcHR5IG9iamVjdCcsXG4gIGhhbmRsZXJUeXBlOiAnaGFuZGxlciBzaG91bGQgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24nLFxuICBoYW5kbGVyc1R5cGU6ICdhbGwgaGFuZGxlcnMgc2hvdWxkIGJlIGEgZnVuY3Rpb25zJyxcbiAgc2VsZWN0b3JUeXBlOiAnc2VsZWN0b3Igc2hvdWxkIGJlIGEgZnVuY3Rpb24nLFxuICBjaGFuZ2VUeXBlOiAncHJvdmlkZWQgdmFsdWUgb2YgY2hhbmdlcyBzaG91bGQgYmUgYW4gb2JqZWN0JyxcbiAgY2hhbmdlRmllbGQ6ICdpdCBzZWFtcyB5b3Ugd2FudCB0byBjaGFuZ2UgYSBmaWVsZCBpbiB0aGUgc3RhdGUgd2hpY2ggaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgXCJpbml0aWFsXCIgc3RhdGUnLFxuICBcImRlZmF1bHRcIjogJ2FuIHVua25vd24gZXJyb3IgYWNjdXJlZCBpbiBgc3RhdGUtbG9jYWxgIHBhY2thZ2UnXG59O1xudmFyIGVycm9ySGFuZGxlciA9IGN1cnJ5KHRocm93RXJyb3IpKGVycm9yTWVzc2FnZXMpO1xudmFyIHZhbGlkYXRvcnMgPSB7XG4gIGNoYW5nZXM6IHZhbGlkYXRlQ2hhbmdlcyxcbiAgc2VsZWN0b3I6IHZhbGlkYXRlU2VsZWN0b3IsXG4gIGhhbmRsZXI6IHZhbGlkYXRlSGFuZGxlcixcbiAgaW5pdGlhbDogdmFsaWRhdGVJbml0aWFsXG59O1xuXG5mdW5jdGlvbiBjcmVhdGUoaW5pdGlhbCkge1xuICB2YXIgaGFuZGxlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhbGlkYXRvcnMuaW5pdGlhbChpbml0aWFsKTtcbiAgdmFsaWRhdG9ycy5oYW5kbGVyKGhhbmRsZXIpO1xuICB2YXIgc3RhdGUgPSB7XG4gICAgY3VycmVudDogaW5pdGlhbFxuICB9O1xuICB2YXIgZGlkVXBkYXRlID0gY3VycnkoZGlkU3RhdGVVcGRhdGUpKHN0YXRlLCBoYW5kbGVyKTtcbiAgdmFyIHVwZGF0ZSA9IGN1cnJ5KHVwZGF0ZVN0YXRlKShzdGF0ZSk7XG4gIHZhciB2YWxpZGF0ZSA9IGN1cnJ5KHZhbGlkYXRvcnMuY2hhbmdlcykoaW5pdGlhbCk7XG4gIHZhciBnZXRDaGFuZ2VzID0gY3VycnkoZXh0cmFjdENoYW5nZXMpKHN0YXRlKTtcblxuICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICB2YXIgc2VsZWN0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH07XG4gICAgdmFsaWRhdG9ycy5zZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgcmV0dXJuIHNlbGVjdG9yKHN0YXRlLmN1cnJlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUoY2F1c2VkQ2hhbmdlcykge1xuICAgIGNvbXBvc2UoZGlkVXBkYXRlLCB1cGRhdGUsIHZhbGlkYXRlLCBnZXRDaGFuZ2VzKShjYXVzZWRDaGFuZ2VzKTtcbiAgfVxuXG4gIHJldHVybiBbZ2V0U3RhdGUsIHNldFN0YXRlXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENoYW5nZXMoc3RhdGUsIGNhdXNlZENoYW5nZXMpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24oY2F1c2VkQ2hhbmdlcykgPyBjYXVzZWRDaGFuZ2VzKHN0YXRlLmN1cnJlbnQpIDogY2F1c2VkQ2hhbmdlcztcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoc3RhdGUsIGNoYW5nZXMpIHtcbiAgc3RhdGUuY3VycmVudCA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdGF0ZS5jdXJyZW50KSwgY2hhbmdlcyk7XG4gIHJldHVybiBjaGFuZ2VzO1xufVxuXG5mdW5jdGlvbiBkaWRTdGF0ZVVwZGF0ZShzdGF0ZSwgaGFuZGxlciwgY2hhbmdlcykge1xuICBpc0Z1bmN0aW9uKGhhbmRsZXIpID8gaGFuZGxlcihzdGF0ZS5jdXJyZW50KSA6IE9iamVjdC5rZXlzKGNoYW5nZXMpLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgdmFyIF9oYW5kbGVyJGZpZWxkO1xuXG4gICAgcmV0dXJuIChfaGFuZGxlciRmaWVsZCA9IGhhbmRsZXJbZmllbGRdKSA9PT0gbnVsbCB8fCBfaGFuZGxlciRmaWVsZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2hhbmRsZXIkZmllbGQuY2FsbChoYW5kbGVyLCBzdGF0ZS5jdXJyZW50W2ZpZWxkXSk7XG4gIH0pO1xuICByZXR1cm4gY2hhbmdlcztcbn1cblxudmFyIGluZGV4ID0ge1xuICBjcmVhdGU6IGNyZWF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iLCJ2YXIgY29uZmlnID0ge1xuICBwYXRoczoge1xuICAgIHZzOiAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQDAuNTUuMS9taW4vdnMnXG4gIH1cbn07XG5cbmV4cG9ydCB7IGNvbmZpZyBhcyBkZWZhdWx0IH07XG4iLCJmdW5jdGlvbiBjdXJyeShmbikge1xuICByZXR1cm4gZnVuY3Rpb24gY3VycmllZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoID49IGZuLmxlbmd0aCA/IGZuLmFwcGx5KHRoaXMsIGFyZ3MpIDogZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBuZXh0QXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBuZXh0QXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJpZWQuYXBwbHkoX3RoaXMsIFtdLmNvbmNhdChhcmdzLCBuZXh0QXJncykpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB7IGN1cnJ5IGFzIGRlZmF1bHQgfTtcbiIsImZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHZhbHVlKS5pbmNsdWRlcygnT2JqZWN0Jyk7XG59XG5cbmV4cG9ydCB7IGlzT2JqZWN0IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBjdXJyeSBmcm9tICcuLi91dGlscy9jdXJyeS5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi4vdXRpbHMvaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIHZhbGlkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgYW5kIGluZm9ybXMgYWJvdXQgZGVwcmVjYXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNvbmZpZyAtIHRoZSB2YWxpZGF0ZWQgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb25maWcoY29uZmlnKSB7XG4gIGlmICghY29uZmlnKSBlcnJvckhhbmRsZXIoJ2NvbmZpZ0lzUmVxdWlyZWQnKTtcbiAgaWYgKCFpc09iamVjdChjb25maWcpKSBlcnJvckhhbmRsZXIoJ2NvbmZpZ1R5cGUnKTtcbiAgaWYgKGNvbmZpZy51cmxzKSB7XG4gICAgaW5mb3JtQWJvdXREZXByZWNhdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoczoge1xuICAgICAgICB2czogY29uZmlnLnVybHMubW9uYWNvQmFzZVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBsb2dzIGRlcHJlY2F0aW9uIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gaW5mb3JtQWJvdXREZXByZWNhdGlvbigpIHtcbiAgY29uc29sZS53YXJuKGVycm9yTWVzc2FnZXMuZGVwcmVjYXRpb24pO1xufVxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2VzLCB0eXBlKSB7XG4gIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VzW3R5cGVdIHx8IGVycm9yTWVzc2FnZXNbXCJkZWZhdWx0XCJdKTtcbn1cbnZhciBlcnJvck1lc3NhZ2VzID0ge1xuICBjb25maWdJc1JlcXVpcmVkOiAndGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGlzIHJlcXVpcmVkJyxcbiAgY29uZmlnVHlwZTogJ3RoZSBjb25maWd1cmF0aW9uIG9iamVjdCBzaG91bGQgYmUgYW4gb2JqZWN0JyxcbiAgXCJkZWZhdWx0XCI6ICdhbiB1bmtub3duIGVycm9yIGFjY3VyZWQgaW4gYEBtb25hY28tZWRpdG9yL2xvYWRlcmAgcGFja2FnZScsXG4gIGRlcHJlY2F0aW9uOiBcIkRlcHJlY2F0aW9uIHdhcm5pbmchXFxuICAgIFlvdSBhcmUgdXNpbmcgZGVwcmVjYXRlZCB3YXkgb2YgY29uZmlndXJhdGlvbi5cXG5cXG4gICAgSW5zdGVhZCBvZiB1c2luZ1xcbiAgICAgIG1vbmFjby5jb25maWcoeyB1cmxzOiB7IG1vbmFjb0Jhc2U6ICcuLi4nIH0gfSlcXG4gICAgdXNlXFxuICAgICAgbW9uYWNvLmNvbmZpZyh7IHBhdGhzOiB7IHZzOiAnLi4uJyB9IH0pXFxuXFxuICAgIEZvciBtb3JlIHBsZWFzZSBjaGVjayB0aGUgbGluayBodHRwczovL2dpdGh1Yi5jb20vc3VyZW4tYXRveWFuL21vbmFjby1sb2FkZXIjY29uZmlnXFxuICBcIlxufTtcbnZhciBlcnJvckhhbmRsZXIgPSBjdXJyeSh0aHJvd0Vycm9yKShlcnJvck1lc3NhZ2VzKTtcbnZhciB2YWxpZGF0b3JzID0ge1xuICBjb25maWc6IHZhbGlkYXRlQ29uZmlnXG59O1xuXG5leHBvcnQgeyB2YWxpZGF0b3JzIGFzIGRlZmF1bHQsIGVycm9ySGFuZGxlciwgZXJyb3JNZXNzYWdlcyB9O1xuIiwidmFyIGNvbXBvc2UgPSBmdW5jdGlvbiBjb21wb3NlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZm5zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZuc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gZm5zLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uICh5LCBmKSB7XG4gICAgICByZXR1cm4gZih5KTtcbiAgICB9LCB4KTtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGNvbXBvc2UgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkMiBhcyBfb2JqZWN0U3ByZWFkMiB9IGZyb20gJy4uL192aXJ0dWFsL19yb2xsdXBQbHVnaW5CYWJlbEhlbHBlcnMuanMnO1xuXG5mdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSkge1xuICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChzb3VyY2Vba2V5XSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgaWYgKHRhcmdldFtrZXldKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc291cmNlW2tleV0sIG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgdGFyZ2V0KSwgc291cmNlKTtcbn1cblxuZXhwb3J0IHsgbWVyZ2UgYXMgZGVmYXVsdCB9O1xuIiwiLy8gVGhlIHNvdXJjZSAoaGFzIGJlZW4gY2hhbmdlZCkgaXMgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy81NDY1I2lzc3VlY29tbWVudC0xNTc4ODgzMjVcblxudmFyIENBTkNFTEFUSU9OX01FU1NBR0UgPSB7XG4gIHR5cGU6ICdjYW5jZWxhdGlvbicsXG4gIG1zZzogJ29wZXJhdGlvbiBpcyBtYW51YWxseSBjYW5jZWxlZCdcbn07XG5mdW5jdGlvbiBtYWtlQ2FuY2VsYWJsZShwcm9taXNlKSB7XG4gIHZhciBoYXNDYW5jZWxlZF8gPSBmYWxzZTtcbiAgdmFyIHdyYXBwZWRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gaGFzQ2FuY2VsZWRfID8gcmVqZWN0KENBTkNFTEFUSU9OX01FU1NBR0UpIDogcmVzb2x2ZSh2YWwpO1xuICAgIH0pO1xuICAgIHByb21pc2VbXCJjYXRjaFwiXShyZWplY3QpO1xuICB9KTtcbiAgcmV0dXJuIHdyYXBwZWRQcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaGFzQ2FuY2VsZWRfID0gdHJ1ZTtcbiAgfSwgd3JhcHBlZFByb21pc2U7XG59XG5cbmV4cG9ydCB7IENBTkNFTEFUSU9OX01FU1NBR0UsIG1ha2VDYW5jZWxhYmxlIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IHNsaWNlZFRvQXJyYXkgYXMgX3NsaWNlZFRvQXJyYXksIG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGFzIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyB9IGZyb20gJy4uL192aXJ0dWFsL19yb2xsdXBQbHVnaW5CYWJlbEhlbHBlcnMuanMnO1xuaW1wb3J0IHN0YXRlIGZyb20gJ3N0YXRlLWxvY2FsJztcbmltcG9ydCBjb25maWckMSBmcm9tICcuLi9jb25maWcvaW5kZXguanMnO1xuaW1wb3J0IHZhbGlkYXRvcnMgZnJvbSAnLi4vdmFsaWRhdG9ycy9pbmRleC5qcyc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuLi91dGlscy9jb21wb3NlLmpzJztcbmltcG9ydCBtZXJnZSBmcm9tICcuLi91dGlscy9kZWVwTWVyZ2UuanMnO1xuaW1wb3J0IG1ha2VDYW5jZWxhYmxlIGZyb20gJy4uL3V0aWxzL21ha2VDYW5jZWxhYmxlLmpzJztcblxudmFyIF9leGNsdWRlZCA9IFtcIm1vbmFjb1wiXTtcblxuLyoqIHRoZSBsb2NhbCBzdGF0ZSBvZiB0aGUgbW9kdWxlICovXG52YXIgX3N0YXRlJGNyZWF0ZSA9IHN0YXRlLmNyZWF0ZSh7XG4gICAgY29uZmlnOiBjb25maWckMSxcbiAgICBpc0luaXRpYWxpemVkOiBmYWxzZSxcbiAgICByZXNvbHZlOiBudWxsLFxuICAgIHJlamVjdDogbnVsbCxcbiAgICBtb25hY286IG51bGxcbiAgfSksXG4gIF9zdGF0ZSRjcmVhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3N0YXRlJGNyZWF0ZSwgMiksXG4gIGdldFN0YXRlID0gX3N0YXRlJGNyZWF0ZTJbMF0sXG4gIHNldFN0YXRlID0gX3N0YXRlJGNyZWF0ZTJbMV07XG5cbi8qKlxuICogc2V0IHRoZSBsb2FkZXIgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdFxuICovXG5mdW5jdGlvbiBjb25maWcoZ2xvYmFsQ29uZmlnKSB7XG4gIHZhciBfdmFsaWRhdG9ycyRjb25maWcgPSB2YWxpZGF0b3JzLmNvbmZpZyhnbG9iYWxDb25maWcpLFxuICAgIG1vbmFjbyA9IF92YWxpZGF0b3JzJGNvbmZpZy5tb25hY28sXG4gICAgY29uZmlnID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF92YWxpZGF0b3JzJGNvbmZpZywgX2V4Y2x1ZGVkKTtcbiAgc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzogbWVyZ2Uoc3RhdGUuY29uZmlnLCBjb25maWcpLFxuICAgICAgbW9uYWNvOiBtb25hY29cbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbW9uYWNvLWVkaXRvclxuICogQHJldHVybiB7UHJvbWlzZX0gLSByZXR1cm5zIGFuIGluc3RhbmNlIG9mIG1vbmFjbyAod2l0aCBhIGNhbmNlbGFibGUgcHJvbWlzZSlcbiAqL1xuZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgbW9uYWNvID0gX3JlZi5tb25hY28sXG4gICAgICBpc0luaXRpYWxpemVkID0gX3JlZi5pc0luaXRpYWxpemVkLFxuICAgICAgcmVzb2x2ZSA9IF9yZWYucmVzb2x2ZTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9uYWNvOiBtb25hY28sXG4gICAgICBpc0luaXRpYWxpemVkOiBpc0luaXRpYWxpemVkLFxuICAgICAgcmVzb2x2ZTogcmVzb2x2ZVxuICAgIH07XG4gIH0pO1xuICBpZiAoIXN0YXRlLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBpc0luaXRpYWxpemVkOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKHN0YXRlLm1vbmFjbykge1xuICAgICAgc3RhdGUucmVzb2x2ZShzdGF0ZS5tb25hY28pO1xuICAgICAgcmV0dXJuIG1ha2VDYW5jZWxhYmxlKHdyYXBwZXJQcm9taXNlKTtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5tb25hY28gJiYgd2luZG93Lm1vbmFjby5lZGl0b3IpIHtcbiAgICAgIHN0b3JlTW9uYWNvSW5zdGFuY2Uod2luZG93Lm1vbmFjbyk7XG4gICAgICBzdGF0ZS5yZXNvbHZlKHdpbmRvdy5tb25hY28pO1xuICAgICAgcmV0dXJuIG1ha2VDYW5jZWxhYmxlKHdyYXBwZXJQcm9taXNlKTtcbiAgICB9XG4gICAgY29tcG9zZShpbmplY3RTY3JpcHRzLCBnZXRNb25hY29Mb2FkZXJTY3JpcHQpKGNvbmZpZ3VyZUxvYWRlcik7XG4gIH1cbiAgcmV0dXJuIG1ha2VDYW5jZWxhYmxlKHdyYXBwZXJQcm9taXNlKTtcbn1cblxuLyoqXG4gKiBpbmplY3RzIHByb3ZpZGVkIHNjcmlwdHMgaW50byB0aGUgZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtPYmplY3R9IHNjcmlwdCAtIGFuIEhUTUwgc2NyaXB0IGVsZW1lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gLSB0aGUgaW5qZWN0ZWQgSFRNTCBzY3JpcHQgZWxlbWVudFxuICovXG5mdW5jdGlvbiBpbmplY3RTY3JpcHRzKHNjcmlwdCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xufVxuXG4vKipcbiAqIGNyZWF0ZXMgYW4gSFRNTCBzY3JpcHQgZWxlbWVudCB3aXRoL3dpdGhvdXQgcHJvdmlkZWQgc3JjXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NyY10gLSB0aGUgc291cmNlIHBhdGggb2YgdGhlIHNjcmlwdFxuICogQHJldHVybiB7T2JqZWN0fSAtIHRoZSBjcmVhdGVkIEhUTUwgc2NyaXB0IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2NyaXB0KHNyYykge1xuICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIHJldHVybiBzcmMgJiYgKHNjcmlwdC5zcmMgPSBzcmMpLCBzY3JpcHQ7XG59XG5cbi8qKlxuICogY3JlYXRlcyBhbiBIVE1MIHNjcmlwdCBlbGVtZW50IHdpdGggdGhlIG1vbmFjbyBsb2FkZXIgc3JjXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdGhlIGNyZWF0ZWQgSFRNTCBzY3JpcHQgZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRNb25hY29Mb2FkZXJTY3JpcHQoY29uZmlndXJlTG9hZGVyKSB7XG4gIHZhciBzdGF0ZSA9IGdldFN0YXRlKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICByZWplY3QgPSBfcmVmMi5yZWplY3Q7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgcmVqZWN0OiByZWplY3RcbiAgICB9O1xuICB9KTtcbiAgdmFyIGxvYWRlclNjcmlwdCA9IGNyZWF0ZVNjcmlwdChcIlwiLmNvbmNhdChzdGF0ZS5jb25maWcucGF0aHMudnMsIFwiL2xvYWRlci5qc1wiKSk7XG4gIGxvYWRlclNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyZUxvYWRlcigpO1xuICB9O1xuICBsb2FkZXJTY3JpcHQub25lcnJvciA9IHN0YXRlLnJlamVjdDtcbiAgcmV0dXJuIGxvYWRlclNjcmlwdDtcbn1cblxuLyoqXG4gKiBjb25maWd1cmVzIHRoZSBtb25hY28gbG9hZGVyXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZUxvYWRlcigpIHtcbiAgdmFyIHN0YXRlID0gZ2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYzLmNvbmZpZyxcbiAgICAgIHJlc29sdmUgPSBfcmVmMy5yZXNvbHZlLFxuICAgICAgcmVqZWN0ID0gX3JlZjMucmVqZWN0O1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICByZWplY3Q6IHJlamVjdFxuICAgIH07XG4gIH0pO1xuICB2YXIgcmVxdWlyZSA9IHdpbmRvdy5yZXF1aXJlO1xuICByZXF1aXJlLmNvbmZpZyhzdGF0ZS5jb25maWcpO1xuICByZXF1aXJlKFsndnMvZWRpdG9yL2VkaXRvci5tYWluJ10sIGZ1bmN0aW9uIChsb2FkZWQpIHtcbiAgICB2YXIgbW9uYWNvID0gbG9hZGVkLm0gLyogZm9yIDAuNTMgJiAwLjU0ICovIHx8IGxvYWRlZCAvKiBmb3Igb3RoZXIgdmVyc2lvbnMgKi87XG4gICAgc3RvcmVNb25hY29JbnN0YW5jZShtb25hY28pO1xuICAgIHN0YXRlLnJlc29sdmUobW9uYWNvKTtcbiAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgc3RhdGUucmVqZWN0KGVycm9yKTtcbiAgfSk7XG59XG5cbi8qKlxuICogc3RvcmUgbW9uYWNvIGluc3RhbmNlIGluIGxvY2FsIHN0YXRlXG4gKi9cbmZ1bmN0aW9uIHN0b3JlTW9uYWNvSW5zdGFuY2UobW9uYWNvKSB7XG4gIGlmICghZ2V0U3RhdGUoKS5tb25hY28pIHtcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBtb25hY286IG1vbmFjb1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uXG4gKiBleHRyYWN0cyBzdG9yZWQgbW9uYWNvIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gLSB0aGUgbW9uYWNvIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIF9fZ2V0TW9uYWNvSW5zdGFuY2UoKSB7XG4gIHJldHVybiBnZXRTdGF0ZShmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICB2YXIgbW9uYWNvID0gX3JlZjQubW9uYWNvO1xuICAgIHJldHVybiBtb25hY287XG4gIH0pO1xufVxudmFyIHdyYXBwZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICByZXR1cm4gc2V0U3RhdGUoe1xuICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgcmVqZWN0OiByZWplY3RcbiAgfSk7XG59KTtcbnZhciBsb2FkZXIgPSB7XG4gIGNvbmZpZzogY29uZmlnLFxuICBpbml0OiBpbml0LFxuICBfX2dldE1vbmFjb0luc3RhbmNlOiBfX2dldE1vbmFjb0luc3RhbmNlXG59O1xuXG5leHBvcnQgeyBsb2FkZXIgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGxvYWRlciBmcm9tICdAbW9uYWNvLWVkaXRvci9sb2FkZXInO1xuZXhwb3J0IHsgbG9hZGVyIH07XG5cbmltcG9ydCBEaWZmRWRpdG9yIGZyb20gJy4vRGlmZkVkaXRvcic7XG5leHBvcnQgKiBmcm9tICcuL0RpZmZFZGl0b3IvdHlwZXMnO1xuZXhwb3J0IHsgRGlmZkVkaXRvciB9O1xuXG5pbXBvcnQgdXNlTW9uYWNvIGZyb20gJy4vaG9va3MvdXNlTW9uYWNvJztcbmV4cG9ydCB7IHVzZU1vbmFjbyB9O1xuXG5pbXBvcnQgRWRpdG9yIGZyb20gJy4vRWRpdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vRWRpdG9yL3R5cGVzJztcbmV4cG9ydCB7IEVkaXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgRWRpdG9yO1xuXG4vLyBNb25hY29cbmltcG9ydCB0eXBlICogYXMgbW9uYWNvIGZyb20gJ21vbmFjby1lZGl0b3IvZXNtL3ZzL2VkaXRvci9lZGl0b3IuYXBpJztcbmV4cG9ydCB0eXBlIE1vbmFjbyA9IHR5cGVvZiBtb25hY287XG5cbi8vIERlZmF1bHQgdGhlbWVzXG5leHBvcnQgdHlwZSBUaGVtZSA9ICd2cy1kYXJrJyB8ICdsaWdodCc7XG4iLCJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgRGlmZkVkaXRvciBmcm9tICcuL0RpZmZFZGl0b3InO1xuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhEaWZmRWRpdG9yKTtcbiIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgbG9hZGVyIGZyb20gJ0Btb25hY28tZWRpdG9yL2xvYWRlcic7XG5cbmltcG9ydCBNb25hY29Db250YWluZXIgZnJvbSAnLi4vTW9uYWNvQ29udGFpbmVyJztcbmltcG9ydCB1c2VNb3VudCBmcm9tICcuLi9ob29rcy91c2VNb3VudCc7XG5pbXBvcnQgdXNlVXBkYXRlIGZyb20gJy4uL2hvb2tzL3VzZVVwZGF0ZSc7XG5pbXBvcnQgeyBub29wLCBnZXRPckNyZWF0ZU1vZGVsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgdHlwZSBEaWZmRWRpdG9yUHJvcHMsIHR5cGUgTW9uYWNvRGlmZkVkaXRvciB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBNb25hY28gfSBmcm9tICcuLic7XG5cbmZ1bmN0aW9uIERpZmZFZGl0b3Ioe1xuICBvcmlnaW5hbCxcbiAgbW9kaWZpZWQsXG4gIGxhbmd1YWdlLFxuICBvcmlnaW5hbExhbmd1YWdlLFxuICBtb2RpZmllZExhbmd1YWdlLFxuICBvcmlnaW5hbE1vZGVsUGF0aCxcbiAgbW9kaWZpZWRNb2RlbFBhdGgsXG4gIGtlZXBDdXJyZW50T3JpZ2luYWxNb2RlbCA9IGZhbHNlLFxuICBrZWVwQ3VycmVudE1vZGlmaWVkTW9kZWwgPSBmYWxzZSxcbiAgdGhlbWUgPSAnbGlnaHQnLFxuICBsb2FkaW5nID0gJ0xvYWRpbmcuLi4nLFxuICBvcHRpb25zID0ge30sXG4gIGhlaWdodCA9ICcxMDAlJyxcbiAgd2lkdGggPSAnMTAwJScsXG4gIGNsYXNzTmFtZSxcbiAgd3JhcHBlclByb3BzID0ge30sXG4gIGJlZm9yZU1vdW50ID0gbm9vcCxcbiAgb25Nb3VudCA9IG5vb3AsXG59OiBEaWZmRWRpdG9yUHJvcHMpIHtcbiAgY29uc3QgW2lzRWRpdG9yUmVhZHksIHNldElzRWRpdG9yUmVhZHldID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNNb25hY29Nb3VudGluZywgc2V0SXNNb25hY29Nb3VudGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmPE1vbmFjb0RpZmZFZGl0b3IgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbW9uYWNvUmVmID0gdXNlUmVmPE1vbmFjbyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBvbk1vdW50UmVmID0gdXNlUmVmKG9uTW91bnQpO1xuICBjb25zdCBiZWZvcmVNb3VudFJlZiA9IHVzZVJlZihiZWZvcmVNb3VudCk7XG4gIGNvbnN0IHByZXZlbnRDcmVhdGlvbiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgdXNlTW91bnQoKCkgPT4ge1xuICAgIGNvbnN0IGNhbmNlbGFibGUgPSBsb2FkZXIuaW5pdCgpO1xuXG4gICAgY2FuY2VsYWJsZVxuICAgICAgLnRoZW4oKG1vbmFjbykgPT4gKG1vbmFjb1JlZi5jdXJyZW50ID0gbW9uYWNvKSAmJiBzZXRJc01vbmFjb01vdW50aW5nKGZhbHNlKSlcbiAgICAgIC5jYXRjaChcbiAgICAgICAgKGVycm9yKSA9PlxuICAgICAgICAgIGVycm9yPy50eXBlICE9PSAnY2FuY2VsYXRpb24nICYmIGNvbnNvbGUuZXJyb3IoJ01vbmFjbyBpbml0aWFsaXphdGlvbjogZXJyb3I6JywgZXJyb3IpLFxuICAgICAgKTtcblxuICAgIHJldHVybiAoKSA9PiAoZWRpdG9yUmVmLmN1cnJlbnQgPyBkaXNwb3NlRWRpdG9yKCkgOiBjYW5jZWxhYmxlLmNhbmNlbCgpKTtcbiAgfSk7XG5cbiAgdXNlVXBkYXRlKFxuICAgICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3JSZWYuY3VycmVudCAmJiBtb25hY29SZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVkaXRvciA9IGVkaXRvclJlZi5jdXJyZW50LmdldE9yaWdpbmFsRWRpdG9yKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gZ2V0T3JDcmVhdGVNb2RlbChcbiAgICAgICAgICBtb25hY29SZWYuY3VycmVudCxcbiAgICAgICAgICBvcmlnaW5hbCB8fCAnJyxcbiAgICAgICAgICBvcmlnaW5hbExhbmd1YWdlIHx8IGxhbmd1YWdlIHx8ICd0ZXh0JyxcbiAgICAgICAgICBvcmlnaW5hbE1vZGVsUGF0aCB8fCAnJyxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobW9kZWwgIT09IG9yaWdpbmFsRWRpdG9yLmdldE1vZGVsKCkpIHtcbiAgICAgICAgICBvcmlnaW5hbEVkaXRvci5zZXRNb2RlbChtb2RlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtvcmlnaW5hbE1vZGVsUGF0aF0sXG4gICAgaXNFZGl0b3JSZWFkeSxcbiAgKTtcblxuICB1c2VVcGRhdGUoXG4gICAgKCkgPT4ge1xuICAgICAgaWYgKGVkaXRvclJlZi5jdXJyZW50ICYmIG1vbmFjb1JlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVkRWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnQuZ2V0TW9kaWZpZWRFZGl0b3IoKTtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBnZXRPckNyZWF0ZU1vZGVsKFxuICAgICAgICAgIG1vbmFjb1JlZi5jdXJyZW50LFxuICAgICAgICAgIG1vZGlmaWVkIHx8ICcnLFxuICAgICAgICAgIG1vZGlmaWVkTGFuZ3VhZ2UgfHwgbGFuZ3VhZ2UgfHwgJ3RleHQnLFxuICAgICAgICAgIG1vZGlmaWVkTW9kZWxQYXRoIHx8ICcnLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtb2RlbCAhPT0gbW9kaWZpZWRFZGl0b3IuZ2V0TW9kZWwoKSkge1xuICAgICAgICAgIG1vZGlmaWVkRWRpdG9yLnNldE1vZGVsKG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW21vZGlmaWVkTW9kZWxQYXRoXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIHVzZVVwZGF0ZShcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBtb2RpZmllZEVkaXRvciA9IGVkaXRvclJlZi5jdXJyZW50IS5nZXRNb2RpZmllZEVkaXRvcigpO1xuICAgICAgaWYgKG1vZGlmaWVkRWRpdG9yLmdldE9wdGlvbihtb25hY29SZWYuY3VycmVudCEuZWRpdG9yLkVkaXRvck9wdGlvbi5yZWFkT25seSkpIHtcbiAgICAgICAgbW9kaWZpZWRFZGl0b3Iuc2V0VmFsdWUobW9kaWZpZWQgfHwgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1vZGlmaWVkICE9PSBtb2RpZmllZEVkaXRvci5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgbW9kaWZpZWRFZGl0b3IuZXhlY3V0ZUVkaXRzKCcnLCBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJhbmdlOiBtb2RpZmllZEVkaXRvci5nZXRNb2RlbCgpIS5nZXRGdWxsTW9kZWxSYW5nZSgpLFxuICAgICAgICAgICAgICB0ZXh0OiBtb2RpZmllZCB8fCAnJyxcbiAgICAgICAgICAgICAgZm9yY2VNb3ZlTWFya2VyczogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBtb2RpZmllZEVkaXRvci5wdXNoVW5kb1N0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW21vZGlmaWVkXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIHVzZVVwZGF0ZShcbiAgICAoKSA9PiB7XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uZ2V0TW9kZWwoKT8ub3JpZ2luYWwuc2V0VmFsdWUob3JpZ2luYWwgfHwgJycpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIHVzZVVwZGF0ZShcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCB7IG9yaWdpbmFsLCBtb2RpZmllZCB9ID0gZWRpdG9yUmVmLmN1cnJlbnQhLmdldE1vZGVsKCkhO1xuXG4gICAgICBtb25hY29SZWYuY3VycmVudCEuZWRpdG9yLnNldE1vZGVsTGFuZ3VhZ2Uob3JpZ2luYWwsIG9yaWdpbmFsTGFuZ3VhZ2UgfHwgbGFuZ3VhZ2UgfHwgJ3RleHQnKTtcbiAgICAgIG1vbmFjb1JlZi5jdXJyZW50IS5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShtb2RpZmllZCwgbW9kaWZpZWRMYW5ndWFnZSB8fCBsYW5ndWFnZSB8fCAndGV4dCcpO1xuICAgIH0sXG4gICAgW2xhbmd1YWdlLCBvcmlnaW5hbExhbmd1YWdlLCBtb2RpZmllZExhbmd1YWdlXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIHVzZVVwZGF0ZShcbiAgICAoKSA9PiB7XG4gICAgICBtb25hY29SZWYuY3VycmVudD8uZWRpdG9yLnNldFRoZW1lKHRoZW1lKTtcbiAgICB9LFxuICAgIFt0aGVtZV0sXG4gICAgaXNFZGl0b3JSZWFkeSxcbiAgKTtcblxuICB1c2VVcGRhdGUoXG4gICAgKCkgPT4ge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnVwZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgfSxcbiAgICBbb3B0aW9uc10sXG4gICAgaXNFZGl0b3JSZWFkeSxcbiAgKTtcblxuICBjb25zdCBzZXRNb2RlbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFtb25hY29SZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGJlZm9yZU1vdW50UmVmLmN1cnJlbnQobW9uYWNvUmVmLmN1cnJlbnQpO1xuICAgIGNvbnN0IG9yaWdpbmFsTW9kZWwgPSBnZXRPckNyZWF0ZU1vZGVsKFxuICAgICAgbW9uYWNvUmVmLmN1cnJlbnQsXG4gICAgICBvcmlnaW5hbCB8fCAnJyxcbiAgICAgIG9yaWdpbmFsTGFuZ3VhZ2UgfHwgbGFuZ3VhZ2UgfHwgJ3RleHQnLFxuICAgICAgb3JpZ2luYWxNb2RlbFBhdGggfHwgJycsXG4gICAgKTtcblxuICAgIGNvbnN0IG1vZGlmaWVkTW9kZWwgPSBnZXRPckNyZWF0ZU1vZGVsKFxuICAgICAgbW9uYWNvUmVmLmN1cnJlbnQsXG4gICAgICBtb2RpZmllZCB8fCAnJyxcbiAgICAgIG1vZGlmaWVkTGFuZ3VhZ2UgfHwgbGFuZ3VhZ2UgfHwgJ3RleHQnLFxuICAgICAgbW9kaWZpZWRNb2RlbFBhdGggfHwgJycsXG4gICAgKTtcblxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5zZXRNb2RlbCh7XG4gICAgICBvcmlnaW5hbDogb3JpZ2luYWxNb2RlbCxcbiAgICAgIG1vZGlmaWVkOiBtb2RpZmllZE1vZGVsLFxuICAgIH0pO1xuICB9LCBbXG4gICAgbGFuZ3VhZ2UsXG4gICAgbW9kaWZpZWQsXG4gICAgbW9kaWZpZWRMYW5ndWFnZSxcbiAgICBvcmlnaW5hbCxcbiAgICBvcmlnaW5hbExhbmd1YWdlLFxuICAgIG9yaWdpbmFsTW9kZWxQYXRoLFxuICAgIG1vZGlmaWVkTW9kZWxQYXRoLFxuICBdKTtcblxuICBjb25zdCBjcmVhdGVFZGl0b3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFwcmV2ZW50Q3JlYXRpb24uY3VycmVudCAmJiBjb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQgPSBtb25hY29SZWYuY3VycmVudCEuZWRpdG9yLmNyZWF0ZURpZmZFZGl0b3IoY29udGFpbmVyUmVmLmN1cnJlbnQsIHtcbiAgICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSk7XG5cbiAgICAgIHNldE1vZGVscygpO1xuXG4gICAgICBtb25hY29SZWYuY3VycmVudD8uZWRpdG9yLnNldFRoZW1lKHRoZW1lKTtcblxuICAgICAgc2V0SXNFZGl0b3JSZWFkeSh0cnVlKTtcbiAgICAgIHByZXZlbnRDcmVhdGlvbi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0sIFtvcHRpb25zLCB0aGVtZSwgc2V0TW9kZWxzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNFZGl0b3JSZWFkeSkge1xuICAgICAgb25Nb3VudFJlZi5jdXJyZW50KGVkaXRvclJlZi5jdXJyZW50ISwgbW9uYWNvUmVmLmN1cnJlbnQhKTtcbiAgICB9XG4gIH0sIFtpc0VkaXRvclJlYWR5XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAhaXNNb25hY29Nb3VudGluZyAmJiAhaXNFZGl0b3JSZWFkeSAmJiBjcmVhdGVFZGl0b3IoKTtcbiAgfSwgW2lzTW9uYWNvTW91bnRpbmcsIGlzRWRpdG9yUmVhZHksIGNyZWF0ZUVkaXRvcl0pO1xuXG4gIGZ1bmN0aW9uIGRpc3Bvc2VFZGl0b3IoKSB7XG4gICAgY29uc3QgbW9kZWxzID0gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldE1vZGVsKCk7XG5cbiAgICBpZiAoIWtlZXBDdXJyZW50T3JpZ2luYWxNb2RlbCkge1xuICAgICAgbW9kZWxzPy5vcmlnaW5hbD8uZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIGlmICgha2VlcEN1cnJlbnRNb2RpZmllZE1vZGVsKSB7XG4gICAgICBtb2RlbHM/Lm1vZGlmaWVkPy5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPE1vbmFjb0NvbnRhaW5lclxuICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgaGVpZ2h0PXtoZWlnaHR9XG4gICAgICBpc0VkaXRvclJlYWR5PXtpc0VkaXRvclJlYWR5fVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIF9yZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgd3JhcHBlclByb3BzPXt3cmFwcGVyUHJvcHN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlmZkVkaXRvcjtcbiIsImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBNb25hY29Db250YWluZXIgZnJvbSAnLi9Nb25hY29Db250YWluZXInO1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vKE1vbmFjb0NvbnRhaW5lcik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzJztcbmltcG9ydCBMb2FkaW5nIGZyb20gJy4uL0xvYWRpbmcnO1xuaW1wb3J0IHsgdHlwZSBDb250YWluZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyAqKiBmb3J3YXJkcmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcHR5cGVzIG9yIGRlZmF1bHRwcm9wcyAqKlxuLy8gb25lIG9mIHRoZSByZWFzb25zIHdoeSB3ZSB1c2UgYSBzZXBhcmF0ZSBwcm9wIGZvciBwYXNzaW5nIHJlZiBpbnN0ZWFkIG9mIHVzaW5nIGZvcndhcmRyZWZcblxuZnVuY3Rpb24gTW9uYWNvQ29udGFpbmVyKHtcbiAgd2lkdGgsXG4gIGhlaWdodCxcbiAgaXNFZGl0b3JSZWFkeSxcbiAgbG9hZGluZyxcbiAgX3JlZixcbiAgY2xhc3NOYW1lLFxuICB3cmFwcGVyUHJvcHMsXG59OiBDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIHN0eWxlPXt7IC4uLnN0eWxlcy53cmFwcGVyLCB3aWR0aCwgaGVpZ2h0IH19IHsuLi53cmFwcGVyUHJvcHN9PlxuICAgICAgeyFpc0VkaXRvclJlYWR5ICYmIDxMb2FkaW5nPntsb2FkaW5nfTwvTG9hZGluZz59XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17X3JlZn1cbiAgICAgICAgc3R5bGU9e3sgLi4uc3R5bGVzLmZ1bGxXaWR0aCwgLi4uKCFpc0VkaXRvclJlYWR5ICYmIHN0eWxlcy5oaWRlKSB9fVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIC8+XG4gICAgPC9zZWN0aW9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb25hY29Db250YWluZXI7XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHN0eWxlczogUmVjb3JkPHN0cmluZywgQ1NTUHJvcGVydGllcz4gPSB7XG4gIHdyYXBwZXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgdGV4dEFsaWduOiAnaW5pdGlhbCcsXG4gIH0sXG4gIGZ1bGxXaWR0aDoge1xuICAgIHdpZHRoOiAnMTAwJScsXG4gIH0sXG4gIGhpZGU6IHtcbiAgICBkaXNwbGF5OiAnbm9uZScsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdHlsZXM7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdHlwZSBQcm9wc1dpdGhDaGlsZHJlbiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcyc7XG5cbmZ1bmN0aW9uIExvYWRpbmcoeyBjaGlsZHJlbiB9OiBQcm9wc1dpdGhDaGlsZHJlbikge1xuICByZXR1cm4gPGRpdiBzdHlsZT17c3R5bGVzLmNvbnRhaW5lcn0+e2NoaWxkcmVufTwvZGl2Pjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9hZGluZztcbiIsImltcG9ydCB7IHR5cGUgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0JztcblxuY29uc3Qgc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBDU1NQcm9wZXJ0aWVzPiA9IHtcbiAgY29udGFpbmVyOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVzO1xuIiwiaW1wb3J0IExvYWRpbmcgZnJvbSAnLi9Mb2FkaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgTG9hZGluZztcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdHlwZSBFZmZlY3RDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gdXNlTW91bnQoZWZmZWN0OiBFZmZlY3RDYWxsYmFjaykge1xuICB1c2VFZmZlY3QoZWZmZWN0LCBbXSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZU1vdW50O1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHR5cGUgRGVwZW5kZW5jeUxpc3QsIHR5cGUgRWZmZWN0Q2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHVzZVVwZGF0ZShlZmZlY3Q6IEVmZmVjdENhbGxiYWNrLCBkZXBzOiBEZXBlbmRlbmN5TGlzdCwgYXBwbHlDaGFuZ2VzID0gdHJ1ZSkge1xuICBjb25zdCBpc0luaXRpYWxNb3VudCA9IHVzZVJlZih0cnVlKTtcblxuICB1c2VFZmZlY3QoXG4gICAgaXNJbml0aWFsTW91bnQuY3VycmVudCB8fCAhYXBwbHlDaGFuZ2VzXG4gICAgICA/ICgpID0+IHtcbiAgICAgICAgICBpc0luaXRpYWxNb3VudC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIDogZWZmZWN0LFxuICAgIGRlcHMsXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVVwZGF0ZTtcbiIsImltcG9ydCB7IHR5cGUgTW9uYWNvIH0gZnJvbSAnLi4nO1xuXG4vKipcbiAqIG5vb3AgaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmdcbiAqIEByZXR1cm5zIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvKiogbm8tb3AgKi9cbn1cblxuLyoqXG4gKiBnZXRPckNyZWF0ZU1vZGVsIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gYSBtb2RlbCBpZiBpdCBleGlzdHNcbiAqIG9yIGNyZWF0ZSBhIG5ldyBtb2RlbCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG1vZGVsIGZvciBhIGZpbGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdCB5ZXQuXG4gKiBAcGFyYW0gbW9uYWNvIFRoZSBtb25hY28gaW5zdGFuY2VcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIG1vZGVsXG4gKiBAcGFyYW0gbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIG9mIHRoZSBtb2RlbFxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIG1vZGVsXG4gKiBAcmV0dXJucyBUaGUgbW9kZWwgdGhhdCB3YXMgZm91bmQgb3IgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBnZXRPckNyZWF0ZU1vZGVsKG1vbmFjbzogTW9uYWNvLCB2YWx1ZTogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGdldE1vZGVsKG1vbmFjbywgcGF0aCkgfHwgY3JlYXRlTW9kZWwobW9uYWNvLCB2YWx1ZSwgbGFuZ3VhZ2UsIHBhdGgpO1xufVxuXG4vKipcbiAqIGdldE1vZGVsIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gYSBtb2RlbCBpZiBpdCBleGlzdHNcbiAqIG9yIHJldHVybiB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gKiBAcGFyYW0gbW9uYWNvIFRoZSBtb25hY28gaW5zdGFuY2VcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtb2RlbFxuICogQHJldHVybnMgVGhlIG1vZGVsIHRoYXQgd2FzIGZvdW5kIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXRNb2RlbChtb25hY286IE1vbmFjbywgcGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiBtb25hY28uZWRpdG9yLmdldE1vZGVsKGNyZWF0ZU1vZGVsVXJpKG1vbmFjbywgcGF0aCkpO1xufVxuXG4vKipcbiAqIGNyZWF0ZU1vZGVsIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBjcmVhdGUgYSBuZXcgbW9kZWxcbiAqIEBwYXJhbSBtb25hY28gVGhlIG1vbmFjbyBpbnN0YW5jZVxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBsYW5ndWFnZSBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIG1vZGVsXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbW9kZWxcbiAqIEByZXR1cm5zIFRoZSBtb2RlbCB0aGF0IHdhcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsKG1vbmFjbzogTW9uYWNvLCB2YWx1ZTogc3RyaW5nLCBsYW5ndWFnZT86IHN0cmluZywgcGF0aD86IHN0cmluZykge1xuICByZXR1cm4gbW9uYWNvLmVkaXRvci5jcmVhdGVNb2RlbChcbiAgICB2YWx1ZSxcbiAgICBsYW5ndWFnZSxcbiAgICBwYXRoID8gY3JlYXRlTW9kZWxVcmkobW9uYWNvLCBwYXRoKSA6IHVuZGVmaW5lZCxcbiAgKTtcbn1cblxuLyoqXG4gKiBjcmVhdGVNb2RlbFVyaSBpcyBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IHdpbGwgY3JlYXRlIGEgbmV3IG1vZGVsIHVyaVxuICogQHBhcmFtIG1vbmFjbyBUaGUgbW9uYWNvIGluc3RhbmNlXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbW9kZWxcbiAqIEByZXR1cm5zIFRoZSBtb2RlbCB1cmkgdGhhdCB3YXMgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVNb2RlbFVyaShtb25hY286IE1vbmFjbywgcGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiBtb25hY28uVXJpLnBhcnNlKHBhdGgpO1xufVxuXG5leHBvcnQgeyBub29wLCBnZXRPckNyZWF0ZU1vZGVsIH07XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBsb2FkZXIgZnJvbSAnQG1vbmFjby1lZGl0b3IvbG9hZGVyJztcblxuaW1wb3J0IHVzZU1vdW50IGZyb20gJy4uL3VzZU1vdW50JztcblxuZnVuY3Rpb24gdXNlTW9uYWNvKCkge1xuICBjb25zdCBbbW9uYWNvLCBzZXRNb25hY29dID0gdXNlU3RhdGUobG9hZGVyLl9fZ2V0TW9uYWNvSW5zdGFuY2UoKSk7XG5cbiAgdXNlTW91bnQoKCkgPT4ge1xuICAgIGxldCBjYW5jZWxhYmxlOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkZXIuaW5pdD47XG5cbiAgICBpZiAoIW1vbmFjbykge1xuICAgICAgY2FuY2VsYWJsZSA9IGxvYWRlci5pbml0KCk7XG5cbiAgICAgIGNhbmNlbGFibGUudGhlbigobW9uYWNvKSA9PiB7XG4gICAgICAgIHNldE1vbmFjbyhtb25hY28pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IGNhbmNlbGFibGU/LmNhbmNlbCgpO1xuICB9KTtcblxuICByZXR1cm4gbW9uYWNvO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VNb25hY287XG4iLCJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgRWRpdG9yIGZyb20gJy4vRWRpdG9yJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oRWRpdG9yKTtcbiIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgbG9hZGVyIGZyb20gJ0Btb25hY28tZWRpdG9yL2xvYWRlcic7XG5pbXBvcnQgdXNlTW91bnQgZnJvbSAnLi4vaG9va3MvdXNlTW91bnQnO1xuaW1wb3J0IHVzZVVwZGF0ZSBmcm9tICcuLi9ob29rcy91c2VVcGRhdGUnO1xuaW1wb3J0IHVzZVByZXZpb3VzIGZyb20gJy4uL2hvb2tzL3VzZVByZXZpb3VzJztcbmltcG9ydCB7IHR5cGUgSURpc3Bvc2FibGUsIHR5cGUgZWRpdG9yIH0gZnJvbSAnbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBub29wLCBnZXRPckNyZWF0ZU1vZGVsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgdHlwZSBFZGl0b3JQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBNb25hY28gfSBmcm9tICcuLic7XG5pbXBvcnQgTW9uYWNvQ29udGFpbmVyIGZyb20gJy4uL01vbmFjb0NvbnRhaW5lcic7XG5cbmNvbnN0IHZpZXdTdGF0ZXMgPSBuZXcgTWFwKCk7XG5cbmZ1bmN0aW9uIEVkaXRvcih7XG4gIGRlZmF1bHRWYWx1ZSxcbiAgZGVmYXVsdExhbmd1YWdlLFxuICBkZWZhdWx0UGF0aCxcbiAgdmFsdWUsXG4gIGxhbmd1YWdlLFxuICBwYXRoLFxuICAvKiA9PT0gKi9cbiAgdGhlbWUgPSAnbGlnaHQnLFxuICBsaW5lLFxuICBsb2FkaW5nID0gJ0xvYWRpbmcuLi4nLFxuICBvcHRpb25zID0ge30sXG4gIG92ZXJyaWRlU2VydmljZXMgPSB7fSxcbiAgc2F2ZVZpZXdTdGF0ZSA9IHRydWUsXG4gIGtlZXBDdXJyZW50TW9kZWwgPSBmYWxzZSxcbiAgLyogPT09ICovXG4gIHdpZHRoID0gJzEwMCUnLFxuICBoZWlnaHQgPSAnMTAwJScsXG4gIGNsYXNzTmFtZSxcbiAgd3JhcHBlclByb3BzID0ge30sXG4gIC8qID09PSAqL1xuICBiZWZvcmVNb3VudCA9IG5vb3AsXG4gIG9uTW91bnQgPSBub29wLFxuICBvbkNoYW5nZSxcbiAgb25WYWxpZGF0ZSA9IG5vb3AsXG59OiBFZGl0b3JQcm9wcykge1xuICBjb25zdCBbaXNFZGl0b3JSZWFkeSwgc2V0SXNFZGl0b3JSZWFkeV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc01vbmFjb01vdW50aW5nLCBzZXRJc01vbmFjb01vdW50aW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBtb25hY29SZWYgPSB1c2VSZWY8TW9uYWNvIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGVkaXRvclJlZiA9IHVzZVJlZjxlZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IG9uTW91bnRSZWYgPSB1c2VSZWYob25Nb3VudCk7XG4gIGNvbnN0IGJlZm9yZU1vdW50UmVmID0gdXNlUmVmKGJlZm9yZU1vdW50KTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uUmVmID0gdXNlUmVmPElEaXNwb3NhYmxlPigpO1xuICBjb25zdCB2YWx1ZVJlZiA9IHVzZVJlZih2YWx1ZSk7XG4gIGNvbnN0IHByZXZpb3VzUGF0aCA9IHVzZVByZXZpb3VzKHBhdGgpO1xuICBjb25zdCBwcmV2ZW50Q3JlYXRpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBwcmV2ZW50VHJpZ2dlckNoYW5nZUV2ZW50ID0gdXNlUmVmPGJvb2xlYW4+KGZhbHNlKTtcblxuICB1c2VNb3VudCgoKSA9PiB7XG4gICAgY29uc3QgY2FuY2VsYWJsZSA9IGxvYWRlci5pbml0KCk7XG5cbiAgICBjYW5jZWxhYmxlXG4gICAgICAudGhlbigobW9uYWNvKSA9PiAobW9uYWNvUmVmLmN1cnJlbnQgPSBtb25hY28pICYmIHNldElzTW9uYWNvTW91bnRpbmcoZmFsc2UpKVxuICAgICAgLmNhdGNoKFxuICAgICAgICAoZXJyb3IpID0+XG4gICAgICAgICAgZXJyb3I/LnR5cGUgIT09ICdjYW5jZWxhdGlvbicgJiYgY29uc29sZS5lcnJvcignTW9uYWNvIGluaXRpYWxpemF0aW9uOiBlcnJvcjonLCBlcnJvciksXG4gICAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IChlZGl0b3JSZWYuY3VycmVudCA/IGRpc3Bvc2VFZGl0b3IoKSA6IGNhbmNlbGFibGUuY2FuY2VsKCkpO1xuICB9KTtcblxuICB1c2VVcGRhdGUoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBnZXRPckNyZWF0ZU1vZGVsKFxuICAgICAgICBtb25hY29SZWYuY3VycmVudCEsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSB8fCB2YWx1ZSB8fCAnJyxcbiAgICAgICAgZGVmYXVsdExhbmd1YWdlIHx8IGxhbmd1YWdlIHx8ICcnLFxuICAgICAgICBwYXRoIHx8IGRlZmF1bHRQYXRoIHx8ICcnLFxuICAgICAgKTtcblxuICAgICAgaWYgKG1vZGVsICE9PSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0TW9kZWwoKSkge1xuICAgICAgICBpZiAoc2F2ZVZpZXdTdGF0ZSkgdmlld1N0YXRlcy5zZXQocHJldmlvdXNQYXRoLCBlZGl0b3JSZWYuY3VycmVudD8uc2F2ZVZpZXdTdGF0ZSgpKTtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnNldE1vZGVsKG1vZGVsKTtcbiAgICAgICAgaWYgKHNhdmVWaWV3U3RhdGUpIGVkaXRvclJlZi5jdXJyZW50Py5yZXN0b3JlVmlld1N0YXRlKHZpZXdTdGF0ZXMuZ2V0KHBhdGgpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwYXRoXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIHVzZVVwZGF0ZShcbiAgICAoKSA9PiB7XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8udXBkYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9LFxuICAgIFtvcHRpb25zXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIHVzZVVwZGF0ZShcbiAgICAoKSA9PiB7XG4gICAgICBpZiAoIWVkaXRvclJlZi5jdXJyZW50IHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmIChlZGl0b3JSZWYuY3VycmVudC5nZXRPcHRpb24obW9uYWNvUmVmLmN1cnJlbnQhLmVkaXRvci5FZGl0b3JPcHRpb24ucmVhZE9ubHkpKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50LnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IGVkaXRvclJlZi5jdXJyZW50LmdldFZhbHVlKCkpIHtcbiAgICAgICAgcHJldmVudFRyaWdnZXJDaGFuZ2VFdmVudC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuZXhlY3V0ZUVkaXRzKCcnLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmFuZ2U6IGVkaXRvclJlZi5jdXJyZW50LmdldE1vZGVsKCkhLmdldEZ1bGxNb2RlbFJhbmdlKCksXG4gICAgICAgICAgICB0ZXh0OiB2YWx1ZSxcbiAgICAgICAgICAgIGZvcmNlTW92ZU1hcmtlcnM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQucHVzaFVuZG9TdG9wKCk7XG4gICAgICAgIHByZXZlbnRUcmlnZ2VyQ2hhbmdlRXZlbnQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3ZhbHVlXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIHVzZVVwZGF0ZShcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbCA9IGVkaXRvclJlZi5jdXJyZW50Py5nZXRNb2RlbCgpO1xuICAgICAgaWYgKG1vZGVsICYmIGxhbmd1YWdlKSBtb25hY29SZWYuY3VycmVudD8uZWRpdG9yLnNldE1vZGVsTGFuZ3VhZ2UobW9kZWwsIGxhbmd1YWdlKTtcbiAgICB9LFxuICAgIFtsYW5ndWFnZV0sXG4gICAgaXNFZGl0b3JSZWFkeSxcbiAgKTtcblxuICB1c2VVcGRhdGUoXG4gICAgKCkgPT4ge1xuICAgICAgLy8gcmVhc29uIGZvciB1bmRlZmluZWQgY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXJlbi1hdG95YW4vbW9uYWNvLXJlYWN0L3B1bGwvMTg4XG4gICAgICBpZiAobGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5yZXZlYWxMaW5lKGxpbmUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2xpbmVdLFxuICAgIGlzRWRpdG9yUmVhZHksXG4gICk7XG5cbiAgdXNlVXBkYXRlKFxuICAgICgpID0+IHtcbiAgICAgIG1vbmFjb1JlZi5jdXJyZW50Py5lZGl0b3Iuc2V0VGhlbWUodGhlbWUpO1xuICAgIH0sXG4gICAgW3RoZW1lXSxcbiAgICBpc0VkaXRvclJlYWR5LFxuICApO1xuXG4gIGNvbnN0IGNyZWF0ZUVkaXRvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lclJlZi5jdXJyZW50IHx8ICFtb25hY29SZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGlmICghcHJldmVudENyZWF0aW9uLmN1cnJlbnQpIHtcbiAgICAgIGJlZm9yZU1vdW50UmVmLmN1cnJlbnQobW9uYWNvUmVmLmN1cnJlbnQpO1xuICAgICAgY29uc3QgYXV0b0NyZWF0ZWRNb2RlbFBhdGggPSBwYXRoIHx8IGRlZmF1bHRQYXRoO1xuXG4gICAgICBjb25zdCBkZWZhdWx0TW9kZWwgPSBnZXRPckNyZWF0ZU1vZGVsKFxuICAgICAgICBtb25hY29SZWYuY3VycmVudCxcbiAgICAgICAgdmFsdWUgfHwgZGVmYXVsdFZhbHVlIHx8ICcnLFxuICAgICAgICBkZWZhdWx0TGFuZ3VhZ2UgfHwgbGFuZ3VhZ2UgfHwgJycsXG4gICAgICAgIGF1dG9DcmVhdGVkTW9kZWxQYXRoIHx8ICcnLFxuICAgICAgKTtcblxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQgPSBtb25hY29SZWYuY3VycmVudD8uZWRpdG9yLmNyZWF0ZShcbiAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQsXG4gICAgICAgIHtcbiAgICAgICAgICBtb2RlbDogZGVmYXVsdE1vZGVsLFxuICAgICAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSxcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZVNlcnZpY2VzLFxuICAgICAgKTtcblxuICAgICAgc2F2ZVZpZXdTdGF0ZSAmJiBlZGl0b3JSZWYuY3VycmVudC5yZXN0b3JlVmlld1N0YXRlKHZpZXdTdGF0ZXMuZ2V0KGF1dG9DcmVhdGVkTW9kZWxQYXRoKSk7XG5cbiAgICAgIG1vbmFjb1JlZi5jdXJyZW50LmVkaXRvci5zZXRUaGVtZSh0aGVtZSk7XG5cbiAgICAgIGlmIChsaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQucmV2ZWFsTGluZShsaW5lKTtcbiAgICAgIH1cblxuICAgICAgc2V0SXNFZGl0b3JSZWFkeSh0cnVlKTtcbiAgICAgIHByZXZlbnRDcmVhdGlvbi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0sIFtcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgZGVmYXVsdExhbmd1YWdlLFxuICAgIGRlZmF1bHRQYXRoLFxuICAgIHZhbHVlLFxuICAgIGxhbmd1YWdlLFxuICAgIHBhdGgsXG4gICAgb3B0aW9ucyxcbiAgICBvdmVycmlkZVNlcnZpY2VzLFxuICAgIHNhdmVWaWV3U3RhdGUsXG4gICAgdGhlbWUsXG4gICAgbGluZSxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNFZGl0b3JSZWFkeSkge1xuICAgICAgb25Nb3VudFJlZi5jdXJyZW50KGVkaXRvclJlZi5jdXJyZW50ISwgbW9uYWNvUmVmLmN1cnJlbnQhKTtcbiAgICB9XG4gIH0sIFtpc0VkaXRvclJlYWR5XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAhaXNNb25hY29Nb3VudGluZyAmJiAhaXNFZGl0b3JSZWFkeSAmJiBjcmVhdGVFZGl0b3IoKTtcbiAgfSwgW2lzTW9uYWNvTW91bnRpbmcsIGlzRWRpdG9yUmVhZHksIGNyZWF0ZUVkaXRvcl0pO1xuXG4gIC8vIHN1YnNjcmlwdGlvblxuICAvLyB0byBhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGVzIChhdHRhY2ggLSBkaXNwb3NlIGxpc3RlbmVyKSBpbiBzdWJzY3JpcHRpb25cbiAgdmFsdWVSZWYuY3VycmVudCA9IHZhbHVlO1xuXG4gIC8vIG9uQ2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRWRpdG9yUmVhZHkgJiYgb25DaGFuZ2UpIHtcbiAgICAgIHN1YnNjcmlwdGlvblJlZi5jdXJyZW50Py5kaXNwb3NlKCk7XG4gICAgICBzdWJzY3JpcHRpb25SZWYuY3VycmVudCA9IGVkaXRvclJlZi5jdXJyZW50Py5vbkRpZENoYW5nZU1vZGVsQ29udGVudCgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFwcmV2ZW50VHJpZ2dlckNoYW5nZUV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkNoYW5nZShlZGl0b3JSZWYuY3VycmVudCEuZ2V0VmFsdWUoKSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtpc0VkaXRvclJlYWR5LCBvbkNoYW5nZV0pO1xuXG4gIC8vIG9uVmFsaWRhdGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNFZGl0b3JSZWFkeSkge1xuICAgICAgY29uc3QgY2hhbmdlTWFya2Vyc0xpc3RlbmVyID0gbW9uYWNvUmVmLmN1cnJlbnQhLmVkaXRvci5vbkRpZENoYW5nZU1hcmtlcnMoKHVyaXMpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yVXJpID0gZWRpdG9yUmVmLmN1cnJlbnQhLmdldE1vZGVsKCk/LnVyaTtcblxuICAgICAgICBpZiAoZWRpdG9yVXJpKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEVkaXRvckhhc01hcmtlckNoYW5nZXMgPSB1cmlzLmZpbmQoKHVyaSkgPT4gdXJpLnBhdGggPT09IGVkaXRvclVyaS5wYXRoKTtcbiAgICAgICAgICBpZiAoY3VycmVudEVkaXRvckhhc01hcmtlckNoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcnMgPSBtb25hY29SZWYuY3VycmVudCEuZWRpdG9yLmdldE1vZGVsTWFya2Vycyh7XG4gICAgICAgICAgICAgIHJlc291cmNlOiBlZGl0b3JVcmksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9uVmFsaWRhdGU/LihtYXJrZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjaGFuZ2VNYXJrZXJzTGlzdGVuZXI/LmRpc3Bvc2UoKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQgaGFwcHlcbiAgICB9O1xuICB9LCBbaXNFZGl0b3JSZWFkeSwgb25WYWxpZGF0ZV0pO1xuXG4gIGZ1bmN0aW9uIGRpc3Bvc2VFZGl0b3IoKSB7XG4gICAgc3Vic2NyaXB0aW9uUmVmLmN1cnJlbnQ/LmRpc3Bvc2UoKTtcblxuICAgIGlmIChrZWVwQ3VycmVudE1vZGVsKSB7XG4gICAgICBzYXZlVmlld1N0YXRlICYmIHZpZXdTdGF0ZXMuc2V0KHBhdGgsIGVkaXRvclJlZi5jdXJyZW50IS5zYXZlVmlld1N0YXRlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3JSZWYuY3VycmVudCEuZ2V0TW9kZWwoKT8uZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIGVkaXRvclJlZi5jdXJyZW50IS5kaXNwb3NlKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxNb25hY29Db250YWluZXJcbiAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgIGhlaWdodD17aGVpZ2h0fVxuICAgICAgaXNFZGl0b3JSZWFkeT17aXNFZGl0b3JSZWFkeX1cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBfcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIHdyYXBwZXJQcm9wcz17d3JhcHBlclByb3BzfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiB1c2VQcmV2aW91czxUPih2YWx1ZTogVCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8VD4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0sIFt2YWx1ZV0pO1xuXG4gIHJldHVybiByZWYuY3VycmVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlUHJldmlvdXM7XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uL0NvbmZpZy9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgVGhlbWUgPSAnZGFyaycgfCAnbGlnaHQnXG5cbmV4cG9ydCB0eXBlIFRoZW1lQ29udGV4dCA9IHtcbiAgYXV0b01vZGU6IGJvb2xlYW5cbiAgc2V0VGhlbWU6ICh0aGVtZTogVGhlbWUpID0+IHZvaWRcbiAgdGhlbWU6IFRoZW1lXG59XG5cbmNvbnN0IGluaXRpYWxDb250ZXh0OiBUaGVtZUNvbnRleHQgPSB7XG4gIGF1dG9Nb2RlOiB0cnVlLFxuICBzZXRUaGVtZTogKCkgPT4gbnVsbCxcbiAgdGhlbWU6ICdsaWdodCcsXG59XG5cbmNvbnN0IENvbnRleHQgPSBjcmVhdGVDb250ZXh0KGluaXRpYWxDb250ZXh0KVxuXG5mdW5jdGlvbiBzZXRDb29raWUoY25hbWUsIGN2YWx1ZSwgZXhkYXlzKSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSgpXG4gIGQuc2V0VGltZShkLmdldFRpbWUoKSArIGV4ZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApXG4gIGNvbnN0IGV4cGlyZXMgPSAnZXhwaXJlcz0nICsgZC50b1VUQ1N0cmluZygpXG4gIGRvY3VtZW50LmNvb2tpZSA9IGNuYW1lICsgJz0nICsgY3ZhbHVlICsgJzsnICsgZXhwaXJlcyArICc7cGF0aD0vJ1xufVxuXG5jb25zdCBnZXRUaGVtZSA9IChcbiAgY29va2llS2V5LFxuKToge1xuICB0aGVtZTogVGhlbWVcbiAgdGhlbWVGcm9tQ29va2llczogbnVsbCB8IHN0cmluZ1xufSA9PiB7XG4gIGxldCB0aGVtZTogVGhlbWVcblxuICBjb25zdCB0aGVtZUZyb21Db29raWVzID0gd2luZG93LmRvY3VtZW50LmNvb2tpZVxuICAgIC5zcGxpdCgnOyAnKVxuICAgIC5maW5kKChyb3cpID0+IHJvdy5zdGFydHNXaXRoKGAke2Nvb2tpZUtleX09YCkpXG4gICAgPy5zcGxpdCgnPScpWzFdXG5cbiAgaWYgKHRoZW1lRnJvbUNvb2tpZXMgPT09ICdsaWdodCcgfHwgdGhlbWVGcm9tQ29va2llcyA9PT0gJ2RhcmsnKSB7XG4gICAgdGhlbWUgPSB0aGVtZUZyb21Db29raWVzXG4gIH0gZWxzZSB7XG4gICAgdGhlbWUgPVxuICAgICAgd2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzXG4gICAgICAgID8gJ2RhcmsnXG4gICAgICAgIDogJ2xpZ2h0J1xuICB9XG5cbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScsIHRoZW1lKVxuXG4gIHJldHVybiB7IHRoZW1lLCB0aGVtZUZyb21Db29raWVzIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUaGVtZSA9ICdsaWdodCdcblxuZXhwb3J0IGNvbnN0IFRoZW1lUHJvdmlkZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgdGhlbWU/OiBUaGVtZVxufT4gPSAoeyBjaGlsZHJlbiwgdGhlbWU6IGluaXRpYWxUaGVtZSB9KSA9PiB7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IHByZXNlbGVjdGVkVGhlbWUgPSBjb25maWcuYWRtaW4udGhlbWVcbiAgY29uc3QgY29va2llS2V5ID0gYCR7Y29uZmlnLmNvb2tpZVByZWZpeCB8fCAncGF5bG9hZCd9LXRoZW1lYFxuXG4gIGNvbnN0IFt0aGVtZSwgc2V0VGhlbWVTdGF0ZV0gPSB1c2VTdGF0ZTxUaGVtZT4oaW5pdGlhbFRoZW1lIHx8IGRlZmF1bHRUaGVtZSlcblxuICBjb25zdCBbYXV0b01vZGUsIHNldEF1dG9Nb2RlXSA9IHVzZVN0YXRlPGJvb2xlYW4+KClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmVzZWxlY3RlZFRoZW1lICE9PSAnYWxsJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgeyB0aGVtZSwgdGhlbWVGcm9tQ29va2llcyB9ID0gZ2V0VGhlbWUoY29va2llS2V5KVxuICAgIHNldFRoZW1lU3RhdGUodGhlbWUpXG4gICAgc2V0QXV0b01vZGUoIXRoZW1lRnJvbUNvb2tpZXMpXG4gIH0sIFtwcmVzZWxlY3RlZFRoZW1lLCBjb29raWVLZXldKVxuXG4gIGNvbnN0IHNldFRoZW1lID0gdXNlQ2FsbGJhY2soXG4gICAgKHRoZW1lVG9TZXQ6ICdhdXRvJyB8IFRoZW1lKSA9PiB7XG4gICAgICBpZiAodGhlbWVUb1NldCA9PT0gJ2xpZ2h0JyB8fCB0aGVtZVRvU2V0ID09PSAnZGFyaycpIHtcbiAgICAgICAgc2V0VGhlbWVTdGF0ZSh0aGVtZVRvU2V0KVxuICAgICAgICBzZXRBdXRvTW9kZShmYWxzZSlcbiAgICAgICAgc2V0Q29va2llKGNvb2tpZUtleSwgdGhlbWVUb1NldCwgMzY1KVxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgdGhlbWVUb1NldClcbiAgICAgIH0gZWxzZSBpZiAodGhlbWVUb1NldCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIC8vIHRvIGRlbGV0ZSB0aGUgY29va2llLCB3ZSBzZXQgYW4gZXhwaXJlZCBkYXRlXG4gICAgICAgIHNldENvb2tpZShjb29raWVLZXksIHRoZW1lVG9TZXQsIC0xKVxuICAgICAgICBjb25zdCB0aGVtZUZyb21PUyA9XG4gICAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzXG4gICAgICAgICAgICA/ICdkYXJrJ1xuICAgICAgICAgICAgOiAnbGlnaHQnXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLCB0aGVtZUZyb21PUylcbiAgICAgICAgc2V0QXV0b01vZGUodHJ1ZSlcbiAgICAgICAgc2V0VGhlbWVTdGF0ZSh0aGVtZUZyb21PUylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb29raWVLZXldLFxuICApXG5cbiAgcmV0dXJuIDxDb250ZXh0IHZhbHVlPXt7IGF1dG9Nb2RlLCBzZXRUaGVtZSwgdGhlbWUgfX0+e2NoaWxkcmVufTwvQ29udGV4dD5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVRoZW1lID0gKCk6IFRoZW1lQ29udGV4dCA9PiB1c2UoQ29udGV4dClcbiIsIi8qIGVzbGludC1kaXNhYmxlIHBlcmZlY3Rpb25pc3Qvc29ydC1vYmplY3QtdHlwZXMgICovIC8vIE5lZWQgdG8gZGlzYWJsZSB0aGlzIHJ1bGUgYmVjYXVzZSB0aGUgb3JkZXIgb2YgdGhlIG92ZXJsb2FkcyBpcyBpbXBvcnRhbnRcbid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLFxuICBDbGllbnRDb25maWcsXG4gIENsaWVudEdsb2JhbENvbmZpZyxcbiAgQ29sbGVjdGlvblNsdWcsXG4gIEdsb2JhbFNsdWcsXG59IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VDb250cm9sbGFibGVTdGF0ZS5qcydcblxudHlwZSBHZXRFbnRpdHlDb25maWdGbiA9IHtcbiAgLy8gT3ZlcmxvYWQgIzE6IGNvbGxlY3Rpb25TbHVnIG9ubHlcbiAgLy8gQHRvZG8gcmVtb3ZlIFwie30gfFwiIGluIDQuMCwgd2hpY2ggd291bGQgYmUgYSBicmVha2luZyBjaGFuZ2VcbiAgKGFyZ3M6IHsgY29sbGVjdGlvblNsdWc6IHt9IHwgQ29sbGVjdGlvblNsdWc7IGdsb2JhbFNsdWc/OiBuZXZlciB9KTogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuXG4gIC8vIE92ZXJsb2FkICMyOiBnbG9iYWxTbHVnIG9ubHlcbiAgLy8gQHRvZG8gcmVtb3ZlIFwie30gfFwiIGluIDQuMCwgd2hpY2ggd291bGQgYmUgYSBicmVha2luZyBjaGFuZ2VcbiAgKGFyZ3M6IHsgY29sbGVjdGlvblNsdWc/OiBuZXZlcjsgZ2xvYmFsU2x1Zzoge30gfCBHbG9iYWxTbHVnIH0pOiBDbGllbnRHbG9iYWxDb25maWdcblxuICAvLyBPdmVybG9hZCAjMzogYm90aC9ub25lIChmYWxsIGJhY2sgdG8gdW5pb24gfCBudWxsKVxuICAoYXJnczoge1xuICAgIGNvbGxlY3Rpb25TbHVnPzoge30gfCBDb2xsZWN0aW9uU2x1Z1xuICAgIGdsb2JhbFNsdWc/OiB7fSB8IEdsb2JhbFNsdWdcbiAgfSk6IENsaWVudENvbGxlY3Rpb25Db25maWcgfCBDbGllbnRHbG9iYWxDb25maWcgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIENsaWVudENvbmZpZ0NvbnRleHQgPSB7XG4gIGNvbmZpZzogQ2xpZW50Q29uZmlnXG4gIC8qKlxuICAgKiBHZXQgYSBjb2xsZWN0aW9uIG9yIGdsb2JhbCBjb25maWcgYnkgaXRzIHNsdWcuIFRoaXMgaXMgcHJlZmVycmVkIG92ZXJcbiAgICogdXNpbmcgYGNvbmZpZy5jb2xsZWN0aW9ucy5maW5kYCBvciBgY29uZmlnLmdsb2JhbHMuZmluZGAsIGJlY2F1c2VcbiAgICogZ2V0RW50aXR5Q29uZmlnIHVzZXMgYSBsb29rdXAgbWFwIGZvciBPKDEpIGxvb2t1cHMuXG4gICAqL1xuICBnZXRFbnRpdHlDb25maWc6IEdldEVudGl0eUNvbmZpZ0ZuXG4gIHNldENvbmZpZzogKGNvbmZpZzogQ2xpZW50Q29uZmlnKSA9PiB2b2lkXG59XG5cbmNvbnN0IFJvb3RDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxDbGllbnRDb25maWdDb250ZXh0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbmV4cG9ydCBjb25zdCBDb25maWdQcm92aWRlcjogUmVhY3QuRkM8e1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGNvbmZpZzogQ2xpZW50Q29uZmlnXG59PiA9ICh7IGNoaWxkcmVuLCBjb25maWc6IGNvbmZpZ0Zyb21Qcm9wcyB9KSA9PiB7XG4gIC8vIE5lZWQgdG8gdXBkYXRlIGxvY2FsIGNvbmZpZyBzdGF0ZSBpZiBjb25maWcgZnJvbSBwcm9wcyBjaGFuZ2VzLCBmb3IgSE1SLlxuICAvLyBUaGF0IHdheSwgY29uZmlnIGNoYW5nZXMgd2lsbCBiZSB1cGRhdGVkIGluIHRoZSBVSSBpbW1lZGlhdGVseSB3aXRob3V0IG5lZWRpbmcgYSByZWZyZXNoLlxuICAvLyB1c2VDb250cm9sbGFibGVTdGF0ZSBoYW5kbGVzIHRoaXMgZm9yIHVzLlxuICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gdXNlQ29udHJvbGxhYmxlU3RhdGU8Q2xpZW50Q29uZmlnPihjb25maWdGcm9tUHJvcHMpXG5cbiAgLy8gQnVpbGQgbG9va3VwIG1hcHMgZm9yIGNvbGxlY3Rpb25zIGFuZCBnbG9iYWxzIHNvIHdlIGNhbiBkbyBPKDEpIGxvb2t1cHMgYnkgc2x1Z1xuICBjb25zdCB7IGNvbGxlY3Rpb25zQnlTbHVnLCBnbG9iYWxzQnlTbHVnIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjb2xsZWN0aW9uc0J5U2x1ZzogUmVjb3JkPHN0cmluZywgQ2xpZW50Q29sbGVjdGlvbkNvbmZpZz4gPSB7fVxuICAgIGNvbnN0IGdsb2JhbHNCeVNsdWc6IFJlY29yZDxzdHJpbmcsIENsaWVudEdsb2JhbENvbmZpZz4gPSB7fVxuXG4gICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbmZpZy5jb2xsZWN0aW9ucykge1xuICAgICAgY29sbGVjdGlvbnNCeVNsdWdbY29sbGVjdGlvbi5zbHVnXSA9IGNvbGxlY3Rpb25cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBjb25maWcuZ2xvYmFscykge1xuICAgICAgZ2xvYmFsc0J5U2x1Z1tnbG9iYWwuc2x1Z10gPSBnbG9iYWxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2xsZWN0aW9uc0J5U2x1ZywgZ2xvYmFsc0J5U2x1ZyB9XG4gIH0sIFtjb25maWddKVxuXG4gIGNvbnN0IGdldEVudGl0eUNvbmZpZyA9IHVzZUNhbGxiYWNrPEdldEVudGl0eUNvbmZpZ0ZuPihcbiAgICAoYXJncykgPT4ge1xuICAgICAgaWYgKCdjb2xsZWN0aW9uU2x1ZycgaW4gYXJncyAmJiBhcmdzLmNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uc0J5U2x1Z1thcmdzLmNvbGxlY3Rpb25TbHVnXSA/PyBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmICgnZ2xvYmFsU2x1ZycgaW4gYXJncyAmJiBhcmdzLmdsb2JhbFNsdWcpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbHNCeVNsdWdbYXJncy5nbG9iYWxTbHVnXSA/PyBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsIGFzIGFueVxuICAgIH0sXG4gICAgW2NvbGxlY3Rpb25zQnlTbHVnLCBnbG9iYWxzQnlTbHVnXSxcbiAgKVxuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoeyBjb25maWcsIGdldEVudGl0eUNvbmZpZywgc2V0Q29uZmlnIH0pLFxuICAgIFtjb25maWcsIGdldEVudGl0eUNvbmZpZywgc2V0Q29uZmlnXSxcbiAgKVxuXG4gIHJldHVybiA8Um9vdENvbmZpZ0NvbnRleHQgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9Sb290Q29uZmlnQ29udGV4dD5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbmZpZyA9ICgpOiBDbGllbnRDb25maWdDb250ZXh0ID0+IHVzZShSb290Q29uZmlnQ29udGV4dClcblxuLyoqXG4gKiBUaGlzIHByb3ZpZGVyIHNoYWRvd3MgdGhlIGBDb25maWdQcm92aWRlcmAgb24gdGhlIF9wYWdlXyBsZXZlbCwgYWxsb3dpbmcgdXMgdG9cbiAqIHVwZGF0ZSB0aGUgY29uZmlnIHdoZW4gbmVlZGVkLCBlLmcuIGFmdGVyIGF1dGhlbnRpY2F0aW9uLlxuICogVGhlIGxheW91dCBgQ29uZmlnUHJvdmlkZXJgIGlzIG5vdCB1cGRhdGVkIG9uIHBhZ2UgbmF2aWdhdGlvbiAvIGF1dGhlbnRpY2F0aW9uLFxuICogYXMgdGhlIGxheW91dCBkb2VzIG5vdCByZS1yZW5kZXIgaW4gdGhvc2UgY2FzZXMuXG4gKlxuICogSWYgdGhlIGNvbmZpZyBoZXJlIGhhcyB0aGUgc2FtZSByZWZlcmVuY2UgYXMgdGhlIGNvbmZpZyBmcm9tIHRoZSBsYXlvdXQsIHdlXG4gKiBzaW1wbHkgcmV1c2UgdGhlIGNvbnRleHQgZnJvbSB0aGUgbGF5b3V0IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGNvbXBvbmVudCBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2Ugb3IgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICovXG5leHBvcnQgY29uc3QgUGFnZUNvbmZpZ1Byb3ZpZGVyOiBSZWFjdC5GQzx7XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgY29uZmlnOiBDbGllbnRDb25maWdcbn0+ID0gKHsgY2hpbGRyZW4sIGNvbmZpZzogY29uZmlnRnJvbVByb3BzIH0pID0+IHtcbiAgY29uc3QgeyBjb25maWc6IHJvb3RDb25maWcsIHNldENvbmZpZzogc2V0Um9vdENvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICAvKipcbiAgICogVGhpcyBgdXNlRWZmZWN0YCBpcyByZXF1aXJlZCBpbiBvcmRlciBmb3IgdGhlIF9wYWdlXyB0byBiZSBhYmxlIHRvIHJlZnJlc2ggdGhlIGNsaWVudCBjb25maWcsXG4gICAqIHdoaWNoIG1heSBoYXZlIGJlZW4gY2FjaGVkIG9uIHRoZSBfbGF5b3V0XyBsZXZlbCwgd2hlcmUgdGhlIGBDb25maWdQcm92aWRlcmAgaXMgbWFuYWdlZC5cbiAgICogU2luY2UgdGhlIGxheW91dCBkb2VzIG5vdCByZS1yZW5kZXIgb24gcGFnZSBuYXZpZ2F0aW9uIC8gYXV0aGVudGljYXRpb24sIHdlIG5lZWQgdG8gbWFudWFsbHlcbiAgICogdXBkYXRlIHRoZSBjb25maWcsIGFzIHRoZSB1c2VyIG1heSBoYXZlIGJlZW4gYXV0aGVudGljYXRlZCBpbiB0aGUgcHJvY2Vzcywgd2hpY2ggYWZmZWN0cyB0aGUgY2xpZW50IGNvbmZpZy5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0Um9vdENvbmZpZyhjb25maWdGcm9tUHJvcHMpXG4gIH0sIFtjb25maWdGcm9tUHJvcHMsIHNldFJvb3RDb25maWddKVxuXG4gIC8vIElmIHRoaXMgY29tcG9uZW50IHJlY2VpdmVzIGEgZGlmZmVyZW50IGNvbmZpZyB0aGFuIHdoYXQgaXMgaW4gY29udGV4dCBmcm9tIHRoZSBsYXlvdXQsIGl0IGlzIHN0YWxlLlxuICAvLyBXaGlsZSBzdGFsZSwgd2UgaW5zdGFudGlhdGUgYSBuZXcgY29udGV4dCBwcm92aWRlciB0aGF0IHByb3ZpZGVzIHRoZSBuZXcgY29uZmlnIHVudGlsIHRoZSByb290IGNvbnRleHQgaXMgdXBkYXRlZC5cbiAgLy8gVW5mb3J0dW5hdGVseSwgcmVmZXJlbnRpYWwgZXF1YWxpdHkgYWxvbmUgZG9lcyBub3Qgd29yayBiYyB0aGUgcmVmZXJlbmNlIGlzIGxvc3QgZHVyaW5nIHNlcnZlci9jbGllbnQgc2VyaWFsaXphdGlvbixcbiAgLy8gc28gd2UgbmVlZCB0byBhbHNvIGNvbXBhcmUgdGhlIGB1bmF1dGhlbnRpY2F0ZWRgIHByb3BlcnR5LlxuICBpZiAoXG4gICAgcm9vdENvbmZpZyAhPT0gY29uZmlnRnJvbVByb3BzICYmXG4gICAgcm9vdENvbmZpZy51bmF1dGhlbnRpY2F0ZWQgIT09IGNvbmZpZ0Zyb21Qcm9wcy51bmF1dGhlbnRpY2F0ZWRcbiAgKSB7XG4gICAgcmV0dXJuIDxDb25maWdQcm92aWRlciBjb25maWc9e2NvbmZpZ0Zyb21Qcm9wc30+e2NoaWxkcmVufTwvQ29uZmlnUHJvdmlkZXI+XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW5cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbi8qKlxuICogQSBob29rIGZvciBtYW5hZ2luZyBzdGF0ZSB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGJ5IHByb3BzIGJ1dCBhbHNvIG92ZXJyaWRkZW4gbG9jYWxseS5cbiAqIFByb3BzIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UgaWYgdGhleSBjaGFuZ2UsIGJ1dCBsb2NhbCBzdGF0ZSBjYW4gb3ZlcnJpZGUgdGhlbSB0ZW1wb3JhcmlseS5cbiAqXG4gKiBAcGFyYW0gcHJvcFZhbHVlIC0gVGhlIGNvbnRyb2xsZWQgdmFsdWUgZnJvbSBwcm9wc1xuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBWYWx1ZSB0byB1c2Ugd2hlbiBwcm9wVmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAqXG4gKiBAaW50ZXJuYWwgLSBtYXkgY2hhbmdlIG9yIGJlIHJlbW92ZWQgd2l0aG91dCBhIG1ham9yIHZlcnNpb24gYnVtcFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29udHJvbGxhYmxlU3RhdGU8VCwgRD4oXG4gIHByb3BWYWx1ZTogVCxcbiAgZmFsbGJhY2tWYWx1ZTogRCxcbik6IFtUIGV4dGVuZHMgTm9uTnVsbGFibGU8VD4gPyBUIDogRCB8IE5vbk51bGxhYmxlPFQ+LCAodmFsdWU6ICgocHJldjogVCkgPT4gVCkgfCBUKSA9PiB2b2lkXVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29udHJvbGxhYmxlU3RhdGU8VD4ocHJvcFZhbHVlOiBUKTogW1QsICh2YWx1ZTogKChwcmV2OiBUKSA9PiBUKSB8IFQpID0+IHZvaWRdXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb250cm9sbGFibGVTdGF0ZTxULCBEPihcbiAgcHJvcFZhbHVlOiBULFxuICBmYWxsYmFja1ZhbHVlPzogRCxcbik6IFtUIGV4dGVuZHMgTm9uTnVsbGFibGU8VD4gPyBUIDogRCB8IE5vbk51bGxhYmxlPFQ+LCAodmFsdWU6ICgocHJldjogVCkgPT4gVCkgfCBUKSA9PiB2b2lkXSB7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlPFQ+KHByb3BWYWx1ZSlcbiAgY29uc3QgaW5pdGlhbFJlbmRlclJlZiA9IHVzZVJlZih0cnVlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxSZW5kZXJSZWYuY3VycmVudCkge1xuICAgICAgaW5pdGlhbFJlbmRlclJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvY2FsVmFsdWUocHJvcFZhbHVlKVxuICB9LCBbcHJvcFZhbHVlXSlcblxuICByZXR1cm4gW2xvY2FsVmFsdWUgPz8gZmFsbGJhY2tWYWx1ZSwgc2V0TG9jYWxWYWx1ZV0gYXMgW1xuICAgIFQgZXh0ZW5kcyBOb25OdWxsYWJsZTxUPiA/IFQgOiBEIHwgTm9uTnVsbGFibGU8VD4sXG4gICAgKHZhbHVlOiAoKHByZXY6IFQpID0+IFQpIHwgVCkgPT4gdm9pZCxcbiAgXVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRGVsYXkgfSBmcm9tICcuLi8uLi9ob29rcy91c2VEZWxheS5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgdHlwZSBTaGltbWVyRWZmZWN0UHJvcHMgPSB7XG4gIHJlYWRvbmx5IGFuaW1hdGlvbkRlbGF5Pzogc3RyaW5nXG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBkaXNhYmxlSW5saW5lU3R5bGVzPzogYm9vbGVhblxuICByZWFkb25seSBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgYWRqdXN0cyB0aGUgZ3JhZGllbnQgdG8gYWxsb3cgdGhlIG5hdHVyYWwgYmFja2dyb3VuZCBvZiB0aGUgZWxlbWVudCB0byBzaGluZSB0aHJvdWdoLlxuICAgKi9cbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nXG59ICYgUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+XG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzaGltbWVyLWVmZmVjdCdcblxuZXhwb3J0IGNvbnN0IFNoaW1tZXJFZmZlY3Q6IFJlYWN0LkZDPFNoaW1tZXJFZmZlY3RQcm9wcz4gPSAoe1xuICBhbmltYXRpb25EZWxheSA9ICcwbXMnLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVJbmxpbmVTdHlsZXMgPSBmYWxzZSxcbiAgaGVpZ2h0ID0gJzYwcHgnLFxuICB0cmFuc3BhcmVudCxcbiAgd2lkdGggPSAnMTAwJScsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgdHJhbnNwYXJlbnQgJiYgYCR7YmFzZUNsYXNzfS0tdHJhbnNwYXJlbnRgLCBjbGFzc05hbWVdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIC4uLihyZXN0Py5zdHlsZSB8fCB7fSksXG4gICAgICAgIGhlaWdodDogIWRpc2FibGVJbmxpbmVTdHlsZXMgJiYgKHR5cGVvZiBoZWlnaHQgPT09ICdudW1iZXInID8gYCR7aGVpZ2h0fXB4YCA6IGhlaWdodCksXG4gICAgICAgIHdpZHRoOiAhZGlzYWJsZUlubGluZVN0eWxlcyAmJiAodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyA/IGAke3dpZHRofXB4YCA6IHdpZHRoKSxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJzaGltbWVyLWVmZmVjdF9fc2hpbmVcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGFuaW1hdGlvbkRlbGF5LFxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgdHlwZSBTdGFnZ2VyZWRTaGltbWVyc1Byb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY291bnQ6IG51bWJlclxuICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgcmVuZGVyRGVsYXk/OiBudW1iZXJcbiAgc2hpbW1lckRlbGF5PzogbnVtYmVyIHwgc3RyaW5nXG4gIHNoaW1tZXJJdGVtQ2xhc3NOYW1lPzogc3RyaW5nXG4gIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBTdGFnZ2VyZWRTaGltbWVyczogUmVhY3QuRkM8U3RhZ2dlcmVkU2hpbW1lcnNQcm9wcz4gPSAoe1xuICBjbGFzc05hbWUsXG4gIGNvdW50LFxuICBoZWlnaHQsXG4gIHJlbmRlckRlbGF5ID0gNTAwLFxuICBzaGltbWVyRGVsYXkgPSAyNSxcbiAgc2hpbW1lckl0ZW1DbGFzc05hbWUsXG4gIHdpZHRoLFxufSkgPT4ge1xuICBjb25zdCBzaGltbWVyRGVsYXlUb1Bhc3MgPSB0eXBlb2Ygc2hpbW1lckRlbGF5ID09PSAnbnVtYmVyJyA/IGAke3NoaW1tZXJEZWxheX1tc2AgOiBzaGltbWVyRGVsYXlcbiAgY29uc3QgW2hhc0RlbGF5ZWRdID0gdXNlRGVsYXkocmVuZGVyRGVsYXksIHRydWUpXG5cbiAgaWYgKCFoYXNEZWxheWVkKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICB7Wy4uLkFycmF5KGNvdW50KV0ubWFwKChfLCBpKSA9PiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzaGltbWVySXRlbUNsYXNzTmFtZX0ga2V5PXtpfT5cbiAgICAgICAgICA8U2hpbW1lckVmZmVjdFxuICAgICAgICAgICAgYW5pbWF0aW9uRGVsYXk9e2BjYWxjKCR7aX0gKiAke3NoaW1tZXJEZWxheVRvUGFzc30pYH1cbiAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0fVxuICAgICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbnR5cGUgUmVzdWx0ID0gW2Jvb2xlYW4sICgpID0+IHZvaWRdXG5leHBvcnQgY29uc3QgdXNlRGVsYXkgPSAoZGVsYXk6IG51bWJlciwgdHJpZ2dlck9uTW91bnQgPSBmYWxzZSk6IFJlc3VsdCA9PiB7XG4gIGNvbnN0IFtoYXNEZWxheWVkLCBzZXRIYXNEZWxheWVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0cmlnZ2VyVGltZW91dFJlZiA9IFJlYWN0LnVzZVJlZjxOb2RlSlMuVGltZW91dD4odW5kZWZpbmVkKVxuXG4gIGNvbnN0IHRyaWdnZXJEZWxheSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRIYXNEZWxheWVkKGZhbHNlKVxuICAgIGNsZWFyVGltZW91dCh0cmlnZ2VyVGltZW91dFJlZi5jdXJyZW50KVxuICAgIHRyaWdnZXJUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldEhhc0RlbGF5ZWQodHJ1ZSlcbiAgICB9LCBkZWxheSlcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodHJpZ2dlclRpbWVvdXRSZWYuY3VycmVudClcbiAgICB9XG4gIH0sIFtkZWxheV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHJpZ2dlck9uTW91bnQpIHtcbiAgICAgIHRyaWdnZXJEZWxheSgpXG4gICAgfVxuICB9LCBbdHJpZ2dlckRlbGF5LCB0cmlnZ2VyT25Nb3VudF0pXG5cbiAgcmV0dXJuIFtoYXNEZWxheWVkLCB0cmlnZ2VyRGVsYXldXG59XG4iLCJpbXBvcnQgdHlwZSB7IEVkaXRvclByb3BzIH0gZnJvbSAnQG1vbmFjby1lZGl0b3IvcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0T3B0aW9uczogUGljazxcbiAgRWRpdG9yUHJvcHNbJ29wdGlvbnMnXSxcbiAgJ2luc2VydFNwYWNlcycgfCAndGFiU2l6ZScgfCAndHJpbUF1dG9XaGl0ZXNwYWNlJ1xuPiA9IHtcbiAgaW5zZXJ0U3BhY2VzOiBmYWxzZSxcbiAgdGFiU2l6ZTogNCxcbiAgdHJpbUF1dG9XaGl0ZXNwYWNlOiBmYWxzZSxcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRHbG9iYWxFZGl0b3JPcHRpb25zOiBPbWl0PFxuICBFZGl0b3JQcm9wc1snb3B0aW9ucyddLFxuICAnZGV0ZWN0SW5kZW50YXRpb24nIHwgJ2luc2VydFNwYWNlcycgfCAndGFiU2l6ZScgfCAndHJpbUF1dG9XaGl0ZXNwYWNlJ1xuPiA9IHtcbiAgaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcjogdHJ1ZSxcbiAgbWluaW1hcDoge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICB9LFxuICBvdmVydmlld1J1bGVyQm9yZGVyOiBmYWxzZSxcbiAgcmVhZE9ubHk6IGZhbHNlLFxuICBzY3JvbGxiYXI6IHtcbiAgICBhbHdheXNDb25zdW1lTW91c2VXaGVlbDogZmFsc2UsXG4gIH0sXG4gIHNjcm9sbEJleW9uZExhc3RMaW5lOiBmYWxzZSxcbiAgd29yZFdyYXA6ICdvbicsXG59XG4iXSwibmFtZXMiOlsiYyIsIl9jIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJyIiwiYSIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfZGVmaW5lUHJvcGVydHkiLCJ0IiwiX3RvUHJvcGVydHlLZXkiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJsIiwibiIsInUiLCJmIiwibyIsIl9ub25JdGVyYWJsZVJlc3QiLCJvd25LZXlzIiwiX29iamVjdFNwcmVhZDIiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJpIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJfc2xpY2VkVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl90b1ByaW1pdGl2ZSIsIm9iaiIsImtleSIsInZhbHVlIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwic3ltYm9scyIsInN5bSIsInRhcmdldCIsInNvdXJjZSIsImNvbXBvc2UiLCJfbGVuIiwiZm5zIiwiX2tleSIsIngiLCJ5IiwiY3VycnkiLCJmbiIsImN1cnJpZWQiLCJfdGhpcyIsIl9sZW4yIiwiYXJncyIsIl9rZXkyIiwiX2xlbjMiLCJuZXh0QXJncyIsIl9rZXkzIiwiaXNPYmplY3QiLCJpc0VtcHR5IiwiaXNGdW5jdGlvbiIsImhhc093blByb3BlcnR5IiwicHJvcGVydHkiLCJ2YWxpZGF0ZUNoYW5nZXMiLCJpbml0aWFsIiwiY2hhbmdlcyIsImVycm9ySGFuZGxlciIsImZpZWxkIiwidmFsaWRhdGVTZWxlY3RvciIsInNlbGVjdG9yIiwidmFsaWRhdGVIYW5kbGVyIiwiaGFuZGxlciIsIl9oYW5kbGVyIiwidmFsaWRhdGVJbml0aWFsIiwidGhyb3dFcnJvciIsImVycm9yTWVzc2FnZXMiLCJ0eXBlIiwidmFsaWRhdG9ycyIsImNyZWF0ZSIsInN0YXRlIiwiZGlkVXBkYXRlIiwiZGlkU3RhdGVVcGRhdGUiLCJ1cGRhdGUiLCJ1cGRhdGVTdGF0ZSIsInZhbGlkYXRlIiwiZ2V0Q2hhbmdlcyIsImV4dHJhY3RDaGFuZ2VzIiwiZ2V0U3RhdGUiLCJzZXRTdGF0ZSIsImNhdXNlZENoYW5nZXMiLCJfaGFuZGxlciRmaWVsZCIsImluZGV4Iiwic3RhdGVfbG9jYWxfZGVmYXVsdCIsImNvbmZpZyIsInZhbGlkYXRlQ29uZmlnIiwiaW5mb3JtQWJvdXREZXByZWNhdGlvbiIsIm1lcmdlIiwiQ0FOQ0VMQVRJT05fTUVTU0FHRSIsIm1ha2VDYW5jZWxhYmxlIiwicHJvbWlzZSIsImhhc0NhbmNlbGVkXyIsIndyYXBwZWRQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInZhbCIsIl9leGNsdWRlZCIsIl9zdGF0ZSRjcmVhdGUiLCJfc3RhdGUkY3JlYXRlMiIsImdsb2JhbENvbmZpZyIsIl92YWxpZGF0b3JzJGNvbmZpZyIsIm1vbmFjbyIsImluaXQiLCJfcmVmIiwiaXNJbml0aWFsaXplZCIsIndyYXBwZXJQcm9taXNlIiwic3RvcmVNb25hY29JbnN0YW5jZSIsImluamVjdFNjcmlwdHMiLCJnZXRNb25hY29Mb2FkZXJTY3JpcHQiLCJjb25maWd1cmVMb2FkZXIiLCJzY3JpcHQiLCJjcmVhdGVTY3JpcHQiLCJzcmMiLCJfcmVmMiIsImxvYWRlclNjcmlwdCIsIl9yZWYzIiwicmVxdWlyZSIsImxvYWRlZCIsImVycm9yIiwiX19nZXRNb25hY29JbnN0YW5jZSIsIl9yZWY0IiwibG9hZGVyIiwibWVtbyIsIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInN0eWxlcyIsInN0eWxlc19kZWZhdWx0IiwiTG9hZGluZyIsImNoaWxkcmVuIiwiTG9hZGluZ19kZWZhdWx0IiwiTW9uYWNvQ29udGFpbmVyIiwid2lkdGgiLCJoZWlnaHQiLCJpc0VkaXRvclJlYWR5IiwibG9hZGluZyIsImNsYXNzTmFtZSIsIndyYXBwZXJQcm9wcyIsIk1vbmFjb0NvbnRhaW5lcl9kZWZhdWx0IiwidXNlTW91bnQiLCJlZmZlY3QiLCJ1c2VNb3VudF9kZWZhdWx0IiwidXNlVXBkYXRlIiwiZGVwcyIsImFwcGx5Q2hhbmdlcyIsImlzSW5pdGlhbE1vdW50IiwidXNlVXBkYXRlX2RlZmF1bHQiLCJub29wIiwiZ2V0T3JDcmVhdGVNb2RlbCIsImxhbmd1YWdlIiwicGF0aCIsImdldE1vZGVsIiwiY3JlYXRlTW9kZWwiLCJjcmVhdGVNb2RlbFVyaSIsIkRpZmZFZGl0b3IiLCJvcmlnaW5hbCIsIm1vZGlmaWVkIiwib3JpZ2luYWxMYW5ndWFnZSIsIm1vZGlmaWVkTGFuZ3VhZ2UiLCJvcmlnaW5hbE1vZGVsUGF0aCIsIm1vZGlmaWVkTW9kZWxQYXRoIiwia2VlcEN1cnJlbnRPcmlnaW5hbE1vZGVsIiwia2VlcEN1cnJlbnRNb2RpZmllZE1vZGVsIiwidGhlbWUiLCJvcHRpb25zIiwiYmVmb3JlTW91bnQiLCJvbk1vdW50Iiwic2V0SXNFZGl0b3JSZWFkeSIsImlzTW9uYWNvTW91bnRpbmciLCJzZXRJc01vbmFjb01vdW50aW5nIiwiZWRpdG9yUmVmIiwibW9uYWNvUmVmIiwiY29udGFpbmVyUmVmIiwib25Nb3VudFJlZiIsImJlZm9yZU1vdW50UmVmIiwicHJldmVudENyZWF0aW9uIiwiY2FuY2VsYWJsZSIsImRpc3Bvc2VFZGl0b3IiLCJvcmlnaW5hbEVkaXRvciIsIm1vZGVsIiwibW9kaWZpZWRFZGl0b3IiLCJzZXRNb2RlbHMiLCJvcmlnaW5hbE1vZGVsIiwibW9kaWZpZWRNb2RlbCIsImNyZWF0ZUVkaXRvciIsIm1vZGVscyIsIkRpZmZFZGl0b3JfZGVmYXVsdCIsInVzZVByZXZpb3VzIiwicmVmIiwidXNlUHJldmlvdXNfZGVmYXVsdCIsInZpZXdTdGF0ZXMiLCJFZGl0b3IiLCJkZWZhdWx0VmFsdWUiLCJkZWZhdWx0TGFuZ3VhZ2UiLCJkZWZhdWx0UGF0aCIsImxpbmUiLCJvdmVycmlkZVNlcnZpY2VzIiwic2F2ZVZpZXdTdGF0ZSIsImtlZXBDdXJyZW50TW9kZWwiLCJvbkNoYW5nZSIsIm9uVmFsaWRhdGUiLCJzdWJzY3JpcHRpb25SZWYiLCJ2YWx1ZVJlZiIsInByZXZpb3VzUGF0aCIsInByZXZlbnRUcmlnZ2VyQ2hhbmdlRXZlbnQiLCJhdXRvQ3JlYXRlZE1vZGVsUGF0aCIsImRlZmF1bHRNb2RlbCIsImV2ZW50IiwiY2hhbmdlTWFya2Vyc0xpc3RlbmVyIiwidXJpcyIsImVkaXRvclVyaSIsInVyaSIsIm1hcmtlcnMiLCJFZGl0b3JfZGVmYXVsdCIsInNyY19kZWZhdWx0IiwiY3JlYXRlQ29udGV4dCIsInVzZSIsInVzZU1lbW8iLCJ1c2VDb250cm9sbGFibGVTdGF0ZSIsInByb3BWYWx1ZSIsImZhbGxiYWNrVmFsdWUiLCIkIiwibG9jYWxWYWx1ZSIsInNldExvY2FsVmFsdWUiLCJpbml0aWFsUmVuZGVyUmVmIiwidDAiLCJ0MSIsImN1cnJlbnQiLCJ0MiIsInQzIiwiUm9vdENvbmZpZ0NvbnRleHQiLCJ1bmRlZmluZWQiLCJDb25maWdQcm92aWRlciIsImNvbmZpZ0Zyb21Qcm9wcyIsInNldENvbmZpZyIsImNvbGxlY3Rpb25zQnlTbHVnIiwiZ2xvYmFsc0J5U2x1ZyIsImNvbGxlY3Rpb24iLCJjb2xsZWN0aW9ucyIsInNsdWciLCJnbG9iYWwiLCJnbG9iYWxzIiwiZ2V0RW50aXR5Q29uZmlnIiwiY29sbGVjdGlvblNsdWciLCJnbG9iYWxTbHVnIiwiX2pzeCIsInVzZUNvbmZpZyIsIlBhZ2VDb25maWdQcm92aWRlciIsInJvb3RDb25maWciLCJzZXRSb290Q29uZmlnIiwidW5hdXRoZW50aWNhdGVkIiwiaW5pdGlhbENvbnRleHQiLCJhdXRvTW9kZSIsInNldFRoZW1lIiwiQ29udGV4dCIsInNldENvb2tpZSIsImNuYW1lIiwiY3ZhbHVlIiwiZXhkYXlzIiwiZCIsIkRhdGUiLCJzZXRUaW1lIiwiZ2V0VGltZSIsImV4cGlyZXMiLCJ0b1VUQ1N0cmluZyIsImRvY3VtZW50IiwiY29va2llIiwiZ2V0VGhlbWUiLCJjb29raWVLZXkiLCJ0aGVtZUZyb21Db29raWVzIiwid2luZG93Iiwic3BsaXQiLCJmaW5kIiwicm93Iiwic3RhcnRzV2l0aCIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwiZG9jdW1lbnRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZGVmYXVsdFRoZW1lIiwiVGhlbWVQcm92aWRlciIsImluaXRpYWxUaGVtZSIsInByZXNlbGVjdGVkVGhlbWUiLCJhZG1pbiIsImNvb2tpZVByZWZpeCIsInNldFRoZW1lU3RhdGUiLCJzZXRBdXRvTW9kZSIsInRoZW1lXzAiLCJ0aGVtZVRvU2V0IiwidGhlbWVGcm9tT1MiLCJ0NCIsInVzZVRoZW1lIiwidXNlRGVsYXkiLCJkZWxheSIsInRyaWdnZXJPbk1vdW50IiwiaGFzRGVsYXllZCIsInNldEhhc0RlbGF5ZWQiLCJ0cmlnZ2VyVGltZW91dFJlZiIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJ0cmlnZ2VyRGVsYXkiLCJiYXNlQ2xhc3MiLCJhbmltYXRpb25EZWxheSIsIlNoaW1tZXJFZmZlY3QiLCJkaXNhYmxlSW5saW5lU3R5bGVzIiwidHJhbnNwYXJlbnQiLCJyZXN0Iiwic3R5bGUiLCJTdGFnZ2VyZWRTaGltbWVycyIsImNvdW50IiwicmVuZGVyRGVsYXkiLCJzaGltbWVyRGVsYXkiLCJzaGltbWVySXRlbUNsYXNzTmFtZSIsInNoaW1tZXJEZWxheVRvUGFzcyIsIl8iLCJtYXAiLCJkZWZhdWx0T3B0aW9ucyIsImluc2VydFNwYWNlcyIsInRhYlNpemUiLCJ0cmltQXV0b1doaXRlc3BhY2UiLCJkZWZhdWx0R2xvYmFsRWRpdG9yT3B0aW9ucyIsImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLCJtaW5pbWFwIiwiZW5hYmxlZCIsIm92ZXJ2aWV3UnVsZXJCb3JkZXIiLCJyZWFkT25seSIsInNjcm9sbGJhciIsImFsd2F5c0NvbnN1bWVNb3VzZVdoZWVsIiwic2Nyb2xsQmV5b25kTGFzdExpbmUiLCJ3b3JkV3JhcCIsIkZ0IiwicHJvcHMiLCJDb2RlRWRpdG9yIiwibWF4SGVpZ2h0IiwibWluSGVpZ2h0IiwicmVjYWxjdWxhdGVkSGVpZ2h0QXQiLCJNSU5fSEVJR0hUIiwicHJldkNhbGN1bGF0ZWRIZWlnaHRBdCIsImdsb2JhbEVkaXRvck9wdGlvbnMiLCJwYWRkaW5nRnJvbVByb3BzIiwic2V0RHluYW1pY0hlaWdodCIsInBhZGRpbmciLCJ0b3AiLCJjbGFzc2VzIiwiZHluYW1pY0hlaWdodCIsImRldGVjdEluZGVudGF0aW9uIiwidmFsdWVfMCIsImV2IiwiZWRpdG9yIiwidXBkYXRlT3B0aW9ucyIsIkNvZGVFZGl0b3JfZGVmYXVsdCJdLCJpZ25vcmVMaXN0IjpbMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-QP5KC7MG.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-WDZJLNNB.js": /*!***********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-WDZJLNNB.js ***! \***********************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache; var react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ a: () => (/* binding */ RP), /* harmony export */ b: () => (/* binding */ FP), /* harmony export */ c: () => (/* binding */ V5), /* harmony export */ d: () => (/* binding */ WP), /* harmony export */ e: () => (/* binding */ EO), /* harmony export */ f: () => (/* binding */ hn), /* harmony export */ g: () => (/* binding */ RO), /* harmony export */ h: () => (/* binding */ qp), /* harmony export */ i: () => (/* binding */ LV), /* harmony export */ j: () => (/* binding */ Rp), /* harmony export */ k: () => (/* binding */ Up), /* harmony export */ l: () => (/* binding */ Gp), /* harmony export */ m: () => (/* binding */ SP), /* harmony export */ n: () => (/* binding */ eK) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react-dom/index.js"); /* harmony import */ var _chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-5LKBKI4T.js */ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-5LKBKI4T.js"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js"); /* harmony import */ var react_compiler_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/compiler-runtime */ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/compiler-runtime.js"); /* harmony import */ var _payloadcms_translations__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @payloadcms/translations */ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/init.js"); /* harmony import */ var _payloadcms_translations__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @payloadcms/translations */ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/importDateFNSLocale.js"); /* harmony import */ var next_navigation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next/navigation.js */ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/api/navigation.js"); /* __next_internal_client_entry_do_not_use__ a,b,c,d,e,f,g,h,i,j,k,l,m,n auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$(), _s4 = $RefreshSig$(), _s5 = $RefreshSig$(), _s6 = $RefreshSig$(), _s7 = $RefreshSig$(), _s8 = $RefreshSig$(), _s9 = $RefreshSig$(), _s10 = $RefreshSig$(), _s11 = $RefreshSig$(), _s12 = $RefreshSig$(), _s13 = $RefreshSig$(), _s14 = $RefreshSig$(), _s15 = $RefreshSig$(), _s16 = $RefreshSig$(), _s17 = $RefreshSig$(), _s18 = $RefreshSig$(), _s19 = $RefreshSig$(), _s20 = $RefreshSig$(), _s21 = $RefreshSig$(), _s22 = $RefreshSig$(), _s23 = $RefreshSig$(), _s24 = $RefreshSig$(), _s25 = $RefreshSig$(), _s26 = $RefreshSig$(), _s27 = $RefreshSig$(), _s28 = $RefreshSig$(), _s29 = $RefreshSig$(), _s30 = $RefreshSig$(), _s31 = $RefreshSig$(), _s32 = $RefreshSig$(); // Workaround for react-datepicker and other cjs dependencies potentially inserting require("react") statements function require(m) { if (m === 'react') return /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2))); if (m === 'react-dom') return /*#__PURE__*/ (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react_dom__WEBPACK_IMPORTED_MODULE_1__, 2))); throw new Error(`Unknown module ${m}`); } // Workaround end var Bm = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c = (RH, Ji)=>{ function Qm(e) { var t, r, o = ""; if (typeof e == "string" || typeof e == "number") o += e; else if (typeof e == "object") if (Array.isArray(e)) { var a = e.length; for(t = 0; t < a; t++)e[t] && (r = Qm(e[t])) && (o && (o += " "), o += r); } else for(r in e)e[r] && (o && (o += " "), o += r); return o; } function Hm() { for(var e, t, r = 0, o = "", a = arguments.length; r < a; r++)(e = arguments[r]) && (t = Qm(e)) && (o && (o += " "), o += t); return o; } Ji.exports = Hm, Ji.exports.clsx = Hm; }); _c1 = Bm; var L = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c2 = (Vm)=>{ "use strict"; Vm.toDate = by; function by(e) { let t = Object.prototype.toString.call(e); return e instanceof Date || typeof e == "object" && t === "[object Date]" ? new e.constructor(+e) : typeof e == "number" || t === "[object Number]" || typeof e == "string" || t === "[object String]" ? new Date(e) : new Date(NaN); } }); _c3 = L; var Pe = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c4 = (Km)=>{ "use strict"; Km.constructFrom = _y; function _y(e, t) { return e instanceof Date ? new e.constructor(t) : new Date(t); } }); _c5 = Pe; var At = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c6 = ($m)=>{ "use strict"; $m.addDays = Dy; var xy = L(), wy = Pe(); function Dy(e, t) { let r = (0, xy.toDate)(e); return isNaN(t) ? (0, wy.constructFrom)(e, NaN) : (t && r.setDate(r.getDate() + t), r); } }); _c7 = At; var qr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Um)=>{ "use strict"; Um.addMonths = My; var Oy = L(), zm = Pe(); function My(e, t) { let r = (0, Oy.toDate)(e); if (isNaN(t)) return (0, zm.constructFrom)(e, NaN); if (!t) return r; let o = r.getDate(), a = (0, zm.constructFrom)(e, r.getTime()); a.setMonth(r.getMonth() + t + 1, 0); let c = a.getDate(); return o >= c ? a : (r.setFullYear(a.getFullYear(), a.getMonth(), o), r); } }); var ki = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Xm)=>{ "use strict"; Xm.add = qy; var Py = At(), yy = qr(), Ey = Pe(), Sy = L(); function qy(e, t) { let { years: r = 0, months: o = 0, weeks: a = 0, days: c = 0, hours: l = 0, minutes: f = 0, seconds: m = 0 } = t, h = (0, Sy.toDate)(e), g = o || r ? (0, yy.addMonths)(h, o + r * 12) : h, x = c || a ? (0, Py.addDays)(g, c + a * 7) : g, P = f + l * 60, y = (m + P * 60) * 1e3; return (0, Ey.constructFrom)(e, x.getTime() + y); } }); var ea = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Zm)=>{ "use strict"; Zm.isSaturday = Iy; var Ry = L(); function Iy(e) { return (0, Ry.toDate)(e).getDay() === 6; } }); var ta = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Gm)=>{ "use strict"; Gm.isSunday = Cy; var Ty = L(); function Cy(e) { return (0, Ty.toDate)(e).getDay() === 0; } }); var En = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c8 = (Jm)=>{ "use strict"; Jm.isWeekend = Yy; var Ny = L(); function Yy(e) { let t = (0, Ny.toDate)(e).getDay(); return t === 0 || t === 6; } }); _c9 = En; var na = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((km)=>{ "use strict"; km.addBusinessDays = Ay; var jy = Pe(), Fy = ea(), Ly = ta(), ra = En(), Wy = L(); function Ay(e, t) { let r = (0, Wy.toDate)(e), o = (0, ra.isWeekend)(r); if (isNaN(t)) return (0, jy.constructFrom)(e, NaN); let a = r.getHours(), c = t < 0 ? -1 : 1, l = Math.trunc(t / 5); r.setDate(r.getDate() + l * 7); let f = Math.abs(t % 5); for(; f > 0;)r.setDate(r.getDate() + c), (0, ra.isWeekend)(r) || (f -= 1); return o && (0, ra.isWeekend)(r) && t !== 0 && ((0, Fy.isSaturday)(r) && r.setDate(r.getDate() + (c < 0 ? 2 : -1)), (0, Ly.isSunday)(r) && r.setDate(r.getDate() + (c < 0 ? 1 : -2))), r.setHours(a), r; } }); var kr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((eh)=>{ "use strict"; eh.addMilliseconds = By; var Hy = L(), Qy = Pe(); function By(e, t) { let r = +(0, Hy.toDate)(e); return (0, Qy.constructFrom)(e, r + t); } }); var ve = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((fe)=>{ "use strict"; fe.secondsInYear = fe.secondsInWeek = fe.secondsInQuarter = fe.secondsInMonth = fe.secondsInMinute = fe.secondsInHour = fe.secondsInDay = fe.quartersInYear = fe.monthsInYear = fe.monthsInQuarter = fe.minutesInYear = fe.minutesInMonth = fe.minutesInHour = fe.minutesInDay = fe.minTime = fe.millisecondsInWeek = fe.millisecondsInSecond = fe.millisecondsInMinute = fe.millisecondsInHour = fe.millisecondsInDay = fe.maxTime = fe.daysInYear = fe.daysInWeek = void 0; var HH = fe.daysInWeek = 7, Vy = fe.daysInYear = 365.2425, Ky = fe.maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3, QH = fe.minTime = -Ky, BH = fe.millisecondsInWeek = 6048e5, VH = fe.millisecondsInDay = 864e5, KH = fe.millisecondsInMinute = 6e4, $H = fe.millisecondsInHour = 36e5, zH = fe.millisecondsInSecond = 1e3, UH = fe.minutesInYear = 525600, XH = fe.minutesInMonth = 43200, ZH = fe.minutesInDay = 1440, GH = fe.minutesInHour = 60, JH = fe.monthsInQuarter = 3, kH = fe.monthsInYear = 12, e3 = fe.quartersInYear = 4, $y = fe.secondsInHour = 3600, t3 = fe.secondsInMinute = 60, th = fe.secondsInDay = $y * 24, r3 = fe.secondsInWeek = th * 7, zy = fe.secondsInYear = th * Vy, Uy = fe.secondsInMonth = zy / 12, n3 = fe.secondsInQuarter = Uy * 3; }); var Sn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c10 = (rh)=>{ "use strict"; rh.addHours = Gy; var Xy = kr(), Zy = ve(); function Gy(e, t) { return (0, Xy.addMilliseconds)(e, t * Zy.millisecondsInHour); } }); _c11 = Sn; var _t = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((oa)=>{ "use strict"; oa.getDefaultOptions = Jy; oa.setDefaultOptions = ky; var nh = {}; function Jy() { return nh; } function ky(e) { nh = e; } }); var Ct = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c12 = (oh)=>{ "use strict"; oh.startOfWeek = rE; var eE = L(), tE = _t(); function rE(e, t) { let r = (0, tE.getDefaultOptions)(), o = t?.weekStartsOn ?? t?.locale?.options?.weekStartsOn ?? r.weekStartsOn ?? r.locale?.options?.weekStartsOn ?? 0, a = (0, eE.toDate)(e), c = a.getDay(), l = (c < o ? 7 : 0) + c - o; return a.setDate(a.getDate() - l), a.setHours(0, 0, 0, 0), a; } }); _c13 = Ct; var zt = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ih)=>{ "use strict"; ih.startOfISOWeek = oE; var nE = Ct(); function oE(e) { return (0, nE.startOfWeek)(e, { weekStartsOn: 1 }); } }); var fr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((uh)=>{ "use strict"; uh.getISOWeekYear = aE; var ah = Pe(), sh = zt(), iE = L(); function aE(e) { let t = (0, iE.toDate)(e), r = t.getFullYear(), o = (0, ah.constructFrom)(e, 0); o.setFullYear(r + 1, 0, 4), o.setHours(0, 0, 0, 0); let a = (0, sh.startOfISOWeek)(o), c = (0, ah.constructFrom)(e, 0); c.setFullYear(r, 0, 4), c.setHours(0, 0, 0, 0); let l = (0, sh.startOfISOWeek)(c); return t.getTime() >= a.getTime() ? r + 1 : t.getTime() >= l.getTime() ? r : r - 1; } }); var en = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ch)=>{ "use strict"; ch.startOfDay = uE; var sE = L(); function uE(e) { let t = (0, sE.toDate)(e); return t.setHours(0, 0, 0, 0), t; } }); var tr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((lh)=>{ "use strict"; lh.getTimezoneOffsetInMilliseconds = lE; var cE = L(); function lE(e) { let t = (0, cE.toDate)(e), r = new Date(Date.UTC(t.getFullYear(), t.getMonth(), t.getDate(), t.getHours(), t.getMinutes(), t.getSeconds(), t.getMilliseconds())); return r.setUTCFullYear(t.getFullYear()), +e - +r; } }); var Ut = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c14 = (ph)=>{ "use strict"; ph.differenceInCalendarDays = fE; var dE = ve(), dh = en(), fh = tr(); function fE(e, t) { let r = (0, dh.startOfDay)(e), o = (0, dh.startOfDay)(t), a = +r - (0, fh.getTimezoneOffsetInMilliseconds)(r), c = +o - (0, fh.getTimezoneOffsetInMilliseconds)(o); return Math.round((a - c) / dE.millisecondsInDay); } }); _c15 = Ut; var tn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((mh)=>{ "use strict"; mh.startOfISOWeekYear = gE; var pE = fr(), mE = zt(), hE = Pe(); function gE(e) { let t = (0, pE.getISOWeekYear)(e), r = (0, hE.constructFrom)(e, 0); return r.setFullYear(t, 0, 4), r.setHours(0, 0, 0, 0), (0, mE.startOfISOWeek)(r); } }); var ia = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((gh)=>{ "use strict"; gh.setISOWeekYear = xE; var vE = Pe(), bE = Ut(), hh = tn(), _E = L(); function xE(e, t) { let r = (0, _E.toDate)(e), o = (0, bE.differenceInCalendarDays)(r, (0, hh.startOfISOWeekYear)(r)), a = (0, vE.constructFrom)(e, 0); return a.setFullYear(t, 0, 4), a.setHours(0, 0, 0, 0), r = (0, hh.startOfISOWeekYear)(a), r.setDate(r.getDate() + o), r; } }); var aa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((vh)=>{ "use strict"; vh.addISOWeekYears = OE; var wE = fr(), DE = ia(); function OE(e, t) { return (0, DE.setISOWeekYear)(e, (0, wE.getISOWeekYear)(e) + t); } }); var qn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((bh)=>{ "use strict"; bh.addMinutes = yE; var ME = kr(), PE = ve(); function yE(e, t) { return (0, ME.addMilliseconds)(e, t * PE.millisecondsInMinute); } }); var Rn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c16 = (_h)=>{ "use strict"; _h.addQuarters = SE; var EE = qr(); function SE(e, t) { let r = t * 3; return (0, EE.addMonths)(e, r); } }); _c17 = Rn; var Po = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c18 = (xh)=>{ "use strict"; xh.addSeconds = RE; var qE = kr(); function RE(e, t) { return (0, qE.addMilliseconds)(e, t * 1e3); } }); _c19 = Po; var rn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((wh)=>{ "use strict"; wh.addWeeks = TE; var IE = At(); function TE(e, t) { let r = t * 7; return (0, IE.addDays)(e, r); } }); var yo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Dh)=>{ "use strict"; Dh.addYears = NE; var CE = qr(); function NE(e, t) { return (0, CE.addMonths)(e, t * 12); } }); var Mh = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c20 = (Oh)=>{ "use strict"; Oh.areIntervalsOverlapping = YE; var Eo = L(); function YE(e, t, r) { let [o, a] = [ +(0, Eo.toDate)(e.start), +(0, Eo.toDate)(e.end) ].sort((f, m)=>f - m), [c, l] = [ +(0, Eo.toDate)(t.start), +(0, Eo.toDate)(t.end) ].sort((f, m)=>f - m); return r?.inclusive ? o <= l && c <= a : o < l && c < a; } }); _c21 = Mh; var So = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c22 = (Ph)=>{ "use strict"; Ph.max = FE; var jE = L(); function FE(e) { let t; return e.forEach(function(r) { let o = (0, jE.toDate)(r); (t === void 0 || t < o || isNaN(Number(o))) && (t = o); }), t || new Date(NaN); } }); _c23 = So; var qo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((yh)=>{ "use strict"; yh.min = WE; var LE = L(); function WE(e) { let t; return e.forEach((r)=>{ let o = (0, LE.toDate)(r); (!t || t > o || isNaN(+o)) && (t = o); }), t || new Date(NaN); } }); var Sh = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c24 = (Eh)=>{ "use strict"; Eh.clamp = QE; var AE = So(), HE = qo(); function QE(e, t) { return (0, HE.min)([ (0, AE.max)([ e, t.start ]), t.end ]); } }); _c25 = Sh; var Ih = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c26 = (Rh)=>{ "use strict"; Rh.closestIndexTo = BE; var qh = L(); function BE(e, t) { let r = (0, qh.toDate)(e); if (isNaN(Number(r))) return NaN; let o = r.getTime(), a, c; return t.forEach(function(l, f) { let m = (0, qh.toDate)(l); if (isNaN(Number(m))) { a = NaN, c = NaN; return; } let h = Math.abs(o - m.getTime()); (a == null || h < c) && (a = f, c = h); }), a; } }); _c27 = Ih; var Yh = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c28 = (Nh)=>{ "use strict"; Nh.closestTo = VE; var Th = Pe(), Ch = L(); function VE(e, t) { let r = (0, Ch.toDate)(e); if (isNaN(Number(r))) return (0, Th.constructFrom)(e, NaN); let o = r.getTime(), a, c; return t.forEach((l)=>{ let f = (0, Ch.toDate)(l); if (isNaN(Number(f))) { a = (0, Th.constructFrom)(e, NaN), c = NaN; return; } let m = Math.abs(o - f.getTime()); (a == null || m < c) && (a = f, c = m); }), a; } }); _c29 = Yh; var Rr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c30 = (Fh)=>{ "use strict"; Fh.compareAsc = KE; var jh = L(); function KE(e, t) { let r = (0, jh.toDate)(e), o = (0, jh.toDate)(t), a = r.getTime() - o.getTime(); return a < 0 ? -1 : a > 0 ? 1 : a; } }); _c31 = Rr; var Ah = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c32 = (Wh)=>{ "use strict"; Wh.compareDesc = $E; var Lh = L(); function $E(e, t) { let r = (0, Lh.toDate)(e), o = (0, Lh.toDate)(t), a = r.getTime() - o.getTime(); return a > 0 ? -1 : a < 0 ? 1 : a; } }); _c33 = Ah; var wt = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Hh)=>{ "use strict"; Hh.constructNow = UE; var zE = Pe(); function UE(e) { return (0, zE.constructFrom)(e, Date.now()); } }); var Bh = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c34 = (Qh)=>{ "use strict"; Qh.daysToWeeks = ZE; var XE = ve(); function ZE(e) { let t = e / XE.daysInWeek, r = Math.trunc(t); return r === 0 ? 0 : r; } }); _c35 = Bh; var Ir = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c36 = (Kh)=>{ "use strict"; Kh.isSameDay = GE; var Vh = en(); function GE(e, t) { let r = (0, Vh.startOfDay)(e), o = (0, Vh.startOfDay)(t); return +r == +o; } }); _c37 = Ir; var Ro = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c38 = ($h)=>{ "use strict"; $h.isDate = JE; function JE(e) { return e instanceof Date || typeof e == "object" && Object.prototype.toString.call(e) === "[object Date]"; } }); _c39 = Ro; var Xt = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c40 = (zh)=>{ "use strict"; zh.isValid = tS; var kE = Ro(), eS = L(); function tS(e) { if (!(0, kE.isDate)(e) && typeof e != "number") return !1; let t = (0, eS.toDate)(e); return !isNaN(Number(t)); } }); _c41 = Xt; var Jh = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c42 = (Gh)=>{ "use strict"; Gh.differenceInBusinessDays = iS; var Uh = At(), rS = Ut(), nS = Ir(), Xh = Xt(), oS = En(), Zh = L(); function iS(e, t) { let r = (0, Zh.toDate)(e), o = (0, Zh.toDate)(t); if (!(0, Xh.isValid)(r) || !(0, Xh.isValid)(o)) return NaN; let a = (0, rS.differenceInCalendarDays)(r, o), c = a < 0 ? -1 : 1, l = Math.trunc(a / 7), f = l * 5; for(o = (0, Uh.addDays)(o, l * 7); !(0, nS.isSameDay)(r, o);)f += (0, oS.isWeekend)(o) ? 0 : c, o = (0, Uh.addDays)(o, c); return f === 0 ? 0 : f; } }); _c43 = Jh; var sa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((eg)=>{ "use strict"; eg.differenceInCalendarISOWeekYears = aS; var kh = fr(); function aS(e, t) { return (0, kh.getISOWeekYear)(e) - (0, kh.getISOWeekYear)(t); } }); var og = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ng)=>{ "use strict"; ng.differenceInCalendarISOWeeks = uS; var sS = ve(), tg = zt(), rg = tr(); function uS(e, t) { let r = (0, tg.startOfISOWeek)(e), o = (0, tg.startOfISOWeek)(t), a = +r - (0, rg.getTimezoneOffsetInMilliseconds)(r), c = +o - (0, rg.getTimezoneOffsetInMilliseconds)(o); return Math.round((a - c) / sS.millisecondsInWeek); } }); var In = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c44 = (ag)=>{ "use strict"; ag.differenceInCalendarMonths = cS; var ig = L(); function cS(e, t) { let r = (0, ig.toDate)(e), o = (0, ig.toDate)(t), a = r.getFullYear() - o.getFullYear(), c = r.getMonth() - o.getMonth(); return a * 12 + c; } }); _c45 = In; var Io = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c46 = (sg)=>{ "use strict"; sg.getQuarter = dS; var lS = L(); function dS(e) { let t = (0, lS.toDate)(e); return Math.trunc(t.getMonth() / 3) + 1; } }); _c47 = Io; var To = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c48 = (lg)=>{ "use strict"; lg.differenceInCalendarQuarters = fS; var ug = Io(), cg = L(); function fS(e, t) { let r = (0, cg.toDate)(e), o = (0, cg.toDate)(t), a = r.getFullYear() - o.getFullYear(), c = (0, ug.getQuarter)(r) - (0, ug.getQuarter)(o); return a * 4 + c; } }); _c49 = To; var Co = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c50 = (pg)=>{ "use strict"; pg.differenceInCalendarWeeks = mS; var pS = ve(), dg = Ct(), fg = tr(); function mS(e, t, r) { let o = (0, dg.startOfWeek)(e, r), a = (0, dg.startOfWeek)(t, r), c = +o - (0, fg.getTimezoneOffsetInMilliseconds)(o), l = +a - (0, fg.getTimezoneOffsetInMilliseconds)(a); return Math.round((c - l) / pS.millisecondsInWeek); } }); _c51 = Co; var Tn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c52 = (hg)=>{ "use strict"; hg.differenceInCalendarYears = hS; var mg = L(); function hS(e, t) { let r = (0, mg.toDate)(e), o = (0, mg.toDate)(t); return r.getFullYear() - o.getFullYear(); } }); _c53 = Tn; var No = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c54 = (bg)=>{ "use strict"; bg.differenceInDays = vS; var gS = Ut(), gg = L(); function vS(e, t) { let r = (0, gg.toDate)(e), o = (0, gg.toDate)(t), a = vg(r, o), c = Math.abs((0, gS.differenceInCalendarDays)(r, o)); r.setDate(r.getDate() - a * c); let l = +(vg(r, o) === -a), f = a * (c - l); return f === 0 ? 0 : f; } function vg(e, t) { let r = e.getFullYear() - t.getFullYear() || e.getMonth() - t.getMonth() || e.getDate() - t.getDate() || e.getHours() - t.getHours() || e.getMinutes() - t.getMinutes() || e.getSeconds() - t.getSeconds() || e.getMilliseconds() - t.getMilliseconds(); return r < 0 ? -1 : r > 0 ? 1 : r; } }); _c55 = No; var rr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((_g)=>{ "use strict"; _g.getRoundingMethod = bS; function bS(e) { return (t)=>{ let o = (e ? Math[e] : Math.trunc)(t); return o === 0 ? 0 : o; }; } }); var Cn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c56 = (wg)=>{ "use strict"; wg.differenceInMilliseconds = _S; var xg = L(); function _S(e, t) { return +(0, xg.toDate)(e) - +(0, xg.toDate)(t); } }); _c57 = Cn; var Yo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c58 = (Dg)=>{ "use strict"; Dg.differenceInHours = OS; var xS = rr(), wS = ve(), DS = Cn(); function OS(e, t, r) { let o = (0, DS.differenceInMilliseconds)(e, t) / wS.millisecondsInHour; return (0, xS.getRoundingMethod)(r?.roundingMethod)(o); } }); _c59 = Yo; var ua = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Og)=>{ "use strict"; Og.subISOWeekYears = PS; var MS = aa(); function PS(e, t) { return (0, MS.addISOWeekYears)(e, -t); } }); var Eg = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c60 = (yg)=>{ "use strict"; yg.differenceInISOWeekYears = SS; var Mg = Rr(), yS = sa(), ES = ua(), Pg = L(); function SS(e, t) { let r = (0, Pg.toDate)(e), o = (0, Pg.toDate)(t), a = (0, Mg.compareAsc)(r, o), c = Math.abs((0, yS.differenceInCalendarISOWeekYears)(r, o)); r = (0, ES.subISOWeekYears)(r, a * c); let l = +((0, Mg.compareAsc)(r, o) === -a), f = a * (c - l); return f === 0 ? 0 : f; } }); _c61 = Eg; var jo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Sg)=>{ "use strict"; Sg.differenceInMinutes = TS; var qS = rr(), RS = ve(), IS = Cn(); function TS(e, t, r) { let o = (0, IS.differenceInMilliseconds)(e, t) / RS.millisecondsInMinute; return (0, qS.getRoundingMethod)(r?.roundingMethod)(o); } }); var Nn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c62 = (qg)=>{ "use strict"; qg.endOfDay = NS; var CS = L(); function NS(e) { let t = (0, CS.toDate)(e); return t.setHours(23, 59, 59, 999), t; } }); _c63 = Nn; var Yn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c64 = (Rg)=>{ "use strict"; Rg.endOfMonth = jS; var YS = L(); function jS(e) { let t = (0, YS.toDate)(e), r = t.getMonth(); return t.setFullYear(t.getFullYear(), r + 1, 0), t.setHours(23, 59, 59, 999), t; } }); _c65 = Yn; var ca = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Ig)=>{ "use strict"; Ig.isLastDayOfMonth = AS; var FS = Nn(), LS = Yn(), WS = L(); function AS(e) { let t = (0, WS.toDate)(e); return +(0, FS.endOfDay)(t) == +(0, LS.endOfMonth)(t); } }); var jn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Tg)=>{ "use strict"; Tg.differenceInMonths = BS; var la = Rr(), HS = In(), QS = ca(), da = L(); function BS(e, t) { let r = (0, da.toDate)(e), o = (0, da.toDate)(t), a = (0, la.compareAsc)(r, o), c = Math.abs((0, HS.differenceInCalendarMonths)(r, o)), l; if (c < 1) l = 0; else { r.getMonth() === 1 && r.getDate() > 27 && r.setDate(30), r.setMonth(r.getMonth() - a * c); let f = (0, la.compareAsc)(r, o) === -a; (0, QS.isLastDayOfMonth)((0, da.toDate)(e)) && c === 1 && (0, la.compareAsc)(e, o) === 1 && (f = !1), l = a * (c - Number(f)); } return l === 0 ? 0 : l; } }); var Ng = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c66 = (Cg)=>{ "use strict"; Cg.differenceInQuarters = $S; var VS = rr(), KS = jn(); function $S(e, t, r) { let o = (0, KS.differenceInMonths)(e, t) / 3; return (0, VS.getRoundingMethod)(r?.roundingMethod)(o); } }); _c67 = Ng; var Fn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c68 = (Yg)=>{ "use strict"; Yg.differenceInSeconds = XS; var zS = rr(), US = Cn(); function XS(e, t, r) { let o = (0, US.differenceInMilliseconds)(e, t) / 1e3; return (0, zS.getRoundingMethod)(r?.roundingMethod)(o); } }); _c69 = Fn; var Fg = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c70 = (jg)=>{ "use strict"; jg.differenceInWeeks = JS; var ZS = rr(), GS = No(); function JS(e, t, r) { let o = (0, GS.differenceInDays)(e, t) / 7; return (0, ZS.getRoundingMethod)(r?.roundingMethod)(o); } }); _c71 = Fg; var fa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Ag)=>{ "use strict"; Ag.differenceInYears = e1; var Lg = Rr(), kS = Tn(), Wg = L(); function e1(e, t) { let r = (0, Wg.toDate)(e), o = (0, Wg.toDate)(t), a = (0, Lg.compareAsc)(r, o), c = Math.abs((0, kS.differenceInCalendarYears)(r, o)); r.setFullYear(1584), o.setFullYear(1584); let l = (0, Lg.compareAsc)(r, o) === -a, f = a * (c - +l); return f === 0 ? 0 : f; } }); var ma = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Hg)=>{ "use strict"; Hg.eachDayOfInterval = t1; var pa = L(); function t1(e, t) { let r = (0, pa.toDate)(e.start), o = (0, pa.toDate)(e.end), a = +r > +o, c = a ? +r : +o, l = a ? o : r; l.setHours(0, 0, 0, 0); let f = t?.step ?? 1; if (!f) return []; f < 0 && (f = -f, a = !a); let m = []; for(; +l <= c;)m.push((0, pa.toDate)(l)), l.setDate(l.getDate() + f), l.setHours(0, 0, 0, 0); return a ? m.reverse() : m; } }); var Bg = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c72 = (Qg)=>{ "use strict"; Qg.eachHourOfInterval = n1; var r1 = Sn(), ha = L(); function n1(e, t) { let r = (0, ha.toDate)(e.start), o = (0, ha.toDate)(e.end), a = +r > +o, c = a ? +r : +o, l = a ? o : r; l.setMinutes(0, 0, 0); let f = t?.step ?? 1; if (!f) return []; f < 0 && (f = -f, a = !a); let m = []; for(; +l <= c;)m.push((0, ha.toDate)(l)), l = (0, r1.addHours)(l, f); return a ? m.reverse() : m; } }); _c73 = Bg; var Fo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c74 = (Vg)=>{ "use strict"; Vg.startOfMinute = i1; var o1 = L(); function i1(e) { let t = (0, o1.toDate)(e); return t.setSeconds(0, 0), t; } }); _c75 = Fo; var $g = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Kg)=>{ "use strict"; Kg.eachMinuteOfInterval = u1; var a1 = qn(), s1 = Fo(), ga = L(); function u1(e, t) { let r = (0, s1.startOfMinute)((0, ga.toDate)(e.start)), o = (0, ga.toDate)(e.end), a = +r > +o, c = a ? +r : +o, l = a ? o : r, f = t?.step ?? 1; if (!f) return []; f < 0 && (f = -f, a = !a); let m = []; for(; +l <= c;)m.push((0, ga.toDate)(l)), l = (0, a1.addMinutes)(l, f); return a ? m.reverse() : m; } }); var Ug = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c76 = (zg)=>{ "use strict"; zg.eachMonthOfInterval = c1; var va = L(); function c1(e, t) { let r = (0, va.toDate)(e.start), o = (0, va.toDate)(e.end), a = +r > +o, c = a ? +r : +o, l = a ? o : r; l.setHours(0, 0, 0, 0), l.setDate(1); let f = t?.step ?? 1; if (!f) return []; f < 0 && (f = -f, a = !a); let m = []; for(; +l <= c;)m.push((0, va.toDate)(l)), l.setMonth(l.getMonth() + f); return a ? m.reverse() : m; } }); _c77 = Ug; var Ln = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c78 = (Xg)=>{ "use strict"; Xg.startOfQuarter = d1; var l1 = L(); function d1(e) { let t = (0, l1.toDate)(e), r = t.getMonth(), o = r - r % 3; return t.setMonth(o, 1), t.setHours(0, 0, 0, 0), t; } }); _c79 = Ln; var Gg = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c80 = (Zg)=>{ "use strict"; Zg.eachQuarterOfInterval = p1; var f1 = Rn(), Lo = Ln(), ba = L(); function p1(e, t) { let r = (0, ba.toDate)(e.start), o = (0, ba.toDate)(e.end), a = +r > +o, c = a ? +(0, Lo.startOfQuarter)(r) : +(0, Lo.startOfQuarter)(o), l = a ? (0, Lo.startOfQuarter)(o) : (0, Lo.startOfQuarter)(r), f = t?.step ?? 1; if (!f) return []; f < 0 && (f = -f, a = !a); let m = []; for(; +l <= c;)m.push((0, ba.toDate)(l)), l = (0, f1.addQuarters)(l, f); return a ? m.reverse() : m; } }); _c81 = Gg; var kg = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Jg)=>{ "use strict"; Jg.eachWeekOfInterval = h1; var m1 = rn(), Wo = Ct(), _a = L(); function h1(e, t) { let r = (0, _a.toDate)(e.start), o = (0, _a.toDate)(e.end), a = +r > +o, c = a ? (0, Wo.startOfWeek)(o, t) : (0, Wo.startOfWeek)(r, t), l = a ? (0, Wo.startOfWeek)(r, t) : (0, Wo.startOfWeek)(o, t); c.setHours(15), l.setHours(15); let f = +l.getTime(), m = c, h = t?.step ?? 1; if (!h) return []; h < 0 && (h = -h, a = !a); let g = []; for(; +m <= f;)m.setHours(0), g.push((0, _a.toDate)(m)), m = (0, m1.addWeeks)(m, h), m.setHours(15); return a ? g.reverse() : g; } }); var Ao = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c82 = (ev)=>{ "use strict"; ev.eachWeekendOfInterval = b1; var g1 = ma(), v1 = En(); function b1(e) { let t = (0, g1.eachDayOfInterval)(e), r = [], o = 0; for(; o < t.length;){ let a = t[o++]; (0, v1.isWeekend)(a) && r.push(a); } return r; } }); _c83 = Ao; var nn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((tv)=>{ "use strict"; tv.startOfMonth = x1; var _1 = L(); function x1(e) { let t = (0, _1.toDate)(e); return t.setDate(1), t.setHours(0, 0, 0, 0), t; } }); var nv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((rv)=>{ "use strict"; rv.eachWeekendOfMonth = M1; var w1 = Ao(), D1 = Yn(), O1 = nn(); function M1(e) { let t = (0, O1.startOfMonth)(e), r = (0, D1.endOfMonth)(e); return (0, w1.eachWeekendOfInterval)({ start: t, end: r }); } }); var Ho = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c84 = (ov)=>{ "use strict"; ov.endOfYear = y1; var P1 = L(); function y1(e) { let t = (0, P1.toDate)(e), r = t.getFullYear(); return t.setFullYear(r + 1, 0, 0), t.setHours(23, 59, 59, 999), t; } }); _c85 = Ho; var Wn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c86 = (iv)=>{ "use strict"; iv.startOfYear = q1; var E1 = L(), S1 = Pe(); function q1(e) { let t = (0, E1.toDate)(e), r = (0, S1.constructFrom)(e, 0); return r.setFullYear(t.getFullYear(), 0, 1), r.setHours(0, 0, 0, 0), r; } }); _c87 = Wn; var sv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((av)=>{ "use strict"; av.eachWeekendOfYear = C1; var R1 = Ao(), I1 = Ho(), T1 = Wn(); function C1(e) { let t = (0, T1.startOfYear)(e), r = (0, I1.endOfYear)(e); return (0, R1.eachWeekendOfInterval)({ start: t, end: r }); } }); var cv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((uv)=>{ "use strict"; uv.eachYearOfInterval = N1; var xa = L(); function N1(e, t) { let r = (0, xa.toDate)(e.start), o = (0, xa.toDate)(e.end), a = +r > +o, c = a ? +r : +o, l = a ? o : r; l.setHours(0, 0, 0, 0), l.setMonth(0, 1); let f = t?.step ?? 1; if (!f) return []; f < 0 && (f = -f, a = !a); let m = []; for(; +l <= c;)m.push((0, xa.toDate)(l)), l.setFullYear(l.getFullYear() + f); return a ? m.reverse() : m; } }); var dv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((lv)=>{ "use strict"; lv.endOfDecade = j1; var Y1 = L(); function j1(e) { let t = (0, Y1.toDate)(e), r = t.getFullYear(), o = 9 + Math.floor(r / 10) * 10; return t.setFullYear(o, 11, 31), t.setHours(23, 59, 59, 999), t; } }); var pv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((fv)=>{ "use strict"; fv.endOfHour = L1; var F1 = L(); function L1(e) { let t = (0, F1.toDate)(e); return t.setMinutes(59, 59, 999), t; } }); var Qo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c88 = (mv)=>{ "use strict"; mv.endOfWeek = H1; var W1 = L(), A1 = _t(); function H1(e, t) { let r = (0, A1.getDefaultOptions)(), o = t?.weekStartsOn ?? t?.locale?.options?.weekStartsOn ?? r.weekStartsOn ?? r.locale?.options?.weekStartsOn ?? 0, a = (0, W1.toDate)(e), c = a.getDay(), l = (c < o ? -7 : 0) + 6 - (c - o); return a.setDate(a.getDate() + l), a.setHours(23, 59, 59, 999), a; } }); _c89 = Qo; var gv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((hv)=>{ "use strict"; hv.endOfISOWeek = B1; var Q1 = Qo(); function B1(e) { return (0, Q1.endOfWeek)(e, { weekStartsOn: 1 }); } }); var bv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((vv)=>{ "use strict"; vv.endOfISOWeekYear = z1; var V1 = fr(), K1 = zt(), $1 = Pe(); function z1(e) { let t = (0, V1.getISOWeekYear)(e), r = (0, $1.constructFrom)(e, 0); r.setFullYear(t + 1, 0, 4), r.setHours(0, 0, 0, 0); let o = (0, K1.startOfISOWeek)(r); return o.setMilliseconds(o.getMilliseconds() - 1), o; } }); var xv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((_v)=>{ "use strict"; _v.endOfMinute = X1; var U1 = L(); function X1(e) { let t = (0, U1.toDate)(e); return t.setSeconds(59, 999), t; } }); var Dv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c90 = (wv)=>{ "use strict"; wv.endOfQuarter = G1; var Z1 = L(); function G1(e) { let t = (0, Z1.toDate)(e), r = t.getMonth(), o = r - r % 3 + 3; return t.setMonth(o, 0), t.setHours(23, 59, 59, 999), t; } }); _c91 = Dv; var Mv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c92 = (Ov)=>{ "use strict"; Ov.endOfSecond = k1; var J1 = L(); function k1(e) { let t = (0, J1.toDate)(e); return t.setMilliseconds(999), t; } }); _c93 = Mv; var yv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Pv)=>{ "use strict"; Pv.endOfToday = tq; var eq = Nn(); function tq() { return (0, eq.endOfDay)(Date.now()); } }); var Sv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c94 = (Ev)=>{ "use strict"; Ev.endOfTomorrow = rq; function rq() { let e = new Date, t = e.getFullYear(), r = e.getMonth(), o = e.getDate(), a = new Date(0); return a.setFullYear(t, r, o + 1), a.setHours(23, 59, 59, 999), a; } }); _c95 = Sv; var Rv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c96 = (qv)=>{ "use strict"; qv.endOfYesterday = nq; function nq() { let e = new Date, t = e.getFullYear(), r = e.getMonth(), o = e.getDate(), a = new Date(0); return a.setFullYear(t, r, o - 1), a.setHours(23, 59, 59, 999), a; } }); _c97 = Rv; var Iv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c98 = (wa)=>{ "use strict"; wa.formatDistance = void 0; var oq = { lessThanXSeconds: { one: "less than a second", other: "less than {{count}} seconds" }, xSeconds: { one: "1 second", other: "{{count}} seconds" }, halfAMinute: "half a minute", lessThanXMinutes: { one: "less than a minute", other: "less than {{count}} minutes" }, xMinutes: { one: "1 minute", other: "{{count}} minutes" }, aboutXHours: { one: "about 1 hour", other: "about {{count}} hours" }, xHours: { one: "1 hour", other: "{{count}} hours" }, xDays: { one: "1 day", other: "{{count}} days" }, aboutXWeeks: { one: "about 1 week", other: "about {{count}} weeks" }, xWeeks: { one: "1 week", other: "{{count}} weeks" }, aboutXMonths: { one: "about 1 month", other: "about {{count}} months" }, xMonths: { one: "1 month", other: "{{count}} months" }, aboutXYears: { one: "about 1 year", other: "about {{count}} years" }, xYears: { one: "1 year", other: "{{count}} years" }, overXYears: { one: "over 1 year", other: "over {{count}} years" }, almostXYears: { one: "almost 1 year", other: "almost {{count}} years" } }, iq = (e, t, r)=>{ let o, a = oq[e]; return typeof a == "string" ? o = a : t === 1 ? o = a.one : o = a.other.replace("{{count}}", t.toString()), r?.addSuffix ? r.comparison && r.comparison > 0 ? "in " + o : o + " ago" : o; }; wa.formatDistance = iq; }); _c99 = Iv; var Cv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c100 = (Tv)=>{ "use strict"; Tv.buildFormatLongFn = aq; function aq(e) { return (t = {})=>{ let r = t.width ? String(t.width) : e.defaultWidth; return e.formats[r] || e.formats[e.defaultWidth]; }; } }); _c101 = Cv; var Nv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c102 = (Oa)=>{ "use strict"; Oa.formatLong = void 0; var Da = Cv(), sq = { full: "EEEE, MMMM do, y", long: "MMMM do, y", medium: "MMM d, y", short: "MM/dd/yyyy" }, uq = { full: "h:mm:ss a zzzz", long: "h:mm:ss a z", medium: "h:mm:ss a", short: "h:mm a" }, cq = { full: "{{date}} 'at' {{time}}", long: "{{date}} 'at' {{time}}", medium: "{{date}}, {{time}}", short: "{{date}}, {{time}}" }, I4 = Oa.formatLong = { date: (0, Da.buildFormatLongFn)({ formats: sq, defaultWidth: "full" }), time: (0, Da.buildFormatLongFn)({ formats: uq, defaultWidth: "full" }), dateTime: (0, Da.buildFormatLongFn)({ formats: cq, defaultWidth: "full" }) }; }); _c103 = Nv; var Yv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c104 = (Ma)=>{ "use strict"; Ma.formatRelative = void 0; var lq = { lastWeek: "'last' eeee 'at' p", yesterday: "'yesterday at' p", today: "'today at' p", tomorrow: "'tomorrow at' p", nextWeek: "eeee 'at' p", other: "P" }, dq = (e, t, r, o)=>lq[e]; Ma.formatRelative = dq; }); _c105 = Yv; var Fv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c106 = (jv)=>{ "use strict"; jv.buildLocalizeFn = fq; function fq(e) { return (t, r)=>{ let o = r?.context ? String(r.context) : "standalone", a; if (o === "formatting" && e.formattingValues) { let l = e.defaultFormattingWidth || e.defaultWidth, f = r?.width ? String(r.width) : l; a = e.formattingValues[f] || e.formattingValues[l]; } else { let l = e.defaultWidth, f = r?.width ? String(r.width) : e.defaultWidth; a = e.values[f] || e.values[l]; } let c = e.argumentCallback ? e.argumentCallback(t) : t; return a[c]; }; } }); _c107 = Fv; var Lv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c108 = (Pa)=>{ "use strict"; Pa.localize = void 0; var An = Fv(), pq = { narrow: [ "B", "A" ], abbreviated: [ "BC", "AD" ], wide: [ "Before Christ", "Anno Domini" ] }, mq = { narrow: [ "1", "2", "3", "4" ], abbreviated: [ "Q1", "Q2", "Q3", "Q4" ], wide: [ "1st quarter", "2nd quarter", "3rd quarter", "4th quarter" ] }, hq = { narrow: [ "J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D" ], abbreviated: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], wide: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] }, gq = { narrow: [ "S", "M", "T", "W", "T", "F", "S" ], short: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ], abbreviated: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], wide: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ] }, vq = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" } }, bq = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" } }, _q = (e, t)=>{ let r = Number(e), o = r % 100; if (o > 20 || o < 10) switch(o % 10){ case 1: return r + "st"; case 2: return r + "nd"; case 3: return r + "rd"; } return r + "th"; }, Y4 = Pa.localize = { ordinalNumber: _q, era: (0, An.buildLocalizeFn)({ values: pq, defaultWidth: "wide" }), quarter: (0, An.buildLocalizeFn)({ values: mq, defaultWidth: "wide", argumentCallback: (e)=>e - 1 }), month: (0, An.buildLocalizeFn)({ values: hq, defaultWidth: "wide" }), day: (0, An.buildLocalizeFn)({ values: gq, defaultWidth: "wide" }), dayPeriod: (0, An.buildLocalizeFn)({ values: vq, defaultWidth: "wide", formattingValues: bq, defaultFormattingWidth: "wide" }) }; }); _c109 = Lv; var Av = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c110 = (Wv)=>{ "use strict"; Wv.buildMatchFn = xq; function xq(e) { return (t, r = {})=>{ let o = r.width, a = o && e.matchPatterns[o] || e.matchPatterns[e.defaultMatchWidth], c = t.match(a); if (!c) return null; let l = c[0], f = o && e.parsePatterns[o] || e.parsePatterns[e.defaultParseWidth], m = Array.isArray(f) ? Dq(f, (x)=>x.test(l)) : wq(f, (x)=>x.test(l)), h; h = e.valueCallback ? e.valueCallback(m) : m, h = r.valueCallback ? r.valueCallback(h) : h; let g = t.slice(l.length); return { value: h, rest: g }; }; } function wq(e, t) { for(let r in e)if (Object.prototype.hasOwnProperty.call(e, r) && t(e[r])) return r; } function Dq(e, t) { for(let r = 0; r < e.length; r++)if (t(e[r])) return r; } }); _c111 = Av; var Qv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c112 = (Hv)=>{ "use strict"; Hv.buildMatchPatternFn = Oq; function Oq(e) { return (t, r = {})=>{ let o = t.match(e.matchPattern); if (!o) return null; let a = o[0], c = t.match(e.parsePattern); if (!c) return null; let l = e.valueCallback ? e.valueCallback(c[0]) : c[0]; l = r.valueCallback ? r.valueCallback(l) : l; let f = t.slice(a.length); return { value: l, rest: f }; }; } }); _c113 = Qv; var Bv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c114 = (ya)=>{ "use strict"; ya.match = void 0; var Hn = Av(), Mq = Qv(), Pq = /^(\d+)(th|st|nd|rd)?/i, yq = /\d+/i, Eq = { narrow: /^(b|a)/i, abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, wide: /^(before christ|before common era|anno domini|common era)/i }, Sq = { any: [ /^b/i, /^(a|c)/i ] }, qq = { narrow: /^[1234]/i, abbreviated: /^q[1234]/i, wide: /^[1234](th|st|nd|rd)? quarter/i }, Rq = { any: [ /1/i, /2/i, /3/i, /4/i ] }, Iq = { narrow: /^[jfmasond]/i, abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i }, Tq = { narrow: [ /^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i ], any: [ /^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i ] }, Cq = { narrow: /^[smtwf]/i, short: /^(su|mo|tu|we|th|fr|sa)/i, abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i }, Nq = { narrow: [ /^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i ], any: [ /^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i ] }, Yq = { narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i }, jq = { any: { am: /^a/i, pm: /^p/i, midnight: /^mi/i, noon: /^no/i, morning: /morning/i, afternoon: /afternoon/i, evening: /evening/i, night: /night/i } }, W4 = ya.match = { ordinalNumber: (0, Mq.buildMatchPatternFn)({ matchPattern: Pq, parsePattern: yq, valueCallback: (e)=>parseInt(e, 10) }), era: (0, Hn.buildMatchFn)({ matchPatterns: Eq, defaultMatchWidth: "wide", parsePatterns: Sq, defaultParseWidth: "any" }), quarter: (0, Hn.buildMatchFn)({ matchPatterns: qq, defaultMatchWidth: "wide", parsePatterns: Rq, defaultParseWidth: "any", valueCallback: (e)=>e + 1 }), month: (0, Hn.buildMatchFn)({ matchPatterns: Iq, defaultMatchWidth: "wide", parsePatterns: Tq, defaultParseWidth: "any" }), day: (0, Hn.buildMatchFn)({ matchPatterns: Cq, defaultMatchWidth: "wide", parsePatterns: Nq, defaultParseWidth: "any" }), dayPeriod: (0, Hn.buildMatchFn)({ matchPatterns: Yq, defaultMatchWidth: "any", parsePatterns: jq, defaultParseWidth: "any" }) }; }); _c115 = Bv; var Vv = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c116 = (Ea)=>{ "use strict"; Ea.enUS = void 0; var Fq = Iv(), Lq = Nv(), Wq = Yv(), Aq = Lv(), Hq = Bv(), H4 = Ea.enUS = { code: "en-US", formatDistance: Fq.formatDistance, formatLong: Lq.formatLong, formatRelative: Wq.formatRelative, localize: Aq.localize, match: Hq.match, options: { weekStartsOn: 0, firstWeekContainsDate: 1 } }; }); _c117 = Vv; var Tr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c118 = (Kv)=>{ "use strict"; Object.defineProperty(Kv, "defaultLocale", { enumerable: !0, get: function() { return Qq.enUS; } }); var Qq = Vv(); }); _c119 = Tr; var Sa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c120 = ($v)=>{ "use strict"; $v.getDayOfYear = $q; var Bq = Ut(), Vq = Wn(), Kq = L(); function $q(e) { let t = (0, Kq.toDate)(e); return (0, Bq.differenceInCalendarDays)(t, (0, Vq.startOfYear)(t)) + 1; } }); _c121 = Sa; var Qn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c122 = (zv)=>{ "use strict"; zv.getISOWeek = Gq; var zq = ve(), Uq = zt(), Xq = tn(), Zq = L(); function Gq(e) { let t = (0, Zq.toDate)(e), r = +(0, Uq.startOfISOWeek)(t) - +(0, Xq.startOfISOWeekYear)(t); return Math.round(r / zq.millisecondsInWeek) + 1; } }); _c123 = Qn; var Bn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c124 = (Zv)=>{ "use strict"; Zv.getWeekYear = eR; var Uv = Pe(), Xv = Ct(), Jq = L(), kq = _t(); function eR(e, t) { let r = (0, Jq.toDate)(e), o = r.getFullYear(), a = (0, kq.getDefaultOptions)(), c = t?.firstWeekContainsDate ?? t?.locale?.options?.firstWeekContainsDate ?? a.firstWeekContainsDate ?? a.locale?.options?.firstWeekContainsDate ?? 1, l = (0, Uv.constructFrom)(e, 0); l.setFullYear(o + 1, 0, c), l.setHours(0, 0, 0, 0); let f = (0, Xv.startOfWeek)(l, t), m = (0, Uv.constructFrom)(e, 0); m.setFullYear(o, 0, c), m.setHours(0, 0, 0, 0); let h = (0, Xv.startOfWeek)(m, t); return r.getTime() >= f.getTime() ? o + 1 : r.getTime() >= h.getTime() ? o : o - 1; } }); _c125 = Bn; var Bo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c126 = (Gv)=>{ "use strict"; Gv.startOfWeekYear = iR; var tR = Pe(), rR = Bn(), nR = Ct(), oR = _t(); function iR(e, t) { let r = (0, oR.getDefaultOptions)(), o = t?.firstWeekContainsDate ?? t?.locale?.options?.firstWeekContainsDate ?? r.firstWeekContainsDate ?? r.locale?.options?.firstWeekContainsDate ?? 1, a = (0, rR.getWeekYear)(e, t), c = (0, tR.constructFrom)(e, 0); return c.setFullYear(a, 0, o), c.setHours(0, 0, 0, 0), (0, nR.startOfWeek)(c, t); } }); _c127 = Bo; var Vo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c128 = (Jv)=>{ "use strict"; Jv.getWeek = lR; var aR = ve(), sR = Ct(), uR = Bo(), cR = L(); function lR(e, t) { let r = (0, cR.toDate)(e), o = +(0, sR.startOfWeek)(r, t) - +(0, uR.startOfWeekYear)(r, t); return Math.round(o / aR.millisecondsInWeek) + 1; } }); _c129 = Vo; var Cr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c130 = (kv)=>{ "use strict"; kv.addLeadingZeros = dR; function dR(e, t) { let r = e < 0 ? "-" : "", o = Math.abs(e).toString().padStart(t, "0"); return r + o; } }); _c131 = Cr; var Ra = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c132 = (qa)=>{ "use strict"; qa.lightFormatters = void 0; var pr = Cr(), Z4 = qa.lightFormatters = { y (e, t) { let r = e.getFullYear(), o = r > 0 ? r : 1 - r; return (0, pr.addLeadingZeros)(t === "yy" ? o % 100 : o, t.length); }, M (e, t) { let r = e.getMonth(); return t === "M" ? String(r + 1) : (0, pr.addLeadingZeros)(r + 1, 2); }, d (e, t) { return (0, pr.addLeadingZeros)(e.getDate(), t.length); }, a (e, t) { let r = e.getHours() / 12 >= 1 ? "pm" : "am"; switch(t){ case "a": case "aa": return r.toUpperCase(); case "aaa": return r; case "aaaaa": return r[0]; case "aaaa": default: return r === "am" ? "a.m." : "p.m."; } }, h (e, t) { return (0, pr.addLeadingZeros)(e.getHours() % 12 || 12, t.length); }, H (e, t) { return (0, pr.addLeadingZeros)(e.getHours(), t.length); }, m (e, t) { return (0, pr.addLeadingZeros)(e.getMinutes(), t.length); }, s (e, t) { return (0, pr.addLeadingZeros)(e.getSeconds(), t.length); }, S (e, t) { let r = t.length, o = e.getMilliseconds(), a = Math.trunc(o * Math.pow(10, r - 3)); return (0, pr.addLeadingZeros)(a, t.length); } }; }); _c133 = Ra; var r0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Ia)=>{ "use strict"; Ia.formatters = void 0; var fR = Sa(), pR = Qn(), mR = fr(), hR = Vo(), gR = Bn(), et = Cr(), mr = Ra(), on = { am: "am", pm: "pm", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, J4 = Ia.formatters = { G: function(e, t, r) { let o = e.getFullYear() > 0 ? 1 : 0; switch(t){ case "G": case "GG": case "GGG": return r.era(o, { width: "abbreviated" }); case "GGGGG": return r.era(o, { width: "narrow" }); case "GGGG": default: return r.era(o, { width: "wide" }); } }, y: function(e, t, r) { if (t === "yo") { let o = e.getFullYear(), a = o > 0 ? o : 1 - o; return r.ordinalNumber(a, { unit: "year" }); } return mr.lightFormatters.y(e, t); }, Y: function(e, t, r, o) { let a = (0, gR.getWeekYear)(e, o), c = a > 0 ? a : 1 - a; if (t === "YY") { let l = c % 100; return (0, et.addLeadingZeros)(l, 2); } return t === "Yo" ? r.ordinalNumber(c, { unit: "year" }) : (0, et.addLeadingZeros)(c, t.length); }, R: function(e, t) { let r = (0, mR.getISOWeekYear)(e); return (0, et.addLeadingZeros)(r, t.length); }, u: function(e, t) { let r = e.getFullYear(); return (0, et.addLeadingZeros)(r, t.length); }, Q: function(e, t, r) { let o = Math.ceil((e.getMonth() + 1) / 3); switch(t){ case "Q": return String(o); case "QQ": return (0, et.addLeadingZeros)(o, 2); case "Qo": return r.ordinalNumber(o, { unit: "quarter" }); case "QQQ": return r.quarter(o, { width: "abbreviated", context: "formatting" }); case "QQQQQ": return r.quarter(o, { width: "narrow", context: "formatting" }); case "QQQQ": default: return r.quarter(o, { width: "wide", context: "formatting" }); } }, q: function(e, t, r) { let o = Math.ceil((e.getMonth() + 1) / 3); switch(t){ case "q": return String(o); case "qq": return (0, et.addLeadingZeros)(o, 2); case "qo": return r.ordinalNumber(o, { unit: "quarter" }); case "qqq": return r.quarter(o, { width: "abbreviated", context: "standalone" }); case "qqqqq": return r.quarter(o, { width: "narrow", context: "standalone" }); case "qqqq": default: return r.quarter(o, { width: "wide", context: "standalone" }); } }, M: function(e, t, r) { let o = e.getMonth(); switch(t){ case "M": case "MM": return mr.lightFormatters.M(e, t); case "Mo": return r.ordinalNumber(o + 1, { unit: "month" }); case "MMM": return r.month(o, { width: "abbreviated", context: "formatting" }); case "MMMMM": return r.month(o, { width: "narrow", context: "formatting" }); case "MMMM": default: return r.month(o, { width: "wide", context: "formatting" }); } }, L: function(e, t, r) { let o = e.getMonth(); switch(t){ case "L": return String(o + 1); case "LL": return (0, et.addLeadingZeros)(o + 1, 2); case "Lo": return r.ordinalNumber(o + 1, { unit: "month" }); case "LLL": return r.month(o, { width: "abbreviated", context: "standalone" }); case "LLLLL": return r.month(o, { width: "narrow", context: "standalone" }); case "LLLL": default: return r.month(o, { width: "wide", context: "standalone" }); } }, w: function(e, t, r, o) { let a = (0, hR.getWeek)(e, o); return t === "wo" ? r.ordinalNumber(a, { unit: "week" }) : (0, et.addLeadingZeros)(a, t.length); }, I: function(e, t, r) { let o = (0, pR.getISOWeek)(e); return t === "Io" ? r.ordinalNumber(o, { unit: "week" }) : (0, et.addLeadingZeros)(o, t.length); }, d: function(e, t, r) { return t === "do" ? r.ordinalNumber(e.getDate(), { unit: "date" }) : mr.lightFormatters.d(e, t); }, D: function(e, t, r) { let o = (0, fR.getDayOfYear)(e); return t === "Do" ? r.ordinalNumber(o, { unit: "dayOfYear" }) : (0, et.addLeadingZeros)(o, t.length); }, E: function(e, t, r) { let o = e.getDay(); switch(t){ case "E": case "EE": case "EEE": return r.day(o, { width: "abbreviated", context: "formatting" }); case "EEEEE": return r.day(o, { width: "narrow", context: "formatting" }); case "EEEEEE": return r.day(o, { width: "short", context: "formatting" }); case "EEEE": default: return r.day(o, { width: "wide", context: "formatting" }); } }, e: function(e, t, r, o) { let a = e.getDay(), c = (a - o.weekStartsOn + 8) % 7 || 7; switch(t){ case "e": return String(c); case "ee": return (0, et.addLeadingZeros)(c, 2); case "eo": return r.ordinalNumber(c, { unit: "day" }); case "eee": return r.day(a, { width: "abbreviated", context: "formatting" }); case "eeeee": return r.day(a, { width: "narrow", context: "formatting" }); case "eeeeee": return r.day(a, { width: "short", context: "formatting" }); case "eeee": default: return r.day(a, { width: "wide", context: "formatting" }); } }, c: function(e, t, r, o) { let a = e.getDay(), c = (a - o.weekStartsOn + 8) % 7 || 7; switch(t){ case "c": return String(c); case "cc": return (0, et.addLeadingZeros)(c, t.length); case "co": return r.ordinalNumber(c, { unit: "day" }); case "ccc": return r.day(a, { width: "abbreviated", context: "standalone" }); case "ccccc": return r.day(a, { width: "narrow", context: "standalone" }); case "cccccc": return r.day(a, { width: "short", context: "standalone" }); case "cccc": default: return r.day(a, { width: "wide", context: "standalone" }); } }, i: function(e, t, r) { let o = e.getDay(), a = o === 0 ? 7 : o; switch(t){ case "i": return String(a); case "ii": return (0, et.addLeadingZeros)(a, t.length); case "io": return r.ordinalNumber(a, { unit: "day" }); case "iii": return r.day(o, { width: "abbreviated", context: "formatting" }); case "iiiii": return r.day(o, { width: "narrow", context: "formatting" }); case "iiiiii": return r.day(o, { width: "short", context: "formatting" }); case "iiii": default: return r.day(o, { width: "wide", context: "formatting" }); } }, a: function(e, t, r) { let a = e.getHours() / 12 >= 1 ? "pm" : "am"; switch(t){ case "a": case "aa": return r.dayPeriod(a, { width: "abbreviated", context: "formatting" }); case "aaa": return r.dayPeriod(a, { width: "abbreviated", context: "formatting" }).toLowerCase(); case "aaaaa": return r.dayPeriod(a, { width: "narrow", context: "formatting" }); case "aaaa": default: return r.dayPeriod(a, { width: "wide", context: "formatting" }); } }, b: function(e, t, r) { let o = e.getHours(), a; switch(o === 12 ? a = on.noon : o === 0 ? a = on.midnight : a = o / 12 >= 1 ? "pm" : "am", t){ case "b": case "bb": return r.dayPeriod(a, { width: "abbreviated", context: "formatting" }); case "bbb": return r.dayPeriod(a, { width: "abbreviated", context: "formatting" }).toLowerCase(); case "bbbbb": return r.dayPeriod(a, { width: "narrow", context: "formatting" }); case "bbbb": default: return r.dayPeriod(a, { width: "wide", context: "formatting" }); } }, B: function(e, t, r) { let o = e.getHours(), a; switch(o >= 17 ? a = on.evening : o >= 12 ? a = on.afternoon : o >= 4 ? a = on.morning : a = on.night, t){ case "B": case "BB": case "BBB": return r.dayPeriod(a, { width: "abbreviated", context: "formatting" }); case "BBBBB": return r.dayPeriod(a, { width: "narrow", context: "formatting" }); case "BBBB": default: return r.dayPeriod(a, { width: "wide", context: "formatting" }); } }, h: function(e, t, r) { if (t === "ho") { let o = e.getHours() % 12; return o === 0 && (o = 12), r.ordinalNumber(o, { unit: "hour" }); } return mr.lightFormatters.h(e, t); }, H: function(e, t, r) { return t === "Ho" ? r.ordinalNumber(e.getHours(), { unit: "hour" }) : mr.lightFormatters.H(e, t); }, K: function(e, t, r) { let o = e.getHours() % 12; return t === "Ko" ? r.ordinalNumber(o, { unit: "hour" }) : (0, et.addLeadingZeros)(o, t.length); }, k: function(e, t, r) { let o = e.getHours(); return o === 0 && (o = 24), t === "ko" ? r.ordinalNumber(o, { unit: "hour" }) : (0, et.addLeadingZeros)(o, t.length); }, m: function(e, t, r) { return t === "mo" ? r.ordinalNumber(e.getMinutes(), { unit: "minute" }) : mr.lightFormatters.m(e, t); }, s: function(e, t, r) { return t === "so" ? r.ordinalNumber(e.getSeconds(), { unit: "second" }) : mr.lightFormatters.s(e, t); }, S: function(e, t) { return mr.lightFormatters.S(e, t); }, X: function(e, t, r) { let o = e.getTimezoneOffset(); if (o === 0) return "Z"; switch(t){ case "X": return t0(o); case "XXXX": case "XX": return Nr(o); case "XXXXX": case "XXX": default: return Nr(o, ":"); } }, x: function(e, t, r) { let o = e.getTimezoneOffset(); switch(t){ case "x": return t0(o); case "xxxx": case "xx": return Nr(o); case "xxxxx": case "xxx": default: return Nr(o, ":"); } }, O: function(e, t, r) { let o = e.getTimezoneOffset(); switch(t){ case "O": case "OO": case "OOO": return "GMT" + e0(o, ":"); case "OOOO": default: return "GMT" + Nr(o, ":"); } }, z: function(e, t, r) { let o = e.getTimezoneOffset(); switch(t){ case "z": case "zz": case "zzz": return "GMT" + e0(o, ":"); case "zzzz": default: return "GMT" + Nr(o, ":"); } }, t: function(e, t, r) { let o = Math.trunc(e.getTime() / 1e3); return (0, et.addLeadingZeros)(o, t.length); }, T: function(e, t, r) { let o = e.getTime(); return (0, et.addLeadingZeros)(o, t.length); } }; function e0(e, t = "") { let r = e > 0 ? "-" : "+", o = Math.abs(e), a = Math.trunc(o / 60), c = o % 60; return c === 0 ? r + String(a) : r + String(a) + t + (0, et.addLeadingZeros)(c, 2); } function t0(e, t) { return e % 60 === 0 ? (e > 0 ? "-" : "+") + (0, et.addLeadingZeros)(Math.abs(e) / 60, 2) : Nr(e, t); } function Nr(e, t = "") { let r = e > 0 ? "-" : "+", o = Math.abs(e), a = (0, et.addLeadingZeros)(Math.trunc(o / 60), 2), c = (0, et.addLeadingZeros)(o % 60, 2); return r + a + t + c; } }); var Ca = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c134 = (Ta)=>{ "use strict"; Ta.longFormatters = void 0; var n0 = (e, t)=>{ switch(e){ case "P": return t.date({ width: "short" }); case "PP": return t.date({ width: "medium" }); case "PPP": return t.date({ width: "long" }); case "PPPP": default: return t.date({ width: "full" }); } }, o0 = (e, t)=>{ switch(e){ case "p": return t.time({ width: "short" }); case "pp": return t.time({ width: "medium" }); case "ppp": return t.time({ width: "long" }); case "pppp": default: return t.time({ width: "full" }); } }, vR = (e, t)=>{ let r = e.match(/(P+)(p+)?/) || [], o = r[1], a = r[2]; if (!a) return n0(e, t); let c; switch(o){ case "P": c = t.dateTime({ width: "short" }); break; case "PP": c = t.dateTime({ width: "medium" }); break; case "PPP": c = t.dateTime({ width: "long" }); break; case "PPPP": default: c = t.dateTime({ width: "full" }); break; } return c.replace("{{date}}", n0(o, t)).replace("{{time}}", o0(a, t)); }, e6 = Ta.longFormatters = { p: o0, P: vR }; }); _c135 = Ca; var Na = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c136 = (Ko)=>{ "use strict"; Ko.isProtectedDayOfYearToken = wR; Ko.isProtectedWeekYearToken = DR; Ko.warnOrThrowProtectedError = OR; var bR = /^D+$/, _R = /^Y+$/, xR = [ "D", "DD", "YY", "YYYY" ]; function wR(e) { return bR.test(e); } function DR(e) { return _R.test(e); } function OR(e, t, r) { let o = MR(e, t, r); if (console.warn(o), xR.includes(e)) throw new RangeError(o); } function MR(e, t, r) { let o = e[0] === "Y" ? "years" : "days of the month"; return `Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${o} to the input \`${r}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; } }); _c137 = Na; var $o = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Vn)=>{ "use strict"; Vn.format = Vn.formatDate = NR; Object.defineProperty(Vn, "formatters", { enumerable: !0, get: function() { return ja.formatters; } }); Object.defineProperty(Vn, "longFormatters", { enumerable: !0, get: function() { return i0.longFormatters; } }); var PR = Tr(), yR = _t(), ja = r0(), i0 = Ca(), Ya = Na(), ER = Xt(), SR = L(), qR = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g, RR = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g, IR = /^'([^]*?)'?$/, TR = /''/g, CR = /[a-zA-Z]/; function NR(e, t, r) { let o = (0, yR.getDefaultOptions)(), a = r?.locale ?? o.locale ?? PR.defaultLocale, c = r?.firstWeekContainsDate ?? r?.locale?.options?.firstWeekContainsDate ?? o.firstWeekContainsDate ?? o.locale?.options?.firstWeekContainsDate ?? 1, l = r?.weekStartsOn ?? r?.locale?.options?.weekStartsOn ?? o.weekStartsOn ?? o.locale?.options?.weekStartsOn ?? 0, f = (0, SR.toDate)(e); if (!(0, ER.isValid)(f)) throw new RangeError("Invalid time value"); let m = t.match(RR).map((g)=>{ let x = g[0]; if (x === "p" || x === "P") { let P = i0.longFormatters[x]; return P(g, a.formatLong); } return g; }).join("").match(qR).map((g)=>{ if (g === "''") return { isToken: !1, value: "'" }; let x = g[0]; if (x === "'") return { isToken: !1, value: YR(g) }; if (ja.formatters[x]) return { isToken: !0, value: g }; if (x.match(CR)) throw new RangeError("Format string contains an unescaped latin alphabet character `" + x + "`"); return { isToken: !1, value: g }; }); a.localize.preprocessor && (m = a.localize.preprocessor(f, m)); let h = { firstWeekContainsDate: c, weekStartsOn: l, locale: a }; return m.map((g)=>{ if (!g.isToken) return g.value; let x = g.value; (!r?.useAdditionalWeekYearTokens && (0, Ya.isProtectedWeekYearToken)(x) || !r?.useAdditionalDayOfYearTokens && (0, Ya.isProtectedDayOfYearToken)(x)) && (0, Ya.warnOrThrowProtectedError)(x, t, String(e)); let P = ja.formatters[x[0]]; return P(f, x, a.localize, h); }).join(""); } function YR(e) { let t = e.match(IR); return t ? t[1].replace(TR, "'") : e; } }); var Fa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c138 = (s0)=>{ "use strict"; s0.formatDistance = HR; var jR = Rr(), an = ve(), FR = jn(), LR = Fn(), zo = L(), WR = Tr(), AR = _t(), a0 = tr(); function HR(e, t, r) { let o = (0, AR.getDefaultOptions)(), a = r?.locale ?? o.locale ?? WR.defaultLocale, c = 2520, l = (0, jR.compareAsc)(e, t); if (isNaN(l)) throw new RangeError("Invalid time value"); let f = Object.assign({}, r, { addSuffix: r?.addSuffix, comparison: l }), m, h; l > 0 ? (m = (0, zo.toDate)(t), h = (0, zo.toDate)(e)) : (m = (0, zo.toDate)(e), h = (0, zo.toDate)(t)); let g = (0, LR.differenceInSeconds)(h, m), x = ((0, a0.getTimezoneOffsetInMilliseconds)(h) - (0, a0.getTimezoneOffsetInMilliseconds)(m)) / 1e3, P = Math.round((g - x) / 60), D; if (P < 2) return r?.includeSeconds ? g < 5 ? a.formatDistance("lessThanXSeconds", 5, f) : g < 10 ? a.formatDistance("lessThanXSeconds", 10, f) : g < 20 ? a.formatDistance("lessThanXSeconds", 20, f) : g < 40 ? a.formatDistance("halfAMinute", 0, f) : g < 60 ? a.formatDistance("lessThanXMinutes", 1, f) : a.formatDistance("xMinutes", 1, f) : P === 0 ? a.formatDistance("lessThanXMinutes", 1, f) : a.formatDistance("xMinutes", P, f); if (P < 45) return a.formatDistance("xMinutes", P, f); if (P < 90) return a.formatDistance("aboutXHours", 1, f); if (P < an.minutesInDay) { let y = Math.round(P / 60); return a.formatDistance("aboutXHours", y, f); } else { if (P < c) return a.formatDistance("xDays", 1, f); if (P < an.minutesInMonth) { let y = Math.round(P / an.minutesInDay); return a.formatDistance("xDays", y, f); } else if (P < an.minutesInMonth * 2) return D = Math.round(P / an.minutesInMonth), a.formatDistance("aboutXMonths", D, f); } if (D = (0, FR.differenceInMonths)(h, m), D < 12) { let y = Math.round(P / an.minutesInMonth); return a.formatDistance("xMonths", y, f); } else { let y = D % 12, O = Math.trunc(D / 12); return y < 3 ? a.formatDistance("aboutXYears", O, f) : y < 9 ? a.formatDistance("overXYears", O, f) : a.formatDistance("almostXYears", O + 1, f); } } }); _c139 = Fa; var La = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c140 = (c0)=>{ "use strict"; c0.formatDistanceStrict = $R; var QR = Tr(), BR = _t(), VR = rr(), u0 = tr(), KR = Rr(), hr = ve(), Uo = L(); function $R(e, t, r) { let o = (0, BR.getDefaultOptions)(), a = r?.locale ?? o.locale ?? QR.defaultLocale, c = (0, KR.compareAsc)(e, t); if (isNaN(c)) throw new RangeError("Invalid time value"); let l = Object.assign({}, r, { addSuffix: r?.addSuffix, comparison: c }), f, m; c > 0 ? (f = (0, Uo.toDate)(t), m = (0, Uo.toDate)(e)) : (f = (0, Uo.toDate)(e), m = (0, Uo.toDate)(t)); let h = (0, VR.getRoundingMethod)(r?.roundingMethod ?? "round"), g = m.getTime() - f.getTime(), x = g / hr.millisecondsInMinute, P = (0, u0.getTimezoneOffsetInMilliseconds)(m) - (0, u0.getTimezoneOffsetInMilliseconds)(f), D = (g - P) / hr.millisecondsInMinute, y = r?.unit, O; if (y ? O = y : x < 1 ? O = "second" : x < 60 ? O = "minute" : x < hr.minutesInDay ? O = "hour" : D < hr.minutesInMonth ? O = "day" : D < hr.minutesInYear ? O = "month" : O = "year", O === "second") { let E = h(g / 1e3); return a.formatDistance("xSeconds", E, l); } else if (O === "minute") { let E = h(x); return a.formatDistance("xMinutes", E, l); } else if (O === "hour") { let E = h(x / 60); return a.formatDistance("xHours", E, l); } else if (O === "day") { let E = h(D / hr.minutesInDay); return a.formatDistance("xDays", E, l); } else if (O === "month") { let E = h(D / hr.minutesInMonth); return E === 12 && y !== "month" ? a.formatDistance("xYears", 1, l) : a.formatDistance("xMonths", E, l); } else { let E = h(D / hr.minutesInYear); return a.formatDistance("xYears", E, l); } } }); _c141 = La; var d0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((l0)=>{ "use strict"; l0.formatDistanceToNow = XR; var zR = wt(), UR = Fa(); function XR(e, t) { return (0, UR.formatDistance)(e, (0, zR.constructNow)(e), t); } }); var p0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((f0)=>{ "use strict"; f0.formatDistanceToNowStrict = JR; var ZR = La(), GR = wt(); function JR(e, t) { return (0, ZR.formatDistanceStrict)(e, (0, GR.constructNow)(e), t); } }); var h0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((m0)=>{ "use strict"; m0.formatDuration = rI; var kR = Tr(), eI = _t(), tI = [ "years", "months", "weeks", "days", "hours", "minutes", "seconds" ]; function rI(e, t) { let r = (0, eI.getDefaultOptions)(), o = t?.locale ?? r.locale ?? kR.defaultLocale, a = t?.format ?? tI, c = t?.zero ?? !1, l = t?.delimiter ?? " "; return o.formatDistance ? a.reduce((m, h)=>{ let g = `x${h.replace(/(^.)/, (P)=>P.toUpperCase())}`, x = e[h]; return x !== void 0 && (c || e[h]) ? m.concat(o.formatDistance(g, x)) : m; }, []).join(l) : ""; } }); var v0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((g0)=>{ "use strict"; g0.formatISO = oI; var nI = L(), gr = Cr(); function oI(e, t) { let r = (0, nI.toDate)(e); if (isNaN(r.getTime())) throw new RangeError("Invalid time value"); let o = t?.format ?? "extended", a = t?.representation ?? "complete", c = "", l = "", f = o === "extended" ? "-" : "", m = o === "extended" ? ":" : ""; if (a !== "time") { let h = (0, gr.addLeadingZeros)(r.getDate(), 2), g = (0, gr.addLeadingZeros)(r.getMonth() + 1, 2); c = `${(0, gr.addLeadingZeros)(r.getFullYear(), 4)}${f}${g}${f}${h}`; } if (a !== "date") { let h = r.getTimezoneOffset(); if (h !== 0) { let O = Math.abs(h), E = (0, gr.addLeadingZeros)(Math.trunc(O / 60), 2), N = (0, gr.addLeadingZeros)(O % 60, 2); l = `${h < 0 ? "+" : "-"}${E}:${N}`; } else l = "Z"; let g = (0, gr.addLeadingZeros)(r.getHours(), 2), x = (0, gr.addLeadingZeros)(r.getMinutes(), 2), P = (0, gr.addLeadingZeros)(r.getSeconds(), 2), D = c === "" ? "" : "T", y = [ g, x, P ].join(m); c = `${c}${D}${y}${l}`; } return c; } }); var _0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((b0)=>{ "use strict"; b0.formatISO9075 = sI; var iI = Xt(), aI = L(), sn = Cr(); function sI(e, t) { let r = (0, aI.toDate)(e); if (!(0, iI.isValid)(r)) throw new RangeError("Invalid time value"); let o = t?.format ?? "extended", a = t?.representation ?? "complete", c = "", l = o === "extended" ? "-" : "", f = o === "extended" ? ":" : ""; if (a !== "time") { let m = (0, sn.addLeadingZeros)(r.getDate(), 2), h = (0, sn.addLeadingZeros)(r.getMonth() + 1, 2); c = `${(0, sn.addLeadingZeros)(r.getFullYear(), 4)}${l}${h}${l}${m}`; } if (a !== "date") { let m = (0, sn.addLeadingZeros)(r.getHours(), 2), h = (0, sn.addLeadingZeros)(r.getMinutes(), 2), g = (0, sn.addLeadingZeros)(r.getSeconds(), 2); c = `${c}${c === "" ? "" : " "}${m}${f}${h}${f}${g}`; } return c; } }); var w0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((x0)=>{ "use strict"; x0.formatISODuration = uI; function uI(e) { let { years: t = 0, months: r = 0, days: o = 0, hours: a = 0, minutes: c = 0, seconds: l = 0 } = e; return `P${t}Y${r}M${o}DT${a}H${c}M${l}S`; } }); var O0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c142 = (D0)=>{ "use strict"; D0.formatRFC3339 = dI; var cI = Xt(), lI = L(), vr = Cr(); function dI(e, t) { let r = (0, lI.toDate)(e); if (!(0, cI.isValid)(r)) throw new RangeError("Invalid time value"); let o = t?.fractionDigits ?? 0, a = (0, vr.addLeadingZeros)(r.getDate(), 2), c = (0, vr.addLeadingZeros)(r.getMonth() + 1, 2), l = r.getFullYear(), f = (0, vr.addLeadingZeros)(r.getHours(), 2), m = (0, vr.addLeadingZeros)(r.getMinutes(), 2), h = (0, vr.addLeadingZeros)(r.getSeconds(), 2), g = ""; if (o > 0) { let D = r.getMilliseconds(), y = Math.trunc(D * Math.pow(10, o - 3)); g = "." + (0, vr.addLeadingZeros)(y, o); } let x = "", P = r.getTimezoneOffset(); if (P !== 0) { let D = Math.abs(P), y = (0, vr.addLeadingZeros)(Math.trunc(D / 60), 2), O = (0, vr.addLeadingZeros)(D % 60, 2); x = `${P < 0 ? "+" : "-"}${y}:${O}`; } else x = "Z"; return `${l}-${c}-${a}T${f}:${m}:${h}${g}${x}`; } }); _c143 = O0; var P0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c144 = (M0)=>{ "use strict"; M0.formatRFC7231 = gI; var fI = Xt(), pI = L(), Xo = Cr(), mI = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], hI = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; function gI(e) { let t = (0, pI.toDate)(e); if (!(0, fI.isValid)(t)) throw new RangeError("Invalid time value"); let r = mI[t.getUTCDay()], o = (0, Xo.addLeadingZeros)(t.getUTCDate(), 2), a = hI[t.getUTCMonth()], c = t.getUTCFullYear(), l = (0, Xo.addLeadingZeros)(t.getUTCHours(), 2), f = (0, Xo.addLeadingZeros)(t.getUTCMinutes(), 2), m = (0, Xo.addLeadingZeros)(t.getUTCSeconds(), 2); return `${r}, ${o} ${a} ${c} ${l}:${f}:${m} GMT`; } }); _c145 = P0; var S0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c146 = (E0)=>{ "use strict"; E0.formatRelative = wI; var vI = Ut(), bI = $o(), y0 = L(), _I = Tr(), xI = _t(); function wI(e, t, r) { let o = (0, y0.toDate)(e), a = (0, y0.toDate)(t), c = (0, xI.getDefaultOptions)(), l = r?.locale ?? c.locale ?? _I.defaultLocale, f = r?.weekStartsOn ?? r?.locale?.options?.weekStartsOn ?? c.weekStartsOn ?? c.locale?.options?.weekStartsOn ?? 0, m = (0, vI.differenceInCalendarDays)(o, a); if (isNaN(m)) throw new RangeError("Invalid time value"); let h; m < -6 ? h = "other" : m < -1 ? h = "lastWeek" : m < 0 ? h = "yesterday" : m < 1 ? h = "today" : m < 2 ? h = "tomorrow" : m < 7 ? h = "nextWeek" : h = "other"; let g = l.formatRelative(h, o, a, { locale: l, weekStartsOn: f }); return (0, bI.format)(o, g, { locale: l, weekStartsOn: f }); } }); _c147 = S0; var R0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c148 = (q0)=>{ "use strict"; q0.fromUnixTime = OI; var DI = L(); function OI(e) { return (0, DI.toDate)(e * 1e3); } }); _c149 = R0; var Zo = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c150 = (I0)=>{ "use strict"; I0.getDate = PI; var MI = L(); function PI(e) { return (0, MI.toDate)(e).getDate(); } }); _c151 = Zo; var un = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((T0)=>{ "use strict"; T0.getDay = EI; var yI = L(); function EI(e) { return (0, yI.toDate)(e).getDay(); } }); var Wa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c152 = (C0)=>{ "use strict"; C0.getDaysInMonth = RI; var SI = L(), qI = Pe(); function RI(e) { let t = (0, SI.toDate)(e), r = t.getFullYear(), o = t.getMonth(), a = (0, qI.constructFrom)(e, 0); return a.setFullYear(r, o + 1, 0), a.setHours(0, 0, 0, 0), a.getDate(); } }); _c153 = Wa; var Aa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c154 = (N0)=>{ "use strict"; N0.isLeapYear = TI; var II = L(); function TI(e) { let r = (0, II.toDate)(e).getFullYear(); return r % 400 === 0 || r % 4 === 0 && r % 100 !== 0; } }); _c155 = Aa; var j0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Y0)=>{ "use strict"; Y0.getDaysInYear = YI; var CI = Aa(), NI = L(); function YI(e) { let t = (0, NI.toDate)(e); return String(new Date(t)) === "Invalid Date" ? NaN : (0, CI.isLeapYear)(t) ? 366 : 365; } }); var L0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c156 = (F0)=>{ "use strict"; F0.getDecade = FI; var jI = L(); function FI(e) { let r = (0, jI.toDate)(e).getFullYear(); return Math.floor(r / 10) * 10; } }); _c157 = L0; var Ha = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c158 = (W0)=>{ "use strict"; W0.getDefaultOptions = WI; var LI = _t(); function WI() { return Object.assign({}, (0, LI.getDefaultOptions)()); } }); _c159 = Ha; var Qa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c160 = (A0)=>{ "use strict"; A0.getHours = HI; var AI = L(); function HI(e) { return (0, AI.toDate)(e).getHours(); } }); _c161 = Qa; var Ba = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c162 = (H0)=>{ "use strict"; H0.getISODay = BI; var QI = L(); function BI(e) { let r = (0, QI.toDate)(e).getDay(); return r === 0 && (r = 7), r; } }); _c163 = Ba; var V0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c164 = (B0)=>{ "use strict"; B0.getISOWeeksInYear = $I; var VI = rn(), KI = ve(), Q0 = tn(); function $I(e) { let t = (0, Q0.startOfISOWeekYear)(e), o = +(0, Q0.startOfISOWeekYear)((0, VI.addWeeks)(t, 60)) - +t; return Math.round(o / KI.millisecondsInWeek); } }); _c165 = V0; var $0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((K0)=>{ "use strict"; K0.getMilliseconds = UI; var zI = L(); function UI(e) { return (0, zI.toDate)(e).getMilliseconds(); } }); var Va = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c166 = (z0)=>{ "use strict"; z0.getMinutes = ZI; var XI = L(); function ZI(e) { return (0, XI.toDate)(e).getMinutes(); } }); _c167 = Va; var Ka = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c168 = (U0)=>{ "use strict"; U0.getMonth = JI; var GI = L(); function JI(e) { return (0, GI.toDate)(e).getMonth(); } }); _c169 = Ka; var G0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c170 = (Z0)=>{ "use strict"; Z0.getOverlappingDaysInIntervals = eT; var X0 = tr(), kI = ve(), Go = L(); function eT(e, t) { let [r, o] = [ +(0, Go.toDate)(e.start), +(0, Go.toDate)(e.end) ].sort((x, P)=>x - P), [a, c] = [ +(0, Go.toDate)(t.start), +(0, Go.toDate)(t.end) ].sort((x, P)=>x - P); if (!(r < c && a < o)) return 0; let f = a < r ? r : a, m = f - (0, X0.getTimezoneOffsetInMilliseconds)(f), h = c > o ? o : c, g = h - (0, X0.getTimezoneOffsetInMilliseconds)(h); return Math.ceil((g - m) / kI.millisecondsInDay); } }); _c171 = G0; var $a = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((J0)=>{ "use strict"; J0.getSeconds = rT; var tT = L(); function rT(e) { return (0, tT.toDate)(e).getSeconds(); } }); var za = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((k0)=>{ "use strict"; k0.getTime = oT; var nT = L(); function oT(e) { return (0, nT.toDate)(e).getTime(); } }); var tb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((eb)=>{ "use strict"; eb.getUnixTime = aT; var iT = L(); function aT(e) { return Math.trunc(+(0, iT.toDate)(e) / 1e3); } }); var nb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((rb)=>{ "use strict"; rb.getWeekOfMonth = dT; var sT = Zo(), uT = un(), cT = nn(), lT = _t(); function dT(e, t) { let r = (0, lT.getDefaultOptions)(), o = t?.weekStartsOn ?? t?.locale?.options?.weekStartsOn ?? r.weekStartsOn ?? r.locale?.options?.weekStartsOn ?? 0, a = (0, sT.getDate)(e); if (isNaN(a)) return NaN; let c = (0, uT.getDay)((0, cT.startOfMonth)(e)), l = o - c; l <= 0 && (l += 7); let f = a - l; return Math.ceil(f / 7) + 1; } }); var Ua = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c172 = (ob)=>{ "use strict"; ob.lastDayOfMonth = pT; var fT = L(); function pT(e) { let t = (0, fT.toDate)(e), r = t.getMonth(); return t.setFullYear(t.getFullYear(), r + 1, 0), t.setHours(0, 0, 0, 0), t; } }); _c173 = Ua; var ab = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ib)=>{ "use strict"; ib.getWeeksInMonth = vT; var mT = Co(), hT = Ua(), gT = nn(); function vT(e, t) { return (0, mT.differenceInCalendarWeeks)((0, hT.lastDayOfMonth)(e), (0, gT.startOfMonth)(e), t) + 1; } }); var Xa = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c174 = (sb)=>{ "use strict"; sb.getYear = _T; var bT = L(); function _T(e) { return (0, bT.toDate)(e).getFullYear(); } }); _c175 = Xa; var cb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ub)=>{ "use strict"; ub.hoursToMilliseconds = wT; var xT = ve(); function wT(e) { return Math.trunc(e * xT.millisecondsInHour); } }); var db = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((lb)=>{ "use strict"; lb.hoursToMinutes = OT; var DT = ve(); function OT(e) { return Math.trunc(e * DT.minutesInHour); } }); var pb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((fb)=>{ "use strict"; fb.hoursToSeconds = PT; var MT = ve(); function PT(e) { return Math.trunc(e * MT.secondsInHour); } }); var gb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((hb)=>{ "use strict"; hb.interval = yT; var mb = L(); function yT(e, t, r) { let o = (0, mb.toDate)(e); if (isNaN(+o)) throw new TypeError("Start date is invalid"); let a = (0, mb.toDate)(t); if (isNaN(+a)) throw new TypeError("End date is invalid"); if (r?.assertPositive && +o > +a) throw new TypeError("End date must be after start date"); return { start: o, end: a }; } }); var _b = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((bb)=>{ "use strict"; bb.intervalToDuration = CT; var Kn = ki(), ET = No(), ST = Yo(), qT = jo(), RT = jn(), IT = Fn(), TT = fa(), vb = L(); function CT(e) { let t = (0, vb.toDate)(e.start), r = (0, vb.toDate)(e.end), o = {}, a = (0, TT.differenceInYears)(r, t); a && (o.years = a); let c = (0, Kn.add)(t, { years: o.years }), l = (0, RT.differenceInMonths)(r, c); l && (o.months = l); let f = (0, Kn.add)(c, { months: o.months }), m = (0, ET.differenceInDays)(r, f); m && (o.days = m); let h = (0, Kn.add)(f, { days: o.days }), g = (0, ST.differenceInHours)(r, h); g && (o.hours = g); let x = (0, Kn.add)(h, { hours: o.hours }), P = (0, qT.differenceInMinutes)(r, x); P && (o.minutes = P); let D = (0, Kn.add)(x, { minutes: o.minutes }), y = (0, IT.differenceInSeconds)(r, D); return y && (o.seconds = y), o; } }); var wb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((xb)=>{ "use strict"; xb.intlFormat = YT; var NT = L(); function YT(e, t, r) { let o; return jT(t) ? o = t : r = t, new Intl.DateTimeFormat(r?.locale, o).format((0, NT.toDate)(e)); } function jT(e) { return e !== void 0 && !("locale" in e); } }); var Sb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c176 = (Eb)=>{ "use strict"; Eb.intlFormatDistance = FT; var Yr = ve(), Za = Ut(), Db = In(), Ga = To(), Ob = Co(), Ja = Tn(), Mb = Yo(), Pb = jo(), ka = Fn(), yb = L(); function FT(e, t, r) { let o = 0, a, c = (0, yb.toDate)(e), l = (0, yb.toDate)(t); if (r?.unit) a = r?.unit, a === "second" ? o = (0, ka.differenceInSeconds)(c, l) : a === "minute" ? o = (0, Pb.differenceInMinutes)(c, l) : a === "hour" ? o = (0, Mb.differenceInHours)(c, l) : a === "day" ? o = (0, Za.differenceInCalendarDays)(c, l) : a === "week" ? o = (0, Ob.differenceInCalendarWeeks)(c, l) : a === "month" ? o = (0, Db.differenceInCalendarMonths)(c, l) : a === "quarter" ? o = (0, Ga.differenceInCalendarQuarters)(c, l) : a === "year" && (o = (0, Ja.differenceInCalendarYears)(c, l)); else { let m = (0, ka.differenceInSeconds)(c, l); Math.abs(m) < Yr.secondsInMinute ? (o = (0, ka.differenceInSeconds)(c, l), a = "second") : Math.abs(m) < Yr.secondsInHour ? (o = (0, Pb.differenceInMinutes)(c, l), a = "minute") : Math.abs(m) < Yr.secondsInDay && Math.abs((0, Za.differenceInCalendarDays)(c, l)) < 1 ? (o = (0, Mb.differenceInHours)(c, l), a = "hour") : Math.abs(m) < Yr.secondsInWeek && (o = (0, Za.differenceInCalendarDays)(c, l)) && Math.abs(o) < 7 ? a = "day" : Math.abs(m) < Yr.secondsInMonth ? (o = (0, Ob.differenceInCalendarWeeks)(c, l), a = "week") : Math.abs(m) < Yr.secondsInQuarter ? (o = (0, Db.differenceInCalendarMonths)(c, l), a = "month") : Math.abs(m) < Yr.secondsInYear && (0, Ga.differenceInCalendarQuarters)(c, l) < 4 ? (o = (0, Ga.differenceInCalendarQuarters)(c, l), a = "quarter") : (o = (0, Ja.differenceInCalendarYears)(c, l), a = "year"); } return new Intl.RelativeTimeFormat(r?.locale, { localeMatcher: r?.localeMatcher, numeric: r?.numeric || "auto", style: r?.style }).format(o, a); } }); _c177 = Sb; var es = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Rb)=>{ "use strict"; Rb.isAfter = LT; var qb = L(); function LT(e, t) { let r = (0, qb.toDate)(e), o = (0, qb.toDate)(t); return r.getTime() > o.getTime(); } }); var ts = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Tb)=>{ "use strict"; Tb.isBefore = WT; var Ib = L(); function WT(e, t) { let r = (0, Ib.toDate)(e), o = (0, Ib.toDate)(t); return +r < +o; } }); var rs = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Nb)=>{ "use strict"; Nb.isEqual = AT; var Cb = L(); function AT(e, t) { let r = (0, Cb.toDate)(e), o = (0, Cb.toDate)(t); return +r == +o; } }); var jb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Yb)=>{ "use strict"; Yb.isExists = HT; function HT(e, t, r) { let o = new Date(e, t, r); return o.getFullYear() === e && o.getMonth() === t && o.getDate() === r; } }); var Lb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c178 = (Fb)=>{ "use strict"; Fb.isFirstDayOfMonth = BT; var QT = L(); function BT(e) { return (0, QT.toDate)(e).getDate() === 1; } }); _c179 = Lb; var Ab = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c180 = (Wb)=>{ "use strict"; Wb.isFriday = KT; var VT = L(); function KT(e) { return (0, VT.toDate)(e).getDay() === 5; } }); _c181 = Ab; var Qb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c182 = (Hb)=>{ "use strict"; Hb.isFuture = zT; var $T = L(); function zT(e) { return +(0, $T.toDate)(e) > Date.now(); } }); _c183 = Qb; var ns = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Bb)=>{ "use strict"; Bb.transpose = XT; var UT = Pe(); function XT(e, t) { let r = t instanceof Date ? (0, UT.constructFrom)(t, 0) : new t(0); return r.setFullYear(e.getFullYear(), e.getMonth(), e.getDate()), r.setHours(e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()), r; } }); var as = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((jr)=>{ "use strict"; jr.ValueSetter = jr.Setter = jr.DateToSystemTimezoneSetter = void 0; var ZT = ns(), GT = Pe(), JT = 10, $n = class { validate(t, r) { return !0; } constructor(){ this.subPriority = 0; } }; jr.Setter = $n; var os = class extends $n { constructor(t, r, o, a, c){ super(), this.value = t, this.validateValue = r, this.setValue = o, this.priority = a, c && (this.subPriority = c); } validate(t, r) { return this.validateValue(t, this.value, r); } set(t, r, o) { return this.setValue(t, r, this.value, o); } }; jr.ValueSetter = os; var is = class extends $n { set(t, r) { return r.timestampIsSet ? t : (0, GT.constructFrom)(t, (0, ZT.transpose)(t, Date)); } constructor(...args){ super(...args), this.priority = JT, this.subPriority = -1; } }; jr.DateToSystemTimezoneSetter = is; }); var Ee = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c184 = (us)=>{ "use strict"; us.Parser = void 0; var kT = as(), ss = class { run(t, r, o, a) { let c = this.parse(t, r, o, a); return c ? { setter: new kT.ValueSetter(c.value, this.validate, this.set, this.priority, this.subPriority), rest: c.rest } : null; } validate(t, r, o) { return !0; } }; us.Parser = ss; }); _c185 = Ee; var Vb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c186 = (ls)=>{ "use strict"; ls.EraParser = void 0; var eC = Ee(), cs = class extends eC.Parser { parse(t, r, o) { switch(r){ case "G": case "GG": case "GGG": return o.era(t, { width: "abbreviated" }) || o.era(t, { width: "narrow" }); case "GGGGG": return o.era(t, { width: "narrow" }); case "GGGG": default: return o.era(t, { width: "wide" }) || o.era(t, { width: "abbreviated" }) || o.era(t, { width: "narrow" }); } } set(t, r, o) { return r.era = o, t.setFullYear(o, 0, 1), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 140, this.incompatibleTokens = [ "R", "u", "t", "T" ]; } }; ls.EraParser = cs; }); _c187 = Vb; var xt = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((zn)=>{ "use strict"; zn.timezonePatterns = zn.numericPatterns = void 0; var tQ = zn.numericPatterns = { month: /^(1[0-2]|0?\d)/, date: /^(3[0-1]|[0-2]?\d)/, dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, week: /^(5[0-3]|[0-4]?\d)/, hour23h: /^(2[0-3]|[0-1]?\d)/, hour24h: /^(2[0-4]|[0-1]?\d)/, hour11h: /^(1[0-1]|0?\d)/, hour12h: /^(1[0-2]|0?\d)/, minute: /^[0-5]?\d/, second: /^[0-5]?\d/, singleDigit: /^\d/, twoDigits: /^\d{1,2}/, threeDigits: /^\d{1,3}/, fourDigits: /^\d{1,4}/, anyDigitsSigned: /^-?\d+/, singleDigitSigned: /^-?\d/, twoDigitsSigned: /^-?\d{1,2}/, threeDigitsSigned: /^-?\d{1,3}/, fourDigitsSigned: /^-?\d{1,4}/ }, rQ = zn.timezonePatterns = { basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/, basic: /^([+-])(\d{2})(\d{2})|Z/, basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/, extended: /^([+-])(\d{2}):(\d{2})|Z/, extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/ }; }); var Se = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c188 = (Zt)=>{ "use strict"; Zt.dayPeriodEnumToHours = aC; Zt.isLeapYearIndex = uC; Zt.mapValue = tC; Zt.normalizeTwoDigitYear = sC; Zt.parseAnyDigitsSigned = nC; Zt.parseNDigits = oC; Zt.parseNDigitsSigned = iC; Zt.parseNumericPattern = Nt; Zt.parseTimezonePattern = rC; var ds = ve(), nr = xt(); function tC(e, t) { return e && { value: t(e.value), rest: e.rest }; } function Nt(e, t) { let r = t.match(e); return r ? { value: parseInt(r[0], 10), rest: t.slice(r[0].length) } : null; } function rC(e, t) { let r = t.match(e); if (!r) return null; if (r[0] === "Z") return { value: 0, rest: t.slice(1) }; let o = r[1] === "+" ? 1 : -1, a = r[2] ? parseInt(r[2], 10) : 0, c = r[3] ? parseInt(r[3], 10) : 0, l = r[5] ? parseInt(r[5], 10) : 0; return { value: o * (a * ds.millisecondsInHour + c * ds.millisecondsInMinute + l * ds.millisecondsInSecond), rest: t.slice(r[0].length) }; } function nC(e) { return Nt(nr.numericPatterns.anyDigitsSigned, e); } function oC(e, t) { switch(e){ case 1: return Nt(nr.numericPatterns.singleDigit, t); case 2: return Nt(nr.numericPatterns.twoDigits, t); case 3: return Nt(nr.numericPatterns.threeDigits, t); case 4: return Nt(nr.numericPatterns.fourDigits, t); default: return Nt(new RegExp("^\\d{1," + e + "}"), t); } } function iC(e, t) { switch(e){ case 1: return Nt(nr.numericPatterns.singleDigitSigned, t); case 2: return Nt(nr.numericPatterns.twoDigitsSigned, t); case 3: return Nt(nr.numericPatterns.threeDigitsSigned, t); case 4: return Nt(nr.numericPatterns.fourDigitsSigned, t); default: return Nt(new RegExp("^-?\\d{1," + e + "}"), t); } } function aC(e) { switch(e){ case "morning": return 4; case "evening": return 17; case "pm": case "noon": case "afternoon": return 12; case "am": case "midnight": case "night": default: return 0; } } function sC(e, t) { let r = t > 0, o = r ? t : 1 - t, a; if (o <= 50) a = e || 100; else { let c = o + 50, l = Math.trunc(c / 100) * 100, f = e >= c % 100; a = e + l - (f ? 100 : 0); } return r ? a : 1 - a; } function uC(e) { return e % 400 === 0 || e % 4 === 0 && e % 100 !== 0; } }); _c189 = Se; var Kb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c190 = (ps)=>{ "use strict"; ps.YearParser = void 0; var cC = Ee(), cn = Se(), fs = class extends cC.Parser { parse(t, r, o) { let a = (c)=>({ year: c, isTwoDigitYear: r === "yy" }); switch(r){ case "y": return (0, cn.mapValue)((0, cn.parseNDigits)(4, t), a); case "yo": return (0, cn.mapValue)(o.ordinalNumber(t, { unit: "year" }), a); default: return (0, cn.mapValue)((0, cn.parseNDigits)(r.length, t), a); } } validate(t, r) { return r.isTwoDigitYear || r.year > 0; } set(t, r, o) { let a = t.getFullYear(); if (o.isTwoDigitYear) { let l = (0, cn.normalizeTwoDigitYear)(o.year, a); return t.setFullYear(l, 0, 1), t.setHours(0, 0, 0, 0), t; } let c = !("era" in r) || r.era === 1 ? o.year : 1 - o.year; return t.setFullYear(c, 0, 1), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 130, this.incompatibleTokens = [ "Y", "R", "u", "w", "I", "i", "e", "c", "t", "T" ]; } }; ps.YearParser = fs; }); _c191 = Kb; var zb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((hs)=>{ "use strict"; hs.LocalWeekYearParser = void 0; var lC = Bn(), $b = Ct(), dC = Ee(), ln = Se(), ms = class extends dC.Parser { parse(t, r, o) { let a = (c)=>({ year: c, isTwoDigitYear: r === "YY" }); switch(r){ case "Y": return (0, ln.mapValue)((0, ln.parseNDigits)(4, t), a); case "Yo": return (0, ln.mapValue)(o.ordinalNumber(t, { unit: "year" }), a); default: return (0, ln.mapValue)((0, ln.parseNDigits)(r.length, t), a); } } validate(t, r) { return r.isTwoDigitYear || r.year > 0; } set(t, r, o, a) { let c = (0, lC.getWeekYear)(t, a); if (o.isTwoDigitYear) { let f = (0, ln.normalizeTwoDigitYear)(o.year, c); return t.setFullYear(f, 0, a.firstWeekContainsDate), t.setHours(0, 0, 0, 0), (0, $b.startOfWeek)(t, a); } let l = !("era" in r) || r.era === 1 ? o.year : 1 - o.year; return t.setFullYear(l, 0, a.firstWeekContainsDate), t.setHours(0, 0, 0, 0), (0, $b.startOfWeek)(t, a); } constructor(...args){ super(...args), this.priority = 130, this.incompatibleTokens = [ "y", "R", "u", "Q", "q", "M", "L", "I", "d", "D", "i", "t", "T" ]; } }; hs.LocalWeekYearParser = ms; }); var Xb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c192 = (vs)=>{ "use strict"; vs.ISOWeekYearParser = void 0; var fC = zt(), pC = Pe(), mC = Ee(), Ub = Se(), gs = class extends mC.Parser { parse(t, r) { return r === "R" ? (0, Ub.parseNDigitsSigned)(4, t) : (0, Ub.parseNDigitsSigned)(r.length, t); } set(t, r, o) { let a = (0, pC.constructFrom)(t, 0); return a.setFullYear(o, 0, 4), a.setHours(0, 0, 0, 0), (0, fC.startOfISOWeek)(a); } constructor(...args){ super(...args), this.priority = 130, this.incompatibleTokens = [ "G", "y", "Y", "u", "Q", "q", "M", "L", "w", "d", "D", "e", "c", "t", "T" ]; } }; vs.ISOWeekYearParser = gs; }); _c193 = Xb; var Gb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c194 = (_s)=>{ "use strict"; _s.ExtendedYearParser = void 0; var hC = Ee(), Zb = Se(), bs = class extends hC.Parser { parse(t, r) { return r === "u" ? (0, Zb.parseNDigitsSigned)(4, t) : (0, Zb.parseNDigitsSigned)(r.length, t); } set(t, r, o) { return t.setFullYear(o, 0, 1), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 130, this.incompatibleTokens = [ "G", "y", "Y", "R", "w", "I", "i", "e", "c", "t", "T" ]; } }; _s.ExtendedYearParser = bs; }); _c195 = Gb; var Jb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c196 = (ws)=>{ "use strict"; ws.QuarterParser = void 0; var gC = Ee(), vC = Se(), xs = class extends gC.Parser { parse(t, r, o) { switch(r){ case "Q": case "QQ": return (0, vC.parseNDigits)(r.length, t); case "Qo": return o.ordinalNumber(t, { unit: "quarter" }); case "QQQ": return o.quarter(t, { width: "abbreviated", context: "formatting" }) || o.quarter(t, { width: "narrow", context: "formatting" }); case "QQQQQ": return o.quarter(t, { width: "narrow", context: "formatting" }); case "QQQQ": default: return o.quarter(t, { width: "wide", context: "formatting" }) || o.quarter(t, { width: "abbreviated", context: "formatting" }) || o.quarter(t, { width: "narrow", context: "formatting" }); } } validate(t, r) { return r >= 1 && r <= 4; } set(t, r, o) { return t.setMonth((o - 1) * 3, 1), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 120, this.incompatibleTokens = [ "Y", "R", "q", "M", "L", "w", "I", "d", "D", "i", "e", "c", "t", "T" ]; } }; ws.QuarterParser = xs; }); _c197 = Jb; var kb = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Os)=>{ "use strict"; Os.StandAloneQuarterParser = void 0; var bC = Ee(), _C = Se(), Ds = class extends bC.Parser { parse(t, r, o) { switch(r){ case "q": case "qq": return (0, _C.parseNDigits)(r.length, t); case "qo": return o.ordinalNumber(t, { unit: "quarter" }); case "qqq": return o.quarter(t, { width: "abbreviated", context: "standalone" }) || o.quarter(t, { width: "narrow", context: "standalone" }); case "qqqqq": return o.quarter(t, { width: "narrow", context: "standalone" }); case "qqqq": default: return o.quarter(t, { width: "wide", context: "standalone" }) || o.quarter(t, { width: "abbreviated", context: "standalone" }) || o.quarter(t, { width: "narrow", context: "standalone" }); } } validate(t, r) { return r >= 1 && r <= 4; } set(t, r, o) { return t.setMonth((o - 1) * 3, 1), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 120, this.incompatibleTokens = [ "Y", "R", "Q", "M", "L", "w", "I", "d", "D", "i", "e", "c", "t", "T" ]; } }; Os.StandAloneQuarterParser = Ds; }); var e_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Ps)=>{ "use strict"; Ps.MonthParser = void 0; var xC = xt(), wC = Ee(), Un = Se(), Ms = class extends wC.Parser { parse(t, r, o) { let a = (c)=>c - 1; switch(r){ case "M": return (0, Un.mapValue)((0, Un.parseNumericPattern)(xC.numericPatterns.month, t), a); case "MM": return (0, Un.mapValue)((0, Un.parseNDigits)(2, t), a); case "Mo": return (0, Un.mapValue)(o.ordinalNumber(t, { unit: "month" }), a); case "MMM": return o.month(t, { width: "abbreviated", context: "formatting" }) || o.month(t, { width: "narrow", context: "formatting" }); case "MMMMM": return o.month(t, { width: "narrow", context: "formatting" }); case "MMMM": default: return o.month(t, { width: "wide", context: "formatting" }) || o.month(t, { width: "abbreviated", context: "formatting" }) || o.month(t, { width: "narrow", context: "formatting" }); } } validate(t, r) { return r >= 0 && r <= 11; } set(t, r, o) { return t.setMonth(o, 1), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.incompatibleTokens = [ "Y", "R", "q", "Q", "L", "w", "I", "D", "i", "e", "c", "t", "T" ], this.priority = 110; } }; Ps.MonthParser = Ms; }); var t_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Es)=>{ "use strict"; Es.StandAloneMonthParser = void 0; var DC = xt(), OC = Ee(), Xn = Se(), ys = class extends OC.Parser { parse(t, r, o) { let a = (c)=>c - 1; switch(r){ case "L": return (0, Xn.mapValue)((0, Xn.parseNumericPattern)(DC.numericPatterns.month, t), a); case "LL": return (0, Xn.mapValue)((0, Xn.parseNDigits)(2, t), a); case "Lo": return (0, Xn.mapValue)(o.ordinalNumber(t, { unit: "month" }), a); case "LLL": return o.month(t, { width: "abbreviated", context: "standalone" }) || o.month(t, { width: "narrow", context: "standalone" }); case "LLLLL": return o.month(t, { width: "narrow", context: "standalone" }); case "LLLL": default: return o.month(t, { width: "wide", context: "standalone" }) || o.month(t, { width: "abbreviated", context: "standalone" }) || o.month(t, { width: "narrow", context: "standalone" }); } } validate(t, r) { return r >= 0 && r <= 11; } set(t, r, o) { return t.setMonth(o, 1), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 110, this.incompatibleTokens = [ "Y", "R", "q", "Q", "M", "w", "I", "D", "i", "e", "c", "t", "T" ]; } }; Es.StandAloneMonthParser = ys; }); var Ss = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c198 = (r_)=>{ "use strict"; r_.setWeek = yC; var MC = Vo(), PC = L(); function yC(e, t, r) { let o = (0, PC.toDate)(e), a = (0, MC.getWeek)(o, r) - t; return o.setDate(o.getDate() - a * 7), o; } }); _c199 = Ss; var o_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Rs)=>{ "use strict"; Rs.LocalWeekParser = void 0; var EC = Ss(), SC = Ct(), qC = xt(), RC = Ee(), n_ = Se(), qs = class extends RC.Parser { parse(t, r, o) { switch(r){ case "w": return (0, n_.parseNumericPattern)(qC.numericPatterns.week, t); case "wo": return o.ordinalNumber(t, { unit: "week" }); default: return (0, n_.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 1 && r <= 53; } set(t, r, o, a) { return (0, SC.startOfWeek)((0, EC.setWeek)(t, o, a), a); } constructor(...args){ super(...args), this.priority = 100, this.incompatibleTokens = [ "y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "i", "t", "T" ]; } }; Rs.LocalWeekParser = qs; }); var Is = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c200 = (i_)=>{ "use strict"; i_.setISOWeek = CC; var IC = Qn(), TC = L(); function CC(e, t) { let r = (0, TC.toDate)(e), o = (0, IC.getISOWeek)(r) - t; return r.setDate(r.getDate() - o * 7), r; } }); _c201 = Is; var s_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Cs)=>{ "use strict"; Cs.ISOWeekParser = void 0; var NC = Is(), YC = zt(), jC = xt(), FC = Ee(), a_ = Se(), Ts = class extends FC.Parser { parse(t, r, o) { switch(r){ case "I": return (0, a_.parseNumericPattern)(jC.numericPatterns.week, t); case "Io": return o.ordinalNumber(t, { unit: "week" }); default: return (0, a_.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 1 && r <= 53; } set(t, r, o) { return (0, YC.startOfISOWeek)((0, NC.setISOWeek)(t, o)); } constructor(...args){ super(...args), this.priority = 100, this.incompatibleTokens = [ "y", "Y", "u", "q", "Q", "M", "L", "w", "d", "D", "e", "c", "t", "T" ]; } }; Cs.ISOWeekParser = Ts; }); var u_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((js)=>{ "use strict"; js.DateParser = void 0; var LC = xt(), WC = Ee(), Ns = Se(), AC = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ], HC = [ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ], Ys = class extends WC.Parser { parse(t, r, o) { switch(r){ case "d": return (0, Ns.parseNumericPattern)(LC.numericPatterns.date, t); case "do": return o.ordinalNumber(t, { unit: "date" }); default: return (0, Ns.parseNDigits)(r.length, t); } } validate(t, r) { let o = t.getFullYear(), a = (0, Ns.isLeapYearIndex)(o), c = t.getMonth(); return a ? r >= 1 && r <= HC[c] : r >= 1 && r <= AC[c]; } set(t, r, o) { return t.setDate(o), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 90, this.subPriority = 1, this.incompatibleTokens = [ "Y", "R", "q", "Q", "w", "I", "D", "i", "e", "c", "t", "T" ]; } }; js.DateParser = Ys; }); var c_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Ws)=>{ "use strict"; Ws.DayOfYearParser = void 0; var QC = xt(), BC = Ee(), Fs = Se(), Ls = class extends BC.Parser { parse(t, r, o) { switch(r){ case "D": case "DD": return (0, Fs.parseNumericPattern)(QC.numericPatterns.dayOfYear, t); case "Do": return o.ordinalNumber(t, { unit: "date" }); default: return (0, Fs.parseNDigits)(r.length, t); } } validate(t, r) { let o = t.getFullYear(); return (0, Fs.isLeapYearIndex)(o) ? r >= 1 && r <= 366 : r >= 1 && r <= 365; } set(t, r, o) { return t.setMonth(0, o), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 90, this.subpriority = 1, this.incompatibleTokens = [ "Y", "R", "q", "Q", "M", "L", "w", "I", "d", "E", "i", "e", "c", "t", "T" ]; } }; Ws.DayOfYearParser = Ls; }); var Zn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c202 = (l_)=>{ "use strict"; l_.setDay = zC; var VC = At(), KC = L(), $C = _t(); function zC(e, t, r) { let o = (0, $C.getDefaultOptions)(), a = r?.weekStartsOn ?? r?.locale?.options?.weekStartsOn ?? o.weekStartsOn ?? o.locale?.options?.weekStartsOn ?? 0, c = (0, KC.toDate)(e), l = c.getDay(), m = (t % 7 + 7) % 7, h = 7 - a, g = t < 0 || t > 6 ? t - (l + h) % 7 : (m + h) % 7 - (l + h) % 7; return (0, VC.addDays)(c, g); } }); _c203 = Zn; var d_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Hs)=>{ "use strict"; Hs.DayParser = void 0; var UC = Zn(), XC = Ee(), As = class extends XC.Parser { parse(t, r, o) { switch(r){ case "E": case "EE": case "EEE": return o.day(t, { width: "abbreviated", context: "formatting" }) || o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }); case "EEEEE": return o.day(t, { width: "narrow", context: "formatting" }); case "EEEEEE": return o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }); case "EEEE": default: return o.day(t, { width: "wide", context: "formatting" }) || o.day(t, { width: "abbreviated", context: "formatting" }) || o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }); } } validate(t, r) { return r >= 0 && r <= 6; } set(t, r, o, a) { return t = (0, UC.setDay)(t, o, a), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 90, this.incompatibleTokens = [ "D", "i", "e", "c", "t", "T" ]; } }; Hs.DayParser = As; }); var f_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Vs)=>{ "use strict"; Vs.LocalDayParser = void 0; var ZC = Zn(), GC = Ee(), Qs = Se(), Bs = class extends GC.Parser { parse(t, r, o, a) { let c = (l)=>{ let f = Math.floor((l - 1) / 7) * 7; return (l + a.weekStartsOn + 6) % 7 + f; }; switch(r){ case "e": case "ee": return (0, Qs.mapValue)((0, Qs.parseNDigits)(r.length, t), c); case "eo": return (0, Qs.mapValue)(o.ordinalNumber(t, { unit: "day" }), c); case "eee": return o.day(t, { width: "abbreviated", context: "formatting" }) || o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }); case "eeeee": return o.day(t, { width: "narrow", context: "formatting" }); case "eeeeee": return o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }); case "eeee": default: return o.day(t, { width: "wide", context: "formatting" }) || o.day(t, { width: "abbreviated", context: "formatting" }) || o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }); } } validate(t, r) { return r >= 0 && r <= 6; } set(t, r, o, a) { return t = (0, ZC.setDay)(t, o, a), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 90, this.incompatibleTokens = [ "y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "E", "i", "c", "t", "T" ]; } }; Vs.LocalDayParser = Bs; }); var p_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((zs)=>{ "use strict"; zs.StandAloneLocalDayParser = void 0; var JC = Zn(), kC = Ee(), Ks = Se(), $s = class extends kC.Parser { parse(t, r, o, a) { let c = (l)=>{ let f = Math.floor((l - 1) / 7) * 7; return (l + a.weekStartsOn + 6) % 7 + f; }; switch(r){ case "c": case "cc": return (0, Ks.mapValue)((0, Ks.parseNDigits)(r.length, t), c); case "co": return (0, Ks.mapValue)(o.ordinalNumber(t, { unit: "day" }), c); case "ccc": return o.day(t, { width: "abbreviated", context: "standalone" }) || o.day(t, { width: "short", context: "standalone" }) || o.day(t, { width: "narrow", context: "standalone" }); case "ccccc": return o.day(t, { width: "narrow", context: "standalone" }); case "cccccc": return o.day(t, { width: "short", context: "standalone" }) || o.day(t, { width: "narrow", context: "standalone" }); case "cccc": default: return o.day(t, { width: "wide", context: "standalone" }) || o.day(t, { width: "abbreviated", context: "standalone" }) || o.day(t, { width: "short", context: "standalone" }) || o.day(t, { width: "narrow", context: "standalone" }); } } validate(t, r) { return r >= 0 && r <= 6; } set(t, r, o, a) { return t = (0, JC.setDay)(t, o, a), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 90, this.incompatibleTokens = [ "y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "E", "i", "e", "t", "T" ]; } }; zs.StandAloneLocalDayParser = $s; }); var Us = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c204 = (m_)=>{ "use strict"; m_.setISODay = nN; var eN = At(), tN = Ba(), rN = L(); function nN(e, t) { let r = (0, rN.toDate)(e), o = (0, tN.getISODay)(r), a = t - o; return (0, eN.addDays)(r, a); } }); _c205 = Us; var h_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Zs)=>{ "use strict"; Zs.ISODayParser = void 0; var oN = Us(), iN = Ee(), Gn = Se(), Xs = class extends iN.Parser { parse(t, r, o) { let a = (c)=>c === 0 ? 7 : c; switch(r){ case "i": case "ii": return (0, Gn.parseNDigits)(r.length, t); case "io": return o.ordinalNumber(t, { unit: "day" }); case "iii": return (0, Gn.mapValue)(o.day(t, { width: "abbreviated", context: "formatting" }) || o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }), a); case "iiiii": return (0, Gn.mapValue)(o.day(t, { width: "narrow", context: "formatting" }), a); case "iiiiii": return (0, Gn.mapValue)(o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }), a); case "iiii": default: return (0, Gn.mapValue)(o.day(t, { width: "wide", context: "formatting" }) || o.day(t, { width: "abbreviated", context: "formatting" }) || o.day(t, { width: "short", context: "formatting" }) || o.day(t, { width: "narrow", context: "formatting" }), a); } } validate(t, r) { return r >= 1 && r <= 7; } set(t, r, o) { return t = (0, oN.setISODay)(t, o), t.setHours(0, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 90, this.incompatibleTokens = [ "y", "Y", "u", "q", "Q", "M", "L", "w", "d", "D", "E", "e", "c", "t", "T" ]; } }; Zs.ISODayParser = Xs; }); var g_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Js)=>{ "use strict"; Js.AMPMParser = void 0; var aN = Ee(), sN = Se(), Gs = class extends aN.Parser { parse(t, r, o) { switch(r){ case "a": case "aa": case "aaa": return o.dayPeriod(t, { width: "abbreviated", context: "formatting" }) || o.dayPeriod(t, { width: "narrow", context: "formatting" }); case "aaaaa": return o.dayPeriod(t, { width: "narrow", context: "formatting" }); case "aaaa": default: return o.dayPeriod(t, { width: "wide", context: "formatting" }) || o.dayPeriod(t, { width: "abbreviated", context: "formatting" }) || o.dayPeriod(t, { width: "narrow", context: "formatting" }); } } set(t, r, o) { return t.setHours((0, sN.dayPeriodEnumToHours)(o), 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 80, this.incompatibleTokens = [ "b", "B", "H", "k", "t", "T" ]; } }; Js.AMPMParser = Gs; }); var v_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((eu)=>{ "use strict"; eu.AMPMMidnightParser = void 0; var uN = Ee(), cN = Se(), ks = class extends uN.Parser { parse(t, r, o) { switch(r){ case "b": case "bb": case "bbb": return o.dayPeriod(t, { width: "abbreviated", context: "formatting" }) || o.dayPeriod(t, { width: "narrow", context: "formatting" }); case "bbbbb": return o.dayPeriod(t, { width: "narrow", context: "formatting" }); case "bbbb": default: return o.dayPeriod(t, { width: "wide", context: "formatting" }) || o.dayPeriod(t, { width: "abbreviated", context: "formatting" }) || o.dayPeriod(t, { width: "narrow", context: "formatting" }); } } set(t, r, o) { return t.setHours((0, cN.dayPeriodEnumToHours)(o), 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 80, this.incompatibleTokens = [ "a", "B", "H", "k", "t", "T" ]; } }; eu.AMPMMidnightParser = ks; }); var b_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ru)=>{ "use strict"; ru.DayPeriodParser = void 0; var lN = Ee(), dN = Se(), tu = class extends lN.Parser { parse(t, r, o) { switch(r){ case "B": case "BB": case "BBB": return o.dayPeriod(t, { width: "abbreviated", context: "formatting" }) || o.dayPeriod(t, { width: "narrow", context: "formatting" }); case "BBBBB": return o.dayPeriod(t, { width: "narrow", context: "formatting" }); case "BBBB": default: return o.dayPeriod(t, { width: "wide", context: "formatting" }) || o.dayPeriod(t, { width: "abbreviated", context: "formatting" }) || o.dayPeriod(t, { width: "narrow", context: "formatting" }); } } set(t, r, o) { return t.setHours((0, dN.dayPeriodEnumToHours)(o), 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 80, this.incompatibleTokens = [ "a", "b", "t", "T" ]; } }; ru.DayPeriodParser = tu; }); var x_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ou)=>{ "use strict"; ou.Hour1to12Parser = void 0; var fN = xt(), pN = Ee(), __ = Se(), nu = class extends pN.Parser { parse(t, r, o) { switch(r){ case "h": return (0, __.parseNumericPattern)(fN.numericPatterns.hour12h, t); case "ho": return o.ordinalNumber(t, { unit: "hour" }); default: return (0, __.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 1 && r <= 12; } set(t, r, o) { let a = t.getHours() >= 12; return a && o < 12 ? t.setHours(o + 12, 0, 0, 0) : !a && o === 12 ? t.setHours(0, 0, 0, 0) : t.setHours(o, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 70, this.incompatibleTokens = [ "H", "K", "k", "t", "T" ]; } }; ou.Hour1to12Parser = nu; }); var D_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c206 = (au)=>{ "use strict"; au.Hour0to23Parser = void 0; var mN = xt(), hN = Ee(), w_ = Se(), iu = class extends hN.Parser { parse(t, r, o) { switch(r){ case "H": return (0, w_.parseNumericPattern)(mN.numericPatterns.hour23h, t); case "Ho": return o.ordinalNumber(t, { unit: "hour" }); default: return (0, w_.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 0 && r <= 23; } set(t, r, o) { return t.setHours(o, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 70, this.incompatibleTokens = [ "a", "b", "h", "K", "k", "t", "T" ]; } }; au.Hour0to23Parser = iu; }); _c207 = D_; var M_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c208 = (uu)=>{ "use strict"; uu.Hour0To11Parser = void 0; var gN = xt(), vN = Ee(), O_ = Se(), su = class extends vN.Parser { parse(t, r, o) { switch(r){ case "K": return (0, O_.parseNumericPattern)(gN.numericPatterns.hour11h, t); case "Ko": return o.ordinalNumber(t, { unit: "hour" }); default: return (0, O_.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 0 && r <= 11; } set(t, r, o) { return t.getHours() >= 12 && o < 12 ? t.setHours(o + 12, 0, 0, 0) : t.setHours(o, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 70, this.incompatibleTokens = [ "h", "H", "k", "t", "T" ]; } }; uu.Hour0To11Parser = su; }); _c209 = M_; var y_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((lu)=>{ "use strict"; lu.Hour1To24Parser = void 0; var bN = xt(), _N = Ee(), P_ = Se(), cu = class extends _N.Parser { parse(t, r, o) { switch(r){ case "k": return (0, P_.parseNumericPattern)(bN.numericPatterns.hour24h, t); case "ko": return o.ordinalNumber(t, { unit: "hour" }); default: return (0, P_.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 1 && r <= 24; } set(t, r, o) { let a = o <= 24 ? o % 24 : o; return t.setHours(a, 0, 0, 0), t; } constructor(...args){ super(...args), this.priority = 70, this.incompatibleTokens = [ "a", "b", "h", "H", "K", "t", "T" ]; } }; lu.Hour1To24Parser = cu; }); var S_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c210 = (fu)=>{ "use strict"; fu.MinuteParser = void 0; var xN = xt(), wN = Ee(), E_ = Se(), du = class extends wN.Parser { parse(t, r, o) { switch(r){ case "m": return (0, E_.parseNumericPattern)(xN.numericPatterns.minute, t); case "mo": return o.ordinalNumber(t, { unit: "minute" }); default: return (0, E_.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 0 && r <= 59; } set(t, r, o) { return t.setMinutes(o, 0, 0), t; } constructor(...args){ super(...args), this.priority = 60, this.incompatibleTokens = [ "t", "T" ]; } }; fu.MinuteParser = du; }); _c211 = S_; var R_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c212 = (mu)=>{ "use strict"; mu.SecondParser = void 0; var DN = xt(), ON = Ee(), q_ = Se(), pu = class extends ON.Parser { parse(t, r, o) { switch(r){ case "s": return (0, q_.parseNumericPattern)(DN.numericPatterns.second, t); case "so": return o.ordinalNumber(t, { unit: "second" }); default: return (0, q_.parseNDigits)(r.length, t); } } validate(t, r) { return r >= 0 && r <= 59; } set(t, r, o) { return t.setSeconds(o, 0), t; } constructor(...args){ super(...args), this.priority = 50, this.incompatibleTokens = [ "t", "T" ]; } }; mu.SecondParser = pu; }); _c213 = R_; var T_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c214 = (gu)=>{ "use strict"; gu.FractionOfSecondParser = void 0; var MN = Ee(), I_ = Se(), hu = class extends MN.Parser { parse(t, r) { let o = (a)=>Math.trunc(a * Math.pow(10, -r.length + 3)); return (0, I_.mapValue)((0, I_.parseNDigits)(r.length, t), o); } set(t, r, o) { return t.setMilliseconds(o), t; } constructor(...args){ super(...args), this.priority = 30, this.incompatibleTokens = [ "t", "T" ]; } }; gu.FractionOfSecondParser = hu; }); _c215 = T_; var C_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c216 = (bu)=>{ "use strict"; bu.ISOTimezoneWithZParser = void 0; var PN = Pe(), yN = tr(), Jn = xt(), EN = Ee(), kn = Se(), vu = class extends EN.Parser { parse(t, r) { switch(r){ case "X": return (0, kn.parseTimezonePattern)(Jn.timezonePatterns.basicOptionalMinutes, t); case "XX": return (0, kn.parseTimezonePattern)(Jn.timezonePatterns.basic, t); case "XXXX": return (0, kn.parseTimezonePattern)(Jn.timezonePatterns.basicOptionalSeconds, t); case "XXXXX": return (0, kn.parseTimezonePattern)(Jn.timezonePatterns.extendedOptionalSeconds, t); case "XXX": default: return (0, kn.parseTimezonePattern)(Jn.timezonePatterns.extended, t); } } set(t, r, o) { return r.timestampIsSet ? t : (0, PN.constructFrom)(t, t.getTime() - (0, yN.getTimezoneOffsetInMilliseconds)(t) - o); } constructor(...args){ super(...args), this.priority = 10, this.incompatibleTokens = [ "t", "T", "x" ]; } }; bu.ISOTimezoneWithZParser = vu; }); _c217 = C_; var N_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c218 = (xu)=>{ "use strict"; xu.ISOTimezoneParser = void 0; var SN = Pe(), qN = tr(), eo = xt(), RN = Ee(), to = Se(), _u = class extends RN.Parser { parse(t, r) { switch(r){ case "x": return (0, to.parseTimezonePattern)(eo.timezonePatterns.basicOptionalMinutes, t); case "xx": return (0, to.parseTimezonePattern)(eo.timezonePatterns.basic, t); case "xxxx": return (0, to.parseTimezonePattern)(eo.timezonePatterns.basicOptionalSeconds, t); case "xxxxx": return (0, to.parseTimezonePattern)(eo.timezonePatterns.extendedOptionalSeconds, t); case "xxx": default: return (0, to.parseTimezonePattern)(eo.timezonePatterns.extended, t); } } set(t, r, o) { return r.timestampIsSet ? t : (0, SN.constructFrom)(t, t.getTime() - (0, qN.getTimezoneOffsetInMilliseconds)(t) - o); } constructor(...args){ super(...args), this.priority = 10, this.incompatibleTokens = [ "t", "T", "X" ]; } }; xu.ISOTimezoneParser = _u; }); _c219 = N_; var Y_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c220 = (Du)=>{ "use strict"; Du.TimestampSecondsParser = void 0; var IN = Pe(), TN = Ee(), CN = Se(), wu = class extends TN.Parser { parse(t) { return (0, CN.parseAnyDigitsSigned)(t); } set(t, r, o) { return [ (0, IN.constructFrom)(t, o * 1e3), { timestampIsSet: !0 } ]; } constructor(...args){ super(...args), this.priority = 40, this.incompatibleTokens = "*"; } }; Du.TimestampSecondsParser = wu; }); _c221 = Y_; var j_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Mu)=>{ "use strict"; Mu.TimestampMillisecondsParser = void 0; var NN = Pe(), YN = Ee(), jN = Se(), Ou = class extends YN.Parser { parse(t) { return (0, jN.parseAnyDigitsSigned)(t); } set(t, r, o) { return [ (0, NN.constructFrom)(t, o), { timestampIsSet: !0 } ]; } constructor(...args){ super(...args), this.priority = 20, this.incompatibleTokens = "*"; } }; Mu.TimestampMillisecondsParser = Ou; }); var F_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c222 = (Pu)=>{ "use strict"; Pu.parsers = void 0; var FN = Vb(), LN = Kb(), WN = zb(), AN = Xb(), HN = Gb(), QN = Jb(), BN = kb(), VN = e_(), KN = t_(), $N = o_(), zN = s_(), UN = u_(), XN = c_(), ZN = d_(), GN = f_(), JN = p_(), kN = h_(), eY = g_(), tY = v_(), rY = b_(), nY = x_(), oY = D_(), iY = M_(), aY = y_(), sY = S_(), uY = R_(), cY = T_(), lY = C_(), dY = N_(), fY = Y_(), pY = j_(), WQ = Pu.parsers = { G: new FN.EraParser, y: new LN.YearParser, Y: new WN.LocalWeekYearParser, R: new AN.ISOWeekYearParser, u: new HN.ExtendedYearParser, Q: new QN.QuarterParser, q: new BN.StandAloneQuarterParser, M: new VN.MonthParser, L: new KN.StandAloneMonthParser, w: new $N.LocalWeekParser, I: new zN.ISOWeekParser, d: new UN.DateParser, D: new XN.DayOfYearParser, E: new ZN.DayParser, e: new GN.LocalDayParser, c: new JN.StandAloneLocalDayParser, i: new kN.ISODayParser, a: new eY.AMPMParser, b: new tY.AMPMMidnightParser, B: new rY.DayPeriodParser, h: new nY.Hour1to12Parser, H: new oY.Hour0to23Parser, K: new iY.Hour0To11Parser, k: new aY.Hour1To24Parser, m: new sY.MinuteParser, s: new uY.SecondParser, S: new cY.FractionOfSecondParser, X: new lY.ISOTimezoneWithZParser, x: new dY.ISOTimezoneParser, t: new fY.TimestampSecondsParser, T: new pY.TimestampMillisecondsParser }; }); _c223 = F_; var ei = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ko)=>{ "use strict"; Object.defineProperty(ko, "longFormatters", { enumerable: !0, get: function() { return yu.longFormatters; } }); ko.parse = OY; Object.defineProperty(ko, "parsers", { enumerable: !0, get: function() { return W_.parsers; } }); var Fr = Pe(), mY = Ha(), hY = Tr(), L_ = L(), yu = Ca(), Jo = Na(), W_ = F_(), gY = as(), vY = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g, bY = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g, _Y = /^'([^]*?)'?$/, xY = /''/g, wY = /\S/, DY = /[a-zA-Z]/; function OY(e, t, r, o) { let a = (0, mY.getDefaultOptions)(), c = o?.locale ?? a.locale ?? hY.defaultLocale, l = o?.firstWeekContainsDate ?? o?.locale?.options?.firstWeekContainsDate ?? a.firstWeekContainsDate ?? a.locale?.options?.firstWeekContainsDate ?? 1, f = o?.weekStartsOn ?? o?.locale?.options?.weekStartsOn ?? a.weekStartsOn ?? a.locale?.options?.weekStartsOn ?? 0; if (t === "") return e === "" ? (0, L_.toDate)(r) : (0, Fr.constructFrom)(r, NaN); let m = { firstWeekContainsDate: l, weekStartsOn: f, locale: c }, h = [ new gY.DateToSystemTimezoneSetter ], g = t.match(bY).map((O)=>{ let E = O[0]; if (E in yu.longFormatters) { let N = yu.longFormatters[E]; return N(O, c.formatLong); } return O; }).join("").match(vY), x = []; for (let O of g){ !o?.useAdditionalWeekYearTokens && (0, Jo.isProtectedWeekYearToken)(O) && (0, Jo.warnOrThrowProtectedError)(O, t, e), !o?.useAdditionalDayOfYearTokens && (0, Jo.isProtectedDayOfYearToken)(O) && (0, Jo.warnOrThrowProtectedError)(O, t, e); let E = O[0], N = W_.parsers[E]; if (N) { let { incompatibleTokens: T } = N; if (Array.isArray(T)) { let F = x.find((V)=>T.includes(V.token) || V.token === E); if (F) throw new RangeError(`The format string mustn't contain \`${F.fullToken}\` and \`${O}\` at the same time`); } else if (N.incompatibleTokens === "*" && x.length > 0) throw new RangeError(`The format string mustn't contain \`${O}\` and any other token at the same time`); x.push({ token: E, fullToken: O }); let Y = N.run(e, O, c.match, m); if (!Y) return (0, Fr.constructFrom)(r, NaN); h.push(Y.setter), e = Y.rest; } else { if (E.match(DY)) throw new RangeError("Format string contains an unescaped latin alphabet character `" + E + "`"); if (O === "''" ? O = "'" : E === "'" && (O = MY(O)), e.indexOf(O) === 0) e = e.slice(O.length); else return (0, Fr.constructFrom)(r, NaN); } } if (e.length > 0 && wY.test(e)) return (0, Fr.constructFrom)(r, NaN); let P = h.map((O)=>O.priority).sort((O, E)=>E - O).filter((O, E, N)=>N.indexOf(O) === E).map((O)=>h.filter((E)=>E.priority === O).sort((E, N)=>N.subPriority - E.subPriority)).map((O)=>O[0]), D = (0, L_.toDate)(r); if (isNaN(D.getTime())) return (0, Fr.constructFrom)(r, NaN); let y = {}; for (let O of P){ if (!O.validate(D, m)) return (0, Fr.constructFrom)(r, NaN); let E = O.set(D, y, m); Array.isArray(E) ? (D = E[0], Object.assign(y, E[1])) : D = E; } return (0, Fr.constructFrom)(r, D); } function MY(e) { return e.match(_Y)[1].replace(xY, "'"); } }); var H_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c224 = (A_)=>{ "use strict"; A_.isMatch = EY; var PY = Xt(), yY = ei(); function EY(e, t, r) { return (0, PY.isValid)((0, yY.parse)(e, t, new Date, r)); } }); _c225 = H_; var B_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c226 = (Q_)=>{ "use strict"; Q_.isMonday = qY; var SY = L(); function qY(e) { return (0, SY.toDate)(e).getDay() === 1; } }); _c227 = B_; var K_ = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c228 = (V_)=>{ "use strict"; V_.isPast = IY; var RY = L(); function IY(e) { return +(0, RY.toDate)(e) < Date.now(); } }); _c229 = K_; var Eu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c230 = ($_)=>{ "use strict"; $_.startOfHour = CY; var TY = L(); function CY(e) { let t = (0, TY.toDate)(e); return t.setMinutes(0, 0, 0), t; } }); _c231 = Eu; var Su = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c232 = (U_)=>{ "use strict"; U_.isSameHour = NY; var z_ = Eu(); function NY(e, t) { let r = (0, z_.startOfHour)(e), o = (0, z_.startOfHour)(t); return +r == +o; } }); _c233 = Su; var ti = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Z_)=>{ "use strict"; Z_.isSameWeek = YY; var X_ = Ct(); function YY(e, t, r) { let o = (0, X_.startOfWeek)(e, r), a = (0, X_.startOfWeek)(t, r); return +o == +a; } }); var qu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((G_)=>{ "use strict"; G_.isSameISOWeek = FY; var jY = ti(); function FY(e, t) { return (0, jY.isSameWeek)(e, t, { weekStartsOn: 1 }); } }); var ex = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((k_)=>{ "use strict"; k_.isSameISOWeekYear = LY; var J_ = tn(); function LY(e, t) { let r = (0, J_.startOfISOWeekYear)(e), o = (0, J_.startOfISOWeekYear)(t); return +r == +o; } }); var Ru = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c234 = (rx)=>{ "use strict"; rx.isSameMinute = WY; var tx = Fo(); function WY(e, t) { let r = (0, tx.startOfMinute)(e), o = (0, tx.startOfMinute)(t); return +r == +o; } }); _c235 = Ru; var ri = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ox)=>{ "use strict"; ox.isSameMonth = AY; var nx = L(); function AY(e, t) { let r = (0, nx.toDate)(e), o = (0, nx.toDate)(t); return r.getFullYear() === o.getFullYear() && r.getMonth() === o.getMonth(); } }); var ni = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ax)=>{ "use strict"; ax.isSameQuarter = HY; var ix = Ln(); function HY(e, t) { let r = (0, ix.startOfQuarter)(e), o = (0, ix.startOfQuarter)(t); return +r == +o; } }); var Iu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c236 = (sx)=>{ "use strict"; sx.startOfSecond = BY; var QY = L(); function BY(e) { let t = (0, QY.toDate)(e); return t.setMilliseconds(0), t; } }); _c237 = Iu; var Tu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c238 = (cx)=>{ "use strict"; cx.isSameSecond = VY; var ux = Iu(); function VY(e, t) { let r = (0, ux.startOfSecond)(e), o = (0, ux.startOfSecond)(t); return +r == +o; } }); _c239 = Tu; var oi = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((dx)=>{ "use strict"; dx.isSameYear = KY; var lx = L(); function KY(e, t) { let r = (0, lx.toDate)(e), o = (0, lx.toDate)(t); return r.getFullYear() === o.getFullYear(); } }); var px = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((fx)=>{ "use strict"; fx.isThisHour = UY; var $Y = wt(), zY = Su(); function UY(e) { return (0, zY.isSameHour)(e, (0, $Y.constructNow)(e)); } }); var hx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((mx)=>{ "use strict"; mx.isThisISOWeek = GY; var XY = wt(), ZY = qu(); function GY(e) { return (0, ZY.isSameISOWeek)(e, (0, XY.constructNow)(e)); } }); var vx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((gx)=>{ "use strict"; gx.isThisMinute = ej; var JY = wt(), kY = Ru(); function ej(e) { return (0, kY.isSameMinute)(e, (0, JY.constructNow)(e)); } }); var _x = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((bx)=>{ "use strict"; bx.isThisMonth = nj; var tj = wt(), rj = ri(); function nj(e) { return (0, rj.isSameMonth)(e, (0, tj.constructNow)(e)); } }); var wx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((xx)=>{ "use strict"; xx.isThisQuarter = aj; var oj = wt(), ij = ni(); function aj(e) { return (0, ij.isSameQuarter)(e, (0, oj.constructNow)(e)); } }); var Ox = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c240 = (Dx)=>{ "use strict"; Dx.isThisSecond = cj; var sj = wt(), uj = Tu(); function cj(e) { return (0, uj.isSameSecond)(e, (0, sj.constructNow)(e)); } }); _c241 = Ox; var Px = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c242 = (Mx)=>{ "use strict"; Mx.isThisWeek = fj; var lj = wt(), dj = ti(); function fj(e, t) { return (0, dj.isSameWeek)(e, (0, lj.constructNow)(e), t); } }); _c243 = Px; var Ex = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c244 = (yx)=>{ "use strict"; yx.isThisYear = hj; var pj = wt(), mj = oi(); function hj(e) { return (0, mj.isSameYear)(e, (0, pj.constructNow)(e)); } }); _c245 = Ex; var qx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Sx)=>{ "use strict"; Sx.isThursday = vj; var gj = L(); function vj(e) { return (0, gj.toDate)(e).getDay() === 4; } }); var Ix = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c246 = (Rx)=>{ "use strict"; Rx.isToday = xj; var bj = wt(), _j = Ir(); function xj(e) { return (0, _j.isSameDay)(e, (0, bj.constructNow)(e)); } }); _c247 = Ix; var Cx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c248 = (Tx)=>{ "use strict"; Tx.isTomorrow = Mj; var wj = At(), Dj = wt(), Oj = Ir(); function Mj(e) { return (0, Oj.isSameDay)(e, (0, wj.addDays)((0, Dj.constructNow)(e), 1)); } }); _c249 = Cx; var Yx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c250 = (Nx)=>{ "use strict"; Nx.isTuesday = yj; var Pj = L(); function yj(e) { return (0, Pj.toDate)(e).getDay() === 2; } }); _c251 = Yx; var Fx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c252 = (jx)=>{ "use strict"; jx.isWednesday = Sj; var Ej = L(); function Sj(e) { return (0, Ej.toDate)(e).getDay() === 3; } }); _c253 = Fx; var Nu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c254 = (Lx)=>{ "use strict"; Lx.isWithinInterval = qj; var Cu = L(); function qj(e, t) { let r = +(0, Cu.toDate)(e), [o, a] = [ +(0, Cu.toDate)(t.start), +(0, Cu.toDate)(t.end) ].sort((c, l)=>c - l); return r >= o && r <= a; } }); _c255 = Nu; var dn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Wx)=>{ "use strict"; Wx.subDays = Ij; var Rj = At(); function Ij(e, t) { return (0, Rj.addDays)(e, -t); } }); var Hx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c256 = (Ax)=>{ "use strict"; Ax.isYesterday = Yj; var Tj = wt(), Cj = Ir(), Nj = dn(); function Yj(e) { return (0, Cj.isSameDay)(e, (0, Nj.subDays)((0, Tj.constructNow)(e), 1)); } }); _c257 = Hx; var Bx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c258 = (Qx)=>{ "use strict"; Qx.lastDayOfDecade = Fj; var jj = L(); function Fj(e) { let t = (0, jj.toDate)(e), r = t.getFullYear(), o = 9 + Math.floor(r / 10) * 10; return t.setFullYear(o + 1, 0, 0), t.setHours(0, 0, 0, 0), t; } }); _c259 = Bx; var Yu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c260 = (Vx)=>{ "use strict"; Vx.lastDayOfWeek = Aj; var Lj = L(), Wj = _t(); function Aj(e, t) { let r = (0, Wj.getDefaultOptions)(), o = t?.weekStartsOn ?? t?.locale?.options?.weekStartsOn ?? r.weekStartsOn ?? r.locale?.options?.weekStartsOn ?? 0, a = (0, Lj.toDate)(e), c = a.getDay(), l = (c < o ? -7 : 0) + 6 - (c - o); return a.setHours(0, 0, 0, 0), a.setDate(a.getDate() + l), a; } }); _c261 = Yu; var $x = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Kx)=>{ "use strict"; Kx.lastDayOfISOWeek = Qj; var Hj = Yu(); function Qj(e) { return (0, Hj.lastDayOfWeek)(e, { weekStartsOn: 1 }); } }); var Ux = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c262 = (zx)=>{ "use strict"; zx.lastDayOfISOWeekYear = $j; var Bj = fr(), Vj = zt(), Kj = Pe(); function $j(e) { let t = (0, Bj.getISOWeekYear)(e), r = (0, Kj.constructFrom)(e, 0); r.setFullYear(t + 1, 0, 4), r.setHours(0, 0, 0, 0); let o = (0, Vj.startOfISOWeek)(r); return o.setDate(o.getDate() - 1), o; } }); _c263 = Ux; var Zx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c264 = (Xx)=>{ "use strict"; Xx.lastDayOfQuarter = Uj; var zj = L(); function Uj(e) { let t = (0, zj.toDate)(e), r = t.getMonth(), o = r - r % 3 + 3; return t.setMonth(o, 0), t.setHours(0, 0, 0, 0), t; } }); _c265 = Zx; var Jx = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c266 = (Gx)=>{ "use strict"; Gx.lastDayOfYear = Zj; var Xj = L(); function Zj(e) { let t = (0, Xj.toDate)(e), r = t.getFullYear(); return t.setFullYear(r + 1, 0, 0), t.setHours(0, 0, 0, 0), t; } }); _c267 = Jx; var ew = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ju)=>{ "use strict"; ju.lightFormat = nF; Object.defineProperty(ju, "lightFormatters", { enumerable: !0, get: function() { return kx.lightFormatters; } }); var Gj = Xt(), Jj = L(), kx = Ra(), kj = /(\w)\1*|''|'(''|[^'])+('|$)|./g, eF = /^'([^]*?)'?$/, tF = /''/g, rF = /[a-zA-Z]/; function nF(e, t) { let r = (0, Jj.toDate)(e); if (!(0, Gj.isValid)(r)) throw new RangeError("Invalid time value"); let o = t.match(kj); return o ? o.map((c)=>{ if (c === "''") return "'"; let l = c[0]; if (l === "'") return oF(c); let f = kx.lightFormatters[l]; if (f) return f(r, c); if (l.match(rF)) throw new RangeError("Format string contains an unescaped latin alphabet character `" + l + "`"); return c; }).join("") : ""; } function oF(e) { let t = e.match(eF); return t ? t[1].replace(tF, "'") : e; } }); var nw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((rw)=>{ "use strict"; rw.milliseconds = iF; var tw = ve(); function iF({ years: e, months: t, weeks: r, days: o, hours: a, minutes: c, seconds: l }) { let f = 0; e && (f += e * tw.daysInYear), t && (f += t * (tw.daysInYear / 12)), r && (f += r * 7), o && (f += o); let m = f * 24 * 60 * 60; return a && (m += a * 60 * 60), c && (m += c * 60), l && (m += l), Math.trunc(m * 1e3); } }); var iw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((ow)=>{ "use strict"; ow.millisecondsToHours = sF; var aF = ve(); function sF(e) { let t = e / aF.millisecondsInHour; return Math.trunc(t); } }); var sw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((aw)=>{ "use strict"; aw.millisecondsToMinutes = cF; var uF = ve(); function cF(e) { let t = e / uF.millisecondsInMinute; return Math.trunc(t); } }); var cw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((uw)=>{ "use strict"; uw.millisecondsToSeconds = dF; var lF = ve(); function dF(e) { let t = e / lF.millisecondsInSecond; return Math.trunc(t); } }); var dw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((lw)=>{ "use strict"; lw.minutesToHours = pF; var fF = ve(); function pF(e) { let t = e / fF.minutesInHour; return Math.trunc(t); } }); var pw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((fw)=>{ "use strict"; fw.minutesToMilliseconds = hF; var mF = ve(); function hF(e) { return Math.trunc(e * mF.millisecondsInMinute); } }); var hw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((mw)=>{ "use strict"; mw.minutesToSeconds = vF; var gF = ve(); function vF(e) { return Math.trunc(e * gF.secondsInMinute); } }); var vw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((gw)=>{ "use strict"; gw.monthsToQuarters = _F; var bF = ve(); function _F(e) { let t = e / bF.monthsInQuarter; return Math.trunc(t); } }); var _w = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((bw)=>{ "use strict"; bw.monthsToYears = wF; var xF = ve(); function wF(e) { let t = e / xF.monthsInYear; return Math.trunc(t); } }); var or = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((xw)=>{ "use strict"; xw.nextDay = MF; var DF = At(), OF = un(); function MF(e, t) { let r = t - (0, OF.getDay)(e); return r <= 0 && (r += 7), (0, DF.addDays)(e, r); } }); var Dw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c268 = (ww)=>{ "use strict"; ww.nextFriday = yF; var PF = or(); function yF(e) { return (0, PF.nextDay)(e, 5); } }); _c269 = Dw; var Mw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c270 = (Ow)=>{ "use strict"; Ow.nextMonday = SF; var EF = or(); function SF(e) { return (0, EF.nextDay)(e, 1); } }); _c271 = Mw; var yw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Pw)=>{ "use strict"; Pw.nextSaturday = RF; var qF = or(); function RF(e) { return (0, qF.nextDay)(e, 6); } }); var Sw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c272 = (Ew)=>{ "use strict"; Ew.nextSunday = TF; var IF = or(); function TF(e) { return (0, IF.nextDay)(e, 0); } }); _c273 = Sw; var Rw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c274 = (qw)=>{ "use strict"; qw.nextThursday = NF; var CF = or(); function NF(e) { return (0, CF.nextDay)(e, 4); } }); _c275 = Rw; var Tw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c276 = (Iw)=>{ "use strict"; Iw.nextTuesday = jF; var YF = or(); function jF(e) { return (0, YF.nextDay)(e, 2); } }); _c277 = Tw; var Nw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c278 = (Cw)=>{ "use strict"; Cw.nextWednesday = LF; var FF = or(); function LF(e) { return (0, FF.nextDay)(e, 3); } }); _c279 = Nw; var Lu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c280 = (jw)=>{ "use strict"; jw.parseISO = WF; var ai = ve(); function WF(e, t) { let r = t?.additionalDigits ?? 2, o = BF(e), a; if (o.date) { let m = VF(o.date, r); a = KF(m.restDateString, m.year); } if (!a || isNaN(a.getTime())) return new Date(NaN); let c = a.getTime(), l = 0, f; if (o.time && (l = $F(o.time), isNaN(l))) return new Date(NaN); if (o.timezone) { if (f = zF(o.timezone), isNaN(f)) return new Date(NaN); } else { let m = new Date(c + l), h = new Date(0); return h.setFullYear(m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate()), h.setHours(m.getUTCHours(), m.getUTCMinutes(), m.getUTCSeconds(), m.getUTCMilliseconds()), h; } return new Date(c + l + f); } var ii = { dateTimeDelimiter: /[T ]/, timeZoneDelimiter: /[Z ]/i, timezone: /([Z+-].*)$/ }, AF = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/, HF = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/, QF = /^([+-])(\d{2})(?::?(\d{2}))?$/; function BF(e) { let t = {}, r = e.split(ii.dateTimeDelimiter), o; if (r.length > 2) return t; if (/:/.test(r[0]) ? o = r[0] : (t.date = r[0], o = r[1], ii.timeZoneDelimiter.test(t.date) && (t.date = e.split(ii.timeZoneDelimiter)[0], o = e.substr(t.date.length, e.length))), o) { let a = ii.timezone.exec(o); a ? (t.time = o.replace(a[1], ""), t.timezone = a[1]) : t.time = o; } return t; } function VF(e, t) { let r = new RegExp("^(?:(\\d{4}|[+-]\\d{" + (4 + t) + "})|(\\d{2}|[+-]\\d{" + (2 + t) + "})$)"), o = e.match(r); if (!o) return { year: NaN, restDateString: "" }; let a = o[1] ? parseInt(o[1]) : null, c = o[2] ? parseInt(o[2]) : null; return { year: c === null ? a : c * 100, restDateString: e.slice((o[1] || o[2]).length) }; } function KF(e, t) { if (t === null) return new Date(NaN); let r = e.match(AF); if (!r) return new Date(NaN); let o = !!r[4], a = ro(r[1]), c = ro(r[2]) - 1, l = ro(r[3]), f = ro(r[4]), m = ro(r[5]) - 1; if (o) return JF(t, f, m) ? UF(t, f, m) : new Date(NaN); { let h = new Date(0); return !ZF(t, c, l) || !GF(t, a) ? new Date(NaN) : (h.setUTCFullYear(t, c, Math.max(a, l)), h); } } function ro(e) { return e ? parseInt(e) : 1; } function $F(e) { let t = e.match(HF); if (!t) return NaN; let r = Fu(t[1]), o = Fu(t[2]), a = Fu(t[3]); return kF(r, o, a) ? r * ai.millisecondsInHour + o * ai.millisecondsInMinute + a * 1e3 : NaN; } function Fu(e) { return e && parseFloat(e.replace(",", ".")) || 0; } function zF(e) { if (e === "Z") return 0; let t = e.match(QF); if (!t) return 0; let r = t[1] === "+" ? -1 : 1, o = parseInt(t[2]), a = t[3] && parseInt(t[3]) || 0; return eL(o, a) ? r * (o * ai.millisecondsInHour + a * ai.millisecondsInMinute) : NaN; } function UF(e, t, r) { let o = new Date(0); o.setUTCFullYear(e, 0, 4); let a = o.getUTCDay() || 7, c = (t - 1) * 7 + r + 1 - a; return o.setUTCDate(o.getUTCDate() + c), o; } var XF = [ 31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; function Yw(e) { return e % 400 === 0 || e % 4 === 0 && e % 100 !== 0; } function ZF(e, t, r) { return t >= 0 && t <= 11 && r >= 1 && r <= (XF[t] || (Yw(e) ? 29 : 28)); } function GF(e, t) { return t >= 1 && t <= (Yw(e) ? 366 : 365); } function JF(e, t, r) { return t >= 1 && t <= 53 && r >= 0 && r <= 6; } function kF(e, t, r) { return e === 24 ? t === 0 && r === 0 : r >= 0 && r < 60 && t >= 0 && t < 60 && e >= 0 && e < 25; } function eL(e, t) { return t >= 0 && t <= 59; } }); _c281 = Lu; var Lw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c282 = (Fw)=>{ "use strict"; Fw.parseJSON = tL; function tL(e) { let t = e.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.(\d{0,7}))?(?:Z|(.)(\d{2}):?(\d{2})?)?/); return t ? new Date(Date.UTC(+t[1], +t[2] - 1, +t[3], +t[4] - (+t[9] || 0) * (t[8] == "-" ? -1 : 1), +t[5] - (+t[10] || 0) * (t[8] == "-" ? -1 : 1), +t[6], +((t[7] || "0") + "00").substring(0, 3))) : new Date(NaN); } }); _c283 = Lw; var ir = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Ww)=>{ "use strict"; Ww.previousDay = oL; var rL = un(), nL = dn(); function oL(e, t) { let r = (0, rL.getDay)(e) - t; return r <= 0 && (r += 7), (0, nL.subDays)(e, r); } }); var Hw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c284 = (Aw)=>{ "use strict"; Aw.previousFriday = aL; var iL = ir(); function aL(e) { return (0, iL.previousDay)(e, 5); } }); _c285 = Hw; var Bw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c286 = (Qw)=>{ "use strict"; Qw.previousMonday = uL; var sL = ir(); function uL(e) { return (0, sL.previousDay)(e, 1); } }); _c287 = Bw; var Kw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c288 = (Vw)=>{ "use strict"; Vw.previousSaturday = lL; var cL = ir(); function lL(e) { return (0, cL.previousDay)(e, 6); } }); _c289 = Kw; var zw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(($w)=>{ "use strict"; $w.previousSunday = fL; var dL = ir(); function fL(e) { return (0, dL.previousDay)(e, 0); } }); var Xw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c290 = (Uw)=>{ "use strict"; Uw.previousThursday = mL; var pL = ir(); function mL(e) { return (0, pL.previousDay)(e, 4); } }); _c291 = Xw; var Gw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c292 = (Zw)=>{ "use strict"; Zw.previousTuesday = gL; var hL = ir(); function gL(e) { return (0, hL.previousDay)(e, 2); } }); _c293 = Gw; var kw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Jw)=>{ "use strict"; Jw.previousWednesday = bL; var vL = ir(); function bL(e) { return (0, vL.previousDay)(e, 3); } }); var tD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((eD)=>{ "use strict"; eD.quartersToMonths = xL; var _L = ve(); function xL(e) { return Math.trunc(e * _L.monthsInQuarter); } }); var nD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((rD)=>{ "use strict"; rD.quartersToYears = DL; var wL = ve(); function DL(e) { let t = e / wL.quartersInYear; return Math.trunc(t); } }); var aD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((iD)=>{ "use strict"; iD.roundToNearestHours = PL; var OL = rr(), oD = Pe(), ML = L(); function PL(e, t) { let r = t?.nearestTo ?? 1; if (r < 1 || r > 12) return (0, oD.constructFrom)(e, NaN); let o = (0, ML.toDate)(e), a = o.getMinutes() / 60, c = o.getSeconds() / 60 / 60, l = o.getMilliseconds() / 1e3 / 60 / 60, f = o.getHours() + a + c + l, m = t?.roundingMethod ?? "round", g = (0, OL.getRoundingMethod)(m)(f / r) * r, x = (0, oD.constructFrom)(e, o); return x.setHours(g, 0, 0, 0), x; } }); var cD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((uD)=>{ "use strict"; uD.roundToNearestMinutes = SL; var yL = rr(), sD = Pe(), EL = L(); function SL(e, t) { let r = t?.nearestTo ?? 1; if (r < 1 || r > 30) return (0, sD.constructFrom)(e, NaN); let o = (0, EL.toDate)(e), a = o.getSeconds() / 60, c = o.getMilliseconds() / 1e3 / 60, l = o.getMinutes() + a + c, f = t?.roundingMethod ?? "round", h = (0, yL.getRoundingMethod)(f)(l / r) * r, g = (0, sD.constructFrom)(e, o); return g.setMinutes(h, 0, 0), g; } }); var dD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((lD)=>{ "use strict"; lD.secondsToHours = RL; var qL = ve(); function RL(e) { let t = e / qL.secondsInHour; return Math.trunc(t); } }); var pD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((fD)=>{ "use strict"; fD.secondsToMilliseconds = TL; var IL = ve(); function TL(e) { return e * IL.millisecondsInSecond; } }); var hD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((mD)=>{ "use strict"; mD.secondsToMinutes = NL; var CL = ve(); function NL(e) { let t = e / CL.secondsInMinute; return Math.trunc(t); } }); var no = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((gD)=>{ "use strict"; gD.setMonth = LL; var YL = Pe(), jL = Wa(), FL = L(); function LL(e, t) { let r = (0, FL.toDate)(e), o = r.getFullYear(), a = r.getDate(), c = (0, YL.constructFrom)(e, 0); c.setFullYear(o, t, 15), c.setHours(0, 0, 0, 0); let l = (0, jL.getDaysInMonth)(c); return r.setMonth(t, Math.min(a, l)), r; } }); var Wu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c294 = (vD)=>{ "use strict"; vD.set = QL; var WL = Pe(), AL = no(), HL = L(); function QL(e, t) { let r = (0, HL.toDate)(e); return isNaN(+r) ? (0, WL.constructFrom)(e, NaN) : (t.year != null && r.setFullYear(t.year), t.month != null && (r = (0, AL.setMonth)(r, t.month)), t.date != null && r.setDate(t.date), t.hours != null && r.setHours(t.hours), t.minutes != null && r.setMinutes(t.minutes), t.seconds != null && r.setSeconds(t.seconds), t.milliseconds != null && r.setMilliseconds(t.milliseconds), r); } }); _c295 = Wu; var _D = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((bD)=>{ "use strict"; bD.setDate = VL; var BL = L(); function VL(e, t) { let r = (0, BL.toDate)(e); return r.setDate(t), r; } }); var wD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((xD)=>{ "use strict"; xD.setDayOfYear = $L; var KL = L(); function $L(e, t) { let r = (0, KL.toDate)(e); return r.setMonth(0), r.setDate(t), r; } }); var MD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c296 = (OD)=>{ "use strict"; OD.setDefaultOptions = zL; var DD = _t(); function zL(e) { let t = {}, r = (0, DD.getDefaultOptions)(); for(let o in r)Object.prototype.hasOwnProperty.call(r, o) && (t[o] = r[o]); for(let o in e)Object.prototype.hasOwnProperty.call(e, o) && (e[o] === void 0 ? delete t[o] : t[o] = e[o]); (0, DD.setDefaultOptions)(t); } }); _c297 = MD; var Au = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c298 = (PD)=>{ "use strict"; PD.setHours = XL; var UL = L(); function XL(e, t) { let r = (0, UL.toDate)(e); return r.setHours(t), r; } }); _c299 = Au; var ED = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c300 = (yD)=>{ "use strict"; yD.setMilliseconds = GL; var ZL = L(); function GL(e, t) { let r = (0, ZL.toDate)(e); return r.setMilliseconds(t), r; } }); _c301 = ED; var Hu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c302 = (SD)=>{ "use strict"; SD.setMinutes = kL; var JL = L(); function kL(e, t) { let r = (0, JL.toDate)(e); return r.setMinutes(t), r; } }); _c303 = Hu; var Qu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c304 = (qD)=>{ "use strict"; qD.setQuarter = rW; var eW = no(), tW = L(); function rW(e, t) { let r = (0, tW.toDate)(e), o = Math.trunc(r.getMonth() / 3) + 1, a = t - o; return (0, eW.setMonth)(r, r.getMonth() + a * 3); } }); _c305 = Qu; var Bu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c306 = (RD)=>{ "use strict"; RD.setSeconds = oW; var nW = L(); function oW(e, t) { let r = (0, nW.toDate)(e); return r.setSeconds(t), r; } }); _c307 = Bu; var CD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c308 = (TD)=>{ "use strict"; TD.setWeekYear = cW; var iW = Pe(), aW = Ut(), ID = Bo(), sW = L(), uW = _t(); function cW(e, t, r) { let o = (0, uW.getDefaultOptions)(), a = r?.firstWeekContainsDate ?? r?.locale?.options?.firstWeekContainsDate ?? o.firstWeekContainsDate ?? o.locale?.options?.firstWeekContainsDate ?? 1, c = (0, sW.toDate)(e), l = (0, aW.differenceInCalendarDays)(c, (0, ID.startOfWeekYear)(c, r)), f = (0, iW.constructFrom)(e, 0); return f.setFullYear(t, 0, a), f.setHours(0, 0, 0, 0), c = (0, ID.startOfWeekYear)(f, r), c.setDate(c.getDate() + l), c; } }); _c309 = CD; var Vu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c310 = (ND)=>{ "use strict"; ND.setYear = fW; var lW = Pe(), dW = L(); function fW(e, t) { let r = (0, dW.toDate)(e); return isNaN(+r) ? (0, lW.constructFrom)(e, NaN) : (r.setFullYear(t), r); } }); _c311 = Vu; var jD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((YD)=>{ "use strict"; YD.startOfDecade = mW; var pW = L(); function mW(e) { let t = (0, pW.toDate)(e), r = t.getFullYear(), o = Math.floor(r / 10) * 10; return t.setFullYear(o, 0, 1), t.setHours(0, 0, 0, 0), t; } }); var LD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c312 = (FD)=>{ "use strict"; FD.startOfToday = gW; var hW = en(); function gW() { return (0, hW.startOfDay)(Date.now()); } }); _c313 = LD; var AD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c314 = (WD)=>{ "use strict"; WD.startOfTomorrow = vW; function vW() { let e = new Date, t = e.getFullYear(), r = e.getMonth(), o = e.getDate(), a = new Date(0); return a.setFullYear(t, r, o + 1), a.setHours(0, 0, 0, 0), a; } }); _c315 = AD; var QD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c316 = (HD)=>{ "use strict"; HD.startOfYesterday = bW; function bW() { let e = new Date, t = e.getFullYear(), r = e.getMonth(), o = e.getDate(), a = new Date(0); return a.setFullYear(t, r, o - 1), a.setHours(0, 0, 0, 0), a; } }); _c317 = QD; var si = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((BD)=>{ "use strict"; BD.subMonths = xW; var _W = qr(); function xW(e, t) { return (0, _W.addMonths)(e, -t); } }); var KD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c318 = (VD)=>{ "use strict"; VD.sub = MW; var wW = dn(), DW = si(), OW = Pe(); function MW(e, t) { let { years: r = 0, months: o = 0, weeks: a = 0, days: c = 0, hours: l = 0, minutes: f = 0, seconds: m = 0 } = t, h = (0, DW.subMonths)(e, o + r * 12), g = (0, wW.subDays)(h, c + a * 7), x = f + l * 60, D = (m + x * 60) * 1e3; return (0, OW.constructFrom)(e, g.getTime() - D); } }); _c319 = KD; var zD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(($D)=>{ "use strict"; $D.subBusinessDays = yW; var PW = na(); function yW(e, t) { return (0, PW.addBusinessDays)(e, -t); } }); var XD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c320 = (UD)=>{ "use strict"; UD.subHours = SW; var EW = Sn(); function SW(e, t) { return (0, EW.addHours)(e, -t); } }); _c321 = XD; var GD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c322 = (ZD)=>{ "use strict"; ZD.subMilliseconds = RW; var qW = kr(); function RW(e, t) { return (0, qW.addMilliseconds)(e, -t); } }); _c323 = GD; var kD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((JD)=>{ "use strict"; JD.subMinutes = TW; var IW = qn(); function TW(e, t) { return (0, IW.addMinutes)(e, -t); } }); var Ku = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c324 = (eO)=>{ "use strict"; eO.subQuarters = NW; var CW = Rn(); function NW(e, t) { return (0, CW.addQuarters)(e, -t); } }); _c325 = Ku; var rO = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((tO)=>{ "use strict"; tO.subSeconds = jW; var YW = Po(); function jW(e, t) { return (0, YW.addSeconds)(e, -t); } }); var $u = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((nO)=>{ "use strict"; nO.subWeeks = LW; var FW = rn(); function LW(e, t) { return (0, FW.addWeeks)(e, -t); } }); var zu = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((oO)=>{ "use strict"; oO.subYears = AW; var WW = yo(); function AW(e, t) { return (0, WW.addYears)(e, -t); } }); var aO = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((iO)=>{ "use strict"; iO.weeksToDays = QW; var HW = ve(); function QW(e) { return Math.trunc(e * HW.daysInWeek); } }); var uO = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((sO)=>{ "use strict"; sO.yearsToDays = VW; var BW = ve(); function VW(e) { return Math.trunc(e * BW.daysInYear); } }); var lO = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((cO)=>{ "use strict"; cO.yearsToMonths = $W; var KW = ve(); function $W(e) { return Math.trunc(e * KW.monthsInYear); } }); var fO = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((dO)=>{ "use strict"; dO.yearsToQuarters = UW; var zW = ve(); function UW(e) { return Math.trunc(e * zW.quartersInYear); } }); var pO = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((s)=>{ "use strict"; var Uu = ki(); Object.keys(Uu).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Uu[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Uu[e]; } }); }); var Xu = na(); Object.keys(Xu).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Xu[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Xu[e]; } }); }); var Zu = At(); Object.keys(Zu).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Zu[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Zu[e]; } }); }); var Gu = Sn(); Object.keys(Gu).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Gu[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Gu[e]; } }); }); var Ju = aa(); Object.keys(Ju).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ju[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ju[e]; } }); }); var ku = kr(); Object.keys(ku).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ku[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ku[e]; } }); }); var ec = qn(); Object.keys(ec).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ec[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ec[e]; } }); }); var tc = qr(); Object.keys(tc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === tc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return tc[e]; } }); }); var rc = Rn(); Object.keys(rc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === rc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return rc[e]; } }); }); var nc = Po(); Object.keys(nc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === nc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return nc[e]; } }); }); var oc = rn(); Object.keys(oc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === oc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return oc[e]; } }); }); var ic = yo(); Object.keys(ic).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ic[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ic[e]; } }); }); var ac = Mh(); Object.keys(ac).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ac[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ac[e]; } }); }); var sc = Sh(); Object.keys(sc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === sc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return sc[e]; } }); }); var uc = Ih(); Object.keys(uc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === uc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return uc[e]; } }); }); var cc = Yh(); Object.keys(cc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === cc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return cc[e]; } }); }); var lc = Rr(); Object.keys(lc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === lc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return lc[e]; } }); }); var dc = Ah(); Object.keys(dc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === dc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return dc[e]; } }); }); var fc = Pe(); Object.keys(fc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === fc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return fc[e]; } }); }); var pc = wt(); Object.keys(pc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === pc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return pc[e]; } }); }); var mc = Bh(); Object.keys(mc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === mc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return mc[e]; } }); }); var hc = Jh(); Object.keys(hc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === hc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return hc[e]; } }); }); var gc = Ut(); Object.keys(gc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === gc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return gc[e]; } }); }); var vc = sa(); Object.keys(vc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === vc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return vc[e]; } }); }); var bc = og(); Object.keys(bc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === bc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return bc[e]; } }); }); var _c = In(); Object.keys(_c).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === _c[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return _c[e]; } }); }); var xc = To(); Object.keys(xc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === xc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return xc[e]; } }); }); var wc = Co(); Object.keys(wc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === wc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return wc[e]; } }); }); var Dc = Tn(); Object.keys(Dc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Dc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Dc[e]; } }); }); var Oc = No(); Object.keys(Oc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Oc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Oc[e]; } }); }); var Mc = Yo(); Object.keys(Mc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Mc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Mc[e]; } }); }); var Pc = Eg(); Object.keys(Pc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Pc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Pc[e]; } }); }); var yc = Cn(); Object.keys(yc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === yc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return yc[e]; } }); }); var Ec = jo(); Object.keys(Ec).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ec[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ec[e]; } }); }); var Sc = jn(); Object.keys(Sc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Sc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Sc[e]; } }); }); var qc = Ng(); Object.keys(qc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === qc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return qc[e]; } }); }); var Rc = Fn(); Object.keys(Rc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Rc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Rc[e]; } }); }); var Ic = Fg(); Object.keys(Ic).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ic[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ic[e]; } }); }); var Tc = fa(); Object.keys(Tc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Tc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Tc[e]; } }); }); var Cc = ma(); Object.keys(Cc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Cc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Cc[e]; } }); }); var Nc = Bg(); Object.keys(Nc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Nc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Nc[e]; } }); }); var Yc = $g(); Object.keys(Yc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Yc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Yc[e]; } }); }); var jc = Ug(); Object.keys(jc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === jc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return jc[e]; } }); }); var Fc = Gg(); Object.keys(Fc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Fc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Fc[e]; } }); }); var Lc = kg(); Object.keys(Lc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Lc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Lc[e]; } }); }); var Wc = Ao(); Object.keys(Wc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Wc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Wc[e]; } }); }); var Ac = nv(); Object.keys(Ac).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ac[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ac[e]; } }); }); var Hc = sv(); Object.keys(Hc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Hc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Hc[e]; } }); }); var Qc = cv(); Object.keys(Qc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Qc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Qc[e]; } }); }); var Bc = Nn(); Object.keys(Bc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Bc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Bc[e]; } }); }); var Vc = dv(); Object.keys(Vc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Vc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Vc[e]; } }); }); var Kc = pv(); Object.keys(Kc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Kc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Kc[e]; } }); }); var $c = gv(); Object.keys($c).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === $c[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return $c[e]; } }); }); var zc = bv(); Object.keys(zc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === zc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return zc[e]; } }); }); var Uc = xv(); Object.keys(Uc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Uc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Uc[e]; } }); }); var Xc = Yn(); Object.keys(Xc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Xc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Xc[e]; } }); }); var Zc = Dv(); Object.keys(Zc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Zc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Zc[e]; } }); }); var Gc = Mv(); Object.keys(Gc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Gc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Gc[e]; } }); }); var Jc = yv(); Object.keys(Jc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Jc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Jc[e]; } }); }); var kc = Sv(); Object.keys(kc).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === kc[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return kc[e]; } }); }); var el = Qo(); Object.keys(el).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === el[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return el[e]; } }); }); var tl = Ho(); Object.keys(tl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === tl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return tl[e]; } }); }); var rl = Rv(); Object.keys(rl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === rl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return rl[e]; } }); }); var nl = $o(); Object.keys(nl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === nl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return nl[e]; } }); }); var ol = Fa(); Object.keys(ol).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ol[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ol[e]; } }); }); var il = La(); Object.keys(il).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === il[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return il[e]; } }); }); var al = d0(); Object.keys(al).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === al[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return al[e]; } }); }); var sl = p0(); Object.keys(sl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === sl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return sl[e]; } }); }); var ul = h0(); Object.keys(ul).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ul[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ul[e]; } }); }); var cl = v0(); Object.keys(cl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === cl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return cl[e]; } }); }); var ll = _0(); Object.keys(ll).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ll[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ll[e]; } }); }); var dl = w0(); Object.keys(dl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === dl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return dl[e]; } }); }); var fl = O0(); Object.keys(fl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === fl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return fl[e]; } }); }); var pl = P0(); Object.keys(pl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === pl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return pl[e]; } }); }); var ml = S0(); Object.keys(ml).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ml[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ml[e]; } }); }); var hl = R0(); Object.keys(hl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === hl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return hl[e]; } }); }); var gl = Zo(); Object.keys(gl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === gl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return gl[e]; } }); }); var vl = un(); Object.keys(vl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === vl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return vl[e]; } }); }); var bl = Sa(); Object.keys(bl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === bl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return bl[e]; } }); }); var _l = Wa(); Object.keys(_l).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === _l[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return _l[e]; } }); }); var xl = j0(); Object.keys(xl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === xl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return xl[e]; } }); }); var wl = L0(); Object.keys(wl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === wl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return wl[e]; } }); }); var Dl = Ha(); Object.keys(Dl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Dl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Dl[e]; } }); }); var Ol = Qa(); Object.keys(Ol).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ol[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ol[e]; } }); }); var Ml = Ba(); Object.keys(Ml).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ml[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ml[e]; } }); }); var Pl = Qn(); Object.keys(Pl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Pl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Pl[e]; } }); }); var yl = fr(); Object.keys(yl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === yl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return yl[e]; } }); }); var El = V0(); Object.keys(El).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === El[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return El[e]; } }); }); var Sl = $0(); Object.keys(Sl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Sl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Sl[e]; } }); }); var ql = Va(); Object.keys(ql).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ql[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ql[e]; } }); }); var Rl = Ka(); Object.keys(Rl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Rl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Rl[e]; } }); }); var Il = G0(); Object.keys(Il).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Il[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Il[e]; } }); }); var Tl = Io(); Object.keys(Tl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Tl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Tl[e]; } }); }); var Cl = $a(); Object.keys(Cl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Cl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Cl[e]; } }); }); var Nl = za(); Object.keys(Nl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Nl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Nl[e]; } }); }); var Yl = tb(); Object.keys(Yl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Yl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Yl[e]; } }); }); var jl = Vo(); Object.keys(jl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === jl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return jl[e]; } }); }); var Fl = nb(); Object.keys(Fl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Fl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Fl[e]; } }); }); var Ll = Bn(); Object.keys(Ll).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ll[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ll[e]; } }); }); var Wl = ab(); Object.keys(Wl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Wl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Wl[e]; } }); }); var Al = Xa(); Object.keys(Al).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Al[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Al[e]; } }); }); var Hl = cb(); Object.keys(Hl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Hl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Hl[e]; } }); }); var Ql = db(); Object.keys(Ql).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ql[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ql[e]; } }); }); var Bl = pb(); Object.keys(Bl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Bl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Bl[e]; } }); }); var Vl = gb(); Object.keys(Vl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Vl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Vl[e]; } }); }); var Kl = _b(); Object.keys(Kl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Kl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Kl[e]; } }); }); var $l = wb(); Object.keys($l).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === $l[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return $l[e]; } }); }); var zl = Sb(); Object.keys(zl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === zl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return zl[e]; } }); }); var Ul = es(); Object.keys(Ul).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ul[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ul[e]; } }); }); var Xl = ts(); Object.keys(Xl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Xl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Xl[e]; } }); }); var Zl = Ro(); Object.keys(Zl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Zl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Zl[e]; } }); }); var Gl = rs(); Object.keys(Gl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Gl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Gl[e]; } }); }); var Jl = jb(); Object.keys(Jl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Jl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Jl[e]; } }); }); var kl = Lb(); Object.keys(kl).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === kl[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return kl[e]; } }); }); var ed = Ab(); Object.keys(ed).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ed[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ed[e]; } }); }); var td = Qb(); Object.keys(td).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === td[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return td[e]; } }); }); var rd = ca(); Object.keys(rd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === rd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return rd[e]; } }); }); var nd = Aa(); Object.keys(nd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === nd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return nd[e]; } }); }); var od = H_(); Object.keys(od).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === od[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return od[e]; } }); }); var id = B_(); Object.keys(id).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === id[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return id[e]; } }); }); var ad = K_(); Object.keys(ad).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ad[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ad[e]; } }); }); var sd = Ir(); Object.keys(sd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === sd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return sd[e]; } }); }); var ud = Su(); Object.keys(ud).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ud[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ud[e]; } }); }); var cd = qu(); Object.keys(cd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === cd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return cd[e]; } }); }); var ld = ex(); Object.keys(ld).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ld[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ld[e]; } }); }); var dd = Ru(); Object.keys(dd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === dd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return dd[e]; } }); }); var fd = ri(); Object.keys(fd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === fd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return fd[e]; } }); }); var pd = ni(); Object.keys(pd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === pd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return pd[e]; } }); }); var md = Tu(); Object.keys(md).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === md[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return md[e]; } }); }); var hd = ti(); Object.keys(hd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === hd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return hd[e]; } }); }); var gd = oi(); Object.keys(gd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === gd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return gd[e]; } }); }); var vd = ea(); Object.keys(vd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === vd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return vd[e]; } }); }); var bd = ta(); Object.keys(bd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === bd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return bd[e]; } }); }); var _d = px(); Object.keys(_d).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === _d[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return _d[e]; } }); }); var xd = hx(); Object.keys(xd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === xd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return xd[e]; } }); }); var wd = vx(); Object.keys(wd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === wd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return wd[e]; } }); }); var Dd = _x(); Object.keys(Dd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Dd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Dd[e]; } }); }); var Od = wx(); Object.keys(Od).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Od[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Od[e]; } }); }); var Md = Ox(); Object.keys(Md).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Md[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Md[e]; } }); }); var Pd = Px(); Object.keys(Pd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Pd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Pd[e]; } }); }); var yd = Ex(); Object.keys(yd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === yd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return yd[e]; } }); }); var Ed = qx(); Object.keys(Ed).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ed[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ed[e]; } }); }); var Sd = Ix(); Object.keys(Sd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Sd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Sd[e]; } }); }); var qd = Cx(); Object.keys(qd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === qd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return qd[e]; } }); }); var Rd = Yx(); Object.keys(Rd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Rd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Rd[e]; } }); }); var Id = Xt(); Object.keys(Id).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Id[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Id[e]; } }); }); var Td = Fx(); Object.keys(Td).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Td[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Td[e]; } }); }); var Cd = En(); Object.keys(Cd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Cd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Cd[e]; } }); }); var Nd = Nu(); Object.keys(Nd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Nd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Nd[e]; } }); }); var Yd = Hx(); Object.keys(Yd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Yd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Yd[e]; } }); }); var jd = Bx(); Object.keys(jd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === jd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return jd[e]; } }); }); var Fd = $x(); Object.keys(Fd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Fd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Fd[e]; } }); }); var Ld = Ux(); Object.keys(Ld).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ld[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ld[e]; } }); }); var Wd = Ua(); Object.keys(Wd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Wd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Wd[e]; } }); }); var Ad = Zx(); Object.keys(Ad).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ad[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ad[e]; } }); }); var Hd = Yu(); Object.keys(Hd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Hd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Hd[e]; } }); }); var Qd = Jx(); Object.keys(Qd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Qd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Qd[e]; } }); }); var Bd = ew(); Object.keys(Bd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Bd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Bd[e]; } }); }); var Vd = So(); Object.keys(Vd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Vd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Vd[e]; } }); }); var Kd = nw(); Object.keys(Kd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Kd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Kd[e]; } }); }); var $d = iw(); Object.keys($d).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === $d[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return $d[e]; } }); }); var zd = sw(); Object.keys(zd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === zd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return zd[e]; } }); }); var Ud = cw(); Object.keys(Ud).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ud[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ud[e]; } }); }); var Xd = qo(); Object.keys(Xd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Xd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Xd[e]; } }); }); var Zd = dw(); Object.keys(Zd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Zd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Zd[e]; } }); }); var Gd = pw(); Object.keys(Gd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Gd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Gd[e]; } }); }); var Jd = hw(); Object.keys(Jd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Jd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Jd[e]; } }); }); var kd = vw(); Object.keys(kd).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === kd[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return kd[e]; } }); }); var ef = _w(); Object.keys(ef).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ef[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ef[e]; } }); }); var tf = or(); Object.keys(tf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === tf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return tf[e]; } }); }); var rf = Dw(); Object.keys(rf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === rf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return rf[e]; } }); }); var nf = Mw(); Object.keys(nf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === nf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return nf[e]; } }); }); var of = yw(); Object.keys(of).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === of[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return of[e]; } }); }); var af = Sw(); Object.keys(af).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === af[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return af[e]; } }); }); var sf = Rw(); Object.keys(sf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === sf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return sf[e]; } }); }); var uf = Tw(); Object.keys(uf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === uf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return uf[e]; } }); }); var cf = Nw(); Object.keys(cf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === cf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return cf[e]; } }); }); var lf = ei(); Object.keys(lf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === lf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return lf[e]; } }); }); var df = Lu(); Object.keys(df).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === df[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return df[e]; } }); }); var ff = Lw(); Object.keys(ff).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ff[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ff[e]; } }); }); var pf = ir(); Object.keys(pf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === pf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return pf[e]; } }); }); var mf = Hw(); Object.keys(mf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === mf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return mf[e]; } }); }); var hf = Bw(); Object.keys(hf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === hf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return hf[e]; } }); }); var gf = Kw(); Object.keys(gf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === gf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return gf[e]; } }); }); var vf = zw(); Object.keys(vf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === vf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return vf[e]; } }); }); var bf = Xw(); Object.keys(bf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === bf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return bf[e]; } }); }); var _f = Gw(); Object.keys(_f).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === _f[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return _f[e]; } }); }); var xf = kw(); Object.keys(xf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === xf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return xf[e]; } }); }); var wf = tD(); Object.keys(wf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === wf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return wf[e]; } }); }); var Df = nD(); Object.keys(Df).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Df[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Df[e]; } }); }); var Of = aD(); Object.keys(Of).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Of[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Of[e]; } }); }); var Mf = cD(); Object.keys(Mf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Mf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Mf[e]; } }); }); var Pf = dD(); Object.keys(Pf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Pf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Pf[e]; } }); }); var yf = pD(); Object.keys(yf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === yf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return yf[e]; } }); }); var Ef = hD(); Object.keys(Ef).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ef[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ef[e]; } }); }); var Sf = Wu(); Object.keys(Sf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Sf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Sf[e]; } }); }); var qf = _D(); Object.keys(qf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === qf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return qf[e]; } }); }); var Rf = Zn(); Object.keys(Rf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Rf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Rf[e]; } }); }); var If = wD(); Object.keys(If).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === If[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return If[e]; } }); }); var Tf = MD(); Object.keys(Tf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Tf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Tf[e]; } }); }); var Cf = Au(); Object.keys(Cf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Cf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Cf[e]; } }); }); var Nf = Us(); Object.keys(Nf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Nf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Nf[e]; } }); }); var Yf = Is(); Object.keys(Yf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Yf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Yf[e]; } }); }); var jf = ia(); Object.keys(jf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === jf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return jf[e]; } }); }); var Ff = ED(); Object.keys(Ff).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Ff[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Ff[e]; } }); }); var Lf = Hu(); Object.keys(Lf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Lf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Lf[e]; } }); }); var Wf = no(); Object.keys(Wf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Wf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Wf[e]; } }); }); var Af = Qu(); Object.keys(Af).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Af[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Af[e]; } }); }); var Hf = Bu(); Object.keys(Hf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Hf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Hf[e]; } }); }); var Qf = Ss(); Object.keys(Qf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Qf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Qf[e]; } }); }); var Bf = CD(); Object.keys(Bf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Bf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Bf[e]; } }); }); var Vf = Vu(); Object.keys(Vf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Vf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Vf[e]; } }); }); var Kf = en(); Object.keys(Kf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Kf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Kf[e]; } }); }); var $f = jD(); Object.keys($f).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === $f[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return $f[e]; } }); }); var zf = Eu(); Object.keys(zf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === zf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return zf[e]; } }); }); var Uf = zt(); Object.keys(Uf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Uf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Uf[e]; } }); }); var Xf = tn(); Object.keys(Xf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Xf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Xf[e]; } }); }); var Zf = Fo(); Object.keys(Zf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Zf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Zf[e]; } }); }); var Gf = nn(); Object.keys(Gf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Gf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Gf[e]; } }); }); var Jf = Ln(); Object.keys(Jf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Jf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Jf[e]; } }); }); var kf = Iu(); Object.keys(kf).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === kf[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return kf[e]; } }); }); var ep = LD(); Object.keys(ep).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ep[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ep[e]; } }); }); var tp = AD(); Object.keys(tp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === tp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return tp[e]; } }); }); var rp = Ct(); Object.keys(rp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === rp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return rp[e]; } }); }); var np = Bo(); Object.keys(np).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === np[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return np[e]; } }); }); var op = Wn(); Object.keys(op).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === op[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return op[e]; } }); }); var ip = QD(); Object.keys(ip).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ip[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ip[e]; } }); }); var ap = KD(); Object.keys(ap).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === ap[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return ap[e]; } }); }); var sp = zD(); Object.keys(sp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === sp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return sp[e]; } }); }); var up = dn(); Object.keys(up).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === up[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return up[e]; } }); }); var cp = XD(); Object.keys(cp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === cp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return cp[e]; } }); }); var lp = ua(); Object.keys(lp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === lp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return lp[e]; } }); }); var dp = GD(); Object.keys(dp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === dp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return dp[e]; } }); }); var fp = kD(); Object.keys(fp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === fp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return fp[e]; } }); }); var pp = si(); Object.keys(pp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === pp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return pp[e]; } }); }); var mp = Ku(); Object.keys(mp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === mp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return mp[e]; } }); }); var hp = rO(); Object.keys(hp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === hp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return hp[e]; } }); }); var gp = $u(); Object.keys(gp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === gp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return gp[e]; } }); }); var vp = zu(); Object.keys(vp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === vp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return vp[e]; } }); }); var bp = L(); Object.keys(bp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === bp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return bp[e]; } }); }); var _p = ns(); Object.keys(_p).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === _p[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return _p[e]; } }); }); var xp = aO(); Object.keys(xp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === xp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return xp[e]; } }); }); var wp = uO(); Object.keys(wp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === wp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return wp[e]; } }); }); var Dp = lO(); Object.keys(Dp).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Dp[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Dp[e]; } }); }); var Op = fO(); Object.keys(Op).forEach(function(e) { e === "default" || e === "__esModule" || e in s && s[e] === Op[e] || Object.defineProperty(s, e, { enumerable: !0, get: function() { return Op[e]; } }); }); }); function ui() { return typeof window < "u"; } function Gt(e) { return ci(e) ? (e.nodeName || "").toLowerCase() : "#document"; } _c326 = Gt; function gt(e) { var t; return (e == null || (t = e.ownerDocument) == null ? void 0 : t.defaultView) || window; } function Qt(e) { var t; return (t = (ci(e) ? e.ownerDocument : e.document) || window.document) == null ? void 0 : t.documentElement; } _c327 = Qt; function ci(e) { return ui() ? e instanceof Node || e instanceof gt(e).Node : !1; } function Ne(e) { return ui() ? e instanceof Element || e instanceof gt(e).Element : !1; } _c328 = Ne; function ze(e) { return ui() ? e instanceof HTMLElement || e instanceof gt(e).HTMLElement : !1; } function Wr(e) { return !ui() || typeof ShadowRoot > "u" ? !1 : e instanceof ShadowRoot || e instanceof gt(e).ShadowRoot; } _c329 = Wr; function fn(e) { let { overflow: t, overflowX: r, overflowY: o, display: a } = Dt(e); return /auto|scroll|overlay|hidden|clip/.test(t + o + r) && a !== "inline" && a !== "contents"; } function mO(e) { return /^(table|td|th)$/.test(Gt(e)); } function oo(e) { try { if (e.matches(":popover-open")) return !0; } catch {} try { return e.matches(":modal"); } catch { return !1; } } function li(e) { let t = Ne(e) ? Dt(e) : e; return Lr(t.transform) || Lr(t.translate) || Lr(t.scale) || Lr(t.rotate) || Lr(t.perspective) || !pn() && (Lr(t.backdropFilter) || Lr(t.filter)) || XW.test(t.willChange || "") || ZW.test(t.contain || ""); } function hO(e) { let t = Ht(e); for(; ze(t) && !Bt(t);){ if (li(t)) return t; if (oo(t)) return null; t = Ht(t); } return null; } function pn() { return Mp == null && (Mp = typeof CSS < "u" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none")), Mp; } function Bt(e) { return /^(html|body|#document)$/.test(Gt(e)); } _c330 = Bt; function Dt(e) { return gt(e).getComputedStyle(e); } _c331 = Dt; function io(e) { return Ne(e) ? { scrollLeft: e.scrollLeft, scrollTop: e.scrollTop } : { scrollLeft: e.scrollX, scrollTop: e.scrollY }; } function Ht(e) { if (Gt(e) === "html") return e; let t = e.assignedSlot || e.parentNode || Wr(e) && e.host || Qt(e); return Wr(t) ? t.host : t; } _c332 = Ht; function gO(e) { let t = Ht(e); return Bt(t) ? e.ownerDocument ? e.ownerDocument.body : e.body : ze(t) && fn(t) ? t : gO(t); } function Pt(e, t, r) { var o; t === void 0 && (t = []), r === void 0 && (r = !0); let a = gO(e), c = a === ((o = e.ownerDocument) == null ? void 0 : o.body), l = gt(a); if (c) { let f = di(l); return t.concat(l, l.visualViewport || [], fn(a) ? a : [], f && r ? Pt(f) : []); } else return t.concat(a, Pt(a, [], r)); } _c333 = Pt; function di(e) { return e.parent && Object.getPrototypeOf(e.parent) ? e.frameElement : null; } var XW, ZW, Lr, Mp, ao = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ XW = /transform|translate|scale|rotate|perspective|filter/, ZW = /paint|layout|strict|content/, Lr = (e)=>!!e && e !== "none"; }); function fi(e, t, r) { return Ze(e, Ot(t, r)); } function yt(e, t) { return typeof e == "function" ? e(t) : e; } function Et(e) { return e.split("-")[0]; } _c334 = Et; function Yt(e) { return e.split("-")[1]; } _c335 = Yt; function pi(e) { return e === "x" ? "y" : "x"; } function mi(e) { return e === "y" ? "height" : "width"; } function jt(e) { let t = e[0]; return t === "t" || t === "b" ? "y" : "x"; } function hi(e) { return pi(jt(e)); } function Ep(e, t, r) { r === void 0 && (r = !1); let o = Yt(e), a = hi(e), c = mi(a), l = a === "x" ? o === (r ? "end" : "start") ? "right" : "left" : o === "start" ? "bottom" : "top"; return t.reference[c] > t.floating[c] && (l = uo(l)), [ l, uo(l) ]; } _c336 = Ep; function xO(e) { let t = uo(e); return [ so(e), t, so(t) ]; } function so(e) { return e.includes("start") ? e.replace("start", "end") : e.replace("end", "start"); } function e2(e, t, r) { switch(e){ case "top": case "bottom": return r ? t ? _O : bO : t ? bO : _O; case "left": case "right": return t ? JW : kW; default: return []; } } function wO(e, t, r, o) { let a = Yt(e), c = e2(Et(e), r === "start", o); return a && (c = c.map((l)=>l + "-" + a), t && (c = c.concat(c.map(so)))), c; } function uo(e) { let t = Et(e); return GW[t] + e.slice(t.length); } function t2(e) { return { top: 0, right: 0, bottom: 0, left: 0, ...e }; } function gi(e) { return typeof e != "number" ? t2(e) : { top: e, right: e, bottom: e, left: e }; } function ar(e) { let { x: t, y: r, width: o, height: a } = e; return { width: o, height: a, top: r, left: t, right: t + o, bottom: r + a, x: t, y: r }; } var Pp, vO, yp, Ot, Ze, Ar, br, Vt, GW, bO, _O, JW, kW, mn = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ Pp = [ "top", "right", "bottom", "left" ], vO = [ "start", "end" ], yp = Pp.reduce((e, t)=>e.concat(t, t + "-" + vO[0], t + "-" + vO[1]), []), Ot = Math.min, Ze = Math.max, Ar = Math.round, br = Math.floor, Vt = (e)=>({ x: e, y: e }), GW = { left: "right", right: "left", bottom: "top", top: "bottom" }; bO = [ "left", "right" ], _O = [ "right", "left" ], JW = [ "top", "bottom" ], kW = [ "bottom", "top" ]; }); var OO, vi, MO, Hr, bi, _i, r2, PO, xi, yO, EO, n2, o2, SO, i2, a2, s2, u2, c2, l2, d2, DO, f2, p2, wi, Sp, m2, qO, hn, RO, qp, h2, LV, Rp = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ OO = [ "input:not([inert]):not([inert] *)", "select:not([inert]):not([inert] *)", "textarea:not([inert]):not([inert] *)", "a[href]:not([inert]):not([inert] *)", "button:not([inert]):not([inert] *)", "[tabindex]:not(slot):not([inert]):not([inert] *)", "audio[controls]:not([inert]):not([inert] *)", "video[controls]:not([inert]):not([inert] *)", '[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)', "details>summary:first-of-type:not([inert]):not([inert] *)", "details:not([inert]):not([inert] *)" ], vi = OO.join(","), MO = typeof Element > "u", Hr = MO ? function() {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector, bi = !MO && Element.prototype.getRootNode ? function(e) { var t; return e == null || (t = e.getRootNode) === null || t === void 0 ? void 0 : t.call(e); } : function(e) { return e?.ownerDocument; }, _i = function(t, r) { var o; r === void 0 && (r = !0); var a = t == null || (o = t.getAttribute) === null || o === void 0 ? void 0 : o.call(t, "inert"), c = a === "" || a === "true", l = c || r && t && (typeof t.closest == "function" ? t.closest("[inert]") : _i(t.parentNode)); return l; }, r2 = function(t) { var r, o = t == null || (r = t.getAttribute) === null || r === void 0 ? void 0 : r.call(t, "contenteditable"); return o === "" || o === "true"; }, PO = function(t, r, o) { if (_i(t)) return []; var a = Array.prototype.slice.apply(t.querySelectorAll(vi)); return r && Hr.call(t, vi) && a.unshift(t), a = a.filter(o), a; }, xi = function(t, r, o) { for(var a = [], c = Array.from(t); c.length;){ var l = c.shift(); if (!_i(l, !1)) if (l.tagName === "SLOT") { var f = l.assignedElements(), m = f.length ? f : l.children, h = xi(m, !0, o); o.flatten ? a.push.apply(a, h) : a.push({ scopeParent: l, candidates: h }); } else { var g = Hr.call(l, vi); g && o.filter(l) && (r || !t.includes(l)) && a.push(l); var x = l.shadowRoot || typeof o.getShadowRoot == "function" && o.getShadowRoot(l), P = !_i(x, !1) && (!o.shadowRootFilter || o.shadowRootFilter(l)); if (x && P) { var D = xi(x === !0 ? l.children : x.children, !0, o); o.flatten ? a.push.apply(a, D) : a.push({ scopeParent: l, candidates: D }); } else c.unshift.apply(c, l.children); } } return a; }, yO = function(t) { return !isNaN(parseInt(t.getAttribute("tabindex"), 10)); }, EO = function(t) { if (!t) throw new Error("No node provided"); return t.tabIndex < 0 && (/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName) || r2(t)) && !yO(t) ? 0 : t.tabIndex; }, n2 = function(t, r) { var o = EO(t); return o < 0 && r && !yO(t) ? 0 : o; }, o2 = function(t, r) { return t.tabIndex === r.tabIndex ? t.documentOrder - r.documentOrder : t.tabIndex - r.tabIndex; }, SO = function(t) { return t.tagName === "INPUT"; }, i2 = function(t) { return SO(t) && t.type === "hidden"; }, a2 = function(t) { var r = t.tagName === "DETAILS" && Array.prototype.slice.apply(t.children).some(function(o) { return o.tagName === "SUMMARY"; }); return r; }, s2 = function(t, r) { for(var o = 0; o < t.length; o++)if (t[o].checked && t[o].form === r) return t[o]; }, u2 = function(t) { if (!t.name) return !0; var r = t.form || bi(t), o = function(f) { return r.querySelectorAll('input[type="radio"][name="' + f + '"]'); }, a; if (typeof window < "u" && typeof window.CSS < "u" && typeof window.CSS.escape == "function") a = o(window.CSS.escape(t.name)); else try { a = o(t.name); } catch (l) { return console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", l.message), !1; } var c = s2(a, t.form); return !c || c === t; }, c2 = function(t) { return SO(t) && t.type === "radio"; }, l2 = function(t) { return c2(t) && !u2(t); }, d2 = function(t) { var r, o = t && bi(t), a = (r = o) === null || r === void 0 ? void 0 : r.host, c = !1; if (o && o !== t) { var l, f, m; for(c = !!((l = a) !== null && l !== void 0 && (f = l.ownerDocument) !== null && f !== void 0 && f.contains(a) || t != null && (m = t.ownerDocument) !== null && m !== void 0 && m.contains(t)); !c && a;){ var h, g, x; o = bi(a), a = (h = o) === null || h === void 0 ? void 0 : h.host, c = !!((g = a) !== null && g !== void 0 && (x = g.ownerDocument) !== null && x !== void 0 && x.contains(a)); } } return c; }, DO = function(t) { var r = t.getBoundingClientRect(), o = r.width, a = r.height; return o === 0 && a === 0; }, f2 = function(t, r) { var o = r.displayCheck, a = r.getShadowRoot; if (o === "full-native" && "checkVisibility" in t) { var c = t.checkVisibility({ checkOpacity: !1, opacityProperty: !1, contentVisibilityAuto: !0, visibilityProperty: !0, checkVisibilityCSS: !0 }); return !c; } if (getComputedStyle(t).visibility === "hidden") return !0; var l = Hr.call(t, "details>summary:first-of-type"), f = l ? t.parentElement : t; if (Hr.call(f, "details:not([open]) *")) return !0; if (!o || o === "full" || o === "full-native" || o === "legacy-full") { if (typeof a == "function") { for(var m = t; t;){ var h = t.parentElement, g = bi(t); if (h && !h.shadowRoot && a(h) === !0) return DO(t); t.assignedSlot ? t = t.assignedSlot : !h && g !== t.ownerDocument ? t = g.host : t = h; } t = m; } if (d2(t)) return !t.getClientRects().length; if (o !== "legacy-full") return !0; } else if (o === "non-zero-area") return DO(t); return !1; }, p2 = function(t) { if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName)) for(var r = t.parentElement; r;){ if (r.tagName === "FIELDSET" && r.disabled) { for(var o = 0; o < r.children.length; o++){ var a = r.children.item(o); if (a.tagName === "LEGEND") return Hr.call(r, "fieldset[disabled] *") ? !0 : !a.contains(t); } return !0; } r = r.parentElement; } return !1; }, wi = function(t, r) { return !(r.disabled || i2(r) || f2(r, t) || a2(r) || p2(r)); }, Sp = function(t, r) { return !(l2(r) || EO(r) < 0 || !wi(t, r)); }, m2 = function(t) { var r = parseInt(t.getAttribute("tabindex"), 10); return !!(isNaN(r) || r >= 0); }, qO = function(t) { var r = [], o = []; return t.forEach(function(a, c) { var l = !!a.scopeParent, f = l ? a.scopeParent : a, m = n2(f, l), h = l ? qO(a.candidates) : f; m === 0 ? l ? r.push.apply(r, h) : r.push(f) : o.push({ documentOrder: c, tabIndex: m, item: a, isScope: l, content: h }); }), o.sort(o2).reduce(function(a, c) { return c.isScope ? a.push.apply(a, c.content) : a.push(c.content), a; }, []).concat(r); }, hn = function(t, r) { r = r || {}; var o; return r.getShadowRoot ? o = xi([ t ], r.includeContainer, { filter: Sp.bind(null, r), flatten: !1, getShadowRoot: r.getShadowRoot, shadowRootFilter: m2 }) : o = PO(t, r.includeContainer, Sp.bind(null, r)), qO(o); }, RO = function(t, r) { r = r || {}; var o; return r.getShadowRoot ? o = xi([ t ], r.includeContainer, { filter: wi.bind(null, r), flatten: !0, getShadowRoot: r.getShadowRoot }) : o = PO(t, r.includeContainer, wi.bind(null, r)), o; }, qp = function(t, r) { if (r = r || {}, !t) throw new Error("No node provided"); return Hr.call(t, vi) === !1 ? !1 : Sp(r, t); }, h2 = OO.concat("iframe:not([inert]):not([inert] *)").join(","), LV = function(t, r) { if (r = r || {}, !t) throw new Error("No node provided"); return Hr.call(t, h2) === !1 ? !1 : wi(r, t); }; }); function Oi() { let e = navigator.userAgentData; return e != null && e.platform ? e.platform : navigator.platform; } _c337 = Oi; function Mi() { let e = navigator.userAgentData; return e && Array.isArray(e.brands) ? e.brands.map((t)=>{ let { brand: r, version: o } = t; return r + "/" + o; }).join(" ") : navigator.userAgent; } _c338 = Mi; function Np() { return /apple/i.test(navigator.vendor); } _c339 = Np; function Cp() { let e = /android/i; return e.test(Oi()) || e.test(Mi()); } _c340 = Cp; function TO() { return Oi().toLowerCase().startsWith("mac") && !navigator.maxTouchPoints; } _c341 = TO; function CO() { return Mi().includes("jsdom/"); } _c342 = CO; function Kt(e) { let t = e.activeElement; for(; ((r = t) == null || (r = r.shadowRoot) == null ? void 0 : r.activeElement) != null;){ var r; t = t.shadowRoot.activeElement; } return t; } _c343 = Kt; function st(e, t) { if (!e || !t) return !1; let r = t.getRootNode == null ? void 0 : t.getRootNode(); if (e.contains(t)) return !0; if (r && Wr(r)) { let o = t; for(; o;){ if (e === o) return !0; o = o.parentNode || o.host; } } return !1; } function $t(e) { return "composedPath" in e ? e.composedPath()[0] : e.target; } function Pi(e, t) { if (t == null) return !1; if ("composedPath" in e) return e.composedPath().includes(t); let r = e; return r.target != null && t.contains(r.target); } _c344 = Pi; function NO(e) { return e.matches("html,body"); } _c345 = NO; function ft(e) { return e?.ownerDocument || document; } function yi(e) { return ze(e) && e.matches(v2); } function Ei(e) { return e ? e.getAttribute("role") === "combobox" && yi(e) : !1; } _c346 = Ei; function YO(e) { if (!e || CO()) return !0; try { return e.matches(":focus-visible"); } catch { return !0; } } _c347 = YO; function co(e) { return e ? e.hasAttribute(IO) ? e : e.querySelector("[" + IO + "]") || e : null; } function _r(e, t, r) { return r === void 0 && (r = !0), e.filter((a)=>{ var c; return a.parentId === t && (!r || ((c = a.context) == null ? void 0 : c.open)); }).flatMap((a)=>[ a, ..._r(e, a.id, r) ]); } function jO(e, t) { let r, o = -1; function a(c, l) { l > o && (r = c, o = l), _r(e, c).forEach((m)=>{ a(m.id, l + 1); }); } return a(t, 0), e.find((c)=>c.id === r); } function Yp(e, t) { var r; let o = [], a = (r = e.find((c)=>c.id === t)) == null ? void 0 : r.parentId; for(; a;){ let c = e.find((l)=>l.id === a); a = c?.parentId, c && (o = o.concat(c)); } return o; } _c348 = Yp; function dt(e) { e.preventDefault(), e.stopPropagation(); } function FO(e) { return "nativeEvent" in e; } _c349 = FO; function jp(e) { return e.mozInputSource === 0 && e.isTrusted ? !0 : Cp() && e.pointerType ? e.type === "click" && e.buttons === 1 : e.detail === 0 && !e.pointerType; } function Fp(e) { return CO() ? !1 : !Cp() && e.width === 0 && e.height === 0 || Cp() && e.width === 1 && e.height === 1 && e.pressure === 0 && e.detail === 0 && e.pointerType === "mouse" || e.width < 1 && e.height < 1 && e.pressure === 0 && e.detail === 0 && e.pointerType === "touch"; } _c350 = Fp; function Br(e, t) { let r = [ "mouse", "pen" ]; return t || r.push("", void 0), r.includes(e); } _c351 = Br; function ut(e) { _s(); let t = react__WEBPACK_IMPORTED_MODULE_0__.useRef(e); return be(()=>{ t.current = e; }), t; } _s(ut, "MWmK3j+AMI0jPG0LB/YHWPrh2Ng="); function Le(e) { _s1(); let t = react__WEBPACK_IMPORTED_MODULE_0__.useRef({ "Le.useRef[t]": ()=>{} }["Le.useRef[t]"]); return M2(()=>{ t.current = e; }), react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "Le.useCallback": function() { for(var r = arguments.length, o = new Array(r), a = 0; a < r; a++)o[a] = arguments[a]; return t.current == null ? void 0 : t.current(...o); } }["Le.useCallback"], []); } _s1(Le, "CMuZpLH3GM5UFzARLkS5rclrf4s="); _c352 = Le; function Di(e, t, r) { return Math.floor(e / t) !== r; } _c353 = Di; function Qr(e, t) { return t < 0 || t >= e.current.length; } _c354 = Qr; function lo(e, t) { return lt(e, { disabledIndices: t }); } function Si(e, t) { return lt(e, { decrement: !0, startingIndex: e.current.length, disabledIndices: t }); } _c355 = Si; function lt(e, t) { let { startingIndex: r = -1, decrement: o = !1, disabledIndices: a, amount: c = 1 } = t === void 0 ? {} : t, l = r; do l += o ? -c : c; while (l >= 0 && l <= e.current.length - 1 && xr(e, l, a)); return l; } function Lp(e, t) { let { event: r, orientation: o, loop: a, rtl: c, cols: l, disabledIndices: f, minIndex: m, maxIndex: h, prevIndex: g, stopEvent: x = !1 } = t, P = g; if (r.key === b2) { if (x && dt(r), g === -1) P = h; else if (P = lt(e, { startingIndex: P, amount: l, decrement: !0, disabledIndices: f }), a && (g - l < m || P < 0)) { let D = g % l, y = h % l, O = h - (y - D); y === D ? P = h : P = y > D ? O : O - l; } Qr(e, P) && (P = g); } if (r.key === _2 && (x && dt(r), g === -1 ? P = m : (P = lt(e, { startingIndex: g, amount: l, disabledIndices: f }), a && g + l > h && (P = lt(e, { startingIndex: g % l - l, amount: l, disabledIndices: f }))), Qr(e, P) && (P = g)), o === "both") { let D = br(g / l); r.key === (c ? Ip : Tp) && (x && dt(r), g % l !== l - 1 ? (P = lt(e, { startingIndex: g, disabledIndices: f }), a && Di(P, l, D) && (P = lt(e, { startingIndex: g - g % l - 1, disabledIndices: f }))) : a && (P = lt(e, { startingIndex: g - g % l - 1, disabledIndices: f })), Di(P, l, D) && (P = g)), r.key === (c ? Tp : Ip) && (x && dt(r), g % l !== 0 ? (P = lt(e, { startingIndex: g, decrement: !0, disabledIndices: f }), a && Di(P, l, D) && (P = lt(e, { startingIndex: g + (l - g % l), decrement: !0, disabledIndices: f }))) : a && (P = lt(e, { startingIndex: g + (l - g % l), decrement: !0, disabledIndices: f })), Di(P, l, D) && (P = g)); let y = br(h / l) === D; Qr(e, P) && (a && y ? P = r.key === (c ? Tp : Ip) ? h : lt(e, { startingIndex: g - g % l - 1, disabledIndices: f }) : P = g); } return P; } _c356 = Lp; function Wp(e, t, r) { let o = [], a = 0; return e.forEach((c, l)=>{ let { width: f, height: m } = c; f > t; let h = !1; for(r && (a = 0); !h;){ let g = []; for(let x = 0; x < f; x++)for(let P = 0; P < m; P++)g.push(a + x + P * t); a % t + f <= t && g.every((x)=>o[x] == null) ? (g.forEach((x)=>{ o[x] = l; }), h = !0) : a++; } }), [ ...o ]; } _c357 = Wp; function Ap(e, t, r, o, a) { if (e === -1) return -1; let c = r.indexOf(e), l = t[e]; switch(a){ case "tl": return c; case "tr": return l ? c + l.width - 1 : c; case "bl": return l ? c + (l.height - 1) * o : c; case "br": return r.lastIndexOf(e); } } _c358 = Ap; function Hp(e, t) { return t.flatMap((r, o)=>e.includes(r) ? [ o ] : []); } _c359 = Hp; function xr(e, t, r) { if (typeof r == "function") return r(t); if (r) return r.includes(t); let o = e.current[t]; return o == null || o.hasAttribute("disabled") || o.getAttribute("aria-disabled") === "true"; } function LO(e, t) { let r = hn(e, vn()), o = r.length; if (o === 0) return; let a = Kt(ft(e)), c = r.indexOf(a), l = c === -1 ? t === 1 ? 0 : o - 1 : c + t; return r[l]; } _c360 = LO; function Qp(e) { return LO(ft(e).body, 1) || e; } _c361 = Qp; function Bp(e) { return LO(ft(e).body, -1) || e; } _c362 = Bp; function bn(e, t) { let r = t || e.currentTarget, o = e.relatedTarget; return !o || !st(r, o); } function WO(e) { hn(e, vn()).forEach((r)=>{ r.dataset.tabindex = r.getAttribute("tabindex") || "", r.setAttribute("tabindex", "-1"); }); } _c363 = WO; function Vp(e) { e.querySelectorAll("[data-tabindex]").forEach((r)=>{ let o = r.dataset.tabindex; delete r.dataset.tabindex, o ? r.setAttribute("tabindex", o) : r.removeAttribute("tabindex"); }); } _c364 = Vp; var IO, v2, Ip, Tp, b2, _2, x2, w2, be, D2, O2, M2, vn, AO = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ ao(); mn(); Rp(); IO = "data-floating-ui-focusable", v2 = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])", Ip = "ArrowLeft", Tp = "ArrowRight", b2 = "ArrowUp", _2 = "ArrowDown"; x2 = typeof document < "u", w2 = function() {}, be = x2 ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : w2, D2 = { .../*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2))) }; O2 = D2.useInsertionEffect, M2 = O2 || ((e)=>e()); vn = ()=>({ getShadowRoot: !0, displayCheck: typeof ResizeObserver == "function" && ResizeObserver.toString().includes("[native code]") ? "full" : "none" }); }); function HO(e, t, r) { let { reference: o, floating: a } = e, c = jt(t), l = hi(t), f = mi(l), m = Et(t), h = c === "y", g = o.x + o.width / 2 - a.width / 2, x = o.y + o.height / 2 - a.height / 2, P = o[f] / 2 - a[f] / 2, D; switch(m){ case "top": D = { x: g, y: o.y - a.height }; break; case "bottom": D = { x: g, y: o.y + o.height }; break; case "right": D = { x: o.x + o.width, y: x }; break; case "left": D = { x: o.x - a.width, y: x }; break; default: D = { x: o.x, y: o.y }; } switch(Yt(t)){ case "start": D[l] -= P * (r && h ? -1 : 1); break; case "end": D[l] += P * (r && h ? -1 : 1); break; } return D; } _c365 = HO; async function Kp(e, t) { var r; t === void 0 && (t = {}); let { x: o, y: a, platform: c, rects: l, elements: f, strategy: m } = e, { boundary: h = "clippingAncestors", rootBoundary: g = "viewport", elementContext: x = "floating", altBoundary: P = !1, padding: D = 0 } = yt(t, e), y = gi(D), E = f[P ? x === "floating" ? "reference" : "floating" : x], N = ar(await c.getClippingRect({ element: (r = await (c.isElement == null ? void 0 : c.isElement(E))) == null || r ? E : E.contextElement || await (c.getDocumentElement == null ? void 0 : c.getDocumentElement(f.floating)), boundary: h, rootBoundary: g, strategy: m })), T = x === "floating" ? { x: o, y: a, width: l.floating.width, height: l.floating.height } : l.reference, Y = await (c.getOffsetParent == null ? void 0 : c.getOffsetParent(f.floating)), F = await (c.isElement == null ? void 0 : c.isElement(Y)) ? await (c.getScale == null ? void 0 : c.getScale(Y)) || { x: 1, y: 1 } : { x: 1, y: 1 }, V = ar(c.convertOffsetParentRelativeRectToViewportRelativeRect ? await c.convertOffsetParentRelativeRectToViewportRelativeRect({ elements: f, rect: T, offsetParent: Y, strategy: m }) : T); return { top: (N.top - V.top + y.top) / F.y, bottom: (V.bottom - N.bottom + y.bottom) / F.y, left: (N.left - V.left + y.left) / F.x, right: (V.right - N.right + y.right) / F.x }; } _c366 = Kp; function y2(e, t, r) { return (e ? [ ...r.filter((a)=>Yt(a) === e), ...r.filter((a)=>Yt(a) !== e) ] : r.filter((a)=>Et(a) === a)).filter((a)=>e ? Yt(a) === e || (t ? so(a) !== a : !1) : !0); } function QO(e, t) { return { top: e.top - t.height, right: e.right - t.width, bottom: e.bottom - t.height, left: e.left - t.width }; } _c367 = QO; function BO(e) { return Pp.some((t)=>e[t] >= 0); } _c368 = BO; function XO(e) { let t = Ot(...e.map((c)=>c.left)), r = Ot(...e.map((c)=>c.top)), o = Ze(...e.map((c)=>c.right)), a = Ze(...e.map((c)=>c.bottom)); return { x: t, y: r, width: o - t, height: a - r }; } _c369 = XO; function E2(e) { let t = e.slice().sort((a, c)=>a.y - c.y), r = [], o = null; for(let a = 0; a < t.length; a++){ let c = t[a]; !o || c.y - o.y > o.height / 2 ? r.push([ c ]) : r[r.length - 1].push(c), o = c; } return r.map((a)=>ar(XO(a))); } _c370 = E2; async function S2(e, t) { let { placement: r, platform: o, elements: a } = e, c = await (o.isRTL == null ? void 0 : o.isRTL(a.floating)), l = Et(r), f = Yt(r), m = jt(r) === "y", h = GO.has(l) ? -1 : 1, g = c && m ? -1 : 1, x = yt(t, e), { mainAxis: P, crossAxis: D, alignmentAxis: y } = typeof x == "number" ? { mainAxis: x, crossAxis: 0, alignmentAxis: null } : { mainAxis: x.mainAxis || 0, crossAxis: x.crossAxis || 0, alignmentAxis: x.alignmentAxis }; return f && typeof y == "number" && (D = f === "end" ? y * -1 : y), m ? { x: D * g, y: P * h } : { x: P * h, y: D * g }; } _c371 = S2; var P2, VO, KO, $O, zO, UO, ZO, GO, JO, kO, eM, tM, rM = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ mn(); mn(); P2 = 50, VO = async (e, t, r)=>{ let { placement: o = "bottom", strategy: a = "absolute", middleware: c = [], platform: l } = r, f = l.detectOverflow ? l : { ...l, detectOverflow: Kp }, m = await (l.isRTL == null ? void 0 : l.isRTL(t)), h = await l.getElementRects({ reference: e, floating: t, strategy: a }), { x: g, y: x } = HO(h, o, m), P = o, D = 0, y = {}; for(let O = 0; O < c.length; O++){ let E = c[O]; if (!E) continue; let { name: N, fn: T } = E, { x: Y, y: F, data: V, reset: B } = await T({ x: g, y: x, initialPlacement: o, placement: P, strategy: a, middlewareData: y, rects: h, platform: f, elements: { reference: e, floating: t } }); g = Y ?? g, x = F ?? x, y[N] = { ...y[N], ...V }, B && D < P2 && (D++, typeof B == "object" && (B.placement && (P = B.placement), B.rects && (h = B.rects === !0 ? await l.getElementRects({ reference: e, floating: t, strategy: a }) : B.rects), { x: g, y: x } = HO(h, P, m)), O = -1); } return { x: g, y: x, placement: P, strategy: a, middlewareData: y }; }, KO = (e)=>({ name: "arrow", options: e, async fn (t) { let { x: r, y: o, placement: a, rects: c, platform: l, elements: f, middlewareData: m } = t, { element: h, padding: g = 0 } = yt(e, t) || {}; if (h == null) return {}; let x = gi(g), P = { x: r, y: o }, D = hi(a), y = mi(D), O = await l.getDimensions(h), E = D === "y", N = E ? "top" : "left", T = E ? "bottom" : "right", Y = E ? "clientHeight" : "clientWidth", F = c.reference[y] + c.reference[D] - P[D] - c.floating[y], V = P[D] - c.reference[D], B = await (l.getOffsetParent == null ? void 0 : l.getOffsetParent(h)), $ = B ? B[Y] : 0; (!$ || !await (l.isElement == null ? void 0 : l.isElement(B))) && ($ = f.floating[Y] || c.floating[y]); let z = F / 2 - V / 2, Z = $ / 2 - O[y] / 2 - 1, Q = Ot(x[N], Z), oe = Ot(x[T], Z), k = Q, G = $ - O[y] - oe, S = $ / 2 - O[y] / 2 + z, H = fi(k, S, G), re = !m.arrow && Yt(a) != null && S !== H && c.reference[y] / 2 - (S < k ? Q : oe) - O[y] / 2 < 0, K = re ? S < k ? S - k : S - G : 0; return { [D]: P[D] + K, data: { [D]: H, centerOffset: S - H - K, ...re && { alignmentOffset: K } }, reset: re }; } }); $O = function(e) { return e === void 0 && (e = {}), { name: "autoPlacement", options: e, async fn (t) { var r, o, a; let { rects: c, middlewareData: l, placement: f, platform: m, elements: h } = t, { crossAxis: g = !1, alignment: x, allowedPlacements: P = yp, autoAlignment: D = !0, ...y } = yt(e, t), O = x !== void 0 || P === yp ? y2(x || null, D, P) : P, E = await m.detectOverflow(t, y), N = ((r = l.autoPlacement) == null ? void 0 : r.index) || 0, T = O[N]; if (T == null) return {}; let Y = Ep(T, c, await (m.isRTL == null ? void 0 : m.isRTL(h.floating))); if (f !== T) return { reset: { placement: O[0] } }; let F = [ E[Et(T)], E[Y[0]], E[Y[1]] ], V = [ ...((o = l.autoPlacement) == null ? void 0 : o.overflows) || [], { placement: T, overflows: F } ], B = O[N + 1]; if (B) return { data: { index: N + 1, overflows: V }, reset: { placement: B } }; let $ = V.map((Q)=>{ let oe = Yt(Q.placement); return [ Q.placement, oe && g ? Q.overflows.slice(0, 2).reduce((k, G)=>k + G, 0) : Q.overflows[0], Q.overflows ]; }).sort((Q, oe)=>Q[1] - oe[1]), Z = ((a = $.filter((Q)=>Q[2].slice(0, Yt(Q[0]) ? 2 : 3).every((oe)=>oe <= 0))[0]) == null ? void 0 : a[0]) || $[0][0]; return Z !== f ? { data: { index: N + 1, overflows: V }, reset: { placement: Z } } : {}; } }; }, zO = function(e) { return e === void 0 && (e = {}), { name: "flip", options: e, async fn (t) { var r, o; let { placement: a, middlewareData: c, rects: l, initialPlacement: f, platform: m, elements: h } = t, { mainAxis: g = !0, crossAxis: x = !0, fallbackPlacements: P, fallbackStrategy: D = "bestFit", fallbackAxisSideDirection: y = "none", flipAlignment: O = !0, ...E } = yt(e, t); if ((r = c.arrow) != null && r.alignmentOffset) return {}; let N = Et(a), T = jt(f), Y = Et(f) === f, F = await (m.isRTL == null ? void 0 : m.isRTL(h.floating)), V = P || (Y || !O ? [ uo(f) ] : xO(f)), B = y !== "none"; !P && B && V.push(...wO(f, O, y, F)); let $ = [ f, ...V ], z = await m.detectOverflow(t, E), Z = [], Q = ((o = c.flip) == null ? void 0 : o.overflows) || []; if (g && Z.push(z[N]), x) { let S = Ep(a, l, F); Z.push(z[S[0]], z[S[1]]); } if (Q = [ ...Q, { placement: a, overflows: Z } ], !Z.every((S)=>S <= 0)) { var oe, k; let S = (((oe = c.flip) == null ? void 0 : oe.index) || 0) + 1, H = $[S]; if (H && (!(x === "alignment" ? T !== jt(H) : !1) || Q.every((j)=>jt(j.placement) === T ? j.overflows[0] > 0 : !0))) return { data: { index: S, overflows: Q }, reset: { placement: H } }; let re = (k = Q.filter((K)=>K.overflows[0] <= 0).sort((K, j)=>K.overflows[1] - j.overflows[1])[0]) == null ? void 0 : k.placement; if (!re) switch(D){ case "bestFit": { var G; let K = (G = Q.filter((j)=>{ if (B) { let U = jt(j.placement); return U === T || U === "y"; } return !0; }).map((j)=>[ j.placement, j.overflows.filter((U)=>U > 0).reduce((U, ae)=>U + ae, 0) ]).sort((j, U)=>j[1] - U[1])[0]) == null ? void 0 : G[0]; K && (re = K); break; } case "initialPlacement": re = f; break; } if (a !== re) return { reset: { placement: re } }; } return {}; } }; }; UO = function(e) { return e === void 0 && (e = {}), { name: "hide", options: e, async fn (t) { let { rects: r, platform: o } = t, { strategy: a = "referenceHidden", ...c } = yt(e, t); switch(a){ case "referenceHidden": { let l = await o.detectOverflow(t, { ...c, elementContext: "reference" }), f = QO(l, r.reference); return { data: { referenceHiddenOffsets: f, referenceHidden: BO(f) } }; } case "escaped": { let l = await o.detectOverflow(t, { ...c, altBoundary: !0 }), f = QO(l, r.floating); return { data: { escapedOffsets: f, escaped: BO(f) } }; } default: return {}; } } }; }; ZO = function(e) { return e === void 0 && (e = {}), { name: "inline", options: e, async fn (t) { let { placement: r, elements: o, rects: a, platform: c, strategy: l } = t, { padding: f = 2, x: m, y: h } = yt(e, t), g = Array.from(await (c.getClientRects == null ? void 0 : c.getClientRects(o.reference)) || []), x = E2(g), P = ar(XO(g)), D = gi(f); function y() { if (x.length === 2 && x[0].left > x[1].right && m != null && h != null) return x.find((E)=>m > E.left - D.left && m < E.right + D.right && h > E.top - D.top && h < E.bottom + D.bottom) || P; if (x.length >= 2) { if (jt(r) === "y") { let Q = x[0], oe = x[x.length - 1], k = Et(r) === "top", G = Q.top, S = oe.bottom, H = k ? Q.left : oe.left, re = k ? Q.right : oe.right, K = re - H, j = S - G; return { top: G, bottom: S, left: H, right: re, width: K, height: j, x: H, y: G }; } let E = Et(r) === "left", N = Ze(...x.map((Q)=>Q.right)), T = Ot(...x.map((Q)=>Q.left)), Y = x.filter((Q)=>E ? Q.left === T : Q.right === N), F = Y[0].top, V = Y[Y.length - 1].bottom, B = T, $ = N, z = $ - B, Z = V - F; return { top: F, bottom: V, left: B, right: $, width: z, height: Z, x: B, y: F }; } return P; } let O = await c.getElementRects({ reference: { getBoundingClientRect: y }, floating: o.floating, strategy: l }); return a.reference.x !== O.reference.x || a.reference.y !== O.reference.y || a.reference.width !== O.reference.width || a.reference.height !== O.reference.height ? { reset: { rects: O } } : {}; } }; }, GO = new Set([ "left", "top" ]); JO = function(e) { return e === void 0 && (e = 0), { name: "offset", options: e, async fn (t) { var r, o; let { x: a, y: c, placement: l, middlewareData: f } = t, m = await S2(t, e); return l === ((r = f.offset) == null ? void 0 : r.placement) && (o = f.arrow) != null && o.alignmentOffset ? {} : { x: a + m.x, y: c + m.y, data: { ...m, placement: l } }; } }; }, kO = function(e) { return e === void 0 && (e = {}), { name: "shift", options: e, async fn (t) { let { x: r, y: o, placement: a, platform: c } = t, { mainAxis: l = !0, crossAxis: f = !1, limiter: m = { fn: (N)=>{ let { x: T, y: Y } = N; return { x: T, y: Y }; } }, ...h } = yt(e, t), g = { x: r, y: o }, x = await c.detectOverflow(t, h), P = jt(Et(a)), D = pi(P), y = g[D], O = g[P]; if (l) { let N = D === "y" ? "top" : "left", T = D === "y" ? "bottom" : "right", Y = y + x[N], F = y - x[T]; y = fi(Y, y, F); } if (f) { let N = P === "y" ? "top" : "left", T = P === "y" ? "bottom" : "right", Y = O + x[N], F = O - x[T]; O = fi(Y, O, F); } let E = m.fn({ ...t, [D]: y, [P]: O }); return { ...E, data: { x: E.x - r, y: E.y - o, enabled: { [D]: l, [P]: f } } }; } }; }, eM = function(e) { return e === void 0 && (e = {}), { options: e, fn (t) { let { x: r, y: o, placement: a, rects: c, middlewareData: l } = t, { offset: f = 0, mainAxis: m = !0, crossAxis: h = !0 } = yt(e, t), g = { x: r, y: o }, x = jt(a), P = pi(x), D = g[P], y = g[x], O = yt(f, t), E = typeof O == "number" ? { mainAxis: O, crossAxis: 0 } : { mainAxis: 0, crossAxis: 0, ...O }; if (m) { let Y = P === "y" ? "height" : "width", F = c.reference[P] - c.floating[Y] + E.mainAxis, V = c.reference[P] + c.reference[Y] - E.mainAxis; D < F ? D = F : D > V && (D = V); } if (h) { var N, T; let Y = P === "y" ? "width" : "height", F = GO.has(Et(a)), V = c.reference[x] - c.floating[Y] + (F && ((N = l.offset) == null ? void 0 : N[x]) || 0) + (F ? 0 : E.crossAxis), B = c.reference[x] + c.reference[Y] + (F ? 0 : ((T = l.offset) == null ? void 0 : T[x]) || 0) - (F ? E.crossAxis : 0); y < V ? y = V : y > B && (y = B); } return { [P]: D, [x]: y }; } }; }, tM = function(e) { return e === void 0 && (e = {}), { name: "size", options: e, async fn (t) { var r, o; let { placement: a, rects: c, platform: l, elements: f } = t, { apply: m = ()=>{}, ...h } = yt(e, t), g = await l.detectOverflow(t, h), x = Et(a), P = Yt(a), D = jt(a) === "y", { width: y, height: O } = c.floating, E, N; x === "top" || x === "bottom" ? (E = x, N = P === (await (l.isRTL == null ? void 0 : l.isRTL(f.floating)) ? "start" : "end") ? "left" : "right") : (N = x, E = P === "end" ? "top" : "bottom"); let T = O - g.top - g.bottom, Y = y - g.left - g.right, F = Ot(O - g[E], T), V = Ot(y - g[N], Y), B = !t.middlewareData.shift, $ = F, z = V; if ((r = t.middlewareData.shift) != null && r.enabled.x && (z = Y), (o = t.middlewareData.shift) != null && o.enabled.y && ($ = T), B && !P) { let Q = Ze(g.left, 0), oe = Ze(g.right, 0), k = Ze(g.top, 0), G = Ze(g.bottom, 0); D ? z = y - 2 * (Q !== 0 || oe !== 0 ? Q + oe : Ze(g.left, g.right)) : $ = O - 2 * (k !== 0 || G !== 0 ? k + G : Ze(g.top, g.bottom)); } await m({ ...t, availableWidth: z, availableHeight: $ }); let Z = await l.getDimensions(f.floating); return y !== Z.width || O !== Z.height ? { reset: { rects: !0 } } : {}; } }; }; }); function aM(e) { let t = Dt(e), r = parseFloat(t.width) || 0, o = parseFloat(t.height) || 0, a = ze(e), c = a ? e.offsetWidth : r, l = a ? e.offsetHeight : o, f = Ar(r) !== c || Ar(o) !== l; return f && (r = c, o = l), { width: r, height: o, $: f }; } function zp(e) { return Ne(e) ? e : e.contextElement; } function _n(e) { let t = zp(e); if (!ze(t)) return Vt(1); let r = t.getBoundingClientRect(), { width: o, height: a, $: c } = aM(t), l = (c ? Ar(r.width) : r.width) / o, f = (c ? Ar(r.height) : r.height) / a; return (!l || !Number.isFinite(l)) && (l = 1), (!f || !Number.isFinite(f)) && (f = 1), { x: l, y: f }; } function sM(e) { let t = gt(e); return !pn() || !t.visualViewport ? q2 : { x: t.visualViewport.offsetLeft, y: t.visualViewport.offsetTop }; } function R2(e, t, r) { return t === void 0 && (t = !1), !r || t && r !== gt(e) ? !1 : t; } _c372 = R2; function Vr(e, t, r, o) { t === void 0 && (t = !1), r === void 0 && (r = !1); let a = e.getBoundingClientRect(), c = zp(e), l = Vt(1); t && (o ? Ne(o) && (l = _n(o)) : l = _n(e)); let f = R2(c, r, o) ? sM(c) : Vt(0), m = (a.left + f.x) / l.x, h = (a.top + f.y) / l.y, g = a.width / l.x, x = a.height / l.y; if (c) { let P = gt(c), D = o && Ne(o) ? gt(o) : o, y = P, O = di(y); for(; O && o && D !== y;){ let E = _n(O), N = O.getBoundingClientRect(), T = Dt(O), Y = N.left + (O.clientLeft + parseFloat(T.paddingLeft)) * E.x, F = N.top + (O.clientTop + parseFloat(T.paddingTop)) * E.y; m *= E.x, h *= E.y, g *= E.x, x *= E.y, m += Y, h += F, y = gt(O), O = di(y); } } return ar({ width: g, height: x, x: m, y: h }); } _c373 = Vr; function qi(e, t) { let r = io(e).scrollLeft; return t ? t.left + r : Vr(Qt(e)).left + r; } function uM(e, t) { let r = e.getBoundingClientRect(), o = r.left + t.scrollLeft - qi(e, r), a = r.top + t.scrollTop; return { x: o, y: a }; } function I2(e) { let { elements: t, rect: r, offsetParent: o, strategy: a } = e, c = a === "fixed", l = Qt(o), f = t ? oo(t.floating) : !1; if (o === l || f && c) return r; let m = { scrollLeft: 0, scrollTop: 0 }, h = Vt(1), g = Vt(0), x = ze(o); if ((x || !x && !c) && ((Gt(o) !== "body" || fn(l)) && (m = io(o)), x)) { let D = Vr(o); h = _n(o), g.x = D.x + o.clientLeft, g.y = D.y + o.clientTop; } let P = l && !x && !c ? uM(l, m) : Vt(0); return { width: r.width * h.x, height: r.height * h.y, x: r.x * h.x - m.scrollLeft * h.x + g.x + P.x, y: r.y * h.y - m.scrollTop * h.y + g.y + P.y }; } _c374 = I2; function T2(e) { return Array.from(e.getClientRects()); } _c375 = T2; function C2(e) { let t = Qt(e), r = io(e), o = e.ownerDocument.body, a = Ze(t.scrollWidth, t.clientWidth, o.scrollWidth, o.clientWidth), c = Ze(t.scrollHeight, t.clientHeight, o.scrollHeight, o.clientHeight), l = -r.scrollLeft + qi(e), f = -r.scrollTop; return Dt(o).direction === "rtl" && (l += Ze(t.clientWidth, o.clientWidth) - a), { width: a, height: c, x: l, y: f }; } _c376 = C2; function N2(e, t) { let r = gt(e), o = Qt(e), a = r.visualViewport, c = o.clientWidth, l = o.clientHeight, f = 0, m = 0; if (a) { c = a.width, l = a.height; let g = pn(); (!g || g && t === "fixed") && (f = a.offsetLeft, m = a.offsetTop); } let h = qi(o); if (h <= 0) { let g = o.ownerDocument, x = g.body, P = getComputedStyle(x), D = g.compatMode === "CSS1Compat" && parseFloat(P.marginLeft) + parseFloat(P.marginRight) || 0, y = Math.abs(o.clientWidth - x.clientWidth - D); y <= nM && (c -= y); } else h <= nM && (c += h); return { width: c, height: l, x: f, y: m }; } _c377 = N2; function Y2(e, t) { let r = Vr(e, !0, t === "fixed"), o = r.top + e.clientTop, a = r.left + e.clientLeft, c = ze(e) ? _n(e) : Vt(1), l = e.clientWidth * c.x, f = e.clientHeight * c.y, m = a * c.x, h = o * c.y; return { width: l, height: f, x: m, y: h }; } _c378 = Y2; function oM(e, t, r) { let o; if (t === "viewport") o = N2(e, r); else if (t === "document") o = C2(Qt(e)); else if (Ne(t)) o = Y2(t, r); else { let a = sM(e); o = { x: t.x - a.x, y: t.y - a.y, width: t.width, height: t.height }; } return ar(o); } function cM(e, t) { let r = Ht(e); return r === t || !Ne(r) || Bt(r) ? !1 : Dt(r).position === "fixed" || cM(r, t); } function j2(e, t) { let r = t.get(e); if (r) return r; let o = Pt(e, [], !1).filter((f)=>Ne(f) && Gt(f) !== "body"), a = null, c = Dt(e).position === "fixed", l = c ? Ht(e) : e; for(; Ne(l) && !Bt(l);){ let f = Dt(l), m = li(l); !m && f.position === "fixed" && (a = null), (c ? !m && !a : !m && f.position === "static" && !!a && (a.position === "absolute" || a.position === "fixed") || fn(l) && !m && cM(e, l)) ? o = o.filter((g)=>g !== l) : a = f, l = Ht(l); } return t.set(e, o), o; } function F2(e) { let { element: t, boundary: r, rootBoundary: o, strategy: a } = e, l = [ ...r === "clippingAncestors" ? oo(t) ? [] : j2(t, this._c) : [].concat(r), o ], f = oM(t, l[0], a), m = f.top, h = f.right, g = f.bottom, x = f.left; for(let P = 1; P < l.length; P++){ let D = oM(t, l[P], a); m = Ze(D.top, m), h = Ot(D.right, h), g = Ot(D.bottom, g), x = Ze(D.left, x); } return { width: h - x, height: g - m, x, y: m }; } _c379 = F2; function L2(e) { let { width: t, height: r } = aM(e); return { width: t, height: r }; } _c380 = L2; function W2(e, t, r) { let o = ze(t), a = Qt(t), c = r === "fixed", l = Vr(e, !0, c, t), f = { scrollLeft: 0, scrollTop: 0 }, m = Vt(0); function h() { m.x = qi(a); } if (o || !o && !c) if ((Gt(t) !== "body" || fn(a)) && (f = io(t)), o) { let D = Vr(t, !0, c, t); m.x = D.x + t.clientLeft, m.y = D.y + t.clientTop; } else a && h(); c && !o && a && h(); let g = a && !o && !c ? uM(a, f) : Vt(0), x = l.left + f.scrollLeft - m.x - g.x, P = l.top + f.scrollTop - m.y - g.y; return { x, y: P, width: l.width, height: l.height }; } _c381 = W2; function $p(e) { return Dt(e).position === "static"; } function iM(e, t) { if (!ze(e) || Dt(e).position === "fixed") return null; if (t) return t(e); let r = e.offsetParent; return Qt(e) === r && (r = r.ownerDocument.body), r; } function lM(e, t) { let r = gt(e); if (oo(e)) return r; if (!ze(e)) { let a = Ht(e); for(; a && !Bt(a);){ if (Ne(a) && !$p(a)) return a; a = Ht(a); } return r; } let o = iM(e, t); for(; o && mO(o) && $p(o);)o = iM(o, t); return o && Bt(o) && $p(o) && !li(o) ? r : o || hO(e) || r; } function H2(e) { return Dt(e).direction === "rtl"; } _c382 = H2; function dM(e, t) { return e.x === t.x && e.y === t.y && e.width === t.width && e.height === t.height; } function Q2(e, t) { let r = null, o, a = Qt(e); function c() { var f; clearTimeout(o), (f = r) == null || f.disconnect(), r = null; } function l(f, m) { f === void 0 && (f = !1), m === void 0 && (m = 1), c(); let h = e.getBoundingClientRect(), { left: g, top: x, width: P, height: D } = h; if (f || t(), !P || !D) return; let y = br(x), O = br(a.clientWidth - (g + P)), E = br(a.clientHeight - (x + D)), N = br(g), Y = { rootMargin: -y + "px " + -O + "px " + -E + "px " + -N + "px", threshold: Ze(0, Ot(1, m)) || 1 }, F = !0; function V(B) { let $ = B[0].intersectionRatio; if ($ !== m) { if (!F) return l(); $ ? l(!1, $) : o = setTimeout(()=>{ l(!1, 1e-7); }, 1e3); } $ === 1 && !dM(h, e.getBoundingClientRect()) && l(), F = !1; } try { r = new IntersectionObserver(V, { ...Y, root: a.ownerDocument }); } catch { r = new IntersectionObserver(V, Y); } r.observe(e); } return l(!0), c; } _c383 = Q2; function Up(e, t, r, o) { o === void 0 && (o = {}); let { ancestorScroll: a = !0, ancestorResize: c = !0, elementResize: l = typeof ResizeObserver == "function", layoutShift: f = typeof IntersectionObserver == "function", animationFrame: m = !1 } = o, h = zp(e), g = a || c ? [ ...h ? Pt(h) : [], ...t ? Pt(t) : [] ] : []; g.forEach((N)=>{ a && N.addEventListener("scroll", r, { passive: !0 }), c && N.addEventListener("resize", r); }); let x = h && f ? Q2(h, r) : null, P = -1, D = null; l && (D = new ResizeObserver((N)=>{ let [T] = N; T && T.target === h && D && t && (D.unobserve(t), cancelAnimationFrame(P), P = requestAnimationFrame(()=>{ var Y; (Y = D) == null || Y.observe(t); })), r(); }), h && !m && D.observe(h), t && D.observe(t)); let y, O = m ? Vr(e) : null; m && E(); function E() { let N = Vr(e); O && !dM(O, N) && r(), O = N, y = requestAnimationFrame(E); } return r(), ()=>{ var N; g.forEach((T)=>{ a && T.removeEventListener("scroll", r), c && T.removeEventListener("resize", r); }), x?.(), (N = D) == null || N.disconnect(), D = null, m && cancelAnimationFrame(y); }; } _c384 = Up; var q2, nM, A2, Ri, Xp, fM, pM, mM, hM, gM, vM, Zp, bM, _M, fo, Gp = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ rM(); mn(); ao(); ao(); q2 = Vt(0); nM = 25; A2 = async function(e) { let t = this.getOffsetParent || lM, r = this.getDimensions, o = await r(e.floating); return { reference: W2(e.reference, await t(e.floating), e.strategy), floating: { x: 0, y: 0, width: o.width, height: o.height } }; }; Ri = { convertOffsetParentRelativeRectToViewportRelativeRect: I2, getDocumentElement: Qt, getClippingRect: F2, getOffsetParent: lM, getElementRects: A2, getClientRects: T2, getDimensions: L2, getScale: _n, isElement: Ne, isRTL: H2 }; Xp = Kp, fM = JO, pM = $O, mM = kO, hM = zO, gM = tM, vM = UO, Zp = KO, bM = ZO, _M = eM, fo = (e, t, r)=>{ let o = new Map, a = { platform: Ri, ...r }, c = { ...a.platform, _c: o }; return VO(e, t, { ...a, platform: c }); }; }); function Ti(e, t) { if (e === t) return !0; if (typeof e != typeof t) return !1; if (typeof e == "function" && e.toString() === t.toString()) return !0; let r, o, a; if (e && t && typeof e == "object") { if (Array.isArray(e)) { if (r = e.length, r !== t.length) return !1; for(o = r; o-- !== 0;)if (!Ti(e[o], t[o])) return !1; return !0; } if (a = Object.keys(e), r = a.length, r !== Object.keys(t).length) return !1; for(o = r; o-- !== 0;)if (!({}).hasOwnProperty.call(t, a[o])) return !1; for(o = r; o-- !== 0;){ let c = a[o]; if (!(c === "_owner" && e.$$typeof) && !Ti(e[c], t[c])) return !1; } return !0; } return e !== e && t !== t; } _c385 = Ti; function DM(e) { return typeof window > "u" ? 1 : (e.ownerDocument.defaultView || window).devicePixelRatio || 1; } _c386 = DM; function xM(e, t) { let r = DM(e); return Math.round(t * r) / r; } function Jp(e) { _s2(); let t = react__WEBPACK_IMPORTED_MODULE_0__.useRef(e); return Ii(()=>{ t.current = e; }), t; } _s2(Jp, "MWmK3j+AMI0jPG0LB/YHWPrh2Ng="); _c387 = Jp; function OM(e) { _s3(); e === void 0 && (e = {}); let { placement: t = "bottom", strategy: r = "absolute", middleware: o = [], platform: a, elements: { reference: c, floating: l } = {}, transform: f = !0, whileElementsMounted: m, open: h } = e, [g, x] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ x: 0, y: 0, strategy: r, placement: t, middlewareData: {}, isPositioned: !1 }), [P, D] = react__WEBPACK_IMPORTED_MODULE_0__.useState(o); Ti(P, o) || D(o); let [y, O] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [E, N] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), T = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "OM.useCallback[T]": (j)=>{ j !== B.current && (B.current = j, O(j)); } }["OM.useCallback[T]"], []), Y = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "OM.useCallback[Y]": (j)=>{ j !== $.current && ($.current = j, N(j)); } }["OM.useCallback[Y]"], []), F = c || y, V = l || E, B = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), $ = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), z = react__WEBPACK_IMPORTED_MODULE_0__.useRef(g), Z = m != null, Q = Jp(m), oe = Jp(a), k = Jp(h), G = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "OM.useCallback[G]": ()=>{ if (!B.current || !$.current) return; let j = { placement: t, strategy: r, middleware: P }; oe.current && (j.platform = oe.current), fo(B.current, $.current, j).then({ "OM.useCallback[G]": (U)=>{ let ae = { ...U, isPositioned: k.current !== !1 }; S.current && !Ti(z.current, ae) && (z.current = ae, react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync({ "OM.useCallback[G]": ()=>{ x(ae); } }["OM.useCallback[G]"])); } }["OM.useCallback[G]"]); } }["OM.useCallback[G]"], [ P, t, r, oe, k ]); Ii(()=>{ h === !1 && z.current.isPositioned && (z.current.isPositioned = !1, x((j)=>({ ...j, isPositioned: !1 }))); }, [ h ]); let S = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1); Ii(()=>(S.current = !0, ()=>{ S.current = !1; }), []), Ii(()=>{ if (F && (B.current = F), V && ($.current = V), F && V) { if (Q.current) return Q.current(F, V, G); G(); } }, [ F, V, G, Q, Z ]); let H = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "OM.useMemo[H]": ()=>({ reference: B, floating: $, setReference: T, setFloating: Y }) }["OM.useMemo[H]"], [ T, Y ]), re = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "OM.useMemo[re]": ()=>({ reference: F, floating: V }) }["OM.useMemo[re]"], [ F, V ]), K = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "OM.useMemo[K]": ()=>{ let j = { position: r, left: 0, top: 0 }; if (!re.floating) return j; let U = xM(re.floating, g.x), ae = xM(re.floating, g.y); return f ? { ...j, transform: "translate(" + U + "px, " + ae + "px)", ...DM(re.floating) >= 1.5 && { willChange: "transform" } } : { position: r, left: U, top: ae }; } }["OM.useMemo[K]"], [ r, f, re.floating, g.x, g.y ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "OM.useMemo": ()=>({ ...g, update: G, refs: H, elements: re, floatingStyles: K }) }["OM.useMemo"], [ g, G, H, re, K ]); } _s3(OM, "iy313s54H+fdWCthB22MNu4uGtw="); _c388 = OM; var V2, K2, Ii, $2, Ci, MM, PM, yM, EM, SM, qM, RM, IM, kp = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ Gp(); Gp(); V2 = typeof document < "u", K2 = function() {}, Ii = V2 ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : K2; $2 = (e)=>{ function t(r) { return ({}).hasOwnProperty.call(r, "current"); } return { name: "arrow", options: e, fn (r) { let { element: o, padding: a } = typeof e == "function" ? e(r) : e; return o && t(o) ? o.current != null ? Zp({ element: o.current, padding: a }).fn(r) : {} : o ? Zp({ element: o, padding: a }).fn(r) : {}; } }; }, Ci = (e, t)=>{ let r = fM(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }, MM = (e, t)=>{ let r = mM(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }, PM = (e, t)=>({ fn: _M(e).fn, options: [ e, t ] }), yM = (e, t)=>{ let r = hM(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }, EM = (e, t)=>{ let r = gM(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }, SM = (e, t)=>{ let r = pM(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }, qM = (e, t)=>{ let r = vM(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }, RM = (e, t)=>{ let r = bM(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }, IM = (e, t)=>{ let r = $2(e); return { name: r.name, fn: r.fn, options: [ e, t ] }; }; }); var OP = {}; (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.d)(OP, { Composite: ()=>Z2, CompositeItem: ()=>G2, FloatingArrow: ()=>rA, FloatingDelayGroup: ()=>sA, FloatingFocusManager: ()=>wA, FloatingList: ()=>oP, FloatingNode: ()=>oA, FloatingOverlay: ()=>OA, FloatingPortal: ()=>vA, FloatingTree: ()=>iA, NextFloatingDelayGroup: ()=>cA, arrow: ()=>IM, autoPlacement: ()=>SM, autoUpdate: ()=>Up, computePosition: ()=>fo, detectOverflow: ()=>Xp, flip: ()=>yM, getOverflowAncestors: ()=>Pt, hide: ()=>qM, inline: ()=>RM, inner: ()=>HA, limitShift: ()=>PM, offset: ()=>Ci, platform: ()=>Ri, safePolygon: ()=>VA, shift: ()=>MM, size: ()=>EM, useClick: ()=>PA, useClientPoint: ()=>EA, useDelayGroup: ()=>uA, useDelayGroupContext: ()=>mP, useDismiss: ()=>RA, useFloating: ()=>IA, useFloatingNodeId: ()=>nA, useFloatingParentNodeId: ()=>Ur, useFloatingPortalNode: ()=>bP, useFloatingRootContext: ()=>xP, useFloatingTree: ()=>Xr, useFocus: ()=>TA, useHover: ()=>aA, useId: ()=>Dn, useInnerOffset: ()=>QA, useInteractions: ()=>CA, useListItem: ()=>iP, useListNavigation: ()=>YA, useMergeRefs: ()=>rP, useNextDelayGroup: ()=>lA, useRole: ()=>FA, useTransitionStatus: ()=>wP, useTransitionStyles: ()=>WA, useTypeahead: ()=>AA }); function rP(e) { _s4(); let t = react__WEBPACK_IMPORTED_MODULE_0__.useRef(void 0), r = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "rP.useCallback[r]": (o)=>{ let a = e.map({ "rP.useCallback[r].a": (c)=>{ if (c != null) { if (typeof c == "function") { let l = c, f = l(o); return typeof f == "function" ? f : ({ "rP.useCallback[r].a": ()=>{ l(null); } })["rP.useCallback[r].a"]; } return c.current = o, ({ "rP.useCallback[r].a": ()=>{ c.current = null; } })["rP.useCallback[r].a"]; } } }["rP.useCallback[r].a"]); return ({ "rP.useCallback[r]": ()=>{ a.forEach({ "rP.useCallback[r]": (c)=>c?.() }["rP.useCallback[r]"]); } })["rP.useCallback[r]"]; } }["rP.useCallback[r]"], e); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "rP.useMemo": ()=>e.every({ "rP.useMemo": (o)=>o == null }["rP.useMemo"]) ? null : ({ "rP.useMemo": (o)=>{ t.current && (t.current(), t.current = void 0), o != null && (t.current = r(o)); } })["rP.useMemo"] }["rP.useMemo"], e); } _s4(rP, "0fDB8S8W+7HwiVbAlrwfMr9F0Zw="); function U2(e, t) { let r = e.compareDocumentPosition(t); return r & Node.DOCUMENT_POSITION_FOLLOWING || r & Node.DOCUMENT_POSITION_CONTAINED_BY ? -1 : r & Node.DOCUMENT_POSITION_PRECEDING || r & Node.DOCUMENT_POSITION_CONTAINS ? 1 : 0; } _c389 = U2; function oP(e) { _s5(); let { children: t, elementsRef: r, labelsRef: o } = e, [a, c] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ "oP.useState": ()=>new Set }["oP.useState"]), l = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "oP.useCallback[l]": (h)=>{ c({ "oP.useCallback[l]": (g)=>new Set(g).add(h) }["oP.useCallback[l]"]); } }["oP.useCallback[l]"], []), f = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "oP.useCallback[f]": (h)=>{ c({ "oP.useCallback[f]": (g)=>{ let x = new Set(g); return x.delete(h), x; } }["oP.useCallback[f]"]); } }["oP.useCallback[f]"], []), m = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "oP.useMemo[m]": ()=>{ let h = new Map; return Array.from(a.keys()).sort(U2).forEach({ "oP.useMemo[m]": (x, P)=>{ h.set(x, P); } }["oP.useMemo[m]"]), h; } }["oP.useMemo[m]"], [ a ]); return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(nP.Provider, { value: react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "oP.useMemo": ()=>({ register: l, unregister: f, map: m, elementsRef: r, labelsRef: o }) }["oP.useMemo"], [ l, f, m, r, o ]), children: t }); } _s5(oP, "L+/u75Z59T6Hpc3htU0UzM7CZBs="); function iP(e) { _s6(); e === void 0 && (e = {}); let { label: t } = e, { register: r, unregister: o, map: a, elementsRef: c, labelsRef: l } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(nP), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), h = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), g = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "iP.useCallback[g]": (x)=>{ if (h.current = x, f !== null && (c.current[f] = x, l)) { var P; let D = t !== void 0; l.current[f] = D ? t : (P = x?.textContent) != null ? P : null; } } }["iP.useCallback[g]"], [ f, c, l, t ]); return be(()=>{ let x = h.current; if (x) return r(x), ()=>{ o(x); }; }, [ r, o ]), be(()=>{ let x = h.current ? a.get(h.current) : null; x != null && m(x); }, [ a ]), react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "iP.useMemo": ()=>({ ref: g, index: f ?? -1 }) }["iP.useMemo"], [ f, g ]); } _s6(iP, "H6O0vqPCblY9CP4jqknZYdh9jes="); function aP(e, t) { return typeof e == "function" ? e(t) : e ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(e, t) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { ...t }); } function eA() { _s7(); let [e, t] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ "eA.useState": ()=>NM ? YM() : void 0 }["eA.useState"]); return be(()=>{ e == null && t(YM()); }, []), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "eA.useEffect": ()=>{ NM = !0; } }["eA.useEffect"], []), e; } _s7(eA, "JOBBNE5uu/t95nkGbFbR3jNoWys="); function lP() { let e = new Map; return { emit (t, r) { var o; (o = e.get(t)) == null || o.forEach((a)=>a(r)); }, on (t, r) { e.has(t) || e.set(t, new Set), e.get(t).add(r); }, off (t, r) { var o; (o = e.get(t)) == null || o.delete(r); } }; } function nA(e) { let t = Dn(), r = Xr(), o = Ur(), a = e || o; return be(()=>{ if (!t) return; let c = { id: t, parentId: a }; return r?.addNode(c), ()=>{ r?.removeNode(c); }; }, [ r, t, a ]), t; } function oA(e) { _s8(); let { children: t, id: r } = e, o = Ur(); return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(dP.Provider, { value: react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "oA.useMemo": ()=>({ id: r, parentId: o }) }["oA.useMemo"], [ r, o ]), children: t }); } _s8(oA, "nwk+m61qLgjDVUp4IGV/072DDN4="); function iA(e) { _s9(); let { children: t } = e, r = react__WEBPACK_IMPORTED_MODULE_0__.useRef([]), o = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "iA.useCallback[o]": (l)=>{ r.current = [ ...r.current, l ]; } }["iA.useCallback[o]"], []), a = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "iA.useCallback[a]": (l)=>{ r.current = r.current.filter({ "iA.useCallback[a]": (f)=>f !== l }["iA.useCallback[a]"]); } }["iA.useCallback[a]"], []), [c] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ "iA.useState": ()=>lP() }["iA.useState"]); return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fP.Provider, { value: react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "iA.useMemo": ()=>({ nodesRef: r, addNode: o, removeNode: a, events: c }) }["iA.useMemo"], [ o, a, c ]), children: t }); } _s9(iA, "aLX9WsLC+qOZS5DpIYZzxzCLCbM="); function zr(e) { return "data-floating-ui-" + e; } function pt(e) { e.current !== -1 && (clearTimeout(e.current), e.current = -1); } function po(e, t, r) { if (r && !Br(r)) return 0; if (typeof e == "number") return e; if (typeof e == "function") { let o = e(); return typeof o == "number" ? o : o?.[t]; } return e?.[t]; } function tm(e) { return typeof e == "function" ? e() : e; } function aA(e, t) { _s10(); t === void 0 && (t = {}); let { open: r, onOpenChange: o, dataRef: a, events: c, elements: l } = e, { enabled: f = !0, delay: m = 0, handleClose: h = null, mouseOnly: g = !1, restMs: x = 0, move: P = !0 } = t, D = Xr(), y = Ur(), O = ut(h), E = ut(m), N = ut(r), T = ut(x), Y = react__WEBPACK_IMPORTED_MODULE_0__.useRef(), F = react__WEBPACK_IMPORTED_MODULE_0__.useRef(-1), V = react__WEBPACK_IMPORTED_MODULE_0__.useRef(), B = react__WEBPACK_IMPORTED_MODULE_0__.useRef(-1), $ = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!0), z = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), Z = react__WEBPACK_IMPORTED_MODULE_0__.useRef({ "aA.useRef[Z]": ()=>{} }["aA.useRef[Z]"]), Q = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), oe = Le(()=>{ var K; let j = (K = a.current.openEvent) == null ? void 0 : K.type; return j?.includes("mouse") && j !== "mousedown"; }); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "aA.useEffect": ()=>{ if (!f) return; function K(j) { let { open: U } = j; U || (pt(F), pt(B), $.current = !0, Q.current = !1); } return c.on("openchange", K), ({ "aA.useEffect": ()=>{ c.off("openchange", K); } })["aA.useEffect"]; } }["aA.useEffect"], [ f, c ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "aA.useEffect": ()=>{ if (!f || !O.current || !r) return; function K(U) { oe() && o(!1, U, "hover"); } let j = ft(l.floating).documentElement; return j.addEventListener("mouseleave", K), ({ "aA.useEffect": ()=>{ j.removeEventListener("mouseleave", K); } })["aA.useEffect"]; } }["aA.useEffect"], [ l.floating, r, o, f, O, oe ]); let k = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "aA.useCallback[k]": function(K, j, U) { j === void 0 && (j = !0), U === void 0 && (U = "hover"); let ae = po(E.current, "close", Y.current); ae && !V.current ? (pt(F), F.current = window.setTimeout({ "aA.useCallback[k]": ()=>o(!1, K, U) }["aA.useCallback[k]"], ae)) : j && (pt(F), o(!1, K, U)); } }["aA.useCallback[k]"], [ E, o ]), G = Le(()=>{ Z.current(), V.current = void 0; }), S = Le(()=>{ if (z.current) { let K = ft(l.floating).body; K.style.pointerEvents = "", K.removeAttribute(jM), z.current = !1; } }), H = Le(()=>a.current.openEvent ? [ "click", "mousedown" ].includes(a.current.openEvent.type) : !1); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "aA.useEffect": ()=>{ if (!f) return; function K(de) { if (pt(F), $.current = !1, g && !Br(Y.current) || tm(T.current) > 0 && !po(E.current, "open")) return; let ne = po(E.current, "open", Y.current); ne ? F.current = window.setTimeout({ "aA.useEffect.K": ()=>{ N.current || o(!0, de, "hover"); } }["aA.useEffect.K"], ne) : r || o(!0, de, "hover"); } function j(de) { if (H()) { S(); return; } Z.current(); let ne = ft(l.floating); if (pt(B), Q.current = !1, O.current && a.current.floatingContext) { r || pt(F), V.current = O.current({ ...a.current.floatingContext, tree: D, x: de.clientX, y: de.clientY, onClose () { S(), G(), H() || k(de, !0, "safe-polygon"); } }); let ge = V.current; ne.addEventListener("mousemove", ge), Z.current = ({ "aA.useEffect.j": ()=>{ ne.removeEventListener("mousemove", ge); } })["aA.useEffect.j"]; return; } (Y.current !== "touch" || !st(l.floating, de.relatedTarget)) && k(de); } function U(de) { H() || a.current.floatingContext && (O.current == null || O.current({ ...a.current.floatingContext, tree: D, x: de.clientX, y: de.clientY, onClose () { S(), G(), H() || k(de); } })(de)); } function ae() { pt(F); } function qe(de) { H() || k(de, !1); } if (Ne(l.domReference)) { let de = l.domReference, ne = l.floating; return r && de.addEventListener("mouseleave", U), P && de.addEventListener("mousemove", K, { once: !0 }), de.addEventListener("mouseenter", K), de.addEventListener("mouseleave", j), ne && (ne.addEventListener("mouseleave", U), ne.addEventListener("mouseenter", ae), ne.addEventListener("mouseleave", qe)), ({ "aA.useEffect": ()=>{ r && de.removeEventListener("mouseleave", U), P && de.removeEventListener("mousemove", K), de.removeEventListener("mouseenter", K), de.removeEventListener("mouseleave", j), ne && (ne.removeEventListener("mouseleave", U), ne.removeEventListener("mouseenter", ae), ne.removeEventListener("mouseleave", qe)); } })["aA.useEffect"]; } } }["aA.useEffect"], [ l, f, e, g, P, k, G, S, o, r, N, D, E, O, a, H, T ]), be(()=>{ var K; if (f && r && (K = O.current) != null && (K = K.__options) != null && K.blockPointerEvents && oe()) { z.current = !0; let U = l.floating; if (Ne(l.domReference) && U) { var j; let ae = ft(l.floating).body; ae.setAttribute(jM, ""); let qe = l.domReference, de = D == null || (j = D.nodesRef.current.find((ne)=>ne.id === y)) == null || (j = j.context) == null ? void 0 : j.elements.floating; return de && (de.style.pointerEvents = ""), ae.style.pointerEvents = "none", qe.style.pointerEvents = "auto", U.style.pointerEvents = "auto", ()=>{ ae.style.pointerEvents = "", qe.style.pointerEvents = "", U.style.pointerEvents = ""; }; } } }, [ f, r, y, l, D, O, oe ]), be(()=>{ r || (Y.current = void 0, Q.current = !1, G(), S()); }, [ r, G, S ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "aA.useEffect": ()=>({ "aA.useEffect": ()=>{ G(), pt(F), pt(B), S(); } })["aA.useEffect"] }["aA.useEffect"], [ f, l.domReference, G, S ]); let re = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "aA.useMemo[re]": ()=>{ function K(j) { Y.current = j.pointerType; } return { onPointerDown: K, onPointerEnter: K, onMouseMove (j) { let { nativeEvent: U } = j; function ae() { !$.current && !N.current && o(!0, U, "hover"); } g && !Br(Y.current) || r || tm(T.current) === 0 || Q.current && j.movementX ** 2 + j.movementY ** 2 < 2 || (pt(B), Y.current === "touch" ? ae() : (Q.current = !0, B.current = window.setTimeout(ae, tm(T.current)))); } }; } }["aA.useMemo[re]"], [ g, o, r, N, T ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "aA.useMemo": ()=>f ? { reference: re } : {} }["aA.useMemo"], [ f, re ]); } _s10(aA, "FgOhK1T7oY1eIMdSWv1LwTmPkT0="); function sA(e) { _s11(); let { children: t, delay: r, timeoutMs: o = 0 } = e, [a, c] = react__WEBPACK_IMPORTED_MODULE_0__.useReducer({ "sA.useReducer": (m, h)=>({ ...m, ...h }) }["sA.useReducer"], { delay: r, timeoutMs: o, initialDelay: r, currentId: null, isInstantPhase: !1 }), l = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), f = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "sA.useCallback[f]": (m)=>{ c({ currentId: m }); } }["sA.useCallback[f]"], []); return be(()=>{ a.currentId ? l.current === null ? l.current = a.currentId : a.isInstantPhase || c({ isInstantPhase: !0 }) : (a.isInstantPhase && c({ isInstantPhase: !1 }), l.current = null); }, [ a.currentId, a.isInstantPhase ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pP.Provider, { value: react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "sA.useMemo": ()=>({ ...a, setState: c, setCurrentId: f }) }["sA.useMemo"], [ a, f ]), children: t }); } _s11(sA, "QIqKK4dlb9BZuWD4HjcbXUkchWw="); function uA(e, t) { t === void 0 && (t = {}); let { open: r, onOpenChange: o, floatingId: a } = e, { id: c, enabled: l = !0 } = t, f = c ?? a, m = mP(), { currentId: h, setCurrentId: g, initialDelay: x, setState: P, timeoutMs: D } = m; return be(()=>{ l && h && (P({ delay: { open: 1, close: po(x, "close") } }), h !== f && o(!1)); }, [ l, f, o, P, h, x ]), be(()=>{ function y() { o(!1), P({ delay: x, currentId: null }); } if (l && h && !r && h === f) { if (D) { let O = window.setTimeout(y, D); return ()=>{ clearTimeout(O); }; } y(); } }, [ l, r, P, h, f, o, x, D ]), be(()=>{ l && (g === sm || !r || g(f)); }, [ l, r, g, f ]), m; } function cA(e) { _s12(); let { children: t, delay: r, timeoutMs: o = 0 } = e, a = react__WEBPACK_IMPORTED_MODULE_0__.useRef(r), c = react__WEBPACK_IMPORTED_MODULE_0__.useRef(r), l = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), f = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), m = react__WEBPACK_IMPORTED_MODULE_0__.useRef(-1); return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hP.Provider, { value: react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "cA.useMemo": ()=>({ hasProvider: !0, delayRef: a, initialDelayRef: c, currentIdRef: l, timeoutMs: o, currentContextRef: f, timeoutIdRef: m }) }["cA.useMemo"], [ o ]), children: t }); } _s12(cA, "v2GBIsb7A3o6UwGvOQfPRWGEZT8="); function lA(e, t) { _s13(); t === void 0 && (t = {}); let { open: r, onOpenChange: o, floatingId: a } = e, { enabled: c = !0 } = t, l = react__WEBPACK_IMPORTED_MODULE_0__.useContext(hP), { currentIdRef: f, delayRef: m, timeoutMs: h, initialDelayRef: g, currentContextRef: x, hasProvider: P, timeoutIdRef: D } = l, [y, O] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1); return be(()=>{ function E() { var N; O(!1), (N = x.current) == null || N.setIsInstantPhase(!1), f.current = null, x.current = null, m.current = g.current; } if (c && f.current && !r && f.current === a) { if (O(!1), h) return D.current = window.setTimeout(E, h), ()=>{ clearTimeout(D.current); }; E(); } }, [ c, r, a, f, m, h, g, x, D ]), be(()=>{ if (!c || !r) return; let E = x.current, N = f.current; x.current = { onOpenChange: o, setIsInstantPhase: O }, f.current = a, m.current = { open: 0, close: po(g.current, "close") }, N !== null && N !== a ? (pt(D), O(!0), E?.setIsInstantPhase(!0), E?.onOpenChange(!1)) : (O(!1), E?.setIsInstantPhase(!1)); }, [ c, r, a, o, f, m, h, g, x, D ]), be(()=>()=>{ x.current = null; }, [ x ]), react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "lA.useMemo": ()=>({ hasProvider: P, delayRef: m, isInstantPhase: y }) }["lA.useMemo"], [ P, m, y ]); } _s13(lA, "O2IgEqrE7ctwy3Ck2Vbq7Tl/l/Q="); function Kr(e, t) { t === void 0 && (t = {}); let { preventScroll: r = !1, cancelPrevious: o = !0, sync: a = !1 } = t; o && cancelAnimationFrame(FM); let c = ()=>e?.focus({ preventScroll: r }); a ? c() : FM = requestAnimationFrame(c); } _c390 = Kr; function rm(e, t) { if (!e || !t) return !1; let r = t.getRootNode == null ? void 0 : t.getRootNode(); if (e.contains(t)) return !0; if (r && Wr(r)) { let o = t; for(; o;){ if (e === o) return !0; o = o.parentNode || o.host; } } return !1; } function dA(e) { return "composedPath" in e ? e.composedPath()[0] : e.target; } function fA(e) { return e?.ownerDocument || document; } function LM(e) { return e === "inert" ? wn.inert : e === "aria-hidden" ? wn["aria-hidden"] : wn.none; } _c391 = LM; function gP(e) { return e ? Wr(e) ? e.host : gP(e.parentNode) : null; } function hA(e, t, r, o) { let a = "data-floating-ui-inert", c = o ? "inert" : r ? "aria-hidden" : null, l = mA(t, e), f = new Set, m = new Set(l), h = []; Yi[a] || (Yi[a] = new WeakMap); let g = Yi[a]; l.forEach(x), P(t), f.clear(); function x(D) { !D || f.has(D) || (f.add(D), D.parentNode && x(D.parentNode)); } function P(D) { !D || m.has(D) || [].forEach.call(D.children, (y)=>{ if (Gt(y) !== "script") if (f.has(y)) P(y); else { let O = c ? y.getAttribute(c) : null, E = O !== null && O !== "false", N = LM(c), T = (N.get(y) || 0) + 1, Y = (g.get(y) || 0) + 1; N.set(y, T), g.set(y, Y), h.push(y), T === 1 && E && Ni.add(y), Y === 1 && y.setAttribute(a, ""), !E && c && y.setAttribute(c, c === "inert" ? "" : "true"); } }); } return nm++, ()=>{ h.forEach((D)=>{ let y = LM(c), E = (y.get(D) || 0) - 1, N = (g.get(D) || 0) - 1; y.set(D, E), g.set(D, N), E || (!Ni.has(D) && c && D.removeAttribute(c), Ni.delete(D)), N || D.removeAttribute(a); }), nm--, nm || (wn.inert = new WeakMap, wn["aria-hidden"] = new WeakMap, wn.none = new WeakMap, Ni = new WeakSet, Yi = {}); }; } function WM(e, t, r) { t === void 0 && (t = !1), r === void 0 && (r = !1); let o = fA(e[0]).body; return hA(e.concat(Array.from(o.querySelectorAll('[aria-live],[role="status"],output'))), o, t, r); } _c392 = WM; function bP(e) { _s14(); e === void 0 && (e = {}); let { id: t, root: r } = e, o = Dn(), a = _P(), [c, l] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), f = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); return be(()=>()=>{ c?.remove(), queueMicrotask(()=>{ f.current = null; }); }, [ c ]), be(()=>{ if (!o || f.current) return; let m = t ? document.getElementById(t) : null; if (!m) return; let h = document.createElement("div"); h.id = o, h.setAttribute(AM, ""), m.appendChild(h), f.current = h, l(h); }, [ t, o ]), be(()=>{ if (r === null || !o || f.current) return; let m = r || a?.portalNode; m && !ci(m) && (m = m.current), m = m || document.body; let h = null; t && (h = document.createElement("div"), h.id = t, m.appendChild(h)); let g = document.createElement("div"); g.id = o, g.setAttribute(AM, ""), m = h || m, m.appendChild(g), f.current = g, l(g); }, [ t, r, o, a ]), c; } _s14(bP, "DFqyh/PCnVV0MtRtiXRNI3LdvT0="); function vA(e) { _s15(); let { children: t, id: r, root: o, preserveTabOrder: a = !0 } = e, c = bP({ id: r, root: o }), [l, f] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), m = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), h = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), g = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), x = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), P = l?.modal, D = l?.open, y = !!l && !l.modal && l.open && a && !!(o || c); return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "vA.useEffect": ()=>{ if (!c || !a || P) return; function O(E) { c && bn(E) && (E.type === "focusin" ? Vp : WO)(c); } return c.addEventListener("focusin", O, !0), c.addEventListener("focusout", O, !0), ({ "vA.useEffect": ()=>{ c.removeEventListener("focusin", O, !0), c.removeEventListener("focusout", O, !0); } })["vA.useEffect"]; } }["vA.useEffect"], [ c, a, P ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "vA.useEffect": ()=>{ c && (D || Vp(c)); } }["vA.useEffect"], [ D, c ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(vP.Provider, { value: react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "vA.useMemo": ()=>({ preserveTabOrder: a, beforeOutsideRef: m, afterOutsideRef: h, beforeInsideRef: g, afterInsideRef: x, portalNode: c, setFocusManagerState: f }) }["vA.useMemo"], [ a, c ]), children: [ y && c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Li, { "data-type": "outside", ref: m, onFocus: (O)=>{ if (bn(O, c)) { var E; (E = g.current) == null || E.focus(); } else { let N = l ? l.domReference : null, T = Bp(N); T?.focus(); } } }), y && c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { "aria-owns": c.id, style: gA }), c && /*#__PURE__*/ react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal(t, c), y && c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Li, { "data-type": "outside", ref: h, onFocus: (O)=>{ if (bn(O, c)) { var E; (E = x.current) == null || E.focus(); } else { let N = l ? l.domReference : null, T = Qp(N); T?.focus(), l?.closeOnFocusOut && l?.onOpenChange(!1, O.nativeEvent, "focus-out"); } } }) ] }); } _s15(vA, "4hc+qaxSNJrzl50nq64XE1YH/Jg="); function HM(e) { _s16(); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "HM.useMemo": ()=>({ "HM.useMemo": (t)=>{ e.forEach({ "HM.useMemo": (r)=>{ r && (r.current = t); } }["HM.useMemo"]); } })["HM.useMemo"] }["HM.useMemo"], e); } _s16(HM, "nwk+m61qLgjDVUp4IGV/072DDN4="); _c393 = HM; function lm() { wr = wr.filter((e)=>{ var t; return (t = e.deref()) == null ? void 0 : t.isConnected; }); } function bA(e) { lm(), e && Gt(e) !== "body" && (wr.push(new WeakRef(e)), wr.length > QM && (wr = wr.slice(-QM))); } function BM() { lm(); let e = wr[wr.length - 1]; return e?.deref(); } _c394 = BM; function _A(e) { let t = vn(); return qp(e, t) ? e : hn(e, t)[0] || e; } function VM(e, t) { var r; if (!t.current.includes("floating") && !((r = e.getAttribute("role")) != null && r.includes("dialog"))) return; let o = vn(), c = RO(e, o).filter((f)=>{ let m = f.getAttribute("data-tabindex") || ""; return qp(f, o) || f.hasAttribute("data-tabindex") && !m.startsWith("-"); }), l = e.getAttribute("tabindex"); t.current.includes("floating") || c.length === 0 ? l !== "0" && e.setAttribute("tabindex", "0") : (l !== "-1" || e.hasAttribute("data-tabindex") && e.getAttribute("data-tabindex") !== "-1") && (e.setAttribute("tabindex", "-1"), e.setAttribute("data-tabindex", "-1")); } _c395 = VM; function wA(e) { _s17(); let { context: t, children: r, disabled: o = !1, order: a = [ "content" ], guards: c = !0, initialFocus: l = 0, returnFocus: f = !0, restoreFocus: m = !1, modal: h = !0, visuallyHiddenDismiss: g = !1, closeOnFocusOut: x = !0, outsideElementsInert: P = !1, getInsideElements: D = ()=>[] } = e, { open: y, onOpenChange: O, events: E, dataRef: N, elements: { domReference: T, floating: Y } } = t, F = Le(()=>{ var ue; return (ue = N.current.floatingContext) == null ? void 0 : ue.nodeId; }), V = Le(D), B = typeof l == "number" && l < 0, $ = Ei(T) && B, z = pA(), Z = z ? c : !0, Q = !Z || z && P, oe = ut(a), k = ut(l), G = ut(f), S = Xr(), H = _P(), re = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), K = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), j = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), U = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), ae = react__WEBPACK_IMPORTED_MODULE_0__.useRef(-1), qe = react__WEBPACK_IMPORTED_MODULE_0__.useRef(-1), de = H != null, ne = co(Y), _e = Le(function(ue) { return ue === void 0 && (ue = ne), ue ? hn(ue, vn()) : []; }), ge = Le((ue)=>{ let he = _e(ue); return oe.current.map((pe)=>T && pe === "reference" ? T : ne && pe === "floating" ? ne : he).filter(Boolean).flat(); }); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "wA.useEffect": ()=>{ if (o || !h) return; function ue(pe) { if (pe.key === "Tab") { st(ne, Kt(ft(ne))) && _e().length === 0 && !$ && dt(pe); let De = ge(), He = $t(pe); oe.current[0] === "reference" && He === T && (dt(pe), pe.shiftKey ? Kr(De[De.length - 1]) : Kr(De[1])), oe.current[1] === "floating" && He === ne && pe.shiftKey && (dt(pe), Kr(De[0])); } } let he = ft(ne); return he.addEventListener("keydown", ue), ({ "wA.useEffect": ()=>{ he.removeEventListener("keydown", ue); } })["wA.useEffect"]; } }["wA.useEffect"], [ o, T, ne, h, oe, $, _e, ge ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "wA.useEffect": ()=>{ if (o || !Y) return; function ue(he) { let pe = $t(he), He = _e().indexOf(pe); He !== -1 && (ae.current = He); } return Y.addEventListener("focusin", ue), ({ "wA.useEffect": ()=>{ Y.removeEventListener("focusin", ue); } })["wA.useEffect"]; } }["wA.useEffect"], [ o, Y, _e ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "wA.useEffect": ()=>{ if (o || !x) return; function ue() { U.current = !0, setTimeout({ "wA.useEffect.ue": ()=>{ U.current = !1; } }["wA.useEffect.ue"]); } function he(He) { let xe = He.relatedTarget, mt = He.currentTarget, it = $t(He); queueMicrotask({ "wA.useEffect.he": ()=>{ let rt = F(), Rt = !(st(T, xe) || st(Y, xe) || st(xe, Y) || st(H?.portalNode, xe) || xe != null && xe.hasAttribute(zr("focus-guard")) || S && (_r(S.nodesRef.current, rt).find({ "wA.useEffect.he": (ie)=>{ var me, se; return st((me = ie.context) == null ? void 0 : me.elements.floating, xe) || st((se = ie.context) == null ? void 0 : se.elements.domReference, xe); } }["wA.useEffect.he"]) || Yp(S.nodesRef.current, rt).find({ "wA.useEffect.he": (ie)=>{ var me, se, Me; return [ (me = ie.context) == null ? void 0 : me.elements.floating, co((se = ie.context) == null ? void 0 : se.elements.floating) ].includes(xe) || ((Me = ie.context) == null ? void 0 : Me.elements.domReference) === xe; } }["wA.useEffect.he"]))); if (mt === T && ne && VM(ne, oe), m && mt !== T && !(it != null && it.isConnected) && Kt(ft(ne)) === ft(ne).body) { ze(ne) && ne.focus(); let ie = ae.current, me = _e(), se = me[ie] || me[me.length - 1] || ne; ze(se) && se.focus(); } if (N.current.insideReactTree) { N.current.insideReactTree = !1; return; } ($ || !h) && xe && Rt && !U.current && xe !== BM() && (j.current = !0, O(!1, He, "focus-out")); } }["wA.useEffect.he"]); } let pe = !!(!S && H); function De() { pt(qe), N.current.insideReactTree = !0, qe.current = window.setTimeout({ "wA.useEffect.De": ()=>{ N.current.insideReactTree = !1; } }["wA.useEffect.De"]); } if (Y && ze(T)) return T.addEventListener("focusout", he), T.addEventListener("pointerdown", ue), Y.addEventListener("focusout", he), pe && Y.addEventListener("focusout", De, !0), ({ "wA.useEffect": ()=>{ T.removeEventListener("focusout", he), T.removeEventListener("pointerdown", ue), Y.removeEventListener("focusout", he), pe && Y.removeEventListener("focusout", De, !0); } })["wA.useEffect"]; } }["wA.useEffect"], [ o, T, Y, ne, h, S, H, O, x, m, _e, $, F, oe, N ]); let Ve = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), Ge = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), We = HM([ Ve, H?.beforeInsideRef ]), Ae = HM([ Ge, H?.afterInsideRef ]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "wA.useEffect": ()=>{ var ue, he; if (o || !Y) return; let pe = Array.from((H == null || (ue = H.portalNode) == null ? void 0 : ue.querySelectorAll("[" + zr("portal") + "]")) || []), He = (he = (S ? Yp(S.nodesRef.current, F()) : []).find({ "wA.useEffect": (it)=>{ var rt; return Ei(((rt = it.context) == null ? void 0 : rt.elements.domReference) || null); } }["wA.useEffect"])) == null || (he = he.context) == null ? void 0 : he.elements.domReference, xe = [ Y, He, ...pe, ...V(), re.current, K.current, Ve.current, Ge.current, H?.beforeOutsideRef.current, H?.afterOutsideRef.current, oe.current.includes("reference") || $ ? T : null ].filter({ "wA.useEffect.xe": (it)=>it != null }["wA.useEffect.xe"]), mt = h || $ ? WM(xe, !Q, Q) : WM(xe); return ({ "wA.useEffect": ()=>{ mt(); } })["wA.useEffect"]; } }["wA.useEffect"], [ o, T, Y, h, oe, H, $, Z, Q, S, F, V ]), be(()=>{ if (o || !ze(ne)) return; let ue = ft(ne), he = Kt(ue); queueMicrotask(()=>{ let pe = ge(ne), De = k.current, He = (typeof De == "number" ? pe[De] : De.current) || ne, xe = st(ne, he); !B && !xe && y && Kr(He, { preventScroll: He === ne }); }); }, [ o, y, ne, B, ge, k ]), be(()=>{ if (o || !ne) return; let ue = ft(ne), he = Kt(ue); bA(he); function pe(xe) { let { reason: mt, event: it, nested: rt } = xe; if ([ "hover", "safe-polygon" ].includes(mt) && it.type === "mouseleave" && (j.current = !0), mt === "outside-press") if (rt) j.current = !1; else if (jp(it) || Fp(it)) j.current = !1; else { let Rt = !1; document.createElement("div").focus({ get preventScroll () { return Rt = !0, !1; } }), Rt ? j.current = !1 : j.current = !0; } } E.on("openchange", pe); let De = ue.createElement("span"); De.setAttribute("tabindex", "-1"), De.setAttribute("aria-hidden", "true"), Object.assign(De.style, cm), de && T && T.insertAdjacentElement("afterend", De); function He() { if (typeof G.current == "boolean") { let xe = T || BM(); return xe && xe.isConnected ? xe : De; } return G.current.current || De; } return ()=>{ E.off("openchange", pe); let xe = Kt(ue), mt = st(Y, xe) || S && _r(S.nodesRef.current, F(), !1).some((rt)=>{ var Rt; return st((Rt = rt.context) == null ? void 0 : Rt.elements.floating, xe); }), it = He(); queueMicrotask(()=>{ let rt = _A(it); G.current && !j.current && ze(rt) && (!(rt !== xe && xe !== ue.body) || mt) && rt.focus({ preventScroll: !0 }), De.remove(); }); }; }, [ o, Y, ne, G, N, E, S, de, T, F ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "wA.useEffect": ()=>(queueMicrotask({ "wA.useEffect": ()=>{ j.current = !1; } }["wA.useEffect"]), ({ "wA.useEffect": ()=>{ queueMicrotask(lm); } })["wA.useEffect"]) }["wA.useEffect"], [ o ]), be(()=>{ if (!o && H) return H.setFocusManagerState({ modal: h, closeOnFocusOut: x, open: y, onOpenChange: O, domReference: T }), ()=>{ H.setFocusManagerState(null); }; }, [ o, H, h, y, O, x, T ]), be(()=>{ o || ne && VM(ne, oe); }, [ o, ne, oe ]); function Ue(ue) { return o || !g || !h ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xA, { ref: ue === "start" ? re : K, onClick: (he)=>O(!1, he.nativeEvent), children: typeof g == "string" ? g : "Dismiss" }); } let ot = !o && Z && (h ? !$ : !0) && (de || h); return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, { children: [ ot && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Li, { "data-type": "inside", ref: We, onFocus: (ue)=>{ if (h) { let pe = ge(); Kr(a[0] === "reference" ? pe[0] : pe[pe.length - 1]); } else if (H != null && H.preserveTabOrder && H.portalNode) if (j.current = !1, bn(ue, H.portalNode)) { let pe = Qp(T); pe?.focus(); } else { var he; (he = H.beforeOutsideRef.current) == null || he.focus(); } } }), !$ && Ue("start"), r, Ue("end"), ot && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Li, { "data-type": "inside", ref: Ae, onFocus: (ue)=>{ if (h) Kr(ge()[0]); else if (H != null && H.preserveTabOrder && H.portalNode) if (x && (j.current = !0), bn(ue, H.portalNode)) { let pe = Bp(T); pe?.focus(); } else { var he; (he = H.afterOutsideRef.current) == null || he.focus(); } } }) ] }); } _s17(wA, "+WFxLJZJ815yfcAo1R+bm+c0xIk="); function DA() { let e = Oi(), t = /iP(hone|ad|od)|iOS/.test(e) || e === "MacIntel" && navigator.maxTouchPoints > 1, r = document.body.style, a = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft ? "paddingLeft" : "paddingRight", c = window.innerWidth - document.documentElement.clientWidth, l = r.left ? parseFloat(r.left) : window.scrollX, f = r.top ? parseFloat(r.top) : window.scrollY; if (r.overflow = "hidden", r.setProperty(KM, c + "px"), c && (r[a] = c + "px"), t) { var m, h; let g = ((m = window.visualViewport) == null ? void 0 : m.offsetLeft) || 0, x = ((h = window.visualViewport) == null ? void 0 : h.offsetTop) || 0; Object.assign(r, { position: "fixed", top: -(f - Math.floor(x)) + "px", left: -(l - Math.floor(g)) + "px", right: "0" }); } return ()=>{ Object.assign(r, { overflow: "", [a]: "" }), r.removeProperty(KM), t && (Object.assign(r, { position: "", top: "", left: "", right: "" }), window.scrollTo(l, f)); }; } _c396 = DA; function zM(e) { return ze(e.target) && e.target.tagName === "BUTTON"; } function MA(e) { return ze(e.target) && e.target.tagName === "A"; } _c397 = MA; function UM(e) { return yi(e); } _c398 = UM; function PA(e, t) { _s18(); t === void 0 && (t = {}); let { open: r, onOpenChange: o, dataRef: a, elements: { domReference: c } } = e, { enabled: l = !0, event: f = "click", toggle: m = !0, ignoreMouse: h = !1, keyboardHandlers: g = !0, stickIfOpen: x = !0 } = t, P = react__WEBPACK_IMPORTED_MODULE_0__.useRef(), D = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), y = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "PA.useMemo[y]": ()=>({ onPointerDown (O) { P.current = O.pointerType; }, onMouseDown (O) { let E = P.current; O.button === 0 && f !== "click" && (Br(E, !0) && h || (r && m && (!(a.current.openEvent && x) || a.current.openEvent.type === "mousedown") ? o(!1, O.nativeEvent, "click") : (O.preventDefault(), o(!0, O.nativeEvent, "click")))); }, onClick (O) { let E = P.current; if (f === "mousedown" && P.current) { P.current = void 0; return; } Br(E, !0) && h || (r && m && (!(a.current.openEvent && x) || a.current.openEvent.type === "click") ? o(!1, O.nativeEvent, "click") : o(!0, O.nativeEvent, "click")); }, onKeyDown (O) { P.current = void 0, !(O.defaultPrevented || !g || zM(O)) && (O.key === " " && !UM(c) && (O.preventDefault(), D.current = !0), !MA(O) && O.key === "Enter" && o(!(r && m), O.nativeEvent, "click")); }, onKeyUp (O) { O.defaultPrevented || !g || zM(O) || UM(c) || O.key === " " && D.current && (D.current = !1, o(!(r && m), O.nativeEvent, "click")); } }) }["PA.useMemo[y]"], [ a, c, f, h, g, o, r, x, m ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "PA.useMemo": ()=>l ? { reference: y } : {} }["PA.useMemo"], [ l, y ]); } _s18(PA, "22wYw17/9AfdxW98wzJ/kIohEEs="); _c399 = PA; function yA(e, t) { let r = null, o = null, a = !1; return { contextElement: e || void 0, getBoundingClientRect () { var c; let l = e?.getBoundingClientRect() || { width: 0, height: 0, x: 0, y: 0 }, f = t.axis === "x" || t.axis === "both", m = t.axis === "y" || t.axis === "both", h = [ "mouseenter", "mousemove" ].includes(((c = t.dataRef.current.openEvent) == null ? void 0 : c.type) || "") && t.pointerType !== "touch", g = l.width, x = l.height, P = l.x, D = l.y; return r == null && t.x && f && (r = l.x - t.x), o == null && t.y && m && (o = l.y - t.y), P -= r || 0, D -= o || 0, g = 0, x = 0, !a || h ? (g = t.axis === "y" ? l.width : 0, x = t.axis === "x" ? l.height : 0, P = f && t.x != null ? t.x : P, D = m && t.y != null ? t.y : D) : a && !h && (x = t.axis === "x" ? l.height : x, g = t.axis === "y" ? l.width : g), a = !0, { width: g, height: x, x: P, y: D, top: D, right: P + g, bottom: D + x, left: P }; } }; } function XM(e) { return e != null && e.clientX != null; } _c400 = XM; function EA(e, t) { _s19(); t === void 0 && (t = {}); let { open: r, dataRef: o, elements: { floating: a, domReference: c }, refs: l } = e, { enabled: f = !0, axis: m = "both", x: h = null, y: g = null } = t, x = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), P = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), [D, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [O, E] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]), N = Le((B, $)=>{ x.current || o.current.openEvent && !XM(o.current.openEvent) || l.setPositionReference(yA(c, { x: B, y: $, axis: m, dataRef: o, pointerType: D })); }), T = Le((B)=>{ h != null || g != null || (r ? P.current || E([]) : N(B.clientX, B.clientY)); }), Y = Br(D) ? a : r, F = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "EA.useCallback[F]": ()=>{ if (!Y || !f || h != null || g != null) return; let B = gt(a); function $(z) { let Z = $t(z); st(a, Z) ? (B.removeEventListener("mousemove", $), P.current = null) : N(z.clientX, z.clientY); } if (!o.current.openEvent || XM(o.current.openEvent)) { B.addEventListener("mousemove", $); let z = { "EA.useCallback[F].z": ()=>{ B.removeEventListener("mousemove", $), P.current = null; } }["EA.useCallback[F].z"]; return P.current = z, z; } l.setPositionReference(c); } }["EA.useCallback[F]"], [ Y, f, h, g, a, o, l, c, N ]); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "EA.useEffect": ()=>F() }["EA.useEffect"], [ F, O ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "EA.useEffect": ()=>{ f && !a && (x.current = !1); } }["EA.useEffect"], [ f, a ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "EA.useEffect": ()=>{ !f && r && (x.current = !0); } }["EA.useEffect"], [ f, r ]), be(()=>{ f && (h != null || g != null) && (x.current = !1, N(h, g)); }, [ f, h, g, N ]); let V = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "EA.useMemo[V]": ()=>{ function B($) { let { pointerType: z } = $; y(z); } return { onPointerDown: B, onPointerEnter: B, onMouseMove: T, onMouseEnter: T }; } }["EA.useMemo[V]"], [ T ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "EA.useMemo": ()=>f ? { reference: V } : {} }["EA.useMemo"], [ f, V ]); } _s19(EA, "Zkb1on/Memx/qemyH/iqjRvDlrE="); _c401 = EA; function RA(e, t) { _s20(); t === void 0 && (t = {}); let { open: r, onOpenChange: o, elements: a, dataRef: c } = e, { enabled: l = !0, escapeKey: f = !0, outsidePress: m = !0, outsidePressEvent: h = "pointerdown", referencePress: g = !1, referencePressEvent: x = "pointerdown", ancestorScroll: P = !1, bubbles: D, capture: y } = t, O = Xr(), E = Le(typeof m == "function" ? m : ()=>!1), N = typeof m == "function" ? E : m, T = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), { escapeKey: Y, outsidePress: F } = ZM(D), { escapeKey: V, outsidePress: B } = ZM(y), $ = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), z = Le((S)=>{ var H; if (!r || !l || !f || S.key !== "Escape" || $.current) return; let re = (H = c.current.floatingContext) == null ? void 0 : H.nodeId, K = O ? _r(O.nodesRef.current, re) : []; if (!Y && (S.stopPropagation(), K.length > 0)) { let j = !0; if (K.forEach((U)=>{ var ae; if ((ae = U.context) != null && ae.open && !U.context.dataRef.current.__escapeKeyBubbles) { j = !1; return; } }), !j) return; } o(!1, FO(S) ? S.nativeEvent : S, "escape-key"); }), Z = Le((S)=>{ var H; let re = ()=>{ var K; z(S), (K = $t(S)) == null || K.removeEventListener("keydown", re); }; (H = $t(S)) == null || H.addEventListener("keydown", re); }), Q = Le((S)=>{ var H; let re = c.current.insideReactTree; c.current.insideReactTree = !1; let K = T.current; if (T.current = !1, h === "click" && K || re || typeof N == "function" && !N(S)) return; let j = $t(S), U = "[" + zr("inert") + "]", ae = ft(a.floating).querySelectorAll(U), qe = Ne(j) ? j : null; for(; qe && !Bt(qe);){ let ge = Ht(qe); if (Bt(ge) || !Ne(ge)) break; qe = ge; } if (ae.length && Ne(j) && !NO(j) && !st(j, a.floating) && Array.from(ae).every((ge)=>!st(qe, ge))) return; if (ze(j) && G) { let ge = Bt(j), Ve = Dt(j), Ge = /auto|scroll/, We = ge || Ge.test(Ve.overflowX), Ae = ge || Ge.test(Ve.overflowY), Ue = We && j.clientWidth > 0 && j.scrollWidth > j.clientWidth, ot = Ae && j.clientHeight > 0 && j.scrollHeight > j.clientHeight, ue = Ve.direction === "rtl", he = ot && (ue ? S.offsetX <= j.offsetWidth - j.clientWidth : S.offsetX > j.clientWidth), pe = Ue && S.offsetY > j.clientHeight; if (he || pe) return; } let de = (H = c.current.floatingContext) == null ? void 0 : H.nodeId, ne = O && _r(O.nodesRef.current, de).some((ge)=>{ var Ve; return Pi(S, (Ve = ge.context) == null ? void 0 : Ve.elements.floating); }); if (Pi(S, a.floating) || Pi(S, a.domReference) || ne) return; let _e = O ? _r(O.nodesRef.current, de) : []; if (_e.length > 0) { let ge = !0; if (_e.forEach((Ve)=>{ var Ge; if ((Ge = Ve.context) != null && Ge.open && !Ve.context.dataRef.current.__outsidePressBubbles) { ge = !1; return; } }), !ge) return; } o(!1, S, "outside-press"); }), oe = Le((S)=>{ var H; let re = ()=>{ var K; Q(S), (K = $t(S)) == null || K.removeEventListener(h, re); }; (H = $t(S)) == null || H.addEventListener(h, re); }); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "RA.useEffect": ()=>{ if (!r || !l) return; c.current.__escapeKeyBubbles = Y, c.current.__outsidePressBubbles = F; let S = -1; function H(ae) { o(!1, ae, "ancestor-scroll"); } function re() { window.clearTimeout(S), $.current = !0; } function K() { S = window.setTimeout({ "RA.useEffect.K": ()=>{ $.current = !1; } }["RA.useEffect.K"], pn() ? 5 : 0); } let j = ft(a.floating); f && (j.addEventListener("keydown", V ? Z : z, V), j.addEventListener("compositionstart", re), j.addEventListener("compositionend", K)), N && j.addEventListener(h, B ? oe : Q, B); let U = []; return P && (Ne(a.domReference) && (U = Pt(a.domReference)), Ne(a.floating) && (U = U.concat(Pt(a.floating))), !Ne(a.reference) && a.reference && a.reference.contextElement && (U = U.concat(Pt(a.reference.contextElement)))), U = U.filter({ "RA.useEffect": (ae)=>{ var qe; return ae !== ((qe = j.defaultView) == null ? void 0 : qe.visualViewport); } }["RA.useEffect"]), U.forEach({ "RA.useEffect": (ae)=>{ ae.addEventListener("scroll", H, { passive: !0 }); } }["RA.useEffect"]), ({ "RA.useEffect": ()=>{ f && (j.removeEventListener("keydown", V ? Z : z, V), j.removeEventListener("compositionstart", re), j.removeEventListener("compositionend", K)), N && j.removeEventListener(h, B ? oe : Q, B), U.forEach({ "RA.useEffect": (ae)=>{ ae.removeEventListener("scroll", H); } }["RA.useEffect"]), window.clearTimeout(S); } })["RA.useEffect"]; } }["RA.useEffect"], [ c, a, f, N, h, r, o, P, l, Y, F, z, V, Z, Q, B, oe ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "RA.useEffect": ()=>{ c.current.insideReactTree = !1; } }["RA.useEffect"], [ c, N, h ]); let k = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "RA.useMemo[k]": ()=>({ onKeyDown: z, ...g && { [SA[x]]: ({ "RA.useMemo[k]": (S)=>{ o(!1, S.nativeEvent, "reference-press"); } })["RA.useMemo[k]"], ...x !== "click" && { onClick (S) { o(!1, S.nativeEvent, "reference-press"); } } } }) }["RA.useMemo[k]"], [ z, o, g, x ]), G = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "RA.useMemo[G]": ()=>{ function S(H) { H.button === 0 && (T.current = !0); } return { onKeyDown: z, onMouseDown: S, onMouseUp: S, [qA[h]]: ({ "RA.useMemo[G]": ()=>{ c.current.insideReactTree = !0; } })["RA.useMemo[G]"] }; } }["RA.useMemo[G]"], [ z, h, c ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "RA.useMemo": ()=>l ? { reference: k, floating: G } : {} }["RA.useMemo"], [ l, k, G ]); } _s20(RA, "m4DdanJ4jNZn4q6o1wuYtOZON9w="); _c402 = RA; function xP(e) { _s21(); let { open: t = !1, onOpenChange: r, elements: o } = e, a = Dn(), c = react__WEBPACK_IMPORTED_MODULE_0__.useRef({}), [l] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ "xP.useState": ()=>lP() }["xP.useState"]), f = Ur() != null, [m, h] = react__WEBPACK_IMPORTED_MODULE_0__.useState(o.reference), g = Le((D, y, O)=>{ c.current.openEvent = D ? y : void 0, l.emit("openchange", { open: D, event: y, reason: O, nested: f }), r?.(D, y, O); }), x = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "xP.useMemo[x]": ()=>({ setPositionReference: h }) }["xP.useMemo[x]"], []), P = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "xP.useMemo[P]": ()=>({ reference: m || o.reference || null, floating: o.floating || null, domReference: o.reference }) }["xP.useMemo[P]"], [ m, o.reference, o.floating ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "xP.useMemo": ()=>({ dataRef: c, open: t, onOpenChange: g, elements: P, events: l, floatingId: a, refs: x }) }["xP.useMemo"], [ t, g, P, l, a, x ]); } _s21(xP, "Q8P70IPDWHvoY0+w2F7qNR2in4g="); function IA(e) { _s22(); e === void 0 && (e = {}); let { nodeId: t } = e, r = xP({ ...e, elements: { reference: null, floating: null, ...e.elements } }), o = e.rootContext || r, a = o.elements, [c, l] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), g = a?.domReference || c, x = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), P = Xr(); be(()=>{ g && (x.current = g); }, [ g ]); let D = OM({ ...e, elements: { ...a, ...f && { reference: f } } }), y = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "IA.useCallback[y]": (Y)=>{ let F = Ne(Y) ? { getBoundingClientRect: ({ "IA.useCallback[y]": ()=>Y.getBoundingClientRect() })["IA.useCallback[y]"], getClientRects: ({ "IA.useCallback[y]": ()=>Y.getClientRects() })["IA.useCallback[y]"], contextElement: Y } : Y; m(F), D.refs.setReference(F); } }["IA.useCallback[y]"], [ D.refs ]), O = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "IA.useCallback[O]": (Y)=>{ (Ne(Y) || Y === null) && (x.current = Y, l(Y)), (Ne(D.refs.reference.current) || D.refs.reference.current === null || Y !== null && !Ne(Y)) && D.refs.setReference(Y); } }["IA.useCallback[O]"], [ D.refs ]), E = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "IA.useMemo[E]": ()=>({ ...D.refs, setReference: O, setPositionReference: y, domReference: x }) }["IA.useMemo[E]"], [ D.refs, O, y ]), N = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "IA.useMemo[N]": ()=>({ ...D.elements, domReference: g }) }["IA.useMemo[N]"], [ D.elements, g ]), T = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "IA.useMemo[T]": ()=>({ ...D, ...o, refs: E, elements: N, nodeId: t }) }["IA.useMemo[T]"], [ D, E, N, t, o ]); return be(()=>{ o.dataRef.current.floatingContext = T; let Y = P?.nodesRef.current.find((F)=>F.id === t); Y && (Y.context = T); }), react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "IA.useMemo": ()=>({ ...D, context: T, refs: E, elements: N }) }["IA.useMemo"], [ D, E, N, T ]); } _s22(IA, "aFEbCGEysM/WeS5K7DrX6AXwcH8="); _c403 = IA; function om() { return TO() && Np(); } function TA(e, t) { _s23(); t === void 0 && (t = {}); let { open: r, onOpenChange: o, events: a, dataRef: c, elements: l } = e, { enabled: f = !0, visibleOnly: m = !0 } = t, h = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), g = react__WEBPACK_IMPORTED_MODULE_0__.useRef(-1), x = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!0); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "TA.useEffect": ()=>{ if (!f) return; let D = gt(l.domReference); function y() { !r && ze(l.domReference) && l.domReference === Kt(ft(l.domReference)) && (h.current = !0); } function O() { x.current = !0; } function E() { x.current = !1; } return D.addEventListener("blur", y), om() && (D.addEventListener("keydown", O, !0), D.addEventListener("pointerdown", E, !0)), ({ "TA.useEffect": ()=>{ D.removeEventListener("blur", y), om() && (D.removeEventListener("keydown", O, !0), D.removeEventListener("pointerdown", E, !0)); } })["TA.useEffect"]; } }["TA.useEffect"], [ l.domReference, r, f ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "TA.useEffect": ()=>{ if (!f) return; function D(y) { let { reason: O } = y; (O === "reference-press" || O === "escape-key") && (h.current = !0); } return a.on("openchange", D), ({ "TA.useEffect": ()=>{ a.off("openchange", D); } })["TA.useEffect"]; } }["TA.useEffect"], [ a, f ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "TA.useEffect": ()=>({ "TA.useEffect": ()=>{ pt(g); } })["TA.useEffect"] }["TA.useEffect"], []); let P = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "TA.useMemo[P]": ()=>({ onMouseLeave () { h.current = !1; }, onFocus (D) { if (h.current) return; let y = $t(D.nativeEvent); if (m && Ne(y)) { if (om() && !D.relatedTarget) { if (!x.current && !yi(y)) return; } else if (!YO(y)) return; } o(!0, D.nativeEvent, "focus"); }, onBlur (D) { h.current = !1; let y = D.relatedTarget, O = D.nativeEvent, E = Ne(y) && y.hasAttribute(zr("focus-guard")) && y.getAttribute("data-type") === "outside"; g.current = window.setTimeout({ "TA.useMemo[P]": ()=>{ var N; let T = Kt(l.domReference ? l.domReference.ownerDocument : document); !y && T === l.domReference || st((N = c.current.floatingContext) == null ? void 0 : N.refs.floating.current, T) || st(l.domReference, T) || E || o(!1, O, "focus"); } }["TA.useMemo[P]"]); } }) }["TA.useMemo[P]"], [ c, l.domReference, o, m ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "TA.useMemo": ()=>f ? { reference: P } : {} }["TA.useMemo"], [ f, P ]); } _s23(TA, "UqXKb5RgB+D8g428zpbiNPT7N2k="); _c404 = TA; function im(e, t, r) { let o = new Map, a = r === "item", c = e; if (a && e) { let { [TM]: l, [CM]: f, ...m } = e; c = m; } return { ...r === "floating" && { tabIndex: -1, [X2]: "" }, ...c, ...t.map((l)=>{ let f = l ? l[r] : null; return typeof f == "function" ? e ? f(e) : null : f; }).concat(e).reduce((l, f)=>(f && Object.entries(f).forEach((m)=>{ let [h, g] = m; if (!(a && [ TM, CM ].includes(h))) if (h.indexOf("on") === 0) { if (o.has(h) || o.set(h, []), typeof g == "function") { var x; (x = o.get(h)) == null || x.push(g), l[h] = function() { for(var P, D = arguments.length, y = new Array(D), O = 0; O < D; O++)y[O] = arguments[O]; return (P = o.get(h)) == null ? void 0 : P.map((E)=>E(...y)).find((E)=>E !== void 0); }; } } else l[h] = g; }), l), {}) }; } function CA(e) { _s24(); e === void 0 && (e = []); let t = e.map((f)=>f?.reference), r = e.map((f)=>f?.floating), o = e.map((f)=>f?.item), a = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "CA.useCallback[a]": (f)=>im(f, e, "reference") }["CA.useCallback[a]"], t), c = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "CA.useCallback[c]": (f)=>im(f, e, "floating") }["CA.useCallback[c]"], r), l = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "CA.useCallback[l]": (f)=>im(f, e, "item") }["CA.useCallback[l]"], o); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "CA.useMemo": ()=>({ getReferenceProps: a, getFloatingProps: c, getItemProps: l }) }["CA.useMemo"], [ a, c, l ]); } _s24(CA, "TGElzsjJj0LY9RVoAaS1dVaS4uM="); _c405 = CA; function Wi(e, t, r) { switch(e){ case "vertical": return t; case "horizontal": return r; default: return t || r; } } _c406 = Wi; function Fi(e, t) { return Wi(t, e === mo || e === Dr, e === Or || e === Mr); } _c407 = Fi; function am(e, t, r) { return Wi(t, e === Dr, r ? e === Or : e === Mr) || e === "Enter" || e === " " || e === ""; } function GM(e, t, r) { return Wi(t, r ? e === Or : e === Mr, e === Dr); } _c408 = GM; function JM(e, t, r, o) { let a = r ? e === Mr : e === Or, c = e === mo; return t === "both" || t === "horizontal" && o && o > 1 ? e === NA : Wi(t, a, c); } _c409 = JM; function YA(e, t) { _s25(); let { open: r, onOpenChange: o, elements: a, floatingId: c } = e, { listRef: l, activeIndex: f, onNavigate: m = ()=>{}, enabled: h = !0, selectedIndex: g = null, allowEscape: x = !1, loop: P = !1, nested: D = !1, rtl: y = !1, virtual: O = !1, focusItemOnOpen: E = "auto", focusItemOnHover: N = !0, openOnArrowKeyDown: T = !0, disabledIndices: Y = void 0, orientation: F = "vertical", parentOrientation: V, cols: B = 1, scrollItemIntoView: $ = !0, virtualItemRef: z, itemSizes: Z, dense: Q = !1 } = t, oe = co(a.floating), k = ut(oe), G = Ur(), S = Xr(); be(()=>{ e.dataRef.current.orientation = F; }, [ e, F ]); let H = Le(()=>{ m(j.current === -1 ? null : j.current); }), re = Ei(a.domReference), K = react__WEBPACK_IMPORTED_MODULE_0__.useRef(E), j = react__WEBPACK_IMPORTED_MODULE_0__.useRef(g ?? -1), U = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), ae = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!0), qe = react__WEBPACK_IMPORTED_MODULE_0__.useRef(H), de = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!!a.floating), ne = react__WEBPACK_IMPORTED_MODULE_0__.useRef(r), _e = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), ge = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), Ve = ut(Y), Ge = ut(r), We = ut($), Ae = ut(g), [Ue, ot] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [ue, he] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), pe = Le(()=>{ function ie(Ye) { if (O) { var je; (je = Ye.id) != null && je.endsWith("-fui-option") && (Ye.id = c + "-" + Math.random().toString(16).slice(2, 10)), ot(Ye.id), S?.events.emit("virtualfocus", Ye), z && (z.current = Ye); } else Kr(Ye, { sync: _e.current, preventScroll: !0 }); } let me = l.current[j.current], se = ge.current; me && ie(me), (_e.current ? (Ye)=>Ye() : requestAnimationFrame)(()=>{ let Ye = l.current[j.current] || me; if (!Ye) return; me || ie(Ye); let je = We.current; je && He && (se || !ae.current) && (Ye.scrollIntoView == null || Ye.scrollIntoView(typeof je == "boolean" ? { block: "nearest", inline: "nearest" } : je)); }); }); be(()=>{ h && (r && a.floating ? K.current && g != null && (ge.current = !0, j.current = g, H()) : de.current && (j.current = -1, qe.current())); }, [ h, r, a.floating, g, H ]), be(()=>{ if (h && r && a.floating) if (f == null) { if (_e.current = !1, Ae.current != null) return; if (de.current && (j.current = -1, pe()), (!ne.current || !de.current) && K.current && (U.current != null || K.current === !0 && U.current == null)) { let ie = 0, me = ()=>{ l.current[0] == null ? (ie < 2 && (ie ? requestAnimationFrame : queueMicrotask)(me), ie++) : (j.current = U.current == null || am(U.current, F, y) || D ? lo(l, Ve.current) : Si(l, Ve.current), U.current = null, H()); }; me(); } } else Qr(l, f) || (j.current = f, pe(), ge.current = !1); }, [ h, r, a.floating, f, Ae, D, l, F, y, H, pe, Ve ]), be(()=>{ var ie; if (!h || a.floating || !S || O || !de.current) return; let me = S.nodesRef.current, se = (ie = me.find((je)=>je.id === G)) == null || (ie = ie.context) == null ? void 0 : ie.elements.floating, Me = Kt(ft(a.floating)), Ye = me.some((je)=>je.context && st(je.context.elements.floating, Me)); se && !Ye && ae.current && se.focus({ preventScroll: !0 }); }, [ h, a.floating, S, G, O ]), be(()=>{ if (!h || !S || !O || G) return; function ie(me) { he(me.id), z && (z.current = me); } return S.events.on("virtualfocus", ie), ()=>{ S.events.off("virtualfocus", ie); }; }, [ h, S, O, G, z ]), be(()=>{ qe.current = H, ne.current = r, de.current = !!a.floating; }), be(()=>{ r || (U.current = null, K.current = E); }, [ r, E ]); let De = f != null, He = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "YA.useMemo[He]": ()=>{ function ie(se) { if (!Ge.current) return; let Me = l.current.indexOf(se); Me !== -1 && j.current !== Me && (j.current = Me, H()); } return { onFocus (se) { let { currentTarget: Me } = se; _e.current = !0, ie(Me); }, onClick: ({ "YA.useMemo[He]": (se)=>{ let { currentTarget: Me } = se; return Me.focus({ preventScroll: !0 }); } })["YA.useMemo[He]"], onMouseMove (se) { let { currentTarget: Me } = se; _e.current = !0, ge.current = !1, N && ie(Me); }, onPointerLeave (se) { let { pointerType: Me } = se; if (!(!ae.current || Me === "touch") && (_e.current = !0, !!N && (j.current = -1, H(), !O))) { var Ye; (Ye = k.current) == null || Ye.focus({ preventScroll: !0 }); } } }; } }["YA.useMemo[He]"], [ Ge, k, N, l, H, O ]), xe = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "YA.useCallback[xe]": ()=>{ var ie; return V ?? (S == null || (ie = S.nodesRef.current.find({ "YA.useCallback[xe]": (me)=>me.id === G }["YA.useCallback[xe]"])) == null || (ie = ie.context) == null || (ie = ie.dataRef) == null ? void 0 : ie.current.orientation); } }["YA.useCallback[xe]"], [ G, S, V ]), mt = Le((ie)=>{ if (ae.current = !1, _e.current = !0, ie.which === 229 || !Ge.current && ie.currentTarget === k.current) return; if (D && JM(ie.key, F, y, B)) { Fi(ie.key, xe()) || dt(ie), o(!1, ie.nativeEvent, "list-navigation"), ze(a.domReference) && (O ? S?.events.emit("virtualfocus", a.domReference) : a.domReference.focus()); return; } let me = j.current, se = lo(l, Y), Me = Si(l, Y); if (re || (ie.key === "Home" && (dt(ie), j.current = se, H()), ie.key === "End" && (dt(ie), j.current = Me, H())), B > 1) { let Ye = Z || Array.from({ length: l.current.length }, ()=>({ width: 1, height: 1 })), je = Wp(Ye, B, Q), yr = je.findIndex((Mt)=>Mt != null && !xr(l, Mt, Y)), Er = je.reduce((Mt, Ft, Ke)=>Ft != null && !xr(l, Ft, Y) ? Ke : Mt, -1), A = je[Lp({ current: je.map((Mt)=>Mt != null ? l.current[Mt] : null) }, { event: ie, orientation: F, loop: P, rtl: y, cols: B, disabledIndices: Hp([ ...(typeof Y != "function" ? Y : null) || l.current.map((Mt, Ft)=>xr(l, Ft, Y) ? Ft : void 0), void 0 ], je), minIndex: yr, maxIndex: Er, prevIndex: Ap(j.current > Me ? se : j.current, Ye, je, B, ie.key === Dr ? "bl" : ie.key === (y ? Or : Mr) ? "tr" : "tl"), stopEvent: !0 })]; if (A != null && (j.current = A, H()), F === "both") return; } if (Fi(ie.key, F)) { if (dt(ie), r && !O && Kt(ie.currentTarget.ownerDocument) === ie.currentTarget) { j.current = am(ie.key, F, y) ? se : Me, H(); return; } am(ie.key, F, y) ? P ? j.current = me >= Me ? x && me !== l.current.length ? -1 : se : lt(l, { startingIndex: me, disabledIndices: Y }) : j.current = Math.min(Me, lt(l, { startingIndex: me, disabledIndices: Y })) : P ? j.current = me <= se ? x && me !== -1 ? l.current.length : Me : lt(l, { startingIndex: me, decrement: !0, disabledIndices: Y }) : j.current = Math.max(se, lt(l, { startingIndex: me, decrement: !0, disabledIndices: Y })), Qr(l, j.current) && (j.current = -1), H(); } }), it = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "YA.useMemo[it]": ()=>O && r && De && { "aria-activedescendant": ue || Ue } }["YA.useMemo[it]"], [ O, r, De, ue, Ue ]), rt = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "YA.useMemo[rt]": ()=>({ "aria-orientation": F === "both" ? void 0 : F, ...re ? {} : it, onKeyDown: mt, onPointerMove () { ae.current = !0; } }) }["YA.useMemo[rt]"], [ it, mt, F, re ]), Rt = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "YA.useMemo[Rt]": ()=>{ function ie(se) { E === "auto" && jp(se.nativeEvent) && (K.current = !0); } function me(se) { K.current = E, E === "auto" && Fp(se.nativeEvent) && (K.current = !0); } return { ...it, onKeyDown (se) { ae.current = !1; let Me = se.key.startsWith("Arrow"), Ye = [ "Home", "End" ].includes(se.key), je = Me || Ye, yr = GM(se.key, F, y), Er = JM(se.key, F, y, B), A = GM(se.key, xe(), y), Mt = Fi(se.key, F), Ft = (D ? A : Mt) || se.key === "Enter" || se.key.trim() === ""; if (O && r) { let J = S?.nodesRef.current.find({ "YA.useMemo[Rt]": (Jt)=>Jt.parentId == null }["YA.useMemo[Rt]"]), Lt = S && J ? jO(S.nodesRef.current, J.id) : null; if (je && Lt && z) { let Jt = new KeyboardEvent("keydown", { key: se.key, bubbles: !0 }); if (yr || Er) { var Ke, we; let Zr = ((Ke = Lt.context) == null ? void 0 : Ke.elements.domReference) === se.currentTarget, sr = Er && !Zr ? (we = Lt.context) == null ? void 0 : we.elements.domReference : yr ? l.current.find({ "YA.useMemo[Rt]": (vo)=>vo?.id === Ue }["YA.useMemo[Rt]"]) : null; sr && (dt(se), sr.dispatchEvent(Jt), he(void 0)); } if ((Mt || Ye) && Lt.context && Lt.context.open && Lt.parentId && se.currentTarget !== Lt.context.elements.domReference) { var St; dt(se), (St = Lt.context.elements.domReference) == null || St.dispatchEvent(Jt); return; } } return mt(se); } if (!(!r && !T && Me)) { if (Ft) { let J = Fi(se.key, xe()); U.current = D && J ? null : se.key; } if (D) { A && (dt(se), r ? (j.current = lo(l, Ve.current), H()) : o(!0, se.nativeEvent, "list-navigation")); return; } Mt && (g != null && (j.current = g), dt(se), !r && T ? o(!0, se.nativeEvent, "list-navigation") : mt(se), r && H()); } }, onFocus () { r && !O && (j.current = -1, H()); }, onPointerDown: me, onPointerEnter: me, onMouseDown: ie, onClick: ie }; } }["YA.useMemo[Rt]"], [ Ue, it, B, mt, Ve, E, l, D, H, o, r, T, F, xe, y, g, S, O, z ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "YA.useMemo": ()=>h ? { reference: Rt, floating: rt, item: He } : {} }["YA.useMemo"], [ h, Rt, rt, He ]); } _s25(YA, "VSc8lsVvcIEJmwayny31S7by/dw="); _c410 = YA; function FA(e, t) { _s26(); var r, o; t === void 0 && (t = {}); let { open: a, elements: c, floatingId: l } = e, { enabled: f = !0, role: m = "dialog" } = t, h = Dn(), g = ((r = c.domReference) == null ? void 0 : r.id) || h, x = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "FA.useMemo[x]": ()=>{ var T; return ((T = co(c.floating)) == null ? void 0 : T.id) || l; } }["FA.useMemo[x]"], [ c.floating, l ]), P = (o = jA.get(m)) != null ? o : m, y = Ur() != null, O = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "FA.useMemo[O]": ()=>P === "tooltip" || m === "label" ? { ["aria-" + (m === "label" ? "labelledby" : "describedby")]: a ? x : void 0 } : { "aria-expanded": a ? "true" : "false", "aria-haspopup": P === "alertdialog" ? "dialog" : P, "aria-controls": a ? x : void 0, ...P === "listbox" && { role: "combobox" }, ...P === "menu" && { id: g }, ...P === "menu" && y && { role: "menuitem" }, ...m === "select" && { "aria-autocomplete": "none" }, ...m === "combobox" && { "aria-autocomplete": "list" } } }["FA.useMemo[O]"], [ P, x, y, a, g, m ]), E = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "FA.useMemo[E]": ()=>{ let T = { id: x, ...P && { role: P } }; return P === "tooltip" || m === "label" ? T : { ...T, ...P === "menu" && { "aria-labelledby": g } }; } }["FA.useMemo[E]"], [ P, x, g, m ]), N = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({ "FA.useCallback[N]": (T)=>{ let { active: Y, selected: F } = T, V = { role: "option", ...Y && { id: x + "-fui-option" } }; switch(m){ case "select": case "combobox": return { ...V, "aria-selected": F }; } return {}; } }["FA.useCallback[N]"], [ x, m ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "FA.useMemo": ()=>f ? { reference: O, floating: E, item: N } : {} }["FA.useMemo"], [ f, O, E, N ]); } _s26(FA, "NZDaNGpMeVPK9EPQmAoheDYz+8o="); _c411 = FA; function xn(e, t) { return typeof e == "function" ? e(t) : e; } function LA(e, t) { _s27(); let [r, o] = react__WEBPACK_IMPORTED_MODULE_0__.useState(e); return e && !r && o(!0), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "LA.useEffect": ()=>{ if (!e && r) { let a = setTimeout({ "LA.useEffect.a": ()=>o(!1) }["LA.useEffect.a"], t); return ({ "LA.useEffect": ()=>clearTimeout(a) })["LA.useEffect"]; } } }["LA.useEffect"], [ e, r, t ]), r; } _s27(LA, "k5H3sD+aPNl8wiw6uB8VCy4FA+o="); _c412 = LA; function wP(e, t) { _s28(); t === void 0 && (t = {}); let { open: r, elements: { floating: o } } = e, { duration: a = 250 } = t, l = (typeof a == "number" ? a : a.close) || 0, [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState("unmounted"), h = LA(r, l); return !h && f === "close" && m("unmounted"), be(()=>{ if (o) { if (r) { m("initial"); let g = requestAnimationFrame(()=>{ react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync(()=>{ m("open"); }); }); return ()=>{ cancelAnimationFrame(g); }; } m("close"); } }, [ r, o ]), { isMounted: h, status: f }; } _s28(wP, "NL8+5hQYtwZLAt7iF598OW3vBZM="); function WA(e, t) { _s29(); t === void 0 && (t = {}); let { initial: r = { opacity: 0 }, open: o, close: a, common: c, duration: l = 250 } = t, f = e.placement, m = f.split("-")[0], h = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "WA.useMemo[h]": ()=>({ side: m, placement: f }) }["WA.useMemo[h]"], [ m, f ]), g = typeof l == "number", x = (g ? l : l.open) || 0, P = (g ? l : l.close) || 0, [D, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ "WA.useState": ()=>({ ...xn(c, h), ...xn(r, h) }) }["WA.useState"]), { isMounted: O, status: E } = wP(e, { duration: l }), N = ut(r), T = ut(o), Y = ut(a), F = ut(c); return be(()=>{ let V = xn(N.current, h), B = xn(Y.current, h), $ = xn(F.current, h), z = xn(T.current, h) || Object.keys(V).reduce((Z, Q)=>(Z[Q] = "", Z), {}); if (E === "initial" && y((Z)=>({ transitionProperty: Z.transitionProperty, ...$, ...V })), E === "open" && y({ transitionProperty: Object.keys(z).map(kM).join(","), transitionDuration: x + "ms", ...$, ...z }), E === "close") { let Z = B || V; y({ transitionProperty: Object.keys(Z).map(kM).join(","), transitionDuration: P + "ms", ...$, ...Z }); } }, [ P, Y, N, T, F, x, E, h ]), { isMounted: O, styles: D }; } _s29(WA, "KYzIkRZI9BOW5gqsicsfXsnRw7s="); _c413 = WA; function AA(e, t) { _s30(); var r; let { open: o, dataRef: a } = e, { listRef: c, activeIndex: l, onMatch: f, onTypingChange: m, enabled: h = !0, findMatch: g = null, resetMs: x = 750, ignoreKeys: P = [], selectedIndex: D = null } = t, y = react__WEBPACK_IMPORTED_MODULE_0__.useRef(-1), O = react__WEBPACK_IMPORTED_MODULE_0__.useRef(""), E = react__WEBPACK_IMPORTED_MODULE_0__.useRef((r = D ?? l) != null ? r : -1), N = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), T = Le(f), Y = Le(m), F = ut(g), V = ut(P); be(()=>{ o && (pt(y), N.current = null, O.current = ""); }, [ o ]), be(()=>{ if (o && O.current === "") { var Q; E.current = (Q = D ?? l) != null ? Q : -1; } }, [ o, D, l ]); let B = Le((Q)=>{ Q ? a.current.typing || (a.current.typing = Q, Y(Q)) : a.current.typing && (a.current.typing = Q, Y(Q)); }), $ = Le((Q)=>{ function oe(re, K, j) { let U = F.current ? F.current(K, j) : K.find((ae)=>ae?.toLocaleLowerCase().indexOf(j.toLocaleLowerCase()) === 0); return U ? re.indexOf(U) : -1; } let k = c.current; if (O.current.length > 0 && O.current[0] !== " " && (oe(k, k, O.current) === -1 ? B(!1) : Q.key === " " && dt(Q)), k == null || V.current.includes(Q.key) || Q.key.length !== 1 || Q.ctrlKey || Q.metaKey || Q.altKey) return; o && Q.key !== " " && (dt(Q), B(!0)), k.every((re)=>{ var K, j; return re ? ((K = re[0]) == null ? void 0 : K.toLocaleLowerCase()) !== ((j = re[1]) == null ? void 0 : j.toLocaleLowerCase()) : !0; }) && O.current === Q.key && (O.current = "", E.current = N.current), O.current += Q.key, pt(y), y.current = window.setTimeout(()=>{ O.current = "", E.current = N.current, B(!1); }, x); let S = E.current, H = oe(k, [ ...k.slice((S || 0) + 1), ...k.slice(0, (S || 0) + 1) ], O.current); H !== -1 ? (T(H), N.current = H) : Q.key !== " " && (O.current = "", B(!1)); }), z = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "AA.useMemo[z]": ()=>({ onKeyDown: $ }) }["AA.useMemo[z]"], [ $ ]), Z = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "AA.useMemo[Z]": ()=>({ onKeyDown: $, onKeyUp (Q) { Q.key === " " && B(!1); } }) }["AA.useMemo[Z]"], [ $, B ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "AA.useMemo": ()=>h ? { reference: z, floating: Z } : {} }["AA.useMemo"], [ h, z, Z ]); } _s30(AA, "JDogQRCPDIy799zrbpnRR0Yldug="); _c414 = AA; function eP(e, t) { return { ...e, rects: { ...e.rects, floating: { ...e.rects.floating, height: t } } }; } function QA(e, t) { _s31(); let { open: r, elements: o } = e, { enabled: a = !0, overflowRef: c, scrollRef: l, onChange: f } = t, m = Le(f), h = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), g = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), x = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); react__WEBPACK_IMPORTED_MODULE_0__.useEffect({ "QA.useEffect": ()=>{ if (!a) return; function D(O) { if (O.ctrlKey || !y || c.current == null) return; let E = O.deltaY, N = c.current.top >= -.5, T = c.current.bottom >= -.5, Y = y.scrollHeight - y.clientHeight, F = E < 0 ? -1 : 1, V = E < 0 ? "max" : "min"; y.scrollHeight <= y.clientHeight || (!N && E > 0 || !T && E < 0 ? (O.preventDefault(), react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync({ "QA.useEffect.D": ()=>{ m({ "QA.useEffect.D": (B)=>B + Math[V](E, Y * F) }["QA.useEffect.D"]); } }["QA.useEffect.D"])) : /firefox/i.test(Mi()) && (y.scrollTop += E)); } let y = l?.current || o.floating; if (r && y) return y.addEventListener("wheel", D), requestAnimationFrame({ "QA.useEffect": ()=>{ g.current = y.scrollTop, c.current != null && (x.current = { ...c.current }); } }["QA.useEffect"]), ({ "QA.useEffect": ()=>{ g.current = null, x.current = null, y.removeEventListener("wheel", D); } })["QA.useEffect"]; } }["QA.useEffect"], [ a, r, o.floating, c, l, m ]); let P = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "QA.useMemo[P]": ()=>({ onKeyDown () { h.current = !0; }, onWheel () { h.current = !1; }, onPointerMove () { h.current = !1; }, onScroll () { let D = l?.current || o.floating; if (!(!c.current || !D || !h.current)) { if (g.current !== null) { let y = D.scrollTop - g.current; (c.current.bottom < -.5 && y < -1 || c.current.top < -.5 && y > 1) && react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync({ "QA.useMemo[P]": ()=>m({ "QA.useMemo[P]": (O)=>O + y }["QA.useMemo[P]"]) }["QA.useMemo[P]"]); } requestAnimationFrame({ "QA.useMemo[P]": ()=>{ g.current = D.scrollTop; } }["QA.useMemo[P]"]); } } }) }["QA.useMemo[P]"], [ o.floating, m, c, l ]); return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "QA.useMemo": ()=>a ? { floating: P } : {} }["QA.useMemo"], [ a, P ]); } _s31(QA, "Linf3n6E8zGrdNwLh0d6SfCKhI0="); _c415 = QA; function DP(e, t, r) { return r === void 0 && (r = !0), e.filter((a)=>{ var c; return a.parentId === t && (!r || ((c = a.context) == null ? void 0 : c.open)); }).flatMap((a)=>[ a, ...DP(e, a.id, r) ]); } _c416 = DP; function tP(e, t) { let [r, o] = e, a = !1, c = t.length; for(let l = 0, f = c - 1; l < c; f = l++){ let [m, h] = t[l] || [ 0, 0 ], [g, x] = t[f] || [ 0, 0 ]; h >= o != x >= o && r <= (g - m) * (o - h) / (x - h) + m && (a = !a); } return a; } function BA(e, t) { return e[0] >= t.x && e[0] <= t.x + t.width && e[1] >= t.y && e[1] <= t.y + t.height; } _c417 = BA; function VA(e) { e === void 0 && (e = {}); let { buffer: t = .5, blockPointerEvents: r = !1, requireIntent: o = !0 } = e, a = { current: -1 }, c = !1, l = null, f = null, m = typeof performance < "u" ? performance.now() : 0; function h(x, P) { let D = performance.now(), y = D - m; if (l === null || f === null || y === 0) return l = x, f = P, m = D, null; let O = x - l, E = P - f, T = Math.sqrt(O * O + E * E) / y; return l = x, f = P, m = D, T; } let g = (x)=>{ let { x: P, y: D, placement: y, elements: O, onClose: E, nodeId: N, tree: T } = x; return function(F) { function V() { pt(a), E(); } if (pt(a), !O.domReference || !O.floating || y == null || P == null || D == null) return; let { clientX: B, clientY: $ } = F, z = [ B, $ ], Z = dA(F), Q = F.type === "mouseleave", oe = rm(O.floating, Z), k = rm(O.domReference, Z), G = O.domReference.getBoundingClientRect(), S = O.floating.getBoundingClientRect(), H = y.split("-")[0], re = P > S.right - S.width / 2, K = D > S.bottom - S.height / 2, j = BA(z, G), U = S.width > G.width, ae = S.height > G.height, qe = (U ? G : S).left, de = (U ? G : S).right, ne = (ae ? G : S).top, _e = (ae ? G : S).bottom; if (oe && (c = !0, !Q)) return; if (k && (c = !1), k && !Q) { c = !0; return; } if (Q && Ne(F.relatedTarget) && rm(O.floating, F.relatedTarget) || T && DP(T.nodesRef.current, N).length) return; if (H === "top" && D >= G.bottom - 1 || H === "bottom" && D <= G.top + 1 || H === "left" && P >= G.right - 1 || H === "right" && P <= G.left + 1) return V(); let ge = []; switch(H){ case "top": ge = [ [ qe, G.top + 1 ], [ qe, S.bottom - 1 ], [ de, S.bottom - 1 ], [ de, G.top + 1 ] ]; break; case "bottom": ge = [ [ qe, S.top + 1 ], [ qe, G.bottom - 1 ], [ de, G.bottom - 1 ], [ de, S.top + 1 ] ]; break; case "left": ge = [ [ S.right - 1, _e ], [ S.right - 1, ne ], [ G.left + 1, ne ], [ G.left + 1, _e ] ]; break; case "right": ge = [ [ G.right - 1, _e ], [ G.right - 1, ne ], [ S.left + 1, ne ], [ S.left + 1, _e ] ]; break; } function Ve(Ge) { let [We, Ae] = Ge; switch(H){ case "top": { let Ue = [ U ? We + t / 2 : re ? We + t * 4 : We - t * 4, Ae + t + 1 ], ot = [ U ? We - t / 2 : re ? We + t * 4 : We - t * 4, Ae + t + 1 ], ue = [ [ S.left, re || U ? S.bottom - t : S.top ], [ S.right, re ? U ? S.bottom - t : S.top : S.bottom - t ] ]; return [ Ue, ot, ...ue ]; } case "bottom": { let Ue = [ U ? We + t / 2 : re ? We + t * 4 : We - t * 4, Ae - t ], ot = [ U ? We - t / 2 : re ? We + t * 4 : We - t * 4, Ae - t ], ue = [ [ S.left, re || U ? S.top + t : S.bottom ], [ S.right, re ? U ? S.top + t : S.bottom : S.top + t ] ]; return [ Ue, ot, ...ue ]; } case "left": { let Ue = [ We + t + 1, ae ? Ae + t / 2 : K ? Ae + t * 4 : Ae - t * 4 ], ot = [ We + t + 1, ae ? Ae - t / 2 : K ? Ae + t * 4 : Ae - t * 4 ]; return [ ...[ [ K || ae ? S.right - t : S.left, S.top ], [ K ? ae ? S.right - t : S.left : S.right - t, S.bottom ] ], Ue, ot ]; } case "right": { let Ue = [ We - t, ae ? Ae + t / 2 : K ? Ae + t * 4 : Ae - t * 4 ], ot = [ We - t, ae ? Ae - t / 2 : K ? Ae + t * 4 : Ae - t * 4 ], ue = [ [ K || ae ? S.left + t : S.right, S.top ], [ K ? ae ? S.left + t : S.right : S.left + t, S.bottom ] ]; return [ Ue, ot, ...ue ]; } } } if (!tP([ B, $ ], ge)) { if (c && !j) return V(); if (!Q && o) { let Ge = h(F.clientX, F.clientY); if (Ge !== null && Ge < .1) return V(); } tP([ B, $ ], Ve([ P, D ])) ? !c && o && (a.current = window.setTimeout(V, 40)) : V(); } }; }; return g.__options = { blockPointerEvents: r }, g; } _c418 = VA; var nP, X2, TM, CM, Or, Mr, mo, Dr, sP, uP, cP, em, Z2, G2, J2, NM, k2, YM, tA, Dn, rA, dP, fP, Ur, Xr, jM, sm, pP, mP, hP, FM, wn, Ni, Yi, nm, pA, mA, cm, Li, gA, vP, AM, _P, QM, wr, xA, ji, KM, $M, OA, SA, qA, ZM, NA, jA, kM, HA, MP = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.b)(()=>{ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$(), _s4 = $RefreshSig$(), _s5 = $RefreshSig$(), _s6 = $RefreshSig$(), _s7 = $RefreshSig$(); AO(); ao(); Rp(); kp(); kp(); mn(); nP = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({ register: ()=>{}, unregister: ()=>{}, map: new Map, elementsRef: { current: [] } }); X2 = "data-floating-ui-focusable", TM = "active", CM = "selected", Or = "ArrowLeft", Mr = "ArrowRight", mo = "ArrowUp", Dr = "ArrowDown"; sP = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({ activeIndex: 0, onNavigate: ()=>{} }), uP = [ Or, Mr ], cP = [ mo, Dr ], em = [ ...uP, ...cP ], Z2 = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_s(function(t, r) { _s(); let { render: o, orientation: a = "both", loop: c = !0, rtl: l = !1, cols: f = 1, disabledIndices: m, activeIndex: h, onNavigate: g, itemSizes: x, dense: P = !1, ...D } = t, [y, O] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0), E = h ?? y, N = Le(g ?? O), T = react__WEBPACK_IMPORTED_MODULE_0__.useRef([]), Y = o && typeof o != "function" ? o.props : {}, F = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({ "MP.useMemo[F]": ()=>({ activeIndex: E, onNavigate: N }) }["MP.useMemo[F]"], [ E, N ]), V = f > 1; function B(z) { if (!em.includes(z.key)) return; let Z = E, Q = lo(T, m), oe = Si(T, m), k = l ? Or : Mr, G = l ? Mr : Or; if (V) { let j = x || Array.from({ length: T.current.length }, ()=>({ width: 1, height: 1 })), U = Wp(j, f, P), ae = U.findIndex((ne)=>ne != null && !xr(T, ne, m)), qe = U.reduce((ne, _e, ge)=>_e != null && !xr(T, _e, m) ? ge : ne, -1), de = U[Lp({ current: U.map((ne)=>ne ? T.current[ne] : null) }, { event: z, orientation: a, loop: c, rtl: l, cols: f, disabledIndices: Hp([ ...(typeof m != "function" ? m : null) || T.current.map((ne, _e)=>xr(T, _e, m) ? _e : void 0), void 0 ], U), minIndex: ae, maxIndex: qe, prevIndex: Ap(E > oe ? Q : E, j, U, f, z.key === Dr ? "bl" : z.key === k ? "tr" : "tl") })]; de != null && (Z = de); } let S = { horizontal: [ k ], vertical: [ Dr ], both: [ k, Dr ] }[a], H = { horizontal: [ G ], vertical: [ mo ], both: [ G, mo ] }[a], re = V ? em : ({ horizontal: uP, vertical: cP, both: em })[a]; if (Z === E && [ ...S, ...H ].includes(z.key) && (c && Z === oe && S.includes(z.key) ? Z = Q : c && Z === Q && H.includes(z.key) ? Z = oe : Z = lt(T, { startingIndex: Z, decrement: H.includes(z.key), disabledIndices: m })), Z !== E && !Qr(T, Z)) { var K; z.stopPropagation(), re.includes(z.key) && z.preventDefault(), N(Z), (K = T.current[Z]) == null || K.focus(); } } let $ = { ...D, ...Y, ref: r, "aria-orientation": a === "both" ? void 0 : a, onKeyDown (z) { D.onKeyDown == null || D.onKeyDown(z), Y.onKeyDown == null || Y.onKeyDown(z), B(z); } }; return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sP.Provider, { value: F, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(oP, { elementsRef: T, children: aP(o, $) }) }); }, "z7o8Oph3RTY1/losPyTB7kcvAwY=")), G2 = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_s1(function(t, r) { _s1(); let { render: o, ...a } = t, c = o && typeof o != "function" ? o.props : {}, { activeIndex: l, onNavigate: f } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(sP), { ref: m, index: h } = iP(), g = rP([ m, r, c.ref ]), x = l === h, P = { ...a, ...c, ref: g, tabIndex: x ? 0 : -1, "data-active": x ? "" : void 0, onFocus (D) { a.onFocus == null || a.onFocus(D), c.onFocus == null || c.onFocus(D), f(h); } }; return aP(o, P); }, "RMyoz7olEU75Knoq9bubpIeOigo=")), J2 = { .../*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2))) }, NM = !1, k2 = 0, YM = ()=>"floating-ui-" + Math.random().toString(36).slice(2, 6) + k2++; tA = J2.useId, Dn = tA || eA, rA = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_s2(function(t, r) { _s2(); let { context: { placement: o, elements: { floating: a }, middlewareData: { arrow: c, shift: l } }, width: f = 14, height: m = 7, tipRadius: h = 0, strokeWidth: g = 0, staticOffset: x, stroke: P, d: D, style: { transform: y, ...O } = {}, ...E } = t, N = Dn(), [T, Y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1); if (be(()=>{ if (!a) return; Dt(a).direction === "rtl" && Y(!0); }, [ a ]), !a) return null; let [F, V] = o.split("-"), B = F === "top" || F === "bottom", $ = x; (B && l != null && l.x || !B && l != null && l.y) && ($ = null); let z = g * 2, Z = z / 2, Q = f / 2 * (h / -8 + 1), oe = m / 2 * h / 4, k = !!D, G = $ && V === "end" ? "bottom" : "top", S = $ && V === "end" ? "right" : "left"; $ && T && (S = V === "end" ? "left" : "right"); let H = c?.x != null ? $ || c.x : "", re = c?.y != null ? $ || c.y : "", K = D || "M0,0" + (" H" + f) + (" L" + (f - Q) + "," + (m - oe)) + (" Q" + f / 2 + "," + m + " " + Q + "," + (m - oe)) + " Z", j = { top: k ? "rotate(180deg)" : "", left: k ? "rotate(90deg)" : "rotate(-90deg)", bottom: k ? "" : "rotate(180deg)", right: k ? "rotate(-90deg)" : "rotate(90deg)" }[F]; return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("svg", { ...E, "aria-hidden": !0, ref: r, width: k ? f : f + z, height: f, viewBox: "0 0 " + f + " " + (m > f ? m : f), style: { position: "absolute", pointerEvents: "none", [S]: H, [G]: re, [F]: B || k ? "100%" : "calc(100% - " + z / 2 + "px)", transform: [ j, y ].filter((U)=>!!U).join(" "), ...O }, children: [ z > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("path", { clipPath: "url(#" + N + ")", fill: "none", stroke: P, strokeWidth: z + (D ? 0 : 1), d: K }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("path", { stroke: z && !D ? E.fill : "none", d: K }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("clipPath", { id: N, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("rect", { x: -Z, y: Z * (k ? -1 : 1), width: f + z, height: f }) }) ] }); }, "YiQ73mCUxM7MAZpQ79LAHxwRsjY=")); dP = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null), fP = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null), Ur = _s3(()=>{ _s3(); var e; return ((e = react__WEBPACK_IMPORTED_MODULE_0__.useContext(dP)) == null ? void 0 : e.id) || null; }, "gDsCjeeItUuvgOWf1v4qoK9RF6k="), Xr = _s4(()=>{ _s4(); return react__WEBPACK_IMPORTED_MODULE_0__.useContext(fP); }, "gDsCjeeItUuvgOWf1v4qoK9RF6k="); jM = zr("safe-polygon"); sm = ()=>{}, pP = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({ delay: 0, initialDelay: 0, timeoutMs: 0, currentId: null, setCurrentId: sm, setState: sm, isInstantPhase: !1 }), mP = _s5(()=>{ _s5(); return react__WEBPACK_IMPORTED_MODULE_0__.useContext(pP); }, "gDsCjeeItUuvgOWf1v4qoK9RF6k="); hP = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({ hasProvider: !1, timeoutMs: 0, delayRef: { current: 0 }, initialDelayRef: { current: 0 }, timeoutIdRef: { current: -1 }, currentIdRef: { current: null }, currentContextRef: { current: null } }); FM = 0; wn = { inert: new WeakMap, "aria-hidden": new WeakMap, none: new WeakMap }; Ni = new WeakSet, Yi = {}, nm = 0, pA = ()=>typeof HTMLElement < "u" && "inert" in HTMLElement.prototype; mA = (e, t)=>t.map((r)=>{ if (e.contains(r)) return r; let o = gP(r); return e.contains(o) ? o : null; }).filter((r)=>r != null); cm = { border: 0, clip: "rect(0 0 0 0)", height: "1px", margin: "-1px", overflow: "hidden", padding: 0, position: "fixed", whiteSpace: "nowrap", width: "1px", top: 0, left: 0 }, Li = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_s6(function(t, r) { _s6(); let [o, a] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); be(()=>{ Np() && a("button"); }, []); let c = { ref: r, tabIndex: 0, role: o, "aria-hidden": o ? void 0 : !0, [zr("focus-guard")]: "", style: cm }; return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", { ...t, ...c }); }, "CyLgKlgjotTDKVD/Rq5a9pwQXlM=")), gA = { clipPath: "inset(50%)", position: "fixed", top: 0, left: 0 }, vP = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null), AM = zr("portal"); _P = _s7(()=>{ _s7(); return react__WEBPACK_IMPORTED_MODULE_0__.useContext(vP); }, "gDsCjeeItUuvgOWf1v4qoK9RF6k="); QM = 20, wr = []; xA = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function(t, r) { return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("button", { ...t, type: "button", ref: r, tabIndex: -1, style: cm }); }); ji = 0, KM = "--floating-ui-scrollbar-width"; $M = ()=>{}, OA = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function(t, r) { let { lockScroll: o = !1, ...a } = t; return be(()=>{ if (o) return ji++, ji === 1 && ($M = DA()), ()=>{ ji--, ji === 0 && $M(); }; }, [ o ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { ref: r, ...a, style: { position: "fixed", overflow: "auto", top: 0, right: 0, bottom: 0, left: 0, ...a.style } }); }); SA = { pointerdown: "onPointerDown", mousedown: "onMouseDown", click: "onClick" }, qA = { pointerdown: "onPointerDownCapture", mousedown: "onMouseDownCapture", click: "onClickCapture" }, ZM = (e)=>{ var t, r; return { escapeKey: typeof e == "boolean" ? e : (t = e?.escapeKey) != null ? t : !1, outsidePress: typeof e == "boolean" ? e : (r = e?.outsidePress) != null ? r : !0 }; }; NA = "Escape"; jA = new Map([ [ "select", "listbox" ], [ "combobox", "listbox" ], [ "label", !1 ] ]); kM = (e)=>e.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (t, r)=>(r ? "-" : "") + t.toLowerCase()); HA = (e)=>({ name: "inner", options: e, async fn (t) { let { listRef: r, overflowRef: o, onFallbackChange: a, offset: c = 0, index: l = 0, minItemsVisible: f = 4, referenceOverflowThreshold: m = 0, scrollRef: h, ...g } = yt(e, t), { rects: x, platform: P, elements: { floating: D } } = t, y = r.current[l], O = h?.current || D, E = D.clientTop || O.clientTop, N = D.clientTop !== 0, T = O.clientTop !== 0, Y = D === O; if (!y) return {}; let F = { ...t, ...await Ci(-y.offsetTop - D.clientTop - x.reference.height / 2 - y.offsetHeight / 2 - c).fn(t) }, V = await P.detectOverflow(eP(F, O.scrollHeight + E + D.clientTop), g), B = await P.detectOverflow(F, { ...g, elementContext: "reference" }), $ = Ze(0, V.top), z = F.y + $, oe = (O.scrollHeight > O.clientHeight ? (k)=>k : Ar)(Ze(0, O.scrollHeight + (N && Y || T ? E * 2 : 0) - $ - Ze(0, V.bottom))); if (O.style.maxHeight = oe + "px", O.scrollTop = $, a) { let k = O.offsetHeight < y.offsetHeight * Ot(f, r.current.length) - 1 || B.top >= -m || B.bottom >= -m; react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync(()=>a(k)); } return o && (o.current = await P.detectOverflow(eP({ ...F, y: z }, O.offsetHeight + E + D.clientTop), g)), { y: z }; } }); }); var yP = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Ai, PP)=>{ (function(e, t) { typeof Ai == "object" && typeof PP < "u" ? t(Ai, Bm(), (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.a)("react"), pO(), At(), Sn(), qn(), qr(), Rn(), Po(), rn(), yo(), Ut(), In(), To(), Tn(), Nn(), Yn(), Qo(), Ho(), $o(), Zo(), un(), Qa(), Qn(), Va(), Ka(), Io(), $a(), za(), Xa(), es(), ts(), Ro(), rs(), Ir(), ri(), ni(), oi(), Xt(), Nu(), So(), qo(), ei(), Lu(), Wu(), Au(), Hu(), no(), Qu(), Bu(), Vu(), en(), nn(), Ln(), Ct(), Wn(), dn(), si(), Ku(), $u(), zu(), L(), (MP(), (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.f)(OP)), (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.a)("react-dom")) : typeof define == "function" && define.amd ? define([ "exports", "clsx", "react", "date-fns", "date-fns/addDays", "date-fns/addHours", "date-fns/addMinutes", "date-fns/addMonths", "date-fns/addQuarters", "date-fns/addSeconds", "date-fns/addWeeks", "date-fns/addYears", "date-fns/differenceInCalendarDays", "date-fns/differenceInCalendarMonths", "date-fns/differenceInCalendarQuarters", "date-fns/differenceInCalendarYears", "date-fns/endOfDay", "date-fns/endOfMonth", "date-fns/endOfWeek", "date-fns/endOfYear", "date-fns/format", "date-fns/getDate", "date-fns/getDay", "date-fns/getHours", "date-fns/getISOWeek", "date-fns/getMinutes", "date-fns/getMonth", "date-fns/getQuarter", "date-fns/getSeconds", "date-fns/getTime", "date-fns/getYear", "date-fns/isAfter", "date-fns/isBefore", "date-fns/isDate", "date-fns/isEqual", "date-fns/isSameDay", "date-fns/isSameMonth", "date-fns/isSameQuarter", "date-fns/isSameYear", "date-fns/isValid", "date-fns/isWithinInterval", "date-fns/max", "date-fns/min", "date-fns/parse", "date-fns/parseISO", "date-fns/set", "date-fns/setHours", "date-fns/setMinutes", "date-fns/setMonth", "date-fns/setQuarter", "date-fns/setSeconds", "date-fns/setYear", "date-fns/startOfDay", "date-fns/startOfMonth", "date-fns/startOfQuarter", "date-fns/startOfWeek", "date-fns/startOfYear", "date-fns/subDays", "date-fns/subMonths", "date-fns/subQuarters", "date-fns/subWeeks", "date-fns/subYears", "date-fns/toDate", "@floating-ui/react", "react-dom" ], t) : t((e = typeof globalThis < "u" ? globalThis : e || self).DatePicker = {}, e.clsx, e.React, e.dateFns, e.addDays, e.addHours, e.addMinutes, e.addMonths, e.addQuarters, e.addSeconds, e.addWeeks, e.addYears, e.differenceInCalendarDays, e.differenceInCalendarMonths, e.differenceInCalendarQuarters, e.differenceInCalendarYears, e.endOfDay, e.endOfMonth, e.endOfWeek, e.endOfYear, e.format, e.getDate, e.getDay, e.getHours, e.getISOWeek, e.getMinutes, e.getMonth, e.getQuarter, e.getSeconds, e.getTime, e.getYear, e.isAfter, e.isBefore, e.isDate, e.isEqual$1, e.isSameDay$1, e.isSameMonth$1, e.isSameQuarter$1, e.isSameYear$1, e.isValid$1, e.isWithinInterval, e.max, e.min, e.parse, e.parseISO, e.set, e.setHours, e.setMinutes, e.setMonth, e.setQuarter, e.setSeconds, e.setYear, e.startOfDay, e.startOfMonth, e.startOfQuarter, e.startOfWeek, e.startOfYear, e.subDays, e.subMonths, e.subQuarters, e.subWeeks, e.subYears, e.toDate, e.react, e.ReactDOM); })(Ai, function(e, t, r, o, a, c, l, f, m, h, g, x, P, D, y, O, E, N, T, Y, F, V, B, $, z, Z, Q, oe, k, G, S, H, re, K, j, U, ae, qe, de, ne, _e, ge, Ve, Ge, We, Ae, Ue, ot, ue, he, pe, De, He, xe, mt, it, rt, Rt, ie, me, se, Me, Ye, je, yr) { var _s = $RefreshSig$(); "use strict"; function Er(w) { return w && typeof w == "object" && "default" in w ? w : { default: w }; } var A = Er(r), Mt = Er(yr), Ft = function(w, v) { return Ft = Object.setPrototypeOf || ({ __proto__: [] }) instanceof Array && function(i, n) { i.__proto__ = n; } || function(i, n) { for(var u in n)Object.prototype.hasOwnProperty.call(n, u) && (i[u] = n[u]); }, Ft(w, v); }; function Ke(w, v) { if (typeof v != "function" && v !== null) throw new TypeError("Class extends value " + String(v) + " is not a constructor or null"); function i() { this.constructor = w; } Ft(w, v), w.prototype = v === null ? Object.create(v) : (i.prototype = v.prototype, new i); } var we = function() { return we = Object.assign || function(w) { for(var v, i = 1, n = arguments.length; i < n; i++)for(var u in v = arguments[i])Object.prototype.hasOwnProperty.call(v, u) && (w[u] = v[u]); return w; }, we.apply(this, arguments); }; function St(w, v, i) { if (i || arguments.length === 2) for(var n, u = 0, d = v.length; u < d; u++)!n && u in v || (n || (n = Array.prototype.slice.call(v, 0, u)), n[u] = v[u]); return w.concat(n || Array.prototype.slice.call(v)); } typeof SuppressedError == "function" && SuppressedError; var J, Lt = function(w) { var v = w.showTimeSelectOnly, i = v !== void 0 && v, n = w.showTime, u = n !== void 0 && n, d = w.className, p = w.children, b = i ? "Choose Time" : "Choose Date".concat(u ? " and Time" : ""); return A.default.createElement("div", { className: d, role: "dialog", "aria-label": b, "aria-modal": "true" }, p); }, Jt = function(w) { var _s = $RefreshSig$(); var v = w.children, i = w.onClickOutside, n = w.className, u = w.containerRef, d = w.style, p = _s(function(b, M) { _s(); var R = r.useRef(null), I = r.useRef(b); I.current = b; var C = r.useCallback({ "yP.Jt.p.useCallback[C]": function(W) { var X; R.current && !R.current.contains(W.target) && (M && W.target instanceof HTMLElement && W.target.classList.contains(M) || (X = I.current) === null || X === void 0 || X.call(I, W)); } }["yP.Jt.p.useCallback[C]"], [ M ]); return r.useEffect({ "yP.Jt.p.useEffect": function() { return document.addEventListener("mousedown", C), ({ "yP.Jt.p.useEffect": function() { document.removeEventListener("mousedown", C); } })["yP.Jt.p.useEffect"]; } }["yP.Jt.p.useEffect"], [ C ]), R; }, "drP+XzBMdC4xztg5Lt/Lxz7hUjU=")(i, w.ignoreClass); return A.default.createElement("div", { className: n, style: d, ref: function(b) { p.current = b, u && (u.current = b); } }, v); }; function Zr() { return typeof window < "u" ? window : globalThis; } (function(w) { w.ArrowUp = "ArrowUp", w.ArrowDown = "ArrowDown", w.ArrowLeft = "ArrowLeft", w.ArrowRight = "ArrowRight", w.PageUp = "PageUp", w.PageDown = "PageDown", w.Home = "Home", w.End = "End", w.Enter = "Enter", w.Space = " ", w.Tab = "Tab", w.Escape = "Escape", w.Backspace = "Backspace", w.X = "x"; })(J || (J = {})); var sr = 12, vo = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; function Re(w) { if (w == null) return new Date; var v = typeof w == "string" ? We.parseISO(w) : Ye.toDate(w); return kt(v) ? v : new Date; } function Qi(w, v, i, n, u) { var d, p = null, b = Jr(i) || Jr(Gr()), M = !0; if (Array.isArray(v)) return v.forEach(function(I) { var C = Ge.parse(w, I, new Date, { locale: b, useAdditionalWeekYearTokens: !0, useAdditionalDayOfYearTokens: !0 }); n && (M = kt(C, u) && w === Qe(C, I, i)), kt(C, u) && M && (p = C); }), p; if (p = Ge.parse(w, v, new Date, { locale: b, useAdditionalWeekYearTokens: !0, useAdditionalDayOfYearTokens: !0 }), n) M = kt(p) && w === Qe(p, v, i); else if (!kt(p)) { var R = ((d = v.match(vo)) !== null && d !== void 0 ? d : []).map(function(I) { var C = I[0]; if (C === "p" || C === "P") { var W = F.longFormatters[C]; return b ? W(I, b.formatLong) : C; } return I; }).join(""); w.length > 0 && (p = Ge.parse(w, R.slice(0, w.length), new Date, { useAdditionalWeekYearTokens: !0, useAdditionalDayOfYearTokens: !0 })), kt(p) || (p = new Date(w)); } return kt(p) && M ? p : null; } function kt(w, v) { return ne.isValid(w) && !re.isBefore(w, v ?? new Date("1/1/1800")); } function Qe(w, v, i) { if (i === "en") return F.format(w, v, { useAdditionalWeekYearTokens: !0, useAdditionalDayOfYearTokens: !0 }); var n = i ? Jr(i) : void 0; return i && !n && console.warn('A locale object was not found for the provided string ["'.concat(i, '"].')), !n && Gr() && Jr(Gr()) && (n = Jr(Gr())), F.format(w, v, { locale: n, useAdditionalWeekYearTokens: !0, useAdditionalDayOfYearTokens: !0 }); } function It(w, v) { var i = v.dateFormat, n = v.locale, u = Array.isArray(i) && i.length > 0 ? i[0] : i; return w && Qe(w, u, n) || ""; } function Bi(w, v) { var i = v.hour, n = i === void 0 ? 0 : i, u = v.minute, d = u === void 0 ? 0 : u, p = v.second, b = p === void 0 ? 0 : p; return Ue.setHours(ot.setMinutes(pe.setSeconds(w, b), d), n); } function bo(w) { return He.startOfDay(w); } function ur(w, v, i) { var n = Jr(v || Gr()); return it.startOfWeek(w, { locale: n, weekStartsOn: i }); } function er(w) { return xe.startOfMonth(w); } function Pn(w) { return rt.startOfYear(w); } function dm(w) { return mt.startOfQuarter(w); } function fm() { return He.startOfDay(Re()); } function pm(w) { return E.endOfDay(w); } function QP(w) { return N.endOfMonth(w); } function cr(w, v) { return w && v ? de.isSameYear(w, v) : !w && !v; } function qt(w, v) { return w && v ? ae.isSameMonth(w, v) : !w && !v; } function _o(w, v) { return w && v ? qe.isSameQuarter(w, v) : !w && !v; } function ye(w, v) { return w && v ? U.isSameDay(w, v) : !w && !v; } function Sr(w, v) { return w && v ? j.isEqual(w, v) : !w && !v; } function xo(w, v, i) { var n, u = He.startOfDay(v), d = E.endOfDay(i); try { n = _e.isWithinInterval(w, { start: u, end: d }); } catch { n = !1; } return n; } function Gr() { return Zr().__localeId__; } function Jr(w) { if (typeof w == "string") { var v = Zr(); return v.__localeData__ ? v.__localeData__[w] : void 0; } return w; } function Vi(w, v) { return Qe(ue.setMonth(Re(), w), "LLLL", v); } function mm(w, v) { return Qe(ue.setMonth(Re(), w), "LLL", v); } function Tt(w, v) { var i = v === void 0 ? {} : v, n = i.minDate, u = i.maxDate, d = i.excludeDates, p = i.excludeDateIntervals, b = i.includeDates, M = i.includeDateIntervals, R = i.filterDate; return yn(w, { minDate: n, maxDate: u }) || d && d.some(function(I) { return I instanceof Date ? ye(w, I) : ye(w, I.date); }) || p && p.some(function(I) { var C = I.start, W = I.end; return _e.isWithinInterval(w, { start: C, end: W }); }) || b && !b.some(function(I) { return ye(w, I); }) || M && !M.some(function(I) { var C = I.start, W = I.end; return _e.isWithinInterval(w, { start: C, end: W }); }) || R && !R(Re(w)) || !1; } function Ki(w, v) { var i = v === void 0 ? {} : v, n = i.excludeDates, u = i.excludeDateIntervals; return u && u.length > 0 ? u.some(function(d) { var p = d.start, b = d.end; return _e.isWithinInterval(w, { start: p, end: b }); }) : n && n.some(function(d) { var p; return d instanceof Date ? ye(w, d) : ye(w, (p = d.date) !== null && p !== void 0 ? p : new Date); }) || !1; } function hm(w, v) { var i = v === void 0 ? {} : v, n = i.minDate, u = i.maxDate, d = i.excludeDates, p = i.includeDates, b = i.filterDate; return yn(w, { minDate: n ? xe.startOfMonth(n) : void 0, maxDate: u ? N.endOfMonth(u) : void 0 }) || d?.some(function(M) { return qt(w, M instanceof Date ? M : M.date); }) || p && !p.some(function(M) { return qt(w, M); }) || b && !b(Re(w)) || !1; } function $i(w, v, i, n) { var u = S.getYear(w), d = Q.getMonth(w), p = S.getYear(v), b = Q.getMonth(v), M = S.getYear(n); return u === p && u === M ? d <= i && i <= b : u < p && (M === u && d <= i || M === p && b >= i || M < p && M > u); } function BP(w, v) { var i = v === void 0 ? {} : v, n = i.minDate, u = i.maxDate, d = i.excludeDates, p = i.includeDates; return yn(w, { minDate: n, maxDate: u }) || d && d.some(function(b) { return qt(b instanceof Date ? b : b.date, w); }) || p && !p.some(function(b) { return qt(b, w); }) || !1; } function wo(w, v) { var i = v === void 0 ? {} : v, n = i.minDate, u = i.maxDate, d = i.excludeDates, p = i.includeDates, b = i.filterDate; return yn(w, { minDate: n, maxDate: u }) || d?.some(function(M) { return _o(w, M instanceof Date ? M : M.date); }) || p && !p.some(function(M) { return _o(w, M); }) || b && !b(Re(w)) || !1; } function zi(w, v, i) { if (!v || !i || !ne.isValid(v) || !ne.isValid(i)) return !1; var n = S.getYear(v), u = S.getYear(i); return n <= w && u >= w; } function Do(w, v) { var i = v === void 0 ? {} : v, n = i.minDate, u = i.maxDate, d = i.excludeDates, p = i.includeDates, b = i.filterDate, M = new Date(w, 0, 1); return yn(M, { minDate: n ? rt.startOfYear(n) : void 0, maxDate: u ? Y.endOfYear(u) : void 0 }) || d?.some(function(R) { return cr(M, R instanceof Date ? R : R.date); }) || p && !p.some(function(R) { return cr(M, R); }) || b && !b(Re(M)) || !1; } function Ui(w, v, i, n) { var u = S.getYear(w), d = oe.getQuarter(w), p = S.getYear(v), b = oe.getQuarter(v), M = S.getYear(n); return u === p && u === M ? d <= i && i <= b : u < p && (M === u && d <= i || M === p && b >= i || M < p && M > u); } function yn(w, v) { var i, n = v === void 0 ? {} : v, u = n.minDate, d = n.maxDate; return (i = u && P.differenceInCalendarDays(w, u) < 0 || d && P.differenceInCalendarDays(w, d) > 0) !== null && i !== void 0 && i; } function gm(w, v) { return v.some(function(i) { return $.getHours(i) === $.getHours(w) && Z.getMinutes(i) === Z.getMinutes(w) && k.getSeconds(i) === k.getSeconds(w); }); } function vm(w, v) { var i = v === void 0 ? {} : v, n = i.excludeTimes, u = i.includeTimes, d = i.filterTime; return n && gm(w, n) || u && !gm(w, u) || d && !d(w) || !1; } function bm(w, v) { var i = v.minTime, n = v.maxTime; if (!i || !n) throw new Error("Both minTime and maxTime props required"); var u = Re(); u = Ue.setHours(u, $.getHours(w)), u = ot.setMinutes(u, Z.getMinutes(w)), u = pe.setSeconds(u, k.getSeconds(w)); var d = Re(); d = Ue.setHours(d, $.getHours(i)), d = ot.setMinutes(d, Z.getMinutes(i)), d = pe.setSeconds(d, k.getSeconds(i)); var p, b = Re(); b = Ue.setHours(b, $.getHours(n)), b = ot.setMinutes(b, Z.getMinutes(n)), b = pe.setSeconds(b, k.getSeconds(n)); try { p = !_e.isWithinInterval(u, { start: d, end: b }); } catch { p = !1; } return p; } function _m(w, v) { var i = v === void 0 ? {} : v, n = i.minDate, u = i.includeDates, d = ie.subMonths(w, 1); return n && D.differenceInCalendarMonths(n, d) > 0 || u && u.every(function(p) { return D.differenceInCalendarMonths(p, d) > 0; }) || !1; } function xm(w, v) { var i = v === void 0 ? {} : v, n = i.maxDate, u = i.includeDates, d = f.addMonths(w, 1); return n && D.differenceInCalendarMonths(d, n) > 0 || u && u.every(function(p) { return D.differenceInCalendarMonths(d, p) > 0; }) || !1; } function wm(w, v) { var i = v === void 0 ? {} : v, n = i.minDate, u = i.includeDates, d = Me.subYears(w, 1); return n && O.differenceInCalendarYears(n, d) > 0 || u && u.every(function(p) { return O.differenceInCalendarYears(p, d) > 0; }) || !1; } function Dm(w, v) { var i = v === void 0 ? {} : v, n = i.maxDate, u = i.includeDates, d = x.addYears(w, 1); return n && O.differenceInCalendarYears(d, n) > 0 || u && u.every(function(p) { return O.differenceInCalendarYears(d, p) > 0; }) || !1; } function Om(w) { var v = w.minDate, i = w.includeDates; if (i && v) { var n = i.filter(function(u) { return P.differenceInCalendarDays(u, v) >= 0; }); return Ve.min(n); } return i ? Ve.min(i) : v; } function Mm(w) { var v = w.maxDate, i = w.includeDates; if (i && v) { var n = i.filter(function(u) { return P.differenceInCalendarDays(u, v) <= 0; }); return ge.max(n); } return i ? ge.max(i) : v; } function Pm(w, v) { var i; w === void 0 && (w = []), v === void 0 && (v = "react-datepicker__day--highlighted"); for(var n = new Map, u = 0, d = w.length; u < d; u++){ var p = w[u]; if (K.isDate(p)) { var b = Qe(p, "MM.dd.yyyy"); (X = n.get(b) || []).includes(v) || (X.push(v), n.set(b, X)); } else if (typeof p == "object") { var M = (i = Object.keys(p)[0]) !== null && i !== void 0 ? i : "", R = p[M]; if (typeof M == "string" && Array.isArray(R)) for(var I = 0, C = R.length; I < C; I++){ var W = R[I]; if (W) { var X; b = Qe(W, "MM.dd.yyyy"), (X = n.get(b) || []).includes(M) || (X.push(M), n.set(b, X)); } } } } return n; } function VP(w, v) { w === void 0 && (w = []), v === void 0 && (v = "react-datepicker__day--holidays"); var i = new Map; return w.forEach(function(n) { var u = n.date, d = n.holidayName; if (K.isDate(u)) { var p = Qe(u, "MM.dd.yyyy"), b = i.get(p) || { className: "", holidayNames: [] }; if (!("className" in b) || b.className !== v || (M = b.holidayNames, R = [ d ], M.length !== R.length || !M.every(function(C, W) { return C === R[W]; }))) { var M, R; b.className = v; var I = b.holidayNames; b.holidayNames = I ? St(St([], I, !0), [ d ], !1) : [ d ], i.set(p, b); } } }), i; } function KP(w, v, i, n, u) { for(var d = u.length, p = [], b = 0; b < d; b++){ var M = w, R = u[b]; R && (M = c.addHours(M, $.getHours(R)), M = l.addMinutes(M, Z.getMinutes(R)), M = h.addSeconds(M, k.getSeconds(R))); var I = l.addMinutes(w, (i + 1) * n); H.isAfter(M, v) && re.isBefore(M, I) && R != null && p.push(R); } return p; } function ym(w) { return w < 10 ? "0".concat(w) : "".concat(w); } function lr(w, v) { v === void 0 && (v = sr); var i = Math.ceil(S.getYear(w) / v) * v; return { startPeriod: i - (v - 1), endPeriod: i }; } function Em(w) { var v = w.getSeconds(), i = w.getMilliseconds(); return Ye.toDate(w.getTime() - 1e3 * v - i); } function Sm(w) { if (!K.isDate(w)) throw new Error("Invalid date"); var v = new Date(w); return v.setHours(0, 0, 0, 0), v; } function qm(w, v) { if (!K.isDate(w) || !K.isDate(v)) throw new Error("Invalid date received"); var i = Sm(w), n = Sm(v); return re.isBefore(i, n); } function Rm(w) { return w.key === J.Space; } var Oo, $P = function(w) { function v(i) { var n = w.call(this, i) || this; return n.inputRef = A.default.createRef(), n.onTimeChange = function(u) { var d, p; n.setState({ time: u }); var b = n.props.date, M = b instanceof Date && !isNaN(+b) ? b : new Date; if (u?.includes(":")) { var R = u.split(":"), I = R[0], C = R[1]; M.setHours(Number(I)), M.setMinutes(Number(C)); } (p = (d = n.props).onChange) === null || p === void 0 || p.call(d, M); }, n.renderTimeInput = function() { var u = n.state.time, d = n.props, p = d.date, b = d.timeString, M = d.customTimeInput; return M ? r.cloneElement(M, { date: p, value: u, onChange: n.onTimeChange }) : A.default.createElement("input", { type: "time", className: "react-datepicker-time__input", placeholder: "Time", name: "time-input", ref: n.inputRef, onClick: function() { var R; (R = n.inputRef.current) === null || R === void 0 || R.focus(); }, required: !0, value: u, onChange: function(R) { n.onTimeChange(R.target.value || b); } }); }, n.state = { time: n.props.timeString }, n; } return Ke(v, w), v.getDerivedStateFromProps = function(i, n) { return i.timeString !== n.time ? { time: i.timeString } : null; }, v.prototype.render = function() { return A.default.createElement("div", { className: "react-datepicker__input-time-container" }, A.default.createElement("div", { className: "react-datepicker-time__caption" }, this.props.timeInputLabel), A.default.createElement("div", { className: "react-datepicker-time__input-container" }, A.default.createElement("div", { className: "react-datepicker-time__input" }, this.renderTimeInput()))); }, v; }(r.Component), zP = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.dayEl = r.createRef(), i.handleClick = function(n) { !i.isDisabled() && i.props.onClick && i.props.onClick(n); }, i.handleMouseEnter = function(n) { !i.isDisabled() && i.props.onMouseEnter && i.props.onMouseEnter(n); }, i.handleOnKeyDown = function(n) { var u, d; n.key === J.Space && (n.preventDefault(), n.key = J.Enter), (d = (u = i.props).handleOnKeyDown) === null || d === void 0 || d.call(u, n); }, i.isSameDay = function(n) { return ye(i.props.day, n); }, i.isKeyboardSelected = function() { var n; if (i.props.disabledKeyboardNavigation) return !1; var u = i.props.selectsMultiple ? (n = i.props.selectedDates) === null || n === void 0 ? void 0 : n.some(function(p) { return i.isSameDayOrWeek(p); }) : i.isSameDayOrWeek(i.props.selected), d = i.props.preSelection && i.isDisabled(i.props.preSelection); return !u && i.isSameDayOrWeek(i.props.preSelection) && !d; }, i.isDisabled = function(n) { return n === void 0 && (n = i.props.day), Tt(n, { minDate: i.props.minDate, maxDate: i.props.maxDate, excludeDates: i.props.excludeDates, excludeDateIntervals: i.props.excludeDateIntervals, includeDateIntervals: i.props.includeDateIntervals, includeDates: i.props.includeDates, filterDate: i.props.filterDate }); }, i.isExcluded = function() { return Ki(i.props.day, { excludeDates: i.props.excludeDates, excludeDateIntervals: i.props.excludeDateIntervals }); }, i.isStartOfWeek = function() { return ye(i.props.day, ur(i.props.day, i.props.locale, i.props.calendarStartDay)); }, i.isSameWeek = function(n) { return i.props.showWeekPicker && ye(n, ur(i.props.day, i.props.locale, i.props.calendarStartDay)); }, i.isSameDayOrWeek = function(n) { return i.isSameDay(n) || i.isSameWeek(n); }, i.getHighLightedClass = function() { var n = i.props, u = n.day, d = n.highlightDates; if (!d) return !1; var p = Qe(u, "MM.dd.yyyy"); return d.get(p); }, i.getHolidaysClass = function() { var n, u = i.props, d = u.day, p = u.holidays; if (!p) return [ void 0 ]; var b = Qe(d, "MM.dd.yyyy"); return p.has(b) ? [ (n = p.get(b)) === null || n === void 0 ? void 0 : n.className ] : [ void 0 ]; }, i.isInRange = function() { var n = i.props, u = n.day, d = n.startDate, p = n.endDate; return !(!d || !p) && xo(u, d, p); }, i.isInSelectingRange = function() { var n, u = i.props, d = u.day, p = u.selectsStart, b = u.selectsEnd, M = u.selectsRange, R = u.selectsDisabledDaysInRange, I = u.startDate, C = u.endDate, W = (n = i.props.selectingDate) !== null && n !== void 0 ? n : i.props.preSelection; return !(!(p || b || M) || !W || !R && i.isDisabled()) && (p && C && (re.isBefore(W, C) || Sr(W, C)) ? xo(d, W, C) : (b && I && (H.isAfter(W, I) || Sr(W, I)) || !(!M || !I || C || !H.isAfter(W, I) && !Sr(W, I))) && xo(d, I, W)); }, i.isSelectingRangeStart = function() { var n; if (!i.isInSelectingRange()) return !1; var u = i.props, d = u.day, p = u.startDate, b = u.selectsStart, M = (n = i.props.selectingDate) !== null && n !== void 0 ? n : i.props.preSelection; return ye(d, b ? M : p); }, i.isSelectingRangeEnd = function() { var n; if (!i.isInSelectingRange()) return !1; var u = i.props, d = u.day, p = u.endDate, b = u.selectsEnd, M = u.selectsRange, R = (n = i.props.selectingDate) !== null && n !== void 0 ? n : i.props.preSelection; return ye(d, b || M ? R : p); }, i.isRangeStart = function() { var n = i.props, u = n.day, d = n.startDate, p = n.endDate; return !(!d || !p) && ye(d, u); }, i.isRangeEnd = function() { var n = i.props, u = n.day, d = n.startDate, p = n.endDate; return !(!d || !p) && ye(p, u); }, i.isWeekend = function() { var n = B.getDay(i.props.day); return n === 0 || n === 6; }, i.isAfterMonth = function() { return i.props.month !== void 0 && (i.props.month + 1) % 12 === Q.getMonth(i.props.day); }, i.isBeforeMonth = function() { return i.props.month !== void 0 && (Q.getMonth(i.props.day) + 1) % 12 === i.props.month; }, i.isCurrentDay = function() { return i.isSameDay(Re()); }, i.isSelected = function() { var n; return i.props.selectsMultiple ? (n = i.props.selectedDates) === null || n === void 0 ? void 0 : n.some(function(u) { return i.isSameDayOrWeek(u); }) : i.isSameDayOrWeek(i.props.selected); }, i.getClassNames = function(n) { var u, d = i.props.dayClassName ? i.props.dayClassName(n) : void 0; return t.clsx("react-datepicker__day", d, "react-datepicker__day--" + Qe(i.props.day, "ddd", u), { "react-datepicker__day--disabled": i.isDisabled(), "react-datepicker__day--excluded": i.isExcluded(), "react-datepicker__day--selected": i.isSelected(), "react-datepicker__day--keyboard-selected": i.isKeyboardSelected(), "react-datepicker__day--range-start": i.isRangeStart(), "react-datepicker__day--range-end": i.isRangeEnd(), "react-datepicker__day--in-range": i.isInRange(), "react-datepicker__day--in-selecting-range": i.isInSelectingRange(), "react-datepicker__day--selecting-range-start": i.isSelectingRangeStart(), "react-datepicker__day--selecting-range-end": i.isSelectingRangeEnd(), "react-datepicker__day--today": i.isCurrentDay(), "react-datepicker__day--weekend": i.isWeekend(), "react-datepicker__day--outside-month": i.isAfterMonth() || i.isBeforeMonth() }, i.getHighLightedClass(), i.getHolidaysClass()); }, i.getAriaLabel = function() { var n = i.props, u = n.day, d = n.ariaLabelPrefixWhenEnabled, p = d === void 0 ? "Choose" : d, b = n.ariaLabelPrefixWhenDisabled, M = b === void 0 ? "Not available" : b, R = i.isDisabled() || i.isExcluded() ? M : p; return "".concat(R, " ").concat(Qe(u, "PPPP", i.props.locale)); }, i.getTitle = function() { var n = i.props, u = n.day, d = n.holidays, p = d === void 0 ? new Map : d, b = n.excludeDates, M = Qe(u, "MM.dd.yyyy"), R = []; return p.has(M) && R.push.apply(R, p.get(M).holidayNames), i.isExcluded() && R.push(b?.filter(function(I) { return I instanceof Date ? ye(I, u) : ye(I?.date, u); }).map(function(I) { if (!(I instanceof Date)) return I?.message; })), R.join(", "); }, i.getTabIndex = function() { var n = i.props.selected, u = i.props.preSelection; return (!i.props.showWeekPicker || !i.props.showWeekNumber && i.isStartOfWeek()) && (i.isKeyboardSelected() || i.isSameDay(n) && ye(u, n)) ? 0 : -1; }, i.handleFocusDay = function() { var n; i.shouldFocusDay() && ((n = i.dayEl.current) === null || n === void 0 || n.focus({ preventScroll: !0 })); }, i.renderDayContents = function() { return i.props.monthShowsDuplicateDaysEnd && i.isAfterMonth() || i.props.monthShowsDuplicateDaysStart && i.isBeforeMonth() ? null : i.props.renderDayContents ? i.props.renderDayContents(V.getDate(i.props.day), i.props.day) : V.getDate(i.props.day); }, i.render = function() { return A.default.createElement("div", { ref: i.dayEl, className: i.getClassNames(i.props.day), onKeyDown: i.handleOnKeyDown, onClick: i.handleClick, onMouseEnter: i.props.usePointerEvent ? void 0 : i.handleMouseEnter, onPointerEnter: i.props.usePointerEvent ? i.handleMouseEnter : void 0, tabIndex: i.getTabIndex(), "aria-label": i.getAriaLabel(), role: "option", title: i.getTitle(), "aria-disabled": i.isDisabled(), "aria-current": i.isCurrentDay() ? "date" : void 0, "aria-selected": i.isSelected() || i.isInRange() }, i.renderDayContents(), i.getTitle() !== "" && A.default.createElement("span", { className: "overlay" }, i.getTitle())); }, i; } return Ke(v, w), v.prototype.componentDidMount = function() { this.handleFocusDay(); }, v.prototype.componentDidUpdate = function() { this.handleFocusDay(); }, v.prototype.shouldFocusDay = function() { var i = !1; return this.getTabIndex() === 0 && this.isSameDay(this.props.preSelection) && (document.activeElement && document.activeElement !== document.body || (i = !0), this.props.inline && !this.props.shouldFocusDayInline && (i = !1), this.isDayActiveElement() && (i = !0), this.isDuplicateDay() && (i = !1)), i; }, v.prototype.isDayActiveElement = function() { var i, n, u; return ((n = (i = this.props.containerRef) === null || i === void 0 ? void 0 : i.current) === null || n === void 0 ? void 0 : n.contains(document.activeElement)) && ((u = document.activeElement) === null || u === void 0 ? void 0 : u.classList.contains("react-datepicker__day")); }, v.prototype.isDuplicateDay = function() { return this.props.monthShowsDuplicateDaysEnd && this.isAfterMonth() || this.props.monthShowsDuplicateDaysStart && this.isBeforeMonth(); }, v; }(r.Component), UP = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.weekNumberEl = r.createRef(), i.handleClick = function(n) { i.props.onClick && i.props.onClick(n); }, i.handleOnKeyDown = function(n) { var u, d; n.key === J.Space && (n.preventDefault(), n.key = J.Enter), (d = (u = i.props).handleOnKeyDown) === null || d === void 0 || d.call(u, n); }, i.isKeyboardSelected = function() { return !i.props.disabledKeyboardNavigation && !ye(i.props.date, i.props.selected) && ye(i.props.date, i.props.preSelection); }, i.getTabIndex = function() { return i.props.showWeekPicker && i.props.showWeekNumber && (i.isKeyboardSelected() || ye(i.props.date, i.props.selected) && ye(i.props.preSelection, i.props.selected)) ? 0 : -1; }, i.handleFocusWeekNumber = function(n) { var u = !1; i.getTabIndex() === 0 && !n?.isInputFocused && ye(i.props.date, i.props.preSelection) && (document.activeElement && document.activeElement !== document.body || (u = !0), i.props.inline && !i.props.shouldFocusDayInline && (u = !1), i.props.containerRef && i.props.containerRef.current && i.props.containerRef.current.contains(document.activeElement) && document.activeElement && document.activeElement.classList.contains("react-datepicker__week-number") && (u = !0)), u && i.weekNumberEl.current && i.weekNumberEl.current.focus({ preventScroll: !0 }); }, i; } return Ke(v, w), Object.defineProperty(v, "defaultProps", { get: function() { return { ariaLabelPrefix: "week " }; }, enumerable: !1, configurable: !0 }), v.prototype.componentDidMount = function() { this.handleFocusWeekNumber(); }, v.prototype.componentDidUpdate = function(i) { this.handleFocusWeekNumber(i); }, v.prototype.render = function() { var i = this.props, n = i.weekNumber, u = i.isWeekDisabled, d = i.ariaLabelPrefix, p = d === void 0 ? v.defaultProps.ariaLabelPrefix : d, b = i.onClick, M = { "react-datepicker__week-number": !0, "react-datepicker__week-number--clickable": !!b && !u, "react-datepicker__week-number--selected": !!b && ye(this.props.date, this.props.selected) }; return A.default.createElement("div", { ref: this.weekNumberEl, className: t.clsx(M), "aria-label": "".concat(p, " ").concat(this.props.weekNumber), onClick: this.handleClick, onKeyDown: this.handleOnKeyDown, tabIndex: this.getTabIndex() }, n); }, v; }(r.Component), XP = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.isDisabled = function(n) { return Tt(n, { minDate: i.props.minDate, maxDate: i.props.maxDate, excludeDates: i.props.excludeDates, excludeDateIntervals: i.props.excludeDateIntervals, includeDateIntervals: i.props.includeDateIntervals, includeDates: i.props.includeDates, filterDate: i.props.filterDate }); }, i.handleDayClick = function(n, u) { i.props.onDayClick && i.props.onDayClick(n, u); }, i.handleDayMouseEnter = function(n) { i.props.onDayMouseEnter && i.props.onDayMouseEnter(n); }, i.handleWeekClick = function(n, u, d) { for(var p, b, M, R = new Date(n), I = 0; I < 7; I++){ var C = new Date(n); if (C.setDate(C.getDate() + I), !i.isDisabled(C)) { R = C; break; } } typeof i.props.onWeekSelect == "function" && i.props.onWeekSelect(R, u, d), i.props.showWeekPicker && i.handleDayClick(R, d), ((p = i.props.shouldCloseOnSelect) !== null && p !== void 0 ? p : v.defaultProps.shouldCloseOnSelect) && ((M = (b = i.props).setOpen) === null || M === void 0 || M.call(b, !1)); }, i.formatWeekNumber = function(n) { return i.props.formatWeekNumber ? i.props.formatWeekNumber(n) : function(u) { return z.getISOWeek(u); }(n); }, i.isWeekDisabled = function() { for(var n = i.startOfWeek(), u = a.addDays(n, 6), d = new Date(n); d <= u;){ if (!i.isDisabled(d)) return !1; d = a.addDays(d, 1); } return !0; }, i.renderDays = function() { var n = i.startOfWeek(), u = [], d = i.formatWeekNumber(n); if (i.props.showWeekNumber) { var p = i.props.onWeekSelect || i.props.showWeekPicker ? i.handleWeekClick.bind(i, n, d) : void 0; u.push(A.default.createElement(UP, we({ key: "W" }, v.defaultProps, i.props, { weekNumber: d, isWeekDisabled: i.isWeekDisabled(), date: n, onClick: p }))); } return u.concat([ 0, 1, 2, 3, 4, 5, 6 ].map(function(b) { var M = a.addDays(n, b); return A.default.createElement(zP, we({}, v.defaultProps, i.props, { ariaLabelPrefixWhenEnabled: i.props.chooseDayAriaLabelPrefix, ariaLabelPrefixWhenDisabled: i.props.disabledDayAriaLabelPrefix, key: M.valueOf(), day: M, onClick: i.handleDayClick.bind(i, M), onMouseEnter: i.handleDayMouseEnter.bind(i, M) })); })); }, i.startOfWeek = function() { return ur(i.props.day, i.props.locale, i.props.calendarStartDay); }, i.isKeyboardSelected = function() { return !i.props.disabledKeyboardNavigation && !ye(i.startOfWeek(), i.props.selected) && ye(i.startOfWeek(), i.props.preSelection); }, i; } return Ke(v, w), Object.defineProperty(v, "defaultProps", { get: function() { return { shouldCloseOnSelect: !0 }; }, enumerable: !1, configurable: !0 }), v.prototype.render = function() { var i = { "react-datepicker__week": !0, "react-datepicker__week--selected": ye(this.startOfWeek(), this.props.selected), "react-datepicker__week--keyboard-selected": this.isKeyboardSelected() }; return A.default.createElement("div", { className: t.clsx(i) }, this.renderDays()); }, v; }(r.Component), Im = "two_columns", Tm = "three_columns", Cm = "four_columns", Xi = ((Oo = {})[Im] = { grid: [ [ 0, 1 ], [ 2, 3 ], [ 4, 5 ], [ 6, 7 ], [ 8, 9 ], [ 10, 11 ] ], verticalNavigationOffset: 2 }, Oo[Tm] = { grid: [ [ 0, 1, 2 ], [ 3, 4, 5 ], [ 6, 7, 8 ], [ 9, 10, 11 ] ], verticalNavigationOffset: 3 }, Oo[Cm] = { grid: [ [ 0, 1, 2, 3 ], [ 4, 5, 6, 7 ], [ 8, 9, 10, 11 ] ], verticalNavigationOffset: 4 }, Oo); function Nm(w, v) { return w ? Cm : v ? Im : Tm; } var ZP = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.MONTH_REFS = St([], Array(12), !0).map(function() { return r.createRef(); }), i.QUARTER_REFS = St([], Array(4), !0).map(function() { return r.createRef(); }), i.isDisabled = function(n) { return Tt(n, { minDate: i.props.minDate, maxDate: i.props.maxDate, excludeDates: i.props.excludeDates, excludeDateIntervals: i.props.excludeDateIntervals, includeDateIntervals: i.props.includeDateIntervals, includeDates: i.props.includeDates, filterDate: i.props.filterDate }); }, i.isExcluded = function(n) { return Ki(n, { excludeDates: i.props.excludeDates, excludeDateIntervals: i.props.excludeDateIntervals }); }, i.handleDayClick = function(n, u) { var d, p; (p = (d = i.props).onDayClick) === null || p === void 0 || p.call(d, n, u, i.props.orderInDisplay); }, i.handleDayMouseEnter = function(n) { var u, d; (d = (u = i.props).onDayMouseEnter) === null || d === void 0 || d.call(u, n); }, i.handleMouseLeave = function() { var n, u; (u = (n = i.props).onMouseLeave) === null || u === void 0 || u.call(n); }, i.isRangeStartMonth = function(n) { var u = i.props, d = u.day, p = u.startDate, b = u.endDate; return !(!p || !b) && qt(ue.setMonth(d, n), p); }, i.isRangeStartQuarter = function(n) { var u = i.props, d = u.day, p = u.startDate, b = u.endDate; return !(!p || !b) && _o(he.setQuarter(d, n), p); }, i.isRangeEndMonth = function(n) { var u = i.props, d = u.day, p = u.startDate, b = u.endDate; return !(!p || !b) && qt(ue.setMonth(d, n), b); }, i.isRangeEndQuarter = function(n) { var u = i.props, d = u.day, p = u.startDate, b = u.endDate; return !(!p || !b) && _o(he.setQuarter(d, n), b); }, i.isInSelectingRangeMonth = function(n) { var u, d = i.props, p = d.day, b = d.selectsStart, M = d.selectsEnd, R = d.selectsRange, I = d.startDate, C = d.endDate, W = (u = i.props.selectingDate) !== null && u !== void 0 ? u : i.props.preSelection; return !(!(b || M || R) || !W) && (b && C ? $i(W, C, n, p) : (M && I || !(!R || !I || C)) && $i(I, W, n, p)); }, i.isSelectingMonthRangeStart = function(n) { var u; if (!i.isInSelectingRangeMonth(n)) return !1; var d = i.props, p = d.day, b = d.startDate, M = d.selectsStart, R = ue.setMonth(p, n), I = (u = i.props.selectingDate) !== null && u !== void 0 ? u : i.props.preSelection; return qt(R, M ? I : b); }, i.isSelectingMonthRangeEnd = function(n) { var u; if (!i.isInSelectingRangeMonth(n)) return !1; var d = i.props, p = d.day, b = d.endDate, M = d.selectsEnd, R = d.selectsRange, I = ue.setMonth(p, n), C = (u = i.props.selectingDate) !== null && u !== void 0 ? u : i.props.preSelection; return qt(I, M || R ? C : b); }, i.isInSelectingRangeQuarter = function(n) { var u, d = i.props, p = d.day, b = d.selectsStart, M = d.selectsEnd, R = d.selectsRange, I = d.startDate, C = d.endDate, W = (u = i.props.selectingDate) !== null && u !== void 0 ? u : i.props.preSelection; return !(!(b || M || R) || !W) && (b && C ? Ui(W, C, n, p) : (M && I || !(!R || !I || C)) && Ui(I, W, n, p)); }, i.isWeekInMonth = function(n) { var u = i.props.day, d = a.addDays(n, 6); return qt(n, u) || qt(d, u); }, i.isCurrentMonth = function(n, u) { return S.getYear(n) === S.getYear(Re()) && u === Q.getMonth(Re()); }, i.isCurrentQuarter = function(n, u) { return S.getYear(n) === S.getYear(Re()) && u === oe.getQuarter(Re()); }, i.isSelectedMonth = function(n, u, d) { return Q.getMonth(d) === u && S.getYear(n) === S.getYear(d); }, i.isSelectMonthInList = function(n, u, d) { return d.some(function(p) { return i.isSelectedMonth(n, u, p); }); }, i.isSelectedQuarter = function(n, u, d) { return oe.getQuarter(n) === u && S.getYear(n) === S.getYear(d); }, i.renderWeeks = function() { for(var n = [], u = i.props.fixedHeight, d = 0, p = !1, b = ur(er(i.props.day), i.props.locale, i.props.calendarStartDay), M = i.props.selected ? function(W) { return i.props.showWeekPicker ? ur(W, i.props.locale, i.props.calendarStartDay) : i.props.selected; }(i.props.selected) : void 0, R = i.props.preSelection ? function(W) { return i.props.showWeekPicker ? ur(W, i.props.locale, i.props.calendarStartDay) : i.props.preSelection; }(i.props.preSelection) : void 0; n.push(A.default.createElement(XP, we({}, i.props, { ariaLabelPrefix: i.props.weekAriaLabelPrefix, key: d, day: b, month: Q.getMonth(i.props.day), onDayClick: i.handleDayClick, onDayMouseEnter: i.handleDayMouseEnter, selected: M, preSelection: R, showWeekNumber: i.props.showWeekNumbers }))), !p;){ d++, b = g.addWeeks(b, 1); var I = u && d >= 6, C = !u && !i.isWeekInMonth(b); if (I || C) { if (!i.props.peekNextMonth) break; p = !0; } } return n; }, i.onMonthClick = function(n, u) { var d = i.isMonthDisabledForLabelDate(u), p = d.isDisabled, b = d.labelDate; p || i.handleDayClick(er(b), n); }, i.onMonthMouseEnter = function(n) { var u = i.isMonthDisabledForLabelDate(n), d = u.isDisabled, p = u.labelDate; d || i.handleDayMouseEnter(er(p)); }, i.handleMonthNavigation = function(n, u) { var d, p, b, M; (p = (d = i.props).setPreSelection) === null || p === void 0 || p.call(d, u), (M = (b = i.MONTH_REFS[n]) === null || b === void 0 ? void 0 : b.current) === null || M === void 0 || M.focus(); }, i.handleKeyboardNavigation = function(n, u, d) { var p, b = i.props, M = b.selected, R = b.preSelection, I = b.setPreSelection, C = b.minDate, W = b.maxDate, X = b.showFourColumnMonthYearPicker, ce = b.showTwoColumnMonthYearPicker; if (R) { var ee = Nm(X, ce), te = i.getVerticalOffset(ee), le = (p = Xi[ee]) === null || p === void 0 ? void 0 : p.grid, Be = function(Xe, Ie, Te) { var Oe, ke, vt = Ie, bt = Te; switch(Xe){ case J.ArrowRight: vt = f.addMonths(Ie, 1), bt = Te === 11 ? 0 : Te + 1; break; case J.ArrowLeft: vt = ie.subMonths(Ie, 1), bt = Te === 0 ? 11 : Te - 1; break; case J.ArrowUp: vt = ie.subMonths(Ie, te), bt = !((Oe = le?.[0]) === null || Oe === void 0) && Oe.includes(Te) ? Te + 12 - te : Te - te; break; case J.ArrowDown: vt = f.addMonths(Ie, te), bt = !((ke = le?.[le.length - 1]) === null || ke === void 0) && ke.includes(Te) ? Te - 12 + te : Te + te; } return { newCalculatedDate: vt, newCalculatedMonth: bt }; }; if (u !== J.Enter) { var Je = function(Xe, Ie, Te) { for(var Oe = Xe, ke = !1, vt = 0, bt = Be(Oe, Ie, Te), at = bt.newCalculatedDate, ct = bt.newCalculatedMonth; !ke;){ if (vt >= 40) { at = Ie, ct = Te; break; } var Ce; C && at < C && (Oe = J.ArrowRight, at = (Ce = Be(Oe, at, ct)).newCalculatedDate, ct = Ce.newCalculatedMonth), W && at > W && (Oe = J.ArrowLeft, at = (Ce = Be(Oe, at, ct)).newCalculatedDate, ct = Ce.newCalculatedMonth), BP(at, i.props) ? (at = (Ce = Be(Oe, at, ct)).newCalculatedDate, ct = Ce.newCalculatedMonth) : ke = !0, vt++; } return { newCalculatedDate: at, newCalculatedMonth: ct }; }(u, R, d), ht = Je.newCalculatedDate, $e = Je.newCalculatedMonth; switch(u){ case J.ArrowRight: case J.ArrowLeft: case J.ArrowUp: case J.ArrowDown: i.handleMonthNavigation($e, ht); } } else i.isMonthDisabled(d) || (i.onMonthClick(n, d), I?.(M)); } }, i.getVerticalOffset = function(n) { var u, d; return (d = (u = Xi[n]) === null || u === void 0 ? void 0 : u.verticalNavigationOffset) !== null && d !== void 0 ? d : 0; }, i.onMonthKeyDown = function(n, u) { var d = i.props, p = d.disabledKeyboardNavigation, b = d.handleOnMonthKeyDown, M = n.key; M !== J.Tab && n.preventDefault(), p || i.handleKeyboardNavigation(n, M, u), b && b(n); }, i.onQuarterClick = function(n, u) { var d = he.setQuarter(i.props.day, u); wo(d, i.props) || i.handleDayClick(dm(d), n); }, i.onQuarterMouseEnter = function(n) { var u = he.setQuarter(i.props.day, n); wo(u, i.props) || i.handleDayMouseEnter(dm(u)); }, i.handleQuarterNavigation = function(n, u) { var d, p, b, M; i.isDisabled(u) || i.isExcluded(u) || ((p = (d = i.props).setPreSelection) === null || p === void 0 || p.call(d, u), (M = (b = i.QUARTER_REFS[n - 1]) === null || b === void 0 ? void 0 : b.current) === null || M === void 0 || M.focus()); }, i.onQuarterKeyDown = function(n, u) { var d, p, b = n.key; if (!i.props.disabledKeyboardNavigation) switch(b){ case J.Enter: i.onQuarterClick(n, u), (p = (d = i.props).setPreSelection) === null || p === void 0 || p.call(d, i.props.selected); break; case J.ArrowRight: if (!i.props.preSelection) break; i.handleQuarterNavigation(u === 4 ? 1 : u + 1, m.addQuarters(i.props.preSelection, 1)); break; case J.ArrowLeft: if (!i.props.preSelection) break; i.handleQuarterNavigation(u === 1 ? 4 : u - 1, me.subQuarters(i.props.preSelection, 1)); } }, i.isMonthDisabledForLabelDate = function(n) { var u, d = i.props, p = d.day, b = d.minDate, M = d.maxDate, R = d.excludeDates, I = d.includeDates, C = ue.setMonth(p, n); return { isDisabled: (u = (b || M || R || I) && hm(C, i.props)) !== null && u !== void 0 && u, labelDate: C }; }, i.isMonthDisabled = function(n) { return i.isMonthDisabledForLabelDate(n).isDisabled; }, i.getMonthClassNames = function(n) { var u = i.props, d = u.day, p = u.startDate, b = u.endDate, M = u.preSelection, R = u.monthClassName, I = R ? R(ue.setMonth(d, n)) : void 0, C = i.getSelection(); return t.clsx("react-datepicker__month-text", "react-datepicker__month-".concat(n), I, { "react-datepicker__month-text--disabled": i.isMonthDisabled(n), "react-datepicker__month-text--selected": C ? i.isSelectMonthInList(d, n, C) : void 0, "react-datepicker__month-text--keyboard-selected": !i.props.disabledKeyboardNavigation && M && i.isSelectedMonth(d, n, M) && !i.isMonthDisabled(n), "react-datepicker__month-text--in-selecting-range": i.isInSelectingRangeMonth(n), "react-datepicker__month-text--in-range": p && b ? $i(p, b, n, d) : void 0, "react-datepicker__month-text--range-start": i.isRangeStartMonth(n), "react-datepicker__month-text--range-end": i.isRangeEndMonth(n), "react-datepicker__month-text--selecting-range-start": i.isSelectingMonthRangeStart(n), "react-datepicker__month-text--selecting-range-end": i.isSelectingMonthRangeEnd(n), "react-datepicker__month-text--today": i.isCurrentMonth(d, n) }); }, i.getTabIndex = function(n) { if (i.props.preSelection == null) return "-1"; var u = Q.getMonth(i.props.preSelection), d = i.isMonthDisabledForLabelDate(u).isDisabled; return n !== u || d || i.props.disabledKeyboardNavigation ? "-1" : "0"; }, i.getQuarterTabIndex = function(n) { if (i.props.preSelection == null) return "-1"; var u = oe.getQuarter(i.props.preSelection), d = wo(i.props.day, i.props); return n !== u || d || i.props.disabledKeyboardNavigation ? "-1" : "0"; }, i.getAriaLabel = function(n) { var u = i.props, d = u.chooseDayAriaLabelPrefix, p = d === void 0 ? "Choose" : d, b = u.disabledDayAriaLabelPrefix, M = b === void 0 ? "Not available" : b, R = u.day, I = u.locale, C = ue.setMonth(R, n), W = i.isDisabled(C) || i.isExcluded(C) ? M : p; return "".concat(W, " ").concat(Qe(C, "MMMM yyyy", I)); }, i.getQuarterClassNames = function(n) { var u = i.props, d = u.day, p = u.startDate, b = u.endDate, M = u.selected, R = u.minDate, I = u.maxDate, C = u.excludeDates, W = u.includeDates, X = u.filterDate, ce = u.preSelection, ee = u.disabledKeyboardNavigation, te = (R || I || C || W || X) && wo(he.setQuarter(d, n), i.props); return t.clsx("react-datepicker__quarter-text", "react-datepicker__quarter-".concat(n), { "react-datepicker__quarter-text--disabled": te, "react-datepicker__quarter-text--selected": M ? i.isSelectedQuarter(d, n, M) : void 0, "react-datepicker__quarter-text--keyboard-selected": !ee && ce && i.isSelectedQuarter(d, n, ce) && !te, "react-datepicker__quarter-text--in-selecting-range": i.isInSelectingRangeQuarter(n), "react-datepicker__quarter-text--in-range": p && b ? Ui(p, b, n, d) : void 0, "react-datepicker__quarter-text--range-start": i.isRangeStartQuarter(n), "react-datepicker__quarter-text--range-end": i.isRangeEndQuarter(n) }); }, i.getMonthContent = function(n) { var u = i.props, d = u.showFullMonthYearPicker, p = u.renderMonthContent, b = u.locale, M = u.day, R = mm(n, b), I = Vi(n, b); return p ? p(n, R, I, M) : d ? I : R; }, i.getQuarterContent = function(n) { var u, d = i.props, p = d.renderQuarterContent, b = function(M, R) { return Qe(he.setQuarter(Re(), M), "QQQ", R); }(n, d.locale); return (u = p?.(n, b)) !== null && u !== void 0 ? u : b; }, i.renderMonths = function() { var n, u = i.props, d = u.showTwoColumnMonthYearPicker, p = u.showFourColumnMonthYearPicker, b = u.day, M = u.selected, R = (n = Xi[Nm(p, d)]) === null || n === void 0 ? void 0 : n.grid; return R?.map(function(I, C) { return A.default.createElement("div", { className: "react-datepicker__month-wrapper", key: C }, I.map(function(W, X) { return A.default.createElement("div", { ref: i.MONTH_REFS[W], key: X, onClick: function(ce) { i.onMonthClick(ce, W); }, onKeyDown: function(ce) { Rm(ce) && (ce.preventDefault(), ce.key = J.Enter), i.onMonthKeyDown(ce, W); }, onMouseEnter: i.props.usePointerEvent ? void 0 : function() { return i.onMonthMouseEnter(W); }, onPointerEnter: i.props.usePointerEvent ? function() { return i.onMonthMouseEnter(W); } : void 0, tabIndex: Number(i.getTabIndex(W)), className: i.getMonthClassNames(W), "aria-disabled": i.isMonthDisabled(W), role: "option", "aria-label": i.getAriaLabel(W), "aria-current": i.isCurrentMonth(b, W) ? "date" : void 0, "aria-selected": M ? i.isSelectedMonth(b, W, M) : void 0 }, i.getMonthContent(W)); })); }); }, i.renderQuarters = function() { var n = i.props, u = n.day, d = n.selected; return A.default.createElement("div", { className: "react-datepicker__quarter-wrapper" }, [ 1, 2, 3, 4 ].map(function(p, b) { return A.default.createElement("div", { key: b, ref: i.QUARTER_REFS[b], role: "option", onClick: function(M) { i.onQuarterClick(M, p); }, onKeyDown: function(M) { i.onQuarterKeyDown(M, p); }, onMouseEnter: i.props.usePointerEvent ? void 0 : function() { return i.onQuarterMouseEnter(p); }, onPointerEnter: i.props.usePointerEvent ? function() { return i.onQuarterMouseEnter(p); } : void 0, className: i.getQuarterClassNames(p), "aria-selected": d ? i.isSelectedQuarter(u, p, d) : void 0, tabIndex: Number(i.getQuarterTabIndex(p)), "aria-current": i.isCurrentQuarter(u, p) ? "date" : void 0 }, i.getQuarterContent(p)); })); }, i.getClassNames = function() { var n = i.props, u = n.selectingDate, d = n.selectsStart, p = n.selectsEnd, b = n.showMonthYearPicker, M = n.showQuarterYearPicker, R = n.showWeekPicker; return t.clsx("react-datepicker__month", { "react-datepicker__month--selecting-range": u && (d || p) }, { "react-datepicker__monthPicker": b }, { "react-datepicker__quarterPicker": M }, { "react-datepicker__weekPicker": R }); }, i; } return Ke(v, w), v.prototype.getSelection = function() { var i = this.props, n = i.selected, u = i.selectedDates; return i.selectsMultiple ? u : n ? [ n ] : void 0; }, v.prototype.render = function() { var i = this.props, n = i.showMonthYearPicker, u = i.showQuarterYearPicker, d = i.day, p = i.ariaLabelPrefix, b = p === void 0 ? "Month " : p, M = b ? b.trim() + " " : ""; return A.default.createElement("div", { className: this.getClassNames(), onMouseLeave: this.props.usePointerEvent ? void 0 : this.handleMouseLeave, onPointerLeave: this.props.usePointerEvent ? this.handleMouseLeave : void 0, "aria-label": "".concat(M).concat(Qe(d, "MMMM, yyyy", this.props.locale)), role: "listbox" }, n ? this.renderMonths() : u ? this.renderQuarters() : this.renderWeeks()); }, v; }(r.Component), GP = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.isSelectedMonth = function(n) { return i.props.month === n; }, i.renderOptions = function() { return i.props.monthNames.map(function(n, u) { return A.default.createElement("div", { className: i.isSelectedMonth(u) ? "react-datepicker__month-option react-datepicker__month-option--selected_month" : "react-datepicker__month-option", key: n, onClick: i.onChange.bind(i, u), "aria-selected": i.isSelectedMonth(u) ? "true" : void 0 }, i.isSelectedMonth(u) ? A.default.createElement("span", { className: "react-datepicker__month-option--selected" }, "\u2713") : "", n); }); }, i.onChange = function(n) { return i.props.onChange(n); }, i.handleClickOutside = function() { return i.props.onCancel(); }, i; } return Ke(v, w), v.prototype.render = function() { return A.default.createElement(Jt, { className: "react-datepicker__month-dropdown", onClickOutside: this.handleClickOutside }, this.renderOptions()); }, v; }(r.Component), JP = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.state = { dropdownVisible: !1 }, i.renderSelectOptions = function(n) { return n.map(function(u, d) { return A.default.createElement("option", { key: u, value: d }, u); }); }, i.renderSelectMode = function(n) { return A.default.createElement("select", { value: i.props.month, className: "react-datepicker__month-select", onChange: function(u) { return i.onChange(parseInt(u.target.value)); } }, i.renderSelectOptions(n)); }, i.renderReadView = function(n, u) { return A.default.createElement("div", { key: "read", style: { visibility: n ? "visible" : "hidden" }, className: "react-datepicker__month-read-view", onClick: i.toggleDropdown }, A.default.createElement("span", { className: "react-datepicker__month-read-view--down-arrow" }), A.default.createElement("span", { className: "react-datepicker__month-read-view--selected-month" }, u[i.props.month])); }, i.renderDropdown = function(n) { return A.default.createElement(GP, we({ key: "dropdown" }, i.props, { monthNames: n, onChange: i.onChange, onCancel: i.toggleDropdown })); }, i.renderScrollMode = function(n) { var u = i.state.dropdownVisible, d = [ i.renderReadView(!u, n) ]; return u && d.unshift(i.renderDropdown(n)), d; }, i.onChange = function(n) { i.toggleDropdown(), n !== i.props.month && i.props.onChange(n); }, i.toggleDropdown = function() { return i.setState({ dropdownVisible: !i.state.dropdownVisible }); }, i; } return Ke(v, w), v.prototype.render = function() { var i, n = this, u = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ].map(this.props.useShortMonthInDropdown ? function(d) { return mm(d, n.props.locale); } : function(d) { return Vi(d, n.props.locale); }); switch(this.props.dropdownMode){ case "scroll": i = this.renderScrollMode(u); break; case "select": i = this.renderSelectMode(u); } return A.default.createElement("div", { className: "react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode) }, i); }, v; }(r.Component); function kP(w, v) { for(var i = [], n = er(w), u = er(v); !H.isAfter(n, u);)i.push(Re(n)), n = f.addMonths(n, 1); return i; } var ey = function(w) { function v(i) { var n = w.call(this, i) || this; return n.renderOptions = function() { return n.state.monthYearsList.map(function(u) { var d = G.getTime(u), p = cr(n.props.date, u) && qt(n.props.date, u); return A.default.createElement("div", { className: p ? "react-datepicker__month-year-option--selected_month-year" : "react-datepicker__month-year-option", key: d, onClick: n.onChange.bind(n, d), "aria-selected": p ? "true" : void 0 }, p ? A.default.createElement("span", { className: "react-datepicker__month-year-option--selected" }, "\u2713") : "", Qe(u, n.props.dateFormat, n.props.locale)); }); }, n.onChange = function(u) { return n.props.onChange(u); }, n.handleClickOutside = function() { n.props.onCancel(); }, n.state = { monthYearsList: kP(n.props.minDate, n.props.maxDate) }, n; } return Ke(v, w), v.prototype.render = function() { var i = t.clsx({ "react-datepicker__month-year-dropdown": !0, "react-datepicker__month-year-dropdown--scrollable": this.props.scrollableMonthYearDropdown }); return A.default.createElement(Jt, { className: i, onClickOutside: this.handleClickOutside }, this.renderOptions()); }, v; }(r.Component), ty = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.state = { dropdownVisible: !1 }, i.renderSelectOptions = function() { for(var n = er(i.props.minDate), u = er(i.props.maxDate), d = []; !H.isAfter(n, u);){ var p = G.getTime(n); d.push(A.default.createElement("option", { key: p, value: p }, Qe(n, i.props.dateFormat, i.props.locale))), n = f.addMonths(n, 1); } return d; }, i.onSelectChange = function(n) { i.onChange(parseInt(n.target.value)); }, i.renderSelectMode = function() { return A.default.createElement("select", { value: G.getTime(er(i.props.date)), className: "react-datepicker__month-year-select", onChange: i.onSelectChange }, i.renderSelectOptions()); }, i.renderReadView = function(n) { var u = Qe(i.props.date, i.props.dateFormat, i.props.locale); return A.default.createElement("div", { key: "read", style: { visibility: n ? "visible" : "hidden" }, className: "react-datepicker__month-year-read-view", onClick: i.toggleDropdown }, A.default.createElement("span", { className: "react-datepicker__month-year-read-view--down-arrow" }), A.default.createElement("span", { className: "react-datepicker__month-year-read-view--selected-month-year" }, u)); }, i.renderDropdown = function() { return A.default.createElement(ey, we({ key: "dropdown" }, i.props, { onChange: i.onChange, onCancel: i.toggleDropdown })); }, i.renderScrollMode = function() { var n = i.state.dropdownVisible, u = [ i.renderReadView(!n) ]; return n && u.unshift(i.renderDropdown()), u; }, i.onChange = function(n) { i.toggleDropdown(); var u = Re(n); cr(i.props.date, u) && qt(i.props.date, u) || i.props.onChange(u); }, i.toggleDropdown = function() { return i.setState({ dropdownVisible: !i.state.dropdownVisible }); }, i; } return Ke(v, w), v.prototype.render = function() { var i; switch(this.props.dropdownMode){ case "scroll": i = this.renderScrollMode(); break; case "select": i = this.renderSelectMode(); } return A.default.createElement("div", { className: "react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode) }, i); }, v; }(r.Component), ry = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.state = { height: null }, i.scrollToTheSelectedTime = function() { requestAnimationFrame(function() { var n, u, d; i.list && (i.list.scrollTop = (d = i.centerLi && v.calcCenterPosition(i.props.monthRef ? i.props.monthRef.clientHeight - ((u = (n = i.header) === null || n === void 0 ? void 0 : n.clientHeight) !== null && u !== void 0 ? u : 0) : i.list.clientHeight, i.centerLi)) !== null && d !== void 0 ? d : 0); }); }, i.handleClick = function(n) { var u, d; (i.props.minTime || i.props.maxTime) && bm(n, i.props) || (i.props.excludeTimes || i.props.includeTimes || i.props.filterTime) && vm(n, i.props) || (d = (u = i.props).onChange) === null || d === void 0 || d.call(u, n); }, i.isSelectedTime = function(n) { return i.props.selected && (u = i.props.selected, d = n, Em(u).getTime() === Em(d).getTime()); var u, d; }, i.isDisabledTime = function(n) { return (i.props.minTime || i.props.maxTime) && bm(n, i.props) || (i.props.excludeTimes || i.props.includeTimes || i.props.filterTime) && vm(n, i.props); }, i.liClasses = function(n) { var u, d = [ "react-datepicker__time-list-item", i.props.timeClassName ? i.props.timeClassName(n) : void 0 ]; return i.isSelectedTime(n) && d.push("react-datepicker__time-list-item--selected"), i.isDisabledTime(n) && d.push("react-datepicker__time-list-item--disabled"), i.props.injectTimes && (3600 * $.getHours(n) + 60 * Z.getMinutes(n) + k.getSeconds(n)) % (60 * ((u = i.props.intervals) !== null && u !== void 0 ? u : v.defaultProps.intervals)) != 0 && d.push("react-datepicker__time-list-item--injected"), d.join(" "); }, i.handleOnKeyDown = function(n, u) { var d, p; n.key === J.Space && (n.preventDefault(), n.key = J.Enter), (n.key === J.ArrowUp || n.key === J.ArrowLeft) && n.target instanceof HTMLElement && n.target.previousSibling && (n.preventDefault(), n.target.previousSibling instanceof HTMLElement && n.target.previousSibling.focus()), (n.key === J.ArrowDown || n.key === J.ArrowRight) && n.target instanceof HTMLElement && n.target.nextSibling && (n.preventDefault(), n.target.nextSibling instanceof HTMLElement && n.target.nextSibling.focus()), n.key === J.Enter && i.handleClick(u), (p = (d = i.props).handleOnKeyDown) === null || p === void 0 || p.call(d, n); }, i.renderTimes = function() { for(var n, u = [], d = typeof i.props.format == "string" ? i.props.format : "p", p = (n = i.props.intervals) !== null && n !== void 0 ? n : v.defaultProps.intervals, b = i.props.selected || i.props.openToDate || Re(), M = bo(b), R = i.props.injectTimes && i.props.injectTimes.sort(function(te, le) { return te.getTime() - le.getTime(); }), I = 60 * function(te) { var le = new Date(te.getFullYear(), te.getMonth(), te.getDate()), Be = new Date(te.getFullYear(), te.getMonth(), te.getDate(), 24); return Math.round((+Be - +le) / 36e5); }(b), C = I / p, W = 0; W < C; W++){ var X = l.addMinutes(M, W * p); if (u.push(X), R) { var ce = KP(M, X, W, p, R); u = u.concat(ce); } } var ee = u.reduce(function(te, le) { return le.getTime() <= b.getTime() ? le : te; }, u[0]); return u.map(function(te) { return A.default.createElement("li", { key: te.valueOf(), onClick: i.handleClick.bind(i, te), className: i.liClasses(te), ref: function(le) { te === ee && (i.centerLi = le); }, onKeyDown: function(le) { i.handleOnKeyDown(le, te); }, tabIndex: te === ee ? 0 : -1, role: "option", "aria-selected": i.isSelectedTime(te) ? "true" : void 0, "aria-disabled": i.isDisabledTime(te) ? "true" : void 0 }, Qe(te, d, i.props.locale)); }); }, i.renderTimeCaption = function() { return i.props.showTimeCaption === !1 ? A.default.createElement(A.default.Fragment, null) : A.default.createElement("div", { className: "react-datepicker__header react-datepicker__header--time ".concat(i.props.showTimeSelectOnly ? "react-datepicker__header--time--only" : ""), ref: function(n) { i.header = n; } }, A.default.createElement("div", { className: "react-datepicker-time__header" }, i.props.timeCaption)); }, i; } return Ke(v, w), Object.defineProperty(v, "defaultProps", { get: function() { return { intervals: 30, todayButton: null, timeCaption: "Time", showTimeCaption: !0 }; }, enumerable: !1, configurable: !0 }), v.prototype.componentDidMount = function() { this.scrollToTheSelectedTime(), this.props.monthRef && this.header && this.setState({ height: this.props.monthRef.clientHeight - this.header.clientHeight }); }, v.prototype.render = function() { var i, n = this, u = this.state.height; return A.default.createElement("div", { className: "react-datepicker__time-container ".concat(((i = this.props.todayButton) !== null && i !== void 0 ? i : v.defaultProps.todayButton) ? "react-datepicker__time-container--with-today-button" : "") }, this.renderTimeCaption(), A.default.createElement("div", { className: "react-datepicker__time" }, A.default.createElement("div", { className: "react-datepicker__time-box" }, A.default.createElement("ul", { className: "react-datepicker__time-list", ref: function(d) { n.list = d; }, style: u ? { height: u } : {}, role: "listbox", "aria-label": this.props.timeCaption }, this.renderTimes())))); }, v.calcCenterPosition = function(i, n) { return n.offsetTop - (i / 2 - n.clientHeight / 2); }, v; }(r.Component), ny = function(w) { function v(i) { var n = w.call(this, i) || this; return n.YEAR_REFS = St([], Array(n.props.yearItemNumber), !0).map(function() { return r.createRef(); }), n.isDisabled = function(u) { return Tt(u, { minDate: n.props.minDate, maxDate: n.props.maxDate, excludeDates: n.props.excludeDates, includeDates: n.props.includeDates, filterDate: n.props.filterDate }); }, n.isExcluded = function(u) { return Ki(u, { excludeDates: n.props.excludeDates }); }, n.selectingDate = function() { var u; return (u = n.props.selectingDate) !== null && u !== void 0 ? u : n.props.preSelection; }, n.updateFocusOnPaginate = function(u) { window.requestAnimationFrame(function() { var d, p; (p = (d = n.YEAR_REFS[u]) === null || d === void 0 ? void 0 : d.current) === null || p === void 0 || p.focus(); }); }, n.handleYearClick = function(u, d) { n.props.onDayClick && n.props.onDayClick(u, d); }, n.handleYearNavigation = function(u, d) { var p, b, M, R, I = n.props, C = I.date, W = I.yearItemNumber; if (C !== void 0 && W !== void 0) { var X = lr(C, W).startPeriod; n.isDisabled(d) || n.isExcluded(d) || ((b = (p = n.props).setPreSelection) === null || b === void 0 || b.call(p, d), u - X < 0 ? n.updateFocusOnPaginate(W - (X - u)) : u - X >= W ? n.updateFocusOnPaginate(Math.abs(W - (u - X))) : (R = (M = n.YEAR_REFS[u - X]) === null || M === void 0 ? void 0 : M.current) === null || R === void 0 || R.focus()); } }, n.isSameDay = function(u, d) { return ye(u, d); }, n.isCurrentYear = function(u) { return u === S.getYear(Re()); }, n.isRangeStart = function(u) { return n.props.startDate && n.props.endDate && cr(De.setYear(Re(), u), n.props.startDate); }, n.isRangeEnd = function(u) { return n.props.startDate && n.props.endDate && cr(De.setYear(Re(), u), n.props.endDate); }, n.isInRange = function(u) { return zi(u, n.props.startDate, n.props.endDate); }, n.isInSelectingRange = function(u) { var d = n.props, p = d.selectsStart, b = d.selectsEnd, M = d.selectsRange, R = d.startDate, I = d.endDate; return !(!(p || b || M) || !n.selectingDate()) && (p && I ? zi(u, n.selectingDate(), I) : (b && R || !(!M || !R || I)) && zi(u, R, n.selectingDate())); }, n.isSelectingRangeStart = function(u) { var d; if (!n.isInSelectingRange(u)) return !1; var p = n.props, b = p.startDate, M = p.selectsStart, R = De.setYear(Re(), u); return cr(R, M ? (d = n.selectingDate()) !== null && d !== void 0 ? d : null : b ?? null); }, n.isSelectingRangeEnd = function(u) { var d; if (!n.isInSelectingRange(u)) return !1; var p = n.props, b = p.endDate, M = p.selectsEnd, R = p.selectsRange, I = De.setYear(Re(), u); return cr(I, M || R ? (d = n.selectingDate()) !== null && d !== void 0 ? d : null : b ?? null); }, n.isKeyboardSelected = function(u) { if (n.props.date !== void 0 && n.props.selected != null && n.props.preSelection != null) { var d = n.props, p = d.minDate, b = d.maxDate, M = d.excludeDates, R = d.includeDates, I = d.filterDate, C = Pn(De.setYear(n.props.date, u)), W = (p || b || M || R || I) && Do(u, n.props); return !n.props.disabledKeyboardNavigation && !n.props.inline && !ye(C, Pn(n.props.selected)) && ye(C, Pn(n.props.preSelection)) && !W; } }, n.onYearClick = function(u, d) { var p = n.props.date; p !== void 0 && n.handleYearClick(Pn(De.setYear(p, d)), u); }, n.onYearKeyDown = function(u, d) { var p, b, M = u.key, R = n.props, I = R.date, C = R.yearItemNumber, W = R.handleOnKeyDown; if (M !== J.Tab && u.preventDefault(), !n.props.disabledKeyboardNavigation) switch(M){ case J.Enter: if (n.props.selected == null) break; n.onYearClick(u, d), (b = (p = n.props).setPreSelection) === null || b === void 0 || b.call(p, n.props.selected); break; case J.ArrowRight: if (n.props.preSelection == null) break; n.handleYearNavigation(d + 1, x.addYears(n.props.preSelection, 1)); break; case J.ArrowLeft: if (n.props.preSelection == null) break; n.handleYearNavigation(d - 1, Me.subYears(n.props.preSelection, 1)); break; case J.ArrowUp: if (I === void 0 || C === void 0 || n.props.preSelection == null) break; var X = lr(I, C).startPeriod; if ((te = d - (ee = 3)) < X) { var ce = C % ee; d >= X && d < X + ce ? ee = ce : ee += ce, te = d - ee; } n.handleYearNavigation(te, Me.subYears(n.props.preSelection, ee)); break; case J.ArrowDown: if (I === void 0 || C === void 0 || n.props.preSelection == null) break; var ee, te, le = lr(I, C).endPeriod; (te = d + (ee = 3)) > le && (ce = C % ee, d <= le && d > le - ce ? ee = ce : ee += ce, te = d + ee), n.handleYearNavigation(te, x.addYears(n.props.preSelection, ee)); } W && W(u); }, n.getYearClassNames = function(u) { var d = n.props, p = d.date, b = d.minDate, M = d.maxDate, R = d.selected, I = d.excludeDates, C = d.includeDates, W = d.filterDate, X = d.yearClassName; return t.clsx("react-datepicker__year-text", "react-datepicker__year-".concat(u), p ? X?.(De.setYear(p, u)) : void 0, { "react-datepicker__year-text--selected": R ? u === S.getYear(R) : void 0, "react-datepicker__year-text--disabled": (b || M || I || C || W) && Do(u, n.props), "react-datepicker__year-text--keyboard-selected": n.isKeyboardSelected(u), "react-datepicker__year-text--range-start": n.isRangeStart(u), "react-datepicker__year-text--range-end": n.isRangeEnd(u), "react-datepicker__year-text--in-range": n.isInRange(u), "react-datepicker__year-text--in-selecting-range": n.isInSelectingRange(u), "react-datepicker__year-text--selecting-range-start": n.isSelectingRangeStart(u), "react-datepicker__year-text--selecting-range-end": n.isSelectingRangeEnd(u), "react-datepicker__year-text--today": n.isCurrentYear(u) }); }, n.getYearTabIndex = function(u) { if (n.props.disabledKeyboardNavigation || n.props.preSelection == null) return "-1"; var d = S.getYear(n.props.preSelection), p = Do(u, n.props); return u !== d || p ? "-1" : "0"; }, n.getYearContent = function(u) { return n.props.renderYearContent ? n.props.renderYearContent(u) : u; }, n; } return Ke(v, w), v.prototype.render = function() { var i = this, n = [], u = this.props, d = u.date, p = u.yearItemNumber, b = u.onYearMouseEnter, M = u.onYearMouseLeave; if (d === void 0) return null; for(var R = lr(d, p), I = R.startPeriod, C = R.endPeriod, W = function(ee) { n.push(A.default.createElement("div", { ref: X.YEAR_REFS[ee - I], onClick: function(te) { i.onYearClick(te, ee); }, onKeyDown: function(te) { Rm(te) && (te.preventDefault(), te.key = J.Enter), i.onYearKeyDown(te, ee); }, tabIndex: Number(X.getYearTabIndex(ee)), className: X.getYearClassNames(ee), onMouseEnter: X.props.usePointerEvent ? void 0 : function(te) { return b(te, ee); }, onPointerEnter: X.props.usePointerEvent ? function(te) { return b(te, ee); } : void 0, onMouseLeave: X.props.usePointerEvent ? void 0 : function(te) { return M(te, ee); }, onPointerLeave: X.props.usePointerEvent ? function(te) { return M(te, ee); } : void 0, key: ee, "aria-current": X.isCurrentYear(ee) ? "date" : void 0 }, X.getYearContent(ee))); }, X = this, ce = I; ce <= C; ce++)W(ce); return A.default.createElement("div", { className: "react-datepicker__year" }, A.default.createElement("div", { className: "react-datepicker__year-wrapper", onMouseLeave: this.props.usePointerEvent ? void 0 : this.props.clearSelectingDate, onPointerLeave: this.props.usePointerEvent ? this.props.clearSelectingDate : void 0 }, n)); }, v; }(r.Component); function oy(w, v, i, n) { for(var u = [], d = 0; d < 2 * v + 1; d++){ var p = w + v - d, b = !0; i && (b = S.getYear(i) <= p), n && b && (b = S.getYear(n) >= p), b && u.push(p); } return u; } var iy = function(w) { function v(i) { var n = w.call(this, i) || this; n.renderOptions = function() { var b = n.props.year, M = n.state.yearsList.map(function(C) { return A.default.createElement("div", { className: b === C ? "react-datepicker__year-option react-datepicker__year-option--selected_year" : "react-datepicker__year-option", key: C, onClick: n.onChange.bind(n, C), "aria-selected": b === C ? "true" : void 0 }, b === C ? A.default.createElement("span", { className: "react-datepicker__year-option--selected" }, "\u2713") : "", C); }), R = n.props.minDate ? S.getYear(n.props.minDate) : null, I = n.props.maxDate ? S.getYear(n.props.maxDate) : null; return I && n.state.yearsList.find(function(C) { return C === I; }) || M.unshift(A.default.createElement("div", { className: "react-datepicker__year-option", key: "upcoming", onClick: n.incrementYears }, A.default.createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming" }))), R && n.state.yearsList.find(function(C) { return C === R; }) || M.push(A.default.createElement("div", { className: "react-datepicker__year-option", key: "previous", onClick: n.decrementYears }, A.default.createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous" }))), M; }, n.onChange = function(b) { n.props.onChange(b); }, n.handleClickOutside = function() { n.props.onCancel(); }, n.shiftYears = function(b) { var M = n.state.yearsList.map(function(R) { return R + b; }); n.setState({ yearsList: M }); }, n.incrementYears = function() { return n.shiftYears(1); }, n.decrementYears = function() { return n.shiftYears(-1); }; var u = i.yearDropdownItemNumber, d = i.scrollableYearDropdown, p = u || (d ? 10 : 5); return n.state = { yearsList: oy(n.props.year, p, n.props.minDate, n.props.maxDate) }, n.dropdownRef = r.createRef(), n; } return Ke(v, w), v.prototype.componentDidMount = function() { var i = this.dropdownRef.current; if (i) { var n = i.children ? Array.from(i.children) : null, u = n ? n.find(function(d) { return d.ariaSelected; }) : null; i.scrollTop = u && u instanceof HTMLElement ? u.offsetTop + (u.clientHeight - i.clientHeight) / 2 : (i.scrollHeight - i.clientHeight) / 2; } }, v.prototype.render = function() { var i = t.clsx({ "react-datepicker__year-dropdown": !0, "react-datepicker__year-dropdown--scrollable": this.props.scrollableYearDropdown }); return A.default.createElement(Jt, { className: i, containerRef: this.dropdownRef, onClickOutside: this.handleClickOutside }, this.renderOptions()); }, v; }(r.Component), ay = function(w) { function v() { var i = w !== null && w.apply(this, arguments) || this; return i.state = { dropdownVisible: !1 }, i.renderSelectOptions = function() { for(var n = i.props.minDate ? S.getYear(i.props.minDate) : 1900, u = i.props.maxDate ? S.getYear(i.props.maxDate) : 2100, d = [], p = n; p <= u; p++)d.push(A.default.createElement("option", { key: p, value: p }, p)); return d; }, i.onSelectChange = function(n) { i.onChange(parseInt(n.target.value)); }, i.renderSelectMode = function() { return A.default.createElement("select", { value: i.props.year, className: "react-datepicker__year-select", onChange: i.onSelectChange }, i.renderSelectOptions()); }, i.renderReadView = function(n) { return A.default.createElement("div", { key: "read", style: { visibility: n ? "visible" : "hidden" }, className: "react-datepicker__year-read-view", onClick: function(u) { return i.toggleDropdown(u); } }, A.default.createElement("span", { className: "react-datepicker__year-read-view--down-arrow" }), A.default.createElement("span", { className: "react-datepicker__year-read-view--selected-year" }, i.props.year)); }, i.renderDropdown = function() { return A.default.createElement(iy, we({ key: "dropdown" }, i.props, { onChange: i.onChange, onCancel: i.toggleDropdown })); }, i.renderScrollMode = function() { var n = i.state.dropdownVisible, u = [ i.renderReadView(!n) ]; return n && u.unshift(i.renderDropdown()), u; }, i.onChange = function(n) { i.toggleDropdown(), n !== i.props.year && i.props.onChange(n); }, i.toggleDropdown = function(n) { i.setState({ dropdownVisible: !i.state.dropdownVisible }, function() { i.props.adjustDateOnChange && i.handleYearChange(i.props.date, n); }); }, i.handleYearChange = function(n, u) { var d; (d = i.onSelect) === null || d === void 0 || d.call(i, n, u), i.setOpen(); }, i.onSelect = function(n, u) { var d, p; (p = (d = i.props).onSelect) === null || p === void 0 || p.call(d, n, u); }, i.setOpen = function() { var n, u; (u = (n = i.props).setOpen) === null || u === void 0 || u.call(n, !0); }, i; } return Ke(v, w), v.prototype.render = function() { var i; switch(this.props.dropdownMode){ case "scroll": i = this.renderScrollMode(); break; case "select": i = this.renderSelectMode(); } return A.default.createElement("div", { className: "react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode) }, i); }, v; }(r.Component), sy = [ "react-datepicker__year-select", "react-datepicker__month-select", "react-datepicker__month-year-select" ], uy = function(w) { function v(i) { var n = w.call(this, i) || this; return n.monthContainer = void 0, n.handleClickOutside = function(u) { n.props.onClickOutside(u); }, n.setClickOutsideRef = function() { return n.containerRef.current; }, n.handleDropdownFocus = function(u) { var d, p, b, M; b = u.target, M = (b.className || "").split(/\s+/), sy.some(function(R) { return M.indexOf(R) >= 0; }) && ((p = (d = n.props).onDropdownFocus) === null || p === void 0 || p.call(d, u)); }, n.getDateInView = function() { var u = n.props, d = u.preSelection, p = u.selected, b = u.openToDate, M = Om(n.props), R = Mm(n.props), I = Re(), C = b || p || d; return C || (M && re.isBefore(I, M) ? M : R && H.isAfter(I, R) ? R : I); }, n.increaseMonth = function() { n.setState(function(u) { var d = u.date; return { date: f.addMonths(d, 1) }; }, function() { return n.handleMonthChange(n.state.date); }); }, n.decreaseMonth = function() { n.setState(function(u) { var d = u.date; return { date: ie.subMonths(d, 1) }; }, function() { return n.handleMonthChange(n.state.date); }); }, n.handleDayClick = function(u, d, p) { n.props.onSelect(u, d, p), n.props.setPreSelection && n.props.setPreSelection(u); }, n.handleDayMouseEnter = function(u) { n.setState({ selectingDate: u }), n.props.onDayMouseEnter && n.props.onDayMouseEnter(u); }, n.handleMonthMouseLeave = function() { n.setState({ selectingDate: void 0 }), n.props.onMonthMouseLeave && n.props.onMonthMouseLeave(); }, n.handleYearMouseEnter = function(u, d) { n.setState({ selectingDate: De.setYear(Re(), d) }), n.props.onYearMouseEnter && n.props.onYearMouseEnter(u, d); }, n.handleYearMouseLeave = function(u, d) { n.props.onYearMouseLeave && n.props.onYearMouseLeave(u, d); }, n.handleYearChange = function(u) { var d, p, b, M; (p = (d = n.props).onYearChange) === null || p === void 0 || p.call(d, u), n.setState({ isRenderAriaLiveMessage: !0 }), n.props.adjustDateOnChange && (n.props.onSelect(u), (M = (b = n.props).setOpen) === null || M === void 0 || M.call(b, !0)), n.props.setPreSelection && n.props.setPreSelection(u); }, n.getEnabledPreSelectionDateForMonth = function(u) { if (!Tt(u, n.props)) return u; for(var d = er(u), p = QP(u), b = o.differenceInDays(p, d), M = null, R = 0; R <= b; R++){ var I = a.addDays(d, R); if (!Tt(I, n.props)) { M = I; break; } } return M; }, n.handleMonthChange = function(u) { var d, p, b, M = (d = n.getEnabledPreSelectionDateForMonth(u)) !== null && d !== void 0 ? d : u; n.handleCustomMonthChange(M), n.props.adjustDateOnChange && (n.props.onSelect(M), (b = (p = n.props).setOpen) === null || b === void 0 || b.call(p, !0)), n.props.setPreSelection && n.props.setPreSelection(M); }, n.handleCustomMonthChange = function(u) { var d, p; (p = (d = n.props).onMonthChange) === null || p === void 0 || p.call(d, u), n.setState({ isRenderAriaLiveMessage: !0 }); }, n.handleMonthYearChange = function(u) { n.handleYearChange(u), n.handleMonthChange(u); }, n.changeYear = function(u) { n.setState(function(d) { var p = d.date; return { date: De.setYear(p, Number(u)) }; }, function() { return n.handleYearChange(n.state.date); }); }, n.changeMonth = function(u) { n.setState(function(d) { var p = d.date; return { date: ue.setMonth(p, Number(u)) }; }, function() { return n.handleMonthChange(n.state.date); }); }, n.changeMonthYear = function(u) { n.setState(function(d) { var p = d.date; return { date: De.setYear(ue.setMonth(p, Q.getMonth(u)), S.getYear(u)) }; }, function() { return n.handleMonthYearChange(n.state.date); }); }, n.header = function(u) { u === void 0 && (u = n.state.date); var d = ur(u, n.props.locale, n.props.calendarStartDay), p = []; return n.props.showWeekNumbers && p.push(A.default.createElement("div", { key: "W", className: "react-datepicker__day-name" }, n.props.weekLabel || "#")), p.concat([ 0, 1, 2, 3, 4, 5, 6 ].map(function(b) { var M = a.addDays(d, b), R = n.formatWeekday(M, n.props.locale), I = n.props.weekDayClassName ? n.props.weekDayClassName(M) : void 0; return A.default.createElement("div", { key: b, "aria-label": Qe(M, "EEEE", n.props.locale), className: t.clsx("react-datepicker__day-name", I) }, R); })); }, n.formatWeekday = function(u, d) { return n.props.formatWeekDay ? function(p, b, M) { return b(Qe(p, "EEEE", M)); }(u, n.props.formatWeekDay, d) : n.props.useWeekdaysShort ? function(p, b) { return Qe(p, "EEE", b); }(u, d) : function(p, b) { return Qe(p, "EEEEEE", b); }(u, d); }, n.decreaseYear = function() { n.setState(function(u) { var d, p = u.date; return { date: Me.subYears(p, n.props.showYearPicker ? (d = n.props.yearItemNumber) !== null && d !== void 0 ? d : v.defaultProps.yearItemNumber : 1) }; }, function() { return n.handleYearChange(n.state.date); }); }, n.clearSelectingDate = function() { n.setState({ selectingDate: void 0 }); }, n.renderPreviousButton = function() { var u, d, p; if (!n.props.renderCustomHeader) { var b, M = (u = n.props.monthsShown) !== null && u !== void 0 ? u : v.defaultProps.monthsShown, R = n.props.showPreviousMonths ? M - 1 : 0, I = (d = n.props.monthSelectedIn) !== null && d !== void 0 ? d : R, C = ie.subMonths(n.state.date, I); switch(!0){ case n.props.showMonthYearPicker: b = wm(n.state.date, n.props); break; case n.props.showYearPicker: b = function(Oe, ke) { var vt = ke === void 0 ? {} : ke, bt = vt.minDate, at = vt.yearItemNumber, ct = at === void 0 ? sr : at, Ce = lr(Pn(Me.subYears(Oe, ct)), ct).endPeriod, Fe = bt && S.getYear(bt); return Fe && Fe > Ce || !1; }(n.state.date, n.props); break; case n.props.showQuarterYearPicker: b = function(Oe, ke) { var vt = ke === void 0 ? {} : ke, bt = vt.minDate, at = vt.includeDates, ct = rt.startOfYear(Oe), Ce = me.subQuarters(ct, 1); return bt && y.differenceInCalendarQuarters(bt, Ce) > 0 || at && at.every(function(Fe) { return y.differenceInCalendarQuarters(Fe, Ce) > 0; }) || !1; }(n.state.date, n.props); break; default: b = _m(C, n.props); } if ((((p = n.props.forceShowMonthNavigation) !== null && p !== void 0 ? p : v.defaultProps.forceShowMonthNavigation) || n.props.showDisabledMonthNavigation || !b) && !n.props.showTimeSelectOnly) { var W = [ "react-datepicker__navigation", "react-datepicker__navigation--previous" ], X = n.decreaseMonth; (n.props.showMonthYearPicker || n.props.showQuarterYearPicker || n.props.showYearPicker) && (X = n.decreaseYear), b && n.props.showDisabledMonthNavigation && (W.push("react-datepicker__navigation--previous--disabled"), X = void 0); var ce = n.props.showMonthYearPicker || n.props.showQuarterYearPicker || n.props.showYearPicker, ee = n.props, te = ee.previousMonthButtonLabel, le = te === void 0 ? v.defaultProps.previousMonthButtonLabel : te, Be = ee.previousYearButtonLabel, Je = Be === void 0 ? v.defaultProps.previousYearButtonLabel : Be, ht = n.props, $e = ht.previousMonthAriaLabel, Xe = $e === void 0 ? typeof le == "string" ? le : "Previous Month" : $e, Ie = ht.previousYearAriaLabel, Te = Ie === void 0 ? typeof Je == "string" ? Je : "Previous Year" : Ie; return A.default.createElement("button", { type: "button", className: W.join(" "), onClick: X, onKeyDown: n.props.handleOnKeyDown, "aria-label": ce ? Te : Xe }, A.default.createElement("span", { className: [ "react-datepicker__navigation-icon", "react-datepicker__navigation-icon--previous" ].join(" ") }, ce ? Je : le)); } } }, n.increaseYear = function() { n.setState(function(u) { var d, p = u.date; return { date: x.addYears(p, n.props.showYearPicker ? (d = n.props.yearItemNumber) !== null && d !== void 0 ? d : v.defaultProps.yearItemNumber : 1) }; }, function() { return n.handleYearChange(n.state.date); }); }, n.renderNextButton = function() { var u; if (!n.props.renderCustomHeader) { var d; switch(!0){ case n.props.showMonthYearPicker: d = Dm(n.state.date, n.props); break; case n.props.showYearPicker: d = function(Je, ht) { var $e = ht === void 0 ? {} : ht, Xe = $e.maxDate, Ie = $e.yearItemNumber, Te = Ie === void 0 ? sr : Ie, Oe = lr(x.addYears(Je, Te), Te).startPeriod, ke = Xe && S.getYear(Xe); return ke && ke < Oe || !1; }(n.state.date, n.props); break; case n.props.showQuarterYearPicker: d = function(Je, ht) { var $e = ht === void 0 ? {} : ht, Xe = $e.maxDate, Ie = $e.includeDates, Te = Y.endOfYear(Je), Oe = m.addQuarters(Te, 1); return Xe && y.differenceInCalendarQuarters(Oe, Xe) > 0 || Ie && Ie.every(function(ke) { return y.differenceInCalendarQuarters(Oe, ke) > 0; }) || !1; }(n.state.date, n.props); break; default: d = xm(n.state.date, n.props); } if ((((u = n.props.forceShowMonthNavigation) !== null && u !== void 0 ? u : v.defaultProps.forceShowMonthNavigation) || n.props.showDisabledMonthNavigation || !d) && !n.props.showTimeSelectOnly) { var p = [ "react-datepicker__navigation", "react-datepicker__navigation--next" ]; n.props.showTimeSelect && p.push("react-datepicker__navigation--next--with-time"), n.props.todayButton && p.push("react-datepicker__navigation--next--with-today-button"); var b = n.increaseMonth; (n.props.showMonthYearPicker || n.props.showQuarterYearPicker || n.props.showYearPicker) && (b = n.increaseYear), d && n.props.showDisabledMonthNavigation && (p.push("react-datepicker__navigation--next--disabled"), b = void 0); var M = n.props.showMonthYearPicker || n.props.showQuarterYearPicker || n.props.showYearPicker, R = n.props, I = R.nextMonthButtonLabel, C = I === void 0 ? v.defaultProps.nextMonthButtonLabel : I, W = R.nextYearButtonLabel, X = W === void 0 ? v.defaultProps.nextYearButtonLabel : W, ce = n.props, ee = ce.nextMonthAriaLabel, te = ee === void 0 ? typeof C == "string" ? C : "Next Month" : ee, le = ce.nextYearAriaLabel, Be = le === void 0 ? typeof X == "string" ? X : "Next Year" : le; return A.default.createElement("button", { type: "button", className: p.join(" "), onClick: b, onKeyDown: n.props.handleOnKeyDown, "aria-label": M ? Be : te }, A.default.createElement("span", { className: [ "react-datepicker__navigation-icon", "react-datepicker__navigation-icon--next" ].join(" ") }, M ? X : C)); } } }, n.renderCurrentMonth = function(u) { u === void 0 && (u = n.state.date); var d = [ "react-datepicker__current-month" ]; return n.props.showYearDropdown && d.push("react-datepicker__current-month--hasYearDropdown"), n.props.showMonthDropdown && d.push("react-datepicker__current-month--hasMonthDropdown"), n.props.showMonthYearDropdown && d.push("react-datepicker__current-month--hasMonthYearDropdown"), A.default.createElement("h2", { className: d.join(" ") }, Qe(u, n.props.dateFormat, n.props.locale)); }, n.renderYearDropdown = function(u) { if (u === void 0 && (u = !1), n.props.showYearDropdown && !u) return A.default.createElement(ay, we({}, v.defaultProps, n.props, { date: n.state.date, onChange: n.changeYear, year: S.getYear(n.state.date) })); }, n.renderMonthDropdown = function(u) { if (u === void 0 && (u = !1), n.props.showMonthDropdown && !u) return A.default.createElement(JP, we({}, v.defaultProps, n.props, { month: Q.getMonth(n.state.date), onChange: n.changeMonth })); }, n.renderMonthYearDropdown = function(u) { if (u === void 0 && (u = !1), n.props.showMonthYearDropdown && !u) return A.default.createElement(ty, we({}, v.defaultProps, n.props, { date: n.state.date, onChange: n.changeMonthYear })); }, n.handleTodayButtonClick = function(u) { n.props.onSelect(fm(), u), n.props.setPreSelection && n.props.setPreSelection(fm()); }, n.renderTodayButton = function() { if (n.props.todayButton && !n.props.showTimeSelectOnly) return A.default.createElement("div", { className: "react-datepicker__today-button", onClick: n.handleTodayButtonClick }, n.props.todayButton); }, n.renderDefaultHeader = function(u) { var d = u.monthDate, p = u.i; return A.default.createElement("div", { className: "react-datepicker__header ".concat(n.props.showTimeSelect ? "react-datepicker__header--has-time-select" : "") }, n.renderCurrentMonth(d), A.default.createElement("div", { className: "react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(n.props.dropdownMode), onFocus: n.handleDropdownFocus }, n.renderMonthDropdown(p !== 0), n.renderMonthYearDropdown(p !== 0), n.renderYearDropdown(p !== 0)), A.default.createElement("div", { className: "react-datepicker__day-names" }, n.header(d))); }, n.renderCustomHeader = function(u) { var d, p, b = u.monthDate, M = u.i; if (n.props.showTimeSelect && !n.state.monthContainer || n.props.showTimeSelectOnly) return null; var R = _m(n.state.date, n.props), I = xm(n.state.date, n.props), C = wm(n.state.date, n.props), W = Dm(n.state.date, n.props), X = !n.props.showMonthYearPicker && !n.props.showQuarterYearPicker && !n.props.showYearPicker; return A.default.createElement("div", { className: "react-datepicker__header react-datepicker__header--custom", onFocus: n.props.onDropdownFocus }, (p = (d = n.props).renderCustomHeader) === null || p === void 0 ? void 0 : p.call(d, we(we({}, n.state), { customHeaderCount: M, monthDate: b, changeMonth: n.changeMonth, changeYear: n.changeYear, decreaseMonth: n.decreaseMonth, increaseMonth: n.increaseMonth, decreaseYear: n.decreaseYear, increaseYear: n.increaseYear, prevMonthButtonDisabled: R, nextMonthButtonDisabled: I, prevYearButtonDisabled: C, nextYearButtonDisabled: W })), X && A.default.createElement("div", { className: "react-datepicker__day-names" }, n.header(b))); }, n.renderYearHeader = function(u) { var d = u.monthDate, p = n.props, b = p.showYearPicker, M = p.yearItemNumber, R = lr(d, M === void 0 ? v.defaultProps.yearItemNumber : M), I = R.startPeriod, C = R.endPeriod; return A.default.createElement("div", { className: "react-datepicker__header react-datepicker-year-header" }, b ? "".concat(I, " - ").concat(C) : S.getYear(d)); }, n.renderHeader = function(u) { var d = u.monthDate, p = u.i, b = { monthDate: d, i: p === void 0 ? 0 : p }; switch(!0){ case n.props.renderCustomHeader !== void 0: return n.renderCustomHeader(b); case n.props.showMonthYearPicker || n.props.showQuarterYearPicker || n.props.showYearPicker: return n.renderYearHeader(b); default: return n.renderDefaultHeader(b); } }, n.renderMonths = function() { var u, d; if (!n.props.showTimeSelectOnly && !n.props.showYearPicker) { for(var p = [], b = (u = n.props.monthsShown) !== null && u !== void 0 ? u : v.defaultProps.monthsShown, M = n.props.showPreviousMonths ? b - 1 : 0, R = n.props.showMonthYearPicker || n.props.showQuarterYearPicker ? x.addYears(n.state.date, M) : ie.subMonths(n.state.date, M), I = (d = n.props.monthSelectedIn) !== null && d !== void 0 ? d : M, C = 0; C < b; ++C){ var W = C - I + M, X = n.props.showMonthYearPicker || n.props.showQuarterYearPicker ? x.addYears(R, W) : f.addMonths(R, W), ce = "month-".concat(C), ee = C < b - 1, te = C > 0; p.push(A.default.createElement("div", { key: ce, ref: function(le) { n.monthContainer = le ?? void 0; }, className: "react-datepicker__month-container" }, n.renderHeader({ monthDate: X, i: C }), A.default.createElement(ZP, we({}, v.defaultProps, n.props, { ariaLabelPrefix: n.props.monthAriaLabelPrefix, day: X, onDayClick: n.handleDayClick, handleOnKeyDown: n.props.handleOnDayKeyDown, handleOnMonthKeyDown: n.props.handleOnKeyDown, onDayMouseEnter: n.handleDayMouseEnter, onMouseLeave: n.handleMonthMouseLeave, orderInDisplay: C, selectingDate: n.state.selectingDate, monthShowsDuplicateDaysEnd: ee, monthShowsDuplicateDaysStart: te })))); } return p; } }, n.renderYears = function() { if (!n.props.showTimeSelectOnly) return n.props.showYearPicker ? A.default.createElement("div", { className: "react-datepicker__year--container" }, n.renderHeader({ monthDate: n.state.date }), A.default.createElement(ny, we({}, v.defaultProps, n.props, { selectingDate: n.state.selectingDate, date: n.state.date, onDayClick: n.handleDayClick, clearSelectingDate: n.clearSelectingDate, onYearMouseEnter: n.handleYearMouseEnter, onYearMouseLeave: n.handleYearMouseLeave }))) : void 0; }, n.renderTimeSection = function() { if (n.props.showTimeSelect && (n.state.monthContainer || n.props.showTimeSelectOnly)) return A.default.createElement(ry, we({}, v.defaultProps, n.props, { onChange: n.props.onTimeChange, format: n.props.timeFormat, intervals: n.props.timeIntervals, monthRef: n.state.monthContainer })); }, n.renderInputTimeSection = function() { var u = n.props.selected ? new Date(n.props.selected) : void 0, d = u && kt(u) && n.props.selected ? "".concat(ym(u.getHours()), ":").concat(ym(u.getMinutes())) : ""; if (n.props.showTimeInput) return A.default.createElement($P, we({}, v.defaultProps, n.props, { date: u, timeString: d, onChange: n.props.onTimeChange })); }, n.renderAriaLiveRegion = function() { var u, d, p = lr(n.state.date, (u = n.props.yearItemNumber) !== null && u !== void 0 ? u : v.defaultProps.yearItemNumber), b = p.startPeriod, M = p.endPeriod; return d = n.props.showYearPicker ? "".concat(b, " - ").concat(M) : n.props.showMonthYearPicker || n.props.showQuarterYearPicker ? S.getYear(n.state.date) : "".concat(Vi(Q.getMonth(n.state.date), n.props.locale), " ").concat(S.getYear(n.state.date)), A.default.createElement("span", { role: "alert", "aria-live": "polite", className: "react-datepicker__aria-live" }, n.state.isRenderAriaLiveMessage && d); }, n.renderChildren = function() { if (n.props.children) return A.default.createElement("div", { className: "react-datepicker__children-container" }, n.props.children); }, n.containerRef = r.createRef(), n.state = { date: n.getDateInView(), selectingDate: void 0, monthContainer: void 0, isRenderAriaLiveMessage: !1 }, n; } return Ke(v, w), Object.defineProperty(v, "defaultProps", { get: function() { return { monthsShown: 1, forceShowMonthNavigation: !1, timeCaption: "Time", previousYearButtonLabel: "Previous Year", nextYearButtonLabel: "Next Year", previousMonthButtonLabel: "Previous Month", nextMonthButtonLabel: "Next Month", yearItemNumber: sr }; }, enumerable: !1, configurable: !0 }), v.prototype.componentDidMount = function() { var i = this; this.props.showTimeSelect && (this.assignMonthContainer = void i.setState({ monthContainer: i.monthContainer })); }, v.prototype.componentDidUpdate = function(i) { var n = this; if (!this.props.preSelection || ye(this.props.preSelection, i.preSelection) && this.props.monthSelectedIn === i.monthSelectedIn) this.props.openToDate && !ye(this.props.openToDate, i.openToDate) && this.setState({ date: this.props.openToDate }); else { var u = !qt(this.state.date, this.props.preSelection); this.setState({ date: this.props.preSelection }, function() { return u && n.handleCustomMonthChange(n.state.date); }); } }, v.prototype.render = function() { var i = this.props.container || Lt; return A.default.createElement(Jt, { onClickOutside: this.handleClickOutside, style: { display: "contents" }, containerRef: this.containerRef, ignoreClass: this.props.outsideClickIgnoreClass }, A.default.createElement(i, { className: t.clsx("react-datepicker", this.props.className, { "react-datepicker--time-only": this.props.showTimeSelectOnly }), showTime: this.props.showTimeSelect || this.props.showTimeInput, showTimeSelectOnly: this.props.showTimeSelectOnly }, this.renderAriaLiveRegion(), this.renderPreviousButton(), this.renderNextButton(), this.renderMonths(), this.renderYears(), this.renderTodayButton(), this.renderTimeSection(), this.renderInputTimeSection(), this.renderChildren())); }, v; }(r.Component), cy = function(w) { var v = w.icon, i = w.className, n = i === void 0 ? "" : i, u = w.onClick, d = "react-datepicker__calendar-icon"; return typeof v == "string" ? A.default.createElement("i", { className: "".concat(d, " ").concat(v, " ").concat(n), "aria-hidden": "true", onClick: u }) : A.default.isValidElement(v) ? A.default.cloneElement(v, { className: "".concat(v.props.className || "", " ").concat(d, " ").concat(n), onClick: function(p) { typeof v.props.onClick == "function" && v.props.onClick(p), typeof u == "function" && u(p); } }) : A.default.createElement("svg", { className: "".concat(d, " ").concat(n), xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", onClick: u }, A.default.createElement("path", { d: "M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z" })); }, Ym = function(w) { function v(i) { var n = w.call(this, i) || this; return n.portalRoot = null, n.el = document.createElement("div"), n; } return Ke(v, w), v.prototype.componentDidMount = function() { this.portalRoot = (this.props.portalHost || document).getElementById(this.props.portalId), this.portalRoot || (this.portalRoot = document.createElement("div"), this.portalRoot.setAttribute("id", this.props.portalId), (this.props.portalHost || document.body).appendChild(this.portalRoot)), this.portalRoot.appendChild(this.el); }, v.prototype.componentWillUnmount = function() { this.portalRoot && this.portalRoot.removeChild(this.el); }, v.prototype.render = function() { return Mt.default.createPortal(this.props.children, this.el); }, v; }(r.Component), ly = function(w) { return (w instanceof HTMLAnchorElement || !w.disabled) && w.tabIndex !== -1; }, jm = function(w) { function v(i) { var n = w.call(this, i) || this; return n.getTabChildren = function() { var u; return Array.prototype.slice.call((u = n.tabLoopRef.current) === null || u === void 0 ? void 0 : u.querySelectorAll("[tabindex], a, button, input, select, textarea"), 1, -1).filter(ly); }, n.handleFocusStart = function() { var u = n.getTabChildren(); u && u.length > 1 && u[u.length - 1].focus(); }, n.handleFocusEnd = function() { var u = n.getTabChildren(); u && u.length > 1 && u[0].focus(); }, n.tabLoopRef = r.createRef(), n; } return Ke(v, w), v.prototype.render = function() { var i; return ((i = this.props.enableTabLoop) !== null && i !== void 0 ? i : v.defaultProps.enableTabLoop) ? A.default.createElement("div", { className: "react-datepicker__tab-loop", ref: this.tabLoopRef }, A.default.createElement("div", { className: "react-datepicker__tab-loop__start", tabIndex: 0, onFocus: this.handleFocusStart }), this.props.children, A.default.createElement("div", { className: "react-datepicker__tab-loop__end", tabIndex: 0, onFocus: this.handleFocusEnd })) : this.props.children; }, v.defaultProps = { enableTabLoop: !0 }, v; }(r.Component), Fm, dy = function(w) { function v() { return w !== null && w.apply(this, arguments) || this; } return Ke(v, w), Object.defineProperty(v, "defaultProps", { get: function() { return { hidePopper: !0 }; }, enumerable: !1, configurable: !0 }), v.prototype.render = function() { var i = this.props, n = i.className, u = i.wrapperClassName, d = i.hidePopper, p = d === void 0 ? v.defaultProps.hidePopper : d, b = i.popperComponent, M = i.targetComponent, R = i.enableTabLoop, I = i.popperOnKeyDown, C = i.portalId, W = i.portalHost, X = i.popperProps, ce = i.showArrow, ee = void 0; if (!p) { var te = t.clsx("react-datepicker-popper", n); ee = A.default.createElement(jm, { enableTabLoop: R }, A.default.createElement("div", { ref: X.refs.setFloating, style: X.floatingStyles, className: te, "data-placement": X.placement, onKeyDown: I }, b, ce && A.default.createElement(je.FloatingArrow, { ref: X.arrowRef, context: X.context, fill: "currentColor", strokeWidth: 1, height: 8, width: 16, style: { transform: "translateY(-1px)" }, className: "react-datepicker__triangle" }))); } this.props.popperContainer && (ee = r.createElement(this.props.popperContainer, {}, ee)), C && !p && (ee = A.default.createElement(Ym, { portalId: C, portalHost: W }, ee)); var le = t.clsx("react-datepicker-wrapper", u); return A.default.createElement(A.default.Fragment, null, A.default.createElement("div", { ref: X.refs.setReference, className: le }, M), ee); }, v; }(r.Component), fy = (Fm = dy, _s(function(w) { _s(); var v, i = typeof w.hidePopper != "boolean" || w.hidePopper, n = r.useRef(null), u = je.useFloating(we({ open: !i, whileElementsMounted: je.autoUpdate, placement: w.popperPlacement, middleware: St([ je.flip({ padding: 15 }), je.offset(10), je.arrow({ element: n }) ], (v = w.popperModifiers) !== null && v !== void 0 ? v : [], !0) }, w.popperProps)), d = we(we({}, w), { hidePopper: i, popperProps: we(we({}, u), { arrowRef: n }) }); return A.default.createElement(Fm, we({}, d)); }, "VvFmxmthW1jWrEnoX33+RGF3xug=", false, function() { return [ je.useFloating, je.useFloating, je.useFloating, je.useFloating ]; })), Lm = "react-datepicker-ignore-onclickoutside", Zi = "Date input not valid.", py = function(w) { function v(i) { var n = w.call(this, i) || this; return n.calendar = null, n.input = null, n.getPreSelection = function() { return n.props.openToDate ? n.props.openToDate : n.props.selectsEnd && n.props.startDate ? n.props.startDate : n.props.selectsStart && n.props.endDate ? n.props.endDate : Re(); }, n.modifyHolidays = function() { var u; return (u = n.props.holidays) === null || u === void 0 ? void 0 : u.reduce(function(d, p) { var b = new Date(p.date); return kt(b) ? St(St([], d, !0), [ we(we({}, p), { date: b }) ], !1) : d; }, []); }, n.calcInitialState = function() { var u, d = n.getPreSelection(), p = Om(n.props), b = Mm(n.props), M = p && re.isBefore(d, bo(p)) ? p : b && H.isAfter(d, pm(b)) ? b : d; return { open: n.props.startOpen || !1, preventFocus: !1, inputValue: null, preSelection: (u = n.props.selectsRange ? n.props.startDate : n.props.selected) !== null && u !== void 0 ? u : M, highlightDates: Pm(n.props.highlightDates), focused: !1, shouldFocusDayInline: !1, isRenderAriaLiveMessage: !1, wasHidden: !1 }; }, n.resetHiddenStatus = function() { n.setState(we(we({}, n.state), { wasHidden: !1 })); }, n.setHiddenStatus = function() { n.setState(we(we({}, n.state), { wasHidden: !0 })); }, n.setHiddenStateOnVisibilityHidden = function() { document.visibilityState === "hidden" && n.setHiddenStatus(); }, n.clearPreventFocusTimeout = function() { n.preventFocusTimeout && clearTimeout(n.preventFocusTimeout); }, n.safeFocus = function() { setTimeout(function() { var u, d; (d = (u = n.input) === null || u === void 0 ? void 0 : u.focus) === null || d === void 0 || d.call(u, { preventScroll: !0 }); }, 0); }, n.safeBlur = function() { setTimeout(function() { var u, d; (d = (u = n.input) === null || u === void 0 ? void 0 : u.blur) === null || d === void 0 || d.call(u); }, 0); }, n.setFocus = function() { n.safeFocus(); }, n.setBlur = function() { n.safeBlur(), n.cancelFocusInput(); }, n.setOpen = function(u, d) { d === void 0 && (d = !1), n.setState({ open: u, preSelection: u && n.state.open ? n.state.preSelection : n.calcInitialState().preSelection, lastPreSelectChange: Gi }, function() { u || n.setState(function(p) { return { focused: !!d && p.focused }; }, function() { !d && n.setBlur(), n.setState({ inputValue: null }); }); }); }, n.inputOk = function() { return K.isDate(n.state.preSelection); }, n.isCalendarOpen = function() { return n.props.open === void 0 ? n.state.open && !n.props.disabled && !n.props.readOnly : n.props.open; }, n.handleFocus = function(u) { var d, p, b = n.state.wasHidden, M = !b || n.state.open; b && n.resetHiddenStatus(), !n.state.preventFocus && M && ((p = (d = n.props).onFocus) === null || p === void 0 || p.call(d, u), n.props.preventOpenOnFocus || n.props.readOnly || n.setOpen(!0)), n.setState({ focused: !0 }); }, n.sendFocusBackToInput = function() { n.preventFocusTimeout && n.clearPreventFocusTimeout(), n.setState({ preventFocus: !0 }, function() { n.preventFocusTimeout = setTimeout(function() { n.setFocus(), n.setState({ preventFocus: !1 }); }); }); }, n.cancelFocusInput = function() { clearTimeout(n.inputFocusTimeout), n.inputFocusTimeout = void 0; }, n.deferFocusInput = function() { n.cancelFocusInput(), n.inputFocusTimeout = setTimeout(function() { return n.setFocus(); }, 1); }, n.handleDropdownFocus = function() { n.cancelFocusInput(); }, n.handleBlur = function(u) { var d, p; (!n.state.open || n.props.withPortal || n.props.showTimeInput) && ((p = (d = n.props).onBlur) === null || p === void 0 || p.call(d, u)), n.setState({ focused: !1 }); }, n.handleCalendarClickOutside = function(u) { var d, p; n.props.inline || n.setOpen(!1), (p = (d = n.props).onClickOutside) === null || p === void 0 || p.call(d, u), n.props.withPortal && u.preventDefault(); }, n.handleChange = function() { for(var u, d, p = [], b = 0; b < arguments.length; b++)p[b] = arguments[b]; var M = p[0]; if (!n.props.onChangeRaw || (n.props.onChangeRaw.apply(n, p), M && typeof M.isDefaultPrevented == "function" && !M.isDefaultPrevented())) { n.setState({ inputValue: M?.target instanceof HTMLInputElement ? M.target.value : null, lastPreSelectChange: my }); var R = n.props, I = R.dateFormat, C = I === void 0 ? v.defaultProps.dateFormat : I, W = R.strictParsing, X = W === void 0 ? v.defaultProps.strictParsing : W, ce = R.selectsRange, ee = R.startDate, te = R.endDate, le = M?.target instanceof HTMLInputElement ? M.target.value : ""; if (ce) { var Be = le.split("-", 2).map(function(ke) { return ke.trim(); }), Je = Be[0], ht = Be[1], $e = Qi(Je ?? "", C, n.props.locale, X), Xe = Qi(ht ?? "", C, n.props.locale, X), Ie = ee?.getTime() !== $e?.getTime(), Te = te?.getTime() !== Xe?.getTime(); if (!Ie && !Te || $e && Tt($e, n.props) || Xe && Tt(Xe, n.props)) return; (d = (u = n.props).onChange) === null || d === void 0 || d.call(u, [ $e, Xe ], M); } else { var Oe = Qi(le, C, n.props.locale, X, n.props.minDate); n.props.showTimeSelectOnly && n.props.selected && Oe && !ye(Oe, n.props.selected) && (Oe = Ae.set(n.props.selected, { hours: $.getHours(Oe), minutes: Z.getMinutes(Oe), seconds: k.getSeconds(Oe) })), !Oe && le || n.setSelected(Oe, M, !0); } } }, n.handleSelect = function(u, d, p) { if (n.props.shouldCloseOnSelect && !n.props.showTimeSelect && n.sendFocusBackToInput(), n.props.onChangeRaw && n.props.onChangeRaw(d), n.setSelected(u, d, !1, p), n.props.showDateSelect && n.setState({ isRenderAriaLiveMessage: !0 }), !n.props.shouldCloseOnSelect || n.props.showTimeSelect) n.setPreSelection(u); else if (!n.props.inline) { n.props.selectsRange || n.setOpen(!1); var b = n.props, M = b.startDate, R = b.endDate; !M || R || !n.props.swapRange && qm(u, M) || n.setOpen(!1); } }, n.setSelected = function(u, d, p, b) { var M, R, I = u; if (n.props.showYearPicker) { if (I !== null && Do(S.getYear(I), n.props)) return; } else if (n.props.showMonthYearPicker) { if (I !== null && hm(I, n.props)) return; } else if (I !== null && Tt(I, n.props)) return; var C = n.props, W = C.onChange, X = C.selectsRange, ce = C.startDate, ee = C.endDate, te = C.selectsMultiple, le = C.selectedDates, Be = C.minTime, Je = C.swapRange; if (!Sr(n.props.selected, I) || n.props.allowSameDay || X || te) if (I !== null && (!n.props.selected || p && (n.props.showTimeSelect || n.props.showTimeSelectOnly || n.props.showTimeInput) || (I = Bi(I, { hour: $.getHours(n.props.selected), minute: Z.getMinutes(n.props.selected), second: k.getSeconds(n.props.selected) })), p || !n.props.showTimeSelect && !n.props.showTimeSelectOnly || Be && (I = Bi(I, { hour: Be.getHours(), minute: Be.getMinutes(), second: Be.getSeconds() })), n.props.inline || n.setState({ preSelection: I }), n.props.focusSelectedMonth || n.setState({ monthSelectedIn: b })), X) { var ht = ce && !ee, $e = ce && ee; !ce && !ee ? W?.([ I, null ], d) : ht && (I === null ? W?.([ null, null ], d) : qm(I, ce) ? Je ? W?.([ I, ce ], d) : W?.([ I, null ], d) : W?.([ ce, I ], d)), $e && W?.([ I, null ], d); } else if (te) { if (I !== null) if (le?.length) if (le.some(function(Ie) { return ye(Ie, I); })) { var Xe = le.filter(function(Ie) { return !ye(Ie, I); }); W?.(Xe, d); } else W?.(St(St([], le, !0), [ I ], !1), d); else W?.([ I ], d); } else W?.(I, d); p || ((R = (M = n.props).onSelect) === null || R === void 0 || R.call(M, I, d), n.setState({ inputValue: null })); }, n.setPreSelection = function(u) { var d = K.isDate(n.props.minDate), p = K.isDate(n.props.maxDate), b = !0; if (u) { var M = bo(u); if (d && p) b = xo(u, n.props.minDate, n.props.maxDate); else if (d) { var R = bo(n.props.minDate); b = H.isAfter(u, R) || Sr(M, R); } else if (p) { var I = pm(n.props.maxDate); b = re.isBefore(u, I) || Sr(M, I); } } b && n.setState({ preSelection: u }); }, n.toggleCalendar = function() { n.setOpen(!n.state.open); }, n.handleTimeChange = function(u) { var d, p; if (!n.props.selectsRange && !n.props.selectsMultiple) { var b = n.props.selected ? n.props.selected : n.getPreSelection(), M = n.props.selected ? u : Bi(b, { hour: $.getHours(u), minute: Z.getMinutes(u) }); n.setState({ preSelection: M }), (p = (d = n.props).onChange) === null || p === void 0 || p.call(d, M), n.props.shouldCloseOnSelect && !n.props.showTimeInput && (n.sendFocusBackToInput(), n.setOpen(!1)), n.props.showTimeInput && n.setOpen(!0), (n.props.showTimeSelectOnly || n.props.showTimeSelect) && n.setState({ isRenderAriaLiveMessage: !0 }), n.setState({ inputValue: null }); } }, n.onInputClick = function() { var u, d; n.props.disabled || n.props.readOnly || n.setOpen(!0), (d = (u = n.props).onInputClick) === null || d === void 0 || d.call(u); }, n.onInputKeyDown = function(u) { var d, p, b, M, R, I; (p = (d = n.props).onKeyDown) === null || p === void 0 || p.call(d, u); var C = u.key; if (n.state.open || n.props.inline || n.props.preventOpenOnFocus) { if (n.state.open) { if (C === J.ArrowDown || C === J.ArrowUp) { u.preventDefault(); var W = n.props.showTimeSelectOnly ? ".react-datepicker__time-list-item[tabindex='0']" : n.props.showWeekPicker && n.props.showWeekNumbers ? '.react-datepicker__week-number[tabindex="0"]' : n.props.showFullMonthYearPicker || n.props.showMonthYearPicker ? '.react-datepicker__month-text[tabindex="0"]' : '.react-datepicker__day[tabindex="0"]', X = ((M = n.calendar) === null || M === void 0 ? void 0 : M.containerRef.current) instanceof Element && n.calendar.containerRef.current.querySelector(W); return void (X instanceof HTMLElement && X.focus({ preventScroll: !0 })); } var ce = Re(n.state.preSelection); C === J.Enter ? (u.preventDefault(), u.target.blur(), n.inputOk() && n.state.lastPreSelectChange === Gi ? (n.handleSelect(ce, u), !n.props.shouldCloseOnSelect && n.setPreSelection(ce)) : n.setOpen(!1)) : C === J.Escape ? (u.preventDefault(), u.target.blur(), n.sendFocusBackToInput(), n.setOpen(!1)) : C === J.Tab && n.setOpen(!1), n.inputOk() || (I = (R = n.props).onInputError) === null || I === void 0 || I.call(R, { code: 1, msg: Zi }); } } else C !== J.ArrowDown && C !== J.ArrowUp && C !== J.Enter || (b = n.onInputClick) === null || b === void 0 || b.call(n); }, n.onPortalKeyDown = function(u) { u.key === J.Escape && (u.preventDefault(), n.setState({ preventFocus: !0 }, function() { n.setOpen(!1), setTimeout(function() { n.setFocus(), n.setState({ preventFocus: !1 }); }); })); }, n.onDayKeyDown = function(u) { var d, p, b, M, R, I, C = n.props, W = C.minDate, X = C.maxDate, ce = C.disabledKeyboardNavigation, ee = C.showWeekPicker, te = C.shouldCloseOnSelect, le = C.locale, Be = C.calendarStartDay, Je = C.adjustDateOnChange, ht = C.inline; if ((p = (d = n.props).onKeyDown) === null || p === void 0 || p.call(d, u), !ce) { var $e = u.key, Xe = u.shiftKey, Ie = Re(n.state.preSelection), Te = function(ct, Ce) { var Fe = Ce; switch(ct){ case J.ArrowRight: Fe = ee ? g.addWeeks(Ce, 1) : a.addDays(Ce, 1); break; case J.ArrowLeft: Fe = ee ? se.subWeeks(Ce, 1) : Rt.subDays(Ce, 1); break; case J.ArrowUp: Fe = se.subWeeks(Ce, 1); break; case J.ArrowDown: Fe = g.addWeeks(Ce, 1); break; case J.PageUp: Fe = Xe ? Me.subYears(Ce, 1) : ie.subMonths(Ce, 1); break; case J.PageDown: Fe = Xe ? x.addYears(Ce, 1) : f.addMonths(Ce, 1); break; case J.Home: Fe = ur(Ce, le, Be); break; case J.End: Fe = function(Mo) { return T.endOfWeek(Mo); }(Ce); } return Fe; }; if ($e === J.Enter) return u.preventDefault(), n.handleSelect(Ie, u), void (!te && n.setPreSelection(Ie)); if ($e === J.Escape) return u.preventDefault(), n.setOpen(!1), void (n.inputOk() || (M = (b = n.props).onInputError) === null || M === void 0 || M.call(b, { code: 1, msg: Zi })); var Oe = null; switch($e){ case J.ArrowLeft: case J.ArrowRight: case J.ArrowUp: case J.ArrowDown: case J.PageUp: case J.PageDown: case J.Home: case J.End: Oe = function(ct, Ce) { for(var Fe = ct, Mo = !1, Wm = 0, Wt = Te(ct, Ce); !Mo;){ if (Wm >= 40) { Wt = Ce; break; } W && Wt < W && (Fe = J.ArrowRight, Wt = Tt(W, n.props) ? Te(Fe, Wt) : W), X && Wt > X && (Fe = J.ArrowLeft, Wt = Tt(X, n.props) ? Te(Fe, Wt) : X), Tt(Wt, n.props) ? (Fe !== J.PageUp && Fe !== J.Home || (Fe = J.ArrowRight), Fe !== J.PageDown && Fe !== J.End || (Fe = J.ArrowLeft), Wt = Te(Fe, Wt)) : Mo = !0, Wm++; } return Wt; }($e, Ie); } if (Oe) { if (u.preventDefault(), n.setState({ lastPreSelectChange: Gi }), Je && n.setSelected(Oe), n.setPreSelection(Oe), ht) { var ke = Q.getMonth(Ie), vt = Q.getMonth(Oe), bt = S.getYear(Ie), at = S.getYear(Oe); ke !== vt || bt !== at ? n.setState({ shouldFocusDayInline: !0 }) : n.setState({ shouldFocusDayInline: !1 }); } } else (I = (R = n.props).onInputError) === null || I === void 0 || I.call(R, { code: 1, msg: Zi }); } }, n.onPopperKeyDown = function(u) { u.key === J.Escape && (u.preventDefault(), n.sendFocusBackToInput()); }, n.onClearClick = function(u) { u && u.preventDefault && u.preventDefault(), n.sendFocusBackToInput(); var d = n.props, p = d.selectsRange, b = d.onChange; p ? b?.([ null, null ], u) : b?.(null, u), n.setState({ inputValue: null }); }, n.clear = function() { n.onClearClick(); }, n.onScroll = function(u) { typeof n.props.closeOnScroll == "boolean" && n.props.closeOnScroll ? u.target !== document && u.target !== document.documentElement && u.target !== document.body || n.setOpen(!1) : typeof n.props.closeOnScroll == "function" && n.props.closeOnScroll(u) && n.setOpen(!1); }, n.renderCalendar = function() { var u, d; return n.props.inline || n.isCalendarOpen() ? A.default.createElement(uy, we({ showMonthYearDropdown: void 0, ref: function(p) { n.calendar = p; } }, n.props, n.state, { setOpen: n.setOpen, dateFormat: (u = n.props.dateFormatCalendar) !== null && u !== void 0 ? u : v.defaultProps.dateFormatCalendar, onSelect: n.handleSelect, onClickOutside: n.handleCalendarClickOutside, holidays: VP(n.modifyHolidays()), outsideClickIgnoreClass: Lm, onDropdownFocus: n.handleDropdownFocus, onTimeChange: n.handleTimeChange, className: n.props.calendarClassName, container: n.props.calendarContainer, handleOnKeyDown: n.props.onKeyDown, handleOnDayKeyDown: n.onDayKeyDown, setPreSelection: n.setPreSelection, dropdownMode: (d = n.props.dropdownMode) !== null && d !== void 0 ? d : v.defaultProps.dropdownMode }), n.props.children) : null; }, n.renderAriaLiveRegion = function() { var u, d = n.props, p = d.dateFormat, b = p === void 0 ? v.defaultProps.dateFormat : p, M = d.locale, R = n.props.showTimeInput || n.props.showTimeSelect ? "PPPPp" : "PPPP"; return u = n.props.selectsRange ? "Selected start date: ".concat(It(n.props.startDate, { dateFormat: R, locale: M }), ". ").concat(n.props.endDate ? "End date: " + It(n.props.endDate, { dateFormat: R, locale: M }) : "") : n.props.showTimeSelectOnly ? "Selected time: ".concat(It(n.props.selected, { dateFormat: b, locale: M })) : n.props.showYearPicker ? "Selected year: ".concat(It(n.props.selected, { dateFormat: "yyyy", locale: M })) : n.props.showMonthYearPicker ? "Selected month: ".concat(It(n.props.selected, { dateFormat: "MMMM yyyy", locale: M })) : n.props.showQuarterYearPicker ? "Selected quarter: ".concat(It(n.props.selected, { dateFormat: "yyyy, QQQ", locale: M })) : "Selected date: ".concat(It(n.props.selected, { dateFormat: R, locale: M })), A.default.createElement("span", { role: "alert", "aria-live": "polite", className: "react-datepicker__aria-live" }, u); }, n.renderDateInput = function() { var u, d, p, b = t.clsx(n.props.className, ((u = {})[Lm] = n.state.open, u)), M = n.props.customInput || A.default.createElement("input", { type: "text" }), R = n.props.customInputRef || "ref", I = n.props, C = I.dateFormat, W = C === void 0 ? v.defaultProps.dateFormat : C, X = I.locale, ce = typeof n.props.value == "string" ? n.props.value : typeof n.state.inputValue == "string" ? n.state.inputValue : n.props.selectsRange ? function(ee, te, le) { if (!ee) return ""; var Be = It(ee, le), Je = te ? It(te, le) : ""; return "".concat(Be, " - ").concat(Je); }(n.props.startDate, n.props.endDate, { dateFormat: W, locale: X }) : n.props.selectsMultiple ? function(ee, te) { if (!ee?.length) return ""; var le = ee[0] ? It(ee[0], te) : ""; if (ee.length === 1) return le; if (ee.length === 2 && ee[1]) { var Be = It(ee[1], te); return "".concat(le, ", ").concat(Be); } var Je = ee.length - 1; return "".concat(le, " (+").concat(Je, ")"); }((p = n.props.selectedDates) !== null && p !== void 0 ? p : [], { dateFormat: W, locale: X }) : It(n.props.selected, { dateFormat: W, locale: X }); return r.cloneElement(M, ((d = {})[R] = function(ee) { n.input = ee; }, d.value = ce, d.onBlur = n.handleBlur, d.onChange = n.handleChange, d.onClick = n.onInputClick, d.onFocus = n.handleFocus, d.onKeyDown = n.onInputKeyDown, d.id = n.props.id, d.name = n.props.name, d.form = n.props.form, d.autoFocus = n.props.autoFocus, d.placeholder = n.props.placeholderText, d.disabled = n.props.disabled, d.autoComplete = n.props.autoComplete, d.className = t.clsx(M.props.className, b), d.title = n.props.title, d.readOnly = n.props.readOnly, d.required = n.props.required, d.tabIndex = n.props.tabIndex, d["aria-describedby"] = n.props.ariaDescribedBy, d["aria-invalid"] = n.props.ariaInvalid, d["aria-labelledby"] = n.props.ariaLabelledBy, d["aria-required"] = n.props.ariaRequired, d)); }, n.renderClearButton = function() { var u = n.props, d = u.isClearable, p = u.disabled, b = u.selected, M = u.startDate, R = u.endDate, I = u.clearButtonTitle, C = u.clearButtonClassName, W = C === void 0 ? "" : C, X = u.ariaLabelClose, ce = X === void 0 ? "Close" : X, ee = u.selectedDates; return d && (b != null || M != null || R != null || ee?.length) ? A.default.createElement("button", { type: "button", className: t.clsx("react-datepicker__close-icon", W, { "react-datepicker__close-icon--disabled": p }), disabled: p, "aria-label": ce, onClick: n.onClearClick, title: I, tabIndex: -1 }) : null; }, n.state = n.calcInitialState(), n.preventFocusTimeout = void 0, n; } return Ke(v, w), Object.defineProperty(v, "defaultProps", { get: function() { return { allowSameDay: !1, dateFormat: "MM/dd/yyyy", dateFormatCalendar: "LLLL yyyy", disabled: !1, disabledKeyboardNavigation: !1, dropdownMode: "scroll", preventOpenOnFocus: !1, monthsShown: 1, readOnly: !1, withPortal: !1, selectsDisabledDaysInRange: !1, shouldCloseOnSelect: !0, showTimeSelect: !1, showTimeInput: !1, showPreviousMonths: !1, showMonthYearPicker: !1, showFullMonthYearPicker: !1, showTwoColumnMonthYearPicker: !1, showFourColumnMonthYearPicker: !1, showYearPicker: !1, showQuarterYearPicker: !1, showWeekPicker: !1, strictParsing: !1, swapRange: !1, timeIntervals: 30, timeCaption: "Time", previousMonthAriaLabel: "Previous Month", previousMonthButtonLabel: "Previous Month", nextMonthAriaLabel: "Next Month", nextMonthButtonLabel: "Next Month", previousYearAriaLabel: "Previous Year", previousYearButtonLabel: "Previous Year", nextYearAriaLabel: "Next Year", nextYearButtonLabel: "Next Year", timeInputLabel: "Time", enableTabLoop: !0, yearItemNumber: sr, focusSelectedMonth: !1, showPopperArrow: !0, excludeScrollbar: !0, customTimeInput: null, calendarStartDay: void 0, toggleCalendarOnIconClick: !1, usePointerEvent: !1 }; }, enumerable: !1, configurable: !0 }), v.prototype.componentDidMount = function() { window.addEventListener("scroll", this.onScroll, !0), document.addEventListener("visibilitychange", this.setHiddenStateOnVisibilityHidden); }, v.prototype.componentDidUpdate = function(i, n) { var u, d, p, b, M, R; i.inline && (M = i.selected, R = this.props.selected, M && R ? Q.getMonth(M) !== Q.getMonth(R) || S.getYear(M) !== S.getYear(R) : M !== R) && this.setPreSelection(this.props.selected), this.state.monthSelectedIn !== void 0 && i.monthsShown !== this.props.monthsShown && this.setState({ monthSelectedIn: 0 }), i.highlightDates !== this.props.highlightDates && this.setState({ highlightDates: Pm(this.props.highlightDates) }), n.focused || Sr(i.selected, this.props.selected) || this.setState({ inputValue: null }), n.open !== this.state.open && (n.open === !1 && this.state.open === !0 && ((d = (u = this.props).onCalendarOpen) === null || d === void 0 || d.call(u)), n.open === !0 && this.state.open === !1 && ((b = (p = this.props).onCalendarClose) === null || b === void 0 || b.call(p))); }, v.prototype.componentWillUnmount = function() { this.clearPreventFocusTimeout(), window.removeEventListener("scroll", this.onScroll, !0), document.removeEventListener("visibilitychange", this.setHiddenStateOnVisibilityHidden); }, v.prototype.renderInputContainer = function() { var i = this.props, n = i.showIcon, u = i.icon, d = i.calendarIconClassname, p = i.calendarIconClassName, b = i.toggleCalendarOnIconClick, M = this.state.open; return d && console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."), A.default.createElement("div", { className: "react-datepicker__input-container".concat(n ? " react-datepicker__view-calendar-icon" : "") }, n && A.default.createElement(cy, we({ icon: u, className: t.clsx(p, !p && d, M && "react-datepicker-ignore-onclickoutside") }, b ? { onClick: this.toggleCalendar } : null)), this.state.isRenderAriaLiveMessage && this.renderAriaLiveRegion(), this.renderDateInput(), this.renderClearButton()); }, v.prototype.render = function() { var i = this.renderCalendar(); if (this.props.inline) return i; if (this.props.withPortal) { var n = this.state.open ? A.default.createElement(jm, { enableTabLoop: this.props.enableTabLoop }, A.default.createElement("div", { className: "react-datepicker__portal", tabIndex: -1, onKeyDown: this.onPortalKeyDown }, i)) : null; return this.state.open && this.props.portalId && (n = A.default.createElement(Ym, we({ portalId: this.props.portalId }, this.props), n)), A.default.createElement("div", null, this.renderInputContainer(), n); } return A.default.createElement(fy, we({}, this.props, { className: this.props.popperClassName, hidePopper: !this.isCalendarOpen(), targetComponent: this.renderInputContainer(), popperComponent: i, popperOnKeyDown: this.onPopperKeyDown, showArrow: this.props.showPopperArrow })); }, v; }(r.Component), my = "input", Gi = "navigate"; e.CalendarContainer = Lt, e.default = py, e.getDefaultLocale = Gr, e.registerLocale = function(w, v) { var i = Zr(); i.__localeData__ || (i.__localeData__ = {}), i.__localeData__[w] = v; }, e.setDefaultLocale = function(w) { Zr().__localeId__ = w; }, Object.defineProperty(e, "__esModule", { value: !0 }); }); }); var Pr = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(yP(), 1); var SP = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("svg", { className: "icon icon--calendar", viewBox: "0 0 20 20", xmlns: "http://www.w3.org/2000/svg", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("path", { className: "stroke", d: "M7.33333 3.33334V6M12.6667 3.33334V6M4 8.66667H16M5.33333 4.66667H14.6667C15.403 4.66667 16 5.26362 16 6V15.3333C16 16.0697 15.403 16.6667 14.6667 16.6667H5.33333C4.59695 16.6667 4 16.0697 4 15.3333V6C4 5.26362 4.59695 4.66667 5.33333 4.66667Z", strokeLinecap: "square" }) }); _c419 = SP; var RP = ({ className: e })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("svg", { className: [ e, "icon icon--x" ].filter(Boolean).join(" "), height: 20, viewBox: "0 0 20 20", width: 20, xmlns: "http://www.w3.org/2000/svg", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("path", { className: "stroke", d: "M14 6L6 14M6 6L14 14", strokeLinecap: "square" }) }); _c420 = RP; var KA = { lessThanXSeconds: { one: "less than a second", other: "less than {{count}} seconds" }, xSeconds: { one: "1 second", other: "{{count}} seconds" }, halfAMinute: "half a minute", lessThanXMinutes: { one: "less than a minute", other: "less than {{count}} minutes" }, xMinutes: { one: "1 minute", other: "{{count}} minutes" }, aboutXHours: { one: "about 1 hour", other: "about {{count}} hours" }, xHours: { one: "1 hour", other: "{{count}} hours" }, xDays: { one: "1 day", other: "{{count}} days" }, aboutXWeeks: { one: "about 1 week", other: "about {{count}} weeks" }, xWeeks: { one: "1 week", other: "{{count}} weeks" }, aboutXMonths: { one: "about 1 month", other: "about {{count}} months" }, xMonths: { one: "1 month", other: "{{count}} months" }, aboutXYears: { one: "about 1 year", other: "about {{count}} years" }, xYears: { one: "1 year", other: "{{count}} years" }, overXYears: { one: "over 1 year", other: "over {{count}} years" }, almostXYears: { one: "almost 1 year", other: "almost {{count}} years" } }, IP = (e, t, r)=>{ let o, a = KA[e]; return typeof a == "string" ? o = a : t === 1 ? o = a.one : o = a.other.replace("{{count}}", t.toString()), r?.addSuffix ? r.comparison && r.comparison > 0 ? "in " + o : o + " ago" : o; }; function Hi(e) { return (t = {})=>{ let r = t.width ? String(t.width) : e.defaultWidth; return e.formats[r] || e.formats[e.defaultWidth]; }; } _c421 = Hi; var $A = { full: "EEEE, MMMM do, y", long: "MMMM do, y", medium: "MMM d, y", short: "MM/dd/yyyy" }, zA = { full: "h:mm:ss a zzzz", long: "h:mm:ss a z", medium: "h:mm:ss a", short: "h:mm a" }, UA = { full: "{{date}} 'at' {{time}}", long: "{{date}} 'at' {{time}}", medium: "{{date}}, {{time}}", short: "{{date}}, {{time}}" }, TP = { date: Hi({ formats: $A, defaultWidth: "full" }), time: Hi({ formats: zA, defaultWidth: "full" }), dateTime: Hi({ formats: UA, defaultWidth: "full" }) }; var XA = { lastWeek: "'last' eeee 'at' p", yesterday: "'yesterday at' p", today: "'today at' p", tomorrow: "'tomorrow at' p", nextWeek: "eeee 'at' p", other: "P" }, CP = (e, t, r, o)=>XA[e]; function On(e) { return (t, r)=>{ let o = r?.context ? String(r.context) : "standalone", a; if (o === "formatting" && e.formattingValues) { let l = e.defaultFormattingWidth || e.defaultWidth, f = r?.width ? String(r.width) : l; a = e.formattingValues[f] || e.formattingValues[l]; } else { let l = e.defaultWidth, f = r?.width ? String(r.width) : e.defaultWidth; a = e.values[f] || e.values[l]; } let c = e.argumentCallback ? e.argumentCallback(t) : t; return a[c]; }; } _c422 = On; var ZA = { narrow: [ "B", "A" ], abbreviated: [ "BC", "AD" ], wide: [ "Before Christ", "Anno Domini" ] }, GA = { narrow: [ "1", "2", "3", "4" ], abbreviated: [ "Q1", "Q2", "Q3", "Q4" ], wide: [ "1st quarter", "2nd quarter", "3rd quarter", "4th quarter" ] }, JA = { narrow: [ "J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D" ], abbreviated: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], wide: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] }, kA = { narrow: [ "S", "M", "T", "W", "T", "F", "S" ], short: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ], abbreviated: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], wide: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ] }, eH = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" } }, tH = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" } }, rH = (e, t)=>{ let r = Number(e), o = r % 100; if (o > 20 || o < 10) switch(o % 10){ case 1: return r + "st"; case 2: return r + "nd"; case 3: return r + "rd"; } return r + "th"; }, NP = { ordinalNumber: rH, era: On({ values: ZA, defaultWidth: "wide" }), quarter: On({ values: GA, defaultWidth: "wide", argumentCallback: (e)=>e - 1 }), month: On({ values: JA, defaultWidth: "wide" }), day: On({ values: kA, defaultWidth: "wide" }), dayPeriod: On({ values: eH, defaultWidth: "wide", formattingValues: tH, defaultFormattingWidth: "wide" }) }; function Mn(e) { return (t, r = {})=>{ let o = r.width, a = o && e.matchPatterns[o] || e.matchPatterns[e.defaultMatchWidth], c = t.match(a); if (!c) return null; let l = c[0], f = o && e.parsePatterns[o] || e.parsePatterns[e.defaultParseWidth], m = Array.isArray(f) ? oH(f, (x)=>x.test(l)) : nH(f, (x)=>x.test(l)), h; h = e.valueCallback ? e.valueCallback(m) : m, h = r.valueCallback ? r.valueCallback(h) : h; let g = t.slice(l.length); return { value: h, rest: g }; }; } _c423 = Mn; function nH(e, t) { for(let r in e)if (Object.prototype.hasOwnProperty.call(e, r) && t(e[r])) return r; } function oH(e, t) { for(let r = 0; r < e.length; r++)if (t(e[r])) return r; } function YP(e) { return (t, r = {})=>{ let o = t.match(e.matchPattern); if (!o) return null; let a = o[0], c = t.match(e.parsePattern); if (!c) return null; let l = e.valueCallback ? e.valueCallback(c[0]) : c[0]; l = r.valueCallback ? r.valueCallback(l) : l; let f = t.slice(a.length); return { value: l, rest: f }; }; } _c424 = YP; var iH = /^(\d+)(th|st|nd|rd)?/i, aH = /\d+/i, sH = { narrow: /^(b|a)/i, abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, wide: /^(before christ|before common era|anno domini|common era)/i }, uH = { any: [ /^b/i, /^(a|c)/i ] }, cH = { narrow: /^[1234]/i, abbreviated: /^q[1234]/i, wide: /^[1234](th|st|nd|rd)? quarter/i }, lH = { any: [ /1/i, /2/i, /3/i, /4/i ] }, dH = { narrow: /^[jfmasond]/i, abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i }, fH = { narrow: [ /^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i ], any: [ /^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i ] }, pH = { narrow: /^[smtwf]/i, short: /^(su|mo|tu|we|th|fr|sa)/i, abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i }, mH = { narrow: [ /^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i ], any: [ /^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i ] }, hH = { narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i }, gH = { any: { am: /^a/i, pm: /^p/i, midnight: /^mi/i, noon: /^no/i, morning: /morning/i, afternoon: /afternoon/i, evening: /evening/i, night: /night/i } }, jP = { ordinalNumber: YP({ matchPattern: iH, parsePattern: aH, valueCallback: (e)=>parseInt(e, 10) }), era: Mn({ matchPatterns: sH, defaultMatchWidth: "wide", parsePatterns: uH, defaultParseWidth: "any" }), quarter: Mn({ matchPatterns: cH, defaultMatchWidth: "wide", parsePatterns: lH, defaultParseWidth: "any", valueCallback: (e)=>e + 1 }), month: Mn({ matchPatterns: dH, defaultMatchWidth: "wide", parsePatterns: fH, defaultParseWidth: "any" }), day: Mn({ matchPatterns: pH, defaultMatchWidth: "wide", parsePatterns: mH, defaultParseWidth: "any" }), dayPeriod: Mn({ matchPatterns: hH, defaultMatchWidth: "any", parsePatterns: gH, defaultParseWidth: "any" }) }; var FP = { code: "en-US", formatDistance: IP, formatLong: TP, formatRelative: CP, localize: NP, match: jP, options: { weekStartsOn: 0, firstWeekContainsDate: 1 } }; var LP = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({ i18n: { dateFNS: FP, dateFNSKey: "en-US", fallbackLanguage: "en", language: "en", t: (e)=>e, translations: {} }, languageOptions: void 0, switchLanguage: void 0, t: (e)=>{} }), V5 = (e)=>{ let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_4__.c)(18), { children: r, dateFNSKey: o, fallbackLang: a, language: c, languageOptions: l, switchLanguageServerAction: f, translations: m } = e, h = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), [g, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), P; t[0] !== m ? (P = (Y, F)=>(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_6__.t)({ key: Y, translations: m, vars: F }), t[0] = m, t[1] = P) : P = t[1]; let D = P, y; t[2] !== h || t[3] !== f ? (y = async (Y)=>{ try { await f(Y), h.refresh(); } catch (F) { let V = F; console.error(`Error loading language: "${Y}"`, V); } }, t[2] = h, t[3] = f, t[4] = y) : y = t[4]; let O = y, E, N; t[5] !== o ? (E = ()=>{ (async ()=>{ let F = await (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_7__.importDateFNSLocale)(o); x(F); })(); }, N = [ o ], t[5] = o, t[6] = E, t[7] = N) : (E = t[6], N = t[7]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(E, N); let T; return t[8] !== r || t[9] !== g || t[10] !== o || t[11] !== a || t[12] !== c || t[13] !== l || t[14] !== D || t[15] !== O || t[16] !== m ? (T = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(LP, { value: { i18n: { dateFNS: g, dateFNSKey: o, fallbackLanguage: a, language: c, t: D, translations: m }, languageOptions: l, switchLanguage: O, t: D }, children: r }), t[8] = r, t[9] = g, t[10] = o, t[11] = a, t[12] = c, t[13] = l, t[14] = D, t[15] = O, t[16] = m, t[17] = T) : T = t[17], T; }, WP = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(LP); var AP = (e = "enUS")=>({ en: "enUS", my: "enUS", ua: "uk", zh: "zhCN" })[e] || e; _c425 = AP; var SH = "default" in Pr.default ? Pr.default.default : Pr.default, go = "date-time-picker", qH = (e)=>{ _s32(); let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_4__.c)(6), { id: r, displayFormat: o, maxDate: a, maxTime: c, minDate: l, minTime: f, monthsToShow: m, onChange: h, overrides: g, pickerAppearance: x, placeholder: P, readOnly: D, timeFormat: y, timeIntervals: O, value: E } = e, N = m === void 0 ? 1 : m, T = x === void 0 ? "default" : x, Y = y === void 0 ? "h:mm aa" : y, F = O === void 0 ? 30 : O, { i18n: V } = WP(), B = o; o || (T === "default" ? B = "MM/dd/yyyy" : T === "dayAndTime" ? B = "MMM d, yyy h:mm a" : T === "timeOnly" ? B = "h:mm a" : T === "dayOnly" ? B = "MMM dd" : T === "monthOnly" && (B = "MMMM")); let $ = (S)=>{ let H = S; if (H instanceof Date && [ "dayOnly", "default", "monthOnly" ].includes(T)) { let re = S.getTimezoneOffset() / 60; H.setHours(12 - re, 0); } H instanceof Date && !B.includes("SSS") && H.setMilliseconds(0), typeof h == "function" && h(H); }, z = { customInputRef: "ref", dateFormat: B, disabled: D, maxDate: a, maxTime: c, minDate: l, minTime: f, monthsShown: Math.min(2, N), onChange: $, placeholderText: P, popperPlacement: "bottom-start", selected: E && new Date(E), showMonthYearPicker: T === "monthOnly", showPopperArrow: !1, showTimeSelect: T === "dayAndTime" || T === "timeOnly", timeFormat: Y, timeIntervals: F, ...g }, Z = `${go}__appearance--${T}`, Q; t[0] !== Z ? (Q = [ go, Z ].filter(Boolean), t[0] = Z, t[1] = Q) : Q = t[1]; let oe = Q.join(" "), k, G; return t[2] !== V.dateFNS || t[3] !== V.language ? (k = ()=>{ if (V.dateFNS) try { let S = AP(V.language); (0, Pr.registerLocale)(S, V.dateFNS), (0, Pr.setDefaultLocale)(S); } catch { console.warn(`Could not find DatePicker locale for ${V.language}`); } }, G = [ V.language, V.dateFNS ], t[2] = V.dateFNS, t[3] = V.language, t[4] = k, t[5] = G) : (k = t[4], G = t[5]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(k, G), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { className: oe, id: r, children: [ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", { className: `${go}__icon-wrap`, children: [ z.selected && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("button", { className: `${go}__clear-button`, onClick: ()=>$(null), type: "button", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(RP, {}) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(SP, {}) ] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { className: `${go}__input-wrapper`, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(SH, { ...z, dropdownMode: "select", showMonthDropdown: !0, showYearDropdown: !0 }) }) ] }); }, eK = qH; _s32(qH, "OD7bBpZva5O2jO+Puf00hKivP7c="); /*! Bundled license information: tabbable/dist/index.esm.js: (*! * tabbable 6.4.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE *) react-datepicker/dist/react-datepicker.min.js: (*! react-datepicker v7.6.0 https://github.com/Hacker0x01/react-datepicker Released under the MIT License. *) */ //# sourceMappingURL=chunk-WDZJLNNB.js.map var _c, _c1, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c10, _c11, _c12, _c13, _c14, _c15, _c16, _c17, _c18, _c19, _c20, _c21, _c22, _c23, _c24, _c25, _c26, _c27, _c28, _c29, _c30, _c31, _c32, _c33, _c34, _c35, _c36, _c37, _c38, _c39, _c40, _c41, _c42, _c43, _c44, _c45, _c46, _c47, _c48, _c49, _c50, _c51, _c52, _c53, _c54, _c55, _c56, _c57, _c58, _c59, _c60, _c61, _c62, _c63, _c64, _c65, _c66, _c67, _c68, _c69, _c70, _c71, _c72, _c73, _c74, _c75, _c76, _c77, _c78, _c79, _c80, _c81, _c82, _c83, _c84, _c85, _c86, _c87, _c88, _c89, _c90, _c91, _c92, _c93, _c94, _c95, _c96, _c97, _c98, _c99, _c100, _c101, _c102, _c103, _c104, _c105, _c106, _c107, _c108, _c109, _c110, _c111, _c112, _c113, _c114, _c115, _c116, _c117, _c118, _c119, _c120, _c121, _c122, _c123, _c124, _c125, _c126, _c127, _c128, _c129, _c130, _c131, _c132, _c133, _c134, _c135, _c136, _c137, _c138, _c139, _c140, _c141, _c142, _c143, _c144, _c145, _c146, _c147, _c148, _c149, _c150, _c151, _c152, _c153, _c154, _c155, _c156, _c157, _c158, _c159, _c160, _c161, _c162, _c163, _c164, _c165, _c166, _c167, _c168, _c169, _c170, _c171, _c172, _c173, _c174, _c175, _c176, _c177, _c178, _c179, _c180, _c181, _c182, _c183, _c184, _c185, _c186, _c187, _c188, _c189, _c190, _c191, _c192, _c193, _c194, _c195, _c196, _c197, _c198, _c199, _c200, _c201, _c202, _c203, _c204, _c205, _c206, _c207, _c208, _c209, _c210, _c211, _c212, _c213, _c214, _c215, _c216, _c217, _c218, _c219, _c220, _c221, _c222, _c223, _c224, _c225, _c226, _c227, _c228, _c229, _c230, _c231, _c232, _c233, _c234, _c235, _c236, _c237, _c238, _c239, _c240, _c241, _c242, _c243, _c244, _c245, _c246, _c247, _c248, _c249, _c250, _c251, _c252, _c253, _c254, _c255, _c256, _c257, _c258, _c259, _c260, _c261, _c262, _c263, _c264, _c265, _c266, _c267, _c268, _c269, _c270, _c271, _c272, _c273, _c274, _c275, _c276, _c277, _c278, _c279, _c280, _c281, _c282, _c283, _c284, _c285, _c286, _c287, _c288, _c289, _c290, _c291, _c292, _c293, _c294, _c295, _c296, _c297, _c298, _c299, _c300, _c301, _c302, _c303, _c304, _c305, _c306, _c307, _c308, _c309, _c310, _c311, _c312, _c313, _c314, _c315, _c316, _c317, _c318, _c319, _c320, _c321, _c322, _c323, _c324, _c325, _c326, _c327, _c328, _c329, _c330, _c331, _c332, _c333, _c334, _c335, _c336, _c337, _c338, _c339, _c340, _c341, _c342, _c343, _c344, _c345, _c346, _c347, _c348, _c349, _c350, _c351, _c352, _c353, _c354, _c355, _c356, _c357, _c358, _c359, _c360, _c361, _c362, _c363, _c364, _c365, _c366, _c367, _c368, _c369, _c370, _c371, _c372, _c373, _c374, _c375, _c376, _c377, _c378, _c379, _c380, _c381, _c382, _c383, _c384, _c385, _c386, _c387, _c388, _c389, _c390, _c391, _c392, _c393, _c394, _c395, _c396, _c397, _c398, _c399, _c400, _c401, _c402, _c403, _c404, _c405, _c406, _c407, _c408, _c409, _c410, _c411, _c412, _c413, _c414, _c415, _c416, _c417, _c418, _c419, _c420, _c421, _c422, _c423, _c424, _c425; $RefreshReg$(_c, "Bm$_"); $RefreshReg$(_c1, "Bm"); $RefreshReg$(_c2, "L$_"); $RefreshReg$(_c3, "L"); $RefreshReg$(_c4, "Pe$_"); $RefreshReg$(_c5, "Pe"); $RefreshReg$(_c6, "At$_"); $RefreshReg$(_c7, "At"); $RefreshReg$(_c8, "En$_"); $RefreshReg$(_c9, "En"); $RefreshReg$(_c10, "Sn$_"); $RefreshReg$(_c11, "Sn"); $RefreshReg$(_c12, "Ct$_"); $RefreshReg$(_c13, "Ct"); $RefreshReg$(_c14, "Ut$_"); $RefreshReg$(_c15, "Ut"); $RefreshReg$(_c16, "Rn$_"); $RefreshReg$(_c17, "Rn"); $RefreshReg$(_c18, "Po$_"); $RefreshReg$(_c19, "Po"); $RefreshReg$(_c20, "Mh$_"); $RefreshReg$(_c21, "Mh"); $RefreshReg$(_c22, "So$_"); $RefreshReg$(_c23, "So"); $RefreshReg$(_c24, "Sh$_"); $RefreshReg$(_c25, "Sh"); $RefreshReg$(_c26, "Ih$_"); $RefreshReg$(_c27, "Ih"); $RefreshReg$(_c28, "Yh$_"); $RefreshReg$(_c29, "Yh"); $RefreshReg$(_c30, "Rr$_"); $RefreshReg$(_c31, "Rr"); $RefreshReg$(_c32, "Ah$_"); $RefreshReg$(_c33, "Ah"); $RefreshReg$(_c34, "Bh$_"); $RefreshReg$(_c35, "Bh"); $RefreshReg$(_c36, "Ir$_"); $RefreshReg$(_c37, "Ir"); $RefreshReg$(_c38, "Ro$_"); $RefreshReg$(_c39, "Ro"); $RefreshReg$(_c40, "Xt$_"); $RefreshReg$(_c41, "Xt"); $RefreshReg$(_c42, "Jh$_"); $RefreshReg$(_c43, "Jh"); $RefreshReg$(_c44, "In$_"); $RefreshReg$(_c45, "In"); $RefreshReg$(_c46, "Io$_"); $RefreshReg$(_c47, "Io"); $RefreshReg$(_c48, "To$_"); $RefreshReg$(_c49, "To"); $RefreshReg$(_c50, "Co$_"); $RefreshReg$(_c51, "Co"); $RefreshReg$(_c52, "Tn$_"); $RefreshReg$(_c53, "Tn"); $RefreshReg$(_c54, "No$_"); $RefreshReg$(_c55, "No"); $RefreshReg$(_c56, "Cn$_"); $RefreshReg$(_c57, "Cn"); $RefreshReg$(_c58, "Yo$_"); $RefreshReg$(_c59, "Yo"); $RefreshReg$(_c60, "Eg$_"); $RefreshReg$(_c61, "Eg"); $RefreshReg$(_c62, "Nn$_"); $RefreshReg$(_c63, "Nn"); $RefreshReg$(_c64, "Yn$_"); $RefreshReg$(_c65, "Yn"); $RefreshReg$(_c66, "Ng$_"); $RefreshReg$(_c67, "Ng"); $RefreshReg$(_c68, "Fn$_"); $RefreshReg$(_c69, "Fn"); $RefreshReg$(_c70, "Fg$_"); $RefreshReg$(_c71, "Fg"); $RefreshReg$(_c72, "Bg$_"); $RefreshReg$(_c73, "Bg"); $RefreshReg$(_c74, "Fo$_"); $RefreshReg$(_c75, "Fo"); $RefreshReg$(_c76, "Ug$_"); $RefreshReg$(_c77, "Ug"); $RefreshReg$(_c78, "Ln$_"); $RefreshReg$(_c79, "Ln"); $RefreshReg$(_c80, "Gg$_"); $RefreshReg$(_c81, "Gg"); $RefreshReg$(_c82, "Ao$_"); $RefreshReg$(_c83, "Ao"); $RefreshReg$(_c84, "Ho$_"); $RefreshReg$(_c85, "Ho"); $RefreshReg$(_c86, "Wn$_"); $RefreshReg$(_c87, "Wn"); $RefreshReg$(_c88, "Qo$_"); $RefreshReg$(_c89, "Qo"); $RefreshReg$(_c90, "Dv$_"); $RefreshReg$(_c91, "Dv"); $RefreshReg$(_c92, "Mv$_"); $RefreshReg$(_c93, "Mv"); $RefreshReg$(_c94, "Sv$_"); $RefreshReg$(_c95, "Sv"); $RefreshReg$(_c96, "Rv$_"); $RefreshReg$(_c97, "Rv"); $RefreshReg$(_c98, "Iv$_"); $RefreshReg$(_c99, "Iv"); $RefreshReg$(_c100, "Cv$_"); $RefreshReg$(_c101, "Cv"); $RefreshReg$(_c102, "Nv$_"); $RefreshReg$(_c103, "Nv"); $RefreshReg$(_c104, "Yv$_"); $RefreshReg$(_c105, "Yv"); $RefreshReg$(_c106, "Fv$_"); $RefreshReg$(_c107, "Fv"); $RefreshReg$(_c108, "Lv$_"); $RefreshReg$(_c109, "Lv"); $RefreshReg$(_c110, "Av$_"); $RefreshReg$(_c111, "Av"); $RefreshReg$(_c112, "Qv$_"); $RefreshReg$(_c113, "Qv"); $RefreshReg$(_c114, "Bv$_"); $RefreshReg$(_c115, "Bv"); $RefreshReg$(_c116, "Vv$_"); $RefreshReg$(_c117, "Vv"); $RefreshReg$(_c118, "Tr$_"); $RefreshReg$(_c119, "Tr"); $RefreshReg$(_c120, "Sa$_"); $RefreshReg$(_c121, "Sa"); $RefreshReg$(_c122, "Qn$_"); $RefreshReg$(_c123, "Qn"); $RefreshReg$(_c124, "Bn$_"); $RefreshReg$(_c125, "Bn"); $RefreshReg$(_c126, "Bo$_"); $RefreshReg$(_c127, "Bo"); $RefreshReg$(_c128, "Vo$_"); $RefreshReg$(_c129, "Vo"); $RefreshReg$(_c130, "Cr$_"); $RefreshReg$(_c131, "Cr"); $RefreshReg$(_c132, "Ra$_"); $RefreshReg$(_c133, "Ra"); $RefreshReg$(_c134, "Ca$_"); $RefreshReg$(_c135, "Ca"); $RefreshReg$(_c136, "Na$_"); $RefreshReg$(_c137, "Na"); $RefreshReg$(_c138, "Fa$_"); $RefreshReg$(_c139, "Fa"); $RefreshReg$(_c140, "La$_"); $RefreshReg$(_c141, "La"); $RefreshReg$(_c142, "O0$_"); $RefreshReg$(_c143, "O0"); $RefreshReg$(_c144, "P0$_"); $RefreshReg$(_c145, "P0"); $RefreshReg$(_c146, "S0$_"); $RefreshReg$(_c147, "S0"); $RefreshReg$(_c148, "R0$_"); $RefreshReg$(_c149, "R0"); $RefreshReg$(_c150, "Zo$_"); $RefreshReg$(_c151, "Zo"); $RefreshReg$(_c152, "Wa$_"); $RefreshReg$(_c153, "Wa"); $RefreshReg$(_c154, "Aa$_"); $RefreshReg$(_c155, "Aa"); $RefreshReg$(_c156, "L0$_"); $RefreshReg$(_c157, "L0"); $RefreshReg$(_c158, "Ha$_"); $RefreshReg$(_c159, "Ha"); $RefreshReg$(_c160, "Qa$_"); $RefreshReg$(_c161, "Qa"); $RefreshReg$(_c162, "Ba$_"); $RefreshReg$(_c163, "Ba"); $RefreshReg$(_c164, "V0$_"); $RefreshReg$(_c165, "V0"); $RefreshReg$(_c166, "Va$_"); $RefreshReg$(_c167, "Va"); $RefreshReg$(_c168, "Ka$_"); $RefreshReg$(_c169, "Ka"); $RefreshReg$(_c170, "G0$_"); $RefreshReg$(_c171, "G0"); $RefreshReg$(_c172, "Ua$_"); $RefreshReg$(_c173, "Ua"); $RefreshReg$(_c174, "Xa$_"); $RefreshReg$(_c175, "Xa"); $RefreshReg$(_c176, "Sb$_"); $RefreshReg$(_c177, "Sb"); $RefreshReg$(_c178, "Lb$_"); $RefreshReg$(_c179, "Lb"); $RefreshReg$(_c180, "Ab$_"); $RefreshReg$(_c181, "Ab"); $RefreshReg$(_c182, "Qb$_"); $RefreshReg$(_c183, "Qb"); $RefreshReg$(_c184, "Ee$_"); $RefreshReg$(_c185, "Ee"); $RefreshReg$(_c186, "Vb$_"); $RefreshReg$(_c187, "Vb"); $RefreshReg$(_c188, "Se$_"); $RefreshReg$(_c189, "Se"); $RefreshReg$(_c190, "Kb$_"); $RefreshReg$(_c191, "Kb"); $RefreshReg$(_c192, "Xb$_"); $RefreshReg$(_c193, "Xb"); $RefreshReg$(_c194, "Gb$_"); $RefreshReg$(_c195, "Gb"); $RefreshReg$(_c196, "Jb$_"); $RefreshReg$(_c197, "Jb"); $RefreshReg$(_c198, "Ss$_"); $RefreshReg$(_c199, "Ss"); $RefreshReg$(_c200, "Is$_"); $RefreshReg$(_c201, "Is"); $RefreshReg$(_c202, "Zn$_"); $RefreshReg$(_c203, "Zn"); $RefreshReg$(_c204, "Us$_"); $RefreshReg$(_c205, "Us"); $RefreshReg$(_c206, "D_$_"); $RefreshReg$(_c207, "D_"); $RefreshReg$(_c208, "M_$_"); $RefreshReg$(_c209, "M_"); $RefreshReg$(_c210, "S_$_"); $RefreshReg$(_c211, "S_"); $RefreshReg$(_c212, "R_$_"); $RefreshReg$(_c213, "R_"); $RefreshReg$(_c214, "T_$_"); $RefreshReg$(_c215, "T_"); $RefreshReg$(_c216, "C_$_"); $RefreshReg$(_c217, "C_"); $RefreshReg$(_c218, "N_$_"); $RefreshReg$(_c219, "N_"); $RefreshReg$(_c220, "Y_$_"); $RefreshReg$(_c221, "Y_"); $RefreshReg$(_c222, "F_$_"); $RefreshReg$(_c223, "F_"); $RefreshReg$(_c224, "H_$_"); $RefreshReg$(_c225, "H_"); $RefreshReg$(_c226, "B_$_"); $RefreshReg$(_c227, "B_"); $RefreshReg$(_c228, "K_$_"); $RefreshReg$(_c229, "K_"); $RefreshReg$(_c230, "Eu$_"); $RefreshReg$(_c231, "Eu"); $RefreshReg$(_c232, "Su$_"); $RefreshReg$(_c233, "Su"); $RefreshReg$(_c234, "Ru$_"); $RefreshReg$(_c235, "Ru"); $RefreshReg$(_c236, "Iu$_"); $RefreshReg$(_c237, "Iu"); $RefreshReg$(_c238, "Tu$_"); $RefreshReg$(_c239, "Tu"); $RefreshReg$(_c240, "Ox$_"); $RefreshReg$(_c241, "Ox"); $RefreshReg$(_c242, "Px$_"); $RefreshReg$(_c243, "Px"); $RefreshReg$(_c244, "Ex$_"); $RefreshReg$(_c245, "Ex"); $RefreshReg$(_c246, "Ix$_"); $RefreshReg$(_c247, "Ix"); $RefreshReg$(_c248, "Cx$_"); $RefreshReg$(_c249, "Cx"); $RefreshReg$(_c250, "Yx$_"); $RefreshReg$(_c251, "Yx"); $RefreshReg$(_c252, "Fx$_"); $RefreshReg$(_c253, "Fx"); $RefreshReg$(_c254, "Nu$_"); $RefreshReg$(_c255, "Nu"); $RefreshReg$(_c256, "Hx$_"); $RefreshReg$(_c257, "Hx"); $RefreshReg$(_c258, "Bx$_"); $RefreshReg$(_c259, "Bx"); $RefreshReg$(_c260, "Yu$_"); $RefreshReg$(_c261, "Yu"); $RefreshReg$(_c262, "Ux$_"); $RefreshReg$(_c263, "Ux"); $RefreshReg$(_c264, "Zx$_"); $RefreshReg$(_c265, "Zx"); $RefreshReg$(_c266, "Jx$_"); $RefreshReg$(_c267, "Jx"); $RefreshReg$(_c268, "Dw$_"); $RefreshReg$(_c269, "Dw"); $RefreshReg$(_c270, "Mw$_"); $RefreshReg$(_c271, "Mw"); $RefreshReg$(_c272, "Sw$_"); $RefreshReg$(_c273, "Sw"); $RefreshReg$(_c274, "Rw$_"); $RefreshReg$(_c275, "Rw"); $RefreshReg$(_c276, "Tw$_"); $RefreshReg$(_c277, "Tw"); $RefreshReg$(_c278, "Nw$_"); $RefreshReg$(_c279, "Nw"); $RefreshReg$(_c280, "Lu$_"); $RefreshReg$(_c281, "Lu"); $RefreshReg$(_c282, "Lw$_"); $RefreshReg$(_c283, "Lw"); $RefreshReg$(_c284, "Hw$_"); $RefreshReg$(_c285, "Hw"); $RefreshReg$(_c286, "Bw$_"); $RefreshReg$(_c287, "Bw"); $RefreshReg$(_c288, "Kw$_"); $RefreshReg$(_c289, "Kw"); $RefreshReg$(_c290, "Xw$_"); $RefreshReg$(_c291, "Xw"); $RefreshReg$(_c292, "Gw$_"); $RefreshReg$(_c293, "Gw"); $RefreshReg$(_c294, "Wu$_"); $RefreshReg$(_c295, "Wu"); $RefreshReg$(_c296, "MD$_"); $RefreshReg$(_c297, "MD"); $RefreshReg$(_c298, "Au$_"); $RefreshReg$(_c299, "Au"); $RefreshReg$(_c300, "ED$_"); $RefreshReg$(_c301, "ED"); $RefreshReg$(_c302, "Hu$_"); $RefreshReg$(_c303, "Hu"); $RefreshReg$(_c304, "Qu$_"); $RefreshReg$(_c305, "Qu"); $RefreshReg$(_c306, "Bu$_"); $RefreshReg$(_c307, "Bu"); $RefreshReg$(_c308, "CD$_"); $RefreshReg$(_c309, "CD"); $RefreshReg$(_c310, "Vu$_"); $RefreshReg$(_c311, "Vu"); $RefreshReg$(_c312, "LD$_"); $RefreshReg$(_c313, "LD"); $RefreshReg$(_c314, "AD$_"); $RefreshReg$(_c315, "AD"); $RefreshReg$(_c316, "QD$_"); $RefreshReg$(_c317, "QD"); $RefreshReg$(_c318, "KD$_"); $RefreshReg$(_c319, "KD"); $RefreshReg$(_c320, "XD$_"); $RefreshReg$(_c321, "XD"); $RefreshReg$(_c322, "GD$_"); $RefreshReg$(_c323, "GD"); $RefreshReg$(_c324, "Ku$_"); $RefreshReg$(_c325, "Ku"); $RefreshReg$(_c326, "Gt"); $RefreshReg$(_c327, "Qt"); $RefreshReg$(_c328, "Ne"); $RefreshReg$(_c329, "Wr"); $RefreshReg$(_c330, "Bt"); $RefreshReg$(_c331, "Dt"); $RefreshReg$(_c332, "Ht"); $RefreshReg$(_c333, "Pt"); $RefreshReg$(_c334, "Et"); $RefreshReg$(_c335, "Yt"); $RefreshReg$(_c336, "Ep"); $RefreshReg$(_c337, "Oi"); $RefreshReg$(_c338, "Mi"); $RefreshReg$(_c339, "Np"); $RefreshReg$(_c340, "Cp"); $RefreshReg$(_c341, "TO"); $RefreshReg$(_c342, "CO"); $RefreshReg$(_c343, "Kt"); $RefreshReg$(_c344, "Pi"); $RefreshReg$(_c345, "NO"); $RefreshReg$(_c346, "Ei"); $RefreshReg$(_c347, "YO"); $RefreshReg$(_c348, "Yp"); $RefreshReg$(_c349, "FO"); $RefreshReg$(_c350, "Fp"); $RefreshReg$(_c351, "Br"); $RefreshReg$(_c352, "Le"); $RefreshReg$(_c353, "Di"); $RefreshReg$(_c354, "Qr"); $RefreshReg$(_c355, "Si"); $RefreshReg$(_c356, "Lp"); $RefreshReg$(_c357, "Wp"); $RefreshReg$(_c358, "Ap"); $RefreshReg$(_c359, "Hp"); $RefreshReg$(_c360, "LO"); $RefreshReg$(_c361, "Qp"); $RefreshReg$(_c362, "Bp"); $RefreshReg$(_c363, "WO"); $RefreshReg$(_c364, "Vp"); $RefreshReg$(_c365, "HO"); $RefreshReg$(_c366, "Kp"); $RefreshReg$(_c367, "QO"); $RefreshReg$(_c368, "BO"); $RefreshReg$(_c369, "XO"); $RefreshReg$(_c370, "E2"); $RefreshReg$(_c371, "S2"); $RefreshReg$(_c372, "R2"); $RefreshReg$(_c373, "Vr"); $RefreshReg$(_c374, "I2"); $RefreshReg$(_c375, "T2"); $RefreshReg$(_c376, "C2"); $RefreshReg$(_c377, "N2"); $RefreshReg$(_c378, "Y2"); $RefreshReg$(_c379, "F2"); $RefreshReg$(_c380, "L2"); $RefreshReg$(_c381, "W2"); $RefreshReg$(_c382, "H2"); $RefreshReg$(_c383, "Q2"); $RefreshReg$(_c384, "Up"); $RefreshReg$(_c385, "Ti"); $RefreshReg$(_c386, "DM"); $RefreshReg$(_c387, "Jp"); $RefreshReg$(_c388, "OM"); $RefreshReg$(_c389, "U2"); $RefreshReg$(_c390, "Kr"); $RefreshReg$(_c391, "LM"); $RefreshReg$(_c392, "WM"); $RefreshReg$(_c393, "HM"); $RefreshReg$(_c394, "BM"); $RefreshReg$(_c395, "VM"); $RefreshReg$(_c396, "DA"); $RefreshReg$(_c397, "MA"); $RefreshReg$(_c398, "UM"); $RefreshReg$(_c399, "PA"); $RefreshReg$(_c400, "XM"); $RefreshReg$(_c401, "EA"); $RefreshReg$(_c402, "RA"); $RefreshReg$(_c403, "IA"); $RefreshReg$(_c404, "TA"); $RefreshReg$(_c405, "CA"); $RefreshReg$(_c406, "Wi"); $RefreshReg$(_c407, "Fi"); $RefreshReg$(_c408, "GM"); $RefreshReg$(_c409, "JM"); $RefreshReg$(_c410, "YA"); $RefreshReg$(_c411, "FA"); $RefreshReg$(_c412, "LA"); $RefreshReg$(_c413, "WA"); $RefreshReg$(_c414, "AA"); $RefreshReg$(_c415, "QA"); $RefreshReg$(_c416, "DP"); $RefreshReg$(_c417, "BA"); $RefreshReg$(_c418, "VA"); $RefreshReg$(_c419, "SP"); $RefreshReg$(_c420, "RP"); $RefreshReg$(_c421, "Hi"); $RefreshReg$(_c422, "On"); $RefreshReg$(_c423, "Mn"); $RefreshReg$(_c424, "YP"); $RefreshReg$(_c425, "AP"); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js": /*!**************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js ***! \**************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;\nvar react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache;\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Account: () => (/* binding */ eC),\n/* harmony export */ ActionsProvider: () => (/* binding */ oZ),\n/* harmony export */ AnimateHeight: () => (/* binding */ wr),\n/* harmony export */ AppHeader: () => (/* binding */ LZ),\n/* harmony export */ ArrayField: () => (/* binding */ Vd),\n/* harmony export */ AuthProvider: () => (/* binding */ A1),\n/* harmony export */ Banner: () => (/* binding */ sn),\n/* harmony export */ BlockSelector: () => (/* binding */ nv),\n/* harmony export */ BlocksDrawer: () => (/* binding */ hu),\n/* harmony export */ BlocksField: () => (/* binding */ gu),\n/* harmony export */ BrowseByFolderButton: () => (/* binding */ wK),\n/* harmony export */ BulkUploadDrawer: () => (/* binding */ _A),\n/* harmony export */ BulkUploadProvider: () => (/* binding */ yy),\n/* harmony export */ Button: () => (/* binding */ re),\n/* harmony export */ CalendarIcon: () => (/* reexport safe */ _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.m),\n/* harmony export */ Card: () => (/* binding */ jZ),\n/* harmony export */ CheckIcon: () => (/* binding */ Y1),\n/* harmony export */ CheckboxField: () => (/* binding */ zr),\n/* harmony export */ CheckboxInput: () => (/* binding */ go),\n/* harmony export */ ChevronIcon: () => (/* binding */ He),\n/* harmony export */ ClientFunctionProvider: () => (/* binding */ jx),\n/* harmony export */ CloseMenuIcon: () => (/* binding */ oC),\n/* harmony export */ CodeBlockIcon: () => (/* binding */ cee),\n/* harmony export */ CodeEditor: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.l),\n/* harmony export */ CodeEditorLazy: () => (/* binding */ bu),\n/* harmony export */ CodeField: () => (/* binding */ vu),\n/* harmony export */ Collapsible: () => (/* binding */ Zi),\n/* harmony export */ CollapsibleField: () => (/* binding */ Cu),\n/* harmony export */ Combobox: () => (/* binding */ bK),\n/* harmony export */ ConfigProvider: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.b),\n/* harmony export */ ConfirmPasswordField: () => (/* binding */ zd),\n/* harmony export */ ConfirmationModal: () => (/* binding */ rt),\n/* harmony export */ CopyIcon: () => (/* binding */ ki),\n/* harmony export */ CopyLocaleData: () => (/* binding */ fC),\n/* harmony export */ CopyToClipboard: () => (/* binding */ Dd),\n/* harmony export */ DateCell: () => (/* binding */ b0),\n/* harmony export */ DateCondition: () => (/* binding */ Ly),\n/* harmony export */ DatePicker: () => (/* reexport safe */ _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.n),\n/* harmony export */ DateTimeField: () => (/* binding */ ju),\n/* harmony export */ DefaultBlockImage: () => (/* binding */ pu),\n/* harmony export */ DefaultBrowseByFolderView: () => (/* binding */ foe),\n/* harmony export */ DefaultCell: () => (/* binding */ Uu),\n/* harmony export */ DefaultCollectionFolderView: () => (/* binding */ ooe),\n/* harmony export */ DefaultEditView: () => (/* binding */ cre),\n/* harmony export */ DefaultListView: () => (/* binding */ Lte),\n/* harmony export */ DeleteMany: () => (/* binding */ yC),\n/* harmony export */ DocumentControls: () => (/* binding */ MC),\n/* harmony export */ DocumentEventsProvider: () => (/* binding */ N0),\n/* harmony export */ DocumentFields: () => (/* binding */ xd),\n/* harmony export */ DocumentIcon: () => (/* binding */ Sc),\n/* harmony export */ DocumentInfoProvider: () => (/* binding */ iu),\n/* harmony export */ DocumentLocked: () => (/* binding */ Zy),\n/* harmony export */ DocumentTakeOver: () => (/* binding */ Yy),\n/* harmony export */ DragHandleIcon: () => (/* binding */ un),\n/* harmony export */ Drawer: () => (/* binding */ It),\n/* harmony export */ DrawerContentContainer: () => (/* binding */ iy),\n/* harmony export */ DrawerToggler: () => (/* binding */ ms),\n/* harmony export */ Dropzone: () => (/* binding */ va),\n/* harmony export */ EditDepthProvider: () => (/* binding */ as),\n/* harmony export */ EditIcon: () => (/* binding */ vr),\n/* harmony export */ EditMany: () => (/* binding */ Dq),\n/* harmony export */ EditUpload: () => (/* binding */ uy),\n/* harmony export */ EmailAndUsernameFields: () => (/* binding */ Hx),\n/* harmony export */ EmailField: () => (/* binding */ ia),\n/* harmony export */ EntityVisibilityProvider: () => (/* binding */ Vee),\n/* harmony export */ ErrorIcon: () => (/* binding */ Ex),\n/* harmony export */ ErrorPill: () => (/* binding */ So),\n/* harmony export */ ExternalLinkIcon: () => (/* binding */ pm),\n/* harmony export */ FieldContext: () => (/* binding */ fS),\n/* harmony export */ FieldDescription: () => (/* binding */ Xe),\n/* harmony export */ FieldDiffContainer: () => (/* binding */ pre),\n/* harmony export */ FieldDiffLabel: () => (/* binding */ dw),\n/* harmony export */ FieldError: () => (/* binding */ Ze),\n/* harmony export */ FieldLabel: () => (/* binding */ Ce),\n/* harmony export */ FieldPathContext: () => (/* binding */ hs),\n/* harmony export */ File: () => (/* binding */ Jp),\n/* harmony export */ FileDetails: () => (/* binding */ py),\n/* harmony export */ FolderFileTable: () => (/* binding */ vx),\n/* harmony export */ FolderIcon: () => (/* binding */ wd),\n/* harmony export */ FolderProvider: () => (/* binding */ Ca),\n/* harmony export */ FolderTypeField: () => (/* binding */ IK),\n/* harmony export */ Form: () => (/* binding */ _s99),\n/* harmony export */ FormLoadingOverlayToggle: () => (/* binding */ p8),\n/* harmony export */ FormSubmit: () => (/* binding */ Dr),\n/* harmony export */ FullscreenModal: () => (/* binding */ Pq),\n/* harmony export */ GearIcon: () => (/* binding */ mee),\n/* harmony export */ GenerateConfirmation: () => (/* binding */ HC),\n/* harmony export */ GridViewIcon: () => (/* binding */ Ax),\n/* harmony export */ GroupByHeader: () => (/* binding */ YQ),\n/* harmony export */ GroupByPageControls: () => (/* binding */ sK),\n/* harmony export */ GroupField: () => (/* binding */ $u),\n/* harmony export */ Gutter: () => (/* binding */ Io),\n/* harmony export */ Hamburger: () => (/* binding */ sC),\n/* harmony export */ HiddenField: () => (/* binding */ Bu),\n/* harmony export */ HydrateAuthProvider: () => (/* binding */ Bq),\n/* harmony export */ InfoIcon: () => (/* binding */ Nx),\n/* harmony export */ ItemCardGrid: () => (/* binding */ Yg),\n/* harmony export */ ItemsDrawer: () => (/* binding */ nee),\n/* harmony export */ JSONField: () => (/* binding */ Ju),\n/* harmony export */ JoinField: () => (/* binding */ Zu),\n/* harmony export */ LeaveWithoutSaving: () => (/* binding */ tm),\n/* harmony export */ LineIcon: () => (/* binding */ Z1),\n/* harmony export */ Link: () => (/* binding */ Qt),\n/* harmony export */ LinkIcon: () => (/* binding */ Yb),\n/* harmony export */ ListControls: () => (/* binding */ JC),\n/* harmony export */ ListDrawerContextProvider: () => (/* binding */ e0),\n/* harmony export */ ListHeader: () => (/* binding */ cx),\n/* harmony export */ ListQueryProvider: () => (/* binding */ n0),\n/* harmony export */ ListSelection: () => (/* binding */ ja),\n/* harmony export */ ListViewIcon: () => (/* binding */ Px),\n/* harmony export */ LivePreviewProvider: () => (/* binding */ Aee),\n/* harmony export */ LivePreviewWindow: () => (/* binding */ rw),\n/* harmony export */ LoadingOverlay: () => (/* binding */ bn),\n/* harmony export */ LoadingOverlayToggle: () => (/* binding */ bF),\n/* harmony export */ LocaleProvider: () => (/* binding */ P1),\n/* harmony export */ Locked: () => (/* binding */ fm),\n/* harmony export */ LogOutIcon: () => (/* binding */ px),\n/* harmony export */ Logout: () => (/* binding */ cK),\n/* harmony export */ MenuIcon: () => (/* binding */ rC),\n/* harmony export */ MinimizeMaximizeIcon: () => (/* binding */ uee),\n/* harmony export */ Modal: () => (/* binding */ Jo),\n/* harmony export */ MoreIcon: () => (/* binding */ zc),\n/* harmony export */ MoveDocToFolder: () => (/* binding */ Td),\n/* harmony export */ MoveDocToFolderButton: () => (/* binding */ WR),\n/* harmony export */ MoveFolderIcon: () => (/* binding */ pee),\n/* harmony export */ NavContext: () => (/* binding */ lC),\n/* harmony export */ NavGroup: () => (/* binding */ fK),\n/* harmony export */ NavProvider: () => (/* binding */ cC),\n/* harmony export */ NavToggler: () => (/* binding */ uC),\n/* harmony export */ NullifyLocaleField: () => (/* binding */ du),\n/* harmony export */ NumberCondition: () => (/* binding */ ky),\n/* harmony export */ NumberField: () => (/* binding */ qu),\n/* harmony export */ OperationProvider: () => (/* binding */ au),\n/* harmony export */ OrderableTable: () => (/* binding */ EX),\n/* harmony export */ PageConfigProvider: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.d),\n/* harmony export */ PageControls: () => (/* binding */ Wg),\n/* harmony export */ PageControlsComponent: () => (/* binding */ zg),\n/* harmony export */ Pagination: () => (/* binding */ Xu),\n/* harmony export */ ParamsProvider: () => (/* binding */ Vx),\n/* harmony export */ PasswordField: () => (/* binding */ Wd),\n/* harmony export */ PayloadIcon: () => (/* binding */ hg),\n/* harmony export */ PerPage: () => (/* binding */ ux),\n/* harmony export */ Pill: () => (/* binding */ yt),\n/* harmony export */ PillSelector: () => (/* binding */ Gu),\n/* harmony export */ PlusIcon: () => (/* binding */ ar),\n/* harmony export */ PointField: () => (/* binding */ Qu),\n/* harmony export */ Popup: () => (/* binding */ st),\n/* harmony export */ PopupList: () => (/* binding */ ve),\n/* harmony export */ PreferencesProvider: () => (/* binding */ G1),\n/* harmony export */ PreviewButton: () => (/* binding */ DC),\n/* harmony export */ PreviewSizes: () => (/* binding */ hy),\n/* harmony export */ ProgressBar: () => (/* binding */ jee),\n/* harmony export */ PublishButton: () => (/* binding */ EC),\n/* harmony export */ PublishMany: () => (/* binding */ lQ),\n/* harmony export */ QueryPresetsAccessCell: () => (/* binding */ VX),\n/* harmony export */ QueryPresetsColumnField: () => (/* binding */ tY),\n/* harmony export */ QueryPresetsColumnsCell: () => (/* binding */ jX),\n/* harmony export */ QueryPresetsGroupByCell: () => (/* binding */ YX),\n/* harmony export */ QueryPresetsGroupByField: () => (/* binding */ DY),\n/* harmony export */ QueryPresetsWhereCell: () => (/* binding */ MX),\n/* harmony export */ QueryPresetsWhereField: () => (/* binding */ _Y),\n/* harmony export */ RadioGroupField: () => (/* binding */ td),\n/* harmony export */ ReactSelect: () => (/* binding */ ft),\n/* harmony export */ RelationshipCondition: () => (/* binding */ eg),\n/* harmony export */ RelationshipField: () => (/* binding */ ad),\n/* harmony export */ RelationshipInput: () => (/* binding */ M0),\n/* harmony export */ RelationshipProvider: () => (/* binding */ Hu),\n/* harmony export */ RelationshipTable: () => (/* binding */ F0),\n/* harmony export */ RenderCustomComponent: () => (/* binding */ de),\n/* harmony export */ RenderDefaultCell: () => (/* binding */ SV),\n/* harmony export */ RenderFields: () => (/* binding */ No),\n/* harmony export */ RenderTitle: () => (/* binding */ _x),\n/* harmony export */ RichTextField: () => (/* binding */ ld),\n/* harmony export */ RootProvider: () => (/* binding */ gte),\n/* harmony export */ RouteCacheProvider: () => (/* binding */ sy),\n/* harmony export */ RouteTransitionProvider: () => (/* binding */ Hb),\n/* harmony export */ RowField: () => (/* binding */ cd),\n/* harmony export */ RowLabel: () => (/* binding */ is),\n/* harmony export */ RowLabelProvider: () => (/* binding */ Ob),\n/* harmony export */ SaveButton: () => (/* binding */ NC),\n/* harmony export */ SaveDraftButton: () => (/* binding */ LC),\n/* harmony export */ ScrollInfoProvider: () => (/* binding */ Em),\n/* harmony export */ SearchFilter: () => (/* binding */ YC),\n/* harmony export */ SearchIcon: () => (/* binding */ Ji),\n/* harmony export */ SearchParamsProvider: () => (/* binding */ zx),\n/* harmony export */ SectionTitle: () => (/* binding */ sv),\n/* harmony export */ Select: () => (/* binding */ ft),\n/* harmony export */ SelectAll: () => (/* binding */ Ite),\n/* harmony export */ SelectCondition: () => (/* binding */ Oy),\n/* harmony export */ SelectField: () => (/* binding */ ud),\n/* harmony export */ SelectInput: () => (/* binding */ Zr),\n/* harmony export */ SelectMany: () => (/* binding */ Dc),\n/* harmony export */ SelectRow: () => (/* binding */ Tte),\n/* harmony export */ SelectionProvider: () => (/* binding */ gC),\n/* harmony export */ ServerFunctionsContext: () => (/* binding */ s0),\n/* harmony export */ ServerFunctionsProvider: () => (/* binding */ i0),\n/* harmony export */ SetDocumentStepNav: () => (/* binding */ aw),\n/* harmony export */ SetDocumentTitle: () => (/* binding */ lw),\n/* harmony export */ SetStepNav: () => (/* binding */ FZ),\n/* harmony export */ ShimmerEffect: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f),\n/* harmony export */ SlugField: () => (/* binding */ aee),\n/* harmony export */ SortColumn: () => (/* binding */ JK),\n/* harmony export */ SortHeader: () => (/* binding */ TX),\n/* harmony export */ SortRow: () => (/* binding */ DX),\n/* harmony export */ StaggeredShimmers: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.g),\n/* harmony export */ StickyToolbar: () => (/* binding */ fx),\n/* harmony export */ SuccessIcon: () => (/* binding */ Lx),\n/* harmony export */ SwapIcon: () => (/* binding */ Zb),\n/* harmony export */ TabComponent: () => (/* binding */ q0),\n/* harmony export */ Table: () => (/* binding */ RC),\n/* harmony export */ TableColumnsProvider: () => (/* binding */ Ou),\n/* harmony export */ TabsField: () => (/* binding */ pd),\n/* harmony export */ TabsProvider: () => (/* binding */ Kv),\n/* harmony export */ TextCondition: () => (/* binding */ Vy),\n/* harmony export */ TextField: () => (/* binding */ ba),\n/* harmony export */ TextInput: () => (/* binding */ hd),\n/* harmony export */ TextareaField: () => (/* binding */ gd),\n/* harmony export */ TextareaInput: () => (/* binding */ Q0),\n/* harmony export */ ThemeProvider: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.i),\n/* harmony export */ Thumbnail: () => (/* binding */ Fr),\n/* harmony export */ TimezonePicker: () => (/* binding */ ku),\n/* harmony export */ Tooltip: () => (/* binding */ Ro),\n/* harmony export */ Translation: () => (/* binding */ to),\n/* harmony export */ TranslationProvider: () => (/* reexport safe */ _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.c),\n/* harmony export */ UIField: () => (/* binding */ bd),\n/* harmony export */ UnpublishButton: () => (/* binding */ $C),\n/* harmony export */ UnpublishMany: () => (/* binding */ wQ),\n/* harmony export */ Upload: () => (/* binding */ gy),\n/* harmony export */ UploadEditsProvider: () => (/* binding */ W1),\n/* harmony export */ UploadField: () => (/* binding */ Od),\n/* harmony export */ UploadHandlersProvider: () => (/* binding */ Z0),\n/* harmony export */ UploadInput: () => (/* binding */ zh),\n/* harmony export */ ViewDescription: () => (/* binding */ Jy),\n/* harmony export */ WarningIcon: () => (/* binding */ kx),\n/* harmony export */ WatchChildErrors: () => (/* binding */ Qi),\n/* harmony export */ WatchCondition: () => (/* binding */ X1),\n/* harmony export */ WindowInfoProvider: () => (/* binding */ Gx),\n/* harmony export */ XIcon: () => (/* reexport safe */ _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a),\n/* harmony export */ allFieldComponents: () => (/* binding */ aX),\n/* harmony export */ defaultTheme: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.h),\n/* harmony export */ documentDrawerBaseClass: () => (/* binding */ Cs),\n/* harmony export */ escapeDiffHTML: () => (/* binding */ C4),\n/* harmony export */ fieldBaseClass: () => (/* binding */ Pe),\n/* harmony export */ fieldComponents: () => (/* binding */ GA),\n/* harmony export */ fieldReducer: () => (/* binding */ fd),\n/* harmony export */ formatDrawerSlug: () => (/* binding */ eu),\n/* harmony export */ formatTimeToNow: () => (/* binding */ $1),\n/* harmony export */ getHTMLDiffComponents: () => (/* binding */ lq),\n/* harmony export */ isFieldRTL: () => (/* binding */ Xi),\n/* harmony export */ parseSearchParams: () => (/* binding */ Yt),\n/* harmony export */ toast: () => (/* binding */ ee),\n/* harmony export */ unescapeDiffHTML: () => (/* binding */ x4),\n/* harmony export */ useActions: () => (/* binding */ tC),\n/* harmony export */ useAddClientFunction: () => (/* binding */ Cee),\n/* harmony export */ useAllFormFields: () => (/* binding */ Xs),\n/* harmony export */ useAuth: () => (/* binding */ Ie),\n/* harmony export */ useBulkUpload: () => (/* binding */ Ho),\n/* harmony export */ useBulkUploadDrawerSlug: () => (/* binding */ FA),\n/* harmony export */ useCellProps: () => (/* binding */ w0),\n/* harmony export */ useClickOutside: () => (/* binding */ hq),\n/* harmony export */ useClickOutsideContext: () => (/* binding */ VC),\n/* harmony export */ useClientFunctions: () => (/* binding */ xee),\n/* harmony export */ useCollapsible: () => (/* binding */ Qs),\n/* harmony export */ useConfig: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c),\n/* harmony export */ useControllableState: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a),\n/* harmony export */ useDebounce: () => (/* binding */ yn),\n/* harmony export */ useDebouncedCallback: () => (/* binding */ E0),\n/* harmony export */ useDebouncedEffect: () => (/* binding */ Y0),\n/* harmony export */ useDelay: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.e),\n/* harmony export */ useDelayedRender: () => (/* binding */ c0),\n/* harmony export */ useDocumentDrawer: () => (/* binding */ kt),\n/* harmony export */ useDocumentDrawerContext: () => (/* binding */ zu),\n/* harmony export */ useDocumentEvents: () => (/* binding */ Is),\n/* harmony export */ useDocumentForm: () => (/* binding */ Ka),\n/* harmony export */ useDocumentInfo: () => (/* binding */ Se),\n/* harmony export */ useDocumentTitle: () => (/* binding */ Ao),\n/* harmony export */ useDrawerSlug: () => (/* binding */ Kc),\n/* harmony export */ useEditDepth: () => (/* binding */ ct),\n/* harmony export */ useEffectEvent: () => (/* binding */ Qe),\n/* harmony export */ useEntityVisibility: () => (/* binding */ Ox),\n/* harmony export */ useField: () => (/* binding */ Te),\n/* harmony export */ useFieldPath: () => (/* binding */ Qf),\n/* harmony export */ useFolder: () => (/* binding */ Gt),\n/* harmony export */ useForm: () => (/* binding */ $e),\n/* harmony export */ useFormBackgroundProcessing: () => (/* binding */ Bb),\n/* harmony export */ useFormFields: () => (/* binding */ Ot),\n/* harmony export */ useFormInitializing: () => (/* binding */ Ei),\n/* harmony export */ useFormModified: () => (/* binding */ po),\n/* harmony export */ useFormProcessing: () => (/* binding */ Mr),\n/* harmony export */ useFormSubmitted: () => (/* binding */ fo),\n/* harmony export */ useHotkey: () => (/* binding */ Ta),\n/* harmony export */ useIntersect: () => (/* binding */ Li),\n/* harmony export */ useListDrawer: () => (/* binding */ ua),\n/* harmony export */ useListDrawerContext: () => (/* binding */ Ir),\n/* harmony export */ useListQuery: () => (/* binding */ dt),\n/* harmony export */ useListRelationships: () => (/* binding */ h0),\n/* harmony export */ useLivePreviewContext: () => (/* binding */ ko),\n/* harmony export */ useLocale: () => (/* binding */ ye),\n/* harmony export */ useModal: () => (/* binding */ ie),\n/* harmony export */ useNav: () => (/* binding */ Ra),\n/* harmony export */ useOperation: () => (/* binding */ Cr),\n/* harmony export */ useParams: () => (/* binding */ Xee),\n/* harmony export */ usePayloadAPI: () => (/* binding */ yX),\n/* harmony export */ usePreferences: () => (/* binding */ so),\n/* harmony export */ useQueue: () => (/* binding */ da),\n/* harmony export */ useResize: () => (/* binding */ Hh),\n/* harmony export */ useRouteCache: () => (/* binding */ pt),\n/* harmony export */ useRouteTransition: () => (/* binding */ Ye),\n/* harmony export */ useRowLabel: () => (/* binding */ GN),\n/* harmony export */ useScrollInfo: () => (/* binding */ Pm),\n/* harmony export */ useSearchParams: () => (/* binding */ dte),\n/* harmony export */ useSelection: () => (/* binding */ xo),\n/* harmony export */ useServerFunctions: () => (/* binding */ Nt),\n/* harmony export */ useStepNav: () => (/* binding */ Pr),\n/* harmony export */ useTableColumns: () => (/* binding */ kl),\n/* harmony export */ useTheme: () => (/* reexport safe */ _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.j),\n/* harmony export */ useThrottledEffect: () => (/* binding */ zi),\n/* harmony export */ useTranslation: () => (/* reexport safe */ _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d),\n/* harmony export */ useUploadControls: () => (/* binding */ ey),\n/* harmony export */ useUploadEdits: () => (/* binding */ Ui),\n/* harmony export */ useUploadHandlers: () => (/* binding */ dd),\n/* harmony export */ useUseTitleField: () => (/* binding */ Fy),\n/* harmony export */ useWatchForm: () => (/* binding */ af),\n/* harmony export */ useWindowInfo: () => (/* binding */ Ma),\n/* harmony export */ withCondition: () => (/* binding */ We)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react-dom/index.js\");\n/* harmony import */ var _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./chunk-QP5KC7MG.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-QP5KC7MG.js\");\n/* harmony import */ var _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./chunk-WDZJLNNB.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-WDZJLNNB.js\");\n/* harmony import */ var _chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunk-5LKBKI4T.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/chunk-5LKBKI4T.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* harmony import */ var _payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @payloadcms/translations */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslation.js\");\n/* harmony import */ var next_link_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! next/link.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_navigation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next/navigation.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/compiler-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/compiler-runtime.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/types.js\");\n/* harmony import */ var _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @dnd-kit/core */ \"(app-pages-browser)/./node_modules/.pnpm/@dnd-kit+core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@dnd-kit/core/dist/core.esm.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatAdminURL.js\");\n/* harmony import */ var qs_esm__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! qs-esm */ \"(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/stringify.js\");\n/* harmony import */ var _payloadcms_translations__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @payloadcms/translations */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/languages.js\");\n/* harmony import */ var dequal_lite__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! dequal/lite */ \"(app-pages-browser)/./node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/lite/index.mjs\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getFieldPermissions.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/getFieldPaths.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattenTopLevelFields.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mergeListSearchAndWhere.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformColumnPreferences.js\");\n/* harmony import */ var qs_esm__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! qs-esm */ \"(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/parse.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/appendUploadSelectFields.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getObjectDotNotation.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/isImage.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getBestFitFromSizes.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isNumber.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wordBoundariesRegex.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getVersionsConfig.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/toKebabCase.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wait.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/reduceFieldsToValues.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepCopyObject.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getSiblingData.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getDataByPath.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateMimeType.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/extractID.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/formatFolderOrDocumentItem.js\");\n/* harmony import */ var react_image_crop_dist_ReactCrop_css__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! react-image-crop/dist/ReactCrop.css */ \"(app-pages-browser)/./node_modules/.pnpm/react-image-crop@10.1.8_react@19.2.4/node_modules/react-image-crop/dist/ReactCrop.css\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/formatFilesize.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/validations.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/setsAreEqual.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatLabels.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateWhereQuery.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformWhereQuery.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/preferences/keys.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/combineWhereConstraints.js\");\n/* harmony import */ var payload_shared__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! payload/shared */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/defaults.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"(app-pages-browser)/./node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js\")[\"Buffer\"];\n/* __next_internal_client_entry_do_not_use__ Account,ActionsProvider,AnimateHeight,AppHeader,ArrayField,AuthProvider,Banner,BlockSelector,BlocksDrawer,BlocksField,BrowseByFolderButton,BulkUploadDrawer,BulkUploadProvider,Button,CalendarIcon,Card,CheckIcon,CheckboxField,CheckboxInput,ChevronIcon,ClientFunctionProvider,CloseMenuIcon,CodeBlockIcon,CodeEditor,CodeEditorLazy,CodeField,Collapsible,CollapsibleField,Combobox,ConfigProvider,ConfirmPasswordField,ConfirmationModal,CopyIcon,CopyLocaleData,CopyToClipboard,DateCell,DateCondition,DatePicker,DateTimeField,DefaultBlockImage,DefaultBrowseByFolderView,DefaultCell,DefaultCollectionFolderView,DefaultEditView,DefaultListView,DeleteMany,DocumentControls,DocumentEventsProvider,DocumentFields,DocumentIcon,DocumentInfoProvider,DocumentLocked,DocumentTakeOver,DragHandleIcon,Drawer,DrawerContentContainer,DrawerToggler,Dropzone,EditDepthProvider,EditIcon,EditMany,EditUpload,EmailAndUsernameFields,EmailField,EntityVisibilityProvider,ErrorIcon,ErrorPill,ExternalLinkIcon,FieldContext,FieldDescription,FieldDiffContainer,FieldDiffLabel,FieldError,FieldLabel,FieldPathContext,File,FileDetails,FolderFileTable,FolderIcon,FolderProvider,FolderTypeField,Form,FormLoadingOverlayToggle,FormSubmit,FullscreenModal,GearIcon,GenerateConfirmation,GridViewIcon,GroupByHeader,GroupByPageControls,GroupField,Gutter,Hamburger,HiddenField,HydrateAuthProvider,InfoIcon,ItemCardGrid,ItemsDrawer,JSONField,JoinField,LeaveWithoutSaving,LineIcon,Link,LinkIcon,ListControls,ListDrawerContextProvider,ListHeader,ListQueryProvider,ListSelection,ListViewIcon,LivePreviewProvider,LivePreviewWindow,LoadingOverlay,LoadingOverlayToggle,LocaleProvider,Locked,LogOutIcon,Logout,MenuIcon,MinimizeMaximizeIcon,Modal,MoreIcon,MoveDocToFolder,MoveDocToFolderButton,MoveFolderIcon,NavContext,NavGroup,NavProvider,NavToggler,NullifyLocaleField,NumberCondition,NumberField,OperationProvider,OrderableTable,PageConfigProvider,PageControls,PageControlsComponent,Pagination,ParamsProvider,PasswordField,PayloadIcon,PerPage,Pill,PillSelector,PlusIcon,PointField,Popup,PopupList,PreferencesProvider,PreviewButton,PreviewSizes,ProgressBar,PublishButton,PublishMany,QueryPresetsAccessCell,QueryPresetsColumnField,QueryPresetsColumnsCell,QueryPresetsGroupByCell,QueryPresetsGroupByField,QueryPresetsWhereCell,QueryPresetsWhereField,RadioGroupField,ReactSelect,RelationshipCondition,RelationshipField,RelationshipInput,RelationshipProvider,RelationshipTable,RenderCustomComponent,RenderDefaultCell,RenderFields,RenderTitle,RichTextField,RootProvider,RouteCacheProvider,RouteTransitionProvider,RowField,RowLabel,RowLabelProvider,SaveButton,SaveDraftButton,ScrollInfoProvider,SearchFilter,SearchIcon,SearchParamsProvider,SectionTitle,Select,SelectAll,SelectCondition,SelectField,SelectInput,SelectMany,SelectRow,SelectionProvider,ServerFunctionsContext,ServerFunctionsProvider,SetDocumentStepNav,SetDocumentTitle,SetStepNav,ShimmerEffect,SlugField,SortColumn,SortHeader,SortRow,StaggeredShimmers,StickyToolbar,SuccessIcon,SwapIcon,TabComponent,Table,TableColumnsProvider,TabsField,TabsProvider,TextCondition,TextField,TextInput,TextareaField,TextareaInput,ThemeProvider,Thumbnail,TimezonePicker,Tooltip,Translation,TranslationProvider,UIField,UnpublishButton,UnpublishMany,Upload,UploadEditsProvider,UploadField,UploadHandlersProvider,UploadInput,ViewDescription,WarningIcon,WatchChildErrors,WatchCondition,WindowInfoProvider,XIcon,allFieldComponents,defaultTheme,documentDrawerBaseClass,escapeDiffHTML,fieldBaseClass,fieldComponents,fieldReducer,formatDrawerSlug,formatTimeToNow,getHTMLDiffComponents,isFieldRTL,parseSearchParams,toast,unescapeDiffHTML,useActions,useAddClientFunction,useAllFormFields,useAuth,useBulkUpload,useBulkUploadDrawerSlug,useCellProps,useClickOutside,useClickOutsideContext,useClientFunctions,useCollapsible,useConfig,useControllableState,useDebounce,useDebouncedCallback,useDebouncedEffect,useDelay,useDelayedRender,useDocumentDrawer,useDocumentDrawerContext,useDocumentEvents,useDocumentForm,useDocumentInfo,useDocumentTitle,useDrawerSlug,useEditDepth,useEffectEvent,useEntityVisibility,useField,useFieldPath,useFolder,useForm,useFormBackgroundProcessing,useFormFields,useFormInitializing,useFormModified,useFormProcessing,useFormSubmitted,useHotkey,useIntersect,useListDrawer,useListDrawerContext,useListQuery,useListRelationships,useLivePreviewContext,useLocale,useModal,useNav,useOperation,useParams,usePayloadAPI,usePreferences,useQueue,useResize,useRouteCache,useRouteTransition,useRowLabel,useScrollInfo,useSearchParams,useSelection,useServerFunctions,useStepNav,useTableColumns,useTheme,useThrottledEffect,useTranslation,useUploadControls,useUploadEdits,useUploadHandlers,useUseTitleField,useWatchForm,useWindowInfo,withCondition auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$(), _s4 = $RefreshSig$(), _s5 = $RefreshSig$(), _s6 = $RefreshSig$(), _s7 = $RefreshSig$(), _s8 = $RefreshSig$(), _s9 = $RefreshSig$(), _s10 = $RefreshSig$(), _s11 = $RefreshSig$(), _s12 = $RefreshSig$(), _s13 = $RefreshSig$(), _s14 = $RefreshSig$(), _s15 = $RefreshSig$(), _s16 = $RefreshSig$(), _s17 = $RefreshSig$(), _s18 = $RefreshSig$(), _s19 = $RefreshSig$(), _s20 = $RefreshSig$(), _s21 = $RefreshSig$(), _s22 = $RefreshSig$(), _s23 = $RefreshSig$(), _s24 = $RefreshSig$(), _s25 = $RefreshSig$(), _s26 = $RefreshSig$(), _s27 = $RefreshSig$(), _s28 = $RefreshSig$(), _s29 = $RefreshSig$(), _s30 = $RefreshSig$(), _s31 = $RefreshSig$(), _s32 = $RefreshSig$(), _s33 = $RefreshSig$(), _s34 = $RefreshSig$(), _s35 = $RefreshSig$(), _s36 = $RefreshSig$(), _s37 = $RefreshSig$(), _s38 = $RefreshSig$(), _s39 = $RefreshSig$(), _s40 = $RefreshSig$(), _s41 = $RefreshSig$(), _s42 = $RefreshSig$(), _s43 = $RefreshSig$(), _s44 = $RefreshSig$(), _s45 = $RefreshSig$(), _s46 = $RefreshSig$(), _s47 = $RefreshSig$(), _s48 = $RefreshSig$(), _s49 = $RefreshSig$(), _s50 = $RefreshSig$(), _s51 = $RefreshSig$(), _s52 = $RefreshSig$(), _s53 = $RefreshSig$(), _s54 = $RefreshSig$(), _s55 = $RefreshSig$(), _s56 = $RefreshSig$(), _s57 = $RefreshSig$(), _s58 = $RefreshSig$(), _s59 = $RefreshSig$(), _s60 = $RefreshSig$(), _s61 = $RefreshSig$(), _s62 = $RefreshSig$(), _s63 = $RefreshSig$(), _s64 = $RefreshSig$(), _s65 = $RefreshSig$(), _s66 = $RefreshSig$(), _s67 = $RefreshSig$(), _s68 = $RefreshSig$(), _s69 = $RefreshSig$(), _s70 = $RefreshSig$(), _s71 = $RefreshSig$(), _s72 = $RefreshSig$(), _s73 = $RefreshSig$(), _s74 = $RefreshSig$(), _s75 = $RefreshSig$(), _s76 = $RefreshSig$(), _s77 = $RefreshSig$(), _s78 = $RefreshSig$(), _s79 = $RefreshSig$(), _s80 = $RefreshSig$(), _s81 = $RefreshSig$(), _s82 = $RefreshSig$(), _s83 = $RefreshSig$(), _s84 = $RefreshSig$(), _s85 = $RefreshSig$(), _s86 = $RefreshSig$(), _s87 = $RefreshSig$(), _s88 = $RefreshSig$(), _s89 = $RefreshSig$(), _s90 = $RefreshSig$(), _s91 = $RefreshSig$(), _s92 = $RefreshSig$(), _s93 = $RefreshSig$(), _s94 = $RefreshSig$(), _s95 = $RefreshSig$(), _s96 = $RefreshSig$(), _s97 = $RefreshSig$(), _s98 = $RefreshSig$();\n// Workaround for react-datepicker and other cjs dependencies potentially inserting require(\"react\") statements\n\n\nfunction require(m) {\n if (m === 'react') return /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)));\n if (m === 'react-dom') return /*#__PURE__*/ (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react_dom__WEBPACK_IMPORTED_MODULE_1__, 2)));\n throw new Error(`Unknown module ${m}`);\n}\n// Workaround end\n\n\n\nvar Fw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c1 = (Et)=>{\n \"use strict\";\n function Ab(t, e) {\n var o = t.length;\n t.push(e);\n e: for(; 0 < o;){\n var n = o - 1 >>> 1, r = t[n];\n if (0 < Ym(r, e)) t[n] = e, t[o] = r, o = n;\n else break e;\n }\n }\n function rn(t) {\n return t.length === 0 ? null : t[0];\n }\n function Jm(t) {\n if (t.length === 0) return null;\n var e = t[0], o = t.pop();\n if (o !== e) {\n t[0] = o;\n e: for(var n = 0, r = t.length, s = r >>> 1; n < s;){\n var i = 2 * (n + 1) - 1, l = t[i], a = i + 1, c = t[a];\n if (0 > Ym(l, o)) a < r && 0 > Ym(c, l) ? (t[n] = c, t[a] = o, n = a) : (t[n] = l, t[i] = o, n = i);\n else if (a < r && 0 > Ym(c, o)) t[n] = c, t[a] = o, n = a;\n else break e;\n }\n }\n return e;\n }\n function Ym(t, e) {\n var o = t.sortIndex - e.sortIndex;\n return o !== 0 ? o : t.id - e.id;\n }\n Et.unstable_now = void 0;\n typeof performance == \"object\" && typeof performance.now == \"function\" ? (vw = performance, Et.unstable_now = function() {\n return vw.now();\n }) : (Fb = Date, yw = Fb.now(), Et.unstable_now = function() {\n return Fb.now() - yw;\n });\n var vw, Fb, yw, kn = [], Ws = [], DN = 1, Br = null, Oo = 3, qm = !1, Pi = !1, Bc = !1, ww = typeof setTimeout == \"function\" ? setTimeout : null, Sw = typeof clearTimeout == \"function\" ? clearTimeout : null, Cw = typeof setImmediate < \"u\" ? setImmediate : null;\n function Zm(t) {\n for(var e = rn(Ws); e !== null;){\n if (e.callback === null) Jm(Ws);\n else if (e.startTime <= t) Jm(Ws), e.sortIndex = e.expirationTime, Ab(kn, e);\n else break;\n e = rn(Ws);\n }\n }\n function Pb(t) {\n if (Bc = !1, Zm(t), !Pi) if (rn(kn) !== null) Pi = !0, Eb();\n else {\n var e = rn(Ws);\n e !== null && Nb(Pb, e.startTime - t);\n }\n }\n var Qm = !1, Mc = -1, Iw = 5, _w = -1;\n function Tw() {\n return !(Et.unstable_now() - _w < Iw);\n }\n function Db() {\n if (Qm) {\n var t = Et.unstable_now();\n _w = t;\n var e = !0;\n try {\n e: {\n Pi = !1, Bc && (Bc = !1, Sw(Mc), Mc = -1), qm = !0;\n var o = Oo;\n try {\n t: {\n for(Zm(t), Br = rn(kn); Br !== null && !(Br.expirationTime > t && Tw());){\n var n = Br.callback;\n if (typeof n == \"function\") {\n Br.callback = null, Oo = Br.priorityLevel;\n var r = n(Br.expirationTime <= t);\n if (t = Et.unstable_now(), typeof r == \"function\") {\n Br.callback = r, Zm(t), e = !0;\n break t;\n }\n Br === rn(kn) && Jm(kn), Zm(t);\n } else Jm(kn);\n Br = rn(kn);\n }\n if (Br !== null) e = !0;\n else {\n var s = rn(Ws);\n s !== null && Nb(Pb, s.startTime - t), e = !1;\n }\n }\n break e;\n } finally{\n Br = null, Oo = o, qm = !1;\n }\n e = void 0;\n }\n } finally{\n e ? $c() : Qm = !1;\n }\n }\n }\n var $c;\n typeof Cw == \"function\" ? $c = function() {\n Cw(Db);\n } : typeof MessageChannel < \"u\" ? (Rb = new MessageChannel, xw = Rb.port2, Rb.port1.onmessage = Db, $c = function() {\n xw.postMessage(null);\n }) : $c = function() {\n ww(Db, 0);\n };\n var Rb, xw;\n function Eb() {\n Qm || (Qm = !0, $c());\n }\n function Nb(t, e) {\n Mc = ww(function() {\n t(Et.unstable_now());\n }, e);\n }\n Et.unstable_IdlePriority = 5;\n Et.unstable_ImmediatePriority = 1;\n Et.unstable_LowPriority = 4;\n Et.unstable_NormalPriority = 3;\n Et.unstable_Profiling = null;\n Et.unstable_UserBlockingPriority = 2;\n Et.unstable_cancelCallback = function(t) {\n t.callback = null;\n };\n Et.unstable_continueExecution = function() {\n Pi || qm || (Pi = !0, Eb());\n };\n Et.unstable_forceFrameRate = function(t) {\n 0 > t || 125 < t ? console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\") : Iw = 0 < t ? Math.floor(1e3 / t) : 5;\n };\n Et.unstable_getCurrentPriorityLevel = function() {\n return Oo;\n };\n Et.unstable_getFirstCallbackNode = function() {\n return rn(kn);\n };\n Et.unstable_next = function(t) {\n switch(Oo){\n case 1:\n case 2:\n case 3:\n var e = 3;\n break;\n default:\n e = Oo;\n }\n var o = Oo;\n Oo = e;\n try {\n return t();\n } finally{\n Oo = o;\n }\n };\n Et.unstable_pauseExecution = function() {};\n Et.unstable_requestPaint = function() {};\n Et.unstable_runWithPriority = function(t, e) {\n switch(t){\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n t = 3;\n }\n var o = Oo;\n Oo = t;\n try {\n return e();\n } finally{\n Oo = o;\n }\n };\n Et.unstable_scheduleCallback = function(t, e, o) {\n var n = Et.unstable_now();\n switch(typeof o == \"object\" && o !== null ? (o = o.delay, o = typeof o == \"number\" && 0 < o ? n + o : n) : o = n, t){\n case 1:\n var r = -1;\n break;\n case 2:\n r = 250;\n break;\n case 5:\n r = 1073741823;\n break;\n case 4:\n r = 1e4;\n break;\n default:\n r = 5e3;\n }\n return r = o + r, t = {\n id: DN++,\n callback: e,\n priorityLevel: t,\n startTime: o,\n expirationTime: r,\n sortIndex: -1\n }, o > n ? (t.sortIndex = o, Ab(Ws, t), rn(kn) === null && t === rn(Ws) && (Bc ? (Sw(Mc), Mc = -1) : Bc = !0, Nb(Pb, o - n))) : (t.sortIndex = r, Ab(kn, t), Pi || qm || (Pi = !0, Eb())), t;\n };\n Et.unstable_shouldYield = Tw;\n Et.unstable_wrapCallback = function(t) {\n var e = Oo;\n return function() {\n var o = Oo;\n Oo = e;\n try {\n return t.apply(this, arguments);\n } finally{\n Oo = o;\n }\n };\n };\n});\n_c2 = Fw;\nvar Rw = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c3 = (bre, Dw)=>{\n \"use strict\";\n Dw.exports = Fw();\n});\n_c4 = Rw;\nvar gf = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((zse, f2)=>{\n var i1 = Math.floor(Math.random() * 16777215), l2 = St.index = parseInt(Math.random() * 16777215, 10), c2 = (typeof process > \"u\" || typeof process.pid != \"number\" ? Math.floor(Math.random() * 1e5) : process.pid) % 65535, u2 = (()=>{\n try {\n return _Buffer;\n } catch {\n try {\n return Buffer;\n } catch {\n return null;\n }\n }\n })(), hf = function(t) {\n return !!(t != null && t.constructor && typeof t.constructor.isBuffer == \"function\" && t.constructor.isBuffer(t));\n }, m2 = [];\n for(lr = 0; lr < 256; lr++)m2[lr] = (lr <= 15 ? \"0\" : \"\") + lr.toString(16);\n var lr, d2 = new RegExp(\"^[0-9a-fA-F]{24}$\"), Wc = [];\n lr = 0;\n for(; lr < 10;)Wc[48 + lr] = lr++;\n for(; lr < 16;)Wc[55 + lr] = Wc[87 + lr] = lr++;\n function St(t) {\n if (!(this instanceof St)) return new St(t);\n if (t && (t instanceof St || t._bsontype === \"ObjectID\")) return t;\n if (this._bsontype = \"ObjectID\", t == null || typeof t == \"number\") {\n this.id = this.generate(t);\n return;\n }\n var e = St.isValid(t);\n if (!e && t != null) throw new Error(\"Argument passed in must be a single String of 12 bytes or a string of 24 hex characters\");\n if (e && typeof t == \"string\" && t.length === 24) return St.createFromHexString(t);\n if (t != null && t.length === 12) this.id = t;\n else {\n if (t != null && typeof t.toHexString == \"function\") return t;\n throw new Error(\"Argument passed in must be a single String of 12 bytes or a string of 24 hex characters\");\n }\n }\n f2.exports = St;\n St.default = St;\n St.createFromTime = function(t) {\n return t = parseInt(t, 10) % 4294967295, new St(o9(8, t) + \"0000000000000000\");\n };\n St.createFromHexString = function(t) {\n if (typeof t > \"u\" || t != null && t.length !== 24) throw new Error(\"Argument passed in must be a single String of 12 bytes or a string of 24 hex characters\");\n for(var e = \"\", o = 0; o < 24;)e += String.fromCharCode(Wc[t.charCodeAt(o++)] << 4 | Wc[t.charCodeAt(o++)]);\n return new St(e);\n };\n St.isValid = function(t) {\n return t == null ? !1 : typeof t == \"number\" ? !0 : typeof t == \"string\" ? t.length === 12 || t.length === 24 && d2.test(t) : t instanceof St ? !0 : hf(t) ? St.isValid(t.toString(\"hex\")) : typeof t.toHexString == \"function\" && u2 && (t.id instanceof u2 || typeof t.id == \"string\") ? t.id.length === 12 || t.id.length === 24 && d2.test(t.id) : !1;\n };\n St.prototype = {\n constructor: St,\n toHexString: function() {\n if (!this.id || !this.id.length) throw new Error(\"invalid ObjectId, ObjectId.id must be either a string or a Buffer, but is [\" + JSON.stringify(this.id) + \"]\");\n if (this.id.length === 24) return this.id;\n if (hf(this.id)) return this.id.toString(\"hex\");\n for(var t = \"\", e = 0; e < this.id.length; e++)t += m2[this.id.charCodeAt(e)];\n return t;\n },\n equals: function(t) {\n return t instanceof St ? this.toString() === t.toString() : typeof t == \"string\" && St.isValid(t) && t.length === 12 && hf(this.id) ? t === this.id.toString(\"binary\") : typeof t == \"string\" && St.isValid(t) && t.length === 24 ? t.toLowerCase() === this.toHexString() : typeof t == \"string\" && St.isValid(t) && t.length === 12 ? t === this.id : t != null && (t instanceof St || t.toHexString) ? t.toHexString() === this.toHexString() : !1;\n },\n getTimestamp: function() {\n var t = new Date, e;\n return hf(this.id) ? e = this.id[3] | this.id[2] << 8 | this.id[1] << 16 | this.id[0] << 24 : e = this.id.charCodeAt(3) | this.id.charCodeAt(2) << 8 | this.id.charCodeAt(1) << 16 | this.id.charCodeAt(0) << 24, t.setTime(Math.floor(e) * 1e3), t;\n },\n generate: function(t) {\n typeof t != \"number\" && (t = ~~(Date.now() / 1e3)), t = parseInt(t, 10) % 4294967295;\n var e = t9();\n return String.fromCharCode(t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, t & 255, i1 >> 16 & 255, i1 >> 8 & 255, i1 & 255, c2 >> 8 & 255, c2 & 255, e >> 16 & 255, e >> 8 & 255, e & 255);\n }\n };\n function t9() {\n return l2 = (l2 + 1) % 16777215;\n }\n function o9(t, e) {\n return e = e.toString(16), e.length === t ? e : \"00000000\".substring(e.length, t) + e;\n }\n var r9 = Symbol && Symbol.for && Symbol.for(\"nodejs.util.inspect.custom\") || \"inspect\";\n St.prototype[r9] = function() {\n return \"ObjectID(\" + this + \")\";\n };\n St.prototype.toJSON = St.prototype.toHexString;\n St.prototype.toString = St.prototype.toHexString;\n});\nvar kI = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((xt)=>{\n \"use strict\";\n var _o = typeof Symbol == \"function\" && Symbol.for, gv = _o ? Symbol.for(\"react.element\") : 60103, bv = _o ? Symbol.for(\"react.portal\") : 60106, bp = _o ? Symbol.for(\"react.fragment\") : 60107, vp = _o ? Symbol.for(\"react.strict_mode\") : 60108, yp = _o ? Symbol.for(\"react.profiler\") : 60114, Cp = _o ? Symbol.for(\"react.provider\") : 60109, xp = _o ? Symbol.for(\"react.context\") : 60110, vv = _o ? Symbol.for(\"react.async_mode\") : 60111, wp = _o ? Symbol.for(\"react.concurrent_mode\") : 60111, Sp = _o ? Symbol.for(\"react.forward_ref\") : 60112, Ip = _o ? Symbol.for(\"react.suspense\") : 60113, NB = _o ? Symbol.for(\"react.suspense_list\") : 60120, _p = _o ? Symbol.for(\"react.memo\") : 60115, Tp = _o ? Symbol.for(\"react.lazy\") : 60116, LB = _o ? Symbol.for(\"react.block\") : 60121, kB = _o ? Symbol.for(\"react.fundamental\") : 60117, jB = _o ? Symbol.for(\"react.responder\") : 60118, $B = _o ? Symbol.for(\"react.scope\") : 60119;\n function Sr(t) {\n if (typeof t == \"object\" && t !== null) {\n var e = t.$$typeof;\n switch(e){\n case gv:\n switch(t = t.type, t){\n case vv:\n case wp:\n case bp:\n case yp:\n case vp:\n case Ip:\n return t;\n default:\n switch(t = t && t.$$typeof, t){\n case xp:\n case Sp:\n case Tp:\n case _p:\n case Cp:\n return t;\n default:\n return e;\n }\n }\n case bv:\n return e;\n }\n }\n }\n function LI(t) {\n return Sr(t) === wp;\n }\n xt.AsyncMode = vv;\n xt.ConcurrentMode = wp;\n xt.ContextConsumer = xp;\n xt.ContextProvider = Cp;\n xt.Element = gv;\n xt.ForwardRef = Sp;\n xt.Fragment = bp;\n xt.Lazy = Tp;\n xt.Memo = _p;\n xt.Portal = bv;\n xt.Profiler = yp;\n xt.StrictMode = vp;\n xt.Suspense = Ip;\n xt.isAsyncMode = function(t) {\n return LI(t) || Sr(t) === vv;\n };\n xt.isConcurrentMode = LI;\n xt.isContextConsumer = function(t) {\n return Sr(t) === xp;\n };\n xt.isContextProvider = function(t) {\n return Sr(t) === Cp;\n };\n xt.isElement = function(t) {\n return typeof t == \"object\" && t !== null && t.$$typeof === gv;\n };\n xt.isForwardRef = function(t) {\n return Sr(t) === Sp;\n };\n xt.isFragment = function(t) {\n return Sr(t) === bp;\n };\n xt.isLazy = function(t) {\n return Sr(t) === Tp;\n };\n xt.isMemo = function(t) {\n return Sr(t) === _p;\n };\n xt.isPortal = function(t) {\n return Sr(t) === bv;\n };\n xt.isProfiler = function(t) {\n return Sr(t) === yp;\n };\n xt.isStrictMode = function(t) {\n return Sr(t) === vp;\n };\n xt.isSuspense = function(t) {\n return Sr(t) === Ip;\n };\n xt.isValidElementType = function(t) {\n return typeof t == \"string\" || typeof t == \"function\" || t === bp || t === wp || t === yp || t === vp || t === Ip || t === NB || typeof t == \"object\" && t !== null && (t.$$typeof === Tp || t.$$typeof === _p || t.$$typeof === Cp || t.$$typeof === xp || t.$$typeof === Sp || t.$$typeof === kB || t.$$typeof === jB || t.$$typeof === $B || t.$$typeof === LB);\n };\n xt.typeOf = Sr;\n});\nvar $I = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)((Hve, jI)=>{\n \"use strict\";\n jI.exports = kI();\n});\nvar WI = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c5 = (Uve, zI)=>{\n \"use strict\";\n var yv = $I(), BB = {\n childContextTypes: !0,\n contextType: !0,\n contextTypes: !0,\n defaultProps: !0,\n displayName: !0,\n getDefaultProps: !0,\n getDerivedStateFromError: !0,\n getDerivedStateFromProps: !0,\n mixins: !0,\n propTypes: !0,\n type: !0\n }, MB = {\n name: !0,\n length: !0,\n prototype: !0,\n caller: !0,\n callee: !0,\n arguments: !0,\n arity: !0\n }, OB = {\n $$typeof: !0,\n render: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0\n }, VI = {\n $$typeof: !0,\n compare: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0,\n type: !0\n }, Cv = {};\n Cv[yv.ForwardRef] = OB;\n Cv[yv.Memo] = VI;\n function BI(t) {\n return yv.isMemo(t) ? VI : Cv[t.$$typeof] || BB;\n }\n var VB = Object.defineProperty, GB = Object.getOwnPropertyNames, MI = Object.getOwnPropertySymbols, zB = Object.getOwnPropertyDescriptor, WB = Object.getPrototypeOf, OI = Object.prototype;\n function GI(t, e, o) {\n if (typeof e != \"string\") {\n if (OI) {\n var n = WB(e);\n n && n !== OI && GI(t, n, o);\n }\n var r = GB(e);\n MI && (r = r.concat(MI(e)));\n for(var s = BI(t), i = BI(e), l = 0; l < r.length; ++l){\n var a = r[l];\n if (!MB[a] && !(o && o[a]) && !(i && i[a]) && !(s && s[a])) {\n var c = zB(e, a);\n try {\n VB(t, a, c);\n } catch {}\n }\n }\n }\n return t;\n }\n zI.exports = GI;\n});\n_c6 = WI;\nvar U0 = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c7 = (IAe, jD)=>{\n function H0(t) {\n return t === void 0;\n }\n function ZG(t) {\n return t === null;\n }\n function JG(t) {\n return typeof t == \"boolean\";\n }\n function ph(t) {\n return t === Object(t);\n }\n function LD(t) {\n return Array.isArray(t);\n }\n function qG(t) {\n return t instanceof Date;\n }\n function kD(t, e) {\n return e ? ph(t) && !H0(t.uri) : ph(t) && typeof t.size == \"number\" && typeof t.type == \"string\" && typeof t.slice == \"function\";\n }\n function QG(t, e) {\n return kD(t, e) && typeof t.name == \"string\" && (ph(t.lastModifiedDate) || typeof t.lastModified == \"number\");\n }\n function pa(t) {\n return H0(t) ? !1 : t;\n }\n function W0(t, e, o, n) {\n e = e || {}, o = o || new FormData, e.indices = pa(e.indices), e.nullsAsUndefineds = pa(e.nullsAsUndefineds), e.booleansAsIntegers = pa(e.booleansAsIntegers), e.allowEmptyArrays = pa(e.allowEmptyArrays), e.noAttributesWithArrayNotation = pa(e.noAttributesWithArrayNotation), e.noFilesWithArrayNotation = pa(e.noFilesWithArrayNotation), e.dotsForObjectNotation = pa(e.dotsForObjectNotation);\n let r = typeof o.getParts == \"function\";\n return H0(t) || (ZG(t) ? e.nullsAsUndefineds || o.append(n, \"\") : JG(t) ? e.booleansAsIntegers ? o.append(n, t ? 1 : 0) : o.append(n, t) : LD(t) ? t.length ? t.forEach((s, i)=>{\n let l = n + \"[\" + (e.indices ? i : \"\") + \"]\";\n (e.noAttributesWithArrayNotation || e.noFilesWithArrayNotation && QG(s, r)) && (l = n), W0(s, e, o, l);\n }) : e.allowEmptyArrays && o.append(e.noAttributesWithArrayNotation ? n : n + \"[]\", \"\") : qG(t) ? o.append(n, t.toISOString()) : ph(t) && !kD(t, r) ? Object.keys(t).forEach((s)=>{\n let i = t[s];\n if (LD(i)) for(; s.length > 2 && s.lastIndexOf(\"[]\") === s.length - 2;)s = s.substring(0, s.length - 2);\n let l = n ? e.dotsForObjectNotation ? n + \".\" + s : n + \"[\" + s + \"]\" : s;\n W0(i, e, o, l);\n }) : o.append(n, t)), o;\n }\n jD.exports = {\n serialize: W0\n };\n});\n_c8 = U0;\nvar BP = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c9 = (kze, $P)=>{\n (function() {\n var t = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", e = {\n rotl: function(o, n) {\n return o << n | o >>> 32 - n;\n },\n rotr: function(o, n) {\n return o << 32 - n | o >>> n;\n },\n endian: function(o) {\n if (o.constructor == Number) return e.rotl(o, 8) & 16711935 | e.rotl(o, 24) & 4278255360;\n for(var n = 0; n < o.length; n++)o[n] = e.endian(o[n]);\n return o;\n },\n randomBytes: function(o) {\n for(var n = []; o > 0; o--)n.push(Math.floor(Math.random() * 256));\n return n;\n },\n bytesToWords: function(o) {\n for(var n = [], r = 0, s = 0; r < o.length; r++, s += 8)n[s >>> 5] |= o[r] << 24 - s % 32;\n return n;\n },\n wordsToBytes: function(o) {\n for(var n = [], r = 0; r < o.length * 32; r += 8)n.push(o[r >>> 5] >>> 24 - r % 32 & 255);\n return n;\n },\n bytesToHex: function(o) {\n for(var n = [], r = 0; r < o.length; r++)n.push((o[r] >>> 4).toString(16)), n.push((o[r] & 15).toString(16));\n return n.join(\"\");\n },\n hexToBytes: function(o) {\n for(var n = [], r = 0; r < o.length; r += 2)n.push(parseInt(o.substr(r, 2), 16));\n return n;\n },\n bytesToBase64: function(o) {\n for(var n = [], r = 0; r < o.length; r += 3)for(var s = o[r] << 16 | o[r + 1] << 8 | o[r + 2], i = 0; i < 4; i++)r * 8 + i * 6 <= o.length * 8 ? n.push(t.charAt(s >>> 6 * (3 - i) & 63)) : n.push(\"=\");\n return n.join(\"\");\n },\n base64ToBytes: function(o) {\n o = o.replace(/[^A-Z0-9+\\/]/ig, \"\");\n for(var n = [], r = 0, s = 0; r < o.length; s = ++r % 4)s != 0 && n.push((t.indexOf(o.charAt(r - 1)) & Math.pow(2, -2 * s + 8) - 1) << s * 2 | t.indexOf(o.charAt(r)) >>> 6 - s * 2);\n return n;\n }\n };\n $P.exports = e;\n })();\n});\n_c10 = BP;\nvar Ky = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c11 = (jze, MP)=>{\n var Qy = {\n utf8: {\n stringToBytes: function(t) {\n return Qy.bin.stringToBytes(unescape(encodeURIComponent(t)));\n },\n bytesToString: function(t) {\n return decodeURIComponent(escape(Qy.bin.bytesToString(t)));\n }\n },\n bin: {\n stringToBytes: function(t) {\n for(var e = [], o = 0; o < t.length; o++)e.push(t.charCodeAt(o) & 255);\n return e;\n },\n bytesToString: function(t) {\n for(var e = [], o = 0; o < t.length; o++)e.push(String.fromCharCode(t[o]));\n return e.join(\"\");\n }\n }\n };\n MP.exports = Qy;\n});\n_c12 = Ky;\nvar GP = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c13 = ($ze, VP)=>{\n VP.exports = function(t) {\n return t != null && (OP(t) || HY(t) || !!t._isBuffer);\n };\n function OP(t) {\n return !!t.constructor && typeof t.constructor.isBuffer == \"function\" && t.constructor.isBuffer(t);\n }\n function HY(t) {\n return typeof t.readFloatLE == \"function\" && typeof t.slice == \"function\" && OP(t.slice(0, 0));\n }\n});\n_c14 = GP;\nvar WP = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.c)(_c15 = (Bze, zP)=>{\n (function() {\n var t = BP(), e = Ky().utf8, o = GP(), n = Ky().bin, r = function(s, i) {\n s.constructor == String ? i && i.encoding === \"binary\" ? s = n.stringToBytes(s) : s = e.stringToBytes(s) : o(s) ? s = Array.prototype.slice.call(s, 0) : !Array.isArray(s) && s.constructor !== Uint8Array && (s = s.toString());\n for(var l = t.bytesToWords(s), a = s.length * 8, c = 1732584193, u = -271733879, d = -1732584194, f = 271733878, m = 0; m < l.length; m++)l[m] = (l[m] << 8 | l[m] >>> 24) & 16711935 | (l[m] << 24 | l[m] >>> 8) & 4278255360;\n l[a >>> 5] |= 128 << a % 32, l[(a + 64 >>> 9 << 4) + 14] = a;\n for(var p = r._ff, h = r._gg, g = r._hh, b = r._ii, m = 0; m < l.length; m += 16){\n var C = c, y = u, v = d, x = f;\n c = p(c, u, d, f, l[m + 0], 7, -680876936), f = p(f, c, u, d, l[m + 1], 12, -389564586), d = p(d, f, c, u, l[m + 2], 17, 606105819), u = p(u, d, f, c, l[m + 3], 22, -1044525330), c = p(c, u, d, f, l[m + 4], 7, -176418897), f = p(f, c, u, d, l[m + 5], 12, 1200080426), d = p(d, f, c, u, l[m + 6], 17, -1473231341), u = p(u, d, f, c, l[m + 7], 22, -45705983), c = p(c, u, d, f, l[m + 8], 7, 1770035416), f = p(f, c, u, d, l[m + 9], 12, -1958414417), d = p(d, f, c, u, l[m + 10], 17, -42063), u = p(u, d, f, c, l[m + 11], 22, -1990404162), c = p(c, u, d, f, l[m + 12], 7, 1804603682), f = p(f, c, u, d, l[m + 13], 12, -40341101), d = p(d, f, c, u, l[m + 14], 17, -1502002290), u = p(u, d, f, c, l[m + 15], 22, 1236535329), c = h(c, u, d, f, l[m + 1], 5, -165796510), f = h(f, c, u, d, l[m + 6], 9, -1069501632), d = h(d, f, c, u, l[m + 11], 14, 643717713), u = h(u, d, f, c, l[m + 0], 20, -373897302), c = h(c, u, d, f, l[m + 5], 5, -701558691), f = h(f, c, u, d, l[m + 10], 9, 38016083), d = h(d, f, c, u, l[m + 15], 14, -660478335), u = h(u, d, f, c, l[m + 4], 20, -405537848), c = h(c, u, d, f, l[m + 9], 5, 568446438), f = h(f, c, u, d, l[m + 14], 9, -1019803690), d = h(d, f, c, u, l[m + 3], 14, -187363961), u = h(u, d, f, c, l[m + 8], 20, 1163531501), c = h(c, u, d, f, l[m + 13], 5, -1444681467), f = h(f, c, u, d, l[m + 2], 9, -51403784), d = h(d, f, c, u, l[m + 7], 14, 1735328473), u = h(u, d, f, c, l[m + 12], 20, -1926607734), c = g(c, u, d, f, l[m + 5], 4, -378558), f = g(f, c, u, d, l[m + 8], 11, -2022574463), d = g(d, f, c, u, l[m + 11], 16, 1839030562), u = g(u, d, f, c, l[m + 14], 23, -35309556), c = g(c, u, d, f, l[m + 1], 4, -1530992060), f = g(f, c, u, d, l[m + 4], 11, 1272893353), d = g(d, f, c, u, l[m + 7], 16, -155497632), u = g(u, d, f, c, l[m + 10], 23, -1094730640), c = g(c, u, d, f, l[m + 13], 4, 681279174), f = g(f, c, u, d, l[m + 0], 11, -358537222), d = g(d, f, c, u, l[m + 3], 16, -722521979), u = g(u, d, f, c, l[m + 6], 23, 76029189), c = g(c, u, d, f, l[m + 9], 4, -640364487), f = g(f, c, u, d, l[m + 12], 11, -421815835), d = g(d, f, c, u, l[m + 15], 16, 530742520), u = g(u, d, f, c, l[m + 2], 23, -995338651), c = b(c, u, d, f, l[m + 0], 6, -198630844), f = b(f, c, u, d, l[m + 7], 10, 1126891415), d = b(d, f, c, u, l[m + 14], 15, -1416354905), u = b(u, d, f, c, l[m + 5], 21, -57434055), c = b(c, u, d, f, l[m + 12], 6, 1700485571), f = b(f, c, u, d, l[m + 3], 10, -1894986606), d = b(d, f, c, u, l[m + 10], 15, -1051523), u = b(u, d, f, c, l[m + 1], 21, -2054922799), c = b(c, u, d, f, l[m + 8], 6, 1873313359), f = b(f, c, u, d, l[m + 15], 10, -30611744), d = b(d, f, c, u, l[m + 6], 15, -1560198380), u = b(u, d, f, c, l[m + 13], 21, 1309151649), c = b(c, u, d, f, l[m + 4], 6, -145523070), f = b(f, c, u, d, l[m + 11], 10, -1120210379), d = b(d, f, c, u, l[m + 2], 15, 718787259), u = b(u, d, f, c, l[m + 9], 21, -343485551), c = c + C >>> 0, u = u + y >>> 0, d = d + v >>> 0, f = f + x >>> 0;\n }\n return t.endian([\n c,\n u,\n d,\n f\n ]);\n };\n r._ff = function(s, i, l, a, c, u, d) {\n var f = s + (i & l | ~i & a) + (c >>> 0) + d;\n return (f << u | f >>> 32 - u) + i;\n }, r._gg = function(s, i, l, a, c, u, d) {\n var f = s + (i & a | l & ~a) + (c >>> 0) + d;\n return (f << u | f >>> 32 - u) + i;\n }, r._hh = function(s, i, l, a, c, u, d) {\n var f = s + (i ^ l ^ a) + (c >>> 0) + d;\n return (f << u | f >>> 32 - u) + i;\n }, r._ii = function(s, i, l, a, c, u, d) {\n var f = s + (l ^ (i | ~a)) + (c >>> 0) + d;\n return (f << u | f >>> 32 - u) + i;\n }, r._blocksize = 16, r._digestsize = 16, zP.exports = function(s, i) {\n if (s == null) throw new Error(\"Illegal argument \" + s);\n var l = t.wordsToBytes(r(s, i));\n return i && i.asBytes ? l : i && i.asString ? n.bytesToString(l) : t.bytesToHex(l);\n };\n })();\n});\n_c16 = WP;\n\n\nfunction de({ CustomComponent: t, Fallback: e }) {\n return t !== void 0 ? t : e;\n}\n\n\n\nvar Oc = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(Rw(), 1);\n\nvar Km = Symbol(), jN = Symbol(), $N = typeof window > \"u\" || /ServerSideRendering/.test(window.navigator && window.navigator.userAgent), Aw = $N ? react__WEBPACK_IMPORTED_MODULE_0__.useEffect : react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect, BN = Oc.unstable_runWithPriority ? (t)=>{\n try {\n (0, Oc.unstable_runWithPriority)(Oc.unstable_NormalPriority, t);\n } catch (e) {\n if (e.message === \"Not implemented.\") t();\n else throw e;\n }\n} : (t)=>t(), MN = (t)=>({ value: o, children: n })=>{\n let r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(o), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0), [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n i && (i(o), l(null));\n let a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n if (!a.current) {\n let c = new Set, u = (d, f)=>{\n s.current += 1;\n let m = {\n n: s.current\n };\n f?.suspense && (m.n *= -1, m.p = new Promise((p)=>{\n l(()=>(h)=>{\n m.v = h, delete m.p, p(h);\n });\n })), c.forEach((p)=>p(m)), d();\n };\n a.current = {\n [Km]: {\n v: r,\n n: s,\n l: c,\n u\n }\n };\n }\n return Aw(()=>{\n r.current = o, s.current += 1, BN(()=>{\n a.current[Km].l.forEach((c)=>{\n c({\n n: s.current,\n v: o\n });\n });\n });\n }, [\n o\n ]), /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(t, {\n value: a.current\n }, n);\n }, ON = (t)=>t;\nfunction Pw(t) {\n let e = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n [Km]: {\n v: {\n current: t\n },\n n: {\n current: -1\n },\n l: new Set,\n u: (o)=>o()\n }\n });\n return e[jN] = e.Provider, e.Provider = MN(e.Provider), delete e.Consumer, e;\n}\n_c17 = Pw;\nfunction kb(t, e) {\n let o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(t)[Km], { v: { current: n }, n: { current: r }, l: s } = o, i = e(n), [l, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)((c, u)=>{\n if (!u) return [\n n,\n i\n ];\n if (\"p\" in u) throw u.p;\n if (u.n === r) return Object.is(c[1], i) ? c : [\n n,\n i\n ];\n try {\n if (\"v\" in u) {\n if (Object.is(c[0], u.v)) return c;\n let d = e(u.v);\n return Object.is(c[1], d) ? c : [\n u.v,\n d\n ];\n }\n } catch {}\n return [\n ...c\n ];\n }, [\n n,\n i\n ]);\n return Object.is(l[1], i) || a(), Aw(()=>(s.add(a), ()=>{\n s.delete(a);\n }), [\n s\n ]), l[1];\n}\nfunction Ew(t) {\n return kb(t, ON);\n}\n_c18 = Ew;\nvar ef = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), tf = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), of = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), rf = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), nf = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), jb = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), sf = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), $b = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), Vc = Pw([\n {},\n ()=>null\n]), $e = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(ef), Ka = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(tf), af = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(of), fo = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(rf), Mr = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(nf), Bb = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(jb), po = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(sf), Ei = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)($b), Ot = (t)=>kb(Vc, t), Xs = ()=>Ew(Vc);\nvar Nw = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n data: {},\n path: \"\",\n rowNumber: void 0\n}), Ob = ({ children: t, path: e, rowNumber: o })=>{\n _s();\n let { getDataByPath: n, getSiblingData: r } = af(), s = r(e), l = n(e) || s, a = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Ob.useMemo[a]\": ()=>({\n data: l,\n path: e,\n rowNumber: o\n })\n }[\"Ob.useMemo[a]\"], [\n l,\n e,\n o\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Nw, {\n value: a,\n children: t\n });\n}, GN = ()=>react__WEBPACK_IMPORTED_MODULE_0__.use(Nw);\n_s(Ob, \"ZTCmHzlopo8QLvaZw33ZAN6fows=\");\nvar zN = \"row-label\", is = (t)=>{\n let { className: e, CustomComponent: o, label: n, path: r, rowNumber: s } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ob, {\n path: r,\n rowNumber: s,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: o,\n Fallback: typeof n == \"string\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: [\n zN,\n e\n ].filter(Boolean).join(\" \"),\n style: {\n pointerEvents: \"none\"\n },\n children: n\n }) : n\n })\n });\n};\n\n\n\n\n\n\n\n\nvar UN = (t)=>{\n switch(t){\n case \"success\":\n return ZN;\n case \"info\":\n return qN;\n case \"warning\":\n return JN;\n case \"error\":\n return QN;\n default:\n return null;\n }\n}, XN = Array(12).fill(0), YN = ({ visible: t, className: e })=>/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: [\n \"sonner-loading-wrapper\",\n e\n ].filter(Boolean).join(\" \"),\n \"data-visible\": t\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, XN.map((o, n)=>/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: `spinner-bar-${n}`\n })))), ZN = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n})), JN = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n})), qN = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n})), QN = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n})), KN = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n})), eL = ()=>{\n _s1();\n let [t, e] = react__WEBPACK_IMPORTED_MODULE_0__.useState(document.hidden);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"eL.useEffect\": ()=>{\n let o = {\n \"eL.useEffect.o\": ()=>{\n e(document.hidden);\n }\n }[\"eL.useEffect.o\"];\n return document.addEventListener(\"visibilitychange\", o), ({\n \"eL.useEffect\": ()=>window.removeEventListener(\"visibilitychange\", o)\n })[\"eL.useEffect\"];\n }\n }[\"eL.useEffect\"], []), t;\n}, zb = 1, oL = class {\n constructor(){\n this.subscribe = (t)=>(this.subscribers.push(t), ()=>{\n let e = this.subscribers.indexOf(t);\n this.subscribers.splice(e, 1);\n }), this.publish = (t)=>{\n this.subscribers.forEach((e)=>e(t));\n }, this.addToast = (t)=>{\n this.publish(t), this.toasts = [\n ...this.toasts,\n t\n ];\n }, this.create = (t)=>{\n var e;\n let { message: o, ...n } = t, r = typeof t?.id == \"number\" || ((e = t.id) == null ? void 0 : e.length) > 0 ? t.id : zb++, s = this.toasts.find((l)=>l.id === r), i = t.dismissible === void 0 ? !0 : t.dismissible;\n return this.dismissedToasts.has(r) && this.dismissedToasts.delete(r), s ? this.toasts = this.toasts.map((l)=>l.id === r ? (this.publish({\n ...l,\n ...t,\n id: r,\n title: o\n }), {\n ...l,\n ...t,\n id: r,\n dismissible: i,\n title: o\n }) : l) : this.addToast({\n title: o,\n ...n,\n dismissible: i,\n id: r\n }), r;\n }, this.dismiss = (t)=>(this.dismissedToasts.add(t), t || this.toasts.forEach((e)=>{\n this.subscribers.forEach((o)=>o({\n id: e.id,\n dismiss: !0\n }));\n }), this.subscribers.forEach((e)=>e({\n id: t,\n dismiss: !0\n })), t), this.message = (t, e)=>this.create({\n ...e,\n message: t\n }), this.error = (t, e)=>this.create({\n ...e,\n message: t,\n type: \"error\"\n }), this.success = (t, e)=>this.create({\n ...e,\n type: \"success\",\n message: t\n }), this.info = (t, e)=>this.create({\n ...e,\n type: \"info\",\n message: t\n }), this.warning = (t, e)=>this.create({\n ...e,\n type: \"warning\",\n message: t\n }), this.loading = (t, e)=>this.create({\n ...e,\n type: \"loading\",\n message: t\n }), this.promise = (t, e)=>{\n if (!e) return;\n let o;\n e.loading !== void 0 && (o = this.create({\n ...e,\n promise: t,\n type: \"loading\",\n message: e.loading,\n description: typeof e.description != \"function\" ? e.description : void 0\n }));\n let n = t instanceof Promise ? t : t(), r = o !== void 0, s, i = n.then(async (a)=>{\n if (s = [\n \"resolve\",\n a\n ], /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(a)) r = !1, this.create({\n id: o,\n type: \"default\",\n message: a\n });\n else if (nL(a) && !a.ok) {\n r = !1;\n let c = typeof e.error == \"function\" ? await e.error(`HTTP error! status: ${a.status}`) : e.error, u = typeof e.description == \"function\" ? await e.description(`HTTP error! status: ${a.status}`) : e.description;\n this.create({\n id: o,\n type: \"error\",\n message: c,\n description: u\n });\n } else if (e.success !== void 0) {\n r = !1;\n let c = typeof e.success == \"function\" ? await e.success(a) : e.success, u = typeof e.description == \"function\" ? await e.description(a) : e.description;\n this.create({\n id: o,\n type: \"success\",\n message: c,\n description: u\n });\n }\n }).catch(async (a)=>{\n if (s = [\n \"reject\",\n a\n ], e.error !== void 0) {\n r = !1;\n let c = typeof e.error == \"function\" ? await e.error(a) : e.error, u = typeof e.description == \"function\" ? await e.description(a) : e.description;\n this.create({\n id: o,\n type: \"error\",\n message: c,\n description: u\n });\n }\n }).finally(()=>{\n var a;\n r && (this.dismiss(o), o = void 0), (a = e.finally) == null || a.call(e);\n }), l = ()=>new Promise((a, c)=>i.then(()=>s[0] === \"reject\" ? c(s[1]) : a(s[1])).catch(c));\n return typeof o != \"string\" && typeof o != \"number\" ? {\n unwrap: l\n } : Object.assign(o, {\n unwrap: l\n });\n }, this.custom = (t, e)=>{\n let o = e?.id || zb++;\n return this.create({\n jsx: t(o),\n id: o,\n ...e\n }), o;\n }, this.getActiveToasts = ()=>this.toasts.filter((t)=>!this.dismissedToasts.has(t.id)), this.subscribers = [], this.toasts = [], this.dismissedToasts = new Set;\n }\n}, sr = new oL, rL = (t, e)=>{\n let o = e?.id || zb++;\n return sr.addToast({\n title: t,\n ...e,\n id: o\n }), o;\n}, nL = (t)=>t && typeof t == \"object\" && \"ok\" in t && typeof t.ok == \"boolean\" && \"status\" in t && typeof t.status == \"number\", sL = rL, iL = ()=>sr.toasts, aL = ()=>sr.getActiveToasts(), ee = Object.assign(sL, {\n success: sr.success,\n info: sr.info,\n warning: sr.warning,\n error: sr.error,\n custom: sr.custom,\n message: sr.message,\n promise: sr.promise,\n dismiss: sr.dismiss,\n loading: sr.loading\n}, {\n getHistory: iL,\n getToasts: aL\n});\n_s1(eL, \"aou8BOJj/TsCXC4EZAKkal3ABkE=\");\nfunction lL(t, { insertAt: e } = {}) {\n if (!t || typeof document > \"u\") return;\n let o = document.head || document.getElementsByTagName(\"head\")[0], n = document.createElement(\"style\");\n n.type = \"text/css\", e === \"top\" && o.firstChild ? o.insertBefore(n, o.firstChild) : o.appendChild(n), n.styleSheet ? n.styleSheet.cssText = t : n.appendChild(document.createTextNode(t));\n}\nlL(`:where(html[dir=\"ltr\"]),:where([data-sonner-toaster][dir=\"ltr\"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir=\"rtl\"]),:where([data-sonner-toaster][dir=\"rtl\"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted=\"true\"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted=\"true\"]){transform:none}}:where([data-sonner-toaster][data-x-position=\"right\"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position=\"left\"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position=\"center\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\"top\"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position=\"bottom\"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled=\"true\"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\"top\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\"bottom\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise=\"true\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\"dark\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\"true\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\"true\"]):before{content:\"\";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\"top\"][data-swiping=\"true\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\"bottom\"][data-swiping=\"true\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\"false\"][data-removed=\"true\"]):before{content:\"\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\"\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\"true\"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"][data-styled=\"true\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\"false\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\"true\"][data-expanded=\"true\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"true\"][data-swipe-out=\"false\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"true\"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"false\"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\n`);\nfunction lf(t) {\n return t.label !== void 0;\n}\nvar cL = 3, uL = \"32px\", dL = \"16px\", kw = 4e3, mL = 356, fL = 14, pL = 20, hL = 200;\nfunction nn(...t) {\n return t.filter(Boolean).join(\" \");\n}\nfunction gL(t) {\n let [e, o] = t.split(\"-\"), n = [];\n return e && n.push(e), o && n.push(o), n;\n}\nvar bL = (t)=>{\n _s2();\n var e, o, n, r, s, i, l, a, c, u, d;\n let { invert: f, toast: m, unstyled: p, interacting: h, setHeights: g, visibleToasts: b, heights: C, index: y, toasts: v, expanded: x, removeToast: I, defaultRichColors: w, closeButton: F, style: S, cancelButtonStyle: R, actionButtonStyle: D, className: _ = \"\", descriptionClassName: T = \"\", duration: A, position: k, gap: P, loadingIcon: E, expandByDefault: B, classNames: $, icons: M, closeButtonAriaLabel: L = \"Close toast\", pauseWhenPageIsHidden: j } = t, [O, V] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [W, Z] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [z, Q] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [U, X] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [ue, q] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [J, Y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [le, xe] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [_e, Be] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0), [Me, Ue] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0), he = react__WEBPACK_IMPORTED_MODULE_0__.useRef(m.duration || A || kw), Oe = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), Ke = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), ae = y === 0, we = y + 1 <= b, G = m.type, se = m.dismissible !== !1, K = m.className || \"\", fe = m.descriptionClassName || \"\", me = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"bL.useMemo[me]\": ()=>C.findIndex({\n \"bL.useMemo[me]\": (De)=>De.toastId === m.id\n }[\"bL.useMemo[me]\"]) || 0\n }[\"bL.useMemo[me]\"], [\n C,\n m.id\n ]), ne = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"bL.useMemo[ne]\": ()=>{\n var De;\n return (De = m.closeButton) != null ? De : F;\n }\n }[\"bL.useMemo[ne]\"], [\n m.closeButton,\n F\n ]), te = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"bL.useMemo[te]\": ()=>m.duration || A || kw\n }[\"bL.useMemo[te]\"], [\n m.duration,\n A\n ]), ge = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0), oe = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0), pe = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0), be = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), [ot, je] = k.split(\"-\"), Je = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"bL.useMemo[Je]\": ()=>C.reduce({\n \"bL.useMemo[Je]\": (De, ze, ce)=>ce >= me ? De : De + ze.height\n }[\"bL.useMemo[Je]\"], 0)\n }[\"bL.useMemo[Je]\"], [\n C,\n me\n ]), Rt = eL(), Ut = m.invert || f, $o = G === \"loading\";\n oe.current = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"bL.useMemo\": ()=>me * P + Je\n }[\"bL.useMemo\"], [\n me,\n Je\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"bL.useEffect\": ()=>{\n he.current = te;\n }\n }[\"bL.useEffect\"], [\n te\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"bL.useEffect\": ()=>{\n Q(!0);\n }\n }[\"bL.useEffect\"], []), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"bL.useEffect\": ()=>{\n let De = Ke.current;\n if (De) {\n let ze = De.getBoundingClientRect().height;\n return Ue(ze), g({\n \"bL.useEffect\": (ce)=>[\n {\n toastId: m.id,\n height: ze,\n position: m.position\n },\n ...ce\n ]\n }[\"bL.useEffect\"]), ({\n \"bL.useEffect\": ()=>g({\n \"bL.useEffect\": (ce)=>ce.filter({\n \"bL.useEffect\": (Ee)=>Ee.toastId !== m.id\n }[\"bL.useEffect\"])\n }[\"bL.useEffect\"])\n })[\"bL.useEffect\"];\n }\n }\n }[\"bL.useEffect\"], [\n g,\n m.id\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect({\n \"bL.useLayoutEffect\": ()=>{\n if (!z) return;\n let De = Ke.current, ze = De.style.height;\n De.style.height = \"auto\";\n let ce = De.getBoundingClientRect().height;\n De.style.height = ze, Ue(ce), g({\n \"bL.useLayoutEffect\": (Ee)=>Ee.find({\n \"bL.useLayoutEffect\": (Re)=>Re.toastId === m.id\n }[\"bL.useLayoutEffect\"]) ? Ee.map({\n \"bL.useLayoutEffect\": (Re)=>Re.toastId === m.id ? {\n ...Re,\n height: ce\n } : Re\n }[\"bL.useLayoutEffect\"]) : [\n {\n toastId: m.id,\n height: ce,\n position: m.position\n },\n ...Ee\n ]\n }[\"bL.useLayoutEffect\"]);\n }\n }[\"bL.useLayoutEffect\"], [\n z,\n m.title,\n m.description,\n g,\n m.id\n ]);\n let Lt = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"bL.useCallback[Lt]\": ()=>{\n X(!0), Be(oe.current), g({\n \"bL.useCallback[Lt]\": (De)=>De.filter({\n \"bL.useCallback[Lt]\": (ze)=>ze.toastId !== m.id\n }[\"bL.useCallback[Lt]\"])\n }[\"bL.useCallback[Lt]\"]), setTimeout({\n \"bL.useCallback[Lt]\": ()=>{\n I(m);\n }\n }[\"bL.useCallback[Lt]\"], hL);\n }\n }[\"bL.useCallback[Lt]\"], [\n m,\n I,\n g,\n oe\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"bL.useEffect\": ()=>{\n if (m.promise && G === \"loading\" || m.duration === 1 / 0 || m.type === \"loading\") return;\n let De;\n return x || h || j && Rt ? ({\n \"bL.useEffect\": ()=>{\n if (pe.current < ge.current) {\n let ze = new Date().getTime() - ge.current;\n he.current = he.current - ze;\n }\n pe.current = new Date().getTime();\n }\n })[\"bL.useEffect\"]() : he.current !== 1 / 0 && (ge.current = new Date().getTime(), De = setTimeout({\n \"bL.useEffect\": ()=>{\n var ze;\n (ze = m.onAutoClose) == null || ze.call(m, m), Lt();\n }\n }[\"bL.useEffect\"], he.current)), ({\n \"bL.useEffect\": ()=>clearTimeout(De)\n })[\"bL.useEffect\"];\n }\n }[\"bL.useEffect\"], [\n x,\n h,\n m,\n G,\n j,\n Rt,\n Lt\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"bL.useEffect\": ()=>{\n m.delete && Lt();\n }\n }[\"bL.useEffect\"], [\n Lt,\n m.delete\n ]);\n function gr() {\n var De, ze, ce;\n return M != null && M.loading ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: nn($?.loader, (De = m?.classNames) == null ? void 0 : De.loader, \"sonner-loader\"),\n \"data-visible\": G === \"loading\"\n }, M.loading) : E ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: nn($?.loader, (ze = m?.classNames) == null ? void 0 : ze.loader, \"sonner-loader\"),\n \"data-visible\": G === \"loading\"\n }, E) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(YN, {\n className: nn($?.loader, (ce = m?.classNames) == null ? void 0 : ce.loader),\n visible: G === \"loading\"\n });\n }\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"li\", {\n tabIndex: 0,\n ref: Ke,\n className: nn(_, K, $?.toast, (e = m?.classNames) == null ? void 0 : e.toast, $?.default, $?.[G], (o = m?.classNames) == null ? void 0 : o[G]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (n = m.richColors) != null ? n : w,\n \"data-styled\": !(m.jsx || m.unstyled || p),\n \"data-mounted\": z,\n \"data-promise\": !!m.promise,\n \"data-swiped\": le,\n \"data-removed\": U,\n \"data-visible\": we,\n \"data-y-position\": ot,\n \"data-x-position\": je,\n \"data-index\": y,\n \"data-front\": ae,\n \"data-swiping\": ue,\n \"data-dismissible\": se,\n \"data-type\": G,\n \"data-invert\": Ut,\n \"data-swipe-out\": J,\n \"data-swipe-direction\": W,\n \"data-expanded\": !!(x || B && z),\n style: {\n \"--index\": y,\n \"--toasts-before\": y,\n \"--z-index\": v.length - y,\n \"--offset\": `${U ? _e : oe.current}px`,\n \"--initial-height\": B ? \"auto\" : `${Me}px`,\n ...S,\n ...m.style\n },\n onDragEnd: ()=>{\n q(!1), V(null), be.current = null;\n },\n onPointerDown: (De)=>{\n $o || !se || (Oe.current = new Date, Be(oe.current), De.target.setPointerCapture(De.pointerId), De.target.tagName !== \"BUTTON\" && (q(!0), be.current = {\n x: De.clientX,\n y: De.clientY\n }));\n },\n onPointerUp: ()=>{\n var De, ze, ce, Ee;\n if (J || !se) return;\n be.current = null;\n let Re = Number(((De = Ke.current) == null ? void 0 : De.style.getPropertyValue(\"--swipe-amount-x\").replace(\"px\", \"\")) || 0), qe = Number(((ze = Ke.current) == null ? void 0 : ze.style.getPropertyValue(\"--swipe-amount-y\").replace(\"px\", \"\")) || 0), lt = new Date().getTime() - ((ce = Oe.current) == null ? void 0 : ce.getTime()), nt = O === \"x\" ? Re : qe, Fe = Math.abs(nt) / lt;\n if (Math.abs(nt) >= pL || Fe > .11) {\n Be(oe.current), (Ee = m.onDismiss) == null || Ee.call(m, m), Z(O === \"x\" ? Re > 0 ? \"right\" : \"left\" : qe > 0 ? \"down\" : \"up\"), Lt(), Y(!0), xe(!1);\n return;\n }\n q(!1), V(null);\n },\n onPointerMove: (De)=>{\n var ze, ce, Ee, Re;\n if (!be.current || !se || ((ze = window.getSelection()) == null ? void 0 : ze.toString().length) > 0) return;\n let qe = De.clientY - be.current.y, lt = De.clientX - be.current.x, nt = (ce = t.swipeDirections) != null ? ce : gL(k);\n !O && (Math.abs(lt) > 1 || Math.abs(qe) > 1) && V(Math.abs(lt) > Math.abs(qe) ? \"x\" : \"y\");\n let Fe = {\n x: 0,\n y: 0\n };\n O === \"y\" ? (nt.includes(\"top\") || nt.includes(\"bottom\")) && (nt.includes(\"top\") && qe < 0 || nt.includes(\"bottom\") && qe > 0) && (Fe.y = qe) : O === \"x\" && (nt.includes(\"left\") || nt.includes(\"right\")) && (nt.includes(\"left\") && lt < 0 || nt.includes(\"right\") && lt > 0) && (Fe.x = lt), (Math.abs(Fe.x) > 0 || Math.abs(Fe.y) > 0) && xe(!0), (Ee = Ke.current) == null || Ee.style.setProperty(\"--swipe-amount-x\", `${Fe.x}px`), (Re = Ke.current) == null || Re.style.setProperty(\"--swipe-amount-y\", `${Fe.y}px`);\n }\n }, ne && !m.jsx ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n \"aria-label\": L,\n \"data-disabled\": $o,\n \"data-close-button\": !0,\n onClick: $o || !se ? ()=>{} : ()=>{\n var De;\n Lt(), (De = m.onDismiss) == null || De.call(m, m);\n },\n className: nn($?.closeButton, (r = m?.classNames) == null ? void 0 : r.closeButton)\n }, (s = M?.close) != null ? s : KN) : null, m.jsx || /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(m.title) ? m.jsx ? m.jsx : typeof m.title == \"function\" ? m.title() : m.title : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, G || m.icon || m.promise ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-icon\": \"\",\n className: nn($?.icon, (i = m?.classNames) == null ? void 0 : i.icon)\n }, m.promise || m.type === \"loading\" && !m.icon ? m.icon || gr() : null, m.type !== \"loading\" ? m.icon || M?.[G] || UN(G) : null) : null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-content\": \"\",\n className: nn($?.content, (l = m?.classNames) == null ? void 0 : l.content)\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-title\": \"\",\n className: nn($?.title, (a = m?.classNames) == null ? void 0 : a.title)\n }, typeof m.title == \"function\" ? m.title() : m.title), m.description ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-description\": \"\",\n className: nn(T, fe, $?.description, (c = m?.classNames) == null ? void 0 : c.description)\n }, typeof m.description == \"function\" ? m.description() : m.description) : null), /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(m.cancel) ? m.cancel : m.cancel && lf(m.cancel) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n \"data-button\": !0,\n \"data-cancel\": !0,\n style: m.cancelButtonStyle || R,\n onClick: (De)=>{\n var ze, ce;\n lf(m.cancel) && se && ((ce = (ze = m.cancel).onClick) == null || ce.call(ze, De), Lt());\n },\n className: nn($?.cancelButton, (u = m?.classNames) == null ? void 0 : u.cancelButton)\n }, m.cancel.label) : null, /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(m.action) ? m.action : m.action && lf(m.action) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n \"data-button\": !0,\n \"data-action\": !0,\n style: m.actionButtonStyle || D,\n onClick: (De)=>{\n var ze, ce;\n lf(m.action) && ((ce = (ze = m.action).onClick) == null || ce.call(ze, De), !De.defaultPrevented && Lt());\n },\n className: nn($?.actionButton, (d = m?.classNames) == null ? void 0 : d.actionButton)\n }, m.action.label) : null));\n};\n_s2(bL, \"91F0tj/Huww9mQw5dSoDJ+dFvx0=\");\n_c19 = bL;\nfunction jw() {\n if (typeof window > \"u\" || typeof document > \"u\") return \"ltr\";\n let t = document.documentElement.getAttribute(\"dir\");\n return t === \"auto\" || !t ? window.getComputedStyle(document.documentElement).direction : t;\n}\nfunction vL(t, e) {\n let o = {};\n return [\n t,\n e\n ].forEach((n, r)=>{\n let s = r === 1, i = s ? \"--mobile-offset\" : \"--offset\", l = s ? dL : uL;\n function a(c) {\n [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ].forEach((u)=>{\n o[`${i}-${u}`] = typeof c == \"number\" ? `${c}px` : c;\n });\n }\n typeof n == \"number\" || typeof n == \"string\" ? a(n) : typeof n == \"object\" ? [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ].forEach((c)=>{\n n[c] === void 0 ? o[`${i}-${c}`] = l : o[`${i}-${c}`] = typeof n[c] == \"number\" ? `${n[c]}px` : n[c];\n }) : a(l);\n }), o;\n}\nvar $w = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(_s3(function(t, e) {\n _s3();\n let { invert: o, position: n = \"bottom-right\", hotkey: r = [\n \"altKey\",\n \"KeyT\"\n ], expand: s, closeButton: i, className: l, offset: a, mobileOffset: c, theme: u = \"light\", richColors: d, duration: f, style: m, visibleToasts: p = cL, toastOptions: h, dir: g = jw(), gap: b = fL, loadingIcon: C, icons: y, containerAriaLabel: v = \"Notifications\", pauseWhenPageIsHidden: x } = t, [I, w] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]), F = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"$w.useMemo[F]\": ()=>Array.from(new Set([\n n\n ].concat(I.filter({\n \"$w.useMemo[F]\": (j)=>j.position\n }[\"$w.useMemo[F]\"]).map({\n \"$w.useMemo[F]\": (j)=>j.position\n }[\"$w.useMemo[F]\"]))))\n }[\"$w.useMemo[F]\"], [\n I,\n n\n ]), [S, R] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]), [D, _] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [T, A] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [k, P] = react__WEBPACK_IMPORTED_MODULE_0__.useState(u !== \"system\" ? u : typeof window < \"u\" && window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\"), E = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), B = r.join(\"+\").replace(/Key/g, \"\").replace(/Digit/g, \"\"), $ = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), M = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), L = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"$w.useCallback[L]\": (j)=>{\n w({\n \"$w.useCallback[L]\": (O)=>{\n var V;\n return (V = O.find({\n \"$w.useCallback[L]\": (W)=>W.id === j.id\n }[\"$w.useCallback[L]\"])) != null && V.delete || sr.dismiss(j.id), O.filter({\n \"$w.useCallback[L]\": ({ id: W })=>W !== j.id\n }[\"$w.useCallback[L]\"]);\n }\n }[\"$w.useCallback[L]\"]);\n }\n }[\"$w.useCallback[L]\"], []);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"$w.useEffect\": ()=>sr.subscribe({\n \"$w.useEffect\": (j)=>{\n if (j.dismiss) {\n w({\n \"$w.useEffect\": (O)=>O.map({\n \"$w.useEffect\": (V)=>V.id === j.id ? {\n ...V,\n delete: !0\n } : V\n }[\"$w.useEffect\"])\n }[\"$w.useEffect\"]);\n return;\n }\n setTimeout({\n \"$w.useEffect\": ()=>{\n react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync({\n \"$w.useEffect\": ()=>{\n w({\n \"$w.useEffect\": (O)=>{\n let V = O.findIndex({\n \"$w.useEffect.V\": (W)=>W.id === j.id\n }[\"$w.useEffect.V\"]);\n return V !== -1 ? [\n ...O.slice(0, V),\n {\n ...O[V],\n ...j\n },\n ...O.slice(V + 1)\n ] : [\n j,\n ...O\n ];\n }\n }[\"$w.useEffect\"]);\n }\n }[\"$w.useEffect\"]);\n }\n }[\"$w.useEffect\"]);\n }\n }[\"$w.useEffect\"])\n }[\"$w.useEffect\"], []), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"$w.useEffect\": ()=>{\n if (u !== \"system\") {\n P(u);\n return;\n }\n if (u === \"system\" && (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? P(\"dark\") : P(\"light\")), typeof window > \"u\") return;\n let j = window.matchMedia(\"(prefers-color-scheme: dark)\");\n try {\n j.addEventListener(\"change\", {\n \"$w.useEffect\": ({ matches: O })=>{\n P(O ? \"dark\" : \"light\");\n }\n }[\"$w.useEffect\"]);\n } catch {\n j.addListener({\n \"$w.useEffect\": ({ matches: V })=>{\n try {\n P(V ? \"dark\" : \"light\");\n } catch (W) {\n console.error(W);\n }\n }\n }[\"$w.useEffect\"]);\n }\n }\n }[\"$w.useEffect\"], [\n u\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"$w.useEffect\": ()=>{\n I.length <= 1 && _(!1);\n }\n }[\"$w.useEffect\"], [\n I\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"$w.useEffect\": ()=>{\n let j = {\n \"$w.useEffect.j\": (O)=>{\n var V, W;\n r.every({\n \"$w.useEffect.j\": (Z)=>O[Z] || O.code === Z\n }[\"$w.useEffect.j\"]) && (_(!0), (V = E.current) == null || V.focus()), O.code === \"Escape\" && (document.activeElement === E.current || (W = E.current) != null && W.contains(document.activeElement)) && _(!1);\n }\n }[\"$w.useEffect.j\"];\n return document.addEventListener(\"keydown\", j), ({\n \"$w.useEffect\": ()=>document.removeEventListener(\"keydown\", j)\n })[\"$w.useEffect\"];\n }\n }[\"$w.useEffect\"], [\n r\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"$w.useEffect\": ()=>{\n if (E.current) return ({\n \"$w.useEffect\": ()=>{\n $.current && ($.current.focus({\n preventScroll: !0\n }), $.current = null, M.current = !1);\n }\n })[\"$w.useEffect\"];\n }\n }[\"$w.useEffect\"], [\n E.current\n ]), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"section\", {\n ref: e,\n \"aria-label\": `${v} ${B}`,\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: !0\n }, F.map((j, O)=>{\n var V;\n let [W, Z] = j.split(\"-\");\n return I.length ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"ol\", {\n key: j,\n dir: g === \"auto\" ? jw() : g,\n tabIndex: -1,\n ref: E,\n className: l,\n \"data-sonner-toaster\": !0,\n \"data-theme\": k,\n \"data-y-position\": W,\n \"data-lifted\": D && I.length > 1 && !s,\n \"data-x-position\": Z,\n style: {\n \"--front-toast-height\": `${((V = S[0]) == null ? void 0 : V.height) || 0}px`,\n \"--width\": `${mL}px`,\n \"--gap\": `${b}px`,\n ...m,\n ...vL(a, c)\n },\n onBlur: (z)=>{\n M.current && !z.currentTarget.contains(z.relatedTarget) && (M.current = !1, $.current && ($.current.focus({\n preventScroll: !0\n }), $.current = null));\n },\n onFocus: (z)=>{\n z.target instanceof HTMLElement && z.target.dataset.dismissible === \"false\" || M.current || (M.current = !0, $.current = z.relatedTarget);\n },\n onMouseEnter: ()=>_(!0),\n onMouseMove: ()=>_(!0),\n onMouseLeave: ()=>{\n T || _(!1);\n },\n onDragEnd: ()=>_(!1),\n onPointerDown: (z)=>{\n z.target instanceof HTMLElement && z.target.dataset.dismissible === \"false\" || A(!0);\n },\n onPointerUp: ()=>A(!1)\n }, I.filter((z)=>!z.position && O === 0 || z.position === j).map((z, Q)=>{\n var U, X;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(bL, {\n key: z.id,\n icons: y,\n index: Q,\n toast: z,\n defaultRichColors: d,\n duration: (U = h?.duration) != null ? U : f,\n className: h?.className,\n descriptionClassName: h?.descriptionClassName,\n invert: o,\n visibleToasts: p,\n closeButton: (X = h?.closeButton) != null ? X : i,\n interacting: T,\n position: j,\n style: h?.style,\n unstyled: h?.unstyled,\n classNames: h?.classNames,\n cancelButtonStyle: h?.cancelButtonStyle,\n actionButtonStyle: h?.actionButtonStyle,\n removeToast: L,\n toasts: I.filter((ue)=>ue.position == z.position),\n heights: S.filter((ue)=>ue.position == z.position),\n setHeights: R,\n expandByDefault: s,\n gap: b,\n loadingIcon: C,\n expanded: D,\n pauseWhenPageIsHidden: x,\n swipeDirections: t.swipeDirections\n });\n })) : null;\n }));\n}, \"MON7hQlugMQ41sRNdeOSeFheGzM=\"));\n\n\n\n\n\n\n\n\n\nvar Hb = (t)=>{\n _s4();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(11), { children: o } = t, [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic)(!1), [s, i] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(s), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), c;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (c = ()=>{\n a.current = setInterval(()=>{\n let g = l.current + (.93 - l.current) * Math.random() * .2 * Math.pow(Math.log(1 + (1 - l.current) * .75), .75);\n i(g), l.current = g;\n }, 250);\n }, e[0] = c) : c = e[0];\n let u = c, d, f;\n e[1] !== n ? (d = ()=>{\n i(0), l.current = 0, n ? u() : a.current && clearInterval(a.current);\n }, f = [\n n,\n u\n ], e[1] = n, e[2] = d, e[3] = f) : (d = e[2], f = e[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(d, f);\n let m;\n e[4] !== r ? (m = (g)=>{\n (0,react__WEBPACK_IMPORTED_MODULE_0__.startTransition)(()=>{\n r(!0), typeof g == \"function\" && g();\n });\n }, e[4] = r, e[5] = m) : m = e[5];\n let p = m, h;\n return e[6] !== o || e[7] !== n || e[8] !== p || e[9] !== s ? (h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Mw, {\n value: {\n isTransitioning: n,\n startRouteTransition: p,\n transitionProgress: s\n },\n children: o\n }), e[6] = o, e[7] = n, e[8] = p, e[9] = s, e[10] = h) : h = e[10], h;\n}, Mw = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n isTransitioning: !1,\n startRouteTransition: (t)=>{\n typeof t == \"function\" && t();\n },\n transitionProgress: 0\n}), Ye = ()=>react__WEBPACK_IMPORTED_MODULE_0__.use(Mw);\n_s4(Hb, \"SoK/uDW5NwUjSW56lO+ww/6XczM=\");\nvar IL = /https?|ftp|gopher|file/;\nfunction Ow(t) {\n return typeof t == \"string\" || typeof t == \"number\" && !isNaN(t) || typeof t == \"boolean\" ? String(t) : \"\";\n}\n_c20 = Ow;\nfunction _L(t) {\n let e = new URLSearchParams;\n return Object.entries(t).forEach(([o, n])=>{\n Array.isArray(n) ? n.forEach((r)=>e.append(o, Ow(r))) : e.set(o, Ow(n));\n }), e;\n}\nfunction Vw(t) {\n let { auth: e } = t, { hostname: o } = t, n = t.protocol || \"\", r = t.pathname || \"\", s = t.hash || \"\", i = t.query || \"\", l = !1;\n e = e ? encodeURIComponent(e).replace(/%3A/i, \":\") + \"@\" : \"\", t.host ? l = e + t.host : o && (l = e + (~o.indexOf(\":\") ? `[${o}]` : o), t.port && (l += \":\" + t.port)), i && typeof i == \"object\" && (i = String(_L(i)));\n let a = t.search || i && `?${i}` || \"\";\n return n && !n.endsWith(\":\") && (n += \":\"), t.slashes || (!n || IL.test(n)) && l !== !1 ? (l = \"//\" + (l || \"\"), r && r[0] !== \"/\" && (r = \"/\" + r)) : l || (l = \"\"), s && s[0] !== \"#\" && (s = \"#\" + s), a && a[0] !== \"?\" && (a = \"?\" + a), r = r.replace(/[?#]/g, encodeURIComponent), a = a.replace(\"#\", \"%23\"), `${n}${l}${r}${a}${s}`;\n}\n_c21 = Vw;\nvar DL = \"default\" in next_link_js__WEBPACK_IMPORTED_MODULE_4__ ? next_link_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"] : next_link_js__WEBPACK_IMPORTED_MODULE_4__;\nfunction RL(t) {\n let o = t.currentTarget.getAttribute(\"target\");\n return o && o !== \"_self\" || t.metaKey || t.ctrlKey || t.shiftKey || t.altKey || t.nativeEvent && t.nativeEvent.which === 2;\n}\n_c22 = RL;\nvar Qt = ({ children: t, href: e, onClick: o, preventDefault: n = !0, ref: r, replace: s, scroll: i, ...l })=>{\n let a = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { startRouteTransition: c } = Ye();\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(DL, {\n href: e,\n onClick: (u)=>{\n if (RL(u)) return;\n o && o(u), n && u.preventDefault();\n let d = typeof e == \"string\" ? e : Vw(e);\n c(()=>{\n s ? a.replace(d, {\n scroll: i\n }) : a.push(d, {\n scroll: i\n });\n });\n },\n ref: r,\n ...l,\n children: t\n });\n};\n_c23 = Qt;\nvar Ni = \"banner\", sn = ({ type: t = \"default\", alignIcon: e = \"right\", children: o, className: n, icon: r, onClick: s, to: i })=>{\n let l = [\n Ni,\n `${Ni}--type-${t}`,\n n && n,\n i && `${Ni}--has-link`,\n (i || s) && `${Ni}--has-action`,\n r && `${Ni}--has-icon`,\n r && `${Ni}--align-icon-${e}`\n ].filter(Boolean).join(\" \"), a = \"div\";\n return s && !i && (a = \"button\"), i && (a = Qt), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(a, {\n className: l,\n href: i || null,\n onClick: s,\n children: [\n r && e === \"left\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: r\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Ni}__content`,\n children: o\n }),\n r && e === \"right\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: r\n })\n ]\n });\n};\n\n\n\n\nvar He = ({ ariaLabel: t, className: e, direction: o, size: n })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n \"aria-label\": t,\n className: [\n \"icon icon--chevron\",\n e,\n n && `icon--size-${n}`\n ].filter(Boolean).join(\" \"),\n height: \"100%\",\n style: {\n transform: o === \"left\" ? \"rotate(90deg)\" : o === \"right\" ? \"rotate(-90deg)\" : o === \"up\" ? \"rotate(180deg)\" : void 0\n },\n viewBox: \"0 0 20 20\",\n width: \"100%\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M14 8L10 12L6 8\",\n strokeLinecap: \"square\"\n })\n });\n_c24 = He;\n\n\nvar vr = ({ className: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: [\n t,\n \"icon icon--edit\"\n ].filter(Boolean).join(\" \"),\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M9.68531 4.62938H5.2634C4.92833 4.62938 4.60698 4.76248 4.37004 4.99942C4.13311 5.23635 4 5.5577 4 5.89278V14.7366C4 15.0717 4.13311 15.393 4.37004 15.63C4.60698 15.8669 4.92833 16 5.2634 16H14.1072C14.4423 16 14.7636 15.8669 15.0006 15.63C15.2375 15.393 15.3706 15.0717 15.3706 14.7366V10.3147M13.7124 4.39249C13.9637 4.14118 14.3046 4 14.66 4C15.0154 4 15.3562 4.14118 15.6075 4.39249C15.8588 4.6438 16 4.98464 16 5.34004C16 5.69544 15.8588 6.03629 15.6075 6.28759L9.91399 11.9817C9.76399 12.1316 9.57868 12.2413 9.37515 12.3008L7.56027 12.8314C7.50591 12.8472 7.44829 12.8482 7.39344 12.8341C7.33859 12.8201 7.28853 12.7915 7.24849 12.7515C7.20845 12.7115 7.17991 12.6614 7.16586 12.6066C7.15181 12.5517 7.15276 12.4941 7.16861 12.4397L7.69924 10.6249C7.75896 10.4215 7.86888 10.2364 8.01888 10.0866L13.7124 4.39249Z\",\n strokeLinecap: \"square\"\n })\n });\n\n\nvar Yb = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n \"aria-hidden\": \"true\",\n className: \"graphic link icon icon--link\",\n fill: \"none\",\n focusable: \"false\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M7.99999 13.3333H6.66666C5.78261 13.3333 4.93476 12.9821 4.30964 12.357C3.68452 11.7319 3.33333 10.884 3.33333 9.99999C3.33333 9.11593 3.68452 8.26809 4.30964 7.64297C4.93476 7.01785 5.78261 6.66666 6.66666 6.66666H7.99999M12 6.66666H13.3333C14.2174 6.66666 15.0652 7.01785 15.6904 7.64297C16.3155 8.26809 16.6667 9.11593 16.6667 9.99999C16.6667 10.884 16.3155 11.7319 15.6904 12.357C15.0652 12.9821 14.2174 13.3333 13.3333 13.3333H12M7.33333 9.99999H12.6667\",\n strokeLinecap: \"square\"\n })\n });\n_c25 = Yb;\n\n\nvar ar = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--plus\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M5.33333 9.99998H14.6667M9.99999 5.33331V14.6666\",\n strokeLinecap: \"square\"\n })\n });\n\n\nvar Zb = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--swap\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M7.33334 4L4.66667 6.66667M4.66667 6.66667L7.33334 9.33333M4.66667 6.66667H15.3333M12.6667 16L15.3333 13.3333M15.3333 13.3333L12.6667 10.6667M15.3333 13.3333H4.66667\",\n strokeLinecap: \"square\"\n })\n });\n_c26 = Zb;\n\nvar ve = {};\n(0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.d)(ve, {\n Button: ()=>qb,\n ButtonGroup: ()=>Jb,\n Divider: ()=>Yw,\n GroupLabel: ()=>Zw\n});\n\n\n\n\nvar EL = \"popup-divider\", Yw = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"hr\", {\n className: EL\n });\n\n\nvar LL = \"popup-list-group-label\", Zw = ({ label: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: LL,\n children: t\n });\nvar el = \"popup-button-list\", Jb = ({ buttonSize: t = \"default\", children: e, className: o, textAlign: n = \"left\" })=>{\n let r = [\n el,\n o,\n `${el}__text-align--${n}`,\n `${el}__button-size--${t}`\n ].filter(Boolean).join(\" \");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: r,\n children: e\n });\n}, qb = ({ id: t, active: e, children: o, className: n, disabled: r, href: s, onClick: i })=>{\n let l = [\n `${el}__button`,\n r && `${el}__disabled`,\n e && `${el}__button--selected`,\n n\n ].filter(Boolean).join(\" \");\n if (!r) {\n if (s) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qt, {\n className: l,\n href: s,\n id: t,\n onClick: (a)=>{\n i && i(a);\n },\n prefetch: !1,\n children: o\n });\n if (i) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: l,\n id: t,\n onClick: (a)=>{\n i && i(a);\n },\n type: \"button\",\n children: o\n });\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: l,\n id: t,\n children: o\n });\n};\n\n\n\nvar Qe = \"useEffectEvent\" in react__WEBPACK_IMPORTED_MODULE_0__ && typeof react__WEBPACK_IMPORTED_MODULE_0__.useEffectEvent == \"function\" ? react__WEBPACK_IMPORTED_MODULE_0__.useEffectEvent : (t)=>{\n let e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(t);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useInsertionEffect)(()=>{\n e.current = t;\n }, [\n t\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((...o)=>{\n let n = e.current;\n return n(...o);\n }, []);\n};\n\n\nvar Gc = \"popup-button\", qw = (t)=>{\n let { active: e, button: o, buttonType: n, className: r, disabled: s, noBackground: i, setActive: l, size: a } = t, c = [\n Gc,\n r,\n `${Gc}--${n}`,\n !i && `${Gc}--background`,\n a && `${Gc}--size-${a}`,\n s && `${Gc}--disabled`\n ].filter(Boolean).join(\" \"), u = ()=>{\n l(!e, !1);\n }, d = (f)=>{\n (f.key === \"Enter\" || f.key === \" \") && (f.preventDefault(), l(!e, !0));\n };\n return n === \"none\" ? null : n === \"custom\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: c,\n onClick: u,\n onKeyDown: d,\n role: \"button\",\n tabIndex: 0,\n children: o\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: c,\n disabled: s,\n onClick: u,\n onKeyDown: d,\n tabIndex: 0,\n type: \"button\",\n children: o\n });\n};\nvar an = \"popup\", Qw = [\n \"a[href]\",\n \"button:not(:disabled)\",\n 'input:not(:disabled):not([type=\"hidden\"])',\n \"select:not(:disabled)\",\n \"textarea:not(:disabled)\",\n \"[tabindex]\",\n '[contenteditable]:not([contenteditable=\"false\"])',\n \"audio[controls]\",\n \"video[controls]\",\n \"summary\"\n].map((t)=>`${t}:not([tabindex=\"-1\"])`).join(\", \"), st = (t)=>{\n let { id: e, button: o, buttonClassName: n, buttonSize: r, buttonType: s = \"default\", caret: i = !0, children: l, className: a, disabled: c, forceOpen: u, horizontalAlign: d = \"left\", initActive: f = !1, noBackground: m, onToggleClose: p, onToggleOpen: h, portalClassName: g, render: b, showOnHover: C = !1, showScrollbar: y = !1, size: v = \"medium\", verticalAlign: x = \"bottom\" } = t, I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), [S, R] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [D, _] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(f), [T, A] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(x === \"top\");\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n R(!0);\n }, []);\n let k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L, j = !1)=>{\n L ? (F.current = j, h?.(!0)) : p?.(), _(L);\n }, [\n p,\n h\n ]), P = Qe(()=>{\n let L = w.current, j = I.current;\n if (!L || !j) return;\n let O = L.getBoundingClientRect(), V = j.getBoundingClientRect(), W = 10, Z, z = x === \"top\";\n x === \"bottom\" ? (Z = O.bottom + window.scrollY + W, O.bottom + V.height + W > window.innerHeight && (Z = O.top + window.scrollY - V.height - W, z = !0)) : (Z = O.top + window.scrollY - V.height - W, O.top - V.height - W < 0 && (Z = O.bottom + window.scrollY + W, z = !1)), A(z);\n let Q = d === \"right\" ? O.right - V.width : d === \"center\" ? O.left + O.width / 2 - V.width / 2 : O.left;\n Q = Math.max(W, Math.min(Q, window.innerWidth - V.width - W));\n let U = O.left + O.width / 2, X = Math.max(12, Math.min(U - Q, V.width - 12)), ue = `${Math.round(Z)}px`, q = `${Math.round(Q + window.scrollX)}px`, J = `${Math.round(X)}px`;\n j.style.top !== ue && (j.style.top = ue), j.style.left !== q && (j.style.left = q), j.style.getPropertyValue(\"--caret-left\") !== J && j.style.setProperty(\"--caret-left\", J);\n }), E = Qe((L)=>{\n let j = !I.current?.contains(L.target), O = !w.current?.contains(L.target);\n j && O && k(!1);\n }), B = Qe((L)=>{\n let j = I.current;\n if (!(!j || !D)) {\n if (L.key === \"Escape\") {\n L.preventDefault(), k(!1), w.current?.querySelector('button, [tabindex=\"0\"]')?.focus();\n return;\n }\n if (L.key === \"Tab\" || L.key === \"ArrowDown\" || L.key === \"ArrowUp\") {\n let O = Array.from(j.querySelectorAll(Qw));\n if (O.length === 0) return;\n L.preventDefault();\n let V = O.findIndex((z)=>z === document.activeElement), W = L.key === \"ArrowUp\" || L.key === \"Tab\" && L.shiftKey, Z;\n V === -1 ? Z = W ? O.length - 1 : 0 : W ? Z = V === 0 ? O.length - 1 : V - 1 : Z = V === O.length - 1 ? 0 : V + 1, O[Z].focus();\n }\n }\n }), $ = Qe((L)=>{\n let j = L.target;\n if (j.closest(\"[data-popup-prevent-close]\")) return;\n let O = j.closest('button, a[href], [role=\"button\"], [role=\"menuitem\"]');\n O && I.current?.contains(O) && k(!1);\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (!D) return;\n let L = I.current;\n if (L) return P(), F.current && requestAnimationFrame(()=>{\n L.querySelector(Qw)?.focus();\n }), window.addEventListener(\"resize\", P), window.addEventListener(\"scroll\", P, {\n capture: !0,\n passive: !0\n }), document.addEventListener(\"mousedown\", E), document.addEventListener(\"keydown\", B), L.addEventListener(\"click\", $), ()=>{\n window.removeEventListener(\"resize\", P), window.removeEventListener(\"scroll\", P, {\n capture: !0\n }), document.removeEventListener(\"mousedown\", E), document.removeEventListener(\"keydown\", B), L.removeEventListener(\"click\", $);\n };\n }, [\n D\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n u !== void 0 && k(u);\n }, [\n u,\n k\n ]);\n let M = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(qw, {\n active: D,\n button: o,\n buttonType: s,\n className: n,\n disabled: c,\n noBackground: m,\n setActive: k,\n size: r\n });\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n an,\n a\n ].filter(Boolean).join(\" \"),\n id: e,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${an}__trigger-wrap`,\n ref: w,\n children: C ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${an}__on-hover-watch`,\n onMouseEnter: ()=>k(!0),\n onMouseLeave: ()=>k(!1),\n role: \"button\",\n tabIndex: 0,\n children: M\n }) : M\n }),\n S ? /*#__PURE__*/ (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: D ? [\n `${an}__content`,\n `${an}--size-${v}`,\n T ? `${an}--v-top` : `${an}--v-bottom`,\n g\n ].filter(Boolean).join(\" \") : `${an}__hidden-content`,\n \"data-popup-id\": e || void 0,\n ref: I,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${an}__scroll-container${y ? ` ${an}__scroll-container--show-scrollbar` : \"\"}`,\n children: [\n b?.({\n close: ()=>k(!1)\n }),\n l\n ]\n }),\n i && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${an}__caret`\n })\n ]\n }), document.body) : null\n ]\n });\n};\n\n\n\n\nvar Li = (t, e)=>{\n let o = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { root: n, rootMargin: r, threshold: s } = t === void 0 ? {} : t, i = n === void 0 ? null : n, l = r === void 0 ? \"0px\" : r, a = s === void 0 ? 0 : s, [c, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [d, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(typeof window < \"u\" && \"IntersectionObserver\" in window && !e ? new window.IntersectionObserver((b)=>{\n let [C] = b;\n return u(C);\n }, {\n root: i,\n rootMargin: l,\n threshold: a\n }) : null), p, h;\n o[0] !== e || o[1] !== d ? (p = ()=>{\n if (e) return;\n let { current: b } = m;\n return b.disconnect(), d && b.observe(d), ()=>b.disconnect();\n }, h = [\n d,\n e\n ], o[0] = e, o[1] = d, o[2] = p, o[3] = h) : (p = o[2], h = o[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(p, h);\n let g;\n return o[4] !== c || o[5] !== d || o[6] !== f ? (g = [\n f,\n c,\n d\n ], o[4] = c, o[5] = d, o[6] = f, o[7] = g) : g = o[7], g;\n};\n_c27 = Li;\nvar Ro = (t)=>{\n _s5();\n let { alignCaret: e = \"center\", boundingRef: o, children: n, className: r, delay: s = 350, position: i, show: l = !0, staticPositioning: a = !1 } = t, [c, u] = react__WEBPACK_IMPORTED_MODULE_0__.useState(l), [d, f] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\"top\"), m = (g)=>typeof g == \"string\" ? g : \"\", [p, h] = Li({\n root: o?.current || null,\n rootMargin: \"-145px 0px 0px 100px\",\n threshold: 0\n }, a);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let g;\n return s && l ? g = setTimeout(()=>{\n u(l);\n }, s) : u(l), ()=>{\n g && clearTimeout(g);\n };\n }, [\n l,\n s\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n a || f(h?.isIntersecting ? \"top\" : \"bottom\");\n }, [\n h,\n a\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n !a && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"aside\", {\n \"aria-hidden\": \"true\",\n className: [\n \"tooltip\",\n r,\n `tooltip--caret-${e}`,\n \"tooltip--position-top\"\n ].filter(Boolean).join(\" \"),\n ref: p,\n style: {\n opacity: \"0\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"tooltip-content\",\n children: n\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"aside\", {\n className: [\n \"tooltip\",\n r,\n c && \"tooltip--show\",\n `tooltip--caret-${e}`,\n `tooltip--position-${i || d}`\n ].filter(Boolean).join(\" \"),\n title: m(n),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"tooltip-content\",\n children: n\n })\n })\n ]\n });\n};\n_s5(Ro, \"/JFwkRUqIRUbgK3AB7m85jcjG9o=\");\n_c28 = Ro;\nvar XL = {\n chevron: He,\n edit: vr,\n link: Yb,\n plus: ar,\n swap: Zb,\n x: _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a\n}, Co = \"btn\", mf = ({ children: t, icon: e, showTooltip: o, tooltip: n })=>{\n let r = XL[e];\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n n && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ro, {\n className: `${Co}__tooltip`,\n show: o,\n children: n\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: `${Co}__content`,\n children: [\n t && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Co}__label`,\n children: t\n }),\n e && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: `${Co}__icon`,\n children: [\n /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(e) && e,\n r && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(r, {})\n ]\n })\n ]\n })\n ]\n });\n}, re = (t)=>{\n _s6();\n let { id: e, type: o = \"button\", \"aria-label\": n, buttonStyle: r = \"primary\", children: s, className: i, disabled: l, el: a = \"button\", enableSubMenu: c, extraButtonProps: u = {}, icon: d, iconPosition: f = \"right\", iconStyle: m = \"without-border\", margin: p = !0, newTab: h, onClick: g, onMouseDown: b, ref: C, round: y, size: v = \"medium\", SubMenuPopupContent: x, to: I, tooltip: w, url: F } = t, [S, R] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), D = [\n Co,\n i && i,\n d && `${Co}--icon`,\n m && `${Co}--icon-style-${m}`,\n d && !s && `${Co}--icon-only`,\n v && `${Co}--size-${v}`,\n d && f && `${Co}--icon-position-${f}`,\n w && `${Co}--has-tooltip`,\n !x && `${Co}--withoutPopup`,\n !p && `${Co}--no-margin`\n ].filter(Boolean).join(\" \");\n function _(P) {\n R(!1), o !== \"submit\" && g && P.preventDefault(), g && g(P);\n }\n let T = [\n r && `${Co}--style-${r}`,\n l && `${Co}--disabled`,\n y && `${Co}--round`,\n x ? `${Co}--withPopup` : `${Co}--withoutPopup`\n ].filter(Boolean).join(\" \"), A = {\n id: e,\n type: o,\n \"aria-disabled\": l,\n \"aria-label\": n,\n className: x ? D : [\n D,\n T\n ].join(\" \"),\n disabled: l,\n onClick: l ? void 0 : _,\n onMouseDown: l ? void 0 : b,\n onPointerEnter: w ? ()=>R(!0) : void 0,\n onPointerLeave: w ? ()=>R(!1) : void 0,\n rel: h ? \"noopener noreferrer\" : void 0,\n target: h ? \"_blank\" : void 0,\n title: n,\n ...u\n }, k;\n switch(a){\n case \"anchor\":\n k = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"a\", {\n ...A,\n href: l ? void 0 : F,\n ref: C,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(mf, {\n icon: d,\n showTooltip: S,\n tooltip: w,\n children: s\n })\n });\n break;\n case \"link\":\n l && (k = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n ...A,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(mf, {\n icon: d,\n showTooltip: S,\n tooltip: w,\n children: s\n })\n })), k = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qt, {\n ...A,\n href: I || F,\n prefetch: !1,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(mf, {\n icon: d,\n showTooltip: S,\n tooltip: w,\n children: s\n })\n });\n break;\n default:\n k = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(a, {\n ref: C,\n ...A,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(mf, {\n icon: d,\n showTooltip: S,\n tooltip: w,\n children: s\n })\n });\n break;\n }\n return x ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: T,\n children: [\n k,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {}),\n buttonSize: v,\n className: l && !c ? `${Co}--popup-disabled` : \"\",\n disabled: l && !c,\n horizontalAlign: \"right\",\n id: `${e}-popup`,\n noBackground: !0,\n render: ({ close: P })=>x({\n close: ()=>P()\n }),\n size: \"large\",\n verticalAlign: \"bottom\"\n })\n ]\n }) : k;\n};\n_s6(re, \"P8DojlAzCDRIoEz/oF4pzhIgecc=\");\n\nfunction r2({ data: t, path: e, ...o }) {\n return typeof t > \"u\" || !e || !o.type ? !1 : o.type === \"blocks\" ? YL({\n blocksFromClipboard: o.blocks,\n blocksFromConfig: o.schemaBlocks\n }) : n1({\n fieldsFromClipboard: o.fields,\n fieldsFromConfig: o.schemaFields\n });\n}\nfunction n1({ fieldsFromClipboard: t, fieldsFromConfig: e }) {\n return !e || t.length !== e?.length ? !1 : t.every((o, n)=>{\n let r = e[n];\n if (o.type !== r.type || (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(o) && (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(r) && o.name !== r.name) return !1;\n let i = (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldHasSubFields)(r), l = (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldHasSubFields)(o);\n return l !== i ? !1 : l && i ? n1({\n fieldsFromClipboard: o.fields,\n fieldsFromConfig: r.fields\n }) : !0;\n });\n}\nfunction YL({ blocksFromClipboard: t, blocksFromConfig: e }) {\n let o = new Map(e?.map((r)=>[\n r.slug,\n r\n ]));\n if (!o.size) return !1;\n let n = new Set;\n for (let r of t){\n let s = r.slug;\n if (!n.has(s)) {\n let i = o.get(s);\n if (!i || !n1({\n fieldsFromClipboard: r.fields,\n fieldsFromConfig: i.fields\n })) return !1;\n n.add(s);\n }\n }\n return !0;\n}\n_c29 = YL;\nvar n2 = \"_payloadClipboard\";\nfunction tl(t) {\n let { getDataToCopy: e, t: o, ...n } = t, r = {\n data: e(),\n ...n\n };\n try {\n return localStorage.setItem(n2, JSON.stringify(r)), !0;\n } catch {\n return o(\"error:unableToCopy\");\n }\n}\nfunction ol({ onPaste: t, path: e, t: o, ...n }) {\n let r;\n try {\n let i = localStorage.getItem(n2);\n if (!i) return o(\"error:invalidClipboardData\");\n r = JSON.parse(i);\n } catch {\n return o(\"error:invalidClipboardData\");\n }\n let s = {\n ...r,\n ...n,\n fieldPath: e\n };\n return r2(s) ? (t(r), !0) : o(\"error:invalidClipboardData\");\n}\n\n\n\n\nvar zc = ({ className: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n className: [\n \"icon icon--more\",\n t\n ].filter(Boolean).join(\" \"),\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M10 10.6666C10.3682 10.6666 10.6667 10.3682 10.6667 9.99998C10.6667 9.63179 10.3682 9.33331 10 9.33331C9.63182 9.33331 9.33334 9.63179 9.33334 9.99998C9.33334 10.3682 9.63182 10.6666 10 10.6666Z\",\n strokeLinecap: \"square\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M14.6667 10.6666C15.0349 10.6666 15.3333 10.3682 15.3333 9.99998C15.3333 9.63179 15.0349 9.33331 14.6667 9.33331C14.2985 9.33331 14 9.63179 14 9.99998C14 10.3682 14.2985 10.6666 14.6667 10.6666Z\",\n strokeLinecap: \"square\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M5.33334 10.6666C5.70153 10.6666 6.00001 10.3682 6.00001 9.99998C6.00001 9.63179 5.70153 9.33331 5.33334 9.33331C4.96515 9.33331 4.66667 9.63179 4.66667 9.99998C4.66667 10.3682 4.96515 10.6666 5.33334 10.6666Z\",\n strokeLinecap: \"square\"\n })\n ]\n });\n\n\n\n\n\nvar ki = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--copy\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M4.66666 12.6667C3.93333 12.6667 3.33333 12.0667 3.33333 11.3333V4.66668C3.33333 3.93334 3.93333 3.33334 4.66666 3.33334H11.3333C12.0667 3.33334 12.6667 3.93334 12.6667 4.66668M8.66666 7.33334H15.3333C16.0697 7.33334 16.6667 7.9303 16.6667 8.66668V15.3333C16.6667 16.0697 16.0697 16.6667 15.3333 16.6667H8.66666C7.93028 16.6667 7.33333 16.0697 7.33333 15.3333V8.66668C7.33333 7.9303 7.93028 7.33334 8.66666 7.33334Z\",\n strokeLinecap: \"square\"\n })\n });\nvar rl = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { isPaste: o, isRow: n } = t, { t: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), s;\n if (e[0] !== o || e[1] !== n || e[2] !== r) {\n let i = r(\"general:copyField\");\n !n && o ? i = r(\"general:pasteField\") : n && !o ? i = r(\"general:copyRow\") : n && o && (i = r(\"general:pasteRow\")), s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vr, {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ki, {}),\n \" \",\n i\n ]\n }), e[0] = o, e[1] = n, e[2] = r, e[3] = s;\n } else s = e[3];\n return s;\n};\nvar e9 = \"clipboard-action\", pf = ({ allowCopy: t, allowPaste: e, className: o, copyClassName: n, disabled: r, isRow: s, onPaste: i, pasteClassName: l, path: a, ...c })=>{\n let { t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), d = [\n `${e9}__popup`,\n o\n ].filter(Boolean).join(\" \"), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n let p = tl({\n path: a,\n t: u,\n ...c\n });\n typeof p == \"string\" ? ee.error(p) : ee.success(u(\"general:copied\"));\n }, [\n u,\n c,\n a\n ]), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n let p = ol(c.type === \"array\" ? {\n onPaste: i,\n path: a,\n schemaFields: c.fields,\n t: u\n } : {\n onPaste: i,\n path: a,\n schemaBlocks: c.blocks,\n t: u\n });\n typeof p == \"string\" && ee.error(p);\n }, [\n i,\n c,\n a,\n u\n ]);\n return !e && !t ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zc, {}),\n className: d,\n disabled: r,\n horizontalAlign: \"center\",\n render: ({ close: p })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.ButtonGroup, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n className: n,\n disabled: !t,\n onClick: ()=>{\n f(), p();\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rl, {\n isRow: s\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n className: l,\n disabled: !e,\n onClick: ()=>{\n m(), p();\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rl, {\n isPaste: !0,\n isRow: s\n })\n })\n ]\n }),\n size: \"large\",\n verticalAlign: \"bottom\"\n });\n};\nvar bf = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(gf(), 1), p2 = \"default\" in bf.default ? bf.default.default : bf.default;\nfunction sl({ formState: t, path: e, rowIndex: o }) {\n let n = {}, r = typeof o != \"number\" ? e : `${e}.${o}`;\n for(let s in t){\n if (!s.startsWith(r)) continue;\n let { customComponents: i, validate: l, ...a } = t[s];\n Array.isArray(a.rows) && (a.rows = a.rows.map((c)=>{\n if (!c || typeof c != \"object\") return c;\n let { customComponents: u, ...d } = c;\n return d;\n })), n[s] = a;\n }\n return n;\n}\nfunction il({ dataFromClipboard: t, formState: e, path: o, rowIndex: n }) {\n let { type: r, data: s, path: i, rowIndex: l } = t, a = typeof l != \"number\", c = typeof n != \"number\", u = !a && c, d = r === \"array\", f;\n a && c ? f = i : a ? f = `${i}.${n}` : f = `${i}.${l}`;\n let m;\n if (c ? u ? m = `${o}.0` : m = o : m = `${o}.${n}`, u) {\n let h = `${o}.0`, g = s[`${f}.id`]?.value, b = e[o].rows?.length;\n e[o].rows = [\n {\n ...b && d ? e[o].rows[0] : {},\n id: g,\n isLoading: !1,\n lastRenderedPath: h\n }\n ], e[o].value = 1, e[o].initialValue = 1, e[o].disableFormData = !0;\n for(let C in e)C !== o && !C.startsWith(h) && C.startsWith(o) && delete e[C];\n }\n let p = new Map;\n for(let h in s){\n if (!c && h === `${f}.id` || !h.startsWith(f)) continue;\n let g = h.replace(f, m), b = d ? e[g]?.customComponents : void 0, C = d ? e[g]?.validate : void 0;\n if (h.endsWith(\".id\") && s[h]?.value) {\n let y = s[h].value;\n if (typeof y == \"string\" && p2.isValid(y)) {\n let v = new p2().toHexString();\n p.set(h, v), e[g] = {\n customComponents: b,\n validate: C,\n ...s[h],\n initialValue: v,\n value: v\n };\n continue;\n }\n }\n e[g] = {\n customComponents: b,\n validate: C,\n ...s[h]\n };\n }\n for (let [h, g] of p){\n let C = h.replace(`${f}.`, \"\").split(\".\");\n if (C.length >= 2) {\n let y = parseInt(C[C.length - 2], 10), v = C.slice(0, C.length - 2).join(\".\"), x = v ? `${m}.${v}` : m;\n if (e[x] && Array.isArray(e[x].rows)) {\n let I = e[x].rows;\n !isNaN(y) && I[y] && (I[y].id = g);\n }\n } else if (C.length === 1 && C[0] === \"id\") {\n let y = m.split(\".\"), v = y[y.length - 1], x = isNaN(parseInt(v, 10)) ? 0 : parseInt(v, 10), I = isNaN(parseInt(v, 10)) ? m : y.slice(0, -1).join(\".\");\n if (e[I] && Array.isArray(e[I].rows)) {\n let w = e[I].rows;\n w[x] && (w[x].id = g);\n }\n }\n }\n return e;\n}\n\n\n\n\n\n\n\nfunction g2() {\n for(var t = arguments.length, e = new Array(t), o = 0; o < t; o++)e[o] = arguments[o];\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(n)=>{\n e.forEach((r)=>r(n));\n }, e);\n}\nvar i9 = typeof window < \"u\" && typeof window.document < \"u\" && typeof window.document.createElement < \"u\";\nfunction a9(t) {\n let e = Object.prototype.toString.call(t);\n return e === \"[object Window]\" || e === \"[object global]\";\n}\nfunction l9(t) {\n return \"nodeType\" in t;\n}\nfunction b2(t) {\n var e, o;\n return t ? a9(t) ? t : l9(t) && (e = (o = t.ownerDocument) == null ? void 0 : o.defaultView) != null ? e : window : window;\n}\nvar l1 = i9 ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\nvar a1 = {};\nfunction v2(t, e) {\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n if (e) return e;\n let o = a1[t] == null ? 0 : a1[t] + 1;\n return a1[t] = o, t + \"-\" + o;\n }, [\n t,\n e\n ]);\n}\nfunction c9(t) {\n return function(e) {\n for(var o = arguments.length, n = new Array(o > 1 ? o - 1 : 0), r = 1; r < o; r++)n[r - 1] = arguments[r];\n return n.reduce((s, i)=>{\n let l = Object.entries(i);\n for (let [a, c] of l){\n let u = s[a];\n u != null && (s[a] = u + t * c);\n }\n return s;\n }, {\n ...e\n });\n };\n}\nvar y2 = c9(-1);\nfunction u9(t) {\n return \"clientX\" in t && \"clientY\" in t;\n}\nfunction C2(t) {\n if (!t) return !1;\n let { KeyboardEvent: e } = b2(t.target);\n return e && t instanceof e;\n}\n_c30 = C2;\nfunction d9(t) {\n if (!t) return !1;\n let { TouchEvent: e } = b2(t.target);\n return e && t instanceof e;\n}\nfunction x2(t) {\n if (d9(t)) {\n if (t.touches && t.touches.length) {\n let { clientX: e, clientY: o } = t.touches[0];\n return {\n x: e,\n y: o\n };\n } else if (t.changedTouches && t.changedTouches.length) {\n let { clientX: e, clientY: o } = t.changedTouches[0];\n return {\n x: e,\n y: o\n };\n }\n }\n return u9(t) ? {\n x: t.clientX,\n y: t.clientY\n } : null;\n}\nvar Hc = Object.freeze({\n Translate: {\n toString (t) {\n if (!t) return;\n let { x: e, y: o } = t;\n return \"translate3d(\" + (e ? Math.round(e) : 0) + \"px, \" + (o ? Math.round(o) : 0) + \"px, 0)\";\n }\n },\n Scale: {\n toString (t) {\n if (!t) return;\n let { scaleX: e, scaleY: o } = t;\n return \"scaleX(\" + e + \") scaleY(\" + o + \")\";\n }\n },\n Transform: {\n toString (t) {\n if (t) return [\n Hc.Translate.toString(t),\n Hc.Scale.toString(t)\n ].join(\" \");\n }\n },\n Transition: {\n toString (t) {\n let { property: e, duration: o, easing: n } = t;\n return e + \" \" + o + \"ms \" + n;\n }\n }\n});\nfunction wf(t, e, o) {\n let n = t.slice();\n return n.splice(o < 0 ? n.length + o : o, 0, n.splice(e, 1)[0]), n;\n}\nfunction x9(t, e) {\n return t.reduce((o, n, r)=>{\n let s = e.get(n);\n return s && (o[r] = s), o;\n }, Array(t.length));\n}\nfunction vf(t) {\n return t !== null && t >= 0;\n}\nfunction w9(t, e) {\n if (t === e) return !0;\n if (t.length !== e.length) return !1;\n for(let o = 0; o < t.length; o++)if (t[o] !== e[o]) return !1;\n return !0;\n}\nfunction S9(t) {\n return typeof t == \"boolean\" ? {\n draggable: t,\n droppable: t\n } : t;\n}\n_c31 = S9;\nvar S2 = (t)=>{\n let { rects: e, activeIndex: o, overIndex: n, index: r } = t, s = wf(e, n, o), i = e[r], l = s[r];\n return !l || !i ? null : {\n x: l.left - i.left,\n y: l.top - i.top,\n scaleX: l.width / i.width,\n scaleY: l.height / i.height\n };\n};\n_c32 = S2;\nvar I2 = \"Sortable\", _2 = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n activeIndex: -1,\n containerId: I2,\n disableTransforms: !1,\n items: [],\n overIndex: -1,\n useDragOverlay: !1,\n sortedRects: [],\n strategy: S2,\n disabled: {\n draggable: !1,\n droppable: !1\n }\n});\nfunction T2(t) {\n let { children: e, id: o, items: n, strategy: r = S2, disabled: s = !1 } = t, { active: i, dragOverlay: l, droppableRects: a, over: c, measureDroppableContainers: u } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDndContext)(), d = v2(I2, o), f = l.rect !== null, m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>n.map((I)=>typeof I == \"object\" && \"id\" in I ? I.id : I), [\n n\n ]), p = i != null, h = i ? m.indexOf(i.id) : -1, g = c ? m.indexOf(c.id) : -1, b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(m), C = !w9(m, b.current), y = g !== -1 && h === -1 || C, v = S9(s);\n l1(()=>{\n C && p && u(m);\n }, [\n C,\n m,\n p,\n u\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n b.current = m;\n }, [\n m\n ]);\n let x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({\n activeIndex: h,\n containerId: d,\n disabled: v,\n disableTransforms: y,\n items: m,\n overIndex: g,\n useDragOverlay: f,\n sortedRects: x9(m, a),\n strategy: r\n }), [\n h,\n d,\n v.draggable,\n v.droppable,\n y,\n m,\n g,\n a,\n f,\n r\n ]);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_2.Provider, {\n value: x\n }, e);\n}\n_c33 = T2;\nvar I9 = (t)=>{\n let { id: e, items: o, activeIndex: n, overIndex: r } = t;\n return wf(o, n, r).indexOf(e);\n}, _9 = (t)=>{\n let { containerId: e, isSorting: o, wasDragging: n, index: r, items: s, newIndex: i, previousItems: l, previousContainerId: a, transition: c } = t;\n return !c || !n || l !== s && r === i ? !1 : o ? !0 : i !== r && e === a;\n}, T9 = {\n duration: 200,\n easing: \"ease\"\n}, F2 = \"transform\", F9 = Hc.Transition.toString({\n property: F2,\n duration: 0,\n easing: \"linear\"\n}), D9 = {\n roleDescription: \"sortable\"\n};\nfunction R9(t) {\n let { disabled: e, index: o, node: n, rect: r } = t, [s, i] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(o);\n return l1(()=>{\n if (!e && o !== l.current && n.current) {\n let a = r.current;\n if (a) {\n let c = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.getClientRect)(n.current, {\n ignoreTransform: !0\n }), u = {\n x: a.left - c.left,\n y: a.top - c.top,\n scaleX: a.width / c.width,\n scaleY: a.height / c.height\n };\n (u.x || u.y) && i(u);\n }\n }\n o !== l.current && (l.current = o);\n }, [\n e,\n o,\n n,\n r\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n s && i(null);\n }, [\n s\n ]), s;\n}\n_c34 = R9;\nfunction D2(t) {\n let { animateLayoutChanges: e = _9, attributes: o, disabled: n, data: r, getNewIndex: s = I9, id: i, strategy: l, resizeObserverConfig: a, transition: c = T9 } = t, { items: u, containerId: d, activeIndex: f, disabled: m, disableTransforms: p, sortedRects: h, overIndex: g, useDragOverlay: b, strategy: C } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_2), y = A9(n, m), v = u.indexOf(i), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({\n sortable: {\n containerId: d,\n index: v,\n items: u\n },\n ...r\n }), [\n d,\n r,\n v,\n u\n ]), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>u.slice(u.indexOf(i)), [\n u,\n i\n ]), { rect: w, node: F, isOver: S, setNodeRef: R } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDroppable)({\n id: i,\n data: x,\n disabled: y.droppable,\n resizeObserverConfig: {\n updateMeasurementsFor: I,\n ...a\n }\n }), { active: D, activatorEvent: _, activeNodeRect: T, attributes: A, setNodeRef: k, listeners: P, isDragging: E, over: B, setActivatorNodeRef: $, transform: M } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDraggable)({\n id: i,\n data: x,\n attributes: {\n ...D9,\n ...o\n },\n disabled: y.draggable\n }), L = g2(R, k), j = !!D, O = j && !p && vf(f) && vf(g), V = !b && E, W = V && O ? M : null, z = O ? W ?? (l ?? C)({\n rects: h,\n activeNodeRect: T,\n activeIndex: f,\n overIndex: g,\n index: v\n }) : null, Q = vf(f) && vf(g) ? s({\n id: i,\n items: u,\n activeIndex: f,\n overIndex: g\n }) : v, U = D?.id, X = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n activeId: U,\n items: u,\n newIndex: Q,\n containerId: d\n }), ue = u !== X.current.items, q = e({\n active: D,\n containerId: d,\n isDragging: E,\n isSorting: j,\n id: i,\n index: v,\n items: u,\n newIndex: X.current.newIndex,\n previousItems: X.current.items,\n previousContainerId: X.current.containerId,\n transition: c,\n wasDragging: X.current.activeId != null\n }), J = R9({\n disabled: !q,\n index: v,\n node: F,\n rect: w\n });\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n j && X.current.newIndex !== Q && (X.current.newIndex = Q), d !== X.current.containerId && (X.current.containerId = d), u !== X.current.items && (X.current.items = u);\n }, [\n j,\n Q,\n d,\n u\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (U === X.current.activeId) return;\n if (U != null && X.current.activeId == null) {\n X.current.activeId = U;\n return;\n }\n let le = setTimeout(()=>{\n X.current.activeId = U;\n }, 50);\n return ()=>clearTimeout(le);\n }, [\n U\n ]), {\n active: D,\n activeIndex: f,\n attributes: A,\n data: x,\n rect: w,\n index: v,\n newIndex: Q,\n items: u,\n isOver: S,\n isSorting: j,\n isDragging: E,\n listeners: P,\n node: F,\n overIndex: g,\n over: B,\n setNodeRef: L,\n setActivatorNodeRef: $,\n setDroppableNodeRef: R,\n setDraggableNodeRef: k,\n transform: J ?? z,\n transition: Y()\n };\n function Y() {\n if (J || ue && X.current.newIndex === v) return F9;\n if (!(V && !C2(_) || !c) && (j || q)) return Hc.Transition.toString({\n ...c,\n property: F2\n });\n }\n}\n_c35 = D2;\nfunction A9(t, e) {\n var o, n;\n return typeof t == \"boolean\" ? {\n draggable: t,\n droppable: !1\n } : {\n draggable: (o = t?.draggable) != null ? o : e.draggable,\n droppable: (n = t?.droppable) != null ? n : e.droppable\n };\n}\n_c36 = A9;\nfunction xf(t) {\n if (!t) return !1;\n let e = t.data.current;\n return !!(e && \"sortable\" in e && typeof e.sortable == \"object\" && \"containerId\" in e.sortable && \"items\" in e.sortable && \"index\" in e.sortable);\n}\nvar P9 = [\n _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Down,\n _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Right,\n _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Up,\n _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Left\n], R2 = (t, e)=>{\n let { context: { active: o, collisionRect: n, droppableRects: r, droppableContainers: s, over: i, scrollableAncestors: l } } = e;\n if (P9.includes(t.code)) {\n if (t.preventDefault(), !o || !n) return;\n let a = [];\n s.getEnabled().forEach((d)=>{\n if (!d || d != null && d.disabled) return;\n let f = r.get(d.id);\n if (f) switch(t.code){\n case _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Down:\n n.top < f.top && a.push(d);\n break;\n case _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Up:\n n.top > f.top && a.push(d);\n break;\n case _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Left:\n n.left > f.left && a.push(d);\n break;\n case _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardCode.Right:\n n.left < f.left && a.push(d);\n break;\n }\n });\n let c = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.closestCorners)({\n active: o,\n collisionRect: n,\n droppableRects: r,\n droppableContainers: a,\n pointerCoordinates: null\n }), u = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.getFirstCollision)(c, \"id\");\n if (u === i?.id && c.length > 1 && (u = c[1].id), u != null) {\n let d = s.get(o.id), f = s.get(u), m = f ? r.get(f.id) : null, p = f?.node.current;\n if (p && m && d && f) {\n let g = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.getScrollableAncestors)(p).some((I, w)=>l[w] !== I), b = A2(d, f), C = E9(d, f), y = g || !b ? {\n x: 0,\n y: 0\n } : {\n x: C ? n.width - m.width : 0,\n y: C ? n.height - m.height : 0\n }, v = {\n x: m.left,\n y: m.top\n };\n return y.x && y.y ? v : y2(v, y);\n }\n }\n }\n};\nfunction A2(t, e) {\n return !xf(t) || !xf(e) ? !1 : t.data.current.sortable.containerId === e.data.current.sortable.containerId;\n}\n_c37 = A2;\nfunction E9(t, e) {\n return !xf(t) || !xf(e) || !A2(t, e) ? !1 : t.data.current.sortable.index < e.data.current.sortable.index;\n}\n_c38 = E9;\nvar al = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(17), { id: o, disabled: n } = t, r;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (r = {\n duration: 250,\n easing: \"cubic-bezier(0, 0.2, 0.2, 1)\"\n }, e[0] = r) : r = e[0];\n let s;\n e[1] !== n || e[2] !== o ? (s = {\n id: o,\n disabled: n,\n transition: r\n }, e[1] = n, e[2] = o, e[3] = s) : s = e[3];\n let { attributes: i, isDragging: l, listeners: a, setNodeRef: c, transform: u, transition: d } = D2(s), f = l ? \"grabbing\" : \"grab\", m;\n e[4] !== f || e[5] !== d ? (m = {\n cursor: f,\n transition: d\n }, e[4] = f, e[5] = d, e[6] = m) : m = e[6];\n let p;\n e[7] !== i || e[8] !== m ? (p = {\n ...i,\n style: m\n }, e[7] = i, e[8] = m, e[9] = p) : p = e[9];\n let h = u && `translate3d(${u.x}px, ${u.y}px, 0)`, g;\n return e[10] !== l || e[11] !== a || e[12] !== c || e[13] !== p || e[14] !== h || e[15] !== d ? (g = {\n attributes: p,\n isDragging: l,\n listeners: a,\n setNodeRef: c,\n transform: h,\n transition: d\n }, e[10] = l, e[11] = a, e[12] = c, e[13] = p, e[14] = h, e[15] = d, e[16] = g) : g = e[16], g;\n};\nvar jn = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { id: o, children: n, disabled: r } = t, s;\n e[0] !== r || e[1] !== o ? (s = {\n id: o,\n disabled: r\n }, e[0] = r, e[1] = o, e[2] = s) : s = e[2];\n let { attributes: i, isDragging: l, listeners: a, setNodeRef: c, transform: u, transition: d } = al(s), f = l ? \"grabbing\" : \"grab\", m;\n return e[3] !== i || e[4] !== n || e[5] !== l || e[6] !== a || e[7] !== c || e[8] !== f || e[9] !== u || e[10] !== d ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: n({\n attributes: {\n ...i,\n style: {\n cursor: f\n }\n },\n isDragging: l,\n listeners: a,\n setNodeRef: c,\n transform: u,\n transition: d\n })\n }), e[3] = i, e[4] = n, e[5] = l, e[6] = a, e[7] = c, e[8] = f, e[9] = u, e[10] = d, e[11] = m) : m = e[11], m;\n};\n\n\n\n\nvar Or = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(20), { children: o, className: n, ids: r, onDragEnd: s, onDragStart: i } = t, l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), c;\n e[0] !== l ? (c = {\n id: l\n }, e[0] = l, e[1] = c) : c = e[1];\n let { setNodeRef: u } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDroppable)(c), d;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (d = {\n activationConstraint: {\n distance: 5\n }\n }, e[2] = d) : d = e[2];\n let f;\n e[3] === Symbol.for(\"react.memo_cache_sentinel\") ? (f = {\n activationConstraint: {\n delay: 200,\n tolerance: 5\n }\n }, e[3] = f) : f = e[3];\n let m;\n e[4] === Symbol.for(\"react.memo_cache_sentinel\") ? (m = {\n coordinateGetter: R2\n }, e[4] = m) : m = e[4];\n let p = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useSensors)((0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useSensor)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.MouseSensor, d), (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useSensor)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.TouchSensor, f), (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useSensor)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.KeyboardSensor, m)), h;\n e[5] !== r || e[6] !== s ? (h = (v)=>{\n let { active: x, over: I } = v;\n v.activatorEvent.stopPropagation(), !(!x || !I) && typeof s == \"function\" && s({\n event: v,\n moveFromIndex: r.findIndex((w)=>w === x.id),\n moveToIndex: r.findIndex((w)=>w === I.id)\n });\n }, e[5] = r, e[6] = s, e[7] = h) : h = e[7];\n let g = h, b;\n e[8] !== i ? (b = (v)=>{\n let { active: x } = v;\n x && typeof i == \"function\" && i({\n id: x.id,\n event: v\n });\n }, e[8] = i, e[9] = b) : b = e[9];\n let C = b, y;\n return e[10] !== o || e[11] !== n || e[12] !== l || e[13] !== g || e[14] !== C || e[15] !== r || e[16] !== p || e[17] !== u || e[18] !== a ? (y = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.DndContext, {\n collisionDetection: _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.closestCenter,\n id: l,\n onDragEnd: g,\n onDragStart: C,\n sensors: p,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(T2, {\n id: a,\n items: r,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: n,\n ref: u,\n children: o\n })\n })\n }), e[10] = o, e[11] = n, e[12] = l, e[13] = g, e[14] = C, e[15] = r, e[16] = p, e[17] = u, e[18] = a, e[19] = y) : y = e[19], y;\n};\n_c39 = Or;\n\n\nvar Sf = \"error-pill\", So = (t)=>{\n let { className: e, count: o, i18n: n, withMessage: r } = t, s = !r && o < 99, i = [\n Sf,\n s && `${Sf}--fixed-width`,\n e && e\n ].filter(Boolean).join(\" \");\n return o === 0 ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: i,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Sf}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Sf}__count`,\n children: o\n }),\n r && ` ${o > 1 ? n.t(\"general:errors\") : n.t(\"general:error\")}`\n ]\n })\n });\n};\n\n\n\n\nvar N2 = \"field-description\", Xe = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { className: o, description: n, marginPlacement: r, path: s } = t, { i18n: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n if (n) {\n let l = `field-description-${s?.replace(/\\./g, \"__\")}`, a = r && `${N2}--margin-${r}`, c;\n e[0] !== o || e[1] !== l || e[2] !== a ? (c = [\n N2,\n o,\n l,\n a\n ].filter(Boolean), e[0] = o, e[1] = l, e[2] = a, e[3] = c) : c = e[3];\n let u = c.join(\" \"), d;\n return e[4] !== n || e[5] !== i || e[6] !== u ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: u,\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(n, i)\n }), e[4] = n, e[5] = i, e[6] = u, e[7] = d) : d = e[7], d;\n }\n return null;\n};\n\n\n\nvar q9 = \"field-error\", Ze = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { alignCaret: o, message: n, path: r, showError: s } = t, i = o === void 0 ? \"right\" : o, l = fo(), a;\n e[0] !== r ? (a = (d)=>{\n let [f] = d;\n return f && f?.[r] || null;\n }, e[0] = r, e[1] = a) : a = e[1];\n let c = Ot(a), u;\n if (e[2] !== i || e[3] !== c || e[4] !== l || e[5] !== n || e[6] !== s) {\n u = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let { errorMessage: d, valid: f } = c || {}, m = n || d;\n if ((s || l && f === !1) && m?.length) {\n u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ro, {\n alignCaret: i,\n className: q9,\n delay: 0,\n staticPositioning: !0,\n children: m\n });\n break e;\n }\n }\n e[2] = i, e[3] = c, e[4] = l, e[5] = n, e[6] = s, e[7] = u;\n } else u = e[7];\n return u !== Symbol.for(\"react.early_return_sentinel\") ? u : null;\n};\n\n\n\n\n\n\nvar L2 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(0), as = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { children: o } = t, r = ct() + 1, s;\n return e[0] !== o || e[1] !== r ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(L2, {\n value: r,\n children: o\n }), e[0] = o, e[1] = r, e[2] = s) : s = e[2], s;\n}, ct = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(L2);\n\n\n\n\n\nvar Zs = (t, e)=>!t?.locales || t.locales.length === 0 ? null : t.locales.find((o)=>o?.code === e);\n_c40 = Zs;\n\n\n\n\nfunction Ne() {\n return Ne = Object.assign ? Object.assign.bind() : function(t) {\n for(var e = 1; e < arguments.length; e++){\n var o = arguments[e];\n for(var n in o)({}).hasOwnProperty.call(o, n) && (t[n] = o[n]);\n }\n return t;\n }, Ne.apply(null, arguments);\n}\n_c41 = Ne;\nfunction ll(t, e) {\n if (t == null) return {};\n var o = {};\n for(var n in t)if (({}).hasOwnProperty.call(t, n)) {\n if (e.indexOf(n) !== -1) continue;\n o[n] = t[n];\n }\n return o;\n}\nfunction cl(t, e) {\n return cl = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(o, n) {\n return o.__proto__ = n, o;\n }, cl(t, e);\n}\nfunction If(t, e) {\n t.prototype = Object.create(e.prototype), t.prototype.constructor = t, cl(t, e);\n}\n_c42 = If;\nfunction m1(t, e) {\n return t.classList ? !!e && t.classList.contains(e) : (\" \" + (t.className.baseVal || t.className) + \" \").indexOf(\" \" + e + \" \") !== -1;\n}\nfunction f1(t, e) {\n t.classList ? t.classList.add(e) : m1(t, e) || (typeof t.className == \"string\" ? t.className = t.className + \" \" + e : t.setAttribute(\"class\", (t.className && t.className.baseVal || \"\") + \" \" + e));\n}\nfunction k2(t, e) {\n return t.replace(new RegExp(\"(^|\\\\s)\" + e + \"(?:\\\\s|$)\", \"g\"), \"$1\").replace(/\\s+/g, \" \").replace(/^\\s*|\\s*$/g, \"\");\n}\nfunction p1(t, e) {\n t.classList ? t.classList.remove(e) : typeof t.className == \"string\" ? t.className = k2(t.className, e) : t.setAttribute(\"class\", k2(t.className && t.className.baseVal || \"\", e));\n}\n\n\n\nvar h1 = {\n disabled: !1\n};\n\nvar g1 = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\nvar _f = function(e) {\n return e.scrollTop;\n};\nvar Uc = \"unmounted\", ji = \"exited\", $i = \"entering\", dl = \"entered\", b1 = \"exiting\", ls = function(t) {\n If(e, t);\n function e(n, r) {\n var s;\n s = t.call(this, n, r) || this;\n var i = r, l = i && !i.isMounting ? n.enter : n.appear, a;\n return s.appearStatus = null, n.in ? l ? (a = ji, s.appearStatus = $i) : a = dl : n.unmountOnExit || n.mountOnEnter ? a = Uc : a = ji, s.state = {\n status: a\n }, s.nextCallback = null, s;\n }\n e.getDerivedStateFromProps = function(r, s) {\n var i = r.in;\n return i && s.status === Uc ? {\n status: ji\n } : null;\n };\n var o = e.prototype;\n return o.componentDidMount = function() {\n this.updateStatus(!0, this.appearStatus);\n }, o.componentDidUpdate = function(r) {\n var s = null;\n if (r !== this.props) {\n var i = this.state.status;\n this.props.in ? i !== $i && i !== dl && (s = $i) : (i === $i || i === dl) && (s = b1);\n }\n this.updateStatus(!1, s);\n }, o.componentWillUnmount = function() {\n this.cancelNextCallback();\n }, o.getTimeouts = function() {\n var r = this.props.timeout, s, i, l;\n return s = i = l = r, r != null && typeof r != \"number\" && (s = r.exit, i = r.enter, l = r.appear !== void 0 ? r.appear : i), {\n exit: s,\n enter: i,\n appear: l\n };\n }, o.updateStatus = function(r, s) {\n if (r === void 0 && (r = !1), s !== null) if (this.cancelNextCallback(), s === $i) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var i = this.props.nodeRef ? this.props.nodeRef.current : react_dom__WEBPACK_IMPORTED_MODULE_1__.findDOMNode(this);\n i && _f(i);\n }\n this.performEnter(r);\n } else this.performExit();\n else this.props.unmountOnExit && this.state.status === ji && this.setState({\n status: Uc\n });\n }, o.performEnter = function(r) {\n var s = this, i = this.props.enter, l = this.context ? this.context.isMounting : r, a = this.props.nodeRef ? [\n l\n ] : [\n react_dom__WEBPACK_IMPORTED_MODULE_1__.findDOMNode(this),\n l\n ], c = a[0], u = a[1], d = this.getTimeouts(), f = l ? d.appear : d.enter;\n if (!r && !i || h1.disabled) {\n this.safeSetState({\n status: dl\n }, function() {\n s.props.onEntered(c);\n });\n return;\n }\n this.props.onEnter(c, u), this.safeSetState({\n status: $i\n }, function() {\n s.props.onEntering(c, u), s.onTransitionEnd(f, function() {\n s.safeSetState({\n status: dl\n }, function() {\n s.props.onEntered(c, u);\n });\n });\n });\n }, o.performExit = function() {\n var r = this, s = this.props.exit, i = this.getTimeouts(), l = this.props.nodeRef ? void 0 : react_dom__WEBPACK_IMPORTED_MODULE_1__.findDOMNode(this);\n if (!s || h1.disabled) {\n this.safeSetState({\n status: ji\n }, function() {\n r.props.onExited(l);\n });\n return;\n }\n this.props.onExit(l), this.safeSetState({\n status: b1\n }, function() {\n r.props.onExiting(l), r.onTransitionEnd(i.exit, function() {\n r.safeSetState({\n status: ji\n }, function() {\n r.props.onExited(l);\n });\n });\n });\n }, o.cancelNextCallback = function() {\n this.nextCallback !== null && (this.nextCallback.cancel(), this.nextCallback = null);\n }, o.safeSetState = function(r, s) {\n s = this.setNextCallback(s), this.setState(r, s);\n }, o.setNextCallback = function(r) {\n var s = this, i = !0;\n return this.nextCallback = function(l) {\n i && (i = !1, s.nextCallback = null, r(l));\n }, this.nextCallback.cancel = function() {\n i = !1;\n }, this.nextCallback;\n }, o.onTransitionEnd = function(r, s) {\n this.setNextCallback(s);\n var i = this.props.nodeRef ? this.props.nodeRef.current : react_dom__WEBPACK_IMPORTED_MODULE_1__.findDOMNode(this), l = r == null && !this.props.addEndListener;\n if (!i || l) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n if (this.props.addEndListener) {\n var a = this.props.nodeRef ? [\n this.nextCallback\n ] : [\n i,\n this.nextCallback\n ], c = a[0], u = a[1];\n this.props.addEndListener(c, u);\n }\n r != null && setTimeout(this.nextCallback, r);\n }, o.render = function() {\n var r = this.state.status;\n if (r === Uc) return null;\n var s = this.props, i = s.children, l = s.in, a = s.mountOnEnter, c = s.unmountOnExit, u = s.appear, d = s.enter, f = s.exit, m = s.timeout, p = s.addEndListener, h = s.onEnter, g = s.onEntering, b = s.onEntered, C = s.onExit, y = s.onExiting, v = s.onExited, x = s.nodeRef, I = ll(s, [\n \"children\",\n \"in\",\n \"mountOnEnter\",\n \"unmountOnExit\",\n \"appear\",\n \"enter\",\n \"exit\",\n \"timeout\",\n \"addEndListener\",\n \"onEnter\",\n \"onEntering\",\n \"onEntered\",\n \"onExit\",\n \"onExiting\",\n \"onExited\",\n \"nodeRef\"\n ]);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(g1.Provider, {\n value: null\n }, typeof i == \"function\" ? i(r, I) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(react__WEBPACK_IMPORTED_MODULE_0__.Children.only(i), I));\n }, e;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\nls.contextType = g1;\nls.propTypes = {};\nfunction ul() {}\nls.defaultProps = {\n in: !1,\n mountOnEnter: !1,\n unmountOnExit: !1,\n appear: !1,\n enter: !0,\n exit: !0,\n onEnter: ul,\n onEntering: ul,\n onEntered: ul,\n onExit: ul,\n onExiting: ul,\n onExited: ul\n};\nls.UNMOUNTED = Uc;\nls.EXITED = ji;\nls.ENTERING = $i;\nls.ENTERED = dl;\nls.EXITING = b1;\nvar j2 = ls;\nvar rk = function(e, o) {\n return e && o && o.split(\" \").forEach(function(n) {\n return f1(e, n);\n });\n}, v1 = function(e, o) {\n return e && o && o.split(\" \").forEach(function(n) {\n return p1(e, n);\n });\n}, y1 = function(t) {\n If(e, t);\n function e() {\n for(var n, r = arguments.length, s = new Array(r), i = 0; i < r; i++)s[i] = arguments[i];\n return n = t.call.apply(t, [\n this\n ].concat(s)) || this, n.appliedClasses = {\n appear: {},\n enter: {},\n exit: {}\n }, n.onEnter = function(l, a) {\n var c = n.resolveArguments(l, a), u = c[0], d = c[1];\n n.removeClasses(u, \"exit\"), n.addClass(u, d ? \"appear\" : \"enter\", \"base\"), n.props.onEnter && n.props.onEnter(l, a);\n }, n.onEntering = function(l, a) {\n var c = n.resolveArguments(l, a), u = c[0], d = c[1], f = d ? \"appear\" : \"enter\";\n n.addClass(u, f, \"active\"), n.props.onEntering && n.props.onEntering(l, a);\n }, n.onEntered = function(l, a) {\n var c = n.resolveArguments(l, a), u = c[0], d = c[1], f = d ? \"appear\" : \"enter\";\n n.removeClasses(u, f), n.addClass(u, f, \"done\"), n.props.onEntered && n.props.onEntered(l, a);\n }, n.onExit = function(l) {\n var a = n.resolveArguments(l), c = a[0];\n n.removeClasses(c, \"appear\"), n.removeClasses(c, \"enter\"), n.addClass(c, \"exit\", \"base\"), n.props.onExit && n.props.onExit(l);\n }, n.onExiting = function(l) {\n var a = n.resolveArguments(l), c = a[0];\n n.addClass(c, \"exit\", \"active\"), n.props.onExiting && n.props.onExiting(l);\n }, n.onExited = function(l) {\n var a = n.resolveArguments(l), c = a[0];\n n.removeClasses(c, \"exit\"), n.addClass(c, \"exit\", \"done\"), n.props.onExited && n.props.onExited(l);\n }, n.resolveArguments = function(l, a) {\n return n.props.nodeRef ? [\n n.props.nodeRef.current,\n l\n ] : [\n l,\n a\n ];\n }, n.getClassNames = function(l) {\n var a = n.props.classNames, c = typeof a == \"string\", u = c && a ? a + \"-\" : \"\", d = c ? \"\" + u + l : a[l], f = c ? d + \"-active\" : a[l + \"Active\"], m = c ? d + \"-done\" : a[l + \"Done\"];\n return {\n baseClassName: d,\n activeClassName: f,\n doneClassName: m\n };\n }, n;\n }\n var o = e.prototype;\n return o.addClass = function(r, s, i) {\n var l = this.getClassNames(s)[i + \"ClassName\"], a = this.getClassNames(\"enter\"), c = a.doneClassName;\n s === \"appear\" && i === \"done\" && c && (l += \" \" + c), i === \"active\" && r && _f(r), l && (this.appliedClasses[s][i] = l, rk(r, l));\n }, o.removeClasses = function(r, s) {\n var i = this.appliedClasses[s], l = i.base, a = i.active, c = i.done;\n this.appliedClasses[s] = {}, l && v1(r, l), a && v1(r, a), c && v1(r, c);\n }, o.render = function() {\n var r = this.props, s = r.classNames, i = ll(r, [\n \"classNames\"\n ]);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(j2, Ne({}, i, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n }, e;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\ny1.defaultProps = {\n classNames: \"\"\n};\ny1.propTypes = {};\nvar Xc = y1;\nfunction B2(t) {\n if (t === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return t;\n}\n_c43 = B2;\n\n\nvar Df = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\nvar ie = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Df);\nvar Rf = (t)=>t ? {\n appear: `${t}--appear`,\n appearActive: `${t}--appearActive`,\n appearDone: `${t}--appearDone`,\n enter: `${t}--enter`,\n enterActive: `${t}--enterActive`,\n enterDone: `${t}--enterDone`,\n exit: `${t}--exit`,\n exitActive: `${t}--exitActive`,\n exitDone: `${t}--exitDone`\n } : {};\n_c44 = Rf;\n(0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.j)();\nfunction M2(t, e) {\n var o = Object.keys(t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(t);\n e && (n = n.filter(function(r) {\n return Object.getOwnPropertyDescriptor(t, r).enumerable;\n })), o.push.apply(o, n);\n }\n return o;\n}\n_c45 = M2;\nfunction O2(t) {\n for(var e = 1; e < arguments.length; e++){\n var o = arguments[e] != null ? arguments[e] : {};\n e % 2 ? M2(Object(o), !0).forEach(function(n) {\n ik(t, n, o[n]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(o)) : M2(Object(o)).forEach(function(n) {\n Object.defineProperty(t, n, Object.getOwnPropertyDescriptor(o, n));\n });\n }\n return t;\n}\n_c46 = O2;\nfunction ik(t, e, o) {\n return e = lk(e), e in t ? Object.defineProperty(t, e, {\n value: o,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = o, t;\n}\nfunction ak(t, e) {\n if (typeof t != \"object\" || t === null) return t;\n var o = t[Symbol.toPrimitive];\n if (o !== void 0) {\n var n = o.call(t, e || \"default\");\n if (typeof n != \"object\") return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (e === \"string\" ? String : Number)(t);\n}\nfunction lk(t) {\n var e = ak(t, \"string\");\n return typeof e == \"symbol\" ? e : String(e);\n}\nvar V2 = {\n activateTrap: function(e, o) {\n if (e.length > 0) {\n var n = e[e.length - 1];\n n !== o && n.pause();\n }\n var r = e.indexOf(o);\n r === -1 || e.splice(r, 1), e.push(o);\n },\n deactivateTrap: function(e, o) {\n var n = e.indexOf(o);\n n !== -1 && e.splice(n, 1), e.length > 0 && e[e.length - 1].unpause();\n }\n}, ck = function(e) {\n return e.tagName && e.tagName.toLowerCase() === \"input\" && typeof e.select == \"function\";\n}, uk = function(e) {\n return e?.key === \"Escape\" || e?.key === \"Esc\" || e?.keyCode === 27;\n}, Zc = function(e) {\n return e?.key === \"Tab\" || e?.keyCode === 9;\n}, dk = function(e) {\n return Zc(e) && !e.shiftKey;\n}, mk = function(e) {\n return Zc(e) && e.shiftKey;\n}, G2 = function(e) {\n return setTimeout(e, 0);\n}, z2 = function(e, o) {\n var n = -1;\n return e.every(function(r, s) {\n return o(r) ? (n = s, !1) : !0;\n }), n;\n}, Yc = function(e) {\n for(var o = arguments.length, n = new Array(o > 1 ? o - 1 : 0), r = 1; r < o; r++)n[r - 1] = arguments[r];\n return typeof e == \"function\" ? e.apply(void 0, n) : e;\n}, Af = function(e) {\n return e.target.shadowRoot && typeof e.composedPath == \"function\" ? e.composedPath()[0] : e.target;\n}, fk = [], W2 = function(e, o) {\n var n = o?.document || document, r = o?.trapStack || fk, s = O2({\n returnFocusOnDeactivate: !0,\n escapeDeactivates: !0,\n delayInitialFocus: !0,\n isKeyForward: dk,\n isKeyBackward: mk\n }, o), i = {\n containers: [],\n containerGroups: [],\n tabbableGroups: [],\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: !1,\n paused: !1,\n delayInitialFocusTimer: void 0,\n recentNavEvent: void 0\n }, l, a = function(_, T, A) {\n return _ && _[T] !== void 0 ? _[T] : s[A || T];\n }, c = function(_, T) {\n var A = typeof T?.composedPath == \"function\" ? T.composedPath() : void 0;\n return i.containerGroups.findIndex(function(k) {\n var P = k.container, E = k.tabbableNodes;\n return P.contains(_) || A?.includes(P) || E.find(function(B) {\n return B === _;\n });\n });\n }, u = function(_) {\n var T = s[_];\n if (typeof T == \"function\") {\n for(var A = arguments.length, k = new Array(A > 1 ? A - 1 : 0), P = 1; P < A; P++)k[P - 1] = arguments[P];\n T = T.apply(void 0, k);\n }\n if (T === !0 && (T = void 0), !T) {\n if (T === void 0 || T === !1) return T;\n throw new Error(\"`\".concat(_, \"` was specified but was not a node, or did not return a node\"));\n }\n var E = T;\n if (typeof T == \"string\" && (E = n.querySelector(T), !E)) throw new Error(\"`\".concat(_, \"` as selector refers to no known node\"));\n return E;\n }, d = function() {\n var _ = u(\"initialFocus\");\n if (_ === !1) return !1;\n if (_ === void 0 || !(0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.i)(_, s.tabbableOptions)) if (c(n.activeElement) >= 0) _ = n.activeElement;\n else {\n var T = i.tabbableGroups[0], A = T && T.firstTabbableNode;\n _ = A || u(\"fallbackFocus\");\n }\n if (!_) throw new Error(\"Your focus-trap needs to have at least one focusable element\");\n return _;\n }, f = function() {\n if (i.containerGroups = i.containers.map(function(_) {\n var T = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.f)(_, s.tabbableOptions), A = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.g)(_, s.tabbableOptions), k = T.length > 0 ? T[0] : void 0, P = T.length > 0 ? T[T.length - 1] : void 0, E = A.find(function(M) {\n return (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.h)(M);\n }), B = A.slice().reverse().find(function(M) {\n return (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.h)(M);\n }), $ = !!T.find(function(M) {\n return (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.e)(M) > 0;\n });\n return {\n container: _,\n tabbableNodes: T,\n focusableNodes: A,\n posTabIndexesFound: $,\n firstTabbableNode: k,\n lastTabbableNode: P,\n firstDomTabbableNode: E,\n lastDomTabbableNode: B,\n nextTabbableNode: function(L) {\n var j = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !0, O = T.indexOf(L);\n return O < 0 ? j ? A.slice(A.indexOf(L) + 1).find(function(V) {\n return (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.h)(V);\n }) : A.slice(0, A.indexOf(L)).reverse().find(function(V) {\n return (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.h)(V);\n }) : T[O + (j ? 1 : -1)];\n }\n };\n }), i.tabbableGroups = i.containerGroups.filter(function(_) {\n return _.tabbableNodes.length > 0;\n }), i.tabbableGroups.length <= 0 && !u(\"fallbackFocus\")) throw new Error(\"Your focus-trap must have at least one container with at least one tabbable node in it at all times\");\n if (i.containerGroups.find(function(_) {\n return _.posTabIndexesFound;\n }) && i.containerGroups.length > 1) throw new Error(\"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\");\n }, m = function D(_) {\n var T = _.activeElement;\n if (T) return T.shadowRoot && T.shadowRoot.activeElement !== null ? D(T.shadowRoot) : T;\n }, p = function D(_) {\n if (_ !== !1 && _ !== m(document)) {\n if (!_ || !_.focus) {\n D(d());\n return;\n }\n _.focus({\n preventScroll: !!s.preventScroll\n }), i.mostRecentlyFocusedNode = _, ck(_) && _.select();\n }\n }, h = function(_) {\n var T = u(\"setReturnFocus\", _);\n return T || (T === !1 ? !1 : _);\n }, g = function(_) {\n var T = _.target, A = _.event, k = _.isBackward, P = k === void 0 ? !1 : k;\n T = T || Af(A), f();\n var E = null;\n if (i.tabbableGroups.length > 0) {\n var B = c(T, A), $ = B >= 0 ? i.containerGroups[B] : void 0;\n if (B < 0) P ? E = i.tabbableGroups[i.tabbableGroups.length - 1].lastTabbableNode : E = i.tabbableGroups[0].firstTabbableNode;\n else if (P) {\n var M = z2(i.tabbableGroups, function(Z) {\n var z = Z.firstTabbableNode;\n return T === z;\n });\n if (M < 0 && ($.container === T || (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.i)(T, s.tabbableOptions) && !(0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.h)(T, s.tabbableOptions) && !$.nextTabbableNode(T, !1)) && (M = B), M >= 0) {\n var L = M === 0 ? i.tabbableGroups.length - 1 : M - 1, j = i.tabbableGroups[L];\n E = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.e)(T) >= 0 ? j.lastTabbableNode : j.lastDomTabbableNode;\n } else Zc(A) || (E = $.nextTabbableNode(T, !1));\n } else {\n var O = z2(i.tabbableGroups, function(Z) {\n var z = Z.lastTabbableNode;\n return T === z;\n });\n if (O < 0 && ($.container === T || (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.i)(T, s.tabbableOptions) && !(0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.h)(T, s.tabbableOptions) && !$.nextTabbableNode(T)) && (O = B), O >= 0) {\n var V = O === i.tabbableGroups.length - 1 ? 0 : O + 1, W = i.tabbableGroups[V];\n E = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.e)(T) >= 0 ? W.firstTabbableNode : W.firstDomTabbableNode;\n } else Zc(A) || (E = $.nextTabbableNode(T));\n }\n } else E = u(\"fallbackFocus\");\n return E;\n }, b = function(_) {\n var T = Af(_);\n if (!(c(T, _) >= 0)) {\n if (Yc(s.clickOutsideDeactivates, _)) {\n l.deactivate({\n returnFocus: s.returnFocusOnDeactivate\n });\n return;\n }\n Yc(s.allowOutsideClick, _) || _.preventDefault();\n }\n }, C = function(_) {\n var T = Af(_), A = c(T, _) >= 0;\n if (A || T instanceof Document) A && (i.mostRecentlyFocusedNode = T);\n else {\n _.stopImmediatePropagation();\n var k, P = !0;\n if (i.mostRecentlyFocusedNode) if ((0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.e)(i.mostRecentlyFocusedNode) > 0) {\n var E = c(i.mostRecentlyFocusedNode), B = i.containerGroups[E].tabbableNodes;\n if (B.length > 0) {\n var $ = B.findIndex(function(M) {\n return M === i.mostRecentlyFocusedNode;\n });\n $ >= 0 && (s.isKeyForward(i.recentNavEvent) ? $ + 1 < B.length && (k = B[$ + 1], P = !1) : $ - 1 >= 0 && (k = B[$ - 1], P = !1));\n }\n } else i.containerGroups.some(function(M) {\n return M.tabbableNodes.some(function(L) {\n return (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.e)(L) > 0;\n });\n }) || (P = !1);\n else P = !1;\n P && (k = g({\n target: i.mostRecentlyFocusedNode,\n isBackward: s.isKeyBackward(i.recentNavEvent)\n })), p(k || i.mostRecentlyFocusedNode || d());\n }\n i.recentNavEvent = void 0;\n }, y = function(_) {\n var T = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !1;\n i.recentNavEvent = _;\n var A = g({\n event: _,\n isBackward: T\n });\n A && (Zc(_) && _.preventDefault(), p(A));\n }, v = function(_) {\n if (uk(_) && Yc(s.escapeDeactivates, _) !== !1) {\n _.preventDefault(), l.deactivate();\n return;\n }\n (s.isKeyForward(_) || s.isKeyBackward(_)) && y(_, s.isKeyBackward(_));\n }, x = function(_) {\n var T = Af(_);\n c(T, _) >= 0 || Yc(s.clickOutsideDeactivates, _) || Yc(s.allowOutsideClick, _) || (_.preventDefault(), _.stopImmediatePropagation());\n }, I = function() {\n if (i.active) return V2.activateTrap(r, l), i.delayInitialFocusTimer = s.delayInitialFocus ? G2(function() {\n p(d());\n }) : p(d()), n.addEventListener(\"focusin\", C, !0), n.addEventListener(\"mousedown\", b, {\n capture: !0,\n passive: !1\n }), n.addEventListener(\"touchstart\", b, {\n capture: !0,\n passive: !1\n }), n.addEventListener(\"click\", x, {\n capture: !0,\n passive: !1\n }), n.addEventListener(\"keydown\", v, {\n capture: !0,\n passive: !1\n }), l;\n }, w = function() {\n if (i.active) return n.removeEventListener(\"focusin\", C, !0), n.removeEventListener(\"mousedown\", b, !0), n.removeEventListener(\"touchstart\", b, !0), n.removeEventListener(\"click\", x, !0), n.removeEventListener(\"keydown\", v, !0), l;\n }, F = function(_) {\n var T = _.some(function(A) {\n var k = Array.from(A.removedNodes);\n return k.some(function(P) {\n return P === i.mostRecentlyFocusedNode;\n });\n });\n T && p(d());\n }, S = typeof window < \"u\" && \"MutationObserver\" in window ? new MutationObserver(F) : void 0, R = function() {\n S && (S.disconnect(), i.active && !i.paused && i.containers.map(function(_) {\n S.observe(_, {\n subtree: !0,\n childList: !0\n });\n }));\n };\n return l = {\n get active () {\n return i.active;\n },\n get paused () {\n return i.paused;\n },\n activate: function(_) {\n if (i.active) return this;\n var T = a(_, \"onActivate\"), A = a(_, \"onPostActivate\"), k = a(_, \"checkCanFocusTrap\");\n k || f(), i.active = !0, i.paused = !1, i.nodeFocusedBeforeActivation = n.activeElement, T?.();\n var P = function() {\n k && f(), I(), R(), A?.();\n };\n return k ? (k(i.containers.concat()).then(P, P), this) : (P(), this);\n },\n deactivate: function(_) {\n if (!i.active) return this;\n var T = O2({\n onDeactivate: s.onDeactivate,\n onPostDeactivate: s.onPostDeactivate,\n checkCanReturnFocus: s.checkCanReturnFocus\n }, _);\n clearTimeout(i.delayInitialFocusTimer), i.delayInitialFocusTimer = void 0, w(), i.active = !1, i.paused = !1, R(), V2.deactivateTrap(r, l);\n var A = a(T, \"onDeactivate\"), k = a(T, \"onPostDeactivate\"), P = a(T, \"checkCanReturnFocus\"), E = a(T, \"returnFocus\", \"returnFocusOnDeactivate\");\n A?.();\n var B = function() {\n G2(function() {\n E && p(h(i.nodeFocusedBeforeActivation)), k?.();\n });\n };\n return E && P ? (P(h(i.nodeFocusedBeforeActivation)).then(B, B), this) : (B(), this);\n },\n pause: function(_) {\n if (i.paused || !i.active) return this;\n var T = a(_, \"onPause\"), A = a(_, \"onPostPause\");\n return i.paused = !0, T?.(), w(), R(), A?.(), this;\n },\n unpause: function(_) {\n if (!i.paused || !i.active) return this;\n var T = a(_, \"onUnpause\"), A = a(_, \"onPostUnpause\");\n return i.paused = !1, T?.(), f(), I(), R(), A?.(), this;\n },\n updateContainerElements: function(_) {\n var T = [].concat(_).filter(Boolean);\n return i.containers = T.map(function(A) {\n return typeof A == \"string\" ? n.querySelector(A) : A;\n }), i.active && f(), R(), this;\n }\n }, l.updateContainerElements(e), l;\n};\nvar pk = function(t, e) {\n var o = {};\n for(var n in t)Object.prototype.hasOwnProperty.call(t, n) && e.indexOf(n) < 0 && (o[n] = t[n]);\n if (t != null && typeof Object.getOwnPropertySymbols == \"function\") for(var r = 0, n = Object.getOwnPropertySymbols(t); r < n.length; r++)e.indexOf(n[r]) < 0 && Object.prototype.propertyIsEnumerable.call(t, n[r]) && (o[n[r]] = t[n[r]]);\n return o;\n}, cs = \"modal-item\", U2 = (t, e)=>(n)=>{\n let r = ie(), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), [c, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), { modalState: d, classPrefix: f, containerRef: m, transTime: p, setCloseOnBlur: h, setBodyScrollLock: g, openModal: b } = r, { className: C, htmlElement: y = \"dialog\", slug: v = \"\", closeOnBlur: x = !0, lockBodyScroll: I = !0, classPrefix: w, onEnter: F, onEntering: S, onEntered: R, onExit: D, onExiting: _, onExited: T, openOnInit: A, trapFocus: k = !0, focusTrapOptions: P = {} } = n, E = pk(n, [\n \"className\",\n \"htmlElement\",\n \"slug\",\n \"closeOnBlur\",\n \"lockBodyScroll\",\n \"classPrefix\",\n \"onEnter\",\n \"onEntering\",\n \"onEntered\",\n \"onExit\",\n \"onExiting\",\n \"onExited\",\n \"openOnInit\",\n \"trapFocus\",\n \"focusTrapOptions\"\n ]), B = w || f, $ = e || v, M = d[$] && d[$].isOpen;\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (k) {\n let O = s.current;\n if (a.current === !1 && O) {\n let V = W2(O, Object.assign(Object.assign({}, P), {\n fallbackFocus: P?.fallbackFocus || O,\n allowOutsideClick: typeof P.allowOutsideClick < \"u\" ? P.allowOutsideClick : !0\n }));\n u(V), a.current = !0;\n }\n }\n }, [\n k,\n i,\n P\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n l(!0);\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(c && (M ? c.activate() : c.deactivate()), ()=>{\n c && c.deactivate();\n }), [\n M,\n c\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n M && h(x);\n }, [\n M,\n x,\n h\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let O = s.current;\n return O && g(!!(M && I), O), ()=>{\n O && g(!1, O);\n };\n }, [\n M,\n I,\n g\n ]);\n let [L, j] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(M);\n if ((0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n M ? j(M) : setTimeout(()=>j(!1), p);\n }, [\n M,\n p\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n A && b($);\n }, [\n $,\n A,\n b\n ]), m.current) {\n let O = B ? `${B}__${cs}` : cs, V = [\n O,\n `${O}--slug-${$}`,\n C\n ].filter(Boolean).join(\" \"), W = Object.assign({\n role: y !== \"dialog\" ? \"dialog\" : void 0,\n open: y === \"dialog\" ? L || M : void 0,\n \"aria-modal\": !0,\n \"aria-label\": E[\"aria-labelledby\"] ? void 0 : $\n }, E);\n return /*#__PURE__*/ react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xc, {\n nodeRef: s,\n timeout: p,\n in: M,\n classNames: Rf(O),\n appear: !0,\n onEnter: F,\n onEntering: S,\n onEntered: R,\n onExit: D,\n onExiting: _,\n onExited: T,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(y, Object.assign({\n ref: s,\n id: E?.id || $,\n className: V\n }, W, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(t, Object.assign({}, n, {\n isOpen: M,\n modal: r\n }))\n }))\n }), m.current);\n }\n return null;\n };\n\n\nvar gk = (t)=>{\n let { children: e } = t;\n return e ? typeof e == \"function\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: e(t)\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: e\n }) : null;\n}, Jo = U2(gk);\n\nvar bk = function(t, e) {\n var o = {};\n for(var n in t)Object.prototype.hasOwnProperty.call(t, n) && e.indexOf(n) < 0 && (o[n] = t[n]);\n if (t != null && typeof Object.getOwnPropertySymbols == \"function\") for(var r = 0, n = Object.getOwnPropertySymbols(t); r < n.length; r++)e.indexOf(n[r]) < 0 && Object.prototype.propertyIsEnumerable.call(t, n[r]) && (o[n[r]] = t[n[r]]);\n return o;\n}, us = \"modal-container\", w1 = (t)=>{\n let { oneModalIsOpen: e, classPrefix: o, transTime: n, setContainerRef: r, containerRef: s, closeAllModals: i, closeOnBlur: l } = ie(), { className: a, htmlElement: c = \"div\", children: u, onClick: d } = t, f = bk(t, [\n \"className\",\n \"htmlElement\",\n \"children\",\n \"onClick\"\n ]), m = o ? `${o}__${us}` : us, p = [\n m,\n a\n ].filter(Boolean).join(\" \"), h = Object.assign(Object.assign({}, f), {\n onClick: (g)=>{\n l && i(), typeof d == \"function\" && d(g);\n }\n });\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xc, {\n nodeRef: s,\n in: e,\n timeout: n,\n classNames: Rf(m),\n appear: !0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(c, Object.assign({\n className: p,\n ref: r\n }, h, {\n children: u && u\n }))\n });\n};\n\n\nfunction vk(t) {\n if (Array.isArray(t)) {\n for(var e = 0, o = Array(t.length); e < t.length; e++)o[e] = t[e];\n return o;\n } else return Array.from(t);\n}\nvar I1 = !1;\ntypeof window < \"u\" && (S1 = {\n get passive () {\n I1 = !0;\n }\n}, window.addEventListener(\"testPassive\", null, S1), window.removeEventListener(\"testPassive\", null, S1));\nvar S1, Pf = typeof window < \"u\" && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === \"MacIntel\" && window.navigator.maxTouchPoints > 1), Oi = [], Ef = !1, J2 = -1, Jc = void 0, Mi = void 0, qc = void 0, q2 = function(e) {\n return Oi.some(function(o) {\n return !!(o.options.allowTouchMove && o.options.allowTouchMove(e));\n });\n}, Nf = function(e) {\n var o = e || window.event;\n return q2(o.target) || o.touches.length > 1 ? !0 : (o.preventDefault && o.preventDefault(), !1);\n}, yk = function(e) {\n if (qc === void 0) {\n var o = !!e && e.reserveScrollBarGap === !0, n = window.innerWidth - document.documentElement.clientWidth;\n if (o && n > 0) {\n var r = parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\"), 10);\n qc = document.body.style.paddingRight, document.body.style.paddingRight = r + n + \"px\";\n }\n }\n Jc === void 0 && (Jc = document.body.style.overflow, document.body.style.overflow = \"hidden\");\n}, Ck = function() {\n qc !== void 0 && (document.body.style.paddingRight = qc, qc = void 0), Jc !== void 0 && (document.body.style.overflow = Jc, Jc = void 0);\n}, xk = function() {\n return window.requestAnimationFrame(function() {\n if (Mi === void 0) {\n Mi = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left\n };\n var e = window, o = e.scrollY, n = e.scrollX, r = e.innerHeight;\n document.body.style.position = \"fixed\", document.body.style.top = -o, document.body.style.left = -n, setTimeout(function() {\n return window.requestAnimationFrame(function() {\n var s = r - window.innerHeight;\n s && o >= r && (document.body.style.top = -(o + s));\n });\n }, 300);\n }\n });\n}, wk = function() {\n if (Mi !== void 0) {\n var e = -parseInt(document.body.style.top, 10), o = -parseInt(document.body.style.left, 10);\n document.body.style.position = Mi.position, document.body.style.top = Mi.top, document.body.style.left = Mi.left, window.scrollTo(o, e), Mi = void 0;\n }\n}, Sk = function(e) {\n return e ? e.scrollHeight - e.scrollTop <= e.clientHeight : !1;\n}, Ik = function(e, o) {\n var n = e.targetTouches[0].clientY - J2;\n return q2(e.target) ? !1 : o && o.scrollTop === 0 && n > 0 || Sk(o) && n < 0 ? Nf(e) : (e.stopPropagation(), !0);\n}, Q2 = function(e, o) {\n if (!e) {\n console.error(\"disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.\");\n return;\n }\n if (!Oi.some(function(r) {\n return r.targetElement === e;\n })) {\n var n = {\n targetElement: e,\n options: o || {}\n };\n Oi = [].concat(vk(Oi), [\n n\n ]), Pf ? xk() : yk(o), Pf && (e.ontouchstart = function(r) {\n r.targetTouches.length === 1 && (J2 = r.targetTouches[0].clientY);\n }, e.ontouchmove = function(r) {\n r.targetTouches.length === 1 && Ik(r, e);\n }, Ef || (document.addEventListener(\"touchmove\", Nf, I1 ? {\n passive: !1\n } : void 0), Ef = !0));\n }\n};\nvar K2 = function(e) {\n if (!e) {\n console.error(\"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.\");\n return;\n }\n Oi = Oi.filter(function(o) {\n return o.targetElement !== e;\n }), Pf && (e.ontouchstart = null, e.ontouchmove = null, Ef && Oi.length === 0 && (document.removeEventListener(\"touchmove\", Nf, I1 ? {\n passive: !1\n } : void 0), Ef = !1)), Pf ? wk() : Ck();\n};\n_c47 = K2;\nvar e3 = ({ classPrefix: t, zIndex: e })=>{\n let o = t ? `${t}__` : \"\";\n return `\n .${o}${us} {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n position: fixed;\n pointer-events: none;\n visibility: hidden;\n z-index: -1;\n }\n\n .${o}${us}--appear,\n .${o}${us}--appearDone,\n .${o}${us}--enter,\n .${o}${us}--enterDone,\n .${o}${us}--exit {\n pointer-events: all;\n visibility: visible;\n z-index: ${e};\n }\n\n .${o}${cs} {\n position: absolute;\n visibility: hidden;\n }\n\n .${o}${cs}--appear,\n .${o}${cs}--appearDone,\n .${o}${cs}--enter,\n .${o}${cs}--enterDone,\n .${o}${cs}--exit {\n visibility: visible;\n }\n `;\n};\nvar t3 = (t, e)=>{\n let o = Object.assign({}, t), { type: n, payload: r } = e;\n switch(n){\n case \"UPDATE_MODAL\":\n {\n let { slug: s } = r;\n s && (o[s] = Object.assign(Object.assign({}, o[s]), r));\n break;\n }\n case \"OPEN_MODAL\":\n {\n let { slug: s } = r;\n s && (s in o && o[s].isOpen || (o[s] = Object.assign(Object.assign({}, o[s]), {\n slug: s,\n openedOn: Date.now(),\n isOpen: !0\n })));\n break;\n }\n case \"TOGGLE_MODAL\":\n {\n let { slug: s } = r;\n if (s) {\n let i = s in o && o[s].isOpen;\n o[s] = Object.assign(Object.assign({}, o[s]), {\n slug: s,\n openedOn: i ? void 0 : Date.now(),\n isOpen: !i\n });\n }\n break;\n }\n case \"CLOSE_MODAL\":\n {\n let { slug: s } = r;\n s && (o[s] = Object.assign(Object.assign({}, o[s]), {\n slug: s,\n openedOn: void 0,\n isOpen: !1\n }));\n break;\n }\n case \"REMOVE_MODAL\":\n {\n let { slug: s } = r;\n s && s in o && delete o[s];\n break;\n }\n case \"CLOSE_LATEST_MODAL\":\n {\n let s = Object.keys(o).reduce((i, l)=>{\n let a = o[l];\n return a.isOpen && typeof a.openedOn == \"number\" && (!i || typeof i.openedOn == \"number\" && a.openedOn > i.openedOn) ? a : i;\n }, void 0);\n s && (o[s.slug] = Object.assign(Object.assign({}, o[s.slug]), {\n isOpen: !1,\n openedOn: void 0\n }));\n break;\n }\n case \"CLOSE_ALL_MODALS\":\n {\n o = Object.entries(o).reduce((s, [i, l])=>(s[i] = Object.assign(Object.assign({}, l), {\n isOpen: !1,\n openedOn: void 0\n }), s), {});\n break;\n }\n default:\n break;\n }\n return o;\n};\nvar Dk = ()=>{\n if (typeof window < \"u\") return new URLSearchParams(window.location.search);\n}, Rk = ()=>{\n let t = Dk(), e = [];\n if (t) {\n let o = t.get(\"modal\");\n o && (o.includes(\",\") ? e = o.split(\",\") : e = [\n o\n ]);\n }\n return e;\n}, _1 = (t)=>{\n let { classPrefix: e, minifyCSS: o = !0, generateCSS: n = !0, zIndex: r = 9999, handleParamChange: s, children: i, transTime: l = 250 } = t, a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [c, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(t3, {}, ()=>Rk().reduce((k, P)=>(k[P] = {\n slug: P,\n isOpen: !0,\n openedOn: Date.now()\n }, k), {})), [d, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n T.keyCode === 27 && u({\n type: \"CLOSE_LATEST_MODAL\"\n });\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(y.current || (document.addEventListener(\"keydown\", (T)=>v(T), !1), y.current = !0), ()=>{\n y.current && document.removeEventListener(\"keydown\", (T)=>v(T), !1);\n }), [\n v\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (n) {\n let T = \"\";\n T = e3({\n classPrefix: e,\n zIndex: r\n }), o && (T = T.replace(/\\n/g, \"\").replace(/\\s\\s+/g, \" \")), C(T);\n }\n }, [\n n,\n o,\n r,\n e\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (typeof s == \"function\" && s(c), typeof s == \"boolean\" && s) {\n let T = Object.keys(c).filter((E)=>c[E].isOpen), A = new URLSearchParams;\n for (let E of T)A.append(\"modal\", E);\n let k = A.toString() ? `?${A}` : \"\", P = `${window.location.pathname}${k}`;\n window.history.pushState({}, \"\", P);\n }\n }, [\n c,\n s\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let T = Object.keys(c).some((A)=>c[A].isOpen);\n f(T);\n }, [\n c\n ]);\n let x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T, A)=>{\n A && (T ? (Q2(A), g(!0)) : (K2(A), g(!1)));\n }, []), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n a.current = T;\n }, []), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n u({\n type: \"OPEN_MODAL\",\n payload: {\n slug: T\n }\n });\n }, []), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n u({\n type: \"CLOSE_MODAL\",\n payload: {\n slug: T\n }\n });\n }, []), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n u({\n type: \"CLOSE_ALL_MODALS\"\n });\n }, []), R = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n u({\n type: \"TOGGLE_MODAL\",\n payload: {\n slug: T\n }\n });\n }, []), D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>c[T] && c[T].isOpen, [\n c\n ]), _ = Object.assign({}, t);\n return delete _.children, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n n && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n __html: b\n }\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Df.Provider, {\n value: Object.assign(Object.assign({}, _), {\n transTime: l,\n containerRef: a,\n modalState: c,\n oneModalIsOpen: d,\n isModalOpen: D,\n closeOnBlur: m,\n bodyScrollIsLocked: h,\n classPrefix: e,\n closeAllModals: S,\n setCloseOnBlur: p,\n openModal: w,\n closeModal: F,\n toggleModal: R,\n setBodyScrollLock: x,\n setContainerRef: I\n }),\n children: i\n })\n ]\n });\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Qc = \"gutter\", Io = (t)=>{\n let { children: e, className: o, left: n = !0, negativeLeft: r = !1, negativeRight: s = !1, ref: i, right: l = !0 } = t, a = n && !r, c = l && !s;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n Qc,\n a && `${Qc}--left`,\n c && `${Qc}--right`,\n r && `${Qc}--negative-left`,\n s && `${Qc}--negative-right`,\n o\n ].filter(Boolean).join(\" \"),\n ref: i,\n children: e\n });\n};\n\n\nvar Kc = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), n = ct(), r = `${t}-${o}`, s;\n return e[0] !== n || e[1] !== r ? (s = eu({\n slug: r,\n depth: n\n }), e[0] = n, e[1] = r, e[2] = s) : s = e[2], s;\n};\n_c48 = Kc;\nvar ln = \"drawer\", F1 = 100, eu = ({ slug: t, depth: e })=>`drawer_${e}_${t}`, ms = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { slug: o, children: n, className: r, disabled: s, onClick: i, ...l } = t, { openModal: a } = ie(), c;\n return e[0] !== i || e[1] !== a || e[2] !== o ? (c = (d)=>{\n a(o), typeof i == \"function\" && i(d);\n }, e[0] = i, e[1] = a, e[2] = o, e[3] = c) : c = e[3], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: r,\n disabled: s,\n onClick: c,\n type: \"button\",\n ...l,\n children: n\n });\n}, It = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(22), { slug: o, children: n, className: r, gutter: s, Header: i, hoverTitle: l, title: a } = t, c = s === void 0 ? !0 : s, { t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeModal: d, modalState: f } = ie(), m = Vr(), p = !!f[o]?.isOpen, [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(p), b, C;\n if (e[0] !== p ? (b = ()=>{\n g(p);\n }, C = [\n p\n ], e[0] = p, e[1] = b, e[2] = C) : (b = e[1], C = e[2]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(b, C), p) {\n let y = h && `${ln}--is-open`, v = m > 1 && `${ln}--nested`, x;\n e[3] !== r || e[4] !== y || e[5] !== v ? (x = [\n r,\n ln,\n y,\n v\n ].filter(Boolean), e[3] = r, e[4] = y, e[5] = v, e[6] = x) : x = e[6];\n let I = x.join(\" \"), w = F1 + m, F;\n if (e[7] !== i || e[8] !== n || e[9] !== d || e[10] !== m || e[11] !== c || e[12] !== l || e[13] !== o || e[14] !== u || e[15] !== I || e[16] !== w || e[17] !== a) {\n let S;\n e[19] !== d || e[20] !== o ? (S = ()=>d(o), e[19] = d, e[20] = o, e[21] = S) : S = e[21], F = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($k, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Jo, {\n className: I,\n closeOnBlur: !1,\n slug: o,\n style: {\n zIndex: w\n },\n children: [\n (!m || m === 1) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${ln}__blur-bg`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": u(\"general:close\"),\n className: `${ln}__close`,\n id: `close-drawer__${o}`,\n onClick: S,\n type: \"button\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${ln}__content`,\n style: {\n width: `calc(100% - (${m} * var(--gutter-h)))`\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${ln}__blur-bg-content`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${ln}__content-children`,\n left: c,\n right: c,\n children: [\n i,\n i === void 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${ln}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h2\", {\n className: `${ln}__header__title`,\n title: l ? a : null,\n children: a\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": u(\"general:close\"),\n className: `${ln}__header__close`,\n id: `close-drawer__${o}`,\n onClick: ()=>d(o),\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n })\n ]\n }),\n n\n ]\n })\n ]\n })\n ]\n })\n }), e[7] = i, e[8] = n, e[9] = d, e[10] = m, e[11] = c, e[12] = l, e[13] = o, e[14] = u, e[15] = I, e[16] = w, e[17] = a, e[18] = F;\n } else F = e[18];\n return F;\n }\n return null;\n}, n3 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(1), $k = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { children: o } = t, r = Vr() + 1, s;\n return e[0] !== o || e[1] !== r ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(n3, {\n value: r,\n children: o\n }), e[0] = o, e[1] = r, e[2] = s) : s = e[2], s;\n}, Vr = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(n3);\nvar $f = \"confirmation-modal\";\nfunction rt(t) {\n _s7();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(25), { body: o, cancelLabel: n, className: r, confirmingLabel: s, confirmLabel: i, heading: l, modalSlug: a, onCancel: c, onConfirm: u } = t, d = Vr(), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), { closeModal: p, isModalOpen: h } = ie(), { t: g } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), b;\n e[0] !== p || e[1] !== f || e[2] !== a || e[3] !== u ? (b = async ()=>{\n f || (m(!0), typeof u == \"function\" && await u(), m(!1), p(a));\n }, e[0] = p, e[1] = f, e[2] = a, e[3] = u, e[4] = b) : b = e[4];\n let C = b, y;\n e[5] !== p || e[6] !== f || e[7] !== a || e[8] !== c ? (y = ()=>{\n f || (p(a), typeof c == \"function\" && c());\n }, e[5] = p, e[6] = f, e[7] = a, e[8] = c, e[9] = y) : y = e[9];\n let v = y;\n if (!h(a)) return null;\n let x;\n e[10] !== r ? (x = [\n $f,\n r\n ].filter(Boolean), e[10] = r, e[11] = x) : x = e[11];\n let I = x.join(\" \"), w = F1 + d, F;\n return e[12] !== o || e[13] !== n || e[14] !== i || e[15] !== f || e[16] !== s || e[17] !== l || e[18] !== a || e[19] !== v || e[20] !== C || e[21] !== g || e[22] !== I || e[23] !== w ? (F = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jo, {\n className: I,\n closeOnBlur: !1,\n slug: a,\n style: {\n zIndex: w\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$f}__wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$f}__content`,\n children: [\n typeof l == \"string\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h1\", {\n children: l\n }) : l,\n typeof o == \"string\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: o\n }) : o\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$f}__controls`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n disabled: f,\n id: \"confirm-cancel\",\n onClick: v,\n size: \"large\",\n type: \"button\",\n children: n || g(\"general:cancel\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n id: \"confirm-action\",\n onClick: C,\n size: \"large\",\n children: f ? s || `${g(\"general:loading\")}...` : i || g(\"general:confirm\")\n })\n ]\n })\n ]\n })\n }), e[12] = o, e[13] = n, e[14] = i, e[15] = f, e[16] = s, e[17] = l, e[18] = a, e[19] = v, e[20] = C, e[21] = g, e[22] = I, e[23] = w, e[24] = F) : F = e[24], F;\n}\n_s7(rt, \"bO+efTjzYttePOPLrNC7WBRUIrw=\");\nvar R1 = \"stay-logged-in\", s3 = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(11), { refreshCookie: e } = Ie(), o = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { config: n } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { admin: r, routes: s } = n, { routes: i } = r, { logout: l } = i, { admin: a } = s, { t: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { startRouteTransition: u } = Ye(), d;\n t[0] !== a || t[1] !== l || t[2] !== o || t[3] !== u ? (d = ()=>u(()=>o.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: a,\n path: l\n }))), t[0] = a, t[1] = l, t[2] = o, t[3] = u, t[4] = d) : d = t[4];\n let f = d, m;\n t[5] !== e ? (m = ()=>{\n e();\n }, t[5] = e, t[6] = m) : m = t[6];\n let p = m, h;\n return t[7] !== p || t[8] !== f || t[9] !== c ? (h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: c(\"authentication:youAreInactive\"),\n cancelLabel: c(\"authentication:stayLoggedIn\"),\n confirmLabel: c(\"authentication:logOut\"),\n heading: c(\"authentication:stayLoggedIn\"),\n modalSlug: R1,\n onCancel: p,\n onConfirm: f\n }), t[7] = p, t[8] = f, t[9] = c, t[10] = h) : h = t[10], h;\n};\n\nvar Ge = {\n delete: (t, e = {\n headers: {}\n })=>{\n let o = e && e.headers ? {\n ...e.headers\n } : {}, n = {\n ...e,\n credentials: \"include\",\n headers: {\n ...o\n },\n method: \"delete\"\n };\n return fetch(t, n);\n },\n get: (t, e = {\n headers: {}\n })=>{\n let o = \"\";\n return e.params && (o = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(e.params, {\n addQueryPrefix: !0\n })), fetch(`${t}${o}`, {\n credentials: \"include\",\n ...e\n });\n },\n patch: (t, e = {\n headers: {}\n })=>{\n let o = e && e.headers ? {\n ...e.headers\n } : {}, n = {\n ...e,\n credentials: \"include\",\n headers: {\n ...o\n },\n method: \"PATCH\"\n };\n return fetch(t, n);\n },\n post: (t, e = {\n headers: {}\n })=>{\n let o = e && e.headers ? {\n ...e.headers\n } : {}, n = {\n ...e,\n credentials: \"include\",\n headers: {\n ...o\n },\n method: \"post\"\n };\n return fetch(`${t}`, n);\n },\n put: (t, e = {\n headers: {}\n })=>{\n let o = e && e.headers ? {\n ...e.headers\n } : {}, n = {\n ...e,\n credentials: \"include\",\n headers: {\n ...o\n },\n method: \"put\"\n };\n return fetch(t, n);\n }\n};\nvar l3 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), Zk = 2147483647;\nfunction A1({ children: t, permissions: e, user: o }) {\n _s8();\n let n = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.usePathname)(), r = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { config: s } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { admin: { autoLogin: i, autoRefresh: l, routes: { inactivity: a }, user: c }, routes: { admin: u, api: d } } = s, { i18n: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeAllModals: m, openModal: p } = ie(), { startRouteTransition: h } = Ye(), [g, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(o), [C, y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [v, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [I, w] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(e), [F, S] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(12e4), [R, D] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), _ = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), T = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), A = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), k = g?.id, P = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n let z = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: u,\n path: \"\"\n });\n h(()=>r.replace((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: u,\n path: `${a}${window.location.pathname.startsWith(z) ? `?redirect=${encodeURIComponent(window.location.pathname)}` : \"\"}`\n }))), m();\n }, [\n r,\n u,\n a,\n m,\n h\n ]), E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n b(null), y(void 0), x(void 0), clearTimeout(_.current);\n }, []), B = Qe(()=>{\n l ? W() : p(R1);\n }), $ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((z)=>{\n if (clearTimeout(T.current), clearTimeout(A.current), z?.user) {\n b(z.user), y(z.token ?? z.refreshedToken), x(z.exp * 1e3);\n let Q = Math.max(0, Math.min((z.exp ?? 0) * 1e3 - Date.now(), Zk));\n if (Q) {\n let U = Math.min(6e4, Q / 2);\n S(U), T.current = setTimeout(B, Math.max(Q - U, 0)), A.current = setTimeout(()=>{\n E(), P();\n }, Q);\n }\n } else E();\n }, [\n P,\n E\n ]), M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((z)=>{\n if (!k) return;\n let Q = Math.max(0, (v ?? 0) - Date.now());\n (z || v && Q < F * 2) && (clearTimeout(_.current), _.current = setTimeout(async ()=>{\n try {\n let U = await Ge.post((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/${c}/refresh-token?refresh`\n }), {\n headers: {\n \"Accept-Language\": f.language\n }\n });\n if (U.status === 200) {\n let X = await U.json();\n $(X);\n } else $(null), P();\n } catch (U) {\n ee.error(U.message);\n }\n }, 1e3));\n }, [\n d,\n f.language,\n P,\n $,\n v,\n c,\n F,\n k\n ]), L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (z)=>{\n try {\n let Q = await Ge.post((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/${c}/refresh-token`\n }), {\n headers: {\n \"Accept-Language\": f.language\n }\n });\n if (Q.status === 200) {\n let U = await Q.json();\n return z || $(U), U.user;\n }\n g && ($(null), P());\n } catch (Q) {\n ee.error(`Refreshing token failed: ${Q.message}`);\n }\n return null;\n }, [\n d,\n f.language,\n P,\n $,\n c,\n g\n ]), j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n try {\n g && g.collection && ($(null), await Ge.post((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/${g.collection}/logout`\n })));\n } catch {}\n return !0;\n }, [\n d,\n $,\n g\n ]), O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ locale: z } = {})=>{\n let Q = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n locale: z\n }, {\n addQueryPrefix: !0\n });\n try {\n let U = await Ge.get((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/access${Q}`\n }), {\n headers: {\n \"Accept-Language\": f.language\n }\n });\n if (U.status === 200) {\n let X = await U.json();\n w(X);\n } else throw new Error(`Fetching permissions failed with status code ${U.status}`);\n } catch (U) {\n ee.error(`Refreshing permissions failed: ${U.message}`);\n }\n }, [\n d,\n f\n ]), V = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"A1.useCallback[V]\": async ()=>{\n try {\n let z = await Ge.get((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/${c}/me`\n }), {\n credentials: \"include\",\n headers: {\n \"Accept-Language\": f.language\n }\n });\n if (z.status === 200) {\n let Q = await z.json();\n return $(Q), Q?.user || null;\n }\n } catch (z) {\n ee.error(`Fetching user failed: ${z.message}`);\n }\n return null;\n }\n }[\"A1.useCallback[V]\"], [\n d,\n c,\n f.language,\n $\n ]), W = Qe(M);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n W();\n }, [\n n\n ]);\n let Z = Qe(V);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n async function z() {\n await Z(), D(!0);\n }\n z();\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n !g && i && !i.prefillOnly && Z();\n }, [\n g,\n i\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>{\n clearTimeout(_.current), clearTimeout(T.current), clearTimeout(A.current);\n }, []), !g && !R ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(l3, {\n value: {\n fetchFullUser: V,\n logOut: j,\n permissions: I,\n refreshCookie: M,\n refreshCookieAsync: L,\n refreshPermissions: O,\n setPermissions: w,\n setUser: $,\n token: C,\n tokenExpirationMs: v,\n user: g\n },\n children: t\n });\n}\n_s8(A1, \"0M9wumgjJZ2lj46QGyMTH5aib+M=\");\n_c49 = A1;\nvar Ie = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(l3);\n_c50 = Ie;\nvar f3 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), p3 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n localeIsLoading: !1,\n setLocaleIsLoading: (t)=>{}\n}), oj = async (t, e)=>await fetch(`${e}/payload-preferences/${t}`, {\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n method: \"GET\"\n })?.then((o)=>o.json()), P1 = (t)=>{\n _s9();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(28), { children: o, locale: n } = t, { config: r } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { localization: s, routes: i } = r, l = s === void 0 ? !1 : s, { api: a } = i, { user: c } = Ie(), u = l ? l.defaultLocale : \"en\", d = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), f;\n e[0] !== d ? (f = d.get(\"locale\"), e[0] = d, e[1] = f) : f = e[1];\n let m = f, p;\n e[2] !== u || e[3] !== n || e[4] !== m || e[5] !== l ? (p = ()=>!l || l && !l.locales.length ? {} : Zs(l, m) || Zs(l, n) || Zs(l, u) || Zs(l, l.locales[0].code), e[2] = u, e[3] = n, e[4] = m, e[5] = l, e[6] = p) : p = e[6];\n let [h, g] = react__WEBPACK_IMPORTED_MODULE_0__.useState(p), [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(h), v, x;\n e[7] !== h ? (v = ()=>{\n h.code !== y.current.code && C(!1), y.current = h;\n }, x = [\n h\n ], e[7] = h, e[8] = v, e[9] = x) : (v = e[8], x = e[9]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(v, x);\n let I;\n e[10] !== a ? (I = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: a,\n path: \"\"\n }), e[10] = a, e[11] = I) : I = e[11];\n let w = I, F;\n e[12] !== u || e[13] !== w || e[14] !== m || e[15] !== l || e[16] !== c?.id ? (F = ()=>{\n (async function() {\n if (l && c?.id) {\n let A = m || await oj(\"locale\", w)?.then(rj), k = Zs(l, A) || Zs(l, u) || Zs(l, l?.locales?.[0]?.code);\n k && g(k);\n }\n })();\n }, e[12] = u, e[13] = w, e[14] = m, e[15] = l, e[16] = c?.id, e[17] = F) : F = e[17];\n let S = c?.id, R;\n e[18] !== u || e[19] !== w || e[20] !== m || e[21] !== l || e[22] !== S ? (R = [\n u,\n l,\n w,\n m,\n S\n ], e[18] = u, e[19] = w, e[20] = m, e[21] = l, e[22] = S, e[23] = R) : R = e[23], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(F, R);\n let D;\n return e[24] !== o || e[25] !== b || e[26] !== h ? (D = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(f3, {\n value: h,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(p3, {\n value: {\n localeIsLoading: b,\n setLocaleIsLoading: C\n },\n children: o\n })\n }), e[24] = o, e[25] = b, e[26] = h, e[27] = D) : D = e[27], D;\n}, Of = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(p3), ye = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(f3);\n_s9(P1, \"RG8nE3TuHg0pc4dpsjC6y5o0p60=\");\nfunction rj(t) {\n return t.value;\n}\nvar Vf = (t, e, o)=>{\n if (t) return `field-${t.replace(/\\./g, \"__\")}${e > 1 ? `-${e}` : \"\"}${o ? `-${o}` : \"\"}`;\n};\n_c51 = Vf;\nvar Ce = (t)=>{\n let { as: e, hideLocale: o, htmlFor: n, label: r, localized: s, path: i, required: l, unstyled: a } = t, c = e === void 0 ? \"label\" : e, u = o === void 0 ? !1 : o, d = s === void 0 ? !1 : s, f = l === void 0 ? !1 : l, m = a === void 0 ? !1 : a, { uuid: p } = $e(), h = ct(), g = n || Vf(i, h, p), { i18n: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { code: C, label: y } = ye(), v = c === \"label\" ? g ? \"label\" : \"span\" : c || \"span\";\n return r ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(v, {\n className: `field-label${m ? \" unstyled\" : \"\"}`,\n htmlFor: g,\n children: [\n (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r, b),\n f && !m && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: \"required\",\n children: \"*\"\n }),\n d && !u && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: \"localized\",\n children: [\n \"\\u2014 \",\n typeof y == \"string\" ? y : C\n ]\n })\n ]\n }) : null;\n};\n_c52 = Ce;\nvar Gf = ({ collapsed: t, rowID: e, rows: o })=>o.reduce((n, r)=>(e === r.id && (r.collapsed = t), r.collapsed && n.collapsedIDs.push(r.id), n.updatedRows.push(r), n), {\n collapsedIDs: [],\n updatedRows: []\n }), zf = ({ collapsed: t, rows: e })=>e.reduce((o, n)=>(n.collapsed = t, t && o.collapsedIDs.push(n.id), o.updatedRows.push(n), o), {\n collapsedIDs: [],\n updatedRows: []\n });\n\n\n\n\n\n\n\n\n\n\nvar zi = (t, e, o)=>{\n let n = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), r;\n n[0] !== o ? (r = o === void 0 ? [] : o, n[0] = o, n[1] = r) : r = n[1];\n let s = r, i;\n n[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (i = Date.now(), n[2] = i) : i = n[2];\n let l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(i), a;\n n[3] !== t || n[4] !== e ? (a = ()=>{\n let u = setTimeout(()=>{\n Date.now() - l.current >= e && (t(), l.current = Date.now());\n }, e - (Date.now() - l.current));\n return ()=>{\n clearTimeout(u);\n };\n }, n[3] = t, n[4] = e, n[5] = a) : a = n[5];\n let c;\n n[6] !== e || n[7] !== s ? (c = [\n e,\n ...s\n ], n[6] = e, n[7] = s, n[8] = c) : c = n[8], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(a, c);\n};\n\n\n\n\n\nvar cj = {}, ou = {};\nfunction fl(t, e) {\n try {\n let n = (cj[t] ||= new Intl.DateTimeFormat(\"en-GB\", {\n timeZone: t,\n hour: \"numeric\",\n timeZoneName: \"longOffset\"\n }).format)(e).split(\"GMT\")[1] || \"\";\n return n in ou ? ou[n] : g3(n, n.split(\":\"));\n } catch {\n if (t in ou) return ou[t];\n let o = t?.match(uj);\n return o ? g3(t, o.slice(1)) : NaN;\n }\n}\nvar uj = /([+-]\\d\\d):?(\\d\\d)?/;\nfunction g3(t, e) {\n let o = +e[0], n = +(e[1] || 0);\n return ou[t] = o > 0 ? o * 60 + n : o * 60 - n;\n}\nvar no = class t extends Date {\n constructor(...e){\n super(), e.length > 1 && typeof e[e.length - 1] == \"string\" && (this.timeZone = e.pop()), this.internal = new Date, isNaN(fl(this.timeZone, this)) ? this.setTime(NaN) : e.length ? typeof e[0] == \"number\" && (e.length === 1 || e.length === 2 && typeof e[1] != \"number\") ? this.setTime(e[0]) : typeof e[0] == \"string\" ? this.setTime(+new Date(e[0])) : e[0] instanceof Date ? this.setTime(+e[0]) : (this.setTime(+new Date(...e)), v3(this, NaN), E1(this)) : this.setTime(Date.now());\n }\n static tz(e, ...o) {\n return o.length ? new t(...o, e) : new t(Date.now(), e);\n }\n withTimeZone(e) {\n return new t(+this, e);\n }\n getTimezoneOffset() {\n return -fl(this.timeZone, this);\n }\n setTime(e) {\n return Date.prototype.setTime.apply(this, arguments), E1(this), +this;\n }\n [Symbol.for(\"constructDateFrom\")](e) {\n return new t(+new Date(e), this.timeZone);\n }\n}, b3 = /^(get|set)(?!UTC)/;\nObject.getOwnPropertyNames(Date.prototype).forEach((t)=>{\n if (!b3.test(t)) return;\n let e = t.replace(b3, \"$1UTC\");\n no.prototype[e] && (t.startsWith(\"get\") ? no.prototype[t] = function() {\n return this.internal[e]();\n } : (no.prototype[t] = function() {\n return Date.prototype[e].apply(this.internal, arguments), dj(this), +this;\n }, no.prototype[e] = function() {\n return Date.prototype[e].apply(this, arguments), E1(this), +this;\n }));\n});\nfunction E1(t) {\n t.internal.setTime(+t), t.internal.setUTCMinutes(t.internal.getUTCMinutes() - t.getTimezoneOffset());\n}\n_c53 = E1;\nfunction dj(t) {\n Date.prototype.setFullYear.call(t, t.internal.getUTCFullYear(), t.internal.getUTCMonth(), t.internal.getUTCDate()), Date.prototype.setHours.call(t, t.internal.getUTCHours(), t.internal.getUTCMinutes(), t.internal.getUTCSeconds(), t.internal.getUTCMilliseconds()), v3(t);\n}\nfunction v3(t) {\n let e = fl(t.timeZone, t), o = new Date(+t);\n o.setUTCHours(o.getUTCHours() - 1);\n let n = -new Date(+t).getTimezoneOffset(), r = -new Date(+o).getTimezoneOffset(), s = n - r, i = Date.prototype.getHours.apply(t) !== t.internal.getUTCHours();\n s && i && t.internal.setUTCMinutes(t.internal.getUTCMinutes() + s);\n let l = n - e;\n l && Date.prototype.setUTCMinutes.call(t, Date.prototype.getUTCMinutes.call(t) + l);\n let a = fl(t.timeZone, t), u = -new Date(+t).getTimezoneOffset() - a, d = a !== e, f = u - l;\n if (d && f) {\n Date.prototype.setUTCMinutes.call(t, Date.prototype.getUTCMinutes.call(t) + f);\n let m = fl(t.timeZone, t), p = a - m;\n p && (t.internal.setUTCMinutes(t.internal.getUTCMinutes() + p), Date.prototype.setUTCMinutes.call(t, Date.prototype.getUTCMinutes.call(t) + p));\n }\n}\nvar mj = Math.pow(10, 8) * 24 * 60 * 60 * 1e3, kce = -mj, Wf = 6048e5, y3 = 864e5;\nvar ru = 43200, N1 = 1440;\nvar fj = 3600;\nvar C3 = fj * 24, jce = C3 * 7, pj = C3 * 365.2425, hj = pj / 12, $ce = hj * 3, L1 = Symbol.for(\"constructDateFrom\");\nfunction ho(t, e) {\n return typeof t == \"function\" ? t(e) : t && typeof t == \"object\" && L1 in t ? t[L1](e) : t instanceof Date ? new t.constructor(e) : new Date(e);\n}\nfunction it(t, e) {\n return ho(e || t, t);\n}\nvar gj = {};\nfunction $n() {\n return gj;\n}\nfunction fs(t, e) {\n let o = $n(), n = e?.weekStartsOn ?? e?.locale?.options?.weekStartsOn ?? o.weekStartsOn ?? o.locale?.options?.weekStartsOn ?? 0, r = it(t, e?.in), s = r.getDay(), i = (s < n ? 7 : 0) + s - n;\n return r.setDate(r.getDate() - i), r.setHours(0, 0, 0, 0), r;\n}\nfunction Wi(t, e) {\n return fs(t, {\n ...e,\n weekStartsOn: 1\n });\n}\n_c54 = Wi;\nfunction Hf(t, e) {\n let o = it(t, e?.in), n = o.getFullYear(), r = ho(o, 0);\n r.setFullYear(n + 1, 0, 4), r.setHours(0, 0, 0, 0);\n let s = Wi(r), i = ho(o, 0);\n i.setFullYear(n, 0, 4), i.setHours(0, 0, 0, 0);\n let l = Wi(i);\n return o.getTime() >= s.getTime() ? n + 1 : o.getTime() >= l.getTime() ? n : n - 1;\n}\n_c55 = Hf;\nfunction pl(t) {\n let e = it(t), o = new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()));\n return o.setUTCFullYear(e.getFullYear()), +t - +o;\n}\nfunction Bn(t, ...e) {\n let o = ho.bind(null, t || e.find((n)=>typeof n == \"object\"));\n return e.map(o);\n}\n_c56 = Bn;\nfunction qs(t, e) {\n let o = it(t, e?.in);\n return o.setHours(0, 0, 0, 0), o;\n}\nfunction x3(t, e, o) {\n let [n, r] = Bn(o?.in, t, e), s = qs(n), i = qs(r), l = +s - pl(s), a = +i - pl(i);\n return Math.round((l - a) / y3);\n}\nfunction w3(t, e) {\n let o = Hf(t, e), n = ho(e?.in || t, 0);\n return n.setFullYear(o, 0, 4), n.setHours(0, 0, 0, 0), Wi(n);\n}\nfunction hl(t, e) {\n let o = +it(t) - +it(e);\n return o < 0 ? -1 : o > 0 ? 1 : o;\n}\nfunction Uf(t) {\n return ho(t, Date.now());\n}\n_c57 = Uf;\nfunction S3(t, e, o) {\n let [n, r] = Bn(o?.in, t, e);\n return +qs(n) == +qs(r);\n}\n_c58 = S3;\nfunction I3(t) {\n return t instanceof Date || typeof t == \"object\" && Object.prototype.toString.call(t) === \"[object Date]\";\n}\n_c59 = I3;\nfunction _3(t) {\n return !(!I3(t) && typeof t != \"number\" || isNaN(+it(t)));\n}\nfunction T3(t, e, o) {\n let [n, r] = Bn(o?.in, t, e), s = n.getFullYear() - r.getFullYear(), i = n.getMonth() - r.getMonth();\n return s * 12 + i;\n}\n_c60 = T3;\nfunction F3(t) {\n return (e)=>{\n let n = (t ? Math[t] : Math.trunc)(e);\n return n === 0 ? 0 : n;\n };\n}\n_c61 = F3;\nfunction D3(t, e) {\n return +it(t) - +it(e);\n}\n_c62 = D3;\nfunction Xf(t, e) {\n let o = it(t, e?.in);\n return o.setHours(23, 59, 59, 999), o;\n}\n_c63 = Xf;\nfunction R3(t, e) {\n let o = it(t, e?.in), n = o.getMonth();\n return o.setFullYear(o.getFullYear(), n + 1, 0), o.setHours(23, 59, 59, 999), o;\n}\n_c64 = R3;\nfunction A3(t, e) {\n let o = it(t, e?.in);\n return +Xf(o, e) == +R3(o, e);\n}\n_c65 = A3;\nfunction P3(t, e, o) {\n let [n, r, s] = Bn(o?.in, t, t, e), i = hl(r, s), l = Math.abs(T3(r, s));\n if (l < 1) return 0;\n r.getMonth() === 1 && r.getDate() > 27 && r.setDate(30), r.setMonth(r.getMonth() - i * l);\n let a = hl(r, s) === -i;\n A3(n) && l === 1 && hl(n, s) === 1 && (a = !1);\n let c = i * (l - +a);\n return c === 0 ? 0 : c;\n}\n_c66 = P3;\nfunction E3(t, e, o) {\n let n = D3(t, e) / 1e3;\n return F3(o?.roundingMethod)(n);\n}\n_c67 = E3;\nfunction N3(t, e) {\n let o = it(t, e?.in);\n return o.setFullYear(o.getFullYear(), 0, 1), o.setHours(0, 0, 0, 0), o;\n}\n_c68 = N3;\nfunction L3(t) {\n return Xf(Date.now(), t);\n}\n_c69 = L3;\nfunction k3(t, e) {\n let o = it(t, e?.in);\n return x3(o, N3(o)) + 1;\n}\nfunction j3(t, e) {\n let o = it(t, e?.in), n = +Wi(o) - +w3(o);\n return Math.round(n / Wf) + 1;\n}\nfunction Yf(t, e) {\n let o = it(t, e?.in), n = o.getFullYear(), r = $n(), s = e?.firstWeekContainsDate ?? e?.locale?.options?.firstWeekContainsDate ?? r.firstWeekContainsDate ?? r.locale?.options?.firstWeekContainsDate ?? 1, i = ho(e?.in || t, 0);\n i.setFullYear(n + 1, 0, s), i.setHours(0, 0, 0, 0);\n let l = fs(i, e), a = ho(e?.in || t, 0);\n a.setFullYear(n, 0, s), a.setHours(0, 0, 0, 0);\n let c = fs(a, e);\n return +o >= +l ? n + 1 : +o >= +c ? n : n - 1;\n}\n_c70 = Yf;\nfunction $3(t, e) {\n let o = $n(), n = e?.firstWeekContainsDate ?? e?.locale?.options?.firstWeekContainsDate ?? o.firstWeekContainsDate ?? o.locale?.options?.firstWeekContainsDate ?? 1, r = Yf(t, e), s = ho(e?.in || t, 0);\n return s.setFullYear(r, 0, n), s.setHours(0, 0, 0, 0), fs(s, e);\n}\nfunction B3(t, e) {\n let o = it(t, e?.in), n = +fs(o, e) - +$3(o, e);\n return Math.round(n / Wf) + 1;\n}\n_c71 = B3;\nfunction mt(t, e) {\n let o = t < 0 ? \"-\" : \"\", n = Math.abs(t).toString().padStart(e, \"0\");\n return o + n;\n}\nvar ps = {\n y (t, e) {\n let o = t.getFullYear(), n = o > 0 ? o : 1 - o;\n return mt(e === \"yy\" ? n % 100 : n, e.length);\n },\n M (t, e) {\n let o = t.getMonth();\n return e === \"M\" ? String(o + 1) : mt(o + 1, 2);\n },\n d (t, e) {\n return mt(t.getDate(), e.length);\n },\n a (t, e) {\n let o = t.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n switch(e){\n case \"a\":\n case \"aa\":\n return o.toUpperCase();\n case \"aaa\":\n return o;\n case \"aaaaa\":\n return o[0];\n case \"aaaa\":\n default:\n return o === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n h (t, e) {\n return mt(t.getHours() % 12 || 12, e.length);\n },\n H (t, e) {\n return mt(t.getHours(), e.length);\n },\n m (t, e) {\n return mt(t.getMinutes(), e.length);\n },\n s (t, e) {\n return mt(t.getSeconds(), e.length);\n },\n S (t, e) {\n let o = e.length, n = t.getMilliseconds(), r = Math.trunc(n * Math.pow(10, o - 3));\n return mt(r, e.length);\n }\n};\nvar gl = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\"\n}, k1 = {\n G: function(t, e, o) {\n let n = t.getFullYear() > 0 ? 1 : 0;\n switch(e){\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return o.era(n, {\n width: \"abbreviated\"\n });\n case \"GGGGG\":\n return o.era(n, {\n width: \"narrow\"\n });\n case \"GGGG\":\n default:\n return o.era(n, {\n width: \"wide\"\n });\n }\n },\n y: function(t, e, o) {\n if (e === \"yo\") {\n let n = t.getFullYear(), r = n > 0 ? n : 1 - n;\n return o.ordinalNumber(r, {\n unit: \"year\"\n });\n }\n return ps.y(t, e);\n },\n Y: function(t, e, o, n) {\n let r = Yf(t, n), s = r > 0 ? r : 1 - r;\n if (e === \"YY\") {\n let i = s % 100;\n return mt(i, 2);\n }\n return e === \"Yo\" ? o.ordinalNumber(s, {\n unit: \"year\"\n }) : mt(s, e.length);\n },\n R: function(t, e) {\n let o = Hf(t);\n return mt(o, e.length);\n },\n u: function(t, e) {\n let o = t.getFullYear();\n return mt(o, e.length);\n },\n Q: function(t, e, o) {\n let n = Math.ceil((t.getMonth() + 1) / 3);\n switch(e){\n case \"Q\":\n return String(n);\n case \"QQ\":\n return mt(n, 2);\n case \"Qo\":\n return o.ordinalNumber(n, {\n unit: \"quarter\"\n });\n case \"QQQ\":\n return o.quarter(n, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"QQQQQ\":\n return o.quarter(n, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"QQQQ\":\n default:\n return o.quarter(n, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n q: function(t, e, o) {\n let n = Math.ceil((t.getMonth() + 1) / 3);\n switch(e){\n case \"q\":\n return String(n);\n case \"qq\":\n return mt(n, 2);\n case \"qo\":\n return o.ordinalNumber(n, {\n unit: \"quarter\"\n });\n case \"qqq\":\n return o.quarter(n, {\n width: \"abbreviated\",\n context: \"standalone\"\n });\n case \"qqqqq\":\n return o.quarter(n, {\n width: \"narrow\",\n context: \"standalone\"\n });\n case \"qqqq\":\n default:\n return o.quarter(n, {\n width: \"wide\",\n context: \"standalone\"\n });\n }\n },\n M: function(t, e, o) {\n let n = t.getMonth();\n switch(e){\n case \"M\":\n case \"MM\":\n return ps.M(t, e);\n case \"Mo\":\n return o.ordinalNumber(n + 1, {\n unit: \"month\"\n });\n case \"MMM\":\n return o.month(n, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"MMMMM\":\n return o.month(n, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"MMMM\":\n default:\n return o.month(n, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n L: function(t, e, o) {\n let n = t.getMonth();\n switch(e){\n case \"L\":\n return String(n + 1);\n case \"LL\":\n return mt(n + 1, 2);\n case \"Lo\":\n return o.ordinalNumber(n + 1, {\n unit: \"month\"\n });\n case \"LLL\":\n return o.month(n, {\n width: \"abbreviated\",\n context: \"standalone\"\n });\n case \"LLLLL\":\n return o.month(n, {\n width: \"narrow\",\n context: \"standalone\"\n });\n case \"LLLL\":\n default:\n return o.month(n, {\n width: \"wide\",\n context: \"standalone\"\n });\n }\n },\n w: function(t, e, o, n) {\n let r = B3(t, n);\n return e === \"wo\" ? o.ordinalNumber(r, {\n unit: \"week\"\n }) : mt(r, e.length);\n },\n I: function(t, e, o) {\n let n = j3(t);\n return e === \"Io\" ? o.ordinalNumber(n, {\n unit: \"week\"\n }) : mt(n, e.length);\n },\n d: function(t, e, o) {\n return e === \"do\" ? o.ordinalNumber(t.getDate(), {\n unit: \"date\"\n }) : ps.d(t, e);\n },\n D: function(t, e, o) {\n let n = k3(t);\n return e === \"Do\" ? o.ordinalNumber(n, {\n unit: \"dayOfYear\"\n }) : mt(n, e.length);\n },\n E: function(t, e, o) {\n let n = t.getDay();\n switch(e){\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return o.day(n, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"EEEEE\":\n return o.day(n, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"EEEEEE\":\n return o.day(n, {\n width: \"short\",\n context: \"formatting\"\n });\n case \"EEEE\":\n default:\n return o.day(n, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n e: function(t, e, o, n) {\n let r = t.getDay(), s = (r - n.weekStartsOn + 8) % 7 || 7;\n switch(e){\n case \"e\":\n return String(s);\n case \"ee\":\n return mt(s, 2);\n case \"eo\":\n return o.ordinalNumber(s, {\n unit: \"day\"\n });\n case \"eee\":\n return o.day(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"eeeee\":\n return o.day(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"eeeeee\":\n return o.day(r, {\n width: \"short\",\n context: \"formatting\"\n });\n case \"eeee\":\n default:\n return o.day(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n c: function(t, e, o, n) {\n let r = t.getDay(), s = (r - n.weekStartsOn + 8) % 7 || 7;\n switch(e){\n case \"c\":\n return String(s);\n case \"cc\":\n return mt(s, e.length);\n case \"co\":\n return o.ordinalNumber(s, {\n unit: \"day\"\n });\n case \"ccc\":\n return o.day(r, {\n width: \"abbreviated\",\n context: \"standalone\"\n });\n case \"ccccc\":\n return o.day(r, {\n width: \"narrow\",\n context: \"standalone\"\n });\n case \"cccccc\":\n return o.day(r, {\n width: \"short\",\n context: \"standalone\"\n });\n case \"cccc\":\n default:\n return o.day(r, {\n width: \"wide\",\n context: \"standalone\"\n });\n }\n },\n i: function(t, e, o) {\n let n = t.getDay(), r = n === 0 ? 7 : n;\n switch(e){\n case \"i\":\n return String(r);\n case \"ii\":\n return mt(r, e.length);\n case \"io\":\n return o.ordinalNumber(r, {\n unit: \"day\"\n });\n case \"iii\":\n return o.day(n, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"iiiii\":\n return o.day(n, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"iiiiii\":\n return o.day(n, {\n width: \"short\",\n context: \"formatting\"\n });\n case \"iiii\":\n default:\n return o.day(n, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n a: function(t, e, o) {\n let r = t.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n switch(e){\n case \"a\":\n case \"aa\":\n return o.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"aaa\":\n return o.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n }).toLowerCase();\n case \"aaaaa\":\n return o.dayPeriod(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"aaaa\":\n default:\n return o.dayPeriod(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n b: function(t, e, o) {\n let n = t.getHours(), r;\n switch(n === 12 ? r = gl.noon : n === 0 ? r = gl.midnight : r = n / 12 >= 1 ? \"pm\" : \"am\", e){\n case \"b\":\n case \"bb\":\n return o.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"bbb\":\n return o.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n }).toLowerCase();\n case \"bbbbb\":\n return o.dayPeriod(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"bbbb\":\n default:\n return o.dayPeriod(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n B: function(t, e, o) {\n let n = t.getHours(), r;\n switch(n >= 17 ? r = gl.evening : n >= 12 ? r = gl.afternoon : n >= 4 ? r = gl.morning : r = gl.night, e){\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return o.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"BBBBB\":\n return o.dayPeriod(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"BBBB\":\n default:\n return o.dayPeriod(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n h: function(t, e, o) {\n if (e === \"ho\") {\n let n = t.getHours() % 12;\n return n === 0 && (n = 12), o.ordinalNumber(n, {\n unit: \"hour\"\n });\n }\n return ps.h(t, e);\n },\n H: function(t, e, o) {\n return e === \"Ho\" ? o.ordinalNumber(t.getHours(), {\n unit: \"hour\"\n }) : ps.H(t, e);\n },\n K: function(t, e, o) {\n let n = t.getHours() % 12;\n return e === \"Ko\" ? o.ordinalNumber(n, {\n unit: \"hour\"\n }) : mt(n, e.length);\n },\n k: function(t, e, o) {\n let n = t.getHours();\n return n === 0 && (n = 24), e === \"ko\" ? o.ordinalNumber(n, {\n unit: \"hour\"\n }) : mt(n, e.length);\n },\n m: function(t, e, o) {\n return e === \"mo\" ? o.ordinalNumber(t.getMinutes(), {\n unit: \"minute\"\n }) : ps.m(t, e);\n },\n s: function(t, e, o) {\n return e === \"so\" ? o.ordinalNumber(t.getSeconds(), {\n unit: \"second\"\n }) : ps.s(t, e);\n },\n S: function(t, e) {\n return ps.S(t, e);\n },\n X: function(t, e, o) {\n let n = t.getTimezoneOffset();\n if (n === 0) return \"Z\";\n switch(e){\n case \"X\":\n return O3(n);\n case \"XXXX\":\n case \"XX\":\n return Hi(n);\n case \"XXXXX\":\n case \"XXX\":\n default:\n return Hi(n, \":\");\n }\n },\n x: function(t, e, o) {\n let n = t.getTimezoneOffset();\n switch(e){\n case \"x\":\n return O3(n);\n case \"xxxx\":\n case \"xx\":\n return Hi(n);\n case \"xxxxx\":\n case \"xxx\":\n default:\n return Hi(n, \":\");\n }\n },\n O: function(t, e, o) {\n let n = t.getTimezoneOffset();\n switch(e){\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + M3(n, \":\");\n case \"OOOO\":\n default:\n return \"GMT\" + Hi(n, \":\");\n }\n },\n z: function(t, e, o) {\n let n = t.getTimezoneOffset();\n switch(e){\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + M3(n, \":\");\n case \"zzzz\":\n default:\n return \"GMT\" + Hi(n, \":\");\n }\n },\n t: function(t, e, o) {\n let n = Math.trunc(+t / 1e3);\n return mt(n, e.length);\n },\n T: function(t, e, o) {\n return mt(+t, e.length);\n }\n};\nfunction M3(t, e = \"\") {\n let o = t > 0 ? \"-\" : \"+\", n = Math.abs(t), r = Math.trunc(n / 60), s = n % 60;\n return s === 0 ? o + String(r) : o + String(r) + e + mt(s, 2);\n}\n_c72 = M3;\nfunction O3(t, e) {\n return t % 60 === 0 ? (t > 0 ? \"-\" : \"+\") + mt(Math.abs(t) / 60, 2) : Hi(t, e);\n}\n_c73 = O3;\nfunction Hi(t, e = \"\") {\n let o = t > 0 ? \"-\" : \"+\", n = Math.abs(t), r = mt(Math.trunc(n / 60), 2), s = mt(n % 60, 2);\n return o + r + e + s;\n}\n_c74 = Hi;\nvar V3 = (t, e)=>{\n switch(t){\n case \"P\":\n return e.date({\n width: \"short\"\n });\n case \"PP\":\n return e.date({\n width: \"medium\"\n });\n case \"PPP\":\n return e.date({\n width: \"long\"\n });\n case \"PPPP\":\n default:\n return e.date({\n width: \"full\"\n });\n }\n}, G3 = (t, e)=>{\n switch(t){\n case \"p\":\n return e.time({\n width: \"short\"\n });\n case \"pp\":\n return e.time({\n width: \"medium\"\n });\n case \"ppp\":\n return e.time({\n width: \"long\"\n });\n case \"pppp\":\n default:\n return e.time({\n width: \"full\"\n });\n }\n}, bj = (t, e)=>{\n let o = t.match(/(P+)(p+)?/) || [], n = o[1], r = o[2];\n if (!r) return V3(t, e);\n let s;\n switch(n){\n case \"P\":\n s = e.dateTime({\n width: \"short\"\n });\n break;\n case \"PP\":\n s = e.dateTime({\n width: \"medium\"\n });\n break;\n case \"PPP\":\n s = e.dateTime({\n width: \"long\"\n });\n break;\n case \"PPPP\":\n default:\n s = e.dateTime({\n width: \"full\"\n });\n break;\n }\n return s.replace(\"{{date}}\", V3(n, e)).replace(\"{{time}}\", G3(r, e));\n}, z3 = {\n p: G3,\n P: bj\n};\nvar vj = /^D+$/, yj = /^Y+$/, Cj = [\n \"D\",\n \"DD\",\n \"YY\",\n \"YYYY\"\n];\nfunction W3(t) {\n return vj.test(t);\n}\n_c75 = W3;\nfunction H3(t) {\n return yj.test(t);\n}\n_c76 = H3;\nfunction U3(t, e, o) {\n let n = xj(t, e, o);\n if (console.warn(n), Cj.includes(t)) throw new RangeError(n);\n}\n_c77 = U3;\nfunction xj(t, e, o) {\n let n = t[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${t.toLowerCase()}\\` instead of \\`${t}\\` (in \\`${e}\\`) for formatting ${n} to the input \\`${o}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\nvar wj = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g, Sj = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g, Ij = /^'([^]*?)'?$/, _j = /''/g, Tj = /[a-zA-Z]/;\nfunction j1(t, e, o) {\n let n = $n(), r = o?.locale ?? n.locale ?? _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.b, s = o?.firstWeekContainsDate ?? o?.locale?.options?.firstWeekContainsDate ?? n.firstWeekContainsDate ?? n.locale?.options?.firstWeekContainsDate ?? 1, i = o?.weekStartsOn ?? o?.locale?.options?.weekStartsOn ?? n.weekStartsOn ?? n.locale?.options?.weekStartsOn ?? 0, l = it(t, o?.in);\n if (!_3(l)) throw new RangeError(\"Invalid time value\");\n let a = e.match(Sj).map((u)=>{\n let d = u[0];\n if (d === \"p\" || d === \"P\") {\n let f = z3[d];\n return f(u, r.formatLong);\n }\n return u;\n }).join(\"\").match(wj).map((u)=>{\n if (u === \"''\") return {\n isToken: !1,\n value: \"'\"\n };\n let d = u[0];\n if (d === \"'\") return {\n isToken: !1,\n value: Fj(u)\n };\n if (k1[d]) return {\n isToken: !0,\n value: u\n };\n if (d.match(Tj)) throw new RangeError(\"Format string contains an unescaped latin alphabet character `\" + d + \"`\");\n return {\n isToken: !1,\n value: u\n };\n });\n r.localize.preprocessor && (a = r.localize.preprocessor(l, a));\n let c = {\n firstWeekContainsDate: s,\n weekStartsOn: i,\n locale: r\n };\n return a.map((u)=>{\n if (!u.isToken) return u.value;\n let d = u.value;\n (!o?.useAdditionalWeekYearTokens && H3(d) || !o?.useAdditionalDayOfYearTokens && W3(d)) && U3(d, e, String(t));\n let f = k1[d[0]];\n return f(l, d, r.localize, c);\n }).join(\"\");\n}\nfunction Fj(t) {\n let e = t.match(Ij);\n return e ? e[1].replace(_j, \"'\") : t;\n}\n_c78 = Fj;\nfunction X3(t, e, o) {\n let n = $n(), r = o?.locale ?? n.locale ?? _chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.b, s = 2520, i = hl(t, e);\n if (isNaN(i)) throw new RangeError(\"Invalid time value\");\n let l = Object.assign({}, o, {\n addSuffix: o?.addSuffix,\n comparison: i\n }), [a, c] = Bn(o?.in, ...i > 0 ? [\n e,\n t\n ] : [\n t,\n e\n ]), u = E3(c, a), d = (pl(c) - pl(a)) / 1e3, f = Math.round((u - d) / 60), m;\n if (f < 2) return o?.includeSeconds ? u < 5 ? r.formatDistance(\"lessThanXSeconds\", 5, l) : u < 10 ? r.formatDistance(\"lessThanXSeconds\", 10, l) : u < 20 ? r.formatDistance(\"lessThanXSeconds\", 20, l) : u < 40 ? r.formatDistance(\"halfAMinute\", 0, l) : u < 60 ? r.formatDistance(\"lessThanXMinutes\", 1, l) : r.formatDistance(\"xMinutes\", 1, l) : f === 0 ? r.formatDistance(\"lessThanXMinutes\", 1, l) : r.formatDistance(\"xMinutes\", f, l);\n if (f < 45) return r.formatDistance(\"xMinutes\", f, l);\n if (f < 90) return r.formatDistance(\"aboutXHours\", 1, l);\n if (f < N1) {\n let p = Math.round(f / 60);\n return r.formatDistance(\"aboutXHours\", p, l);\n } else {\n if (f < s) return r.formatDistance(\"xDays\", 1, l);\n if (f < ru) {\n let p = Math.round(f / N1);\n return r.formatDistance(\"xDays\", p, l);\n } else if (f < ru * 2) return m = Math.round(f / ru), r.formatDistance(\"aboutXMonths\", m, l);\n }\n if (m = P3(c, a), m < 12) {\n let p = Math.round(f / ru);\n return r.formatDistance(\"xMonths\", p, l);\n } else {\n let p = m % 12, h = Math.trunc(m / 12);\n return p < 3 ? r.formatDistance(\"aboutXYears\", h, l) : p < 9 ? r.formatDistance(\"overXYears\", h, l) : r.formatDistance(\"almostXYears\", h + 1, l);\n }\n}\n_c79 = X3;\nfunction Y3(t, e) {\n return X3(t, Uf(t), e);\n}\n_c80 = Y3;\nfunction cn(t, e) {\n let o = Dj(e) ? new e(0) : ho(e, 0);\n return o.setFullYear(t.getFullYear(), t.getMonth(), t.getDate()), o.setHours(t.getHours(), t.getMinutes(), t.getSeconds(), t.getMilliseconds()), o;\n}\nfunction Dj(t) {\n return typeof t == \"function\" && t.prototype?.constructor === t;\n}\n_c81 = Dj;\nfunction Z3(t, e) {\n return S3(ho(e?.in || t, t), Uf(e?.in || t));\n}\n_c82 = Z3;\nvar Gr = ({ date: t, i18n: e, pattern: o, timezone: n })=>{\n let r = new no(new Date(t));\n if (n) {\n let s = no.tz(n), i = r.withTimeZone(n), l = cn(i, s);\n return e.dateFNS ? j1(l, o, {\n locale: e.dateFNS\n }) : `${e.t(\"general:loading\")}...`;\n }\n return e.dateFNS ? j1(r, o, {\n locale: e.dateFNS\n }) : `${e.t(\"general:loading\")}...`;\n}, $1 = ({ date: t, i18n: e })=>{\n let o = typeof t == \"string\" ? new Date(t) : t;\n return e?.dateFNS ? Y3(o, {\n locale: e.dateFNS\n }) : `${e.t(\"general:loading\")}...`;\n};\nfunction B1(t) {\n return typeof t == \"object\" && \"root\" in t;\n}\n_c83 = B1;\nfunction Zf(t, e) {\n for (let o of t)\"text\" in o && o.text ? e += o.text : \"children\" in o || (e += `[${o.type}]`), \"children\" in o && o.children && (e += Zf(o.children, e));\n return e;\n}\n_c84 = Zf;\nvar J3 = (t)=>Array.isArray(t) ? t.map((e)=>typeof e == \"object\" && e !== null ? e.id : String(e)).filter(Boolean).join(\", \") : typeof t == \"object\" && t !== null ? t.id || \"\" : String(t);\n_c85 = J3;\nvar qo = ({ collectionConfig: t, data: e, dateFormat: o, fallback: n, globalConfig: r, i18n: s })=>{\n let i;\n if (t) {\n let l = t?.admin?.useAsTitle;\n if (l && (i = e?.[l], i)) {\n let a = t.fields.find((d)=>\"name\" in d && d.name === l), c = a?.type === \"date\", u = a?.type === \"relationship\";\n if (c) {\n let d = \"date\" in a.admin && a?.admin?.date?.displayFormat || o;\n i = Gr({\n date: i,\n i18n: s,\n pattern: d\n }) || i;\n }\n u && (i = J3(e[l]));\n }\n }\n return r && (i = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r?.label, s) || r?.slug), i && B1(i) && (i = Zf(i.root.children?.[0]?.children || [], \"\")), !i && B1(n) && (i = Zf(n.root.children?.[0]?.children || [], \"\")), i || (i = typeof n == \"string\" ? n : `[${s.t(\"general:untitled\")}]`), i;\n};\n\n\nvar q3 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), Ao = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(q3), Q3 = ({ children: t })=>{\n let { id: e, collectionSlug: o, data: n, docConfig: r, globalSlug: s, initialData: i } = Se(), { config: { admin: { dateFormat: l } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [c, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>qo({\n collectionConfig: o ? r : void 0,\n data: {\n ...i || {},\n id: e\n },\n dateFormat: l,\n fallback: e?.toString(),\n globalConfig: s ? r : void 0,\n i18n: a\n }));\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n u(qo({\n collectionConfig: o ? r : void 0,\n data: {\n ...n,\n id: e\n },\n dateFormat: l,\n fallback: e?.toString(),\n globalConfig: s ? r : void 0,\n i18n: a\n }));\n }, [\n n,\n l,\n a,\n e,\n o,\n r,\n s\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(q3, {\n value: {\n setDocumentTitle: u,\n title: c\n },\n children: t\n });\n};\n\n\n\n\nfunction M1(t, e) {\n let o = {\n ...t\n };\n for(let n in e)Object.prototype.hasOwnProperty.call(e, n) && (typeof e[n] == \"object\" && !Array.isArray(e[n]) && t[n] ? o[n] = M1(t[n], e[n]) : o[n] = e[n]);\n return o;\n}\n_c86 = M1;\nvar oS = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), tS = (t, e)=>({\n body: JSON.stringify({\n value: t\n }),\n headers: {\n \"Accept-Language\": e,\n \"Content-Type\": \"application/json\"\n }\n }), G1 = ({ children: t })=>{\n let e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), { config: r } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { user: s } = Ie(), { i18n: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { routes: { api: l } } = r;\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n s || (o.current = {});\n }, [\n s\n ]);\n let a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (u)=>{\n let d = o.current;\n if (typeof d[u] < \"u\") return d[u];\n let f = new Promise((m)=>{\n (async ()=>{\n let p = await Ge.get((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: l,\n path: `/payload-preferences/${u}`\n }), {\n credentials: \"include\",\n headers: {\n \"Accept-Language\": i.language\n }\n }), h = null;\n p.status === 200 && (h = (await p.json()).value), o.current[u] = h, m(h);\n })();\n });\n return d[u] = f, f;\n }, [\n i.language,\n l,\n o\n ]), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (u, d, f = !1)=>{\n if (f === !1) {\n o.current[u] = d, await Ge.post((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: l,\n path: `/payload-preferences/${u}`\n }), tS(d, i.language));\n return;\n }\n let m = d, p = await a(u);\n if (typeof d == \"object\" && typeof p == \"object\" && typeof m == \"object\") {\n if (p && (m = M1(p, m)), (0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(m, p)) return;\n n.current[u] = {\n ...n.current[u],\n ...m\n };\n } else {\n if (m === p) return;\n n.current[u] = m;\n }\n let h = async ()=>{\n (0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(n.current[u], o.current[u]) || (o.current[u] = n.current[u], await Ge.post((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: l,\n path: `/payload-preferences/${u}`\n }), tS(o.current[u], i.language)), delete n.current[u]);\n };\n setTimeout(()=>{\n h();\n });\n }, [\n l,\n a,\n i.language,\n n\n ]);\n return e.current.getPreference = a, e.current.setPreference = c, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(oS, {\n value: e.current,\n children: t\n });\n}, so = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(oS);\n\n\n\nvar rS = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n getUploadEdits: ()=>{},\n resetUploadEdits: void 0,\n updateUploadEdits: void 0,\n uploadEdits: void 0\n}), W1 = (t)=>{\n _s10();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(10), { children: o, initialUploadEdits: n } = t, r;\n e[0] !== n ? (r = n || {}, e[0] = n, e[1] = r) : r = e[1];\n let [s, i] = react__WEBPACK_IMPORTED_MODULE_0__.useState(r), l;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (l = ()=>{\n i({});\n }, e[2] = l) : l = e[2];\n let a = l, c;\n e[3] === Symbol.for(\"react.memo_cache_sentinel\") ? (c = (p)=>{\n i((h)=>({\n ...h || {},\n ...p || {}\n }));\n }, e[3] = c) : c = e[3];\n let u = c, d;\n e[4] !== s ? (d = ()=>s, e[4] = s, e[5] = d) : d = e[5];\n let f = d, m;\n return e[6] !== o || e[7] !== f || e[8] !== s ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rS, {\n value: {\n getUploadEdits: f,\n resetUploadEdits: a,\n updateUploadEdits: u,\n uploadEdits: s\n },\n children: o\n }), e[6] = o, e[7] = f, e[8] = s, e[9] = m) : m = e[9], m;\n}, Ui = ()=>react__WEBPACK_IMPORTED_MODULE_0__.use(rS);\n_s10(W1, \"PSQRn/KkfMPsISsHAlyM2rERMCQ=\");\n\n\n\nvar nu = (t)=>{\n let { collectionSlug: e, docPermissions: o, globalSlug: n, isEditing: r } = t;\n return e ? !!(r && o?.update || !r && o?.create) : n ? !!o?.update : !1;\n};\nvar nS = ({ id: t, collectionSlug: e, globalSlug: o })=>!!(o || e && t);\nvar iS = ({ id: t, api: e, collectionSlug: o, globalSlug: n, i18n: r, locale: s, permissions: i, setDocPermissions: l, setHasPublishPermission: a, setHasSavePermission: c })=>{\n _s11();\n return react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"iS.useCallback\": async (u)=>{\n let d = {\n locale: s || void 0\n }, f = u?.id || t, m = nS({\n id: f,\n collectionSlug: o,\n globalSlug: n\n });\n if (m) {\n let p = o ? `/${o}/access/${f}` : n ? `/globals/${n}/access` : null;\n if (p) {\n let g = await (await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: e,\n path: `${p}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(d, {\n addQueryPrefix: !0\n })}`\n }), {\n body: JSON.stringify({\n ...u?.doc || u || {},\n _status: \"draft\"\n }),\n credentials: \"include\",\n headers: {\n \"Accept-Language\": r.language,\n \"Content-Type\": \"application/json\"\n },\n method: \"post\"\n })).json(), b = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: e,\n path: `${p}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(d, {\n addQueryPrefix: !0\n })}`\n }), {\n body: JSON.stringify({\n ...u?.doc || u || {},\n _status: \"published\"\n }),\n credentials: \"include\",\n headers: {\n \"Accept-Language\": r.language,\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\"\n }).then({\n \"iS.useCallback\": (C)=>C.json()\n }[\"iS.useCallback\"]);\n l(g), c(nu({\n collectionSlug: o,\n docPermissions: g,\n globalSlug: n,\n isEditing: m\n })), a(b?.update);\n }\n } else {\n let p = o ? i?.collections?.[o] : i?.globals?.[n];\n l(p), c(nu({\n collectionSlug: o,\n docPermissions: p,\n globalSlug: n,\n isEditing: m\n }));\n }\n }\n }[\"iS.useCallback\"], [\n s,\n t,\n o,\n n,\n e,\n r.language,\n l,\n c,\n a,\n i?.collections,\n i?.globals\n ]);\n};\n_s11(iS, \"epj4qY15NHsef74wNqHIp5fdZmg=\");\nvar uS = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), Se = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(uS), Xj = ({ children: t, ...e })=>{\n _s12();\n let { id: o, collectionSlug: n, currentEditor: r, docPermissions: s, globalSlug: i, hasPublishedDoc: l, hasPublishPermission: a, hasSavePermission: c, initialData: u, initialState: d, isLocked: f, lastUpdateTime: m, mostRecentVersionIsAutosaved: p, unpublishedVersionCount: h, versionCount: g } = e, [b, C] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(s), [y, v] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(c), [x, I] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(a), { permissions: w } = Ie(), { config: { admin: { dateFormat: F }, collections: S, routes: { api: R } }, getEntityConfig: D } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), _ = D({\n collectionSlug: n\n }), T = D({\n globalSlug: i\n }), A = S.some((je)=>je.slug === \"payload-locked-documents\"), k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(new AbortController), P = _ || T, { i18n: E } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { uploadEdits: B } = Ui(), [$, M] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>qo({\n collectionConfig: _,\n data: {\n ...u || {},\n id: o\n },\n dateFormat: F,\n fallback: o?.toString(),\n globalConfig: T,\n i18n: E\n })), [L, j] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(p), [O, V] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(g), [W, Z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(l), [z, Q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(h), [U, X] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(f), [ue, q] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(r), [J, Y] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(m), [le, xe] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(u), [_e, Be] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(\"idle\"), Me = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n hasShownLockedModal: !1,\n isLocked: !1,\n user: null\n }), Ue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((je)=>{\n Be(je);\n }, [\n Be\n ]), { getPreference: he, setPreference: Oe } = so(), { code: Ke } = ye(), { localeIsLoading: ae } = Of(), we = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>d === void 0 || u === void 0 || ae, [\n u,\n d,\n ae\n ]), G = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: R,\n path: \"\"\n }), se, K, fe;\n i && (se = i, K = \"globals\", fe = `global-${se}`), n && (se = n, K = \"collections\", o && (fe = `collection-${se}-${o}`));\n let me = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (je, Je)=>{\n if (A) try {\n let Rt = Je === i, Ut = await Ge.get(`${G}/payload-locked-documents`, {\n credentials: \"include\",\n params: Rt ? {\n \"where[globalSlug][equals]\": Je\n } : {\n \"where[document.relationTo][equals]\": Je,\n \"where[document.value][equals]\": je\n }\n }), { docs: $o } = await Ut.json();\n if ($o?.length > 0) {\n let Lt = $o[0].id;\n await Ge.delete(`${G}/payload-locked-documents/${Lt}`, {\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }), X(!1);\n }\n } catch (Rt) {\n console.error(\"Failed to unlock the document\", Rt);\n }\n }, [\n G,\n i,\n X,\n A\n ]), ne = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (je, Je, Rt)=>{\n if (A) try {\n let Ut = Je === i, $o = await Ge.get(`${G}/payload-locked-documents`, {\n credentials: \"include\",\n params: Ut ? {\n \"where[globalSlug][equals]\": Je\n } : {\n \"where[document.relationTo][equals]\": Je,\n \"where[document.value][equals]\": je\n }\n }), { docs: Lt } = await $o.json();\n if (Lt?.length > 0) {\n let gr = Lt[0].id, De = typeof Rt == \"object\" ? {\n relationTo: Rt.collection,\n value: Rt.id\n } : {\n relationTo: \"users\",\n value: Rt\n };\n await Ge.patch(`${G}/payload-locked-documents/${gr}`, {\n body: JSON.stringify({\n user: De\n }),\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n }\n } catch (Ut) {\n console.error(\"Failed to update the document editor\", Ut);\n }\n }, [\n G,\n i,\n A\n ]), te = iS({\n id: o,\n api: R,\n collectionSlug: n,\n globalSlug: i,\n i18n: E,\n locale: Ke,\n permissions: w,\n setDocPermissions: C,\n setHasPublishPermission: I,\n setHasSavePermission: v\n }), ge = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>he(fe), [\n he,\n fe\n ]), oe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (je, Je)=>{\n let Rt = await ge();\n if (fe) try {\n await Oe(fe, {\n ...Rt,\n fields: {\n ...Rt?.fields || {},\n [je]: {\n ...Rt?.fields?.[je],\n ...Je\n }\n }\n });\n } catch (Ut) {\n console.error(Ut);\n }\n }, [\n Oe,\n fe,\n ge\n ]), pe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n let je = O + 1;\n _ && _.versions ? _.versions.maxPerDoc > 0 ? V(Math.min(je, _.versions.maxPerDoc)) : V(je) : T && T.versions && (T.versions.max > 0 ? V(Math.min(je, T.versions.max)) : V(je));\n }, [\n _,\n T,\n O\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n M(qo({\n collectionConfig: _,\n data: {\n ...le,\n id: o\n },\n dateFormat: F,\n fallback: o?.toString(),\n globalConfig: T,\n i18n: E\n }));\n }, [\n _,\n T,\n le,\n F,\n E,\n o\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let je = k.current;\n return ()=>{\n if (je) try {\n je.abort();\n } catch {}\n };\n }, []);\n let be = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Xj.useMemo[be]\": ()=>{\n let je = `${K === \"globals\" ? \"/globals\" : \"\"}/${se}${o ? `/${o}` : \"\"}`;\n return `${G}${je}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n \"fallback-locale\": \"null\",\n locale: Ke,\n uploadEdits: B || void 0\n }, {\n addQueryPrefix: !0\n })}`;\n }\n }[\"Xj.useMemo[be]\"], [\n G,\n Ke,\n K,\n o,\n se,\n B\n ]), ot = {\n ...e,\n action: be,\n currentEditor: ue,\n data: le,\n docConfig: P,\n docPermissions: b,\n documentIsLocked: U,\n documentLockState: Me,\n getDocPermissions: te,\n getDocPreferences: ge,\n hasPublishedDoc: W,\n hasPublishPermission: x,\n hasSavePermission: y,\n incrementVersionCount: pe,\n initialData: u,\n initialState: d,\n isInitializing: we,\n lastUpdateTime: J,\n mostRecentVersionIsAutosaved: L,\n preferencesKey: fe,\n savedDocumentData: le,\n setCurrentEditor: q,\n setData: xe,\n setDocFieldPreferences: oe,\n setDocumentIsLocked: X,\n setDocumentTitle: M,\n setHasPublishedDoc: Z,\n setLastUpdateTime: Y,\n setMostRecentVersionIsAutosaved: j,\n setUnpublishedVersionCount: Q,\n setUploadStatus: Ue,\n title: $,\n unlockDocument: me,\n unpublishedVersionCount: z,\n updateDocumentEditor: ne,\n updateSavedDocumentData: xe,\n uploadStatus: _e,\n versionCount: O\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(uS, {\n value: ot,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Q3, {\n children: t\n })\n });\n}, iu = (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(W1, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xj, {\n ...t\n })\n });\n_s12(Xj, \"0rBXFytCBy3qjCWdPIzdu6yuJME=\");\n\n\nvar qf = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(\"\"), au = ({ children: t, operation: e })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(qf, {\n value: e,\n children: t\n }), Cr = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(qf);\n\nvar hs = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(void 0), Qf = ()=>{\n _s13();\n let t = react__WEBPACK_IMPORTED_MODULE_0__.useContext(hs);\n if (t) return t;\n};\n_s13(Qf, \"HJ1wmQfhQB2DF5cup/6Wxn+TXqs=\");\nvar Qj = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(65), o;\n e[0] !== t ? (o = t || {}, e[0] = t, e[1] = o) : o = e[1];\n let { disableFormData: n, hasRows: r, path: s, potentiallyStalePath: i, validate: l } = o, a = n === void 0 ? !1 : n, c = Qf(), u = s || c || i, d = fo(), f = Mr(), m = Ei(), { user: p } = Ie(), { id: h, collectionSlug: g } = Se(), b = Cr(), C = Ot(Kj), y;\n e[2] !== u ? (y = (xe)=>{\n let [_e] = xe;\n return _e && _e?.[u] || null;\n }, e[2] = u, e[3] = y) : y = e[3];\n let v = Ot(y), { t: x } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: I } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { getData: w, getDataByPath: F, getSiblingData: S, setModified: R } = $e(), D = Ka(), _ = v?.filterOptions, T = v?.value, A = v?.initialValue, k = typeof v?.valid == \"boolean\" ? v.valid : !0, P = k === !1 && d, E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(k), B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(v?.errorMessage), $;\n e[4] !== u ? ($ = u ? u.split(\".\") : [], e[4] = u, e[5] = $) : $ = e[5];\n let M = $, L;\n e[6] !== a || e[7] !== C || e[8] !== r || e[9] !== u || e[10] !== R ? (L = (xe, _e)=>{\n let Be = _e === void 0 ? !1 : _e, Ue = xe && typeof xe == \"object\" && typeof xe.preventDefault == \"function\" && typeof xe.stopPropagation == \"function\" ? xe.target.value : xe;\n C({\n type: \"UPDATE\",\n disableFormData: a || r && Ue > 0,\n path: u,\n value: Ue\n }), Be || R(!0);\n }, e[6] = a, e[7] = C, e[8] = r, e[9] = u, e[10] = R, e[11] = L) : L = e[11];\n let j = L, O = v?.blocksFilterOptions, V = v?.customComponents, W = f || m, Z = v?.errorMessage, z;\n e[12] !== v?.errorPaths ? (z = v?.errorPaths || [], e[12] = v?.errorPaths, e[13] = z) : z = e[13];\n let Q = v?.rows, U = v?.selectFilterOptions, X = v?.valid, ue;\n e[14] !== _ || e[15] !== A || e[16] !== m || e[17] !== u || e[18] !== f || e[19] !== j || e[20] !== P || e[21] !== d || e[22] !== Q || e[23] !== U || e[24] !== X || e[25] !== O || e[26] !== V || e[27] !== W || e[28] !== Z || e[29] !== z || e[30] !== T ? (ue = {\n blocksFilterOptions: O,\n customComponents: V,\n disabled: W,\n errorMessage: Z,\n errorPaths: z,\n filterOptions: _,\n formInitializing: m,\n formProcessing: f,\n formSubmitted: d,\n initialValue: A,\n path: u,\n rows: Q,\n selectFilterOptions: U,\n setValue: j,\n showError: P,\n valid: X,\n value: T\n }, e[14] = _, e[15] = A, e[16] = m, e[17] = u, e[18] = f, e[19] = j, e[20] = P, e[21] = d, e[22] = Q, e[23] = U, e[24] = X, e[25] = O, e[26] = V, e[27] = W, e[28] = Z, e[29] = z, e[30] = T, e[31] = ue) : ue = e[31];\n let q = ue, J;\n e[32] !== g || e[33] !== I || e[34] !== a || e[35] !== C || e[36] !== D || e[37] !== v || e[38] !== w || e[39] !== F || e[40] !== S || e[41] !== r || e[42] !== h || e[43] !== b || e[44] !== u || e[45] !== M || e[46] !== x || e[47] !== p || e[48] !== l || e[49] !== T ? (J = ()=>{\n (async ()=>{\n let _e = T;\n v?.rows && Array.isArray(v.rows) && (_e = F(u));\n let Be = B.current, Me = E.current, Ue = w(), he = typeof l == \"function\" ? await l(_e, {\n id: h,\n blockData: void 0,\n collectionSlug: g,\n data: D?.getData ? D.getData() : Ue,\n event: \"onChange\",\n operation: b,\n path: M,\n preferences: {},\n req: {\n payload: {\n config: I\n },\n t: x,\n user: p\n },\n siblingData: S(u)\n }) : typeof B.current == \"string\" ? B.current : E.current;\n if (typeof he == \"string\" ? (Me = !1, Be = he) : typeof he == \"boolean\" && (Me = he, Be = void 0), Me !== E.current || Be !== B.current) {\n E.current = Me, B.current = Be;\n let Oe = {\n type: \"UPDATE\",\n errorMessage: Be,\n path: u,\n rows: v?.rows,\n valid: Me,\n validate: l,\n value: T\n };\n (a || r && typeof T == \"number\" && T > 0) && (Oe.disableFormData = !0), typeof C == \"function\" && C(Oe);\n }\n })();\n }, e[32] = g, e[33] = I, e[34] = a, e[35] = C, e[36] = D, e[37] = v, e[38] = w, e[39] = F, e[40] = S, e[41] = r, e[42] = h, e[43] = b, e[44] = u, e[45] = M, e[46] = x, e[47] = p, e[48] = l, e[49] = T, e[50] = J) : J = e[50];\n let Y = v?.rows, le;\n return e[51] !== g || e[52] !== a || e[53] !== C || e[54] !== w || e[55] !== F || e[56] !== S || e[57] !== h || e[58] !== b || e[59] !== u || e[60] !== Y || e[61] !== p || e[62] !== l || e[63] !== T ? (le = [\n T,\n a,\n C,\n w,\n S,\n F,\n h,\n b,\n u,\n p,\n l,\n Y,\n g\n ], e[51] = g, e[52] = a, e[53] = C, e[54] = w, e[55] = F, e[56] = S, e[57] = h, e[58] = b, e[59] = u, e[60] = Y, e[61] = p, e[62] = l, e[63] = T, e[64] = le) : le = e[64], zi(J, 150, le), q;\n}, fS = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(void 0), Te = (t)=>{\n _s14();\n let e = Qf(), o = react__WEBPACK_IMPORTED_MODULE_0__.use(fS), n = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n if (n.current === null) {\n let r = t?.path || e || t?.potentiallyStalePath;\n n.current = !!(o && r && o.path === r);\n }\n if (n.current === !0) {\n if (!o) throw new Error(\"FieldContext was removed after mount. This breaks hook ordering.\");\n return o;\n }\n return Qj(t);\n};\n_s14(Te, \"YMDVJIo6RJzCmAgm/5oJjsvPyXI=\");\nfunction Kj(t) {\n let [, e] = t;\n return e;\n}\n_c87 = Kj;\n\n\n\nvar X1 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(2), { children: o, path: n } = t, r;\n e[0] !== n ? (r = (l)=>{\n let [a] = l;\n return a && a?.[n] || null;\n }, e[0] = n, e[1] = r) : r = e[1];\n let s = Ot(r), { passesCondition: i } = s || {};\n return i === !1 ? null : o;\n};\n_c88 = X1;\nvar We = (t)=>(o)=>{\n let { path: n } = o;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(X1, {\n path: n,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(t, {\n ...o\n })\n });\n };\nvar et = (t)=>({\n ...t?.admin?.style || {},\n ...t?.admin?.width ? {\n \"--field-width\": t.admin.width\n } : {\n flex: \"1 1 auto\"\n },\n ...t?.admin?.style?.flex ? {\n flex: t.admin.style.flex\n } : {}\n });\nvar Pe = \"field-type\";\nfunction Xi({ fieldLocalized: t, fieldRTL: e, locale: o, localizationConfig: n }) {\n let r = o && n && n.locales && n.locales.length > 1, s = o?.code === n?.defaultLocale;\n return e !== !1 && o?.rtl === !0 && (t || !t && !r || !t && s) || e === !0;\n}\n_c89 = Xi;\n\n\n\n\n\nvar Y1 = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--check\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M15.3333 6.00001L8.00001 13.3333L4.66667 10\",\n strokeLinecap: \"square\"\n })\n });\n_c90 = Y1;\n\n\nvar Z1 = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--line\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M5.33333 10H14.6667\",\n strokeLinecap: \"square\"\n })\n });\n_c91 = Z1;\nvar cu = \"checkbox-input\", go = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(24), { id: o, name: n, AfterInput: r, BeforeInput: s, checked: i, className: l, inputRef: a, Label: c, label: u, localized: d, onToggle: f, partialChecked: m, readOnly: p, required: h } = t, [g, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), C = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), y = o || C, v, x;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (v = ()=>{\n b(!0);\n }, x = [], e[0] = v, e[1] = x) : (v = e[0], x = e[1]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(v, x);\n let I = p || !g, w = i && `${cu}--checked`, F = I && `${cu}--read-only`, S;\n e[2] !== l || e[3] !== w || e[4] !== F ? (S = [\n l,\n cu,\n w,\n F\n ].filter(Boolean), e[2] = l, e[3] = w, e[4] = F, e[5] = S) : S = e[5];\n let R = S.join(\" \"), D = !!i, _;\n if (e[6] !== r || e[7] !== s || e[8] !== c || e[9] !== i || e[10] !== y || e[11] !== a || e[12] !== u || e[13] !== d || e[14] !== n || e[15] !== f || e[16] !== m || e[17] !== I || e[18] !== h || e[19] !== R || e[20] !== D) {\n let T = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"aria-label\": \"\",\n \"aria-labelledby\": n,\n checked: D,\n disabled: I,\n id: y,\n name: n,\n onChange: f,\n ref: a,\n required: h,\n title: n,\n type: \"checkbox\"\n }), A = !i && m ? \"partial\" : \"check\", k;\n e[22] !== A ? (k = [\n `${cu}__icon`,\n A\n ].filter(Boolean), e[22] = A, e[23] = k) : k = e[23], _ = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: R,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${cu}__input`,\n children: [\n s,\n T,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: k.join(\" \"),\n children: [\n i && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Y1, {}),\n !i && m && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Z1, {})\n ]\n }),\n r\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: c,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n htmlFor: y,\n label: u,\n localized: d,\n required: h\n })\n })\n ]\n }), e[6] = r, e[7] = s, e[8] = c, e[9] = i, e[10] = y, e[11] = a, e[12] = u, e[13] = d, e[14] = n, e[15] = f, e[16] = m, e[17] = I, e[18] = h, e[19] = R, e[20] = D, e[21] = _;\n } else _ = e[21];\n return _;\n};\nvar q1 = \"checkbox\";\nvar l$ = (t)=>{\n let { id: e, checked: o, disableFormData: n, field: r, field: { admin: { className: s, description: i } = {}, label: l, required: a } = {}, onChange: c, partialChecked: u, path: d, readOnly: f, validate: m } = t, { uuid: p } = $e(), h = ct(), { i18n: { language: g } } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), b = _payloadcms_translations__WEBPACK_IMPORTED_MODULE_15__.rtlLanguages.includes(g), C = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((E, B)=>{\n if (typeof m == \"function\") return m(E, {\n ...B,\n required: a\n });\n }, [\n m,\n a\n ]), { customComponents: { AfterInput: y, BeforeInput: v, Description: x, Error: I, Label: w } = {}, disabled: F, path: S, setValue: R, showError: D, value: _ } = Te({\n disableFormData: n,\n potentiallyStalePath: d,\n validate: C\n }), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n f || (R(!_), typeof c == \"function\" && c(!_));\n }, [\n c,\n f,\n R,\n _\n ]), A = o || !!_, k = e || Vf(S, h, p), P = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(r), [\n r\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n q1,\n D && \"error\",\n s,\n _ && `${q1}--checked`,\n (f || F) && `${q1}--read-only`\n ].filter(Boolean).join(\" \"),\n style: P,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: I,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n alignCaret: b ? \"right\" : \"left\",\n path: S,\n showError: D\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n AfterInput: y,\n BeforeInput: v,\n checked: A,\n id: k,\n inputRef: null,\n Label: w,\n label: l,\n name: S,\n onToggle: T,\n partialChecked: u,\n readOnly: f || F,\n required: a\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: x,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: i,\n path: S\n })\n })\n ]\n });\n}, zr = We(l$);\nvar u$ = \"nullify-locale-field\", du = (t)=>{\n _s15();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { fieldValue: o, localized: n, path: r, readOnly: s } = t, i = s === void 0 ? !1 : s, { code: l } = ye(), { config: a } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { localization: c } = a, [u, d] = react__WEBPACK_IMPORTED_MODULE_0__.useState(typeof o != \"number\"), { t: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { dispatchFields: m, setModified: p } = $e();\n if (!n || !c || c.defaultLocale === l || !c.fallback) return null;\n let h;\n e[0] !== u || e[1] !== m || e[2] !== o || e[3] !== r || e[4] !== p ? (h = ()=>{\n let C = !u;\n m({\n type: \"UPDATE\",\n path: r,\n value: C ? null : o || 0\n }), p(!0), d(C);\n }, e[0] = u, e[1] = m, e[2] = o, e[3] = r, e[4] = p, e[5] = h) : h = e[5];\n let g = h;\n if (o) {\n let C = !1;\n if (typeof o == \"number\" && o > 0 && (C = !0), Array.isArray(o) && o.length > 0 && (C = !0), C) return u && d(!1), null;\n }\n let b;\n return e[6] !== u || e[7] !== o || e[8] !== g || e[9] !== r || e[10] !== i || e[11] !== f ? (b = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sn, {\n className: u$,\n children: !o && i ? f(\"general:fallbackToDefaultLocale\") : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zr, {\n checked: u,\n field: {\n name: \"\",\n label: f(\"general:fallbackToDefaultLocale\")\n },\n id: `field-${r.replace(/\\./g, \"__\")}`,\n onChange: g,\n path: r,\n schemaPath: \"\"\n })\n }), e[6] = u, e[7] = o, e[8] = g, e[9] = r, e[10] = i, e[11] = f, e[12] = b) : b = e[12], b;\n};\n_s15(du, \"vxCXLVaMG3Ji5lBz5nT8R2F635w=\");\nvar vl = (t)=>{\n let e = document.getElementById(t);\n if (e) {\n let o = e.getBoundingClientRect();\n window.scrollBy({\n behavior: \"smooth\",\n top: o.top - 100\n });\n }\n};\n\n\n\n\n\n\n\nvar Po = \"array-actions\", Kf = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { addRow: o, copyRow: n, duplicateRow: r, hasMaxRows: s, index: i, isSortable: l, moveRow: a, pasteRow: c, removeRow: u, rowCount: d } = t, { t: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), m;\n return e[0] !== o || e[1] !== n || e[2] !== r || e[3] !== s || e[4] !== i || e[5] !== l || e[6] !== a || e[7] !== c || e[8] !== u || e[9] !== d || e[10] !== f ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zc, {}),\n buttonClassName: `${Po}__button`,\n className: Po,\n horizontalAlign: \"center\",\n render: (p)=>{\n let { close: h } = p;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.ButtonGroup, {\n buttonSize: \"small\",\n children: [\n l && i !== 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.Button, {\n className: `${Po}__action ${Po}__move-up`,\n onClick: ()=>{\n a(i, i - 1), h();\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Po}__action-chevron`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: \"up\"\n })\n }),\n f(\"general:moveUp\")\n ]\n }),\n l && i < d - 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.Button, {\n className: `${Po}__action`,\n onClick: ()=>{\n a(i, i + 1), h();\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Po}__action-chevron`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {})\n }),\n f(\"general:moveDown\")\n ]\n }),\n !s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.Button, {\n className: `${Po}__action ${Po}__add`,\n onClick: ()=>{\n o(i + 1), h();\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ar, {}),\n f(\"general:addBelow\")\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.Button, {\n className: `${Po}__action ${Po}__duplicate`,\n onClick: ()=>{\n r(i), h();\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ki, {}),\n f(\"general:duplicate\")\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n className: `${Po}__action ${Po}__copy`,\n onClick: ()=>{\n n(i), h();\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rl, {\n isRow: !0\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n className: `${Po}__action ${Po}__paste`,\n onClick: ()=>{\n c(i), h();\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rl, {\n isPaste: !0,\n isRow: !0\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.Button, {\n className: `${Po}__action ${Po}__remove`,\n onClick: ()=>{\n u(i), h();\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {}),\n f(\"general:remove\")\n ]\n })\n ]\n });\n },\n size: \"medium\"\n }), e[0] = o, e[1] = n, e[2] = r, e[3] = s, e[4] = i, e[5] = l, e[6] = a, e[7] = c, e[8] = u, e[9] = d, e[10] = f, e[11] = m) : m = e[11], m;\n};\n\n\n\n\n\nvar un = ({ className: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n className: [\n \"icon icon--drag-handle\",\n t\n ].filter(Boolean).join(\" \"),\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M7.99999 10.6667C8.36818 10.6667 8.66666 10.3682 8.66666 9.99999C8.66666 9.6318 8.36818 9.33332 7.99999 9.33332C7.63181 9.33332 7.33333 9.6318 7.33333 9.99999C7.33333 10.3682 7.63181 10.6667 7.99999 10.6667Z\",\n strokeLinecap: \"square\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M7.99999 5.99999C8.36818 5.99999 8.66666 5.70151 8.66666 5.33332C8.66666 4.96513 8.36818 4.66666 7.99999 4.66666C7.63181 4.66666 7.33333 4.96513 7.33333 5.33332C7.33333 5.70151 7.63181 5.99999 7.99999 5.99999Z\",\n strokeLinecap: \"square\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M7.99999 15.3333C8.36818 15.3333 8.66666 15.0348 8.66666 14.6667C8.66666 14.2985 8.36818 14 7.99999 14C7.63181 14 7.33333 14.2985 7.33333 14.6667C7.33333 15.0348 7.63181 15.3333 7.99999 15.3333Z\",\n strokeLinecap: \"square\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M12 10.6667C12.3682 10.6667 12.6667 10.3682 12.6667 9.99999C12.6667 9.6318 12.3682 9.33332 12 9.33332C11.6318 9.33332 11.3333 9.6318 11.3333 9.99999C11.3333 10.3682 11.6318 10.6667 12 10.6667Z\",\n strokeLinecap: \"square\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M12 5.99999C12.3682 5.99999 12.6667 5.70151 12.6667 5.33332C12.6667 4.96513 12.3682 4.66666 12 4.66666C11.6318 4.66666 11.3333 4.96513 11.3333 5.33332C11.3333 5.70151 11.6318 5.99999 12 5.99999Z\",\n strokeLinecap: \"square\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M12 15.3333C12.3682 15.3333 12.6667 15.0348 12.6667 14.6667C12.6667 14.2985 12.3682 14 12 14C11.6318 14 11.3333 14.2985 11.3333 14.6667C11.3333 15.0348 11.6318 15.3333 12 15.3333Z\",\n strokeLinecap: \"square\"\n })\n ]\n });\n\n\n\nvar CS = ({ containerRef: t, contentRef: e, duration: o, open: n })=>{\n let r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>typeof CSS < \"u\" && CSS && CSS.supports ? CSS.supports(\"interpolate-size\", \"allow-keywords\") : !1, []), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(n), [l, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let u = t.current, d = e.current;\n if (!u || !d || r) return;\n let f = (h)=>{\n u.style.height = h;\n }, m = ()=>{\n u && (u.style.transition = \"\", u.style.height = n ? \"auto\" : \"0px\", a(!1));\n };\n return (()=>{\n if (!s.current && n) {\n f(\"auto\"), a(!1);\n return;\n }\n s.current = !0, i.current !== n && f(n ? \"0px\" : `${d.scrollHeight}px`), u.offsetHeight, a(!0), u.style.transition = `height ${o}ms ease`, f(n ? `${d.scrollHeight}px` : \"0px\");\n let h = ()=>{\n m(), u.removeEventListener(\"transitionend\", h);\n };\n u.addEventListener(\"transitionend\", h);\n })(), i.current = n, c.current = new ResizeObserver(()=>{\n l && (u.style.height = n ? `${d.scrollHeight}px` : \"0px\");\n }), c.current.observe(d), ()=>{\n u && (u.style.transition = \"\", u.style.height = \"\"), c.current?.disconnect();\n };\n }, [\n n,\n o,\n t,\n e,\n r\n ]), {\n browserSupportsKeywordAnimation: r\n };\n};\n_c92 = CS;\nvar wr = ({ id: t, children: e, className: o, duration: n = 300, height: r })=>{\n _s16();\n let [s, i] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"wr.useState\": ()=>!!r\n }[\"wr.useState\"]), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(s), [a, c] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"wr.useState\": ()=>s ? \"\" : \"none\"\n }[\"wr.useState\"]), [u, d] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"wr.useState\": ()=>s ? \"\" : \"hidden\"\n }[\"wr.useState\"]), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let g, b, C = !!r, y = l.current !== C;\n return l.current = C, y && (m(!0), d(\"hidden\"), C ? c(\"\") : g = window.setTimeout(()=>{\n c(\"none\");\n }, n), i(C), b = window.setTimeout(()=>{\n d(\"\"), m(!1);\n }, n)), ()=>{\n g && clearTimeout(g), b && clearTimeout(b);\n };\n }, [\n r,\n n\n ]), CS({\n containerRef: p,\n contentRef: h,\n duration: n,\n open: s\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n \"aria-hidden\": !s,\n className: [\n o,\n \"rah-static\",\n s && r === \"auto\" && \"rah-static--height-auto\",\n f && `rah-animating--${s ? \"down\" : \"up\"}`,\n f && r === \"auto\" && \"rah-animating--to-height-auto\"\n ].filter(Boolean).join(\" \"),\n id: t,\n ref: p,\n style: {\n overflow: u,\n transition: `height ${n}ms ease`\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n ref: h,\n ...a ? {\n style: {\n display: a\n }\n } : {},\n children: e\n })\n });\n};\n_s16(wr, \"ZLl+OAPcXpWS35WAT1ZLbArlN1o=\");\n\n\nvar wS = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n isCollapsed: void 0,\n isVisible: void 0,\n isWithinCollapsible: void 0,\n toggle: ()=>{}\n}), SS = ({ children: t, isCollapsed: e, isWithinCollapsible: o = !0, toggle: n })=>{\n _s17();\n let { isCollapsed: r, isVisible: s } = Qs(), i = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"SS.useMemo[i]\": ()=>({\n isCollapsed: e,\n isVisible: s && !r,\n isWithinCollapsible: o,\n toggle: n\n })\n }[\"SS.useMemo[i]\"], [\n e,\n o,\n n,\n r,\n s\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wS, {\n value: i,\n children: t\n });\n}, Qs = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(wS);\n_s17(SS, \"P3D/rnzl6hR16om/FN8Cyc7xAiQ=\");\nvar Vo = \"collapsible\";\nvar Zi = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(25), { actions: o, AfterCollapsible: n, children: r, className: s, collapsibleStyle: i, disableHeaderToggle: l, disableToggleIndicator: a, dragHandleProps: c, header: u, initCollapsed: d, isCollapsed: f, onToggle: m } = t, p = i === void 0 ? \"default\" : i, h = l === void 0 ? !1 : l, g = a === void 0 ? !1 : a, [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!!d), [y, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { isWithinCollapsible: x } = Qs(), { t: I } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), w = typeof f == \"boolean\" ? f : b, F;\n e[0] !== w || e[1] !== m ? (F = ()=>{\n typeof m == \"function\" && m(!w), C(!w);\n }, e[0] = w, e[1] = m, e[2] = F) : F = e[2];\n let S = F, R = c && `${Vo}--has-drag-handle`, D = w && `${Vo}--collapsed`, _ = x && `${Vo}--nested`, T = y && !h && `${Vo}--hovered`, A = `${Vo}--style-${p}`, k;\n e[3] !== s || e[4] !== R || e[5] !== D || e[6] !== _ || e[7] !== T || e[8] !== A ? (k = [\n Vo,\n s,\n R,\n D,\n _,\n T,\n A\n ].filter(Boolean), e[3] = s, e[4] = R, e[5] = D, e[6] = _, e[7] = T, e[8] = A, e[9] = k) : k = e[9];\n let P = k.join(\" \"), E = `${Vo}__toggle-wrap${h ? \" toggle-disabled\" : \"\"}`, B, $;\n e[10] === Symbol.for(\"react.memo_cache_sentinel\") ? (B = ()=>v(!0), $ = ()=>v(!1), e[10] = B, e[11] = $) : (B = e[10], $ = e[11]);\n let M;\n return e[12] !== n || e[13] !== o || e[14] !== r || e[15] !== h || e[16] !== g || e[17] !== c || e[18] !== u || e[19] !== w || e[20] !== I || e[21] !== P || e[22] !== E || e[23] !== S ? (M = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: P,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(SS, {\n isCollapsed: w,\n toggle: S,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: E,\n onMouseEnter: B,\n onMouseLeave: $,\n children: [\n !h && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: [\n `${Vo}__toggle`,\n `${Vo}__toggle--${w ? \"collapsed\" : \"open\"}`\n ].filter(Boolean).join(\" \"),\n onClick: S,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: I(\"fields:toggleBlock\")\n })\n }),\n c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Vo}__drag`,\n ...c.attributes,\n ...c.listeners,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(un, {})\n }),\n u ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n `${Vo}__header-wrap`,\n c && `${Vo}__header-wrap--has-drag-handle`\n ].filter(Boolean).join(\" \"),\n children: u\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Vo}__actions-wrap`,\n children: [\n o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Vo}__actions`,\n children: o\n }) : null,\n !g && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Vo}__indicator`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: w ? void 0 : \"up\"\n })\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wr, {\n height: w ? 0 : \"auto\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Vo}__content`,\n children: r\n })\n }),\n n\n ]\n })\n }), e[12] = n, e[13] = o, e[14] = r, e[15] = h, e[16] = g, e[17] = c, e[18] = u, e[19] = w, e[20] = I, e[21] = P, e[22] = E, e[23] = S, e[24] = M) : M = e[24], M;\n};\n_c93 = Zi;\n\n\n\n\n\n\n\nvar TS = (t)=>{\n _s18();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), { children: o, className: n, forceRender: r } = t, [s, i] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!!r), l;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (l = {\n rootMargin: \"1000px\"\n }, e[0] = l) : l = e[0];\n let [a, c] = Li(l, !!r), u = !!c?.isIntersecting, d = c?.boundingClientRect?.top < 0, f = r || u || d, m, p;\n e[1] !== s || e[2] !== f ? (m = ()=>{\n f && !s && i(!0);\n }, p = [\n f,\n s\n ], e[1] = s, e[2] = f, e[3] = m, e[4] = p) : (m = e[3], p = e[4]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(m, p);\n let h = s ? o : null, g;\n return e[5] !== n || e[6] !== a || e[7] !== h ? (g = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: n,\n ref: a,\n children: h\n }), e[5] = n, e[6] = a, e[7] = h, e[8] = g) : g = e[8], g;\n};\n_s18(TS, \"0a+oxQ6yBJ1Ybc8pU+BH/ADz/sg=\");\n_c94 = TS;\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Wr = \"pill\", D$ = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { id: o, className: n } = t, r;\n e[0] !== o ? (r = {\n id: o\n }, e[0] = o, e[1] = r) : r = e[1];\n let { attributes: s, isDragging: i, listeners: l, setNodeRef: a, transform: c } = al(r), u = i && `${Wr}--is-dragging`, d;\n e[2] !== n || e[3] !== u ? (d = [\n u,\n n\n ].filter(Boolean), e[2] = n, e[3] = u, e[4] = d) : d = e[4];\n let f = d.join(\" \"), m;\n return e[5] !== s || e[6] !== l || e[7] !== t || e[8] !== a || e[9] !== f || e[10] !== c ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(DS, {\n ...t,\n className: f,\n elementProps: {\n ...l,\n ...s,\n ref: a,\n style: {\n transform: c\n }\n }\n }), e[5] = s, e[6] = l, e[7] = t, e[8] = a, e[9] = f, e[10] = c, e[11] = m) : m = e[11], m;\n}, DS = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(27), { id: o, alignIcon: n, \"aria-checked\": r, \"aria-controls\": s, \"aria-expanded\": i, \"aria-label\": l, children: a, className: c, draggable: u, elementProps: d, icon: f, onClick: m, pillStyle: p, rounded: h, size: g, to: b } = t, C = n === void 0 ? \"right\" : n, y = p === void 0 ? \"light\" : p, v = g === void 0 ? \"medium\" : g, [x, I] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), w, F;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (w = ()=>{\n I(!0);\n }, F = [], e[0] = w, e[1] = F) : (w = e[0], F = e[1]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(w, F);\n let S = m && !b, R = `${Wr}--style-${y}`, D = `${Wr}--size-${v}`, _ = c && c, T = b && `${Wr}--has-link`, A = (b || m) && `${Wr}--has-action`, k = f && `${Wr}--has-icon`, P = f && `${Wr}--align-icon-${C}`, E = u && `${Wr}--draggable`, B = h && `${Wr}--rounded`, $;\n e[2] !== k || e[3] !== P || e[4] !== E || e[5] !== B || e[6] !== R || e[7] !== D || e[8] !== _ || e[9] !== T || e[10] !== A ? ($ = [\n Wr,\n R,\n D,\n _,\n T,\n A,\n k,\n P,\n E,\n B\n ].filter(Boolean), e[2] = k, e[3] = P, e[4] = E, e[5] = B, e[6] = R, e[7] = D, e[8] = _, e[9] = T, e[10] = A, e[11] = $) : $ = e[11];\n let M = $.join(\" \"), L = \"div\";\n S && (L = \"button\"), b && (L = Qt);\n let j = S ? !x : void 0, O = b || null, V = S ? \"button\" : void 0, W;\n return e[12] !== L || e[13] !== r || e[14] !== s || e[15] !== i || e[16] !== l || e[17] !== a || e[18] !== M || e[19] !== d || e[20] !== f || e[21] !== o || e[22] !== m || e[23] !== j || e[24] !== O || e[25] !== V ? (W = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(L, {\n ...d,\n \"aria-checked\": r,\n \"aria-controls\": s,\n \"aria-expanded\": i,\n \"aria-label\": l,\n className: M,\n disabled: j,\n href: O,\n id: o,\n onClick: m,\n type: V,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Wr}__label`,\n children: a\n }),\n !!f && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Wr}__icon`,\n children: f\n })\n ]\n }), e[12] = L, e[13] = r, e[14] = s, e[15] = i, e[16] = l, e[17] = a, e[18] = M, e[19] = d, e[20] = f, e[21] = o, e[22] = m, e[23] = j, e[24] = O, e[25] = V, e[26] = W) : W = e[26], W;\n}, yt = (t)=>{\n let { draggable: e } = t;\n return e ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(D$, {\n ...t\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(DS, {\n ...t\n });\n};\n\nfunction tp(t, e) {\n let [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(t);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let r = setTimeout(()=>{\n n(t);\n }, e);\n return ()=>{\n clearTimeout(r);\n };\n }, [\n t,\n e\n ]), o;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar fu = \"thumbnail-card\", op = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { alignLabel: o, className: n, collection: r, doc: s, label: i, onClick: l, thumbnail: a } = t, { config: c } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), d = typeof l == \"function\" && `${fu}--has-on-click`, f = o && `${fu}--align-label-${o}`, m;\n e[0] !== n || e[1] !== d || e[2] !== f ? (m = [\n fu,\n n,\n d,\n f\n ].filter(Boolean), e[0] = n, e[1] = d, e[2] = f, e[3] = m) : m = e[3];\n let p = m.join(\" \"), h;\n if (e[4] !== p || e[5] !== r || e[6] !== c || e[7] !== s || e[8] !== u || e[9] !== i || e[10] !== l || e[11] !== a) {\n let g = i;\n g || (g = qo({\n collectionConfig: r,\n data: s,\n dateFormat: c.admin.dateFormat,\n fallback: s?.filename,\n i18n: u\n })), h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n className: p,\n onClick: l,\n title: g,\n type: \"button\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${fu}__thumbnail`,\n children: a\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${fu}__label`,\n children: g\n })\n ]\n }), e[4] = p, e[5] = r, e[6] = c, e[7] = s, e[8] = u, e[9] = i, e[10] = l, e[11] = a, e[12] = h;\n } else h = e[12];\n return h;\n};\n\n\nvar Eo = [];\nfor(rp = 0; rp < 256; ++rp)Eo.push((rp + 256).toString(16).slice(1));\nvar rp;\nfunction AS(t, e = 0) {\n return (Eo[t[e + 0]] + Eo[t[e + 1]] + Eo[t[e + 2]] + Eo[t[e + 3]] + \"-\" + Eo[t[e + 4]] + Eo[t[e + 5]] + \"-\" + Eo[t[e + 6]] + Eo[t[e + 7]] + \"-\" + Eo[t[e + 8]] + Eo[t[e + 9]] + \"-\" + Eo[t[e + 10]] + Eo[t[e + 11]] + Eo[t[e + 12]] + Eo[t[e + 13]] + Eo[t[e + 14]] + Eo[t[e + 15]]).toLowerCase();\n}\n_c95 = AS;\nvar np, N$ = new Uint8Array(16);\nfunction tv() {\n if (!np && (np = typeof crypto < \"u\" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !np)) throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");\n return np(N$);\n}\nvar L$ = typeof crypto < \"u\" && crypto.randomUUID && crypto.randomUUID.bind(crypto), ov = {\n randomUUID: L$\n};\nfunction k$(t, e, o) {\n if (ov.randomUUID && !e && !t) return ov.randomUUID();\n t = t || {};\n var n = t.random || (t.rng || tv)();\n if (n[6] = n[6] & 15 | 64, n[8] = n[8] & 63 | 128, e) {\n o = o || 0;\n for(var r = 0; r < 16; ++r)e[o + r] = n[r];\n return e;\n }\n return AS(n);\n}\nvar mn = k$;\nvar pu = ()=>{\n let [t] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>`pattern${mn()}`);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n fill: \"none\",\n height: \"151\",\n preserveAspectRatio: \"xMidYMid slice\",\n viewBox: \"0 0 231 151\",\n width: \"231\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"g\", {\n clipPath: `url(#${t})`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"rect\", {\n fill: \"#D9D9D9\",\n height: \"100%\",\n rx: \"2\",\n width: \"100%\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"rect\", {\n fill: \"#BCBCBC\",\n height: \"116.063\",\n transform: \"rotate(52.0687 33.7051 79.3051)\",\n width: \"85.8593\",\n x: \"33.7051\",\n y: \"79.3051\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"rect\", {\n fill: \"#BCBCBC\",\n height: \"116.063\",\n transform: \"rotate(52.0687 86.1219 92.6272)\",\n width: \"85.8593\",\n x: \"86.1219\",\n y: \"92.6272\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"circle\", {\n cx: \"189\",\n cy: \"45\",\n fill: \"#BCBCBC\",\n r: \"19\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"rect\", {\n fill: \"#B8B8B8\",\n height: \"5\",\n rx: \"2.5\",\n width: \"98\",\n x: \"66\",\n y: \"70\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"rect\", {\n fill: \"#B8B8B8\",\n height: \"5\",\n rx: \"2.5\",\n width: \"76\",\n x: \"77\",\n y: \"82\"\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"defs\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"clipPath\", {\n id: `${t}`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"rect\", {\n fill: \"white\",\n height: \"151\",\n width: \"231\"\n })\n })\n })\n ]\n });\n};\n\n\n\n\n\nvar Ji = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--search\",\n fill: \"none\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M16 16L13.1333 13.1333M14.6667 9.33333C14.6667 12.2789 12.2789 14.6667 9.33333 14.6667C6.38781 14.6667 4 12.2789 4 9.33333C4 6.38781 6.38781 4 9.33333 4C12.2789 4 14.6667 6.38781 14.6667 9.33333Z\",\n strokeLinecap: \"square\"\n })\n });\n_c96 = Ji;\nvar LS = \"block-search\", kS = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { setSearchTerm: o } = t, { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), r;\n e[0] !== o ? (r = (l)=>{\n o(l.target.value);\n }, e[0] = o, e[1] = r) : r = e[1];\n let s = r, i;\n return e[2] !== s || e[3] !== n ? (i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: LS,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n className: `${LS}__input`,\n onChange: s,\n placeholder: n(\"fields:searchForBlock\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ji, {})\n ]\n }), e[2] = s, e[3] = n, e[4] = i) : i = e[4], i;\n};\nvar Ks = \"blocks-drawer\", z$ = (t, e)=>typeof t.labels.singular == \"string\" ? t.labels.singular.toLowerCase() : typeof t.labels.singular == \"object\" ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(t.labels.singular, e).toLowerCase() : \"\", nv = (t)=>{\n let { blocks: e, onSelect: o, searchTerm: n } = t, [r, s] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(n ?? \"\"), [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(e), { i18n: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: c } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let d = {\n _none: []\n };\n return i.forEach((f)=>{\n if (typeof f == \"object\" && f.admin?.group) {\n let m = f.admin.group, p = typeof m == \"string\" ? m : (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(m, a);\n Object.hasOwn(d, p) ? d[p].push(f) : d[p] = [\n f\n ];\n } else d._none.push(f);\n }), d;\n }, [\n i,\n a\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let d = r.toLowerCase(), f = e?.reduce((m, p)=>{\n let h = typeof p == \"string\" ? c.blocksMap[p] : p;\n return z$(h, a).includes(d) && m.push(h), m;\n }, []);\n l(f);\n }, [\n r,\n e,\n a,\n c.blocksMap\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kS, {\n setSearchTerm: s\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ks}__blocks-wrapper`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n className: `${Ks}__block-groups`,\n children: Object.entries(u).map(([d, f])=>f.length ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n className: [\n `${Ks}__block-group`,\n d === \"_none\" && `${Ks}__block-group-none`\n ].filter(Boolean).join(\" \"),\n children: [\n d !== \"_none\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n className: `${Ks}__block-group-label`,\n children: d\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n className: `${Ks}__blocks`,\n children: f.map((m, p)=>{\n let h = typeof m == \"string\" ? c.blocksMap[m] : m, { slug: g, admin: b, imageAltText: C, imageURL: y, labels: v } = h, x = b?.images?.thumbnail ? typeof b.images.thumbnail == \"string\" ? b.images.thumbnail : b.images.thumbnail.url : y, I = b?.images?.thumbnail && typeof b.images.thumbnail != \"string\" ? b.images.thumbnail.alt : C;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n className: `${Ks}__block`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(op, {\n alignLabel: \"center\",\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(v?.singular, a),\n onClick: ()=>{\n typeof o == \"function\" && o(g);\n },\n thumbnail: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ks}__default-image`,\n children: x ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: I,\n src: x\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pu, {})\n })\n })\n }, p);\n })\n })\n ]\n }, d) : null)\n })\n })\n ]\n });\n};\nvar hu = (t)=>{\n _s19();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(19), { addRow: o, addRowIndex: n, blocks: r, drawerSlug: s, labels: i } = t, { closeModal: l, isModalOpen: a } = ie(), { i18n: c, t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [d, f] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\"\"), m, p;\n e[0] !== s || e[1] !== a ? (m = ()=>{\n a(s) || f(\"\");\n }, p = [\n a,\n s\n ], e[0] = s, e[1] = a, e[2] = m, e[3] = p) : (m = e[2], p = e[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(m, p);\n let h;\n if (e[4] !== o || e[5] !== n || e[6] !== r || e[7] !== l || e[8] !== s || e[9] !== c || e[10] !== i.singular || e[11] !== d || e[12] !== u) {\n let g;\n e[14] !== o || e[15] !== n || e[16] !== l || e[17] !== s ? (g = (b)=>{\n o(n, b), l(s);\n }, e[14] = o, e[15] = n, e[16] = l, e[17] = s, e[18] = g) : g = e[18], h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n slug: s,\n title: u(\"fields:addLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.singular, c)\n }),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(nv, {\n blocks: r,\n onSelect: g,\n searchTerm: d\n })\n }), e[4] = o, e[5] = n, e[6] = r, e[7] = l, e[8] = s, e[9] = c, e[10] = i.singular, e[11] = d, e[12] = u, e[13] = h;\n } else h = e[13];\n return h;\n};\n_s19(hu, \"9oorAgpO78uS/B6lyIA+PQklOmo=\");\nvar OS = (t)=>{\n _s20();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(28), { addRow: o, blocks: n, blockType: r, copyRow: s, duplicateRow: i, hasMaxRows: l, isSortable: a, labels: c, moveRow: u, pasteRow: d, removeRow: f, rowCount: m, rowIndex: p } = t, { closeModal: h, openModal: g } = ie(), b = Kc(\"blocks-drawer\"), [C, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), v;\n e[0] !== o || e[1] !== h || e[2] !== b || e[3] !== C ? (v = (I, w)=>{\n typeof o == \"function\" && o(C, w), h(b);\n }, e[0] = o, e[1] = h, e[2] = b, e[3] = C, e[4] = v) : v = e[4];\n let x;\n if (e[5] !== r || e[6] !== n || e[7] !== s || e[8] !== b || e[9] !== i || e[10] !== l || e[11] !== a || e[12] !== c || e[13] !== u || e[14] !== g || e[15] !== d || e[16] !== f || e[17] !== m || e[18] !== p || e[19] !== v) {\n let I;\n e[21] !== b || e[22] !== g ? (I = (F)=>{\n y(F), g(b);\n }, e[21] = b, e[22] = g, e[23] = I) : I = e[23];\n let w;\n e[24] !== r || e[25] !== i || e[26] !== p ? (w = ()=>i(p, r), e[24] = r, e[25] = i, e[26] = p, e[27] = w) : w = e[27], x = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hu, {\n addRow: v,\n addRowIndex: p,\n blocks: n,\n drawerSlug: b,\n labels: c\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Kf, {\n addRow: I,\n copyRow: s,\n duplicateRow: w,\n hasMaxRows: l,\n index: p,\n isSortable: a,\n moveRow: u,\n pasteRow: d,\n removeRow: f,\n rowCount: m\n })\n ]\n }), e[5] = r, e[6] = n, e[7] = s, e[8] = b, e[9] = i, e[10] = l, e[11] = a, e[12] = c, e[13] = u, e[14] = g, e[15] = d, e[16] = f, e[17] = m, e[18] = p, e[19] = v, e[20] = x;\n } else x = e[20];\n return x;\n};\n_s20(OS, \"avlKnT4jXfjIpLy3opLReaRdWmw=\");\n_c97 = OS;\n\n\n\nvar GS = \"section-title\", sv = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { customOnChange: o, customValue: n, path: r, readOnly: s } = t, i;\n e[0] !== r ? (i = {\n path: r\n }, e[0] = r, e[1] = i) : i = e[1];\n let { setValue: l, value: a } = Te(i), { t: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), u;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (u = [\n GS\n ].filter(Boolean), e[2] = u) : u = e[2];\n let d = u.join(\" \"), f;\n e[3] !== o || e[4] !== l ? (f = o || ((g)=>{\n g.stopPropagation(), g.preventDefault(), l(g.target.value);\n }), e[3] = o, e[4] = l, e[5] = f) : f = e[5];\n let m = f, p = n || a, h;\n return e[6] !== n || e[7] !== m || e[8] !== r || e[9] !== s || e[10] !== c || e[11] !== p || e[12] !== a ? (h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: d,\n \"data-value\": p,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n className: `${GS}__input`,\n id: r,\n name: r,\n onChange: m,\n placeholder: c(\"general:untitled\"),\n readOnly: s,\n type: \"text\",\n value: n || a || \"\"\n })\n }), e[6] = n, e[7] = m, e[8] = r, e[9] = s, e[10] = c, e[11] = p, e[12] = a, e[13] = h) : h = e[13], h;\n};\nvar ei = \"blocks-field\", WS = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(42), { addRow: o, attributes: n, block: r, blocks: s, copyRow: i, duplicateRow: l, errorCount: a, fields: c, hasMaxRows: u, isLoading: d, isSortable: f, Label: m, labels: p, listeners: h, moveRow: g, parentPath: b, pasteRow: C, path: y, permissions: v, readOnly: x, removeRow: I, row: w, rowCount: F, rowIndex: S, schemaPath: R, setCollapse: D, setNodeRef: _, transform: T } = t, A = tp(d, 500), { i18n: k } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), E = fo() && a > 0, B = !r.admin?.disableBlockName, $ = E ? `${ei}__row--has-errors` : `${ei}__row--no-errors`, M;\n e[0] !== $ ? (M = [\n `${ei}__row`,\n $\n ].filter(Boolean), e[0] = $, e[1] = M) : M = e[1];\n let L = M.join(\" \"), j;\n if (e[2] !== m || e[3] !== o || e[4] !== n || e[5] !== r.fields || e[6] !== r.labels || e[7] !== r.slug || e[8] !== s || e[9] !== L || e[10] !== i || e[11] !== l || e[12] !== a || e[13] !== E || e[14] !== c || e[15] !== u || e[16] !== k || e[17] !== A || e[18] !== f || e[19] !== p || e[20] !== h || e[21] !== g || e[22] !== b || e[23] !== C || e[24] !== y || e[25] !== v || e[26] !== x || e[27] !== I || e[28] !== w.blockType || e[29] !== w.collapsed || e[30] !== w.id || e[31] !== F || e[32] !== S || e[33] !== R || e[34] !== D || e[35] !== _ || e[36] !== B || e[37] !== T) {\n let O;\n if (v === !0) O = !0;\n else {\n let W = v?.blocks?.[r.slug] || v?.blocks;\n if (W === !0) O = !0;\n else if (W?.fields) O = W.fields;\n else if (typeof v == \"object\" && v && !W) {\n let Z = v.read === !0, z = !v.create || !v.update;\n Z && (z || typeof v == \"object\" && Object.keys(v).length === 1 && v.read) ? O = {\n read: !0\n } : O = W?.fields;\n } else O = W?.fields;\n }\n let V;\n e[39] !== w.id || e[40] !== D ? (V = (W)=>D(w.id, W), e[39] = w.id, e[40] = D, e[41] = V) : V = e[41], j = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n id: `${b?.split(\".\").join(\"-\")}-row-${S}`,\n ref: _,\n style: {\n transform: T\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zi, {\n actions: x ? void 0 : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(OS, {\n addRow: o,\n blocks: s,\n blockType: w.blockType,\n copyRow: i,\n duplicateRow: l,\n fields: r.fields,\n hasMaxRows: u,\n isSortable: f,\n labels: p,\n moveRow: g,\n pasteRow: C,\n removeRow: I,\n rowCount: F,\n rowIndex: S\n }),\n className: L,\n collapsibleStyle: E ? \"error\" : \"default\",\n dragHandleProps: f ? {\n id: w.id,\n attributes: n,\n listeners: h\n } : void 0,\n header: A ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"1rem\",\n width: \"8rem\"\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${ei}__block-header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(is, {\n CustomComponent: m,\n label: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${ei}__block-number`,\n children: String(S + 1).padStart(2, \"0\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n className: `${ei}__block-pill ${ei}__block-pill-${w.blockType}`,\n pillStyle: \"white\",\n size: \"small\",\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r.labels.singular, k)\n }),\n B && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sv, {\n path: `${y}.blockName`,\n readOnly: x\n })\n ]\n }),\n path: y,\n rowNumber: S\n }),\n E && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: a,\n i18n: k,\n withMessage: !0\n })\n ]\n }),\n isCollapsed: w.collapsed,\n onToggle: V,\n children: A ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n className: `${ei}__fields`,\n fields: c,\n margins: \"small\",\n parentIndexPath: \"\",\n parentPath: y,\n parentSchemaPath: R,\n permissions: O,\n readOnly: x\n })\n }, w.id)\n }, `${b}-row-${S}`), e[2] = m, e[3] = o, e[4] = n, e[5] = r.fields, e[6] = r.labels, e[7] = r.slug, e[8] = s, e[9] = L, e[10] = i, e[11] = l, e[12] = a, e[13] = E, e[14] = c, e[15] = u, e[16] = k, e[17] = A, e[18] = f, e[19] = p, e[20] = h, e[21] = g, e[22] = b, e[23] = C, e[24] = y, e[25] = v, e[26] = x, e[27] = I, e[28] = w.blockType, e[29] = w.collapsed, e[30] = w.id, e[31] = F, e[32] = S, e[33] = R, e[34] = D, e[35] = _, e[36] = B, e[37] = T, e[38] = j;\n } else j = e[38];\n return j;\n};\nvar Hr = \"blocks-field\", tB = (t)=>{\n let { i18n: e, t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { field: n, field: { name: r, type: s, admin: { className: i, description: l, isSortable: a = !0 } = {}, blockReferences: c, blocks: u, label: d, labels: f, localized: m, maxRows: p, minRows: h, required: g }, path: b, permissions: C, readOnly: y, schemaPath: v, validate: x } = t, I = v ?? r, w = h ?? g ? 1 : 0, { setDocFieldPreferences: F } = Se(), { addFieldRow: S, dispatchFields: R, getFields: D, moveFieldRow: _, removeFieldRow: T, replaceState: A, setModified: k } = $e(), { code: P } = ye(), { config: { localization: E }, config: B } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), $ = Kc(\"blocks-drawer\"), M = fo(), L = {\n plural: o(\"fields:blocks\"),\n singular: o(\"fields:block\"),\n ...f\n }, j = (()=>{\n if (E && E.fallback) {\n let oe = E.defaultLocale;\n return P === oe;\n }\n return !0;\n })(), O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe, pe)=>{\n if (!j && oe === null) return !0;\n if (typeof x == \"function\") return x(oe, {\n ...pe,\n maxRows: p,\n minRows: w,\n required: g\n });\n }, [\n p,\n w,\n g,\n x,\n j\n ]), { blocksFilterOptions: V, customComponents: { AfterInput: W, BeforeInput: Z, Description: z, Error: Q, Label: U } = {}, disabled: X, errorPaths: ue, path: q, rows: J = [], showError: Y, valid: le, value: xe } = Te({\n hasRows: !0,\n potentiallyStalePath: b,\n validate: O\n }), { clientBlocks: _e, clientBlocksAfterFilter: Be } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let oe = [];\n if (!c) oe = u;\n else for (let pe of c){\n let be = typeof pe == \"string\" ? B.blocksMap[pe] : pe;\n be && oe.push(be);\n }\n if (Array.isArray(V)) {\n let pe = oe.filter((be)=>{\n let ot = typeof be == \"string\" ? be : be.slug;\n return V.includes(ot);\n });\n return {\n clientBlocks: oe,\n clientBlocksAfterFilter: pe\n };\n }\n return {\n clientBlocks: oe,\n clientBlocksAfterFilter: oe\n };\n }, [\n c,\n u,\n V,\n B.blocksMap\n ]), Me = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe, pe)=>{\n S({\n blockType: pe,\n path: q,\n rowIndex: oe,\n schemaPath: I\n }), setTimeout(()=>{\n vl(`${q}-row-${oe + 1}`);\n }, 0);\n }, [\n S,\n q,\n I\n ]), Ue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe)=>{\n R({\n type: \"DUPLICATE_ROW\",\n path: q,\n rowIndex: oe\n }), k(!0), setTimeout(()=>{\n vl(`${q}-row-${oe + 1}`);\n }, 0);\n }, [\n R,\n q,\n k\n ]), he = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe)=>{\n T({\n path: q,\n rowIndex: oe\n });\n }, [\n q,\n T\n ]), Oe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe, pe)=>{\n _({\n moveFromIndex: oe,\n moveToIndex: pe,\n path: q\n });\n }, [\n _,\n q\n ]), Ke = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe)=>{\n let { collapsedIDs: pe, updatedRows: be } = zf({\n collapsed: oe,\n rows: J\n });\n R({\n type: \"SET_ALL_ROWS_COLLAPSED\",\n path: q,\n updatedRows: be\n }), F(q, {\n collapsed: pe\n });\n }, [\n R,\n q,\n J,\n F\n ]), ae = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe, pe)=>{\n let { collapsedIDs: be, updatedRows: ot } = Gf({\n collapsed: pe,\n rowID: oe,\n rows: J\n });\n R({\n type: \"SET_ROW_COLLAPSED\",\n path: q,\n updatedRows: ot\n }), F(q, {\n collapsed: be\n });\n }, [\n R,\n q,\n J,\n F\n ]), we = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe)=>{\n let pe = tl({\n type: s,\n blocks: _e,\n getDataToCopy: ()=>sl({\n formState: {\n ...D()\n },\n path: q,\n rowIndex: oe\n }),\n path: q,\n rowIndex: oe,\n t: o\n });\n typeof pe == \"string\" ? ee.error(pe) : ee.success(o(\"general:copied\"));\n }, [\n _e,\n q,\n o,\n s,\n D\n ]), G = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe)=>{\n let be = ol({\n onPaste: (ot)=>{\n let je = {\n ...D()\n }, Je = il({\n dataFromClipboard: ot,\n formState: je,\n path: q,\n rowIndex: oe\n });\n A(Je), k(!0);\n },\n path: q,\n schemaBlocks: _e,\n t: o\n });\n typeof be == \"string\" && ee.error(be);\n }, [\n _e,\n D,\n q,\n A,\n k,\n o\n ]), se = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((oe)=>{\n let pe = {\n ...D()\n }, be = il({\n dataFromClipboard: oe,\n formState: pe,\n path: q\n });\n A(be), k(!0);\n }, [\n D,\n q,\n A,\n k\n ]), K = p && J.length >= p, fe = ue.length, me = M && fe + (le ? 0 : 1) > 0, ne = J.length < w || g && J.length === 0, te = y && J.length === 0, ge = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(n), [\n n\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n Hr,\n i,\n me ? `${Hr}--has-error` : `${Hr}--has-no-error`\n ].filter(Boolean).join(\" \"),\n id: `field-${q?.replace(/\\./g, \"__\")}`,\n style: ge,\n children: [\n Y && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: Q,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: q,\n showError: Y\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"header\", {\n className: `${Hr}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Hr}__header-wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Hr}__heading-with-error`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: U,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"span\",\n label: d,\n localized: m,\n path: q,\n required: g\n })\n })\n }),\n me && fe > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: fe,\n i18n: e,\n withMessage: !0\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"ul\", {\n className: `${Hr}__header-actions`,\n children: [\n J.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: `${Hr}__header-action`,\n onClick: ()=>Ke(!0),\n type: \"button\",\n children: o(\"fields:collapseAll\")\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: `${Hr}__header-action`,\n onClick: ()=>Ke(!1),\n type: \"button\",\n children: o(\"fields:showAll\")\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pf, {\n allowCopy: J?.length > 0,\n allowPaste: !y,\n blocks: _e,\n className: `${Hr}__header-action`,\n disabled: X,\n getDataToCopy: ()=>sl({\n formState: {\n ...D()\n },\n path: q\n }),\n onPaste: se,\n path: q,\n type: s\n })\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: z,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: l,\n path: q\n })\n })\n ]\n }),\n Z,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(du, {\n fieldValue: xe,\n localized: m,\n path: q,\n readOnly: y\n }),\n (J.length > 0 || !le && (te || ne)) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Or, {\n className: `${Hr}__rows`,\n ids: J.map((oe)=>oe.id),\n onDragEnd: ({ moveFromIndex: oe, moveToIndex: pe })=>Oe(oe, pe),\n children: [\n J.map((oe, pe)=>{\n let { blockType: be, isLoading: ot } = oe, je = B.blocksMap[be] ?? _e.find((Je)=>Je.slug === be);\n if (je) {\n let Je = `${q}.${pe}`, Rt = ue.filter((Ut)=>Ut.startsWith(Je + \".\")).length;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jn, {\n disabled: y || X || !a,\n id: oe.id,\n children: (Ut)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(WS, {\n ...Ut,\n addRow: Me,\n block: je,\n blocks: _e,\n copyRow: we,\n duplicateRow: Ue,\n errorCount: Rt,\n fields: je.fields,\n hasMaxRows: K,\n isLoading: ot,\n isSortable: a,\n Label: J?.[pe]?.customComponents?.RowLabel,\n labels: L,\n moveRow: Oe,\n parentPath: q,\n pasteRow: G,\n path: Je,\n permissions: C,\n readOnly: y || X,\n removeRow: he,\n row: oe,\n rowCount: J.length,\n rowIndex: pe,\n schemaPath: I + je.slug,\n setCollapse: ae\n })\n }, oe.id);\n }\n return null;\n }),\n !j && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n ne && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sn, {\n type: \"error\",\n children: o(\"validation:requiresAtLeast\", {\n count: w,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(w > 1 ? L.plural : L.singular, e) || o(w > 1 ? \"general:row\" : \"general:rows\")\n })\n }),\n te && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sn, {\n children: o(\"validation:fieldHasNo\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(L.plural, e)\n })\n })\n ]\n })\n ]\n }),\n !K && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ms, {\n className: `${Hr}__drawer-toggler`,\n disabled: y || X,\n slug: $,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n disabled: y || X,\n el: \"span\",\n icon: \"plus\",\n iconPosition: \"left\",\n iconStyle: \"with-border\",\n children: o(\"fields:addLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(L.singular, e)\n })\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hu, {\n addRow: Me,\n addRowIndex: J?.length || 0,\n blocks: Be,\n drawerSlug: $,\n labels: L\n })\n ]\n }),\n W\n ]\n });\n}, gu = We(tB);\n\n\n\n\nvar nB = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.lazy)(()=>__webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_payloadcms_ui_3_81_0__types_react_19_2_14_monaco-editor_-755194\").then(__webpack_require__.bind(__webpack_require__, /*! ./CodeEditor-67I2RYO2.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/CodeEditor-67I2RYO2.js\"))), bu = (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {}),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(nB, {\n ...t\n })\n });\nvar lB = {\n js: \"javascript\",\n ts: \"typescript\",\n tsx: \"typescript\"\n}, cB = \"code-field\", uB = (t)=>{\n _s21();\n let { field: e, field: { admin: { className: o, description: n, editorOptions: r, editorProps: s, language: i = \"javascript\" } = {}, label: l, localized: a, required: c }, onMount: u, path: d, readOnly: f, validate: m } = t, p = react__WEBPACK_IMPORTED_MODULE_0__.useRef(\"formState\"), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Date.now()), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((P, E)=>{\n if (typeof m == \"function\") return m(P, {\n ...E,\n required: c\n });\n }, [\n m,\n c\n ]), { customComponents: { AfterInput: C, BeforeInput: y, Description: v, Error: x, Label: I } = {}, disabled: w, initialValue: F, path: S, setValue: R, showError: D, value: _ } = Te({\n potentiallyStalePath: d,\n validate: b\n }), T = react__WEBPACK_IMPORTED_MODULE_0__.useRef((_ || F) !== void 0 ? _ ?? F : void 0), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((P)=>{\n if (!(f || w)) {\n p.current = \"internalEditor\";\n try {\n R(P || null), T.current = P;\n } catch {\n R(P || null), T.current = P;\n }\n }\n }, [\n f,\n w,\n R\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n p.current === \"formState\" && (T.current = (_ || F) !== void 0 ? _ ?? F : void 0, g(Date.now())), p.current = \"formState\";\n }, [\n F,\n S,\n _\n ]);\n let k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n cB,\n o,\n D && \"error\",\n (f || w) && \"read-only\"\n ].filter(Boolean).join(\" \"),\n style: k,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: I,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: l,\n localized: a,\n path: S,\n required: c\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: x,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: S,\n showError: D\n })\n }),\n y,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bu, {\n defaultLanguage: lB[i] || i,\n onChange: A,\n onMount: u,\n options: r,\n readOnly: f || w,\n recalculatedHeightAt: h,\n value: T.current,\n wrapperProps: {\n id: `field-${S?.replace(/\\./g, \"__\")}`\n },\n ...s || {}\n }),\n C\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: v,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: n,\n path: S\n })\n })\n ]\n });\n}, vu = We(uB);\n_s21(uB, \"hoPSxVW+AymCRIyTeL2qnF1CVGE=\");\n\n\n\n\n\nvar sp = (t)=>t.reduce((e, o)=>{\n let n = \"fields\" in o ? o.fields : void 0;\n return n ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(o) ? e.push(`${o.name}.`) : e.push(...sp(n)) : o.type === \"tabs\" ? \"tabs\" in o && o.tabs?.forEach((r)=>{\n \"name\" in r ? e.push(`${r.name}.`) : e.push(...sp(r.fields));\n }) : (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(o) && e.push(o.name), e;\n }, []);\nvar Qi = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { fields: o, path: n, setErrorCount: r } = t, [s] = Xs(), i = fo(), l;\n e[0] !== o ? (l = sp(o), e[0] = o, e[1] = l) : l = e[1];\n let a = l, c;\n e[2] !== s || e[3] !== i || e[4] !== n || e[5] !== a || e[6] !== r ? (c = ()=>{\n if (i) {\n let d = 0;\n Object.entries(s).forEach((f)=>{\n let [m] = f;\n if (a?.some((h)=>{\n let g = [\n ...n,\n h\n ].join(\".\");\n if (g.endsWith(\".\")) {\n let b = g.slice(0, -1);\n return m.startsWith(g) || m === b;\n }\n return m === g;\n })) {\n let h = s[m];\n \"valid\" in h && !h.valid && (d = d + 1);\n }\n }), r(d);\n }\n }, e[2] = s, e[3] = i, e[4] = n, e[5] = a, e[6] = r, e[7] = c) : c = e[7];\n let u;\n return e[8] !== o || e[9] !== s || e[10] !== i ? (u = [\n s,\n i,\n o\n ], e[8] = o, e[9] = s, e[10] = i, e[11] = u) : u = e[11], zi(c, 250, u), null;\n};\n_c98 = Qi;\nvar yu = \"collapsible-field\", bB = (t)=>{\n let { field: e, field: { admin: { className: o, description: n, initCollapsed: r = !1 } = {}, fields: s, label: i } = {}, indexPath: l, parentPath: a, parentSchemaPath: c, path: u, permissions: d, readOnly: f } = t, { i18n: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { getPreference: p, setPreference: h } = so(), { preferencesKey: g } = Se(), [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), y = `collapsible-${u?.replace(/\\./g, \"__\")}`, [v, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), I = v > 0, { customComponents: { AfterInput: w, BeforeInput: F, Description: S, Label: R } = {}, disabled: D } = Te({\n path: u\n }), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (A)=>{\n let k = await p(g);\n g && h(g, {\n ...k,\n ...u ? {\n fields: {\n ...k?.fields || {},\n [u]: {\n ...k?.fields?.[u],\n collapsed: A\n }\n }\n } : {\n fields: {\n ...k?.fields || {},\n [y]: {\n ...k?.fields?.[y],\n collapsed: A\n }\n }\n }\n });\n }, [\n g,\n y,\n p,\n h,\n u\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n (async ()=>{\n if (g) {\n let k = await p(g), P = u ? k?.fields?.[u]?.collapsed : k?.fields?.[y]?.collapsed;\n C(P !== void 0 ? !!P : typeof r == \"boolean\" ? r : !1);\n } else C(typeof r == \"boolean\" ? r : !1);\n })();\n }, [\n p,\n g,\n y,\n r,\n u\n ]);\n let T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return typeof b != \"boolean\" ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qi, {\n fields: s,\n path: u.split(\".\").slice(0, -1),\n setErrorCount: x\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n yu,\n o,\n I ? `${yu}--has-error` : `${yu}--has-no-error`\n ].filter(Boolean).join(\" \"),\n id: `field-${y}`,\n style: T,\n children: [\n F,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zi, {\n className: `${yu}__collapsible`,\n collapsibleStyle: I ? \"error\" : \"default\",\n header: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${yu}__row-label-wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(is, {\n CustomComponent: R,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, m),\n path: u\n }),\n I && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: v,\n i18n: m,\n withMessage: !0\n })\n ]\n }),\n initCollapsed: b,\n onToggle: _,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n fields: s,\n margins: \"small\",\n parentIndexPath: l,\n parentPath: a,\n parentSchemaPath: c,\n permissions: d,\n readOnly: f || D\n })\n }),\n w,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: S,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: n,\n path: u\n })\n })\n ]\n })\n ]\n });\n}, Cu = We(bB);\n\n\n\n\n\nvar CB = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.lazy)(()=>__webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_pnpm_payloadcms_ui_3_81_0__types_react_19_2_14_monaco-editor_-f4dcee\").then(__webpack_require__.bind(__webpack_require__, /*! ./DatePicker-T2DMDMM5.js */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/DatePicker-T2DMDMM5.js\"))), Cl = (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {\n fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: 50\n }),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(CB, {\n ...t\n })\n });\n\n\n\n\n\nfunction pn(t) {\n \"@babel/helpers - typeof\";\n return pn = typeof Symbol == \"function\" && typeof Symbol.iterator == \"symbol\" ? function(e) {\n return typeof e;\n } : function(e) {\n return e && typeof Symbol == \"function\" && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, pn(t);\n}\nfunction QS(t, e) {\n if (pn(t) != \"object\" || !t) return t;\n var o = t[Symbol.toPrimitive];\n if (o !== void 0) {\n var n = o.call(t, e || \"default\");\n if (pn(n) != \"object\") return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (e === \"string\" ? String : Number)(t);\n}\n_c99 = QS;\nfunction ip(t) {\n var e = QS(t, \"string\");\n return pn(e) == \"symbol\" ? e : e + \"\";\n}\nfunction ea(t, e, o) {\n return (e = ip(e)) in t ? Object.defineProperty(t, e, {\n value: o,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : t[e] = o, t;\n}\nfunction KS(t, e) {\n var o = Object.keys(t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(t);\n e && (n = n.filter(function(r) {\n return Object.getOwnPropertyDescriptor(t, r).enumerable;\n })), o.push.apply(o, n);\n }\n return o;\n}\n_c100 = KS;\nfunction Le(t) {\n for(var e = 1; e < arguments.length; e++){\n var o = arguments[e] != null ? arguments[e] : {};\n e % 2 ? KS(Object(o), !0).forEach(function(n) {\n ea(t, n, o[n]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(o)) : KS(Object(o)).forEach(function(n) {\n Object.defineProperty(t, n, Object.getOwnPropertyDescriptor(o, n));\n });\n }\n return t;\n}\n_c101 = Le;\nfunction eI(t) {\n if (Array.isArray(t)) return t;\n}\nfunction tI(t, e) {\n var o = t == null ? null : typeof Symbol < \"u\" && t[Symbol.iterator] || t[\"@@iterator\"];\n if (o != null) {\n var n, r, s, i, l = [], a = !0, c = !1;\n try {\n if (s = (o = o.call(t)).next, e === 0) {\n if (Object(o) !== o) return;\n a = !1;\n } else for(; !(a = (n = s.call(o)).done) && (l.push(n.value), l.length !== e); a = !0);\n } catch (u) {\n c = !0, r = u;\n } finally{\n try {\n if (!a && o.return != null && (i = o.return(), Object(i) !== i)) return;\n } finally{\n if (c) throw r;\n }\n }\n return l;\n }\n}\nfunction xu(t, e) {\n (e == null || e > t.length) && (e = t.length);\n for(var o = 0, n = Array(e); o < e; o++)n[o] = t[o];\n return n;\n}\nfunction ap(t, e) {\n if (t) {\n if (typeof t == \"string\") return xu(t, e);\n var o = ({}).toString.call(t).slice(8, -1);\n return o === \"Object\" && t.constructor && (o = t.constructor.name), o === \"Map\" || o === \"Set\" ? Array.from(t) : o === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o) ? xu(t, e) : void 0;\n }\n}\nfunction oI() {\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 hn(t, e) {\n return eI(t) || tI(t, e) || ap(t, e) || oI();\n}\nfunction cr(t, e) {\n if (t == null) return {};\n var o, n, r = ll(t, e);\n if (Object.getOwnPropertySymbols) {\n var s = Object.getOwnPropertySymbols(t);\n for(n = 0; n < s.length; n++)o = s[n], e.indexOf(o) === -1 && ({}).propertyIsEnumerable.call(t, o) && (r[o] = t[o]);\n }\n return r;\n}\n\nvar xB = [\n \"defaultInputValue\",\n \"defaultMenuIsOpen\",\n \"defaultValue\",\n \"inputValue\",\n \"menuIsOpen\",\n \"onChange\",\n \"onInputChange\",\n \"onMenuClose\",\n \"onMenuOpen\",\n \"value\"\n];\nfunction cp(t) {\n var e = t.defaultInputValue, o = e === void 0 ? \"\" : e, n = t.defaultMenuIsOpen, r = n === void 0 ? !1 : n, s = t.defaultValue, i = s === void 0 ? null : s, l = t.inputValue, a = t.menuIsOpen, c = t.onChange, u = t.onInputChange, d = t.onMenuClose, f = t.onMenuOpen, m = t.value, p = cr(t, xB), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(l !== void 0 ? l : o), g = hn(h, 2), b = g[0], C = g[1], y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(a !== void 0 ? a : r), v = hn(y, 2), x = v[0], I = v[1], w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(m !== void 0 ? m : i), F = hn(w, 2), S = F[0], R = F[1], D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(B, $) {\n typeof c == \"function\" && c(B, $), R(B);\n }, [\n c\n ]), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(B, $) {\n var M;\n typeof u == \"function\" && (M = u(B, $)), C(M !== void 0 ? M : B);\n }, [\n u\n ]), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function() {\n typeof f == \"function\" && f(), I(!0);\n }, [\n f\n ]), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function() {\n typeof d == \"function\" && d(), I(!1);\n }, [\n d\n ]), k = l !== void 0 ? l : b, P = a !== void 0 ? a : x, E = m !== void 0 ? m : S;\n return Le(Le({}, p), {}, {\n inputValue: k,\n menuIsOpen: P,\n onChange: D,\n onInputChange: _,\n onMenuClose: A,\n onMenuOpen: T,\n value: E\n });\n}\n\n\nfunction rI(t, e) {\n if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction nI(t, e) {\n for(var o = 0; o < e.length; o++){\n var n = e[o];\n n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(t, ip(n.key), n);\n }\n}\nfunction sI(t, e, o) {\n return e && nI(t.prototype, e), o && nI(t, o), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), t;\n}\nfunction iI(t, e) {\n if (typeof e != \"function\" && e !== null) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && cl(t, e);\n}\nfunction wu(t) {\n return wu = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {\n return e.__proto__ || Object.getPrototypeOf(e);\n }, wu(t);\n}\nfunction dv() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch {}\n return (dv = function() {\n return !!t;\n })();\n}\nfunction aI(t, e) {\n if (e && (pn(e) == \"object\" || typeof e == \"function\")) return e;\n if (e !== void 0) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return B2(t);\n}\nfunction lI(t) {\n var e = dv();\n return function() {\n var o, n = wu(t);\n if (e) {\n var r = wu(this).constructor;\n o = Reflect.construct(n, arguments, r);\n } else o = n.apply(this, arguments);\n return aI(this, o);\n };\n}\nfunction cI(t) {\n if (Array.isArray(t)) return xu(t);\n}\nfunction uI(t) {\n if (typeof Symbol < \"u\" && t[Symbol.iterator] != null || t[\"@@iterator\"] != null) return Array.from(t);\n}\nfunction dI() {\n throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);\n}\nfunction ti(t) {\n return cI(t) || uI(t) || ap(t) || dI();\n}\n\n\n\n\nvar wB = !1;\nfunction SB(t) {\n if (t.sheet) return t.sheet;\n for(var e = 0; e < document.styleSheets.length; e++)if (document.styleSheets[e].ownerNode === t) return document.styleSheets[e];\n}\n_c102 = SB;\nfunction IB(t) {\n var e = document.createElement(\"style\");\n return e.setAttribute(\"data-emotion\", t.key), t.nonce !== void 0 && e.setAttribute(\"nonce\", t.nonce), e.appendChild(document.createTextNode(\"\")), e.setAttribute(\"data-s\", \"\"), e;\n}\n_c103 = IB;\nvar mI = function() {\n function t(o) {\n var n = this;\n this._insertTag = function(r) {\n var s;\n n.tags.length === 0 ? n.insertionPoint ? s = n.insertionPoint.nextSibling : n.prepend ? s = n.container.firstChild : s = n.before : s = n.tags[n.tags.length - 1].nextSibling, n.container.insertBefore(r, s), n.tags.push(r);\n }, this.isSpeedy = o.speedy === void 0 ? !wB : o.speedy, this.tags = [], this.ctr = 0, this.nonce = o.nonce, this.key = o.key, this.container = o.container, this.prepend = o.prepend, this.insertionPoint = o.insertionPoint, this.before = null;\n }\n var e = t.prototype;\n return e.hydrate = function(n) {\n n.forEach(this._insertTag);\n }, e.insert = function(n) {\n this.ctr % (this.isSpeedy ? 65e3 : 1) === 0 && this._insertTag(IB(this));\n var r = this.tags[this.tags.length - 1];\n if (this.isSpeedy) {\n var s = SB(r);\n try {\n s.insertRule(n, s.cssRules.length);\n } catch {}\n } else r.appendChild(document.createTextNode(n));\n this.ctr++;\n }, e.flush = function() {\n this.tags.forEach(function(n) {\n var r;\n return (r = n.parentNode) == null ? void 0 : r.removeChild(n);\n }), this.tags = [], this.ctr = 0;\n }, t;\n}();\nvar Lo = \"-ms-\", Su = \"-moz-\", ut = \"-webkit-\", up = \"comm\", xl = \"rule\", wl = \"decl\";\nvar fI = \"@import\";\nvar dp = \"@keyframes\";\nvar pI = \"@layer\";\nvar hI = Math.abs, ta = String.fromCharCode, gI = Object.assign;\nfunction bI(t, e) {\n return io(t, 0) ^ 45 ? (((e << 2 ^ io(t, 0)) << 2 ^ io(t, 1)) << 2 ^ io(t, 2)) << 2 ^ io(t, 3) : 0;\n}\nfunction mp(t) {\n return t.trim();\n}\nfunction mv(t, e) {\n return (t = e.exec(t)) ? t[0] : t;\n}\nfunction at(t, e, o) {\n return t.replace(e, o);\n}\nfunction Iu(t, e) {\n return t.indexOf(e);\n}\n_c104 = Iu;\nfunction io(t, e) {\n return t.charCodeAt(e) | 0;\n}\nfunction oi(t, e, o) {\n return t.slice(e, o);\n}\nfunction Qo(t) {\n return t.length;\n}\n_c105 = Qo;\nfunction Sl(t) {\n return t.length;\n}\n_c106 = Sl;\nfunction Il(t, e) {\n return e.push(t), t;\n}\n_c107 = Il;\nfunction fv(t, e) {\n return t.map(e).join(\"\");\n}\nvar fp = 1, _l = 1, vI = 0, Ko = 0, bo = 0, Fl = \"\";\nfunction _u(t, e, o, n, r, s, i) {\n return {\n value: t,\n root: e,\n parent: o,\n type: n,\n props: r,\n children: s,\n line: fp,\n column: _l,\n length: i,\n return: \"\"\n };\n}\nfunction Dl(t, e) {\n return gI(_u(\"\", null, null, \"\", null, null, 0), t, {\n length: -t.length\n }, e);\n}\n_c108 = Dl;\nfunction yI() {\n return bo;\n}\nfunction CI() {\n return bo = Ko > 0 ? io(Fl, --Ko) : 0, _l--, bo === 10 && (_l = 1, fp--), bo;\n}\n_c109 = CI;\nfunction er() {\n return bo = Ko < vI ? io(Fl, Ko++) : 0, _l++, bo === 10 && (_l = 1, fp++), bo;\n}\nfunction Ur() {\n return io(Fl, Ko);\n}\n_c110 = Ur;\nfunction Tu() {\n return Ko;\n}\n_c111 = Tu;\nfunction Rl(t, e) {\n return oi(Fl, t, e);\n}\n_c112 = Rl;\nfunction Tl(t) {\n switch(t){\n case 0:\n case 9:\n case 10:\n case 13:\n case 32:\n return 5;\n case 33:\n case 43:\n case 44:\n case 47:\n case 62:\n case 64:\n case 126:\n case 59:\n case 123:\n case 125:\n return 4;\n case 58:\n return 3;\n case 34:\n case 39:\n case 40:\n case 91:\n return 2;\n case 41:\n case 93:\n return 1;\n }\n return 0;\n}\n_c113 = Tl;\nfunction pp(t) {\n return fp = _l = 1, vI = Qo(Fl = t), Ko = 0, [];\n}\nfunction hp(t) {\n return Fl = \"\", t;\n}\nfunction Al(t) {\n return mp(Rl(Ko - 1, pv(t === 91 ? t + 2 : t === 40 ? t + 1 : t)));\n}\n_c114 = Al;\nfunction xI(t) {\n for(; (bo = Ur()) && bo < 33;)er();\n return Tl(t) > 2 || Tl(bo) > 3 ? \"\" : \" \";\n}\nfunction wI(t, e) {\n for(; --e && er() && !(bo < 48 || bo > 102 || bo > 57 && bo < 65 || bo > 70 && bo < 97););\n return Rl(t, Tu() + (e < 6 && Ur() == 32 && er() == 32));\n}\nfunction pv(t) {\n for(; er();)switch(bo){\n case t:\n return Ko;\n case 34:\n case 39:\n t !== 34 && t !== 39 && pv(bo);\n break;\n case 40:\n t === 41 && pv(t);\n break;\n case 92:\n er();\n break;\n }\n return Ko;\n}\nfunction SI(t, e) {\n for(; er() && t + bo !== 57;)if (t + bo === 84 && Ur() === 47) break;\n return \"/*\" + Rl(e, Ko - 1) + \"*\" + ta(t === 47 ? t : er());\n}\n_c115 = SI;\nfunction II(t) {\n for(; !Tl(Ur());)er();\n return Rl(t, Ko);\n}\n_c116 = II;\nfunction FI(t) {\n return hp(gp(\"\", null, null, null, [\n \"\"\n ], t = pp(t), 0, [\n 0\n ], t));\n}\n_c117 = FI;\nfunction gp(t, e, o, n, r, s, i, l, a) {\n for(var c = 0, u = 0, d = i, f = 0, m = 0, p = 0, h = 1, g = 1, b = 1, C = 0, y = \"\", v = r, x = s, I = n, w = y; g;)switch(p = C, C = er()){\n case 40:\n if (p != 108 && io(w, d - 1) == 58) {\n Iu(w += at(Al(C), \"&\", \"&\\f\"), \"&\\f\") != -1 && (b = -1);\n break;\n }\n case 34:\n case 39:\n case 91:\n w += Al(C);\n break;\n case 9:\n case 10:\n case 13:\n case 32:\n w += xI(p);\n break;\n case 92:\n w += wI(Tu() - 1, 7);\n continue;\n case 47:\n switch(Ur()){\n case 42:\n case 47:\n Il(_B(SI(er(), Tu()), e, o), a);\n break;\n default:\n w += \"/\";\n }\n break;\n case 123 * h:\n l[c++] = Qo(w) * b;\n case 125 * h:\n case 59:\n case 0:\n switch(C){\n case 0:\n case 125:\n g = 0;\n case 59 + u:\n b == -1 && (w = at(w, /\\f/g, \"\")), m > 0 && Qo(w) - d && Il(m > 32 ? TI(w + \";\", n, o, d - 1) : TI(at(w, \" \", \"\") + \";\", n, o, d - 2), a);\n break;\n case 59:\n w += \";\";\n default:\n if (Il(I = _I(w, e, o, c, u, r, l, y, v = [], x = [], d), s), C === 123) if (u === 0) gp(w, e, I, I, v, s, d, l, x);\n else switch(f === 99 && io(w, 3) === 110 ? 100 : f){\n case 100:\n case 108:\n case 109:\n case 115:\n gp(t, I, I, n && Il(_I(t, I, I, 0, 0, r, l, y, r, v = [], d), x), r, x, d, l, n ? v : x);\n break;\n default:\n gp(w, I, I, I, [\n \"\"\n ], x, 0, l, x);\n }\n }\n c = u = m = 0, h = b = 1, y = w = \"\", d = i;\n break;\n case 58:\n d = 1 + Qo(w), m = p;\n default:\n if (h < 1) {\n if (C == 123) --h;\n else if (C == 125 && h++ == 0 && CI() == 125) continue;\n }\n switch(w += ta(C), C * h){\n case 38:\n b = u > 0 ? 1 : (w += \"\\f\", -1);\n break;\n case 44:\n l[c++] = (Qo(w) - 1) * b, b = 1;\n break;\n case 64:\n Ur() === 45 && (w += Al(er())), f = Ur(), u = d = Qo(y = w += II(Tu())), C++;\n break;\n case 45:\n p === 45 && Qo(w) == 2 && (h = 0);\n }\n }\n return s;\n}\nfunction _I(t, e, o, n, r, s, i, l, a, c, u) {\n for(var d = r - 1, f = r === 0 ? s : [\n \"\"\n ], m = Sl(f), p = 0, h = 0, g = 0; p < n; ++p)for(var b = 0, C = oi(t, d + 1, d = hI(h = i[p])), y = t; b < m; ++b)(y = mp(h > 0 ? f[b] + \" \" + C : at(C, /&\\f/g, f[b]))) && (a[g++] = y);\n return _u(t, e, o, r === 0 ? xl : l, a, c, u);\n}\nfunction _B(t, e, o) {\n return _u(t, e, o, up, ta(yI()), oi(t, 2, -2), 0);\n}\nfunction TI(t, e, o, n) {\n return _u(t, e, o, wl, oi(t, 0, n), oi(t, n + 1, -1), n);\n}\n_c118 = TI;\nfunction oa(t, e) {\n for(var o = \"\", n = Sl(t), r = 0; r < n; r++)o += e(t[r], r, t, e) || \"\";\n return o;\n}\nfunction DI(t, e, o, n) {\n switch(t.type){\n case pI:\n if (t.children.length) break;\n case fI:\n case wl:\n return t.return = t.return || t.value;\n case up:\n return \"\";\n case dp:\n return t.return = t.value + \"{\" + oa(t.children, n) + \"}\";\n case xl:\n t.value = t.props.join(\",\");\n }\n return Qo(o = oa(t.children, n)) ? t.return = t.value + \"{\" + o + \"}\" : \"\";\n}\n_c119 = DI;\nfunction RI(t) {\n var e = Sl(t);\n return function(o, n, r, s) {\n for(var i = \"\", l = 0; l < e; l++)i += t[l](o, n, r, s) || \"\";\n return i;\n };\n}\n_c120 = RI;\nfunction AI(t) {\n return function(e) {\n e.root || (e = e.return) && t(e);\n };\n}\n_c121 = AI;\nfunction PI(t) {\n var e = Object.create(null);\n return function(o) {\n return e[o] === void 0 && (e[o] = t(o)), e[o];\n };\n}\n_c122 = PI;\nvar TB = function(e, o, n) {\n for(var r = 0, s = 0; r = s, s = Ur(), r === 38 && s === 12 && (o[n] = 1), !Tl(s);)er();\n return Rl(e, Ko);\n}, FB = function(e, o) {\n var n = -1, r = 44;\n do switch(Tl(r)){\n case 0:\n r === 38 && Ur() === 12 && (o[n] = 1), e[n] += TB(Ko - 1, o, n);\n break;\n case 2:\n e[n] += Al(r);\n break;\n case 4:\n if (r === 44) {\n e[++n] = Ur() === 58 ? \"&\\f\" : \"\", o[n] = e[n].length;\n break;\n }\n default:\n e[n] += ta(r);\n }\n while (r = er());\n return e;\n}, DB = function(e, o) {\n return hp(FB(pp(e), o));\n}, EI = new WeakMap, RB = function(e) {\n if (!(e.type !== \"rule\" || !e.parent || e.length < 1)) {\n for(var o = e.value, n = e.parent, r = e.column === n.column && e.line === n.line; n.type !== \"rule\";)if (n = n.parent, !n) return;\n if (!(e.props.length === 1 && o.charCodeAt(0) !== 58 && !EI.get(n)) && !r) {\n EI.set(e, !0);\n for(var s = [], i = DB(o, s), l = n.props, a = 0, c = 0; a < i.length; a++)for(var u = 0; u < l.length; u++, c++)e.props[c] = s[a] ? i[a].replace(/&\\f/g, l[u]) : l[u] + \" \" + i[a];\n }\n }\n}, AB = function(e) {\n if (e.type === \"decl\") {\n var o = e.value;\n o.charCodeAt(0) === 108 && o.charCodeAt(2) === 98 && (e.return = \"\", e.value = \"\");\n }\n};\nfunction NI(t, e) {\n switch(bI(t, e)){\n case 5103:\n return ut + \"print-\" + t + t;\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921:\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005:\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855:\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return ut + t + t;\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return ut + t + Su + t + Lo + t + t;\n case 6828:\n case 4268:\n return ut + t + Lo + t + t;\n case 6165:\n return ut + t + Lo + \"flex-\" + t + t;\n case 5187:\n return ut + t + at(t, /(\\w+).+(:[^]+)/, ut + \"box-$1$2\" + Lo + \"flex-$1$2\") + t;\n case 5443:\n return ut + t + Lo + \"flex-item-\" + at(t, /flex-|-self/, \"\") + t;\n case 4675:\n return ut + t + Lo + \"flex-line-pack\" + at(t, /align-content|flex-|-self/, \"\") + t;\n case 5548:\n return ut + t + Lo + at(t, \"shrink\", \"negative\") + t;\n case 5292:\n return ut + t + Lo + at(t, \"basis\", \"preferred-size\") + t;\n case 6060:\n return ut + \"box-\" + at(t, \"-grow\", \"\") + ut + t + Lo + at(t, \"grow\", \"positive\") + t;\n case 4554:\n return ut + at(t, /([^-])(transform)/g, \"$1\" + ut + \"$2\") + t;\n case 6187:\n return at(at(at(t, /(zoom-|grab)/, ut + \"$1\"), /(image-set)/, ut + \"$1\"), t, \"\") + t;\n case 5495:\n case 3959:\n return at(t, /(image-set\\([^]*)/, ut + \"$1$`$1\");\n case 4968:\n return at(at(t, /(.+:)(flex-)?(.*)/, ut + \"box-pack:$3\" + Lo + \"flex-pack:$3\"), /s.+-b[^;]+/, \"justify\") + ut + t + t;\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return at(t, /(.+)-inline(.+)/, ut + \"$1$2\") + t;\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n if (Qo(t) - 1 - e > 6) switch(io(t, e + 1)){\n case 109:\n if (io(t, e + 4) !== 45) break;\n case 102:\n return at(t, /(.+:)(.+)-([^]+)/, \"$1\" + ut + \"$2-$3$1\" + Su + (io(t, e + 3) == 108 ? \"$3\" : \"$2-$3\")) + t;\n case 115:\n return ~Iu(t, \"stretch\") ? NI(at(t, \"stretch\", \"fill-available\"), e) + t : t;\n }\n break;\n case 4949:\n if (io(t, e + 1) !== 115) break;\n case 6444:\n switch(io(t, Qo(t) - 3 - (~Iu(t, \"!important\") && 10))){\n case 107:\n return at(t, \":\", \":\" + ut) + t;\n case 101:\n return at(t, /(.+:)([^;!]+)(;|!.+)?/, \"$1\" + ut + (io(t, 14) === 45 ? \"inline-\" : \"\") + \"box$3$1\" + ut + \"$2$3$1\" + Lo + \"$2box$3\") + t;\n }\n break;\n case 5936:\n switch(io(t, e + 11)){\n case 114:\n return ut + t + Lo + at(t, /[svh]\\w+-[tblr]{2}/, \"tb\") + t;\n case 108:\n return ut + t + Lo + at(t, /[svh]\\w+-[tblr]{2}/, \"tb-rl\") + t;\n case 45:\n return ut + t + Lo + at(t, /[svh]\\w+-[tblr]{2}/, \"lr\") + t;\n }\n return ut + t + Lo + t + t;\n }\n return t;\n}\n_c123 = NI;\nvar PB = function(e, o, n, r) {\n if (e.length > -1 && !e.return) switch(e.type){\n case wl:\n e.return = NI(e.value, e.length);\n break;\n case dp:\n return oa([\n Dl(e, {\n value: at(e.value, \"@\", \"@\" + ut)\n })\n ], r);\n case xl:\n if (e.length) return fv(e.props, function(s) {\n switch(mv(s, /(::plac\\w+|:read-\\w+)/)){\n case \":read-only\":\n case \":read-write\":\n return oa([\n Dl(e, {\n props: [\n at(s, /:(read-\\w+)/, \":\" + Su + \"$1\")\n ]\n })\n ], r);\n case \"::placeholder\":\n return oa([\n Dl(e, {\n props: [\n at(s, /:(plac\\w+)/, \":\" + ut + \"input-$1\")\n ]\n }),\n Dl(e, {\n props: [\n at(s, /:(plac\\w+)/, \":\" + Su + \"$1\")\n ]\n }),\n Dl(e, {\n props: [\n at(s, /:(plac\\w+)/, Lo + \"input-$1\")\n ]\n })\n ], r);\n }\n return \"\";\n });\n }\n}, EB = [\n PB\n], hv = function(e) {\n var o = e.key;\n if (o === \"css\") {\n var n = document.querySelectorAll(\"style[data-emotion]:not([data-s])\");\n Array.prototype.forEach.call(n, function(h) {\n var g = h.getAttribute(\"data-emotion\");\n g.indexOf(\" \") !== -1 && (document.head.appendChild(h), h.setAttribute(\"data-s\", \"\"));\n });\n }\n var r = e.stylisPlugins || EB, s = {}, i, l = [];\n i = e.container || document.head, Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^=\"' + o + ' \"]'), function(h) {\n for(var g = h.getAttribute(\"data-emotion\").split(\" \"), b = 1; b < g.length; b++)s[g[b]] = !0;\n l.push(h);\n });\n var a, c = [\n RB,\n AB\n ];\n {\n var u, d = [\n DI,\n AI(function(h) {\n u.insert(h);\n })\n ], f = RI(c.concat(r, d)), m = function(g) {\n return oa(FI(g), f);\n };\n a = function(g, b, C, y) {\n u = C, m(g ? g + \"{\" + b.styles + \"}\" : b.styles), y && (p.inserted[b.name] = !0);\n };\n }\n var p = {\n key: o,\n sheet: new mI({\n key: o,\n container: i,\n nonce: e.nonce,\n speedy: e.speedy,\n prepend: e.prepend,\n insertionPoint: e.insertionPoint\n }),\n nonce: e.nonce,\n inserted: s,\n registered: {},\n insert: a\n };\n return p.sheet.hydrate(l), p;\n};\nvar HB = !0;\nfunction xv(t, e, o) {\n var n = \"\";\n return o.split(\" \").forEach(function(r) {\n t[r] !== void 0 ? e.push(t[r] + \";\") : r && (n += r + \" \");\n }), n;\n}\nvar Fp = function(e, o, n) {\n var r = e.key + \"-\" + o.name;\n (n === !1 || HB === !1) && e.registered[r] === void 0 && (e.registered[r] = o.styles);\n}, wv = function(e, o, n) {\n Fp(e, o, n);\n var r = e.key + \"-\" + o.name;\n if (e.inserted[o.name] === void 0) {\n var s = o;\n do e.insert(o === s ? \".\" + r : \"\", s, e.sheet, !0), s = s.next;\n while (s !== void 0);\n }\n};\nfunction HI(t) {\n for(var e = 0, o, n = 0, r = t.length; r >= 4; ++n, r -= 4)o = t.charCodeAt(n) & 255 | (t.charCodeAt(++n) & 255) << 8 | (t.charCodeAt(++n) & 255) << 16 | (t.charCodeAt(++n) & 255) << 24, o = (o & 65535) * 1540483477 + ((o >>> 16) * 59797 << 16), o ^= o >>> 24, e = (o & 65535) * 1540483477 + ((o >>> 16) * 59797 << 16) ^ (e & 65535) * 1540483477 + ((e >>> 16) * 59797 << 16);\n switch(r){\n case 3:\n e ^= (t.charCodeAt(n + 2) & 255) << 16;\n case 2:\n e ^= (t.charCodeAt(n + 1) & 255) << 8;\n case 1:\n e ^= t.charCodeAt(n) & 255, e = (e & 65535) * 1540483477 + ((e >>> 16) * 59797 << 16);\n }\n return e ^= e >>> 13, e = (e & 65535) * 1540483477 + ((e >>> 16) * 59797 << 16), ((e ^ e >>> 15) >>> 0).toString(36);\n}\n_c124 = HI;\nvar UI = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\nvar UB = !1, XB = /[A-Z]|^ms/g, YB = /_EMO_([^_]+?)_([^]*?)_EMO_/g, JI = function(e) {\n return e.charCodeAt(1) === 45;\n}, XI = function(e) {\n return e != null && typeof e != \"boolean\";\n}, Sv = PI(function(t) {\n return JI(t) ? t : t.replace(XB, \"-$&\").toLowerCase();\n}), YI = function(e, o) {\n switch(e){\n case \"animation\":\n case \"animationName\":\n if (typeof o == \"string\") return o.replace(YB, function(n, r, s) {\n return Vn = {\n name: r,\n styles: s,\n next: Vn\n }, r;\n });\n }\n return UI[e] !== 1 && !JI(e) && typeof o == \"number\" && o !== 0 ? o + \"px\" : o;\n}, ZB = \"Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.\";\nfunction Fu(t, e, o) {\n if (o == null) return \"\";\n var n = o;\n if (n.__emotion_styles !== void 0) return n;\n switch(typeof o){\n case \"boolean\":\n return \"\";\n case \"object\":\n {\n var r = o;\n if (r.anim === 1) return Vn = {\n name: r.name,\n styles: r.styles,\n next: Vn\n }, r.name;\n var s = o;\n if (s.styles !== void 0) {\n var i = s.next;\n if (i !== void 0) for(; i !== void 0;)Vn = {\n name: i.name,\n styles: i.styles,\n next: Vn\n }, i = i.next;\n var l = s.styles + \";\";\n return l;\n }\n return JB(t, e, o);\n }\n case \"function\":\n {\n if (t !== void 0) {\n var a = Vn, c = o(t);\n return Vn = a, Fu(t, e, c);\n }\n break;\n }\n }\n var u = o;\n if (e == null) return u;\n var d = e[u];\n return d !== void 0 ? d : u;\n}\n_c125 = Fu;\nfunction JB(t, e, o) {\n var n = \"\";\n if (Array.isArray(o)) for(var r = 0; r < o.length; r++)n += Fu(t, e, o[r]) + \";\";\n else for(var s in o){\n var i = o[s];\n if (typeof i != \"object\") {\n var l = i;\n e != null && e[l] !== void 0 ? n += s + \"{\" + e[l] + \"}\" : XI(l) && (n += Sv(s) + \":\" + YI(s, l) + \";\");\n } else {\n if (s === \"NO_COMPONENT_SELECTOR\" && UB) throw new Error(ZB);\n if (Array.isArray(i) && typeof i[0] == \"string\" && (e == null || e[i[0]] === void 0)) for(var a = 0; a < i.length; a++)XI(i[a]) && (n += Sv(s) + \":\" + YI(s, i[a]) + \";\");\n else {\n var c = Fu(t, e, i);\n switch(s){\n case \"animation\":\n case \"animationName\":\n {\n n += Sv(s) + \":\" + c + \";\";\n break;\n }\n default:\n n += s + \"{\" + c + \"}\";\n }\n }\n }\n }\n return n;\n}\n_c126 = JB;\nvar ZI = /label:\\s*([^\\s;{]+)\\s*(;|$)/g, Vn;\nfunction Dp(t, e, o) {\n if (t.length === 1 && typeof t[0] == \"object\" && t[0] !== null && t[0].styles !== void 0) return t[0];\n var n = !0, r = \"\";\n Vn = void 0;\n var s = t[0];\n if (s == null || s.raw === void 0) n = !1, r += Fu(o, e, s);\n else {\n var i = s;\n r += i[0];\n }\n for(var l = 1; l < t.length; l++)if (r += Fu(o, e, t[l]), n) {\n var a = s;\n r += a[l];\n }\n ZI.lastIndex = 0;\n for(var c = \"\", u; (u = ZI.exec(r)) !== null;)c += \"-\" + u[1];\n var d = HI(r) + c;\n return {\n name: d,\n styles: r,\n next: Vn\n };\n}\n_c127 = Dp;\n\nvar qB = function(e) {\n return e();\n}, QB = react__WEBPACK_IMPORTED_MODULE_0__.useInsertionEffect ? react__WEBPACK_IMPORTED_MODULE_0__.useInsertionEffect : !1, Iv = QB || qB;\nvar qI = !1, QI = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(typeof HTMLElement < \"u\" ? hv({\n key: \"css\"\n}) : null), c0e = QI.Provider;\nvar KI = function(e) {\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function(o, n) {\n var r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(QI);\n return e(o, r, n);\n });\n}, e_ = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({});\nvar Ap = {}.hasOwnProperty, _v = \"__EMOTION_TYPE_PLEASE_DO_NOT_USE__\", t_ = function(e, o) {\n var n = {};\n for(var r in o)Ap.call(o, r) && (n[r] = o[r]);\n return n[_v] = e, n;\n}, tM = function(e) {\n var o = e.cache, n = e.serialized, r = e.isStringTag;\n return Fp(o, n, r), Iv(function() {\n return wv(o, n, r);\n }), null;\n}, oM = KI(_s22(function(t, e, o) {\n _s22();\n var n = t.css;\n typeof n == \"string\" && e.registered[n] !== void 0 && (n = e.registered[n]);\n var r = t[_v], s = [\n n\n ], i = \"\";\n typeof t.className == \"string\" ? i = xv(e.registered, s, t.className) : t.className != null && (i = t.className + \" \");\n var l = Dp(s, void 0, react__WEBPACK_IMPORTED_MODULE_0__.useContext(e_));\n i += e.key + \"-\" + l.name;\n var a = {};\n for(var c in t)Ap.call(t, c) && c !== \"css\" && c !== _v && !qI && (a[c] = t[c]);\n return a.className = i, o && (a.ref = o), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(tM, {\n cache: e,\n serialized: l,\n isStringTag: typeof r == \"string\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(r, a));\n}, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\")), o_ = oM;\n\nvar y0e = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(WI()), ke = function(e, o) {\n var n = arguments;\n if (o == null || !Ap.call(o, \"css\")) return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(void 0, n);\n var r = n.length, s = new Array(r);\n s[0] = o_, s[1] = t_(e, o);\n for(var i = 2; i < r; i++)s[i] = n[i];\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, s);\n};\n(function(t) {\n var e;\n e || (e = t.JSX || (t.JSX = {}));\n})(ke || (ke = {}));\nfunction Du() {\n for(var t = arguments.length, e = new Array(t), o = 0; o < t; o++)e[o] = arguments[o];\n return Dp(e);\n}\n_c128 = Du;\nfunction r_() {\n var t = Du.apply(void 0, arguments), e = \"animation-\" + t.name;\n return {\n name: e,\n styles: \"@keyframes \" + e + \"{\" + t.styles + \"}\",\n anim: 1,\n toString: function() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n}\nfunction n_(t, e) {\n return e || (e = t.slice(0)), Object.freeze(Object.defineProperties(t, {\n raw: {\n value: Object.freeze(e)\n }\n }));\n}\n(0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.l)();\n\n\n\nvar Pp = react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect;\nvar lM = [\n \"className\",\n \"clearValue\",\n \"cx\",\n \"getStyles\",\n \"getClassNames\",\n \"getValue\",\n \"hasValue\",\n \"isMulti\",\n \"isRtl\",\n \"options\",\n \"selectOption\",\n \"selectProps\",\n \"setValue\",\n \"theme\"\n], Ru = function() {};\nfunction cM(t, e) {\n return e ? e[0] === \"-\" ? t + e : t + \"__\" + e : t;\n}\nfunction i_(t, e) {\n for(var o = arguments.length, n = new Array(o > 2 ? o - 2 : 0), r = 2; r < o; r++)n[r - 2] = arguments[r];\n var s = [].concat(n);\n if (e && t) for(var i in e)e.hasOwnProperty(i) && e[i] && s.push(\"\".concat(cM(t, i)));\n return s.filter(function(l) {\n return l;\n }).map(function(l) {\n return String(l).trim();\n }).join(\" \");\n}\nvar El = function(e) {\n return hM(e) ? e.filter(Boolean) : pn(e) === \"object\" && e !== null ? [\n e\n ] : [];\n}, a_ = function(e) {\n e.className, e.clearValue, e.cx, e.getStyles, e.getClassNames, e.getValue, e.hasValue, e.isMulti, e.isRtl, e.options, e.selectOption, e.selectProps, e.setValue, e.theme;\n var o = cr(e, lM);\n return Le({}, o);\n}, eo = function(e, o, n) {\n var r = e.cx, s = e.getStyles, i = e.getClassNames, l = e.className;\n return {\n css: s(o, e),\n className: r(n ?? {}, i(o, e), l)\n };\n};\nfunction Au(t) {\n return [\n document.documentElement,\n document.body,\n window\n ].indexOf(t) > -1;\n}\n_c129 = Au;\nfunction uM(t) {\n return Au(t) ? window.innerHeight : t.clientHeight;\n}\nfunction l_(t) {\n return Au(t) ? window.pageYOffset : t.scrollTop;\n}\nfunction kp(t, e) {\n if (Au(t)) {\n window.scrollTo(0, e);\n return;\n }\n t.scrollTop = e;\n}\nfunction dM(t) {\n var e = getComputedStyle(t), o = e.position === \"absolute\", n = /(auto|scroll)/;\n if (e.position === \"fixed\") return document.documentElement;\n for(var r = t; r = r.parentElement;)if (e = getComputedStyle(r), !(o && e.position === \"static\") && n.test(e.overflow + e.overflowY + e.overflowX)) return r;\n return document.documentElement;\n}\nfunction mM(t, e, o, n) {\n return o * ((t = t / n - 1) * t * t + 1) + e;\n}\nfunction Ep(t, e) {\n var o = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 200, n = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : Ru, r = l_(t), s = e - r, i = 10, l = 0;\n function a() {\n l += i;\n var c = mM(l, r, s, o);\n kp(t, c), l < o ? window.requestAnimationFrame(a) : n(t);\n }\n a();\n}\n_c130 = Ep;\nfunction Rv(t, e) {\n var o = t.getBoundingClientRect(), n = e.getBoundingClientRect(), r = e.offsetHeight / 3;\n n.bottom + r > o.bottom ? kp(t, Math.min(e.offsetTop + e.clientHeight - t.offsetHeight + r, t.scrollHeight)) : n.top - r < o.top && kp(t, Math.max(e.offsetTop - r, 0));\n}\n_c131 = Rv;\nfunction fM(t) {\n var e = t.getBoundingClientRect();\n return {\n bottom: e.bottom,\n height: e.height,\n left: e.left,\n right: e.right,\n top: e.top,\n width: e.width\n };\n}\nfunction Av() {\n try {\n return document.createEvent(\"TouchEvent\"), !0;\n } catch {\n return !1;\n }\n}\n_c132 = Av;\nfunction c_() {\n try {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n } catch {\n return !1;\n }\n}\nvar u_ = !1, pM = {\n get passive () {\n return u_ = !0;\n }\n}, Np = typeof window < \"u\" ? window : {};\nNp.addEventListener && Np.removeEventListener && (Np.addEventListener(\"p\", Ru, pM), Np.removeEventListener(\"p\", Ru, !1));\nvar d_ = u_;\nfunction m_(t) {\n return t != null;\n}\nfunction hM(t) {\n return Array.isArray(t);\n}\nfunction ra(t, e, o) {\n return t ? e : o;\n}\nvar f_ = function(e) {\n for(var o = arguments.length, n = new Array(o > 1 ? o - 1 : 0), r = 1; r < o; r++)n[r - 1] = arguments[r];\n var s = Object.entries(e).filter(function(i) {\n var l = hn(i, 1), a = l[0];\n return !n.includes(a);\n });\n return s.reduce(function(i, l) {\n var a = hn(l, 2), c = a[0], u = a[1];\n return i[c] = u, i;\n }, {});\n}, gM = [\n \"children\",\n \"innerProps\"\n], bM = [\n \"children\",\n \"innerProps\"\n];\nfunction vM(t) {\n var e = t.maxHeight, o = t.menuEl, n = t.minHeight, r = t.placement, s = t.shouldScroll, i = t.isFixedPosition, l = t.controlHeight, a = dM(o), c = {\n placement: \"bottom\",\n maxHeight: e\n };\n if (!o || !o.offsetParent) return c;\n var u = a.getBoundingClientRect(), d = u.height, f = o.getBoundingClientRect(), m = f.bottom, p = f.height, h = f.top, g = o.offsetParent.getBoundingClientRect(), b = g.top, C = i ? window.innerHeight : uM(a), y = l_(a), v = parseInt(getComputedStyle(o).marginBottom, 10), x = parseInt(getComputedStyle(o).marginTop, 10), I = b - x, w = C - h, F = I + y, S = d - y - h, R = m - C + y + v, D = y + h - x, _ = 160;\n switch(r){\n case \"auto\":\n case \"bottom\":\n if (w >= p) return {\n placement: \"bottom\",\n maxHeight: e\n };\n if (S >= p && !i) return s && Ep(a, R, _), {\n placement: \"bottom\",\n maxHeight: e\n };\n if (!i && S >= n || i && w >= n) {\n s && Ep(a, R, _);\n var T = i ? w - v : S - v;\n return {\n placement: \"bottom\",\n maxHeight: T\n };\n }\n if (r === \"auto\" || i) {\n var A = e, k = i ? I : F;\n return k >= n && (A = Math.min(k - v - l, e)), {\n placement: \"top\",\n maxHeight: A\n };\n }\n if (r === \"bottom\") return s && kp(a, R), {\n placement: \"bottom\",\n maxHeight: e\n };\n break;\n case \"top\":\n if (I >= p) return {\n placement: \"top\",\n maxHeight: e\n };\n if (F >= p && !i) return s && Ep(a, D, _), {\n placement: \"top\",\n maxHeight: e\n };\n if (!i && F >= n || i && I >= n) {\n var P = e;\n return (!i && F >= n || i && I >= n) && (P = i ? I - x : F - x), s && Ep(a, D, _), {\n placement: \"top\",\n maxHeight: P\n };\n }\n return {\n placement: \"bottom\",\n maxHeight: e\n };\n default:\n throw new Error('Invalid placement provided \"'.concat(r, '\".'));\n }\n return c;\n}\nfunction yM(t) {\n var e = {\n bottom: \"top\",\n top: \"bottom\"\n };\n return t ? e[t] : \"bottom\";\n}\nvar p_ = function(e) {\n return e === \"auto\" ? \"bottom\" : e;\n}, h_ = function(e, o) {\n var n, r = e.placement, s = e.theme, i = s.borderRadius, l = s.spacing, a = s.colors;\n return Le((n = {\n label: \"menu\"\n }, ea(n, yM(r), \"100%\"), ea(n, \"position\", \"absolute\"), ea(n, \"width\", \"100%\"), ea(n, \"zIndex\", 1), n), o ? {} : {\n backgroundColor: a.neutral0,\n borderRadius: i,\n boxShadow: \"0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)\",\n marginBottom: l.menuGutter,\n marginTop: l.menuGutter\n });\n}, g_ = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null), b_ = function(e) {\n var o = e.children, n = e.minMenuHeight, r = e.maxMenuHeight, s = e.menuPlacement, i = e.menuPosition, l = e.menuShouldScrollIntoView, a = e.theme, c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(g_) || {}, u = c.setPortalPlacement, d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(r), m = hn(f, 2), p = m[0], h = m[1], g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), b = hn(g, 2), C = b[0], y = b[1], v = a.spacing.controlHeight;\n return Pp(function() {\n var x = d.current;\n if (x) {\n var I = i === \"fixed\", w = l && !I, F = vM({\n maxHeight: r,\n menuEl: x,\n minHeight: n,\n placement: s,\n shouldScroll: w,\n isFixedPosition: I,\n controlHeight: v\n });\n h(F.maxHeight), y(F.placement), u?.(F.placement);\n }\n }, [\n r,\n s,\n i,\n l,\n n,\n u,\n v\n ]), o({\n ref: d,\n placerProps: Le(Le({}, e), {}, {\n placement: C || p_(s),\n maxHeight: p\n })\n });\n}, CM = function(e) {\n var o = e.children, n = e.innerRef, r = e.innerProps;\n return ke(\"div\", Ne({}, eo(e, \"menu\", {\n menu: !0\n }), {\n ref: n\n }, r), o);\n}, xM = CM, v_ = function(e, o) {\n var n = e.maxHeight, r = e.theme.spacing.baseUnit;\n return Le({\n maxHeight: n,\n overflowY: \"auto\",\n position: \"relative\",\n WebkitOverflowScrolling: \"touch\"\n }, o ? {} : {\n paddingBottom: r,\n paddingTop: r\n });\n}, wM = function(e) {\n var o = e.children, n = e.innerProps, r = e.innerRef, s = e.isMulti;\n return ke(\"div\", Ne({}, eo(e, \"menuList\", {\n \"menu-list\": !0,\n \"menu-list--is-multi\": s\n }), {\n ref: r\n }, n), o);\n}, y_ = function(e, o) {\n var n = e.theme, r = n.spacing.baseUnit, s = n.colors;\n return Le({\n textAlign: \"center\"\n }, o ? {} : {\n color: s.neutral40,\n padding: \"\".concat(r * 2, \"px \").concat(r * 3, \"px\")\n });\n}, C_ = y_, x_ = y_, SM = function(e) {\n var o = e.children, n = o === void 0 ? \"No options\" : o, r = e.innerProps, s = cr(e, gM);\n return ke(\"div\", Ne({}, eo(Le(Le({}, s), {}, {\n children: n,\n innerProps: r\n }), \"noOptionsMessage\", {\n \"menu-notice\": !0,\n \"menu-notice--no-options\": !0\n }), r), n);\n}, IM = function(e) {\n var o = e.children, n = o === void 0 ? \"Loading...\" : o, r = e.innerProps, s = cr(e, bM);\n return ke(\"div\", Ne({}, eo(Le(Le({}, s), {}, {\n children: n,\n innerProps: r\n }), \"loadingMessage\", {\n \"menu-notice\": !0,\n \"menu-notice--loading\": !0\n }), r), n);\n}, w_ = function(e) {\n var o = e.rect, n = e.offset, r = e.position;\n return {\n left: o.left,\n position: r,\n top: n,\n width: o.width,\n zIndex: 1\n };\n}, _M = function(e) {\n var o = e.appendTo, n = e.children, r = e.controlElement, s = e.innerProps, i = e.menuPlacement, l = e.menuPosition, a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(p_(i)), d = hn(u, 2), f = d[0], m = d[1], p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return {\n setPortalPlacement: m\n };\n }, []), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), g = hn(h, 2), b = g[0], C = g[1], y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function() {\n if (r) {\n var w = fM(r), F = l === \"fixed\" ? 0 : window.pageYOffset, S = w[f] + F;\n (S !== b?.offset || w.left !== b?.rect.left || w.width !== b?.rect.width) && C({\n offset: S,\n rect: w\n });\n }\n }, [\n r,\n l,\n f,\n b?.offset,\n b?.rect.left,\n b?.rect.width\n ]);\n Pp(function() {\n y();\n }, [\n y\n ]);\n var v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function() {\n typeof c.current == \"function\" && (c.current(), c.current = null), r && a.current && (c.current = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.k)(r, a.current, y, {\n elementResize: \"ResizeObserver\" in window\n }));\n }, [\n r,\n y\n ]);\n Pp(function() {\n v();\n }, [\n v\n ]);\n var x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(w) {\n a.current = w, v();\n }, [\n v\n ]);\n if (!o && l !== \"fixed\" || !b) return null;\n var I = ke(\"div\", Ne({\n ref: x\n }, eo(Le(Le({}, e), {}, {\n offset: b.offset,\n position: l,\n rect: b.rect\n }), \"menuPortal\", {\n \"menu-portal\": !0\n }), s), n);\n return ke(g_.Provider, {\n value: p\n }, o ? /*#__PURE__*/ (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(I, o) : I);\n}, S_ = function(e) {\n var o = e.isDisabled, n = e.isRtl;\n return {\n label: \"container\",\n direction: n ? \"rtl\" : void 0,\n pointerEvents: o ? \"none\" : void 0,\n position: \"relative\"\n };\n}, TM = function(e) {\n var o = e.children, n = e.innerProps, r = e.isDisabled, s = e.isRtl;\n return ke(\"div\", Ne({}, eo(e, \"container\", {\n \"--is-disabled\": r,\n \"--is-rtl\": s\n }), n), o);\n}, I_ = function(e, o) {\n var n = e.theme.spacing, r = e.isMulti, s = e.hasValue, i = e.selectProps.controlShouldRenderValue;\n return Le({\n alignItems: \"center\",\n display: r && s && i ? \"flex\" : \"grid\",\n flex: 1,\n flexWrap: \"wrap\",\n WebkitOverflowScrolling: \"touch\",\n position: \"relative\",\n overflow: \"hidden\"\n }, o ? {} : {\n padding: \"\".concat(n.baseUnit / 2, \"px \").concat(n.baseUnit * 2, \"px\")\n });\n}, FM = function(e) {\n var o = e.children, n = e.innerProps, r = e.isMulti, s = e.hasValue;\n return ke(\"div\", Ne({}, eo(e, \"valueContainer\", {\n \"value-container\": !0,\n \"value-container--is-multi\": r,\n \"value-container--has-value\": s\n }), n), o);\n}, __ = function() {\n return {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n display: \"flex\",\n flexShrink: 0\n };\n}, DM = function(e) {\n var o = e.children, n = e.innerProps;\n return ke(\"div\", Ne({}, eo(e, \"indicatorsContainer\", {\n indicators: !0\n }), n), o);\n}, s_, RM = [\n \"size\"\n], AM = [\n \"innerProps\",\n \"isRtl\",\n \"size\"\n];\nvar PM = {\n name: \"8mmkcg\",\n styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0\"\n}, T_ = function(e) {\n var o = e.size, n = cr(e, RM);\n return ke(\"svg\", Ne({\n height: o,\n width: o,\n viewBox: \"0 0 20 20\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n css: PM\n }, n));\n}, Pv = function(e) {\n return ke(T_, Ne({\n size: 20\n }, e), ke(\"path\", {\n d: \"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z\"\n }));\n}, F_ = function(e) {\n return ke(T_, Ne({\n size: 20\n }, e), ke(\"path\", {\n d: \"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\"\n }));\n}, D_ = function(e, o) {\n var n = e.isFocused, r = e.theme, s = r.spacing.baseUnit, i = r.colors;\n return Le({\n label: \"indicatorContainer\",\n display: \"flex\",\n transition: \"color 150ms\"\n }, o ? {} : {\n color: n ? i.neutral60 : i.neutral20,\n padding: s * 2,\n \":hover\": {\n color: n ? i.neutral80 : i.neutral40\n }\n });\n}, R_ = D_, EM = function(e) {\n var o = e.children, n = e.innerProps;\n return ke(\"div\", Ne({}, eo(e, \"dropdownIndicator\", {\n indicator: !0,\n \"dropdown-indicator\": !0\n }), n), o || ke(F_, null));\n}, A_ = D_, NM = function(e) {\n var o = e.children, n = e.innerProps;\n return ke(\"div\", Ne({}, eo(e, \"clearIndicator\", {\n indicator: !0,\n \"clear-indicator\": !0\n }), n), o || ke(Pv, null));\n}, P_ = function(e, o) {\n var n = e.isDisabled, r = e.theme, s = r.spacing.baseUnit, i = r.colors;\n return Le({\n label: \"indicatorSeparator\",\n alignSelf: \"stretch\",\n width: 1\n }, o ? {} : {\n backgroundColor: n ? i.neutral10 : i.neutral20,\n marginBottom: s * 2,\n marginTop: s * 2\n });\n}, LM = function(e) {\n var o = e.innerProps;\n return ke(\"span\", Ne({}, o, eo(e, \"indicatorSeparator\", {\n \"indicator-separator\": !0\n })));\n}, kM = r_(s_ || (s_ = n_([\n `\n 0%, 80%, 100% { opacity: 0; }\n 40% { opacity: 1; }\n`\n]))), E_ = function(e, o) {\n var n = e.isFocused, r = e.size, s = e.theme, i = s.colors, l = s.spacing.baseUnit;\n return Le({\n label: \"loadingIndicator\",\n display: \"flex\",\n transition: \"color 150ms\",\n alignSelf: \"center\",\n fontSize: r,\n lineHeight: 1,\n marginRight: r,\n textAlign: \"center\",\n verticalAlign: \"middle\"\n }, o ? {} : {\n color: n ? i.neutral60 : i.neutral20,\n padding: l * 2\n });\n}, Fv = function(e) {\n var o = e.delay, n = e.offset;\n return ke(\"span\", {\n css: Du({\n animation: \"\".concat(kM, \" 1s ease-in-out \").concat(o, \"ms infinite;\"),\n backgroundColor: \"currentColor\",\n borderRadius: \"1em\",\n display: \"inline-block\",\n marginLeft: n ? \"1em\" : void 0,\n height: \"1em\",\n verticalAlign: \"top\",\n width: \"1em\"\n }, \"\", \"\")\n });\n}, jM = function(e) {\n var o = e.innerProps, n = e.isRtl, r = e.size, s = r === void 0 ? 4 : r, i = cr(e, AM);\n return ke(\"div\", Ne({}, eo(Le(Le({}, i), {}, {\n innerProps: o,\n isRtl: n,\n size: s\n }), \"loadingIndicator\", {\n indicator: !0,\n \"loading-indicator\": !0\n }), o), ke(Fv, {\n delay: 0,\n offset: n\n }), ke(Fv, {\n delay: 160,\n offset: !0\n }), ke(Fv, {\n delay: 320,\n offset: !n\n }));\n}, N_ = function(e, o) {\n var n = e.isDisabled, r = e.isFocused, s = e.theme, i = s.colors, l = s.borderRadius, a = s.spacing;\n return Le({\n label: \"control\",\n alignItems: \"center\",\n cursor: \"default\",\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\",\n minHeight: a.controlHeight,\n outline: \"0 !important\",\n position: \"relative\",\n transition: \"all 100ms\"\n }, o ? {} : {\n backgroundColor: n ? i.neutral5 : i.neutral0,\n borderColor: n ? i.neutral10 : r ? i.primary : i.neutral20,\n borderRadius: l,\n borderStyle: \"solid\",\n borderWidth: 1,\n boxShadow: r ? \"0 0 0 1px \".concat(i.primary) : void 0,\n \"&:hover\": {\n borderColor: r ? i.primary : i.neutral30\n }\n });\n}, $M = function(e) {\n var o = e.children, n = e.isDisabled, r = e.isFocused, s = e.innerRef, i = e.innerProps, l = e.menuIsOpen;\n return ke(\"div\", Ne({\n ref: s\n }, eo(e, \"control\", {\n control: !0,\n \"control--is-disabled\": n,\n \"control--is-focused\": r,\n \"control--menu-is-open\": l\n }), i, {\n \"aria-disabled\": n || void 0\n }), o);\n}, BM = $M, MM = [\n \"data\"\n], L_ = function(e, o) {\n var n = e.theme.spacing;\n return o ? {} : {\n paddingBottom: n.baseUnit * 2,\n paddingTop: n.baseUnit * 2\n };\n}, OM = function(e) {\n var o = e.children, n = e.cx, r = e.getStyles, s = e.getClassNames, i = e.Heading, l = e.headingProps, a = e.innerProps, c = e.label, u = e.theme, d = e.selectProps;\n return ke(\"div\", Ne({}, eo(e, \"group\", {\n group: !0\n }), a), ke(i, Ne({}, l, {\n selectProps: d,\n theme: u,\n getStyles: r,\n getClassNames: s,\n cx: n\n }), c), ke(\"div\", null, o));\n}, k_ = function(e, o) {\n var n = e.theme, r = n.colors, s = n.spacing;\n return Le({\n label: \"group\",\n cursor: \"default\",\n display: \"block\"\n }, o ? {} : {\n color: r.neutral40,\n fontSize: \"75%\",\n fontWeight: 500,\n marginBottom: \"0.25em\",\n paddingLeft: s.baseUnit * 3,\n paddingRight: s.baseUnit * 3,\n textTransform: \"uppercase\"\n });\n}, VM = function(e) {\n var o = a_(e);\n o.data;\n var n = cr(o, MM);\n return ke(\"div\", Ne({}, eo(e, \"groupHeading\", {\n \"group-heading\": !0\n }), n));\n}, GM = OM, zM = [\n \"innerRef\",\n \"isDisabled\",\n \"isHidden\",\n \"inputClassName\"\n], j_ = function(e, o) {\n var n = e.isDisabled, r = e.value, s = e.theme, i = s.spacing, l = s.colors;\n return Le(Le({\n visibility: n ? \"hidden\" : \"visible\",\n transform: r ? \"translateZ(0)\" : \"\"\n }, WM), o ? {} : {\n margin: i.baseUnit / 2,\n paddingBottom: i.baseUnit / 2,\n paddingTop: i.baseUnit / 2,\n color: l.neutral80\n });\n}, $_ = {\n gridArea: \"1 / 2\",\n font: \"inherit\",\n minWidth: \"2px\",\n border: 0,\n margin: 0,\n outline: 0,\n padding: 0\n}, WM = {\n flex: \"1 1 auto\",\n display: \"inline-grid\",\n gridArea: \"1 / 1 / 2 / 3\",\n gridTemplateColumns: \"0 min-content\",\n \"&:after\": Le({\n content: 'attr(data-value) \" \"',\n visibility: \"hidden\",\n whiteSpace: \"pre\"\n }, $_)\n}, HM = function(e) {\n return Le({\n label: \"input\",\n color: \"inherit\",\n background: 0,\n opacity: e ? 0 : 1,\n width: \"100%\"\n }, $_);\n}, UM = function(e) {\n var o = e.cx, n = e.value, r = a_(e), s = r.innerRef, i = r.isDisabled, l = r.isHidden, a = r.inputClassName, c = cr(r, zM);\n return ke(\"div\", Ne({}, eo(e, \"input\", {\n \"input-container\": !0\n }), {\n \"data-value\": n || \"\"\n }), ke(\"input\", Ne({\n className: o({\n input: !0\n }, a),\n ref: s,\n style: HM(l),\n disabled: i\n }, c)));\n}, XM = UM, B_ = function(e, o) {\n var n = e.theme, r = n.spacing, s = n.borderRadius, i = n.colors;\n return Le({\n label: \"multiValue\",\n display: \"flex\",\n minWidth: 0\n }, o ? {} : {\n backgroundColor: i.neutral10,\n borderRadius: s / 2,\n margin: r.baseUnit / 2\n });\n}, M_ = function(e, o) {\n var n = e.theme, r = n.borderRadius, s = n.colors, i = e.cropWithEllipsis;\n return Le({\n overflow: \"hidden\",\n textOverflow: i || i === void 0 ? \"ellipsis\" : void 0,\n whiteSpace: \"nowrap\"\n }, o ? {} : {\n borderRadius: r / 2,\n color: s.neutral80,\n fontSize: \"85%\",\n padding: 3,\n paddingLeft: 6\n });\n}, O_ = function(e, o) {\n var n = e.theme, r = n.spacing, s = n.borderRadius, i = n.colors, l = e.isFocused;\n return Le({\n alignItems: \"center\",\n display: \"flex\"\n }, o ? {} : {\n borderRadius: s / 2,\n backgroundColor: l ? i.dangerLight : void 0,\n paddingLeft: r.baseUnit,\n paddingRight: r.baseUnit,\n \":hover\": {\n backgroundColor: i.dangerLight,\n color: i.danger\n }\n });\n}, V_ = function(e) {\n var o = e.children, n = e.innerProps;\n return ke(\"div\", n, o);\n}, YM = V_, ZM = V_;\nfunction JM(t) {\n var e = t.children, o = t.innerProps;\n return ke(\"div\", Ne({\n role: \"button\"\n }, o), e || ke(Pv, {\n size: 14\n }));\n}\n_c133 = JM;\nvar qM = function(e) {\n var o = e.children, n = e.components, r = e.data, s = e.innerProps, i = e.isDisabled, l = e.removeProps, a = e.selectProps, c = n.Container, u = n.Label, d = n.Remove;\n return ke(c, {\n data: r,\n innerProps: Le(Le({}, eo(e, \"multiValue\", {\n \"multi-value\": !0,\n \"multi-value--is-disabled\": i\n })), s),\n selectProps: a\n }, ke(u, {\n data: r,\n innerProps: Le({}, eo(e, \"multiValueLabel\", {\n \"multi-value__label\": !0\n })),\n selectProps: a\n }, o), ke(d, {\n data: r,\n innerProps: Le(Le({}, eo(e, \"multiValueRemove\", {\n \"multi-value__remove\": !0\n })), {}, {\n \"aria-label\": \"Remove \".concat(o || \"option\")\n }, l),\n selectProps: a\n }));\n}, QM = qM, G_ = function(e, o) {\n var n = e.isDisabled, r = e.isFocused, s = e.isSelected, i = e.theme, l = i.spacing, a = i.colors;\n return Le({\n label: \"option\",\n cursor: \"default\",\n display: \"block\",\n fontSize: \"inherit\",\n width: \"100%\",\n userSelect: \"none\",\n WebkitTapHighlightColor: \"rgba(0, 0, 0, 0)\"\n }, o ? {} : {\n backgroundColor: s ? a.primary : r ? a.primary25 : \"transparent\",\n color: n ? a.neutral20 : s ? a.neutral0 : \"inherit\",\n padding: \"\".concat(l.baseUnit * 2, \"px \").concat(l.baseUnit * 3, \"px\"),\n \":active\": {\n backgroundColor: n ? void 0 : s ? a.primary : a.primary50\n }\n });\n}, KM = function(e) {\n var o = e.children, n = e.isDisabled, r = e.isFocused, s = e.isSelected, i = e.innerRef, l = e.innerProps;\n return ke(\"div\", Ne({}, eo(e, \"option\", {\n option: !0,\n \"option--is-disabled\": n,\n \"option--is-focused\": r,\n \"option--is-selected\": s\n }), {\n ref: i,\n \"aria-disabled\": n\n }, l), o);\n}, eO = KM, z_ = function(e, o) {\n var n = e.theme, r = n.spacing, s = n.colors;\n return Le({\n label: \"placeholder\",\n gridArea: \"1 / 1 / 2 / 3\"\n }, o ? {} : {\n color: s.neutral50,\n marginLeft: r.baseUnit / 2,\n marginRight: r.baseUnit / 2\n });\n}, tO = function(e) {\n var o = e.children, n = e.innerProps;\n return ke(\"div\", Ne({}, eo(e, \"placeholder\", {\n placeholder: !0\n }), n), o);\n}, oO = tO, W_ = function(e, o) {\n var n = e.isDisabled, r = e.theme, s = r.spacing, i = r.colors;\n return Le({\n label: \"singleValue\",\n gridArea: \"1 / 1 / 2 / 3\",\n maxWidth: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n }, o ? {} : {\n color: n ? i.neutral40 : i.neutral80,\n marginLeft: s.baseUnit / 2,\n marginRight: s.baseUnit / 2\n });\n}, rO = function(e) {\n var o = e.children, n = e.isDisabled, r = e.innerProps;\n return ke(\"div\", Ne({}, eo(e, \"singleValue\", {\n \"single-value\": !0,\n \"single-value--is-disabled\": n\n }), r), o);\n}, nO = rO, To = {\n ClearIndicator: NM,\n Control: BM,\n DropdownIndicator: EM,\n DownChevron: F_,\n CrossIcon: Pv,\n Group: GM,\n GroupHeading: VM,\n IndicatorsContainer: DM,\n IndicatorSeparator: LM,\n Input: XM,\n LoadingIndicator: jM,\n Menu: xM,\n MenuList: wM,\n MenuPortal: _M,\n LoadingMessage: IM,\n NoOptionsMessage: SM,\n MultiValue: QM,\n MultiValueContainer: YM,\n MultiValueLabel: ZM,\n MultiValueRemove: JM,\n Option: eO,\n Placeholder: oO,\n SelectContainer: TM,\n SingleValue: nO,\n ValueContainer: FM\n}, H_ = function(e) {\n return Le(Le({}, To), e.components);\n};\nvar U_ = Number.isNaN || function(e) {\n return typeof e == \"number\" && e !== e;\n};\nfunction sO(t, e) {\n return !!(t === e || U_(t) && U_(e));\n}\nfunction iO(t, e) {\n if (t.length !== e.length) return !1;\n for(var o = 0; o < t.length; o++)if (!sO(t[o], e[o])) return !1;\n return !0;\n}\nfunction X_(t, e) {\n e === void 0 && (e = iO);\n var o = null;\n function n() {\n for(var r = [], s = 0; s < arguments.length; s++)r[s] = arguments[s];\n if (o && o.lastThis === this && e(r, o.lastArgs)) return o.lastResult;\n var i = t.apply(this, r);\n return o = {\n lastResult: i,\n lastArgs: r,\n lastThis: this\n }, i;\n }\n return n.clear = function() {\n o = null;\n }, n;\n}\n_c134 = X_;\nvar lO = {\n name: \"7pg0cj-a11yText\",\n styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap\"\n}, cO = function(e) {\n return ke(\"span\", Ne({\n css: lO\n }, e));\n}, Y_ = cO, uO = {\n guidance: function(e) {\n var o = e.isSearchable, n = e.isMulti, r = e.tabSelectsValue, s = e.context, i = e.isInitialFocus;\n switch(s){\n case \"menu\":\n return \"Use Up and Down to choose options, press Enter to select the currently focused option, press Escape to exit the menu\".concat(r ? \", press Tab to select the option and exit the menu\" : \"\", \".\");\n case \"input\":\n return i ? \"\".concat(e[\"aria-label\"] || \"Select\", \" is focused \").concat(o ? \",type to refine list\" : \"\", \", press Down to open the menu, \").concat(n ? \" press left to focus selected values\" : \"\") : \"\";\n case \"value\":\n return \"Use left and right to toggle between focused values, press Backspace to remove the currently focused value\";\n default:\n return \"\";\n }\n },\n onChange: function(e) {\n var o = e.action, n = e.label, r = n === void 0 ? \"\" : n, s = e.labels, i = e.isDisabled;\n switch(o){\n case \"deselect-option\":\n case \"pop-value\":\n case \"remove-value\":\n return \"option \".concat(r, \", deselected.\");\n case \"clear\":\n return \"All selected options have been cleared.\";\n case \"initial-input-focus\":\n return \"option\".concat(s.length > 1 ? \"s\" : \"\", \" \").concat(s.join(\",\"), \", selected.\");\n case \"select-option\":\n return i ? \"option \".concat(r, \" is disabled. Select another option.\") : \"option \".concat(r, \", selected.\");\n default:\n return \"\";\n }\n },\n onFocus: function(e) {\n var o = e.context, n = e.focused, r = e.options, s = e.label, i = s === void 0 ? \"\" : s, l = e.selectValue, a = e.isDisabled, c = e.isSelected, u = e.isAppleDevice, d = function(h, g) {\n return h && h.length ? \"\".concat(h.indexOf(g) + 1, \" of \").concat(h.length) : \"\";\n };\n if (o === \"value\" && l) return \"value \".concat(i, \" focused, \").concat(d(l, n), \".\");\n if (o === \"menu\" && u) {\n var f = a ? \" disabled\" : \"\", m = \"\".concat(c ? \" selected\" : \"\").concat(f);\n return \"\".concat(i).concat(m, \", \").concat(d(r, n), \".\");\n }\n return \"\";\n },\n onFilter: function(e) {\n var o = e.inputValue, n = e.resultsMessage;\n return \"\".concat(n).concat(o ? \" for search term \" + o : \"\", \".\");\n }\n}, dO = function(e) {\n var o = e.ariaSelection, n = e.focusedOption, r = e.focusedValue, s = e.focusableOptions, i = e.isFocused, l = e.selectValue, a = e.selectProps, c = e.id, u = e.isAppleDevice, d = a.ariaLiveMessages, f = a.getOptionLabel, m = a.inputValue, p = a.isMulti, h = a.isOptionDisabled, g = a.isSearchable, b = a.menuIsOpen, C = a.options, y = a.screenReaderStatus, v = a.tabSelectsValue, x = a.isLoading, I = a[\"aria-label\"], w = a[\"aria-live\"], F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return Le(Le({}, uO), d || {});\n }, [\n d\n ]), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n var k = \"\";\n if (o && F.onChange) {\n var P = o.option, E = o.options, B = o.removedValue, $ = o.removedValues, M = o.value, L = function(Q) {\n return Array.isArray(Q) ? null : Q;\n }, j = B || P || L(M), O = j ? f(j) : \"\", V = E || $ || void 0, W = V ? V.map(f) : [], Z = Le({\n isDisabled: j && h(j, l),\n label: O,\n labels: W\n }, o);\n k = F.onChange(Z);\n }\n return k;\n }, [\n o,\n F,\n h,\n l,\n f\n ]), R = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n var k = \"\", P = n || r, E = !!(n && l && l.includes(n));\n if (P && F.onFocus) {\n var B = {\n focused: P,\n label: f(P),\n isDisabled: h(P, l),\n isSelected: E,\n options: s,\n context: P === n ? \"menu\" : \"value\",\n selectValue: l,\n isAppleDevice: u\n };\n k = F.onFocus(B);\n }\n return k;\n }, [\n n,\n r,\n f,\n h,\n F,\n s,\n l,\n u\n ]), D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n var k = \"\";\n if (b && C.length && !x && F.onFilter) {\n var P = y({\n count: s.length\n });\n k = F.onFilter({\n inputValue: m,\n resultsMessage: P\n });\n }\n return k;\n }, [\n s,\n m,\n b,\n F,\n C,\n y,\n x\n ]), _ = o?.action === \"initial-input-focus\", T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n var k = \"\";\n if (F.guidance) {\n var P = r ? \"value\" : b ? \"menu\" : \"input\";\n k = F.guidance({\n \"aria-label\": I,\n context: P,\n isDisabled: n && h(n, l),\n isMulti: p,\n isSearchable: g,\n tabSelectsValue: v,\n isInitialFocus: _\n });\n }\n return k;\n }, [\n I,\n n,\n r,\n p,\n h,\n g,\n b,\n F,\n l,\n v,\n _\n ]), A = ke(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, ke(\"span\", {\n id: \"aria-selection\"\n }, S), ke(\"span\", {\n id: \"aria-focused\"\n }, R), ke(\"span\", {\n id: \"aria-results\"\n }, D), ke(\"span\", {\n id: \"aria-guidance\"\n }, T));\n return ke(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, ke(Y_, {\n id: c\n }, _ && A), ke(Y_, {\n \"aria-live\": w,\n \"aria-atomic\": \"false\",\n \"aria-relevant\": \"additions text\",\n role: \"log\"\n }, i && !_ && A));\n}, mO = dO, kv = [\n {\n base: \"A\",\n letters: \"A\\u24B6\\uFF21\\xC0\\xC1\\xC2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\xC3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\xC4\\u01DE\\u1EA2\\xC5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\"\n },\n {\n base: \"AA\",\n letters: \"\\uA732\"\n },\n {\n base: \"AE\",\n letters: \"\\xC6\\u01FC\\u01E2\"\n },\n {\n base: \"AO\",\n letters: \"\\uA734\"\n },\n {\n base: \"AU\",\n letters: \"\\uA736\"\n },\n {\n base: \"AV\",\n letters: \"\\uA738\\uA73A\"\n },\n {\n base: \"AY\",\n letters: \"\\uA73C\"\n },\n {\n base: \"B\",\n letters: \"B\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181\"\n },\n {\n base: \"C\",\n letters: \"C\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\xC7\\u1E08\\u0187\\u023B\\uA73E\"\n },\n {\n base: \"D\",\n letters: \"D\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\"\n },\n {\n base: \"DZ\",\n letters: \"\\u01F1\\u01C4\"\n },\n {\n base: \"Dz\",\n letters: \"\\u01F2\\u01C5\"\n },\n {\n base: \"E\",\n letters: \"E\\u24BA\\uFF25\\xC8\\xC9\\xCA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\xCB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\"\n },\n {\n base: \"F\",\n letters: \"F\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\"\n },\n {\n base: \"G\",\n letters: \"G\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\"\n },\n {\n base: \"H\",\n letters: \"H\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\"\n },\n {\n base: \"I\",\n letters: \"I\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\"\n },\n {\n base: \"J\",\n letters: \"J\\u24BF\\uFF2A\\u0134\\u0248\"\n },\n {\n base: \"K\",\n letters: \"K\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\"\n },\n {\n base: \"L\",\n letters: \"L\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\"\n },\n {\n base: \"LJ\",\n letters: \"\\u01C7\"\n },\n {\n base: \"Lj\",\n letters: \"\\u01C8\"\n },\n {\n base: \"M\",\n letters: \"M\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\"\n },\n {\n base: \"N\",\n letters: \"N\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4\"\n },\n {\n base: \"NJ\",\n letters: \"\\u01CA\"\n },\n {\n base: \"Nj\",\n letters: \"\\u01CB\"\n },\n {\n base: \"O\",\n letters: \"O\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\"\n },\n {\n base: \"OI\",\n letters: \"\\u01A2\"\n },\n {\n base: \"OO\",\n letters: \"\\uA74E\"\n },\n {\n base: \"OU\",\n letters: \"\\u0222\"\n },\n {\n base: \"P\",\n letters: \"P\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\"\n },\n {\n base: \"Q\",\n letters: \"Q\\u24C6\\uFF31\\uA756\\uA758\\u024A\"\n },\n {\n base: \"R\",\n letters: \"R\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\"\n },\n {\n base: \"S\",\n letters: \"S\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\"\n },\n {\n base: \"T\",\n letters: \"T\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\"\n },\n {\n base: \"TZ\",\n letters: \"\\uA728\"\n },\n {\n base: \"U\",\n letters: \"U\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\"\n },\n {\n base: \"V\",\n letters: \"V\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\"\n },\n {\n base: \"VY\",\n letters: \"\\uA760\"\n },\n {\n base: \"W\",\n letters: \"W\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\"\n },\n {\n base: \"X\",\n letters: \"X\\u24CD\\uFF38\\u1E8A\\u1E8C\"\n },\n {\n base: \"Y\",\n letters: \"Y\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\"\n },\n {\n base: \"Z\",\n letters: \"Z\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\"\n },\n {\n base: \"a\",\n letters: \"a\\u24D0\\uFF41\\u1E9A\\xE0\\xE1\\xE2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\xE3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\xE4\\u01DF\\u1EA3\\xE5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\"\n },\n {\n base: \"aa\",\n letters: \"\\uA733\"\n },\n {\n base: \"ae\",\n letters: \"\\xE6\\u01FD\\u01E3\"\n },\n {\n base: \"ao\",\n letters: \"\\uA735\"\n },\n {\n base: \"au\",\n letters: \"\\uA737\"\n },\n {\n base: \"av\",\n letters: \"\\uA739\\uA73B\"\n },\n {\n base: \"ay\",\n letters: \"\\uA73D\"\n },\n {\n base: \"b\",\n letters: \"b\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\"\n },\n {\n base: \"c\",\n letters: \"c\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\xE7\\u1E09\\u0188\\u023C\\uA73F\\u2184\"\n },\n {\n base: \"d\",\n letters: \"d\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A\"\n },\n {\n base: \"dz\",\n letters: \"\\u01F3\\u01C6\"\n },\n {\n base: \"e\",\n letters: \"e\\u24D4\\uFF45\\xE8\\xE9\\xEA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\xEB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD\"\n },\n {\n base: \"f\",\n letters: \"f\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C\"\n },\n {\n base: \"g\",\n letters: \"g\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F\"\n },\n {\n base: \"h\",\n letters: \"h\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\"\n },\n {\n base: \"hv\",\n letters: \"\\u0195\"\n },\n {\n base: \"i\",\n letters: \"i\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\"\n },\n {\n base: \"j\",\n letters: \"j\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\"\n },\n {\n base: \"k\",\n letters: \"k\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\"\n },\n {\n base: \"l\",\n letters: \"l\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\"\n },\n {\n base: \"lj\",\n letters: \"\\u01C9\"\n },\n {\n base: \"m\",\n letters: \"m\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\"\n },\n {\n base: \"n\",\n letters: \"n\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\"\n },\n {\n base: \"nj\",\n letters: \"\\u01CC\"\n },\n {\n base: \"o\",\n letters: \"o\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\u0254\\uA74B\\uA74D\\u0275\"\n },\n {\n base: \"oi\",\n letters: \"\\u01A3\"\n },\n {\n base: \"ou\",\n letters: \"\\u0223\"\n },\n {\n base: \"oo\",\n letters: \"\\uA74F\"\n },\n {\n base: \"p\",\n letters: \"p\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\"\n },\n {\n base: \"q\",\n letters: \"q\\u24E0\\uFF51\\u024B\\uA757\\uA759\"\n },\n {\n base: \"r\",\n letters: \"r\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\"\n },\n {\n base: \"s\",\n letters: \"s\\u24E2\\uFF53\\xDF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\"\n },\n {\n base: \"t\",\n letters: \"t\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\"\n },\n {\n base: \"tz\",\n letters: \"\\uA729\"\n },\n {\n base: \"u\",\n letters: \"u\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\"\n },\n {\n base: \"v\",\n letters: \"v\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\"\n },\n {\n base: \"vy\",\n letters: \"\\uA761\"\n },\n {\n base: \"w\",\n letters: \"w\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\"\n },\n {\n base: \"x\",\n letters: \"x\\u24E7\\uFF58\\u1E8B\\u1E8D\"\n },\n {\n base: \"y\",\n letters: \"y\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\"\n },\n {\n base: \"z\",\n letters: \"z\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\"\n }\n], fO = new RegExp(\"[\" + kv.map(function(t) {\n return t.letters;\n}).join(\"\") + \"]\", \"g\"), aT = {};\nfor(jp = 0; jp < kv.length; jp++)for($p = kv[jp], Bp = 0; Bp < $p.letters.length; Bp++)aT[$p.letters[Bp]] = $p.base;\nvar $p, Bp, jp, lT = function(e) {\n return e.replace(fO, function(o) {\n return aT[o];\n });\n}, pO = X_(lT), Z_ = function(e) {\n return e.replace(/^\\s+|\\s+$/g, \"\");\n}, hO = function(e) {\n return \"\".concat(e.label, \" \").concat(e.value);\n}, gO = function(e) {\n return function(o, n) {\n if (o.data.__isNew__) return !0;\n var r = Le({\n ignoreCase: !0,\n ignoreAccents: !0,\n stringify: hO,\n trim: !0,\n matchFrom: \"any\"\n }, e), s = r.ignoreCase, i = r.ignoreAccents, l = r.stringify, a = r.trim, c = r.matchFrom, u = a ? Z_(n) : n, d = a ? Z_(l(o)) : l(o);\n return s && (u = u.toLowerCase(), d = d.toLowerCase()), i && (u = pO(u), d = lT(d)), c === \"start\" ? d.substr(0, u.length) === u : d.indexOf(u) > -1;\n };\n}, bO = [\n \"innerRef\"\n];\nfunction vO(t) {\n var e = t.innerRef, o = cr(t, bO), n = f_(o, \"onExited\", \"in\", \"enter\", \"exit\", \"appear\");\n return ke(\"input\", Ne({\n ref: e\n }, n, {\n css: Du({\n label: \"dummyInput\",\n background: 0,\n border: 0,\n caretColor: \"transparent\",\n fontSize: \"inherit\",\n gridArea: \"1 / 1 / 2 / 3\",\n outline: 0,\n padding: 0,\n width: 1,\n color: \"transparent\",\n left: -100,\n opacity: 0,\n position: \"relative\",\n transform: \"scale(.01)\"\n }, \"\", \"\")\n }));\n}\nvar yO = function(e) {\n e.cancelable && e.preventDefault(), e.stopPropagation();\n};\nfunction CO(t) {\n var e = t.isEnabled, o = t.onBottomArrive, n = t.onBottomLeave, r = t.onTopArrive, s = t.onTopLeave, i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(g, b) {\n if (c.current !== null) {\n var C = c.current, y = C.scrollTop, v = C.scrollHeight, x = C.clientHeight, I = c.current, w = b > 0, F = v - x - y, S = !1;\n F > b && i.current && (n && n(g), i.current = !1), w && l.current && (s && s(g), l.current = !1), w && b > F ? (o && !i.current && o(g), I.scrollTop = v, S = !0, i.current = !0) : !w && -b > y && (r && !l.current && r(g), I.scrollTop = 0, S = !0, l.current = !0), S && yO(g);\n }\n }, [\n o,\n n,\n r,\n s\n ]), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(g) {\n u(g, g.deltaY);\n }, [\n u\n ]), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(g) {\n a.current = g.changedTouches[0].clientY;\n }, []), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(g) {\n var b = a.current - g.changedTouches[0].clientY;\n u(g, b);\n }, [\n u\n ]), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(g) {\n if (g) {\n var b = d_ ? {\n passive: !1\n } : !1;\n g.addEventListener(\"wheel\", d, b), g.addEventListener(\"touchstart\", f, b), g.addEventListener(\"touchmove\", m, b);\n }\n }, [\n m,\n f,\n d\n ]), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(g) {\n g && (g.removeEventListener(\"wheel\", d, !1), g.removeEventListener(\"touchstart\", f, !1), g.removeEventListener(\"touchmove\", m, !1));\n }, [\n m,\n f,\n d\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (e) {\n var g = c.current;\n return p(g), function() {\n h(g);\n };\n }\n }, [\n e,\n p,\n h\n ]), function(g) {\n c.current = g;\n };\n}\n_c135 = CO;\nvar J_ = [\n \"boxSizing\",\n \"height\",\n \"overflow\",\n \"paddingRight\",\n \"position\"\n], q_ = {\n boxSizing: \"border-box\",\n overflow: \"hidden\",\n position: \"relative\",\n height: \"100%\"\n};\nfunction Q_(t) {\n t.cancelable && t.preventDefault();\n}\n_c136 = Q_;\nfunction K_(t) {\n t.stopPropagation();\n}\n_c137 = K_;\nfunction eT() {\n var t = this.scrollTop, e = this.scrollHeight, o = t + this.offsetHeight;\n t === 0 ? this.scrollTop = 1 : o === e && (this.scrollTop = t - 1);\n}\nfunction tT() {\n return \"ontouchstart\" in window || navigator.maxTouchPoints;\n}\nvar oT = !!(typeof window < \"u\" && window.document && window.document.createElement), Eu = 0, Nl = {\n capture: !1,\n passive: !1\n};\nfunction xO(t) {\n var e = t.isEnabled, o = t.accountForScrollbars, n = o === void 0 ? !0 : o, r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(a) {\n if (oT) {\n var c = document.body, u = c && c.style;\n if (n && J_.forEach(function(p) {\n var h = u && u[p];\n r.current[p] = h;\n }), n && Eu < 1) {\n var d = parseInt(r.current.paddingRight, 10) || 0, f = document.body ? document.body.clientWidth : 0, m = window.innerWidth - f + d || 0;\n Object.keys(q_).forEach(function(p) {\n var h = q_[p];\n u && (u[p] = h);\n }), u && (u.paddingRight = \"\".concat(m, \"px\"));\n }\n c && tT() && (c.addEventListener(\"touchmove\", Q_, Nl), a && (a.addEventListener(\"touchstart\", eT, Nl), a.addEventListener(\"touchmove\", K_, Nl))), Eu += 1;\n }\n }, [\n n\n ]), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(a) {\n if (oT) {\n var c = document.body, u = c && c.style;\n Eu = Math.max(Eu - 1, 0), n && Eu < 1 && J_.forEach(function(d) {\n var f = r.current[d];\n u && (u[d] = f);\n }), c && tT() && (c.removeEventListener(\"touchmove\", Q_, Nl), a && (a.removeEventListener(\"touchstart\", eT, Nl), a.removeEventListener(\"touchmove\", K_, Nl)));\n }\n }, [\n n\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (e) {\n var a = s.current;\n return i(a), function() {\n l(a);\n };\n }\n }, [\n e,\n i,\n l\n ]), function(a) {\n s.current = a;\n };\n}\nvar wO = function(e) {\n var o = e.target;\n return o.ownerDocument.activeElement && o.ownerDocument.activeElement.blur();\n}, SO = {\n name: \"1kfdb0e\",\n styles: \"position:fixed;left:0;bottom:0;right:0;top:0\"\n};\nfunction IO(t) {\n var e = t.children, o = t.lockEnabled, n = t.captureEnabled, r = n === void 0 ? !0 : n, s = t.onBottomArrive, i = t.onBottomLeave, l = t.onTopArrive, a = t.onTopLeave, c = CO({\n isEnabled: r,\n onBottomArrive: s,\n onBottomLeave: i,\n onTopArrive: l,\n onTopLeave: a\n }), u = xO({\n isEnabled: o\n }), d = function(m) {\n c(m), u(m);\n };\n return ke(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, o && ke(\"div\", {\n onClick: wO,\n css: SO\n }), e(d));\n}\n_c138 = IO;\nvar _O = {\n name: \"1a0ro4n-requiredInput\",\n styles: \"label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%\"\n}, TO = function(e) {\n var o = e.name, n = e.onFocus;\n return ke(\"input\", {\n required: !0,\n name: o,\n tabIndex: -1,\n \"aria-hidden\": \"true\",\n onFocus: n,\n css: _O,\n value: \"\",\n onChange: function() {}\n });\n}, FO = TO;\nfunction jv(t) {\n var e;\n return typeof window < \"u\" && window.navigator != null ? t.test(((e = window.navigator.userAgentData) === null || e === void 0 ? void 0 : e.platform) || window.navigator.platform) : !1;\n}\nfunction DO() {\n return jv(/^iPhone/i);\n}\n_c139 = DO;\nfunction cT() {\n return jv(/^Mac/i);\n}\nfunction RO() {\n return jv(/^iPad/i) || cT() && navigator.maxTouchPoints > 1;\n}\n_c140 = RO;\nfunction AO() {\n return DO() || RO();\n}\n_c141 = AO;\nfunction PO() {\n return cT() || AO();\n}\n_c142 = PO;\nvar EO = function(e) {\n return e.label;\n}, $v = function(e) {\n return e.label;\n}, Bv = function(e) {\n return e.value;\n}, NO = function(e) {\n return !!e.isDisabled;\n}, LO = {\n clearIndicator: A_,\n container: S_,\n control: N_,\n dropdownIndicator: R_,\n group: L_,\n groupHeading: k_,\n indicatorsContainer: __,\n indicatorSeparator: P_,\n input: j_,\n loadingIndicator: E_,\n loadingMessage: x_,\n menu: h_,\n menuList: v_,\n menuPortal: w_,\n multiValue: B_,\n multiValueLabel: M_,\n multiValueRemove: O_,\n noOptionsMessage: C_,\n option: G_,\n placeholder: z_,\n singleValue: W_,\n valueContainer: I_\n};\nvar kO = {\n primary: \"#2684FF\",\n primary75: \"#4C9AFF\",\n primary50: \"#B2D4FF\",\n primary25: \"#DEEBFF\",\n danger: \"#DE350B\",\n dangerLight: \"#FFBDAD\",\n neutral0: \"hsl(0, 0%, 100%)\",\n neutral5: \"hsl(0, 0%, 95%)\",\n neutral10: \"hsl(0, 0%, 90%)\",\n neutral20: \"hsl(0, 0%, 80%)\",\n neutral30: \"hsl(0, 0%, 70%)\",\n neutral40: \"hsl(0, 0%, 60%)\",\n neutral50: \"hsl(0, 0%, 50%)\",\n neutral60: \"hsl(0, 0%, 40%)\",\n neutral70: \"hsl(0, 0%, 30%)\",\n neutral80: \"hsl(0, 0%, 20%)\",\n neutral90: \"hsl(0, 0%, 10%)\"\n}, jO = 4, uT = 4, $O = 38, BO = uT * 2, MO = {\n baseUnit: uT,\n controlHeight: $O,\n menuGutter: BO\n}, Ev = {\n borderRadius: jO,\n colors: kO,\n spacing: MO\n}, OO = {\n \"aria-live\": \"polite\",\n backspaceRemovesValue: !0,\n blurInputOnSelect: Av(),\n captureMenuScroll: !Av(),\n classNames: {},\n closeMenuOnSelect: !0,\n closeMenuOnScroll: !1,\n components: {},\n controlShouldRenderValue: !0,\n escapeClearsValue: !1,\n filterOption: gO(),\n formatGroupLabel: EO,\n getOptionLabel: $v,\n getOptionValue: Bv,\n isDisabled: !1,\n isLoading: !1,\n isMulti: !1,\n isRtl: !1,\n isSearchable: !0,\n isOptionDisabled: NO,\n loadingMessage: function() {\n return \"Loading...\";\n },\n maxMenuHeight: 300,\n minMenuHeight: 140,\n menuIsOpen: !1,\n menuPlacement: \"bottom\",\n menuPosition: \"absolute\",\n menuShouldBlockScroll: !1,\n menuShouldScrollIntoView: !c_(),\n noOptionsMessage: function() {\n return \"No options\";\n },\n openMenuOnFocus: !1,\n openMenuOnClick: !0,\n options: [],\n pageSize: 5,\n placeholder: \"Select...\",\n screenReaderStatus: function(e) {\n var o = e.count;\n return \"\".concat(o, \" result\").concat(o !== 1 ? \"s\" : \"\", \" available\");\n },\n styles: {},\n tabIndex: 0,\n tabSelectsValue: !0,\n unstyled: !1\n};\nfunction rT(t, e, o, n) {\n var r = fT(t, e, o), s = pT(t, e, o), i = mT(t, e), l = Op(t, e);\n return {\n type: \"option\",\n data: e,\n isDisabled: r,\n isSelected: s,\n label: i,\n value: l,\n index: n\n };\n}\nfunction Mp(t, e) {\n return t.options.map(function(o, n) {\n if (\"options\" in o) {\n var r = o.options.map(function(i, l) {\n return rT(t, i, e, l);\n }).filter(function(i) {\n return sT(t, i);\n });\n return r.length > 0 ? {\n type: \"group\",\n data: o,\n options: r,\n index: n\n } : void 0;\n }\n var s = rT(t, o, e, n);\n return sT(t, s) ? s : void 0;\n }).filter(m_);\n}\n_c143 = Mp;\nfunction dT(t) {\n return t.reduce(function(e, o) {\n return o.type === \"group\" ? e.push.apply(e, ti(o.options.map(function(n) {\n return n.data;\n }))) : e.push(o.data), e;\n }, []);\n}\nfunction nT(t, e) {\n return t.reduce(function(o, n) {\n return n.type === \"group\" ? o.push.apply(o, ti(n.options.map(function(r) {\n return {\n data: r.data,\n id: \"\".concat(e, \"-\").concat(n.index, \"-\").concat(r.index)\n };\n }))) : o.push({\n data: n.data,\n id: \"\".concat(e, \"-\").concat(n.index)\n }), o;\n }, []);\n}\nfunction VO(t, e) {\n return dT(Mp(t, e));\n}\n_c144 = VO;\nfunction sT(t, e) {\n var o = t.inputValue, n = o === void 0 ? \"\" : o, r = e.data, s = e.isSelected, i = e.label, l = e.value;\n return (!gT(t) || !s) && hT(t, {\n label: i,\n value: l,\n data: r\n }, n);\n}\nfunction GO(t, e) {\n var o = t.focusedValue, n = t.selectValue, r = n.indexOf(o);\n if (r > -1) {\n var s = e.indexOf(o);\n if (s > -1) return o;\n if (r < e.length) return e[r];\n }\n return null;\n}\n_c145 = GO;\nfunction zO(t, e) {\n var o = t.focusedOption;\n return o && e.indexOf(o) > -1 ? o : e[0];\n}\nvar Nv = function(e, o) {\n var n, r = (n = e.find(function(s) {\n return s.data === o;\n })) === null || n === void 0 ? void 0 : n.id;\n return r || null;\n}, mT = function(e, o) {\n return e.getOptionLabel(o);\n}, Op = function(e, o) {\n return e.getOptionValue(o);\n};\nfunction fT(t, e, o) {\n return typeof t.isOptionDisabled == \"function\" ? t.isOptionDisabled(e, o) : !1;\n}\nfunction pT(t, e, o) {\n if (o.indexOf(e) > -1) return !0;\n if (typeof t.isOptionSelected == \"function\") return t.isOptionSelected(e, o);\n var n = Op(t, e);\n return o.some(function(r) {\n return Op(t, r) === n;\n });\n}\nfunction hT(t, e, o) {\n return t.filterOption ? t.filterOption(e, o) : !0;\n}\nvar gT = function(e) {\n var o = e.hideSelectedOptions, n = e.isMulti;\n return o === void 0 ? n : o;\n}, WO = 1, Nu = function(t) {\n iI(o, t);\n var e = lI(o);\n function o(n) {\n var r;\n if (rI(this, o), r = e.call(this, n), r.state = {\n ariaSelection: null,\n focusedOption: null,\n focusedOptionId: null,\n focusableOptionsWithIds: [],\n focusedValue: null,\n inputIsHidden: !1,\n isFocused: !1,\n selectValue: [],\n clearFocusValueOnUpdate: !1,\n prevWasFocused: !1,\n inputIsHiddenAfterUpdate: void 0,\n prevProps: void 0,\n instancePrefix: \"\"\n }, r.blockOptionHover = !1, r.isComposing = !1, r.commonProps = void 0, r.initialTouchX = 0, r.initialTouchY = 0, r.openAfterFocus = !1, r.scrollToFocusedOptionOnUpdate = !1, r.userIsDragging = void 0, r.isAppleDevice = PO(), r.controlRef = null, r.getControlRef = function(a) {\n r.controlRef = a;\n }, r.focusedOptionRef = null, r.getFocusedOptionRef = function(a) {\n r.focusedOptionRef = a;\n }, r.menuListRef = null, r.getMenuListRef = function(a) {\n r.menuListRef = a;\n }, r.inputRef = null, r.getInputRef = function(a) {\n r.inputRef = a;\n }, r.focus = r.focusInput, r.blur = r.blurInput, r.onChange = function(a, c) {\n var u = r.props, d = u.onChange, f = u.name;\n c.name = f, r.ariaOnChange(a, c), d(a, c);\n }, r.setValue = function(a, c, u) {\n var d = r.props, f = d.closeMenuOnSelect, m = d.isMulti, p = d.inputValue;\n r.onInputChange(\"\", {\n action: \"set-value\",\n prevInputValue: p\n }), f && (r.setState({\n inputIsHiddenAfterUpdate: !m\n }), r.onMenuClose()), r.setState({\n clearFocusValueOnUpdate: !0\n }), r.onChange(a, {\n action: c,\n option: u\n });\n }, r.selectOption = function(a) {\n var c = r.props, u = c.blurInputOnSelect, d = c.isMulti, f = c.name, m = r.state.selectValue, p = d && r.isOptionSelected(a, m), h = r.isOptionDisabled(a, m);\n if (p) {\n var g = r.getOptionValue(a);\n r.setValue(m.filter(function(b) {\n return r.getOptionValue(b) !== g;\n }), \"deselect-option\", a);\n } else if (!h) d ? r.setValue([].concat(ti(m), [\n a\n ]), \"select-option\", a) : r.setValue(a, \"select-option\");\n else {\n r.ariaOnChange(a, {\n action: \"select-option\",\n option: a,\n name: f\n });\n return;\n }\n u && r.blurInput();\n }, r.removeValue = function(a) {\n var c = r.props.isMulti, u = r.state.selectValue, d = r.getOptionValue(a), f = u.filter(function(p) {\n return r.getOptionValue(p) !== d;\n }), m = ra(c, f, f[0] || null);\n r.onChange(m, {\n action: \"remove-value\",\n removedValue: a\n }), r.focusInput();\n }, r.clearValue = function() {\n var a = r.state.selectValue;\n r.onChange(ra(r.props.isMulti, [], null), {\n action: \"clear\",\n removedValues: a\n });\n }, r.popValue = function() {\n var a = r.props.isMulti, c = r.state.selectValue, u = c[c.length - 1], d = c.slice(0, c.length - 1), f = ra(a, d, d[0] || null);\n u && r.onChange(f, {\n action: \"pop-value\",\n removedValue: u\n });\n }, r.getFocusedOptionId = function(a) {\n return Nv(r.state.focusableOptionsWithIds, a);\n }, r.getFocusableOptionsWithIds = function() {\n return nT(Mp(r.props, r.state.selectValue), r.getElementId(\"option\"));\n }, r.getValue = function() {\n return r.state.selectValue;\n }, r.cx = function() {\n for(var a = arguments.length, c = new Array(a), u = 0; u < a; u++)c[u] = arguments[u];\n return i_.apply(void 0, [\n r.props.classNamePrefix\n ].concat(c));\n }, r.getOptionLabel = function(a) {\n return mT(r.props, a);\n }, r.getOptionValue = function(a) {\n return Op(r.props, a);\n }, r.getStyles = function(a, c) {\n var u = r.props.unstyled, d = LO[a](c, u);\n d.boxSizing = \"border-box\";\n var f = r.props.styles[a];\n return f ? f(d, c) : d;\n }, r.getClassNames = function(a, c) {\n var u, d;\n return (u = (d = r.props.classNames)[a]) === null || u === void 0 ? void 0 : u.call(d, c);\n }, r.getElementId = function(a) {\n return \"\".concat(r.state.instancePrefix, \"-\").concat(a);\n }, r.getComponents = function() {\n return H_(r.props);\n }, r.buildCategorizedOptions = function() {\n return Mp(r.props, r.state.selectValue);\n }, r.getCategorizedOptions = function() {\n return r.props.menuIsOpen ? r.buildCategorizedOptions() : [];\n }, r.buildFocusableOptions = function() {\n return dT(r.buildCategorizedOptions());\n }, r.getFocusableOptions = function() {\n return r.props.menuIsOpen ? r.buildFocusableOptions() : [];\n }, r.ariaOnChange = function(a, c) {\n r.setState({\n ariaSelection: Le({\n value: a\n }, c)\n });\n }, r.onMenuMouseDown = function(a) {\n a.button === 0 && (a.stopPropagation(), a.preventDefault(), r.focusInput());\n }, r.onMenuMouseMove = function(a) {\n r.blockOptionHover = !1;\n }, r.onControlMouseDown = function(a) {\n if (!a.defaultPrevented) {\n var c = r.props.openMenuOnClick;\n r.state.isFocused ? r.props.menuIsOpen ? a.target.tagName !== \"INPUT\" && a.target.tagName !== \"TEXTAREA\" && r.onMenuClose() : c && r.openMenu(\"first\") : (c && (r.openAfterFocus = !0), r.focusInput()), a.target.tagName !== \"INPUT\" && a.target.tagName !== \"TEXTAREA\" && a.preventDefault();\n }\n }, r.onDropdownIndicatorMouseDown = function(a) {\n if (!(a && a.type === \"mousedown\" && a.button !== 0) && !r.props.isDisabled) {\n var c = r.props, u = c.isMulti, d = c.menuIsOpen;\n r.focusInput(), d ? (r.setState({\n inputIsHiddenAfterUpdate: !u\n }), r.onMenuClose()) : r.openMenu(\"first\"), a.preventDefault();\n }\n }, r.onClearIndicatorMouseDown = function(a) {\n a && a.type === \"mousedown\" && a.button !== 0 || (r.clearValue(), a.preventDefault(), r.openAfterFocus = !1, a.type === \"touchend\" ? r.focusInput() : setTimeout(function() {\n return r.focusInput();\n }));\n }, r.onScroll = function(a) {\n typeof r.props.closeMenuOnScroll == \"boolean\" ? a.target instanceof HTMLElement && Au(a.target) && r.props.onMenuClose() : typeof r.props.closeMenuOnScroll == \"function\" && r.props.closeMenuOnScroll(a) && r.props.onMenuClose();\n }, r.onCompositionStart = function() {\n r.isComposing = !0;\n }, r.onCompositionEnd = function() {\n r.isComposing = !1;\n }, r.onTouchStart = function(a) {\n var c = a.touches, u = c && c.item(0);\n u && (r.initialTouchX = u.clientX, r.initialTouchY = u.clientY, r.userIsDragging = !1);\n }, r.onTouchMove = function(a) {\n var c = a.touches, u = c && c.item(0);\n if (u) {\n var d = Math.abs(u.clientX - r.initialTouchX), f = Math.abs(u.clientY - r.initialTouchY), m = 5;\n r.userIsDragging = d > m || f > m;\n }\n }, r.onTouchEnd = function(a) {\n r.userIsDragging || (r.controlRef && !r.controlRef.contains(a.target) && r.menuListRef && !r.menuListRef.contains(a.target) && r.blurInput(), r.initialTouchX = 0, r.initialTouchY = 0);\n }, r.onControlTouchEnd = function(a) {\n r.userIsDragging || r.onControlMouseDown(a);\n }, r.onClearIndicatorTouchEnd = function(a) {\n r.userIsDragging || r.onClearIndicatorMouseDown(a);\n }, r.onDropdownIndicatorTouchEnd = function(a) {\n r.userIsDragging || r.onDropdownIndicatorMouseDown(a);\n }, r.handleInputChange = function(a) {\n var c = r.props.inputValue, u = a.currentTarget.value;\n r.setState({\n inputIsHiddenAfterUpdate: !1\n }), r.onInputChange(u, {\n action: \"input-change\",\n prevInputValue: c\n }), r.props.menuIsOpen || r.onMenuOpen();\n }, r.onInputFocus = function(a) {\n r.props.onFocus && r.props.onFocus(a), r.setState({\n inputIsHiddenAfterUpdate: !1,\n isFocused: !0\n }), (r.openAfterFocus || r.props.openMenuOnFocus) && r.openMenu(\"first\"), r.openAfterFocus = !1;\n }, r.onInputBlur = function(a) {\n var c = r.props.inputValue;\n if (r.menuListRef && r.menuListRef.contains(document.activeElement)) {\n r.inputRef.focus();\n return;\n }\n r.props.onBlur && r.props.onBlur(a), r.onInputChange(\"\", {\n action: \"input-blur\",\n prevInputValue: c\n }), r.onMenuClose(), r.setState({\n focusedValue: null,\n isFocused: !1\n });\n }, r.onOptionHover = function(a) {\n if (!(r.blockOptionHover || r.state.focusedOption === a)) {\n var c = r.getFocusableOptions(), u = c.indexOf(a);\n r.setState({\n focusedOption: a,\n focusedOptionId: u > -1 ? r.getFocusedOptionId(a) : null\n });\n }\n }, r.shouldHideSelectedOptions = function() {\n return gT(r.props);\n }, r.onValueInputFocus = function(a) {\n a.preventDefault(), a.stopPropagation(), r.focus();\n }, r.onKeyDown = function(a) {\n var c = r.props, u = c.isMulti, d = c.backspaceRemovesValue, f = c.escapeClearsValue, m = c.inputValue, p = c.isClearable, h = c.isDisabled, g = c.menuIsOpen, b = c.onKeyDown, C = c.tabSelectsValue, y = c.openMenuOnFocus, v = r.state, x = v.focusedOption, I = v.focusedValue, w = v.selectValue;\n if (!h && !(typeof b == \"function\" && (b(a), a.defaultPrevented))) {\n switch(r.blockOptionHover = !0, a.key){\n case \"ArrowLeft\":\n if (!u || m) return;\n r.focusValue(\"previous\");\n break;\n case \"ArrowRight\":\n if (!u || m) return;\n r.focusValue(\"next\");\n break;\n case \"Delete\":\n case \"Backspace\":\n if (m) return;\n if (I) r.removeValue(I);\n else {\n if (!d) return;\n u ? r.popValue() : p && r.clearValue();\n }\n break;\n case \"Tab\":\n if (r.isComposing || a.shiftKey || !g || !C || !x || y && r.isOptionSelected(x, w)) return;\n r.selectOption(x);\n break;\n case \"Enter\":\n if (a.keyCode === 229) break;\n if (g) {\n if (!x || r.isComposing) return;\n r.selectOption(x);\n break;\n }\n return;\n case \"Escape\":\n g ? (r.setState({\n inputIsHiddenAfterUpdate: !1\n }), r.onInputChange(\"\", {\n action: \"menu-close\",\n prevInputValue: m\n }), r.onMenuClose()) : p && f && r.clearValue();\n break;\n case \" \":\n if (m) return;\n if (!g) {\n r.openMenu(\"first\");\n break;\n }\n if (!x) return;\n r.selectOption(x);\n break;\n case \"ArrowUp\":\n g ? r.focusOption(\"up\") : r.openMenu(\"last\");\n break;\n case \"ArrowDown\":\n g ? r.focusOption(\"down\") : r.openMenu(\"first\");\n break;\n case \"PageUp\":\n if (!g) return;\n r.focusOption(\"pageup\");\n break;\n case \"PageDown\":\n if (!g) return;\n r.focusOption(\"pagedown\");\n break;\n case \"Home\":\n if (!g) return;\n r.focusOption(\"first\");\n break;\n case \"End\":\n if (!g) return;\n r.focusOption(\"last\");\n break;\n default:\n return;\n }\n a.preventDefault();\n }\n }, r.state.instancePrefix = \"react-select-\" + (r.props.instanceId || ++WO), r.state.selectValue = El(n.value), n.menuIsOpen && r.state.selectValue.length) {\n var s = r.getFocusableOptionsWithIds(), i = r.buildFocusableOptions(), l = i.indexOf(r.state.selectValue[0]);\n r.state.focusableOptionsWithIds = s, r.state.focusedOption = i[l], r.state.focusedOptionId = Nv(s, i[l]);\n }\n return r;\n }\n return sI(o, [\n {\n key: \"componentDidMount\",\n value: function() {\n this.startListeningComposition(), this.startListeningToTouch(), this.props.closeMenuOnScroll && document && document.addEventListener && document.addEventListener(\"scroll\", this.onScroll, !0), this.props.autoFocus && this.focusInput(), this.props.menuIsOpen && this.state.focusedOption && this.menuListRef && this.focusedOptionRef && Rv(this.menuListRef, this.focusedOptionRef);\n }\n },\n {\n key: \"componentDidUpdate\",\n value: function(r) {\n var s = this.props, i = s.isDisabled, l = s.menuIsOpen, a = this.state.isFocused;\n (a && !i && r.isDisabled || a && l && !r.menuIsOpen) && this.focusInput(), a && i && !r.isDisabled ? this.setState({\n isFocused: !1\n }, this.onMenuClose) : !a && !i && r.isDisabled && this.inputRef === document.activeElement && this.setState({\n isFocused: !0\n }), this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate && (Rv(this.menuListRef, this.focusedOptionRef), this.scrollToFocusedOptionOnUpdate = !1);\n }\n },\n {\n key: \"componentWillUnmount\",\n value: function() {\n this.stopListeningComposition(), this.stopListeningToTouch(), document.removeEventListener(\"scroll\", this.onScroll, !0);\n }\n },\n {\n key: \"onMenuOpen\",\n value: function() {\n this.props.onMenuOpen();\n }\n },\n {\n key: \"onMenuClose\",\n value: function() {\n this.onInputChange(\"\", {\n action: \"menu-close\",\n prevInputValue: this.props.inputValue\n }), this.props.onMenuClose();\n }\n },\n {\n key: \"onInputChange\",\n value: function(r, s) {\n this.props.onInputChange(r, s);\n }\n },\n {\n key: \"focusInput\",\n value: function() {\n this.inputRef && this.inputRef.focus();\n }\n },\n {\n key: \"blurInput\",\n value: function() {\n this.inputRef && this.inputRef.blur();\n }\n },\n {\n key: \"openMenu\",\n value: function(r) {\n var s = this, i = this.state, l = i.selectValue, a = i.isFocused, c = this.buildFocusableOptions(), u = r === \"first\" ? 0 : c.length - 1;\n if (!this.props.isMulti) {\n var d = c.indexOf(l[0]);\n d > -1 && (u = d);\n }\n this.scrollToFocusedOptionOnUpdate = !(a && this.menuListRef), this.setState({\n inputIsHiddenAfterUpdate: !1,\n focusedValue: null,\n focusedOption: c[u],\n focusedOptionId: this.getFocusedOptionId(c[u])\n }, function() {\n return s.onMenuOpen();\n });\n }\n },\n {\n key: \"focusValue\",\n value: function(r) {\n var s = this.state, i = s.selectValue, l = s.focusedValue;\n if (this.props.isMulti) {\n this.setState({\n focusedOption: null\n });\n var a = i.indexOf(l);\n l || (a = -1);\n var c = i.length - 1, u = -1;\n if (i.length) {\n switch(r){\n case \"previous\":\n a === 0 ? u = 0 : a === -1 ? u = c : u = a - 1;\n break;\n case \"next\":\n a > -1 && a < c && (u = a + 1);\n break;\n }\n this.setState({\n inputIsHidden: u !== -1,\n focusedValue: i[u]\n });\n }\n }\n }\n },\n {\n key: \"focusOption\",\n value: function() {\n var r = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : \"first\", s = this.props.pageSize, i = this.state.focusedOption, l = this.getFocusableOptions();\n if (l.length) {\n var a = 0, c = l.indexOf(i);\n i || (c = -1), r === \"up\" ? a = c > 0 ? c - 1 : l.length - 1 : r === \"down\" ? a = (c + 1) % l.length : r === \"pageup\" ? (a = c - s, a < 0 && (a = 0)) : r === \"pagedown\" ? (a = c + s, a > l.length - 1 && (a = l.length - 1)) : r === \"last\" && (a = l.length - 1), this.scrollToFocusedOptionOnUpdate = !0, this.setState({\n focusedOption: l[a],\n focusedValue: null,\n focusedOptionId: this.getFocusedOptionId(l[a])\n });\n }\n }\n },\n {\n key: \"getTheme\",\n value: function() {\n return this.props.theme ? typeof this.props.theme == \"function\" ? this.props.theme(Ev) : Le(Le({}, Ev), this.props.theme) : Ev;\n }\n },\n {\n key: \"getCommonProps\",\n value: function() {\n var r = this.clearValue, s = this.cx, i = this.getStyles, l = this.getClassNames, a = this.getValue, c = this.selectOption, u = this.setValue, d = this.props, f = d.isMulti, m = d.isRtl, p = d.options, h = this.hasValue();\n return {\n clearValue: r,\n cx: s,\n getStyles: i,\n getClassNames: l,\n getValue: a,\n hasValue: h,\n isMulti: f,\n isRtl: m,\n options: p,\n selectOption: c,\n selectProps: d,\n setValue: u,\n theme: this.getTheme()\n };\n }\n },\n {\n key: \"hasValue\",\n value: function() {\n var r = this.state.selectValue;\n return r.length > 0;\n }\n },\n {\n key: \"hasOptions\",\n value: function() {\n return !!this.getFocusableOptions().length;\n }\n },\n {\n key: \"isClearable\",\n value: function() {\n var r = this.props, s = r.isClearable, i = r.isMulti;\n return s === void 0 ? i : s;\n }\n },\n {\n key: \"isOptionDisabled\",\n value: function(r, s) {\n return fT(this.props, r, s);\n }\n },\n {\n key: \"isOptionSelected\",\n value: function(r, s) {\n return pT(this.props, r, s);\n }\n },\n {\n key: \"filterOption\",\n value: function(r, s) {\n return hT(this.props, r, s);\n }\n },\n {\n key: \"formatOptionLabel\",\n value: function(r, s) {\n if (typeof this.props.formatOptionLabel == \"function\") {\n var i = this.props.inputValue, l = this.state.selectValue;\n return this.props.formatOptionLabel(r, {\n context: s,\n inputValue: i,\n selectValue: l\n });\n } else return this.getOptionLabel(r);\n }\n },\n {\n key: \"formatGroupLabel\",\n value: function(r) {\n return this.props.formatGroupLabel(r);\n }\n },\n {\n key: \"startListeningComposition\",\n value: function() {\n document && document.addEventListener && (document.addEventListener(\"compositionstart\", this.onCompositionStart, !1), document.addEventListener(\"compositionend\", this.onCompositionEnd, !1));\n }\n },\n {\n key: \"stopListeningComposition\",\n value: function() {\n document && document.removeEventListener && (document.removeEventListener(\"compositionstart\", this.onCompositionStart), document.removeEventListener(\"compositionend\", this.onCompositionEnd));\n }\n },\n {\n key: \"startListeningToTouch\",\n value: function() {\n document && document.addEventListener && (document.addEventListener(\"touchstart\", this.onTouchStart, !1), document.addEventListener(\"touchmove\", this.onTouchMove, !1), document.addEventListener(\"touchend\", this.onTouchEnd, !1));\n }\n },\n {\n key: \"stopListeningToTouch\",\n value: function() {\n document && document.removeEventListener && (document.removeEventListener(\"touchstart\", this.onTouchStart), document.removeEventListener(\"touchmove\", this.onTouchMove), document.removeEventListener(\"touchend\", this.onTouchEnd));\n }\n },\n {\n key: \"renderInput\",\n value: function() {\n var r = this.props, s = r.isDisabled, i = r.isSearchable, l = r.inputId, a = r.inputValue, c = r.tabIndex, u = r.form, d = r.menuIsOpen, f = r.required, m = this.getComponents(), p = m.Input, h = this.state, g = h.inputIsHidden, b = h.ariaSelection, C = this.commonProps, y = l || this.getElementId(\"input\"), v = Le(Le(Le({\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": d,\n \"aria-haspopup\": !0,\n \"aria-errormessage\": this.props[\"aria-errormessage\"],\n \"aria-invalid\": this.props[\"aria-invalid\"],\n \"aria-label\": this.props[\"aria-label\"],\n \"aria-labelledby\": this.props[\"aria-labelledby\"],\n \"aria-required\": f,\n role: \"combobox\",\n \"aria-activedescendant\": this.isAppleDevice ? void 0 : this.state.focusedOptionId || \"\"\n }, d && {\n \"aria-controls\": this.getElementId(\"listbox\")\n }), !i && {\n \"aria-readonly\": !0\n }), this.hasValue() ? b?.action === \"initial-input-focus\" && {\n \"aria-describedby\": this.getElementId(\"live-region\")\n } : {\n \"aria-describedby\": this.getElementId(\"placeholder\")\n });\n return i ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(p, Ne({}, C, {\n autoCapitalize: \"none\",\n autoComplete: \"off\",\n autoCorrect: \"off\",\n id: y,\n innerRef: this.getInputRef,\n isDisabled: s,\n isHidden: g,\n onBlur: this.onInputBlur,\n onChange: this.handleInputChange,\n onFocus: this.onInputFocus,\n spellCheck: \"false\",\n tabIndex: c,\n form: u,\n type: \"text\",\n value: a\n }, v)) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(vO, Ne({\n id: y,\n innerRef: this.getInputRef,\n onBlur: this.onInputBlur,\n onChange: Ru,\n onFocus: this.onInputFocus,\n disabled: s,\n tabIndex: c,\n inputMode: \"none\",\n form: u,\n value: \"\"\n }, v));\n }\n },\n {\n key: \"renderPlaceholderOrValue\",\n value: function() {\n var r = this, s = this.getComponents(), i = s.MultiValue, l = s.MultiValueContainer, a = s.MultiValueLabel, c = s.MultiValueRemove, u = s.SingleValue, d = s.Placeholder, f = this.commonProps, m = this.props, p = m.controlShouldRenderValue, h = m.isDisabled, g = m.isMulti, b = m.inputValue, C = m.placeholder, y = this.state, v = y.selectValue, x = y.focusedValue, I = y.isFocused;\n if (!this.hasValue() || !p) return b ? null : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(d, Ne({}, f, {\n key: \"placeholder\",\n isDisabled: h,\n isFocused: I,\n innerProps: {\n id: this.getElementId(\"placeholder\")\n }\n }), C);\n if (g) return v.map(function(F, S) {\n var R = F === x, D = \"\".concat(r.getOptionLabel(F), \"-\").concat(r.getOptionValue(F));\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(i, Ne({}, f, {\n components: {\n Container: l,\n Label: a,\n Remove: c\n },\n isFocused: R,\n isDisabled: h,\n key: D,\n index: S,\n removeProps: {\n onClick: function() {\n return r.removeValue(F);\n },\n onTouchEnd: function() {\n return r.removeValue(F);\n },\n onMouseDown: function(T) {\n T.preventDefault();\n }\n },\n data: F\n }), r.formatOptionLabel(F, \"value\"));\n });\n if (b) return null;\n var w = v[0];\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(u, Ne({}, f, {\n data: w,\n isDisabled: h\n }), this.formatOptionLabel(w, \"value\"));\n }\n },\n {\n key: \"renderClearIndicator\",\n value: function() {\n var r = this.getComponents(), s = r.ClearIndicator, i = this.commonProps, l = this.props, a = l.isDisabled, c = l.isLoading, u = this.state.isFocused;\n if (!this.isClearable() || !s || a || !this.hasValue() || c) return null;\n var d = {\n onMouseDown: this.onClearIndicatorMouseDown,\n onTouchEnd: this.onClearIndicatorTouchEnd,\n \"aria-hidden\": \"true\"\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(s, Ne({}, i, {\n innerProps: d,\n isFocused: u\n }));\n }\n },\n {\n key: \"renderLoadingIndicator\",\n value: function() {\n var r = this.getComponents(), s = r.LoadingIndicator, i = this.commonProps, l = this.props, a = l.isDisabled, c = l.isLoading, u = this.state.isFocused;\n if (!s || !c) return null;\n var d = {\n \"aria-hidden\": \"true\"\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(s, Ne({}, i, {\n innerProps: d,\n isDisabled: a,\n isFocused: u\n }));\n }\n },\n {\n key: \"renderIndicatorSeparator\",\n value: function() {\n var r = this.getComponents(), s = r.DropdownIndicator, i = r.IndicatorSeparator;\n if (!s || !i) return null;\n var l = this.commonProps, a = this.props.isDisabled, c = this.state.isFocused;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(i, Ne({}, l, {\n isDisabled: a,\n isFocused: c\n }));\n }\n },\n {\n key: \"renderDropdownIndicator\",\n value: function() {\n var r = this.getComponents(), s = r.DropdownIndicator;\n if (!s) return null;\n var i = this.commonProps, l = this.props.isDisabled, a = this.state.isFocused, c = {\n onMouseDown: this.onDropdownIndicatorMouseDown,\n onTouchEnd: this.onDropdownIndicatorTouchEnd,\n \"aria-hidden\": \"true\"\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(s, Ne({}, i, {\n innerProps: c,\n isDisabled: l,\n isFocused: a\n }));\n }\n },\n {\n key: \"renderMenu\",\n value: function() {\n var r = this, s = this.getComponents(), i = s.Group, l = s.GroupHeading, a = s.Menu, c = s.MenuList, u = s.MenuPortal, d = s.LoadingMessage, f = s.NoOptionsMessage, m = s.Option, p = this.commonProps, h = this.state.focusedOption, g = this.props, b = g.captureMenuScroll, C = g.inputValue, y = g.isLoading, v = g.loadingMessage, x = g.minMenuHeight, I = g.maxMenuHeight, w = g.menuIsOpen, F = g.menuPlacement, S = g.menuPosition, R = g.menuPortalTarget, D = g.menuShouldBlockScroll, _ = g.menuShouldScrollIntoView, T = g.noOptionsMessage, A = g.onMenuScrollToTop, k = g.onMenuScrollToBottom;\n if (!w) return null;\n var P = function(O, V) {\n var W = O.type, Z = O.data, z = O.isDisabled, Q = O.isSelected, U = O.label, X = O.value, ue = h === Z, q = z ? void 0 : function() {\n return r.onOptionHover(Z);\n }, J = z ? void 0 : function() {\n return r.selectOption(Z);\n }, Y = \"\".concat(r.getElementId(\"option\"), \"-\").concat(V), le = {\n id: Y,\n onClick: J,\n onMouseMove: q,\n onMouseOver: q,\n tabIndex: -1,\n role: \"option\",\n \"aria-selected\": r.isAppleDevice ? void 0 : Q\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(m, Ne({}, p, {\n innerProps: le,\n data: Z,\n isDisabled: z,\n isSelected: Q,\n key: Y,\n label: U,\n type: W,\n value: X,\n isFocused: ue,\n innerRef: ue ? r.getFocusedOptionRef : void 0\n }), r.formatOptionLabel(O.data, \"menu\"));\n }, E;\n if (this.hasOptions()) E = this.getCategorizedOptions().map(function(j) {\n if (j.type === \"group\") {\n var O = j.data, V = j.options, W = j.index, Z = \"\".concat(r.getElementId(\"group\"), \"-\").concat(W), z = \"\".concat(Z, \"-heading\");\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(i, Ne({}, p, {\n key: Z,\n data: O,\n options: V,\n Heading: l,\n headingProps: {\n id: z,\n data: j.data\n },\n label: r.formatGroupLabel(j.data)\n }), j.options.map(function(Q) {\n return P(Q, \"\".concat(W, \"-\").concat(Q.index));\n }));\n } else if (j.type === \"option\") return P(j, \"\".concat(j.index));\n });\n else if (y) {\n var B = v({\n inputValue: C\n });\n if (B === null) return null;\n E = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(d, p, B);\n } else {\n var $ = T({\n inputValue: C\n });\n if ($ === null) return null;\n E = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(f, p, $);\n }\n var M = {\n minMenuHeight: x,\n maxMenuHeight: I,\n menuPlacement: F,\n menuPosition: S,\n menuShouldScrollIntoView: _\n }, L = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(b_, Ne({}, p, M), function(j) {\n var O = j.ref, V = j.placerProps, W = V.placement, Z = V.maxHeight;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(a, Ne({}, p, M, {\n innerRef: O,\n innerProps: {\n onMouseDown: r.onMenuMouseDown,\n onMouseMove: r.onMenuMouseMove\n },\n isLoading: y,\n placement: W\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(IO, {\n captureEnabled: b,\n onTopArrive: A,\n onBottomArrive: k,\n lockEnabled: D\n }, function(z) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(c, Ne({}, p, {\n innerRef: function(U) {\n r.getMenuListRef(U), z(U);\n },\n innerProps: {\n role: \"listbox\",\n \"aria-multiselectable\": p.isMulti,\n id: r.getElementId(\"listbox\")\n },\n isLoading: y,\n maxHeight: Z,\n focusedOption: h\n }), E);\n }));\n });\n return R || S === \"fixed\" ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(u, Ne({}, p, {\n appendTo: R,\n controlElement: this.controlRef,\n menuPlacement: F,\n menuPosition: S\n }), L) : L;\n }\n },\n {\n key: \"renderFormField\",\n value: function() {\n var r = this, s = this.props, i = s.delimiter, l = s.isDisabled, a = s.isMulti, c = s.name, u = s.required, d = this.state.selectValue;\n if (u && !this.hasValue() && !l) return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(FO, {\n name: c,\n onFocus: this.onValueInputFocus\n });\n if (!(!c || l)) if (a) if (i) {\n var f = d.map(function(h) {\n return r.getOptionValue(h);\n }).join(i);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n name: c,\n type: \"hidden\",\n value: f\n });\n } else {\n var m = d.length > 0 ? d.map(function(h, g) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n key: \"i-\".concat(g),\n name: c,\n type: \"hidden\",\n value: r.getOptionValue(h)\n });\n }) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n name: c,\n type: \"hidden\",\n value: \"\"\n });\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, m);\n }\n else {\n var p = d[0] ? this.getOptionValue(d[0]) : \"\";\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n name: c,\n type: \"hidden\",\n value: p\n });\n }\n }\n },\n {\n key: \"renderLiveRegion\",\n value: function() {\n var r = this.commonProps, s = this.state, i = s.ariaSelection, l = s.focusedOption, a = s.focusedValue, c = s.isFocused, u = s.selectValue, d = this.getFocusableOptions();\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(mO, Ne({}, r, {\n id: this.getElementId(\"live-region\"),\n ariaSelection: i,\n focusedOption: l,\n focusedValue: a,\n isFocused: c,\n selectValue: u,\n focusableOptions: d,\n isAppleDevice: this.isAppleDevice\n }));\n }\n },\n {\n key: \"render\",\n value: function() {\n var r = this.getComponents(), s = r.Control, i = r.IndicatorsContainer, l = r.SelectContainer, a = r.ValueContainer, c = this.props, u = c.className, d = c.id, f = c.isDisabled, m = c.menuIsOpen, p = this.state.isFocused, h = this.commonProps = this.getCommonProps();\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(l, Ne({}, h, {\n className: u,\n innerProps: {\n id: d,\n onKeyDown: this.onKeyDown\n },\n isDisabled: f,\n isFocused: p\n }), this.renderLiveRegion(), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(s, Ne({}, h, {\n innerRef: this.getControlRef,\n innerProps: {\n onMouseDown: this.onControlMouseDown,\n onTouchEnd: this.onControlTouchEnd\n },\n isDisabled: f,\n isFocused: p,\n menuIsOpen: m\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(a, Ne({}, h, {\n isDisabled: f\n }), this.renderPlaceholderOrValue(), this.renderInput()), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(i, Ne({}, h, {\n isDisabled: f\n }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField());\n }\n }\n ], [\n {\n key: \"getDerivedStateFromProps\",\n value: function(r, s) {\n var i = s.prevProps, l = s.clearFocusValueOnUpdate, a = s.inputIsHiddenAfterUpdate, c = s.ariaSelection, u = s.isFocused, d = s.prevWasFocused, f = s.instancePrefix, m = r.options, p = r.value, h = r.menuIsOpen, g = r.inputValue, b = r.isMulti, C = El(p), y = {};\n if (i && (p !== i.value || m !== i.options || h !== i.menuIsOpen || g !== i.inputValue)) {\n var v = h ? VO(r, C) : [], x = h ? nT(Mp(r, C), \"\".concat(f, \"-option\")) : [], I = l ? GO(s, C) : null, w = zO(s, v), F = Nv(x, w);\n y = {\n selectValue: C,\n focusedOption: w,\n focusedOptionId: F,\n focusableOptionsWithIds: x,\n focusedValue: I,\n clearFocusValueOnUpdate: !1\n };\n }\n var S = a != null && r !== i ? {\n inputIsHidden: a,\n inputIsHiddenAfterUpdate: void 0\n } : {}, R = c, D = u && d;\n return u && !D && (R = {\n value: ra(b, C, C[0] || null),\n options: C,\n action: \"initial-input-focus\"\n }, D = !d), c?.action === \"initial-input-focus\" && (R = null), Le(Le(Le({}, y), S), {}, {\n prevProps: r,\n ariaSelection: R,\n prevWasFocused: D\n });\n }\n }\n ]), o;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\nNu.defaultProps = OO;\n\nvar UO = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function(t, e) {\n var o = cp(t);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(Nu, Ne({\n ref: e\n }, o));\n}), vT = UO;\n\n\n\nvar YO = [\n \"allowCreateWhileLoading\",\n \"createOptionPosition\",\n \"formatCreateLabel\",\n \"isValidNewOption\",\n \"getNewOptionData\",\n \"onCreateOption\",\n \"options\",\n \"onChange\"\n], CT = function() {\n var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : \"\", o = arguments.length > 1 ? arguments[1] : void 0, n = arguments.length > 2 ? arguments[2] : void 0, r = String(e).toLowerCase(), s = String(n.getOptionValue(o)).toLowerCase(), i = String(n.getOptionLabel(o)).toLowerCase();\n return s === r || i === r;\n}, Mv = {\n formatCreateLabel: function(e) {\n return 'Create \"'.concat(e, '\"');\n },\n isValidNewOption: function(e, o, n, r) {\n return !(!e || o.some(function(s) {\n return CT(e, s, r);\n }) || n.some(function(s) {\n return CT(e, s, r);\n }));\n },\n getNewOptionData: function(e, o) {\n return {\n label: o,\n value: e,\n __isNew__: !0\n };\n }\n};\nfunction xT(t) {\n var e = t.allowCreateWhileLoading, o = e === void 0 ? !1 : e, n = t.createOptionPosition, r = n === void 0 ? \"last\" : n, s = t.formatCreateLabel, i = s === void 0 ? Mv.formatCreateLabel : s, l = t.isValidNewOption, a = l === void 0 ? Mv.isValidNewOption : l, c = t.getNewOptionData, u = c === void 0 ? Mv.getNewOptionData : c, d = t.onCreateOption, f = t.options, m = f === void 0 ? [] : f, p = t.onChange, h = cr(t, YO), g = h.getOptionValue, b = g === void 0 ? Bv : g, C = h.getOptionLabel, y = C === void 0 ? $v : C, v = h.inputValue, x = h.isLoading, I = h.isMulti, w = h.value, F = h.name, S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return a(v, El(w), m, {\n getOptionValue: b,\n getOptionLabel: y\n }) ? u(v, i(v)) : void 0;\n }, [\n i,\n u,\n y,\n b,\n v,\n a,\n m,\n w\n ]), R = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return (o || !x) && S ? r === \"first\" ? [\n S\n ].concat(ti(m)) : [].concat(ti(m), [\n S\n ]) : m;\n }, [\n o,\n r,\n x,\n S,\n m\n ]), D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function(_, T) {\n if (T.action !== \"select-option\") return p(_, T);\n var A = Array.isArray(_) ? _ : [\n _\n ];\n if (A[A.length - 1] === S) {\n if (d) d(v);\n else {\n var k = u(v, v), P = {\n action: \"create-option\",\n name: F,\n option: k\n };\n p(ra(I, [].concat(ti(El(w)), [\n k\n ]), k), P);\n }\n return;\n }\n p(_, T);\n }, [\n u,\n v,\n I,\n F,\n S,\n d,\n p,\n w\n ]);\n return Le(Le({}, h), {}, {\n options: R,\n onChange: D\n });\n}\n\nvar JO = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function(t, e) {\n var o = cp(t), n = xT(o);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(Nu, Ne({\n ref: e\n }, n));\n}), ST = JO;\n\n\nvar _T = \"clear-indicator\", Ov = (t)=>{\n let { clearValue: e, innerProps: { ref: o, ...n } } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: _T,\n ref: typeof o == \"string\" ? null : o,\n ...n,\n onKeyDown: (r)=>{\n r.key === \"Enter\" && (e(), r.stopPropagation());\n },\n role: \"button\",\n tabIndex: 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {\n className: `${_T}__icon`\n })\n });\n};\n\n\nvar Vv = (t)=>{\n let { children: e, innerProps: o, selectProps: { customProps: { disableKeyDown: n, disableMouseDown: r } = {} } = {} } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.Control, {\n ...t,\n innerProps: {\n ...o,\n onKeyDown: (s)=>{\n if (n) {\n s.stopPropagation();\n let i = new CustomEvent(\"bypassKeyDown\", {\n detail: s\n });\n document.dispatchEvent(i);\n }\n },\n onMouseDown: (s)=>{\n r || o.onMouseDown(s);\n }\n },\n children: e\n })\n });\n};\n_c146 = Vv;\n\n\nvar DT = \"dropdown-indicator\", Gv = (t)=>{\n let { innerProps: { ref: e, ...o } } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: DT,\n ref: e,\n ...o,\n onKeyDown: (n)=>{\n n.key === \"Enter\" && (n.key = \" \");\n },\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n className: `${DT}__icon`\n })\n });\n};\n\n\nvar zv = (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.Input, {\n ...t,\n \"aria-activedescendant\": void 0\n })\n });\n\n\n\nvar PT = \"multi-value\";\nfunction Wv(t, e) {\n return typeof e == \"function\" ? e(t) : t?.value;\n}\n_c147 = Wv;\nvar Hv = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(24), { className: o, data: n, innerProps: r, isDisabled: s, selectProps: i } = t, l;\n e[0] !== i ? (l = i === void 0 ? {} : i, e[0] = i, e[1] = l) : l = e[1];\n let { customProps: a, getOptionValue: c, isSortable: u } = l, d;\n e[2] !== a ? (d = a === void 0 ? {} : a, e[2] = a, e[3] = d) : d = e[3];\n let { disableMouseDown: f } = d, m;\n e[4] !== n || e[5] !== c ? (m = Wv(n, c), e[4] = n, e[5] = c, e[6] = m) : m = e[6];\n let p = m, h = !u, g;\n e[7] !== p || e[8] !== h ? (g = {\n id: p,\n disabled: h\n }, e[7] = p, e[8] = h, e[9] = g) : g = e[9];\n let { attributes: b, isDragging: C, listeners: y, setNodeRef: v, transform: x } = al(g), I = !s && u && \"draggable\", w = C && `${PT}--is-dragging`, F;\n e[10] !== o || e[11] !== I || e[12] !== w ? (F = [\n PT,\n o,\n I,\n w\n ].filter(Boolean), e[10] = o, e[11] = I, e[12] = w, e[13] = F) : F = e[13];\n let S = F.join(\" \"), R;\n if (e[14] !== b || e[15] !== S || e[16] !== f || e[17] !== r || e[18] !== u || e[19] !== y || e[20] !== t || e[21] !== v || e[22] !== x) {\n let { onMouseDown: D, ..._ } = y || {};\n R = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.MultiValue, {\n ...t,\n className: S,\n innerProps: {\n ...u ? {\n ...b,\n ..._\n } : {},\n ...r,\n onMouseDown: (T)=>{\n u && D && D(T), f || T.stopPropagation();\n },\n ref: v,\n style: u ? {\n transform: x,\n ...b?.style\n } : {}\n }\n })\n }), e[14] = b, e[15] = S, e[16] = f, e[17] = r, e[18] = u, e[19] = y, e[20] = t, e[21] = v, e[22] = x, e[23] = R;\n } else R = e[23];\n return R;\n};\n_c148 = Hv;\n\n\n\nvar NT = \"multi-value-label\", Uv = (t)=>{\n let { data: e, selectProps: o } = t, { customProps: n } = o === void 0 ? {} : o, { draggableProps: r, editableProps: s } = n === void 0 ? {} : n, { i18n: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), l = `${NT}__text`, a = e.label ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(e.label, i) : \"\";\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: NT,\n title: typeof a == \"string\" ? a : \"\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.MultiValueLabel, {\n ...t,\n innerProps: {\n className: l,\n ...s && s(e, l, t.selectProps) || {},\n ...r || {}\n }\n })\n });\n};\n\n\n\nvar Xv = \"multi-value-remove\", Yv = (t)=>{\n _s23();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { innerProps: o } = t, { className: n, onClick: r, onTouchEnd: s } = o, [i, l] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), { t: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c;\n if (e[0] !== n || e[1] !== r || e[2] !== s || e[3] !== i || e[4] !== a) {\n let u = a(\"general:remove\"), d;\n e[6] !== n ? (d = [\n Xv,\n n\n ].filter(Boolean), e[6] = n, e[7] = d) : d = e[7];\n let f;\n e[8] !== r ? (f = (h)=>{\n l(!1), r(h);\n }, e[8] = r, e[9] = f) : f = e[9];\n let m, p;\n e[10] === Symbol.for(\"react.memo_cache_sentinel\") ? (m = ()=>l(!0), p = ()=>l(!1), e[10] = m, e[11] = p) : (m = e[10], p = e[11]), c = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n \"aria-label\": u,\n className: d.join(\" \"),\n onClick: f,\n onKeyDown: s7,\n onMouseDown: i7,\n onMouseEnter: m,\n onMouseLeave: p,\n onTouchEnd: s,\n type: \"button\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ro, {\n className: `${Xv}__tooltip`,\n show: i,\n children: a(\"general:remove\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {\n className: `${Xv}__icon`\n })\n ]\n }), e[0] = n, e[1] = r, e[2] = s, e[3] = i, e[4] = a, e[5] = c;\n } else c = e[5];\n return c;\n};\n_s23(Yv, \"s6F8ogKGOjrUG8CtCZnGSsW+/7I=\");\nfunction s7(t) {\n t.key === \"Enter\" && t.stopPropagation();\n}\nfunction i7(t) {\n return t.stopPropagation();\n}\n\n\nvar l7 = \"react-select--single-value\", Zv = (t)=>{\n let { children: e, className: o } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.SingleValue, {\n ...t,\n className: [\n l7,\n o\n ].filter(Boolean).join(\" \"),\n children: e\n })\n });\n};\n\n\n\nvar $T = \"value-container\", Jv = (t)=>{\n let { selectProps: e } = t, { customProps: o, value: n } = e === void 0 ? {} : e, { i18n: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), s = \"\";\n if (n && !Array.isArray(n) && typeof n == \"object\" && \"label\" in n) {\n let i = n.label ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(n.label, r) : \"\";\n s = typeof i == \"string\" ? i : \"\";\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: $T,\n ref: o?.droppableRef,\n title: s,\n children: [\n o?.valueContainerLabel && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${$T}__label`,\n children: o?.valueContainerLabel\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.ValueContainer, {\n ...t\n })\n ]\n });\n};\nvar f7 = (t)=>({\n label: t,\n value: t\n }), OT = (t)=>{\n _s24();\n let { i18n: e, t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [n, r] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\"\"), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), [i, l] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n l(!0);\n }, []);\n let { className: a, components: c, customProps: u, disabled: d = !1, filterOption: f = void 0, getOptionValue: m, isClearable: p = !0, isCreatable: h, isLoading: g, isSearchable: b = !0, noOptionsMessage: C = ()=>o(\"general:noOptions\"), numberOnly: y = !1, onChange: v, onMenuClose: x, onMenuOpen: I, options: w, placeholder: F = o(\"general:selectValue\"), showError: S, value: R } = t, D = ()=>o(\"general:loading\") + \"...\", _ = [\n a,\n \"react-select\",\n S && \"react-select--error\"\n ].filter(Boolean).join(\" \"), T = {\n menu: (k)=>({\n ...k,\n zIndex: void 0\n })\n };\n if (!i) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"calc(var(--base) * 2 + 2px)\"\n });\n if (!h) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vT, {\n captureMenuScroll: !0,\n customProps: u,\n isLoading: g,\n ...t,\n className: _,\n classNamePrefix: \"rs\",\n components: {\n ClearIndicator: Ov,\n Control: Vv,\n DropdownIndicator: Gv,\n Input: zv,\n MultiValue: Hv,\n MultiValueLabel: Uv,\n MultiValueRemove: Yv,\n SingleValue: Zv,\n ValueContainer: Jv,\n ...c\n },\n filterOption: f,\n getOptionValue: m,\n instanceId: s,\n isClearable: p,\n isDisabled: d,\n isSearchable: b,\n loadingMessage: D,\n menuPlacement: \"auto\",\n noOptionsMessage: C,\n onChange: v,\n onMenuClose: x,\n onMenuOpen: I,\n options: w,\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(F, e),\n styles: T,\n unstyled: !0,\n value: R\n });\n let A = (k)=>{\n if (y === !0) {\n let P = [\n \"Tab\",\n \"Escape\",\n \"Backspace\",\n \"Enter\",\n \"ArrowRight\",\n \"ArrowLeft\",\n \"ArrowUp\",\n \"ArrowDown\"\n ], E = !/\\D/.test(k.key), B = P.includes(k.key);\n if (!E && !B) {\n k.preventDefault();\n return;\n }\n }\n if (!(!R || !n || n.trim() === \"\") && !(f && !f(null, n)) && !k.nativeEvent.isComposing) switch(k.key){\n case \"Enter\":\n case \"Tab\":\n v([\n ...R,\n f7(n)\n ]), r(\"\"), k.preventDefault();\n break;\n default:\n break;\n }\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ST, {\n captureMenuScroll: !0,\n isLoading: g,\n ...t,\n className: _,\n classNamePrefix: \"rs\",\n components: {\n ClearIndicator: Ov,\n Control: Vv,\n DropdownIndicator: Gv,\n Input: zv,\n MultiValue: Hv,\n MultiValueLabel: Uv,\n MultiValueRemove: Yv,\n SingleValue: Zv,\n ValueContainer: Jv,\n ...c\n },\n filterOption: f,\n inputValue: n,\n instanceId: s,\n isClearable: p,\n isDisabled: d,\n isSearchable: b,\n loadingMessage: D,\n menuPlacement: \"auto\",\n noOptionsMessage: C,\n onChange: v,\n onInputChange: (k)=>r(k),\n onKeyDown: A,\n onMenuClose: x,\n onMenuOpen: I,\n options: w,\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(F, e),\n styles: T,\n unstyled: !0,\n value: R\n });\n}, p7 = (t)=>{\n let { getOptionValue: e, onChange: o, value: n } = t, r = [];\n return n && (r = (Array.isArray(n) ? n : [\n n\n ]).map((s)=>Wv(s, e))), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Or, {\n className: \"react-select-container\",\n ids: r,\n onDragEnd: ({ moveFromIndex: s, moveToIndex: i })=>{\n let l = n;\n n && Array.isArray(n) && (l = wf(n, s, i)), o(l);\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(OT, {\n ...t\n })\n });\n}, ft = (t)=>{\n let { isMulti: e, isSortable: o } = t;\n return e && o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(p7, {\n ...t\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(OT, {\n ...t\n });\n};\n_s24(OT, \"/M5n0iyq/UVfYO+aAQx0dQDdRSo=\");\nvar Lu = (t)=>t.map((e)=>typeof e == \"object\" && (e.value || e.value === \"\") ? e : {\n label: e,\n value: e\n });\n_c149 = Lu;\nvar ku = (t)=>{\n let { id: e, onChange: o, options: n, readOnly: r, required: s, selectedTimezone: i } = t, { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), a = Lu(n), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>a.find((d)=>(typeof d == \"string\" ? d : d.value) === i), [\n a,\n i\n ]), u = !!r || a.length === 1;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"timezone-picker-wrapper\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n htmlFor: e,\n label: `${l(\"general:timezone\")} ${s ? \"*\" : \"\"}`,\n required: s,\n unstyled: !0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n className: \"timezone-picker\",\n disabled: u,\n inputId: e,\n isClearable: !s,\n isCreatable: !1,\n onChange: (d)=>{\n o && o(d?.value || \"\");\n },\n options: a,\n value: c\n })\n ]\n });\n};\nvar zT = \"date-time-field\", v7 = (t)=>{\n let { field: e, field: { admin: { className: o, date: n, description: r, placeholder: s } = {}, label: i, localized: l, required: a, timezone: c }, path: u, readOnly: d, validate: f } = t, m = n?.pickerAppearance || \"default\", p = Intl.DateTimeFormat().resolvedOptions().timeZone, { config: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: g } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { dispatchFields: b, setModified: C } = $e(), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((V, W)=>{\n if (typeof f == \"function\") return f(V, {\n ...W,\n required: a\n });\n }, [\n f,\n a\n ]), { customComponents: { AfterInput: v, BeforeInput: x, Description: I, Error: w, Label: F } = {}, disabled: S, path: R, setValue: D, showError: _, value: T } = Te({\n potentiallyStalePath: u,\n validate: y\n }), A = R + \"_tz\", k = Ot(([V, W])=>V?.[A]), P = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>c && typeof c == \"object\" && c.supportedTimezones ? c.supportedTimezones : h.admin.timezones.supportedTimezones, [\n h.admin.timezones.supportedTimezones,\n c\n ]), E = [\n \"dayOnly\",\n \"default\",\n \"monthOnly\"\n ].includes(m), B = k?.value, $ = a || c && typeof c == \"object\" && c.required, M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n if (c && B && p && T) {\n let V = no.tz(B), W = no.tz(p), Z = new no(T).withTimeZone(B), z = cn(Z, V);\n return cn(z, W).toISOString();\n }\n return T;\n }, [\n c,\n B,\n T,\n p\n ]), L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]), j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((V)=>{\n if (!(d || S)) if (c && B && V) {\n let W = no.tz(B);\n if (E) {\n let Z = V.getTimezoneOffset() / 60, z = V.getHours() + Z;\n V.setHours(z);\n let Q = cn(V, W);\n D(Q.toISOString() || null);\n } else {\n let Z = new no(V), z = cn(Z, W);\n D(z.toISOString() || null);\n }\n } else D(V?.toISOString() || null);\n }, [\n d,\n S,\n c,\n B,\n E,\n D\n ]), O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((V)=>{\n A && (b({\n type: \"UPDATE\",\n path: A,\n value: V\n }), C(!0));\n }, [\n b,\n C,\n A\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n zT,\n o,\n _ && `${zT}--has-error`,\n (d || S) && \"read-only\"\n ].filter(Boolean).join(\" \"),\n style: L,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: F,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: i,\n localized: l,\n path: R,\n required: a\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n id: `field-${R.replace(/\\./g, \"__\")}`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: w,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: R,\n showError: _\n })\n }),\n x,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Cl, {\n ...n,\n onChange: j,\n overrides: {\n ...n?.overrides\n },\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s, g),\n readOnly: d || S,\n value: M\n }),\n c && P.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ku, {\n id: `${R}-timezone-picker`,\n onChange: O,\n options: P,\n readOnly: d || S,\n required: $,\n selectedTimezone: B\n }),\n v\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: I,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: r,\n path: R\n })\n })\n ]\n });\n}, ju = We(v7);\n\n\n\nvar w7 = (t)=>{\n let { field: e, field: { admin: { autoComplete: o, className: n, description: r, placeholder: s } = {}, label: i, localized: l, required: a } = {}, path: c, readOnly: u, validate: d } = t, { i18n: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((S, R)=>{\n if (typeof d == \"function\") return d(S, {\n ...R,\n required: a\n });\n }, [\n d,\n a\n ]), { customComponents: { AfterInput: p, BeforeInput: h, Description: g, Error: b, Label: C } = {}, disabled: y, path: v, setValue: x, showError: I, value: w } = Te({\n potentiallyStalePath: c,\n validate: m\n }), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n \"email\",\n n,\n I && \"error\",\n (u || y) && \"read-only\"\n ].filter(Boolean).join(\" \"),\n style: F,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: C,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: i,\n localized: l,\n path: v,\n required: a\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: b,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: v,\n showError: I\n })\n }),\n h,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n autoComplete: o,\n disabled: u || y,\n id: `field-${v.replace(/\\./g, \"__\")}`,\n name: v,\n onChange: x,\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s, f),\n required: a,\n type: \"email\",\n value: w || \"\"\n }),\n p\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: g,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: r,\n path: v\n })\n })\n ]\n });\n}, ia = We(w7);\n\n\n\n\n\n\nvar HT = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), UT = ({ children: t, withinRow: e = !0 })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(HT, {\n value: e,\n children: t\n }), XT = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(HT);\n\n\nvar YT = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), Kv = ({ children: t, withinTab: e = !0 })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(YT, {\n value: e,\n children: t\n }), ZT = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(YT);\n\n\nvar JT = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1), qT = ({ children: t, withinGroup: e = !0 })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(JT, {\n value: e,\n children: t\n }), QT = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(JT);\nvar gn = \"group-field\", L7 = (t)=>{\n let { field: e, field: { admin: { className: o, description: n, hideGutter: r } = {}, fields: s, label: i }, indexPath: l, parentPath: a, parentSchemaPath: c, path: u, permissions: d, readOnly: f, schemaPath: m } = t, p = m ?? (e.type === \"group\" && (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.groupHasName)(e) ? e.name : u), { i18n: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { isWithinCollapsible: g } = Qs(), b = QT(), C = XT(), y = ZT(), { customComponents: { AfterInput: v, BeforeInput: x, Description: I, Label: w } = {}, errorPaths: F } = Te({\n path: u\n }), S = fo(), R = F.length, D = S && R > 0, _ = !(g || b || C), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n gn,\n _ && `${gn}--top-level`,\n g && `${gn}--within-collapsible`,\n b && `${gn}--within-group`,\n C && `${gn}--within-row`,\n y && `${gn}--within-tab`,\n !r && b && `${gn}--gutter`,\n D && `${gn}--has-error`,\n o\n ].filter(Boolean).join(\" \"),\n id: `field-${u?.replace(/\\./g, \"__\")}`,\n style: T,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(qT, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${gn}__wrap`,\n children: [\n !!(w || I || i || D) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${gn}__header`,\n children: [\n !!(w || I || i) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"header\", {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: w,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n className: `${gn}__title`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"span\",\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, h),\n localized: !1,\n path: u,\n required: !1\n })\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: I,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: n,\n path: u\n })\n })\n ]\n }),\n D && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: R,\n i18n: h,\n withMessage: !0\n })\n ]\n }),\n x,\n (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.groupHasName)(e) ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n fields: s,\n margins: \"small\",\n parentIndexPath: \"\",\n parentPath: u,\n parentSchemaPath: p,\n permissions: d === !0 ? d : d?.fields,\n readOnly: f\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n fields: s,\n margins: \"small\",\n parentIndexPath: l,\n parentPath: a,\n parentSchemaPath: c,\n permissions: d,\n readOnly: f\n })\n ]\n })\n }),\n v\n ]\n });\n};\nvar $u = We(L7);\n\n\n\nvar B7 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { disableModifyingForm: o, path: n, value: r } = t, s = o === void 0 ? !0 : o, i;\n e[0] !== n ? (i = {\n potentiallyStalePath: n\n }, e[0] = n, e[1] = i) : i = e[1];\n let { formInitializing: l, path: a, setValue: c, value: u } = Te(i), d, f;\n e[2] !== s || e[3] !== l || e[4] !== c || e[5] !== r ? (d = ()=>{\n r !== void 0 && !l && c(r, s);\n }, f = [\n r,\n c,\n s,\n l\n ], e[2] = s, e[3] = l, e[4] = c, e[5] = r, e[6] = d, e[7] = f) : (d = e[6], f = e[7]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(d, f);\n let m = `field-${a?.replace(/\\./g, \"__\")}`, p = u || \"\", h;\n return e[8] !== a || e[9] !== c || e[10] !== m || e[11] !== p ? (h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n id: m,\n name: a,\n onChange: c,\n type: \"hidden\",\n value: p\n }), e[8] = a, e[9] = c, e[10] = m, e[11] = p, e[12] = h) : h = e[12], h;\n}, Bu = We(B7);\nvar sh = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(gf(), 1);\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar eF = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), e0 = ({ children: t, ...e })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(eF, {\n value: {\n isInDrawer: !!e.drawerSlug,\n ...e\n },\n children: t\n }), Ir = ()=>{\n let t = (0,react__WEBPACK_IMPORTED_MODULE_0__.use)(eF);\n if (!t) throw new Error(\"useListDrawerContext must be used within a ListDrawerContextProvider\");\n return t;\n};\n\nfunction Yt(t) {\n let e = t.toString();\n return qs_esm__WEBPACK_IMPORTED_MODULE_16__.parse(e, {\n depth: 10,\n ignoreQueryPrefix: !0\n });\n}\n_c150 = Yt;\n\nvar t0 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), dt = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(t0), rF = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1);\nvar nF = (t, e, o)=>{\n let n = \"page\" in e ? e.page : t?.page;\n [\n \"where\",\n \"search\",\n \"groupBy\"\n ].some((a)=>a in e && ![\n \"limit\",\n \"page\"\n ].includes(a)) && (n = 1);\n let s = [\n \"where\",\n \"search\",\n \"page\",\n \"limit\",\n \"groupBy\",\n \"sort\"\n ].some((a)=>a in e), i;\n return s || (i = {\n ...t?.queryByGroup || {},\n ...e.queryByGroup ? Object.fromEntries(Object.entries(e.queryByGroup).map(([a, c])=>[\n a,\n {\n ...t?.queryByGroup?.[a] || {},\n ...c\n }\n ])) : {}\n }), {\n ...t,\n ...e,\n columns: \"columns\" in e ? e.columns : t.columns,\n groupBy: \"groupBy\" in e ? e.groupBy : t?.groupBy ?? o?.defaults?.groupBy,\n limit: \"limit\" in e ? e.limit : t?.limit ?? o?.defaults?.limit,\n page: n,\n preset: \"preset\" in e ? e.preset : t?.preset,\n queryByGroup: i,\n search: \"search\" in e ? e.search : t?.search,\n sort: \"sort\" in e ? e.sort : t?.sort ?? o?.defaults?.sort,\n where: \"where\" in e ? e.where : t?.where\n };\n};\nvar o0 = (t)=>{\n let e = {\n ...t\n };\n return Object.entries(e).forEach(([o, n])=>{\n if (o === \"columns\" && (n === \"[]\" || Array.isArray(e[o]) && e[o].length === 0) && delete e[o], o === \"where\" && typeof n == \"object\" && n !== null && !Object.keys(n).length && delete e[o], (o === \"limit\" || o === \"page\") && typeof n == \"string\") {\n let r = parseInt(n, 10);\n e[o] = Number.isNaN(r) ? void 0 : r;\n }\n o === \"page\" && n === 0 && delete e[o], n === \"\" && delete e[o];\n }), e;\n};\nvar n0 = ({ children: t, collectionSlug: e, data: o, modifySearchParams: n, onQueryChange: r, orderableFieldName: s, query: i })=>{\n _s25();\n \"use no memo\";\n let l = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), a = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), { startRouteTransition: c } = Ye(), [u, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { getEntityConfig: f } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), m = f({\n collectionSlug: e\n }), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({});\n p.current.modified = u;\n let { onQueryChange: h } = Ir(), g = h || r, b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>o0(Yt(a)), [\n a\n ]), [C, y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>n ? b : {\n limit: i.limit,\n sort: i.sort\n }), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (D, _)=>{\n d(_ ?? !0);\n let T = nF(C, D, {\n defaults: {\n limit: i.limit,\n sort: i.sort\n }\n });\n if (n) {\n let A = `?${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...T,\n columns: JSON.stringify(T.columns),\n queryByGroup: JSON.stringify(T.queryByGroup)\n })}`;\n window.location.search !== A && c(()=>l.replace(A));\n } else typeof g == \"function\" && g(T);\n y(T);\n }, [\n C,\n i.limit,\n i.sort,\n n,\n g,\n c,\n l\n ]), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (D)=>{\n await v({\n page: D\n });\n }, [\n v\n ]), I = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"n0.useCallback[I]\": async (D)=>{\n await v({\n limit: D,\n page: 1\n });\n }\n }[\"n0.useCallback[I]\"], [\n v\n ]), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (D)=>{\n await v({\n search: D === \"\" ? void 0 : D\n });\n }, [\n v\n ]), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (D)=>{\n await v({\n sort: D\n });\n }, [\n v\n ]), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (D)=>{\n await v({\n where: D\n });\n }, [\n v\n ]), R = Qe(()=>{\n let D = o0({\n ...C || {},\n ...i || {}\n }), _ = `?${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...D,\n columns: JSON.stringify(D.columns),\n queryByGroup: JSON.stringify(D.queryByGroup)\n })}`;\n window.location.search !== _ && (y(D), window.history.replaceState(null, \"\", _));\n });\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n n && i && R();\n }, [\n n,\n i\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(t0, {\n value: {\n collectionSlug: e,\n data: o,\n defaultLimit: o?.limit,\n handlePageChange: x,\n handlePerPageChange: I,\n handleSearchChange: w,\n handleSortChange: F,\n handleWhereChange: S,\n isGroupingBy: !!(m?.admin?.groupBy && C?.groupBy),\n orderableFieldName: s,\n query: C,\n refineListData: v,\n setModified: d,\n ...p.current\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rF, {\n value: u,\n children: t\n })\n });\n};\n_s25(n0, \"ALNoddWdzWFz2m4wsk+BkjkV88M=\");\n\n\nvar s0 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(void 0), Nt = ()=>{\n let t = react__WEBPACK_IMPORTED_MODULE_0__.use(s0);\n if (t === void 0) throw new Error(\"useServerFunctions must be used within a ServerFunctionsProvider\");\n return t;\n}, i0 = ({ children: t, serverFunction: e })=>{\n if (!e) throw new Error(\"ServerFunctionsProvider requires a serverFunction prop\");\n let o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>await e({\n name: \"render-document-slots\",\n args: d\n }), [\n e\n ]), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n let { signal: f, ...m } = d;\n try {\n if (!f?.aborted) {\n let h = await e({\n name: \"schedule-publish\",\n args: {\n ...m\n }\n });\n if (!f?.aborted) return h;\n }\n } catch (h) {\n console.error(h);\n }\n let p = `Error scheduling ${m.type}`;\n return m.doc && (p += ` for document with ID ${m.doc.value} in collection ${m.doc.relationTo}`), {\n error: p\n };\n }, [\n e\n ]), r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n let { signal: f, ...m } = d || {};\n try {\n if (!f?.aborted) {\n let p = await e({\n name: \"form-state\",\n args: {\n fallbackLocale: !1,\n ...m\n }\n });\n if (!f?.aborted) return p;\n }\n } catch (p) {\n console.error(p);\n }\n return {\n state: null\n };\n }, [\n e\n ]), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n let { signal: f, ...m } = d || {};\n try {\n if (!f?.aborted) {\n let p = await e({\n name: \"table-state\",\n args: {\n fallbackLocale: !1,\n ...m\n }\n });\n if (!f?.aborted) return p;\n }\n } catch (p) {\n console.error(p);\n }\n }, [\n e\n ]), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n let { signal: f, ...m } = d || {};\n try {\n return await e({\n name: \"render-document\",\n args: {\n fallbackLocale: !1,\n ...m\n }\n });\n } catch (p) {\n console.error(p);\n }\n }, [\n e\n ]), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n let { signal: f, ...m } = d || {}, p = await e({\n name: \"copy-data-from-locale\",\n args: m\n });\n if (!f?.aborted) return {\n data: p\n };\n }, [\n e\n ]), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n let { signal: f, ...m } = d || {};\n try {\n let p = await e({\n name: \"get-folder-results-component-and-data\",\n args: m\n });\n if (!f?.aborted) return p;\n } catch (p) {\n console.error(p);\n }\n }, [\n e\n ]), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n try {\n return await e({\n name: \"render-field\",\n args: d\n });\n } catch (f) {\n console.error(f);\n }\n }, [\n e\n ]), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (d)=>{\n let { signal: f, ...m } = d || {};\n try {\n return await e({\n name: \"slugify\",\n args: {\n ...m\n }\n });\n } catch (p) {\n console.error(p);\n }\n }, [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(s0, {\n value: {\n _internal_renderField: c,\n copyDataFromLocale: l,\n getDocumentSlots: o,\n getFolderResultsComponentAndData: a,\n getFormState: r,\n getTableState: s,\n renderDocument: i,\n schedulePublish: n,\n serverFunction: e,\n slugify: u\n },\n children: t\n });\n};\n\n\n\n\nvar a0 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), kl = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(a0);\nvar Ou = ({ children: t, collectionSlug: e, columnState: o, LinkedCellOverride: n })=>{\n _s26();\n let { getEntityConfig: r } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { query: s, refineListData: i } = dt(), { admin: { defaultColumns: l } = {} } = r({\n collectionSlug: e\n }), [a, c] = react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic(o, {\n \"Ou.useOptimistic\": (h, g)=>g\n }[\"Ou.useOptimistic\"]), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (h)=>{\n let g = (a || []).map((b)=>b.accessor === h ? {\n ...b,\n active: !b.active\n } : b);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.startTransition)(()=>{\n c(g);\n }), await i({\n columns: (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToSearchParams)(g)\n });\n }, [\n i,\n a,\n c\n ]), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (h)=>{\n let { fromIndex: g, toIndex: b } = h, C = [\n ...a || []\n ], [y] = C.splice(g, 1);\n C.splice(b, 0, y), (0,react__WEBPACK_IMPORTED_MODULE_0__.startTransition)(()=>{\n c(C);\n }), await i({\n columns: (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToSearchParams)(C)\n });\n }, [\n a,\n i,\n c\n ]), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (h)=>{\n let g = s.columns;\n h.forEach((b)=>{\n let C = g.findIndex((y)=>b === y);\n C !== void 0 && g[C][0] === \"-\" && (g[C] = b.slice(1));\n }), await i({\n columns: g\n });\n }, [\n s,\n i\n ]), p = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ou.useCallback[p]\": async ()=>{\n await i({\n columns: l || []\n });\n }\n }[\"Ou.useCallback[p]\"], [\n l,\n i\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(a0, {\n value: {\n columns: a,\n LinkedCellOverride: n,\n moveColumn: f,\n resetColumnsState: p,\n setActiveColumns: m,\n toggleColumn: d,\n ...u.current\n },\n children: t\n });\n};\n_s26(Ou, \"C3BhbQV9GuCO740tzcKjBTav5DM=\", false, function() {\n return [\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic,\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic,\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic,\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic,\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic,\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic,\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic,\n react__WEBPACK_IMPORTED_MODULE_0__.useOptimistic\n ];\n});\n_c151 = Ou;\n\n\n\n\n\nvar Vu = \"pill-selector\", Gu = ({ draggable: t, onClick: e, pills: o })=>{\n _s27();\n let n = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Gu.useMemo[n]\": ()=>o.map({\n \"Gu.useMemo[n]\": (r, s)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n alignIcon: \"left\",\n \"aria-checked\": r.selected,\n className: [\n `${Vu}__pill`,\n r.selected && `${Vu}__pill--selected`\n ].filter(Boolean).join(\" \"),\n draggable: !!t,\n icon: r.selected ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ar, {}),\n id: r.name,\n onClick: {\n \"Gu.useMemo[n]\": ()=>{\n e && e({\n pill: r\n });\n }\n }[\"Gu.useMemo[n]\"],\n size: \"small\",\n children: r.Label ?? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Vu}__pill-label`,\n children: r.name\n })\n }, r.key ?? `${r.name}-${s}`)\n }[\"Gu.useMemo[n]\"])\n }[\"Gu.useMemo[n]\"], [\n o,\n e,\n t\n ]);\n return t ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Or, {\n className: Vu,\n ids: o.map((r)=>r.name),\n onDragEnd: ({ moveFromIndex: r, moveToIndex: s })=>{\n t.onDragEnd({\n moveFromIndex: r,\n moveToIndex: s\n });\n },\n children: n\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: Vu,\n children: n\n });\n};\n_s27(Gu, \"ozuO1mKbhVi46Yl3eQtgD7Ruv8E=\");\nvar Gp = ({ collectionSlug: t })=>{\n let { columns: e, moveColumn: o, toggleColumn: n } = kl(), r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), s = ct(), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>e?.filter((a)=>!((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsHiddenOrDisabled)(a.field) && !(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsID)(a.field)) && !a?.field?.admin?.disableListColumn), [\n e\n ]), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>i ? i.map((a, c)=>{\n let { accessor: u, active: d, field: f } = a, m = \"labelWithPrefix\" in f && f.labelWithPrefix !== void 0 ? f.labelWithPrefix : \"label\" in f && f.label !== void 0 ? f.label : \"name\" in f && f.name !== void 0 ? f.name : void 0;\n return {\n name: u,\n key: `${t}-${u}-${c}${s ? `-${s}-` : \"\"}${r}`,\n Label: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: m,\n unstyled: !0\n }),\n selected: d\n };\n }) : null, [\n t,\n s,\n i,\n r\n ]);\n return l ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gu, {\n draggable: {\n onDragEnd: ({ moveFromIndex: a, moveToIndex: c })=>{\n o({\n fromIndex: a,\n toIndex: c\n });\n }\n },\n onClick: ({ pill: a })=>{\n n(a.name);\n },\n pills: l\n }) : null;\n};\n_c152 = Gp;\n\n\n\n\n\n\nvar zp = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { getEntityConfig: o } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), n;\n e[0] !== o || e[1] !== t ? (n = ()=>t ? (typeof t == \"string\" ? [\n t\n ] : t).map((i)=>o({\n collectionSlug: i\n })) : [], e[0] = o, e[1] = t, e[2] = n) : n = e[2];\n let [r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(n);\n return r;\n};\n\n\n\n\n\n\n\n\n\n\nvar c0 = (t)=>{\n _s28();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { delayBeforeShow: o, inTimeout: n, minShowTime: r, outTimeout: s, show: i } = t, l = n + r + s, [a, c] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.e)(o), [u, d] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), p = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0), h = react__WEBPACK_IMPORTED_MODULE_0__.useRef(void 0), g;\n e[0] !== s ? (g = ()=>{\n m(!0), h.current = setTimeout(()=>{\n d(!1), m(!1);\n }, s);\n }, e[0] = s, e[1] = g) : g = e[1];\n let b = g, C, y;\n e[2] !== a || e[3] !== u || e[4] !== i || e[5] !== l || e[6] !== b ? (C = ()=>{\n let x = a && !u && i, I = u && !i;\n if (x) p.current = Date.now(), d(!0);\n else if (I) {\n let w = Date.now() - p.current, F = l - w;\n clearTimeout(h.current), h.current = setTimeout(b, Math.max(0, F));\n }\n }, y = [\n u,\n i,\n b,\n l,\n a\n ], e[2] = a, e[3] = u, e[4] = i, e[5] = l, e[6] = b, e[7] = C, e[8] = y) : (C = e[7], y = e[8]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(C, y);\n let v;\n return e[9] !== u || e[10] !== f || e[11] !== c ? (v = {\n isMounted: u,\n isUnmounting: f,\n triggerDelayedRender: c\n }, e[9] = u, e[10] = f, e[11] = c, e[12] = v) : v = e[12], v;\n};\n_s28(c0, \"eYMLHTqAPQzSG6NxI+r7R/9PD6M=\");\nvar mF = {\n isLoading: !1,\n loaders: [],\n loadingText: \"\",\n overlayType: null\n}, fF = (t, e)=>{\n let o = [\n ...t.loaders\n ], { type: n = \"fullscreen\", key: r = \"user\", loadingText: s } = e.payload;\n if (e.type === \"add\") o.push({\n type: n,\n key: r,\n loadingText: s\n });\n else if (e.type === \"remove\") {\n let l = o.findIndex((a)=>a.key === r && a.type === n);\n o.splice(l, 1);\n }\n let i = o?.length > 0 ? o[o.length - 1] : null;\n return {\n isLoading: !!i,\n loaders: o,\n loadingText: i?.loadingText || t?.loadingText,\n overlayType: i?.type || t?.overlayType\n };\n};\nvar u0 = 250, pF = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n isOnScreen: !1,\n toggleLoadingOverlay: void 0\n}), hF = ({ children: t })=>{\n _s29();\n let { t: e } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), o = e(\"general:loading\"), [n, r] = react__WEBPACK_IMPORTED_MODULE_0__.useReducer(fF, mF), { isMounted: s, isUnmounting: i, triggerDelayedRender: l } = c0({\n delayBeforeShow: 1e3,\n inTimeout: u0,\n minShowTime: 500,\n outTimeout: u0,\n show: n.isLoading\n }), a = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"hF.useCallback[a]\": ({ type: c, isLoading: u, key: d, loadingText: f = o })=>{\n u ? (l(), r({\n type: \"add\",\n payload: {\n type: c,\n key: d,\n loadingText: f\n }\n })) : r({\n type: \"remove\",\n payload: {\n type: c,\n key: d\n }\n });\n }\n }[\"hF.useCallback[a]\"], [\n l,\n o\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(pF, {\n value: {\n isOnScreen: s,\n toggleLoadingOverlay: a\n },\n children: [\n s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bn, {\n animationDuration: `${u0}ms`,\n loadingText: n.loadingText || o,\n overlayType: n.overlayType,\n show: !i\n }),\n t\n ]\n });\n}, Wp = ()=>{\n let t = react__WEBPACK_IMPORTED_MODULE_0__.use(pF);\n if (t === void 0) throw new Error(\"useLoadingOverlay must be used within a LoadingOverlayProvider\");\n return t;\n};\n_s29(hF, \"vyOjtktv7He8ELl3LoyaAN14rIs=\");\nvar vn = \"loading-overlay\", bn = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { animationDuration: o, loadingText: n, overlayType: r, show: s } = t, i = s === void 0 ? !0 : s, { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), a = i ? `${vn}--entering` : `${vn}--exiting`, c = r ? `${vn}--${r}` : \"\", u;\n e[0] !== a || e[1] !== c ? (u = [\n vn,\n a,\n c\n ].filter(Boolean), e[0] = a, e[1] = c, e[2] = u) : u = e[2];\n let d = u.join(\" \"), f = o || \"500ms\", m;\n return e[3] !== n || e[4] !== l || e[5] !== d || e[6] !== f ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: d,\n style: {\n animationDuration: f\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vn}__bars`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${vn}__bar`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${vn}__bar`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${vn}__bar`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${vn}__bar`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${vn}__bar`\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${vn}__text`,\n children: n || l(\"general:loading\")\n })\n ]\n }), e[3] = n, e[4] = l, e[5] = d, e[6] = f, e[7] = m) : m = e[7], m;\n}, bF = (t)=>{\n _s30();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { name: o, type: n, loadingText: r, show: s } = t, i = n === void 0 ? \"fullscreen\" : n, { toggleLoadingOverlay: l } = Wp(), a, c;\n return e[0] !== o || e[1] !== r || e[2] !== s || e[3] !== l || e[4] !== i ? (a = ()=>(l({\n type: i,\n isLoading: s,\n key: o,\n loadingText: r || void 0\n }), ()=>{\n l({\n type: i,\n isLoading: !1,\n key: o\n });\n }), c = [\n s,\n l,\n o,\n i,\n r\n ], e[0] = o, e[1] = r, e[2] = s, e[3] = l, e[4] = i, e[5] = a, e[6] = c) : (a = e[5], c = e[6]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(a, c), null;\n}, p8 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { name: o, type: n, action: r, formIsLoading: s, loadingSuffix: i } = t, l = n === void 0 ? \"fullscreen\" : n, a = s === void 0 ? !1 : s, c = Mr(), { i18n: u, t: d } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), m = `${{\n create: d(\"general:creating\"),\n loading: d(\"general:loading\"),\n update: d(\"general:updating\")\n }[r]} ${i ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, u) : \"\"}`, p;\n return e[0] !== a || e[1] !== c || e[2] !== o || e[3] !== m || e[4] !== l ? (p = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bF, {\n loadingText: m.trim(),\n name: o,\n show: a || c,\n type: l\n }), e[0] = a, e[1] = c, e[2] = o, e[3] = m, e[4] = l, e[5] = p) : p = e[5], p;\n};\n_s30(bF, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\nfunction _r(t) {\n if (t) try {\n t.abort();\n } catch {}\n}\nfunction Tr(t) {\n let e = new AbortController;\n if (t.current) try {\n t.current.abort();\n } catch {}\n return t.current = e, e;\n}\n_c153 = Tr;\n\n\nvar vF = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), yF = ({ children: t, ...e })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vF, {\n value: {\n ...e\n },\n children: t\n }), zu = ()=>{\n let t = (0,react__WEBPACK_IMPORTED_MODULE_0__.use)(vF);\n if (!t) throw new Error(\"useDocumentDrawerContext must be used within a DocumentDrawerProvider\");\n return t;\n};\nvar wF = ({ id: t, collectionSlug: e, disableActions: o, drawerSlug: n, initialData: r, onDelete: s, onDuplicate: i, onSave: l, overrideEntityVisibility: a = !0, redirectAfterCreate: c, redirectAfterDelete: u, redirectAfterDuplicate: d, redirectAfterRestore: f })=>{\n _s31();\n let { getEntityConfig: m } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), [p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>m({\n collectionSlug: e\n })), h = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), { closeModal: g } = ie(), { t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { renderDocument: C } = Nt(), [y, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(void 0), [x, I] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T, A = !1)=>{\n let k = Tr(h);\n (async ()=>{\n A && I(!0);\n try {\n let E = await C({\n collectionSlug: e,\n disableActions: o,\n docID: T,\n drawerSlug: n,\n initialData: r,\n overrideEntityVisibility: a,\n redirectAfterCreate: c,\n redirectAfterDelete: u !== void 0 ? u : !1,\n redirectAfterDuplicate: d !== void 0 ? d : !1,\n redirectAfterRestore: f !== void 0 ? f : !1,\n signal: k.signal\n });\n E?.Document && (v(E.Document), I(!1));\n } catch (E) {\n ee.error(E?.message || b(\"error:unspecific\")), g(n);\n }\n h.current = null;\n })();\n }, [\n e,\n o,\n n,\n r,\n u,\n d,\n f,\n C,\n c,\n g,\n a,\n b\n ]), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n T.operation === \"create\" && F(T.doc.id), typeof l == \"function\" && l({\n ...T,\n collectionConfig: p\n });\n }, [\n l,\n p,\n F\n ]), R = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n F(T.doc.id), typeof i == \"function\" && i({\n ...T,\n collectionConfig: p\n });\n }, [\n i,\n p,\n F\n ]), D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T)=>{\n typeof s == \"function\" && s({\n ...T,\n collectionConfig: p\n }), g(n);\n }, [\n s,\n g,\n n,\n p\n ]), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n F(void 0, !0);\n }, [\n F\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n !y && !w.current && (F(t, !0), w.current = !0);\n }, [\n y,\n F,\n t\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let T = h.current;\n return ()=>{\n _r(T);\n };\n }, []), x ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bn, {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yF, {\n clearDoc: _,\n drawerSlug: n,\n onDelete: D,\n onDuplicate: R,\n onSave: S,\n children: y\n });\n};\n_s31(wF, \"7nBJmTY8o48DhMhm1zRP0YHmio8=\");\nvar Cs = \"doc-drawer\", I8 = ({ id: t, collectionSlug: e, depth: o, uuid: n })=>`doc-drawer_${e}_${o}${t ? `_${t}` : \"\"}_${n}`, _8 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(2), { children: o, className: n, collectionSlug: r, disabled: s, drawerSlug: i, onClick: l, operation: a, ...c } = t, { t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [d] = zp(r), f = u(a === \"create\" ? \"fields:addNewLabel\" : \"general:editLabel\", {\n label: d?.labels.singular\n }), m;\n return e[0] !== n ? (m = [\n n,\n `${Cs}__toggler`\n ].filter(Boolean), e[0] = n, e[1] = m) : m = e[1], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ms, {\n \"aria-label\": f,\n className: m.join(\" \"),\n disabled: s,\n onClick: l,\n slug: i,\n ...c,\n children: o\n });\n}, p0 = (t)=>{\n let { drawerSlug: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n className: Cs,\n gutter: !1,\n Header: null,\n slug: e,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wF, {\n ...t\n })\n });\n}, kt = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(38), { id: o, collectionSlug: n, overrideEntityVisibility: r } = t, s = ct(), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), { closeModal: l, modalState: a, openModal: c, toggleModal: u } = ie(), [d, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), m;\n e[0] !== n || e[1] !== s || e[2] !== o || e[3] !== i ? (m = I8({\n id: o,\n collectionSlug: n,\n depth: s,\n uuid: i\n }), e[0] = n, e[1] = s, e[2] = o, e[3] = i, e[4] = m) : m = e[4];\n let p = m, h, g;\n e[5] !== p || e[6] !== a ? (h = ()=>{\n f(!!a[p]?.isOpen);\n }, g = [\n a,\n p\n ], e[5] = p, e[6] = a, e[7] = h, e[8] = g) : (h = e[7], g = e[8]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(h, g);\n let b;\n e[9] !== p || e[10] !== u ? (b = ()=>{\n u(p);\n }, e[9] = p, e[10] = u, e[11] = b) : b = e[11];\n let C = b, y;\n e[12] !== l || e[13] !== p ? (y = ()=>{\n l(p);\n }, e[12] = l, e[13] = p, e[14] = y) : y = e[14];\n let v = y, x;\n e[15] !== p || e[16] !== c ? (x = ()=>{\n c(p);\n }, e[15] = p, e[16] = c, e[17] = x) : x = e[17];\n let I = x, w;\n e[18] !== n || e[19] !== p || e[20] !== o || e[21] !== r ? (w = (A)=>/*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(p0, {\n ...A,\n collectionSlug: n,\n drawerSlug: p,\n id: o,\n key: p,\n overrideEntityVisibility: r\n }), e[18] = n, e[19] = p, e[20] = o, e[21] = r, e[22] = w) : w = e[22];\n let F = w, S;\n e[23] !== n || e[24] !== p || e[25] !== o ? (S = (A)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_8, {\n ...A,\n collectionSlug: n,\n drawerSlug: p,\n operation: o ? \"update\" : \"create\"\n }), e[23] = n, e[24] = p, e[25] = o, e[26] = S) : S = e[26];\n let R = S, D;\n e[27] !== v || e[28] !== p || e[29] !== s || e[30] !== d || e[31] !== I || e[32] !== C ? (D = {\n closeDrawer: v,\n drawerDepth: s,\n drawerSlug: p,\n isDrawerOpen: d,\n openDrawer: I,\n toggleDrawer: C\n }, e[27] = v, e[28] = p, e[29] = s, e[30] = d, e[31] = I, e[32] = C, e[33] = D) : D = e[33];\n let _ = D, T;\n return e[34] !== F || e[35] !== _ || e[36] !== R ? (T = [\n F,\n R,\n _\n ], e[34] = F, e[35] = _, e[36] = R, e[37] = T) : T = e[37], T;\n};\n\n\nvar _F = \"no-results\";\nfunction Gn({ Actions: t, Message: e }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: _F,\n children: [\n e,\n t && t.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${_F}__actions`,\n children: t.map((o, n)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: o\n }, n))\n })\n ]\n });\n}\n_c154 = Gn;\n\n\n\n\n\n\n\nfunction yn(t, e) {\n let o = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(t), s, i;\n return o[0] !== e || o[1] !== t ? (s = ()=>{\n let l = setTimeout(()=>{\n r(t);\n }, e);\n return ()=>{\n clearTimeout(l);\n };\n }, i = [\n t,\n e\n ], o[0] = e, o[1] = t, o[2] = s, o[3] = i) : (s = o[2], i = o[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(s, i), n;\n}\nfunction TF(t, e) {\n switch(e.type){\n case \"ADD_LOADED\":\n {\n let o = {\n ...t\n };\n typeof o[e.relationTo] != \"object\" && (o[e.relationTo] = {});\n let n = [\n ...e.idsToLoad\n ];\n return Array.isArray(e.docs) && e.docs.forEach((r)=>{\n n.splice(n.indexOf(r.id), 1), o[e.relationTo][r.id] = r;\n }), n.forEach((r)=>{\n o[e.relationTo][r] = !1;\n }), o;\n }\n case \"REQUEST\":\n {\n let o = {\n ...t\n };\n return e.docs.forEach(({ relationTo: n, value: r })=>{\n typeof o[n] != \"object\" && (o[n] = {}), o[n][r] = null;\n }), o;\n }\n default:\n return t;\n }\n}\n_c155 = TF;\nvar DF = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), Hu = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(15), { children: o } = t, n;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (n = {}, e[0] = n) : n = e[0];\n let [r, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(TF, n), i = yn(r, 100), { config: l } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { collections: a, routes: c } = l, { api: u } = c, { i18n: d } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { code: f } = ye(), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(f), p;\n e[1] !== u || e[2] !== a || e[3] !== i || e[4] !== d || e[5] !== f ? (p = (x)=>{\n let I = x === void 0 ? !1 : x;\n Object.entries(i).forEach(async (w)=>{\n let [F, S] = w, R = [];\n if (Object.entries(S).forEach((D)=>{\n let [_, T] = D;\n (T === null || I) && R.push(_);\n }), R.length > 0) {\n let D = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: u,\n path: `/${F}`\n }), _ = new URLSearchParams, T = {};\n _.append(\"depth\", \"0\"), _.append(\"limit\", \"250\");\n let A = a.find((B)=>B.slug === F);\n if (A.admin.enableListViewSelectAPI) {\n let B = A.admin.useAsTitle ?? \"id\";\n T[B] = !0, A.upload && (0,payload_shared__WEBPACK_IMPORTED_MODULE_18__.appendUploadSelectFields)({\n collectionConfig: A,\n select: T\n });\n }\n f && _.append(\"locale\", f);\n let k = R.map(O8);\n _.append(\"where[id][in]\", k.join(\",\"));\n let P = `?${_.toString()}&${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n select: T\n })}`, E = await fetch(`${D}${P}`, {\n credentials: \"include\",\n headers: {\n \"Accept-Language\": d.language\n }\n });\n if (E.ok) {\n let B = await E.json();\n B.docs && s({\n type: \"ADD_LOADED\",\n docs: B.docs,\n idsToLoad: R,\n relationTo: F\n });\n } else s({\n type: \"ADD_LOADED\",\n docs: [],\n idsToLoad: R,\n relationTo: F\n });\n }\n });\n }, e[1] = u, e[2] = a, e[3] = i, e[4] = d, e[5] = f, e[6] = p) : p = e[6];\n let h = p, g, b;\n e[7] !== h || e[8] !== f ? (g = ()=>{\n h(f && m.current !== f), m.current = f;\n }, b = [\n f,\n h\n ], e[7] = h, e[8] = f, e[9] = g, e[10] = b) : (g = e[9], b = e[10]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(g, b);\n let C;\n e[11] === Symbol.for(\"react.memo_cache_sentinel\") ? (C = (x)=>{\n s({\n type: \"REQUEST\",\n docs: x\n });\n }, e[11] = C) : C = e[11];\n let y = C, v;\n return e[12] !== o || e[13] !== r ? (v = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(DF, {\n value: {\n documents: r,\n getRelationships: y\n },\n children: o\n }), e[12] = o, e[13] = r, e[14] = v) : v = e[14], v;\n}, h0 = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(DF);\nfunction O8(t) {\n return String(t);\n}\n_c156 = O8;\n\n\nvar g0 = ({ allowCreate: t, baseClass: e, buttonStyle: o, className: n, collections: r, i18n: s, icon: i, label: l, onClick: a, permissions: c, relationTo: u })=>t ? Array.isArray(u) ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${e}__add-new-polymorphic-wrapper`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: o,\n className: n,\n icon: i,\n children: l\n }),\n buttonType: \"custom\",\n horizontalAlign: \"center\",\n render: ({ close: f })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: u.map((m)=>c.collections[m]?.create ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n className: `${e}__relation-button--${m}`,\n onClick: ()=>{\n f(), a(m);\n },\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r.find((p)=>p.slug === m).labels.singular, s)\n }, m) : null)\n }),\n size: \"medium\"\n })\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: o,\n className: n,\n onClick: ()=>a(),\n children: l\n }) : null;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar z8 = Symbol.for(\"react.lazy\");\nfunction Xp(t) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(t) || t?.$$typeof === z8;\n}\n_c157 = Xp;\nvar RF = (t, e, o)=>{\n if ((e?.type === \"select\" || e?.type === \"radio\") && Array.isArray(e.options)) {\n let n = e.options.find((r)=>typeof r == \"object\" ? r.value === t : r === t);\n if (n) return typeof n == \"object\" && \"label\" in n ? Xp(n.label) ? n.label : (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(n.label, o) || n.value : n;\n }\n return t;\n};\n_c158 = RF;\n\n\nvar Yp = ({ cellData: t, nowrap: e })=>{\n let o = t?.length > 100 ? `${t.substring(0, 100)}\\u2026` : t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"code\", {\n className: \"code-cell\",\n style: e ? {\n whiteSpace: \"nowrap\"\n } : {},\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: o\n })\n });\n};\n_c159 = Yp;\n\n\n\n\nvar EF = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(2), { cellData: o, field: n } = t, { labels: r } = n, { i18n: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i = o ?? [], l = i.length === 1 ? `${i.length} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r?.singular || s.t(\"general:rows\"), s)}` : `${i.length} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r?.plural || s.t(\"general:rows\"), s)}`, a;\n return e[0] !== l ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: l\n }), e[0] = l, e[1] = a) : a = e[1], a;\n};\n_c160 = EF;\n\n\n\n\nvar NF = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(2), { cellData: o, field: n } = t, { blockReferences: r, blocks: s, labels: i } = n, { i18n: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: a } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), c = Array.isArray(o) ? o.map(Z8) : [], u = (r ?? s)?.map((p)=>{\n let h = typeof p == \"string\" ? a.blocksMap[p] : p;\n return {\n slug: h.slug,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(h.labels.singular, l)\n };\n }), d = `0 ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i?.plural, l)}`, f = (p)=>p.map((h)=>u.filter((b)=>b.slug === h)?.[0]?.label).join(\", \");\n if (c.length > 5) {\n let p = c.length - 5;\n d = `${c.length} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i?.plural, l)} - ${l.t(\"fields:itemsAndMore\", {\n count: p,\n items: f(c.slice(0, 5))\n })}`;\n } else c.length > 0 && (d = `${c.length} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(c.length === 1 ? i?.singular : i?.plural, l)} - ${f(c)}`);\n let m;\n return e[0] !== d ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: d\n }), e[0] = d, e[1] = m) : m = e[1], m;\n};\n_c161 = NF;\nfunction Z8(t) {\n let { blockType: e } = t;\n return e;\n}\n_c162 = Z8;\n\n\n\nvar kF = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { cellData: o } = t, { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), r = `general:${o}`, s;\n return e[0] !== n || e[1] !== r ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"code\", {\n className: \"bool-cell\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: n(r).toLowerCase()\n })\n }), e[0] = n, e[1] = r, e[2] = s) : s = e[2], s;\n};\n\n\n\nvar b0 = (t)=>{\n let { cellData: e, field: o, rowData: n } = t, { name: r, accessor: s, admin: i, timezone: l } = o, { date: a } = i === void 0 ? {} : i, { config: c } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { admin: u } = c, { dateFormat: d } = u, { i18n: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), p = `${s || r}_tz`, h = l && n ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_19__.getObjectDotNotation)(n, p, void 0) : void 0, g = a?.displayFormat || d;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: !!e && Gr({\n date: e,\n i18n: f,\n pattern: g,\n timezone: h\n })\n });\n};\n\n\n\n\n\n\n\n\nvar Jp = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n height: \"150\",\n style: {\n backgroundColor: \"#333333\"\n },\n viewBox: \"0 0 150 150\",\n width: \"150\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M82.8876 50.5H55.5555V100.5H94.4444V61.9818H82.8876V50.5Z\",\n fill: \"white\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M82.8876 61.9818H94.4444L82.8876 50.5V61.9818Z\",\n fill: \"#9A9A9A\"\n })\n ]\n });\n_c163 = Jp;\nvar Qp = \"thumbnail\", Fr = (t)=>{\n _s32();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { className: o, doc: n, fileSrc: r, height: s, imageCacheTag: i, size: l, width: a } = t, c = o === void 0 ? \"\" : o, { filename: u } = n === void 0 ? {} : n, [d, f] = react__WEBPACK_IMPORTED_MODULE_0__.useState(void 0), m = `${Qp}--size-${l || \"medium\"}`, p;\n e[0] !== c || e[1] !== m ? (p = [\n Qp,\n m,\n c\n ], e[0] = c, e[1] = m, e[2] = p) : p = e[2];\n let h = p.join(\" \"), g, b;\n e[3] !== r ? (g = ()=>{\n if (!r) {\n f(!1);\n return;\n }\n f(void 0);\n let y = new Image;\n y.src = r, y.onload = ()=>{\n f(!0);\n }, y.onerror = ()=>{\n f(!1);\n };\n }, b = [\n r\n ], e[3] = r, e[4] = g, e[5] = b) : (g = e[4], b = e[5]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(g, b);\n let C = null;\n if (r) {\n let y = r?.includes(\"?\") ? \"&\" : \"?\";\n C = i ? `${r}${y}${encodeURIComponent(i)}` : r;\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: h,\n children: [\n d === void 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"100%\"\n }),\n d && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: u,\n height: s,\n src: C,\n width: a\n }),\n d === !1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jp, {})\n ]\n });\n};\n_s32(Fr, \"hqTvOzhQIorvPYydpN5lKuB7BE8=\");\nfunction MF(t) {\n _s33();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { alt: o, className: n, filename: r, fileSrc: s, imageCacheTag: i, size: l } = t, a = n === void 0 ? \"\" : n, [c, u] = react__WEBPACK_IMPORTED_MODULE_0__.useState(void 0), d = `${Qp}--size-${l || \"medium\"}`, f;\n e[0] !== a || e[1] !== d ? (f = [\n Qp,\n d,\n a\n ], e[0] = a, e[1] = d, e[2] = f) : f = e[2];\n let m = f.join(\" \"), p, h;\n e[3] !== s ? (p = ()=>{\n if (!s) {\n u(!1);\n return;\n }\n u(void 0);\n let C = new Image;\n C.src = s, C.onload = ()=>{\n u(!0);\n }, C.onerror = ()=>{\n u(!1);\n };\n }, h = [\n s\n ], e[3] = s, e[4] = p, e[5] = h) : (p = e[4], h = e[5]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(p, h);\n let g = \"\";\n if (s) {\n let C = s?.includes(\"?\") ? \"&\" : \"?\";\n g = i ? `${s}${C}${encodeURIComponent(i)}` : s;\n }\n let b;\n return e[6] !== o || e[7] !== m || e[8] !== c || e[9] !== r || e[10] !== g ? (b = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: m,\n children: [\n c === void 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"100%\"\n }),\n c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: o || r,\n src: g\n }),\n c === !1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jp, {})\n ]\n }), e[6] = o, e[7] = m, e[8] = c, e[9] = r, e[10] = g, e[11] = b) : b = e[11], b;\n}\n_s33(MF, \"trxnLwbb2wqfjXfSf6Mz9zHP/qI=\");\n_c164 = MF;\nvar y0 = \"file\", Kp = ({ cellData: t, collectionConfig: e, field: o, rowData: n })=>{\n if ((\"displayPreview\" in o ? o.displayPreview : void 0) ?? e.upload?.displayPreview ?? !0) {\n let i = (0,payload_shared__WEBPACK_IMPORTED_MODULE_20__.isImage)(n?.mimeType), l = i ? n?.thumbnailURL || n?.url : n?.thumbnailURL;\n return i && (l = (0,payload_shared__WEBPACK_IMPORTED_MODULE_21__.getBestFitFromSizes)({\n sizes: n?.sizes,\n thumbnailURL: n?.thumbnailURL,\n url: n?.url,\n width: n?.width\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: y0,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Fr, {\n className: `${y0}__thumbnail`,\n collectionSlug: e?.slug,\n doc: {\n ...n,\n filename: t\n },\n fileSrc: l,\n imageCacheTag: e?.upload?.cacheTags && n?.updatedAt,\n size: \"small\",\n uploadConfig: e?.upload\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${y0}__filename`,\n children: String(t)\n })\n ]\n });\n } else return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: String(t)\n });\n};\n\n\n\nfunction OF(t, e) {\n let o = JSON.stringify(t);\n return o.length / e > 1.5 ? `${o.substring(0, e)}\\u2026` : o;\n}\n_c165 = OF;\nvar VF = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { cellData: o } = t, { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n try {\n let r;\n if (e[0] !== o) {\n let s = OF(o, 100);\n r = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"code\", {\n className: \"json-cell\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: s\n })\n }), e[0] = o, e[1] = r;\n } else r = e[1];\n return r;\n } catch {\n let s;\n return e[2] !== n ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"code\", {\n className: \"json-cell\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: n(\"general:error\")\n })\n }), e[2] = n, e[3] = s) : s = e[3], s;\n }\n};\n_c166 = VF;\n\n\n\n\nvar GF = !!(typeof window < \"u\" && window.document && window.document.createElement);\nvar cV = \"relationship-cell\", th = 3, oh = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(39), { cellData: o, customCellProps: n, field: r, field: s } = t, { label: i } = s, l = \"relationTo\" in r && r.relationTo || \"collection\" in r && r.collection, a = \"collection\" in r ? o?.docs : o, { config: c, getEntityConfig: u } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { collections: d } = c, [f, m] = Li(), p;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (p = [], e[0] = p) : p = e[0];\n let [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(p), { documents: b, getRelationships: C } = h0(), [y, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { i18n: x, t: I } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), w = GF ? m?.boundingClientRect?.top < window.innerHeight : !1, F;\n e[1] !== a || e[2] !== C || e[3] !== y || e[4] !== w || e[5] !== l ? (F = ()=>{\n if ((a || typeof a == \"number\") && w && !y) {\n let T = [], A = Array.isArray(a) ? a : [\n a\n ];\n A.slice(0, A.length < th ? A.length : th).forEach((k)=>{\n typeof k == \"object\" && \"relationTo\" in k && \"value\" in k && T.push(k), (typeof k == \"number\" || typeof k == \"string\") && typeof l == \"string\" && T.push({\n relationTo: l,\n value: k\n });\n }), C(T), v(!0), g(T);\n }\n }, e[1] = a, e[2] = C, e[3] = y, e[4] = w, e[5] = l, e[6] = F) : F = e[6];\n let S;\n e[7] !== a || e[8] !== d || e[9] !== C || e[10] !== y || e[11] !== w || e[12] !== l ? (S = [\n a,\n l,\n d,\n w,\n y,\n C\n ], e[7] = a, e[8] = d, e[9] = C, e[10] = y, e[11] = w, e[12] = l, e[13] = S) : S = e[13], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(F, S);\n let R;\n e[14] !== y ? (R = ()=>{\n y && v(!1);\n }, e[14] = y, e[15] = R) : R = e[15];\n let D;\n e[16] !== a ? (D = [\n a\n ], e[16] = a, e[17] = D) : D = e[17], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(R, D);\n let _;\n if (e[18] !== a || e[19] !== c.admin || e[20] !== n || e[21] !== b || e[22] !== r || e[23] !== u || e[24] !== x || e[25] !== f || e[26] !== i || e[27] !== I || e[28] !== h) {\n let T;\n e[30] !== c.admin || e[31] !== n || e[32] !== b || e[33] !== r || e[34] !== u || e[35] !== x || e[36] !== I || e[37] !== h.length ? (T = (A, k)=>{\n let { relationTo: P, value: E } = A, B = b[P][E], $ = u({\n collectionSlug: P\n }), M = qo({\n collectionConfig: $,\n data: B || null,\n dateFormat: c.admin.dateFormat,\n fallback: `${I(\"general:untitled\")} - ID: ${E}`,\n i18n: x\n }), L = null;\n return r.type === \"upload\" && ((\"displayPreview\" in r ? r.displayPreview : void 0) ?? $.upload?.displayPreview ?? !0) && B && (L = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Kp, {\n cellData: M,\n collectionConfig: $,\n collectionSlug: $.slug,\n customCellProps: n,\n field: r,\n rowData: B\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n B === !1 && `${I(\"general:untitled\")} - ID: ${E}`,\n B === null && `${I(\"general:loading\")}...`,\n B ? L || M : null,\n h.length > k + 1 && \", \"\n ]\n }, k);\n }, e[30] = c.admin, e[31] = n, e[32] = b, e[33] = r, e[34] = u, e[35] = x, e[36] = I, e[37] = h.length, e[38] = T) : T = e[38], _ = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: cV,\n ref: f,\n children: [\n h.map(T),\n Array.isArray(a) && a.length > th && I(\"fields:itemsAndMore\", {\n count: a.length - th,\n items: \"\"\n }),\n h.length === 0 && I(\"general:noLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i || \"\", x)\n })\n ]\n }), e[18] = a, e[19] = c.admin, e[20] = n, e[21] = b, e[22] = r, e[23] = u, e[24] = x, e[25] = f, e[26] = i, e[27] = I, e[28] = h, e[29] = _;\n } else _ = e[29];\n return _;\n};\n\n\n\n\n\nvar C0 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { cellData: o, field: n } = t, { options: r } = n, { i18n: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n e[0] !== s || e[1] !== r ? (i = (c)=>c.map((u)=>{\n let d = r.filter((f)=>f.value === u)?.[0]?.label;\n return (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(d, s);\n }).join(\", \"), e[0] = s, e[1] = r, e[2] = i) : i = e[2];\n let l = i, a;\n if (e[3] !== o || e[4] !== l || e[5] !== r) {\n let c;\n (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.optionsAreObjects)(r) ? c = Array.isArray(o) ? l(o) : l([\n o\n ]) : c = Array.isArray(o) ? o.join(\", \") : o, a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: c\n }), e[3] = o, e[4] = l, e[5] = r, e[6] = a;\n } else a = e[6];\n return a;\n};\n_c167 = C0;\n\n\nvar UF = ({ cellData: t })=>{\n let e = t?.length > 100 ? `${t.substring(0, 100)}\\u2026` : t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: e\n });\n};\n_c168 = UF;\nvar x0 = {\n array: EF,\n blocks: NF,\n checkbox: kF,\n code: Yp,\n date: b0,\n File: Kp,\n join: oh,\n json: VF,\n radio: C0,\n relationship: oh,\n select: C0,\n textarea: UF,\n upload: oh\n};\nvar Uu = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(16), { cellData: o, className: n, collectionSlug: r, field: s, field: i, link: l, linkURL: a, onClick: c, rowData: u, viewType: d } = t, { admin: f } = i, { i18n: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: p, getEntityConfig: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: g } = p, { admin: b } = g, C, y;\n if (e[0] !== f || e[1] !== b || e[2] !== o || e[3] !== n || e[4] !== r || e[5] !== s || e[6] !== h || e[7] !== m || e[8] !== l || e[9] !== a || e[10] !== c || e[11] !== t || e[12] !== u || e[13] !== d) {\n y = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let v = h({\n collectionSlug: r\n }), x = f && \"className\" in f ? f.className : void 0, I = n || (s.admin && \"className\" in s.admin ? s.admin.className : null) || x, w = c, F = \"span\", S = {\n className: I\n };\n if (l && (S.prefetch = !1, F = Qt, a ? S.href = a : S.href = v?.slug ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: b,\n path: `/collections/${v?.slug}${d === \"trash\" ? \"/trash\" : \"\"}/${encodeURIComponent(u.id)}`\n }) : \"\"), typeof w == \"function\" && (F = \"button\", S.type = \"button\", S.onClick = ()=>{\n w({\n cellData: o,\n collectionSlug: v?.slug,\n rowData: u\n });\n }), (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsID)(s)) {\n y = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(F, {\n ...S,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Yp, {\n cellData: `ID: ${o}`,\n collectionConfig: v,\n collectionSlug: r,\n field: {\n ...s,\n type: \"code\"\n },\n nowrap: !0,\n rowData: u\n })\n });\n break e;\n }\n let R = RF(o, s, m), D = typeof o < \"u\" && x0[s.type], _ = null;\n if (Xp(R)) _ = R;\n else if (D) _ = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(D, {\n cellData: o,\n rowData: u,\n ...t\n });\n else if (!D) if (v?.upload && (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(s) && s.name === \"filename\" && s.type === \"text\") {\n let T = x0.File;\n _ = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(T, {\n cellData: o,\n rowData: u,\n ...t,\n collectionConfig: v,\n field: s\n });\n } else {\n y = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(F, {\n ...S,\n children: [\n (R === \"\" || typeof R > \"u\" || R === null) && m.t(\"general:noLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)((\"label\" in s ? s.label : null) || \"data\", m)\n }),\n typeof R == \"string\" && R,\n typeof R == \"number\" && R,\n typeof R == \"object\" && R !== null && JSON.stringify(R)\n ]\n });\n break e;\n }\n if ((s.type === \"select\" || s.type === \"radio\") && s.options.length && o) {\n let T = Array.isArray(o) ? o.map(CV).join(\" \") : `selected--${o}`, A = [\n S.className,\n T\n ].filter(Boolean).join(\" \");\n y = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(F, {\n ...S,\n className: A,\n children: _\n });\n break e;\n }\n C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(F, {\n ...S,\n children: _\n });\n }\n e[0] = f, e[1] = b, e[2] = o, e[3] = n, e[4] = r, e[5] = s, e[6] = h, e[7] = m, e[8] = l, e[9] = a, e[10] = c, e[11] = t, e[12] = u, e[13] = d, e[14] = C, e[15] = y;\n } else C = e[14], y = e[15];\n return y !== Symbol.for(\"react.early_return_sentinel\") ? y : C;\n};\n_c169 = Uu;\nfunction CV(t) {\n return `selected--${t}`;\n}\n_c170 = CV;\nvar wV = \"default-cell\", ZF = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null), w0 = ()=>react__WEBPACK_IMPORTED_MODULE_0__.use(ZF), SV = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), { clientProps: o, columnIndex: n, isLinkedColumn: r } = t, { drawerSlug: s, onSelect: i } = Ir(), { LinkedCellOverride: l } = kl(), a;\n if (e[0] !== l || e[1] !== o || e[2] !== n || e[3] !== s || e[4] !== r || e[5] !== i) {\n let c = {\n ...o,\n columnIndex: n\n };\n if (r && s) {\n c.className = `${wV}__first-cell`, c.link = !1;\n let u;\n e[7] !== i ? (u = (d)=>{\n let { collectionSlug: f, rowData: m } = d;\n typeof i == \"function\" && i({\n collectionSlug: f,\n doc: m,\n docID: m.id\n });\n }, e[7] = i, e[8] = u) : u = e[8], c.onClick = u;\n }\n a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ZF, {\n value: c,\n children: r && l ? l : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Uu, {\n ...c\n })\n }), e[0] = l, e[1] = o, e[2] = n, e[3] = s, e[4] = r, e[5] = i, e[6] = a;\n } else a = e[6];\n return a;\n};\nvar JF = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { onDrawerOpen: o } = t, n = w0(), r;\n return e[0] !== n || e[1] !== o ? (r = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"drawer-link\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Uu, {\n ...n,\n className: \"drawer-link__cell\",\n link: !1,\n onClick: null\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: \"drawer-link__doc-drawer-toggler\",\n onClick: ()=>{\n o(n.rowData.id, n.collectionSlug);\n },\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vr, {})\n })\n ]\n }), e[0] = n, e[1] = o, e[2] = r) : r = e[2], r;\n};\n_c171 = JF;\n\n\n\n\n\n\n\nvar I0 = \"clickable-arrow\", QF = (t)=>{\n let { direction: e = \"right\", isDisabled: o = !1, updatePage: n } = t, r = [\n I0,\n o && `${I0}--is-disabled`,\n e && `${I0}--${e}`\n ].filter(Boolean).join(\" \");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: r,\n disabled: o,\n onClick: o ? void 0 : n,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {})\n });\n};\n\n\nvar rh = \"paginator__page\", _0 = ({ isCurrent: t, isFirstPage: e = !1, isLastPage: o = !1, page: n = 1, updatePage: r })=>{\n let s = [\n rh,\n t && `${rh}--is-current`,\n e && `${rh}--is-first-page`,\n o && `${rh}--is-last-page`\n ].filter(Boolean).join(\" \");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: s,\n onClick: ()=>r(n),\n type: \"button\",\n children: n\n });\n};\n\n\nvar KF = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: \"paginator__separator\",\n children: \"\\u2014\"\n });\n_c172 = KF;\nvar DV = {\n ClickableArrow: QF,\n Page: _0,\n Separator: KF\n}, RV = \"paginator\", Xu = (t)=>{\n let { hasNextPage: e = !1, hasPrevPage: o = !1, nextPage: n = null, numberOfNeighbors: r = 1, onChange: s, page: i, prevPage: l = null, totalPages: a = null } = t;\n if (!o && !e) return null;\n let c = (p)=>{\n typeof s == \"function\" && s(p);\n }, u = Array.from({\n length: a\n }, (p, h)=>h + 1), d = i - 1 - r;\n d <= 0 && (d = 0);\n let f = i - 1 + r + 1, m = u.slice(d, f);\n return i - r - 1 >= 2 && m.unshift({\n type: \"Separator\"\n }), i > r + 1 && m.unshift({\n type: \"Page\",\n props: {\n isFirstPage: !0,\n page: 1,\n updatePage: c\n }\n }), i + r + 1 < a && m.push({\n type: \"Separator\"\n }), f < a && m.push({\n type: \"Page\",\n props: {\n isLastPage: !0,\n page: a,\n updatePage: c\n }\n }), m.unshift({\n type: \"ClickableArrow\",\n props: {\n direction: \"right\",\n isDisabled: !e,\n updatePage: ()=>c(n ?? i + 1)\n }\n }), m.unshift({\n type: \"ClickableArrow\",\n props: {\n direction: \"left\",\n isDisabled: !o,\n updatePage: ()=>c(l ?? Math.max(1, i - 1))\n }\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: RV,\n children: m.map((p, h)=>{\n if (typeof p == \"number\") return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_0, {\n isCurrent: i === p,\n page: p,\n updatePage: c\n }, h);\n let g = DV[p.type];\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(g, {\n ...p.props\n }, h);\n })\n });\n};\nvar eD = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(11), { data: e, handlePageChange: o } = dt(), n = e.nextPage || 2, r;\n t[0] !== o ? (r = (a)=>{\n o(a);\n }, t[0] = o, t[1] = r) : r = t[1];\n let s = e.page || 1, i = e.prevPage || void 0, l;\n return t[2] !== e.hasNextPage || t[3] !== e.hasPrevPage || t[4] !== e.limit || t[5] !== e.totalPages || t[6] !== n || t[7] !== r || t[8] !== s || t[9] !== i ? (l = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xu, {\n hasNextPage: e.hasNextPage,\n hasPrevPage: e.hasPrevPage,\n limit: e.limit,\n nextPage: n,\n numberOfNeighbors: 1,\n onChange: r,\n page: s,\n prevPage: i,\n totalPages: e.totalPages\n }), t[2] = e.hasNextPage, t[3] = e.hasPrevPage, t[4] = e.limit, t[5] = e.totalPages, t[6] = n, t[7] = r, t[8] = s, t[9] = i, t[10] = l) : l = t[10], l;\n};\nvar Yr = \"relationship-table\", F0 = (t)=>{\n _s34();\n let { AfterInput: e, allowCreate: o = !0, BeforeInput: n, disableTable: r = !1, field: s, fieldPath: i, filterOptions: l, initialData: a, initialDrawerData: c, Label: u, parent: d, relationTo: f } = t, [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), { config: h, getEntityConfig: g } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: b, t: C } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [y, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [x, I] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [w] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>g({\n collectionSlug: f\n })), F = Array.isArray(f), [S, R] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(F ? void 0 : f), { permissions: D } = Ie(), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), [T, A] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(void 0), [k, , { closeDrawer: P, isDrawerOpen: E, openDrawer: B }] = kt({\n id: T,\n collectionSlug: S\n }), [$, M] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!r), [L, j] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>a ? {\n ...a,\n docs: Array.isArray(a.docs) ? a.docs.reduce((J, Y)=>typeof Y == \"string\" || typeof Y == \"number\" ? [\n ...J,\n {\n id: Y\n }\n ] : [\n ...J,\n Y\n ], []) : []\n } : void 0), [O, V] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), { getTableState: W } = Nt(), Z = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (J)=>{\n let Y = {\n limit: s?.defaultLimit || w?.admin?.pagination?.defaultLimit,\n sort: s.defaultSort || w?.defaultSort,\n ...y || {},\n where: {\n ...y?.where || {}\n }\n };\n l && (Y.where = (0,payload_shared__WEBPACK_IMPORTED_MODULE_22__.hoistQueryParamsToAnd)(Y.where, l));\n let le = s.admin.defaultColumns ? s.admin.defaultColumns.map((Ue)=>({\n accessor: Ue,\n active: !0\n })) : void 0, xe = typeof s.admin.disableRowTypes == \"boolean\" ? !s.admin.disableRowTypes : Array.isArray(f), { data: _e, state: Be, Table: Me } = await W({\n collectionSlug: f,\n columns: (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToPreferences)(y?.columns) || le,\n data: J,\n enableRowSelections: !1,\n orderableFieldName: !s.orderable || Array.isArray(s.collection) ? void 0 : `_${s.collection}_${s.name}_order`,\n parent: d,\n query: Y,\n renderRowTypes: xe,\n tableAppearance: \"condensed\"\n });\n j(_e), p(Me), V(Be), M(!1);\n }, [\n s.defaultLimit,\n s.defaultSort,\n s.admin.defaultColumns,\n s.admin.disableRowTypes,\n s.collection,\n s.name,\n s.orderable,\n w?.admin?.pagination?.defaultLimit,\n w?.defaultSort,\n y,\n l,\n W,\n f,\n d\n ]), z = Qe((J, Y)=>{\n !Y && (!m || J) && Z();\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n z(y, r);\n }, [\n y,\n r\n ]);\n let Q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ doc: J, operation: Y })=>{\n Y === \"create\" && P();\n let le = L?.docs?.findIndex((_e)=>_e.id === J.id), xe = {\n docs: []\n };\n if (le !== -1) {\n let _e = [\n ...L.docs\n ];\n _e[le] = J, xe.docs = _e;\n } else xe.docs = [\n J,\n ...L.docs\n ];\n Z(xe);\n }, [\n L?.docs,\n Z,\n P\n ]), U = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((J)=>{\n let Y = L.docs.filter((le)=>le.id !== J.id);\n Z({\n ...L,\n docs: Y\n }), A(void 0);\n }, [\n L,\n Z\n ]), X = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((J, Y)=>{\n _.current = !0, A(J || void 0), R(Y || void 0);\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n _.current && (_.current = !1, B());\n }, [\n B\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n E || A(void 0);\n }, [\n E\n ]);\n let ue = o !== !1 && D?.collections?.[F ? f[0] : f]?.create;\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n F && S && B();\n }, [\n S,\n B,\n F\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n F && !E && S && R(void 0);\n }, [\n E\n ]);\n let q = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"F0.useMemo[q]\": ()=>({\n columns: (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToPreferences)(O)?.map({\n \"F0.useMemo[q]\": ({ accessor: J })=>J\n }[\"F0.useMemo[q]\"]),\n limit: s.defaultLimit ?? w?.admin?.pagination?.defaultLimit,\n sort: s.defaultSort ?? w?.defaultSort\n })\n }[\"F0.useMemo[q]\"], [\n O,\n s,\n w\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Yr,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Yr}__header`,\n children: [\n u,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Yr}__actions`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(g0, {\n allowCreate: o !== !1,\n baseClass: Yr,\n buttonStyle: \"none\",\n className: `${Yr}__add-new${F ? \"-polymorphic\" : \" doc-drawer__toggler\"}`,\n collections: h.collections,\n i18n: b,\n icon: F ? \"plus\" : void 0,\n label: b.t(\"fields:addNew\"),\n onClick: F ? R : B,\n permissions: D,\n relationTo: f\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n \"aria-controls\": `${Yr}-columns`,\n \"aria-expanded\": x,\n className: `${Yr}__toggle-columns ${x ? `${Yr}__buttons-active` : \"\"}`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: x ? \"up\" : \"down\"\n }),\n onClick: ()=>I(!x),\n pillStyle: \"light\",\n size: \"small\",\n children: C(\"general:columns\")\n })\n ]\n })\n ]\n }),\n n,\n $ ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: C(\"general:loading\")\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n L?.docs && L.docs.length === 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gn, {\n Actions: ue ? [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(g0, {\n allowCreate: ue,\n baseClass: Yr,\n collections: h.collections,\n i18n: b,\n label: b.t(\"general:createNewLabel\", {\n label: F ? b.t(\"general:document\") : (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(w?.labels?.singular, b)\n }),\n onClick: F ? R : B,\n permissions: D,\n relationTo: f\n }, \"create\")\n ] : [],\n Message: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: b.t(\"general:noResultsFound\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: b.t(\"general:noResults\", {\n label: F ? b.t(\"general:documents\") : (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(w?.labels?.plural, b)\n })\n })\n ]\n })\n }),\n L?.docs && L.docs.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Hu, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(n0, {\n data: L,\n modifySearchParams: !1,\n onQueryChange: v,\n orderableFieldName: !s.orderable || Array.isArray(s.collection) ? void 0 : `_${s.collection}_${i.replaceAll(\".\", \"_\")}_order`,\n query: q,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Ou, {\n collectionSlug: F ? f[0] : f,\n columnState: O,\n LinkedCellOverride: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(JF, {\n currentDrawerID: T,\n onDrawerOpen: X\n }),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wr, {\n className: `${Yr}__columns`,\n height: x ? \"auto\" : 0,\n id: `${Yr}-columns`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Yr}__columns-inner`,\n children: w && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gp, {\n collectionSlug: w.slug\n })\n })\n }),\n m,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(eD, {})\n ]\n })\n })\n })\n ]\n }),\n e,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(k, {\n initialData: c,\n onDelete: U,\n onSave: Q\n })\n ]\n });\n};\n_s34(F0, \"2dNnBqdqED8UmvJCICrHTGfGzfA=\");\nvar nD = \"default\" in sh.default ? sh.default.default : sh.default, ih = ({ collectionSlug: t, config: e, docID: o, fields: n, segments: r })=>{\n let s = (0,payload_shared__WEBPACK_IMPORTED_MODULE_23__.flattenTopLevelFields)(n, {\n keepPresentationalFields: !0\n }), i = r[0], l = s.find((c)=>c.name === i);\n if (!l) return null;\n if (l.type === \"relationship\" || l.type === \"upload\") {\n let c = o;\n return Array.isArray(l.relationTo) && (c = {\n relationTo: t,\n value: o\n }), {\n [l.name]: l.hasMany ? [\n c\n ] : c\n };\n }\n let a = r.slice(1, r.length);\n if (l.type === \"tab\" || l.type === \"group\" && (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(l)) return {\n [l.name]: ih({\n collectionSlug: t,\n config: e,\n docID: o,\n fields: l.fields,\n segments: a\n })\n };\n if (l.type === \"array\") {\n let c = ih({\n collectionSlug: t,\n config: e,\n docID: o,\n fields: l.fields,\n segments: a\n });\n return c.id = nD().toHexString(), {\n [l.name]: [\n c\n ]\n };\n }\n if (l.type === \"blocks\") for (let c of l.blockReferences ?? l.blocks){\n let u = typeof c == \"string\" ? e.blocksMap[c] : c, d = ih({\n collectionSlug: t,\n config: e,\n docID: o,\n fields: u.fields,\n segments: a\n });\n if (d) return d.id = nD().toHexString(), d.blockType = u.slug, {\n [l.name]: [\n d\n ]\n };\n }\n}, OV = (t)=>{\n let { field: e, field: { admin: { allowCreate: o, description: n }, collection: r, label: s, localized: i, on: l, required: a }, path: c } = t, { id: u, docConfig: d } = Se(), { config: f, getEntityConfig: m } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { customComponents: { AfterInput: p, BeforeInput: h, Description: g, Error: b, Label: C } = {}, path: y, showError: v, value: x } = Te({\n potentiallyStalePath: c\n }), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n if (!u) return null;\n let F = u;\n Array.isArray(e.targetField.relationTo) && (F = {\n relationTo: d.slug,\n value: F\n });\n let S = Array.isArray(r) ? {} : {\n [l]: {\n equals: F\n }\n };\n return e.where ? {\n and: [\n S,\n e.where\n ]\n } : S;\n }, [\n u,\n r,\n e.targetField.relationTo,\n e.where,\n l,\n d?.slug\n ]), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let F = m({\n collectionSlug: Array.isArray(e.collection) ? e.collection[0] : e.collection\n });\n return ih({\n collectionSlug: d?.slug,\n config: f,\n docID: u,\n fields: F?.fields,\n segments: e.on.split(\".\")\n });\n }, [\n m,\n e.collection,\n e.on,\n d?.slug,\n u,\n f\n ]);\n return d ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n v && \"error\",\n \"join\"\n ].filter(Boolean).join(\" \"),\n id: `field-${y?.replace(/\\./g, \"__\")}`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: b,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: y,\n showError: v\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(F0, {\n AfterInput: p,\n allowCreate: typeof u < \"u\" && o,\n BeforeInput: h,\n disableTable: I === null,\n field: e,\n fieldPath: y,\n filterOptions: I,\n initialData: u && x ? x : {\n docs: []\n },\n initialDrawerData: w,\n Label: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h4\", {\n style: {\n margin: 0\n },\n children: C || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: s,\n localized: i,\n path: y,\n required: a\n })\n }),\n parent: typeof u < \"u\" ? {\n id: u,\n collectionSlug: d.slug,\n joinPath: y\n } : void 0,\n relationTo: r\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: g,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: n,\n path: y\n })\n })\n ]\n }) : null;\n}, Zu = We(OV);\n\n\nvar zV = \"json-field\", WV = (t)=>{\n _s35();\n let { field: e, field: { admin: { className: o, description: n, editorOptions: r, maxHeight: s } = {}, jsonSchema: i, label: l, localized: a, required: c }, path: u, readOnly: d, validate: f } = t, { insertSpaces: m = _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.k.insertSpaces, tabSize: p = _chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.k.tabSize } = r || {}, h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L)=>{\n if (L !== void 0) return L === null ? \"\" : m ? JSON.stringify(L, null, p) : JSON.stringify(L, null, \"\t\");\n }, [\n p,\n m\n ]), [g, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), C = react__WEBPACK_IMPORTED_MODULE_0__.useRef(\"formState\"), [y, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Date.now()), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L, j)=>{\n if (typeof f == \"function\") return f(L, {\n ...j,\n jsonError: g,\n required: c\n });\n }, [\n f,\n c,\n g\n ]), { customComponents: { AfterInput: I, BeforeInput: w, Description: F, Error: S, Label: R } = {}, disabled: D, initialValue: _, path: T, setValue: A, showError: k, value: P } = Te({\n potentiallyStalePath: u,\n validate: x\n }), E = react__WEBPACK_IMPORTED_MODULE_0__.useRef(h(P ?? _)), B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L, j)=>{\n if (!i) return;\n j.languages.json.jsonDefaults.setDiagnosticsOptions({\n enableSchemaRequest: !0,\n schemas: [\n ...j.languages.json.jsonDefaults.diagnosticsOptions.schemas || [],\n i\n ],\n validate: !0\n });\n let O = i.uri, V = O.includes(\"?\") ? `${O}&${crypto.randomUUID ? crypto.randomUUID() : mn()}` : `${O}?${crypto.randomUUID ? crypto.randomUUID() : mn()}`;\n L.setModel(j.editor.createModel(h(P) || \"\", \"json\", j.Uri.parse(V)));\n }, [\n i,\n h,\n P\n ]), $ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L)=>{\n if (!(d || D)) {\n C.current = \"internalEditor\";\n try {\n A(L ? JSON.parse(L) : null), E.current = L, b(void 0);\n } catch (j) {\n A(L || null), E.current = L, b(j);\n }\n }\n }, [\n d,\n D,\n A\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (C.current === \"formState\") {\n let L = h(P ?? _);\n L !== E.current && (E.current = L, v(Date.now()));\n }\n C.current = \"formState\";\n }, [\n _,\n T,\n h,\n P\n ]);\n let M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n zV,\n o,\n k && \"error\",\n (d || D) && \"read-only\"\n ].filter(Boolean).join(\" \"),\n style: M,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: R,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: l,\n localized: a,\n path: T,\n required: c\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: S,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n message: g,\n path: T,\n showError: k\n })\n }),\n w,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bu, {\n defaultLanguage: \"json\",\n maxHeight: s,\n onChange: $,\n onMount: B,\n options: r,\n readOnly: d || D,\n recalculatedHeightAt: y,\n value: E.current,\n wrapperProps: {\n id: `field-${T?.replace(/\\./g, \"__\")}`\n }\n }),\n I\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: F,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: n,\n path: T\n })\n })\n ]\n });\n}, Ju = We(WV);\n_s35(WV, \"hIa9vl/tJyDXKMMciDebiVcOa6I=\");\n\n\n\n\nvar JV = (t)=>{\n let { field: e, field: { admin: { className: o, description: n, placeholder: r, step: s = 1 } = {}, hasMany: i = !1, label: l, localized: a, max: c = 1 / 0, maxRows: u = 1 / 0, min: d = -1 / 0, required: f }, onChange: m, path: p, readOnly: h, validate: g } = t, { i18n: b, t: C } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((M, L)=>{\n if (typeof g == \"function\") return g(M, {\n ...L,\n max: c,\n min: d,\n required: f\n });\n }, [\n g,\n d,\n c,\n f\n ]), { customComponents: { AfterInput: v, BeforeInput: x, Description: I, Error: w, Label: F } = {}, disabled: S, path: R, setValue: D, showError: _, value: T } = Te({\n potentiallyStalePath: p,\n validate: y\n }), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((M)=>{\n let L = parseFloat(M.target.value), j = L;\n Number.isNaN(L) && (j = null), typeof m == \"function\" && m(j), D(j);\n }, [\n m,\n D\n ]), [k, P] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((M)=>{\n if (!(h || S)) {\n let L;\n M ? Array.isArray(M) ? L = M.map((j)=>Number(j.value?.value || j.value)) : L = [\n Number(M.value?.value || M.value)\n ] : L = [], D(L);\n }\n }, [\n h,\n S,\n D\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n i && Array.isArray(T) && P(T.map((M, L)=>({\n id: `${M}${L}`,\n label: `${M}`,\n value: {\n toString: ()=>`${M}${L}`,\n value: M?.value || M\n }\n })));\n }, [\n T,\n i\n ]);\n let B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]), $ = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r, b);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n \"number\",\n o,\n _ && \"error\",\n (h || S) && \"read-only\",\n i && \"has-many\"\n ].filter(Boolean).join(\" \"),\n style: B,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: F,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: l,\n localized: a,\n path: R,\n required: f\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: w,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: R,\n showError: _\n })\n }),\n x,\n i ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n className: `field-${R.replace(/\\./g, \"__\")}`,\n disabled: h || S,\n filterOption: (M, L)=>{\n let j = Array.isArray(T) && T.length >= u;\n return (0,payload_shared__WEBPACK_IMPORTED_MODULE_24__.isNumber)(L) && !j;\n },\n isClearable: !0,\n isCreatable: !0,\n isMulti: !0,\n isSortable: !0,\n noOptionsMessage: ()=>Array.isArray(T) && T.length >= u ? C(\"validation:limitReached\", {\n max: u,\n value: T.length + 1\n }) : null,\n onChange: E,\n options: [],\n placeholder: $,\n showError: _,\n value: k\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n disabled: h || S,\n id: `field-${R.replace(/\\./g, \"__\")}`,\n max: c,\n min: d,\n name: R,\n onChange: A,\n onWheel: (M)=>{\n M.target.blur();\n },\n placeholder: $,\n step: s,\n type: \"number\",\n value: typeof T == \"number\" ? T : \"\"\n })\n }),\n v,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: I,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: n,\n path: R\n })\n })\n ]\n })\n ]\n });\n}, qu = We(JV);\n\n\n\nvar uD = \"point\", QV = (t)=>{\n let { field: e, field: { admin: { className: o, description: n, placeholder: r, step: s } = {}, label: i, localized: l, required: a }, path: c, readOnly: u, validate: d } = t, { i18n: f, t: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((_, T)=>{\n if (typeof d == \"function\") return d(_, {\n ...T,\n required: a\n });\n }, [\n d,\n a\n ]), { customComponents: { AfterInput: h, BeforeInput: g, Description: b, Error: C, Label: y } = {}, disabled: v, path: x, setValue: I, showError: w, value: F = [\n null,\n null\n ] } = Te({\n potentiallyStalePath: c,\n validate: p\n }), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((_, T)=>{\n let A = parseFloat(_.target.value);\n Number.isNaN(A) && (A = _.target.value);\n let k = [\n ...F\n ];\n k[T] = A, I(k);\n }, [\n I,\n F\n ]), R = (_)=>{\n let T = m(_ === \"longitude\" ? \"fields:longitude\" : \"fields:latitude\"), A = i ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, f) : \"\";\n return `${A}${A ? \" - \" : \"\"}${T}`;\n }, D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n uD,\n o,\n w && \"error\",\n (u || v) && \"read-only\"\n ].filter(Boolean).join(\" \"),\n style: D,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"ul\", {\n className: `${uD}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: y,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: R(\"longitude\"),\n localized: l,\n path: x,\n required: a\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"input-wrapper\",\n children: [\n g,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n disabled: u || v,\n id: `field-longitude-${x?.replace(/\\./g, \"__\")}`,\n name: `${x}.longitude`,\n onChange: (_)=>S(_, 0),\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r, f),\n step: s,\n type: \"number\",\n value: F && typeof F[0] == \"number\" ? F[0] : \"\"\n }),\n h\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: y,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: R(\"latitude\"),\n localized: l,\n path: x,\n required: a\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"input-wrapper\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: C,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: x,\n showError: w\n })\n }),\n g,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n disabled: u || v,\n id: `field-latitude-${x?.replace(/\\./g, \"__\")}`,\n name: `${x}.latitude`,\n onChange: (_)=>S(_, 1),\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r, f),\n step: s,\n type: \"number\",\n value: F && typeof F[1] == \"number\" ? F[1] : \"\"\n }),\n h\n ]\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: b,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: n,\n path: x\n })\n })\n ]\n });\n}, Qu = We(QV);\n\n\n\n\n\n\n\nvar Ku = \"radio-input\", ed = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(16), { isSelected: o, onChange: n, option: r, path: s, readOnly: i, uuid: l } = t, { i18n: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c = ct(), u = `field-${s}-${r.value}${c > 1 ? `-${c}` : \"\"}${l ? `-${l}` : \"\"}`, d = o && `${Ku}--is-selected`, f;\n e[0] !== d ? (f = [\n Ku,\n d\n ].filter(Boolean), e[0] = d, e[1] = f) : f = e[1];\n let m = f.join(\" \"), p;\n e[2] !== n || e[3] !== r.value ? (p = ()=>typeof n == \"function\" ? n(r.value) : null, e[2] = n, e[3] = r.value, e[4] = p) : p = e[4];\n let h;\n if (e[5] !== a || e[6] !== u || e[7] !== o || e[8] !== r.label || e[9] !== s || e[10] !== i || e[11] !== m || e[12] !== p) {\n let g = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n checked: o,\n disabled: i,\n id: u,\n name: s,\n onChange: p,\n type: \"radio\"\n }), b = i && `${Ku}__styled-radio--disabled`, C;\n e[14] !== b ? (C = [\n `${Ku}__styled-radio`,\n b\n ].filter(Boolean), e[14] = b, e[15] = C) : C = e[15], h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"label\", {\n htmlFor: u,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: m,\n children: [\n g,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: C.join(\" \")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Ku}__label`,\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r.label, a)\n })\n ]\n })\n }), e[5] = a, e[6] = u, e[7] = o, e[8] = r.label, e[9] = s, e[10] = i, e[11] = m, e[12] = p, e[13] = h;\n } else h = e[13];\n return h;\n};\nvar ch = \"radio-group\", nG = (t)=>{\n let { disableModifyingForm: e, field: o, field: { admin: { className: n, description: r, layout: s = \"horizontal\" } = {}, label: i, localized: l, options: a = [], required: c } = {}, onChange: u, path: d, readOnly: f, validate: m, value: p } = t, { uuid: h } = $e(), g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((T, A)=>{\n if (typeof m == \"function\") return m(T, {\n ...A,\n options: a,\n required: c\n });\n }, [\n m,\n a,\n c\n ]), { customComponents: { AfterInput: b, BeforeInput: C, Description: y, Error: v, Label: x } = {}, disabled: I, path: w, setValue: F, showError: S, value: R } = Te({\n potentiallyStalePath: d,\n validate: g\n }), D = R || p, _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(o), [\n o\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n ch,\n n,\n `${ch}--layout-${s}`,\n S && \"error\",\n (f || I) && `${ch}--read-only`\n ].filter(Boolean).join(\" \"),\n style: _,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: v,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: w,\n showError: S\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: x,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: i,\n localized: l,\n path: w,\n required: c\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n C,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n className: `${ch}--group`,\n id: `field-${w.replace(/\\./g, \"__\")}`,\n children: a.map((T)=>{\n let A = \"\";\n (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.optionIsObject)(T) ? A = T.value : A = T;\n let k = String(A) === String(D), P = `field-${w}-${A}${h ? `-${h}` : \"\"}`;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ed, {\n id: P,\n isSelected: k,\n onChange: ()=>{\n typeof u == \"function\" && u(A), f || I || F(A, !!e);\n },\n option: (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.optionIsObject)(T) ? T : {\n label: T,\n value: T\n },\n path: w,\n readOnly: f || I,\n uuid: h\n })\n }, `${w} - ${A}`);\n })\n }),\n b,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: y,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: r,\n path: w\n })\n })\n ]\n })\n ]\n });\n}, td = We(nG);\n\n\n\n\n\n\n\n\n\n\n\n\nvar Gl = \"relationship-add-new\", pD = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(46), { Button: o, hasMany: n, onChange: r, path: s, relationTo: i, unstyled: l, value: a } = t, c = zp(i), { permissions: u } = Ie(), [d, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), h = c.length > 1, g;\n e[0] !== c[0] || e[1] !== h ? (g = ()=>h ? void 0 : c[0], e[0] = c[0], e[1] = h, e[2] = g) : g = e[2];\n let [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(g), [y, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { i18n: x, t: I } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [w, F] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), S = b?.slug, R;\n e[3] !== S ? (R = {\n collectionSlug: S\n }, e[3] = S, e[4] = R) : R = e[4];\n let [D, _, T] = kt(R), { isDrawerOpen: A, toggleDrawer: k } = T, P;\n e[5] !== b || e[6] !== n || e[7] !== r || e[8] !== a ? (P = (ue)=>{\n let { doc: q, operation: J } = ue;\n if (J === \"create\" || J === \"update\" && (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasAutosaveEnabled)(b)) {\n let Y;\n a ? Y = Array.isArray(a) ? !a.some((le)=>le && le.value === q.id) : a.value !== q.id : Y = !0, Y && r(n === !0 ? [\n ...Array.isArray(a) ? a : [],\n {\n relationTo: b?.slug,\n value: q.id\n }\n ] : {\n relationTo: b?.slug,\n value: q.id\n }), p(void 0);\n }\n }, e[5] = b, e[6] = n, e[7] = r, e[8] = a, e[9] = P) : P = e[9];\n let E = P, B;\n e[10] === Symbol.for(\"react.memo_cache_sentinel\") ? (B = (ue)=>{\n v(ue);\n }, e[10] = B) : B = e[10];\n let $ = B, M, L;\n e[11] !== u || e[12] !== c ? (M = ()=>{\n u && (c.length === 1 ? f(u.collections[c[0]?.slug]?.create) : f(c.some((ue)=>u.collections[ue?.slug]?.create)));\n }, L = [\n u,\n c\n ], e[11] = u, e[12] = c, e[13] = M, e[14] = L) : (M = e[13], L = e[14]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(M, L);\n let j, O;\n e[15] !== c || e[16] !== h || e[17] !== m ? (O = ()=>{\n h && m && C(c.find((ue)=>ue?.slug === m));\n }, j = [\n m,\n h,\n c\n ], e[15] = c, e[16] = h, e[17] = m, e[18] = j, e[19] = O) : (j = e[18], O = e[19]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(O, j);\n let V, W;\n e[20] !== b || e[21] !== h || e[22] !== k ? (V = ()=>{\n h && b && (k(), p(void 0));\n }, W = [\n k,\n h,\n b\n ], e[20] = b, e[21] = h, e[22] = k, e[23] = V, e[24] = W) : (V = e[23], W = e[24]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(V, W);\n let Z, z;\n e[25] !== A || e[26] !== h ? (Z = ()=>{\n h && !A && C(void 0);\n }, z = [\n A,\n h\n ], e[25] = A, e[26] = h, e[27] = Z, e[28] = z) : (Z = e[27], z = e[28]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(Z, z);\n let Q = c[0]?.labels.singular, U, X;\n if (e[29] !== o || e[30] !== D || e[31] !== _ || e[32] !== b || e[33] !== x || e[34] !== E || e[35] !== s || e[36] !== u || e[37] !== y || e[38] !== c || e[39] !== d || e[40] !== w || e[41] !== I || e[42] !== Q || e[43] !== l) {\n X = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let ue = I(\"fields:addNewLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(Q, x)\n });\n if (!d) {\n X = null;\n break e;\n }\n U = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Gl,\n id: `${s}-add-new`,\n children: [\n c.length === 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_, {\n className: [\n `${Gl}__add-button`,\n l && `${Gl}__add-button--unstyled`\n ].filter(Boolean).join(\" \"),\n onClick: ()=>{\n F(!1);\n },\n onMouseEnter: ()=>F(!0),\n onMouseLeave: ()=>F(!1),\n children: o || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ro, {\n className: `${Gl}__tooltip`,\n show: w,\n children: ue\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ar, {})\n ]\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(D, {\n onSave: E\n })\n ]\n }),\n c.length > 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: o || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"none\",\n className: `${Gl}__add-button`,\n tooltip: y ? void 0 : I(\"fields:addNew\"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ar, {})\n }),\n buttonType: \"custom\",\n horizontalAlign: \"center\",\n onToggleOpen: $,\n render: (q)=>{\n let { close: J } = q;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jb, {\n children: c.map((Y)=>u.collections[Y?.slug]?.create ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(qb, {\n className: `${Gl}__relation-button--${Y?.slug}`,\n onClick: ()=>{\n J(), p(Y?.slug);\n },\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(Y?.labels?.singular, x)\n }, Y?.slug) : null)\n });\n },\n size: \"medium\"\n }),\n b && u.collections[b?.slug]?.create && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(D, {\n onSave: E\n })\n ]\n })\n ]\n });\n }\n e[29] = o, e[30] = D, e[31] = _, e[32] = b, e[33] = x, e[34] = E, e[35] = s, e[36] = u, e[37] = y, e[38] = c, e[39] = d, e[40] = w, e[41] = I, e[42] = Q, e[43] = l, e[44] = U, e[45] = X;\n } else U = e[44], X = e[45];\n return X !== Symbol.for(\"react.early_return_sentinel\") ? X : U;\n};\n\n\n\n\n\n\n\nvar bD = ({ allowCreate: t = !0, collectionSlugs: e, disableQueryPresets: o, drawerSlug: n, enableRowSelections: r, filterOptions: s, onBulkSelect: i, onSelect: l, overrideEntityVisibility: a = !0, selectedCollection: c })=>{\n let { closeModal: u, isModalOpen: d } = ie(), { serverFunction: f } = Nt(), [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(void 0), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0), { config: { collections: b }, getEntityConfig: C } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), y = d(n), v = b.filter(({ slug: P })=>e.includes(P)), [x, I] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>{\n let P = c || v[0]?.slug, E = C({\n collectionSlug: P\n });\n return E ? {\n label: E.labels,\n value: E.slug\n } : void 0;\n }), [w, F, { drawerSlug: S }] = kt({\n collectionSlug: x.value\n }), R = Qe((P)=>{\n P && P !== x?.value && I({\n label: C({\n collectionSlug: P\n })?.labels,\n value: P\n });\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n R(c);\n }, [\n c\n ]);\n let D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ slug: P, query: E })=>{\n try {\n let B = {\n ...E || {},\n where: {\n ...E?.where || {}\n }\n }, $ = s?.[P];\n if (s && typeof $ != \"boolean\" && (B.where = (0,payload_shared__WEBPACK_IMPORTED_MODULE_22__.hoistQueryParamsToAnd)(B.where, $)), P) {\n let M = await f({\n name: \"render-list\",\n args: {\n collectionSlug: P,\n disableBulkDelete: !0,\n disableBulkEdit: !0,\n disableQueryPresets: o,\n drawerSlug: n,\n enableRowSelections: r,\n overrideEntityVisibility: a,\n query: B\n }\n });\n p(M?.List || null);\n } else p(null);\n g(!1);\n } catch (B) {\n console.error(\"Error rendering List View: \", B), y && u(n);\n }\n }, [\n f,\n u,\n n,\n y,\n r,\n s,\n a,\n o\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n m || D({\n slug: x?.value\n });\n }, [\n D,\n m,\n x.value\n ]);\n let _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ doc: P })=>{\n typeof l == \"function\" && l({\n collectionSlug: x?.value,\n doc: P,\n docID: P.id\n }), u(S), u(n);\n }, [\n u,\n S,\n n,\n l,\n x.value\n ]), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((P)=>{\n D({\n slug: x?.value,\n query: P\n });\n }, [\n D,\n x.value\n ]), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((P)=>{\n I(P), D({\n slug: P?.value\n });\n }, [\n D\n ]), k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (P)=>{\n P && I({\n label: C({\n collectionSlug: P\n })?.labels,\n value: P\n }), await D({\n slug: x.value || P\n });\n }, [\n C,\n D,\n x.value\n ]);\n return h ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bn, {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(e0, {\n allowCreate: t,\n createNewDrawerSlug: S,\n DocumentDrawerToggler: F,\n drawerSlug: n,\n enabledCollections: e,\n onBulkSelect: i,\n onQueryChange: T,\n onSelect: l,\n refresh: k,\n selectedOption: x,\n setSelectedOption: A,\n children: [\n m,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(w, {\n onSave: _\n })\n ]\n });\n};\nvar CD = \"list-drawer\", mG = ({ depth: t, uuid: e })=>`list-drawer_${t}_${e}`, fG = ({ children: t, className: e, disabled: o, drawerSlug: n, onClick: r, ...s })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ms, {\n className: [\n e,\n `${CD}__toggler`\n ].filter(Boolean).join(\" \"),\n disabled: o,\n onClick: r,\n slug: n,\n ...s,\n children: t\n }), pG = (t)=>{\n let { drawerSlug: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n className: CD,\n gutter: !1,\n Header: null,\n slug: e,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bD, {\n ...t\n })\n });\n}, ua = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(42), { collectionSlugs: o, filterOptions: n, selectedCollection: r, uploads: s } = t, { config: i } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { collections: l } = i, a = ct(), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), { closeModal: u, modalState: d, openModal: f, toggleModal: m } = ie(), [p, h] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [g, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(o), C;\n e[0] !== a || e[1] !== c ? (C = mG({\n depth: a,\n uuid: c\n }), e[0] = a, e[1] = c, e[2] = C) : C = e[2];\n let y = C, v, x;\n e[3] !== y || e[4] !== d ? (v = ()=>{\n h(!!d[y]?.isOpen);\n }, x = [\n d,\n y\n ], e[3] = y, e[4] = d, e[5] = v, e[6] = x) : (v = e[5], x = e[6]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(v, x);\n let I, w;\n e[7] !== g || e[8] !== l || e[9] !== s ? (I = ()=>{\n if (!g || g.length === 0) {\n let L = l.filter((j)=>{\n let { upload: O } = j;\n return s ? !!O : !0;\n });\n b(L.map(hG));\n }\n }, w = [\n g,\n s,\n l\n ], e[7] = g, e[8] = l, e[9] = s, e[10] = I, e[11] = w) : (I = e[10], w = e[11]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(I, w);\n let F;\n e[12] !== y || e[13] !== m ? (F = ()=>{\n m(y);\n }, e[12] = y, e[13] = m, e[14] = F) : F = e[14];\n let S = F, R;\n e[15] !== u || e[16] !== y ? (R = ()=>{\n u(y);\n }, e[15] = u, e[16] = y, e[17] = R) : R = e[17];\n let D = R, _;\n e[18] !== y || e[19] !== f ? (_ = ()=>{\n f(y);\n }, e[18] = y, e[19] = f, e[20] = _) : _ = e[20];\n let T = _, A;\n e[21] !== D || e[22] !== g || e[23] !== y || e[24] !== n || e[25] !== r || e[26] !== s ? (A = (L)=>/*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(pG, {\n ...L,\n closeDrawer: D,\n collectionSlugs: g,\n drawerSlug: y,\n filterOptions: n,\n key: y,\n selectedCollection: r,\n uploads: s\n }), e[21] = D, e[22] = g, e[23] = y, e[24] = n, e[25] = r, e[26] = s, e[27] = A) : A = e[27];\n let k = A, P;\n e[28] !== y ? (P = (L)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fG, {\n ...L,\n drawerSlug: y\n }), e[28] = y, e[29] = P) : P = e[29];\n let E = P, B;\n e[30] !== D || e[31] !== g || e[32] !== a || e[33] !== y || e[34] !== p || e[35] !== T || e[36] !== S ? (B = {\n closeDrawer: D,\n collectionSlugs: g,\n drawerDepth: a,\n drawerSlug: y,\n isDrawerOpen: p,\n openDrawer: T,\n setCollectionSlugs: b,\n toggleDrawer: S\n }, e[30] = D, e[31] = g, e[32] = a, e[33] = y, e[34] = p, e[35] = T, e[36] = S, e[37] = B) : B = e[37];\n let $ = B, M;\n return e[38] !== k || e[39] !== $ || e[40] !== E ? (M = [\n k,\n E,\n $\n ], e[38] = k, e[39] = $, e[40] = E, e[41] = M) : M = e[41], M;\n};\nfunction hG(t) {\n let { slug: e } = t;\n return e;\n}\n\n\nvar E0 = (t, e)=>{\n let o = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(void 0), r;\n return o[0] !== t || o[1] !== e ? (r = (...s)=>{\n let i = s, l = ()=>{\n clearTimeout(n.current), t(...i);\n };\n clearTimeout(n.current), n.current = setTimeout(l, e);\n }, o[0] = t, o[1] = e, o[2] = r) : r = o[2], r;\n};\n_c173 = E0;\n\nfunction da() {\n let t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]), e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);\n return {\n queueTask: (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((n, r)=>{\n t.current.push(n);\n async function s() {\n if (!e.current && !(typeof r?.beforeProcess == \"function\" && r.beforeProcess() === !1)) for(; t.current.length > 0;){\n let i = t.current.pop();\n t.current = [], e.current = !0;\n try {\n await i();\n } catch (l) {\n console.error(\"Error in queued function:\", l);\n } finally{\n e.current = !1, typeof r?.afterProcess == \"function\" && r.afterProcess();\n }\n }\n }\n s();\n }, [])\n };\n}\n\n\n\nvar wD = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n mostRecentUpdate: null,\n reportUpdate: ()=>null\n}), N0 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { children: o } = t, [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), s;\n return e[0] !== o || e[1] !== n ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wD, {\n value: {\n mostRecentUpdate: n,\n reportUpdate: r\n },\n children: o\n }), e[0] = o, e[1] = n, e[2] = s) : s = e[2], s;\n}, Is = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(wD);\nvar L0 = (t)=>{\n for(let e in t){\n let o = t[e];\n if ((e.toLowerCase() === \"and\" || e.toLowerCase() === \"or\") && Array.isArray(o)) for (let n of o)L0(n);\n else o && typeof o == \"object\" && \"in\" in o && Array.isArray(o.in) && o.in.length === 0 && (t[e] = {\n exists: !1\n });\n }\n return t;\n};\n_c174 = L0;\nvar k0 = ({ hasMany: t, relationTo: e, value: o })=>{\n let n = e.reduce((r, s)=>({\n ...r,\n [s]: []\n }), {});\n if (o === null) return n;\n if (o) {\n let r = (s, i)=>{\n (typeof i == \"string\" || typeof i == \"number\") && typeof s == \"string\" && (n[s] ? n[s].push(i) : n[s] = [\n i\n ]);\n };\n t === !0 ? o.forEach((s)=>{\n s && r(s.relationTo, s.value);\n }) : r(o.relationTo, o.value);\n }\n return n;\n};\nvar SD = ({ allowEdit: t, options: e, value: o })=>{\n if (o || typeof o == \"number\") {\n if (Array.isArray(o)) return o.map((r)=>{\n let s;\n return e.forEach((i)=>{\n s || (s = i.options.find((l)=>l.value === r.value && l.relationTo === r.relationTo));\n }), s ? {\n allowEdit: t,\n ...s\n } : void 0;\n });\n let n;\n return e.forEach((r)=>{\n n || (n = r.options.find((s)=>s.value === o.value && s.relationTo === o.relationTo));\n }), n ? {\n allowEdit: t,\n ...n\n } : void 0;\n }\n};\n_c175 = SD;\n\nvar _D = (t)=>t.reduce((e, o)=>o.options ? [\n ...e,\n ..._D(o.options)\n ] : [\n ...e,\n {\n id: o.value,\n relationTo: o.relationTo\n }\n ], []), ID = (t)=>t.sort((e, o)=>typeof e?.label?.localeCompare == \"function\" && typeof o?.label?.localeCompare == \"function\" ? e.label.localeCompare(o.label) : 0), TD = (t, e)=>{\n switch(e.type){\n case \"ADD\":\n {\n let { collection: o, config: n, docs: r, i18n: s, ids: i = [], sort: l } = e, a = o.slug, c = _D(t), u = [\n ...t\n ], d = u.find((m)=>m.label === o.labels.plural), f = r.reduce((m, p)=>{\n if (c.filter((h)=>h.id === p.id && h.relationTo === a).length === 0) {\n c.push({\n id: p.id,\n relationTo: a\n });\n let h = qo({\n collectionConfig: o,\n data: p,\n dateFormat: n.admin.dateFormat,\n fallback: `${s.t(\"general:untitled\")} - ID: ${p.id}`,\n i18n: s\n });\n return [\n ...m,\n {\n label: h,\n relationTo: a,\n value: p.id\n }\n ];\n }\n return m;\n }, []);\n if (i.forEach((m)=>{\n c.filter((p)=>p.id === m && p.relationTo === a).length === 0 && (c.push({\n id: m,\n relationTo: a\n }), f.push({\n allowEdit: !1,\n label: `${s.t(\"general:untitled\")} - ID: ${m}`,\n relationTo: a,\n value: m\n }));\n }), d) {\n let m = [\n ...d.options,\n ...f\n ];\n d.options = l ? ID(m) : m;\n } else u.push({\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(o.labels.plural, s),\n options: l ? ID(f) : f\n });\n return u;\n }\n case \"CLEAR\":\n {\n let o = e.exemptValues ? Array.isArray(e.exemptValues) ? e.exemptValues : [\n e.exemptValues\n ] : [];\n return t.filter((r)=>{\n let s = r.options.filter((i)=>o ? o.some((l)=>l && i.value === l.value) : !1);\n return r.options = s, s.length > 0;\n });\n }\n case \"REMOVE\":\n {\n let { id: o, collection: n } = e, r = [\n ...t\n ], s = r.findIndex((i)=>i.label === n.labels.plural);\n return s === -1 || (r[s] = {\n ...r[s],\n options: r[s].options.filter((i)=>i.value !== o)\n }), r;\n }\n case \"UPDATE\":\n {\n let { collection: o, config: n, doc: r, i18n: s } = e, i = o.slug, l = [\n ...t\n ], a = qo({\n collectionConfig: o,\n data: r,\n dateFormat: n.admin.dateFormat,\n fallback: `${s.t(\"general:untitled\")} - ID: ${r.id}`,\n i18n: s\n }), u = l.find((d)=>d.label === o.labels.plural)?.options?.find((d)=>d.value === r.id);\n return u && (u.label = a, u.relationTo = i), l;\n }\n default:\n return t;\n }\n};\n\n\nvar zl = \"relationship--multi-value-label\", DD = (t)=>{\n let { data: e, selectProps: o } = t, { allowEdit: n, label: r, relationTo: s, value: i } = e, { customProps: l } = o === void 0 ? {} : o, { draggableProps: a, onDocumentOpen: c } = l === void 0 ? {} : l, { permissions: u } = Ie(), [d, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { t: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), p = !!u?.collections?.[s]?.read;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: zl,\n title: r || \"\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${zl}__content`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.MultiValueLabel, {\n ...t,\n innerProps: {\n className: `${zl}__text`,\n ...a || {}\n }\n })\n }),\n s && p && n !== !1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n \"aria-label\": `Edit ${r}`,\n className: `${zl}__drawer-toggler`,\n onClick: (h)=>{\n f(!1), c({\n id: i,\n collectionSlug: s,\n hasReadPermission: p,\n openInNewTab: h.metaKey || h.ctrlKey\n });\n },\n onKeyDown: FG,\n onMouseDown: DG,\n onMouseEnter: ()=>f(!0),\n onMouseLeave: ()=>f(!1),\n onTouchEnd: RG,\n type: \"button\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ro, {\n className: `${zl}__tooltip`,\n show: d,\n children: m(\"general:editLabel\", {\n label: \"\"\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vr, {\n className: `${zl}__icon`\n })\n ]\n })\n })\n ]\n });\n};\nfunction FG(t) {\n t.key === \"Enter\" && t.stopPropagation();\n}\n_c176 = FG;\nfunction DG(t) {\n return t.stopPropagation();\n}\n_c177 = DG;\nfunction RG(t) {\n return t.stopPropagation();\n}\n_c178 = RG;\n\n\n\nvar Hl = \"relationship--single-value\", AD = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(16), { children: o, data: n, selectProps: r } = t, { allowEdit: s, label: i, relationTo: l, value: a } = n, c;\n e[0] !== r ? (c = r === void 0 ? {} : r, e[0] = r, e[1] = c) : c = e[1];\n let { customProps: u } = c, d;\n e[2] !== u ? (d = u === void 0 ? {} : u, e[2] = u, e[3] = d) : d = e[3];\n let { onDocumentOpen: f } = d, [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { t: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { permissions: g } = Ie(), b = !!g?.collections?.[l]?.read, C = i || \"\", y;\n return e[4] !== s || e[5] !== o || e[6] !== b || e[7] !== i || e[8] !== f || e[9] !== t || e[10] !== l || e[11] !== m || e[12] !== h || e[13] !== C || e[14] !== a ? (y = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(To.SingleValue, {\n ...t,\n className: Hl,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Hl}__label`,\n title: C,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Hl}__label-text`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Hl}__text`,\n children: o\n }),\n l && b && s !== !1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n \"aria-label\": h(\"general:editLabel\", {\n label: i\n }),\n className: `${Hl}__drawer-toggler`,\n onClick: (v)=>{\n p(!1), f({\n id: a,\n collectionSlug: l,\n hasReadPermission: b,\n openInNewTab: v.metaKey || v.ctrlKey\n });\n },\n onKeyDown: NG,\n onMouseDown: LG,\n onMouseEnter: ()=>p(!0),\n onMouseLeave: ()=>p(!1),\n onTouchEnd: kG,\n type: \"button\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ro, {\n className: `${Hl}__tooltip`,\n show: m,\n children: h(\"general:edit\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vr, {})\n ]\n })\n })\n ]\n })\n })\n }), e[4] = s, e[5] = o, e[6] = b, e[7] = i, e[8] = f, e[9] = t, e[10] = l, e[11] = m, e[12] = h, e[13] = C, e[14] = a, e[15] = y) : y = e[15], y;\n};\nfunction NG(t) {\n t.key === \"Enter\" && t.stopPropagation();\n}\n_c179 = NG;\nfunction LG(t) {\n return t.stopPropagation();\n}\n_c180 = LG;\nfunction kG(t) {\n return t.stopPropagation();\n}\nvar id = \"relationship\", M0 = (t)=>{\n let { AfterInput: e, allowCreate: o = !0, allowEdit: n = !0, appearance: r = \"select\", BeforeInput: s, className: i, description: l, Description: a, Error: c, filterOptions: u, formatDisplayedOptions: d, hasMany: f, initialValue: m, isSortable: p = !0, label: h, Label: g, localized: b, maxResultsPerRequest: C = 10, onChange: y, path: v, placeholder: x, readOnly: I, relationTo: w, required: F, showError: S, sortOptions: R, style: D, value: _ } = t, { config: T, getEntityConfig: A } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: { api: k }, serverURL: P } = T, { i18n: E, t: B } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { permissions: $ } = Ie(), { code: M } = ye(), [L, j] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n id: void 0,\n collectionSlug: void 0,\n hasReadPermission: !1\n }), [O, V] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(-1), [W, Z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}), [z, Q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), [U, X] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), [ue, q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [J, Y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [le, xe] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), _e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), { queueTask: Be } = da(), [Me, Ue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(TD, []), he = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(_), [Oe, , { drawerSlug: Ke, isDrawerOpen: ae, openDrawer: we }] = kt({\n id: L.id,\n collectionSlug: L.collectionSlug\n }), G = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let ce = u;\n if (_) {\n let Ee = (f === !1 ? [\n _\n ] : _).reduce((Re, qe)=>(Re[qe.relationTo] || (Re[qe.relationTo] = []), Re[qe.relationTo].push(qe.value), Re), {});\n (Array.isArray(w) ? w : [\n w\n ]).forEach((Re)=>{\n ce = {\n ...ce || {},\n [Re]: {\n ...typeof u?.[Re] == \"object\" ? u[Re] : {},\n ...Ee[Re] ? {\n id: {\n not_in: Ee[Re]\n }\n } : {}\n }\n };\n });\n }\n return ce;\n }, [\n u,\n _,\n f,\n w\n ]), [se, , { closeDrawer: K, isDrawerOpen: fe, openDrawer: me }] = ua({\n collectionSlugs: w,\n filterOptions: G\n }), ne = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ collectionSlug: ce, doc: Ee })=>{\n f ? y([\n ...Array.isArray(_) ? _ : [],\n {\n relationTo: ce,\n value: Ee.id\n }\n ]) : f === !1 && y({\n relationTo: ce,\n value: Ee.id\n }), K();\n }, [\n f,\n y,\n K,\n _\n ]), te = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), ge = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ filterOptions: ce, hasMany: Ee, lastFullyLoadedRelation: Re, lastLoadedPage: qe, onSuccess: lt, search: nt, sort: Fe, value: Ve })=>{\n $ && Be(async ()=>{\n let Mt = typeof Re < \"u\" ? Re : -1, ht = Array.isArray(w) ? w : [\n w\n ], At = Mt === -1 ? ht : ht.slice(Mt + 1), wt = 0, mo = k0(Ee === !0 ? {\n hasMany: !0,\n relationTo: w,\n value: Ve\n } : {\n hasMany: !1,\n relationTo: w,\n value: Ve\n });\n z || (await At.reduce(async (Lr, gt)=>{\n let Bo = ce?.[gt], kr;\n if (U !== nt ? kr = 1 : kr = (qe[gt] || 0) + 1, await Lr, Bo === !1) return V(ht.indexOf(gt)), Promise.resolve();\n if (wt < 10) {\n let Mo = A({\n collectionSlug: gt\n }), An = Mo?.admin?.useAsTitle || \"id\", Fi = Mo?.defaultSort || \"id\";\n typeof R == \"string\" ? Fi = R : R?.[gt] && (Fi = R[gt]);\n let jr = {\n depth: 0,\n draft: !0,\n limit: C,\n locale: M,\n page: kr,\n select: {\n [An]: !0\n },\n sort: Fi,\n where: {\n and: [\n {\n id: {\n not_in: mo[gt]\n }\n }\n ]\n }\n };\n nt && jr.where.and.push({\n [An]: {\n like: nt\n }\n }), Bo && typeof Bo != \"boolean\" && jr.where.and.push(Bo), L0(jr.where);\n let br = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: k,\n path: `/${gt}`\n }), {\n body: qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(jr),\n credentials: \"include\",\n headers: {\n \"Accept-Language\": E.language,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Payload-HTTP-Method-Override\": \"GET\"\n },\n method: \"POST\"\n });\n if (br.ok) {\n let tn = await br.json();\n Z((Vs)=>({\n ...Vs,\n [gt]: kr\n })), tn.nextPage || V(ht.indexOf(gt)), tn.docs.length > 0 && (wt += tn.docs.length, Ue({\n type: \"ADD\",\n collection: Mo,\n config: T,\n docs: tn.docs,\n i18n: E,\n sort: Fe\n }));\n } else br.status === 403 ? (V(ht.indexOf(gt)), Ue({\n type: \"ADD\",\n collection: Mo,\n config: T,\n docs: [],\n i18n: E,\n ids: mo[gt],\n sort: Fe\n })) : Q(B(\"error:unspecific\"));\n }\n }, Promise.resolve()), typeof lt == \"function\" && lt());\n });\n }, [\n $,\n Be,\n w,\n z,\n U,\n A,\n R,\n C,\n M,\n k,\n E,\n T,\n B\n ]), oe = E0(({ hasMany: ce, search: Ee, value: Re })=>{\n Lt({\n filterOptions: u,\n lastLoadedPage: {},\n onSuccess: ()=>{\n q(!1);\n },\n search: Ee,\n sort: !0,\n ...ce === !0 ? {\n hasMany: ce,\n value: Re\n } : {\n hasMany: ce,\n value: Re\n }\n }), X(Ee);\n }, 300), pe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((ce)=>{\n U !== ce.search && (q(!0), Z({}), oe(ce));\n }, [\n U,\n oe\n ]), be = Qe(({ hasMany: ce, value: Ee })=>{\n let Re = k0(ce === !0 ? {\n hasMany: ce,\n relationTo: w,\n value: Ee\n } : {\n hasMany: ce,\n relationTo: w,\n value: Ee\n });\n Object.entries(Re).reduce(async (qe, [lt, nt])=>{\n await qe;\n let Fe = nt.filter((Ve)=>!Me.find((Mt)=>Mt?.options?.find((ht)=>ht.value === Ve && ht.relationTo === lt)));\n if (Fe.length > 0) {\n let Ve = A({\n collectionSlug: lt\n }), Mt = Ve?.admin?.useAsTitle || \"id\", ht = {\n depth: 0,\n draft: !0,\n limit: Fe.length,\n locale: M,\n select: {\n [Mt]: !0\n },\n where: {\n id: {\n in: Fe\n }\n }\n };\n if (!z) {\n let At = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: k,\n path: `/${lt}`\n }), {\n body: qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(ht),\n credentials: \"include\",\n headers: {\n \"Accept-Language\": E.language,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Payload-HTTP-Method-Override\": \"GET\"\n },\n method: \"POST\"\n }), wt = [];\n At.ok && (wt = (await At.json()).docs), Ue({\n type: \"ADD\",\n collection: Ve,\n config: T,\n docs: wt,\n i18n: E,\n ids: Fe,\n sort: !0\n });\n }\n }\n }, Promise.resolve());\n }), { mostRecentUpdate: ot } = Is(), je = Qe((ce)=>{\n if (!_) return !1;\n let Ee = ce.doc.id, Re = !1;\n if (ce.operation === \"update\" ? f === !0 ? Re = (Array.isArray(_) ? _ : [\n _\n ]).some((nt)=>nt.value === Ee && nt.relationTo === ce.entitySlug) : f === !1 && (Re = _?.value === Ee && _?.relationTo === ce.entitySlug) : ce.operation === \"create\" && (Re = ce.drawerSlug === Ke), !Re) return;\n let qe = A({\n collectionSlug: ce.entitySlug\n });\n if (Ue({\n type: \"UPDATE\",\n collection: qe,\n config: T,\n doc: ce.doc,\n i18n: E\n }), f) {\n let nt = (_ ? Array.isArray(_) ? _ : [\n _\n ] : []).map((Fe)=>({\n relationTo: Fe.value === Ee ? ce.entitySlug : Fe.relationTo,\n value: Fe.value\n }));\n y(nt);\n } else f === !1 && y({\n relationTo: ce.entitySlug,\n value: Ee\n });\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n ot && je(ot);\n }, [\n ot\n ]);\n let Je = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((ce)=>{\n Ue({\n type: \"ADD\",\n collection: ce.collectionConfig,\n config: T,\n docs: [\n ce.doc\n ],\n i18n: E,\n sort: !0\n }), f ? y(_ ? _.concat({\n relationTo: ce.collectionConfig.slug,\n value: ce.doc.id\n }) : null) : f === !1 && y({\n relationTo: ce.collectionConfig.slug,\n value: ce.doc.id\n });\n }, [\n E,\n T,\n f,\n y,\n _\n ]), Rt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((ce)=>{\n Ue({\n id: ce.id,\n type: \"REMOVE\",\n collection: ce.collectionConfig,\n config: T,\n i18n: E\n }), y(f && _ ? _.filter((Ee)=>Ee.value !== ce.id) : null);\n }, [\n E,\n T,\n f,\n y,\n _\n ]), Ut = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((ce, Ee)=>{\n if (!Ee) return !0;\n let Re = (0,payload_shared__WEBPACK_IMPORTED_MODULE_26__.wordBoundariesRegex)(Ee || \"\"), qe = 250, lt = String(ce.label);\n for(; lt.length > qe;){\n let nt = lt.indexOf(\" \", Ee.length);\n if (Re.test(lt.slice(0, nt === -1 ? Ee.length : nt + 1))) return !0;\n lt = lt.slice(nt === -1 ? Ee.length : nt + 1);\n }\n return Re.test(lt.slice(-qe));\n }, []), $o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ id: ce, collectionSlug: Ee, hasReadPermission: Re, openInNewTab: qe })=>{\n if (qe) {\n if (Re && ce && Ee) {\n let lt = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: T.routes.admin,\n path: `/collections/${Ee}/${ce}`,\n serverURL: P\n });\n window.open(lt, \"_blank\");\n }\n } else te.current = !0, j({\n id: ce,\n collectionSlug: Ee,\n hasReadPermission: Re\n });\n }, [\n T.routes.admin,\n P\n ]), Lt = Qe((ce)=>ge(ce));\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n _e.current && le && (q(!0), Lt({\n filterOptions: u,\n lastLoadedPage: {},\n onSuccess: ()=>{\n _e.current = !0, q(!1);\n },\n ...f === !0 ? {\n hasMany: f,\n value: he.current\n } : {\n hasMany: f,\n value: he.current\n }\n })), Ue({\n type: \"CLEAR\",\n exemptValues: he.current\n }), V(-1), Z({});\n }, [\n w,\n u,\n M,\n v,\n le,\n f\n ]);\n let gr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(_), De = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n (De.current || !(0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(_, gr.current)) && be(f === !0 ? {\n hasMany: f,\n value: _\n } : {\n hasMany: f,\n value: _\n }), De.current = !1, gr.current = _;\n }, [\n _,\n f\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let Ee = (Array.isArray(w) ? w : [\n w\n ]).reduce((Re, qe)=>(A({\n collectionSlug: qe\n })?.admin?.useAsTitle || \"id\") === \"id\" && Re, !0);\n Y(!Ee);\n }, [\n w,\n A\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n te.current && (we(), te.current = !1);\n }, [\n we,\n L\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n he.current = _;\n }, [\n _\n ]);\n let ze = SD({\n allowEdit: n,\n options: Me,\n value: _\n });\n return !Array.isArray(ze) && ze?.value === \"null\" && (ze.value = null), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n id,\n i,\n S && \"error\",\n z && \"error-loading\",\n I && `${id}--read-only`,\n !I && o && `${id}--allow-create`\n ].filter(Boolean).join(\" \"),\n id: `field-${v.replace(/\\./g, \"__\")}`,\n style: D,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: g,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: h,\n localized: b,\n path: v,\n required: F\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: c,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: v,\n showError: S\n })\n }),\n s,\n z ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${id}__error-loading`,\n children: z\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${id}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n backspaceRemovesValue: !(ae || fe),\n components: {\n MultiValueLabel: DD,\n SingleValue: AD,\n ...r !== \"select\" && {\n DropdownIndicator: null\n }\n },\n customProps: {\n disableKeyDown: ae || fe,\n disableMouseDown: ae || fe,\n onDocumentOpen: $o\n },\n disabled: I || ae || fe,\n filterOption: J ? Ut : void 0,\n getOptionValue: (ce)=>{\n if (ce) return f && Array.isArray(w) ? `${ce.relationTo}_${ce.value}` : ce.value;\n },\n isLoading: r === \"select\" && ue,\n isMulti: f,\n isSearchable: r === \"select\",\n isSortable: p,\n menuIsOpen: r === \"select\" ? le : !1,\n onChange: I ? void 0 : (ce)=>{\n f ? ce === null ? (he.current = [], y([])) : (he.current = ce, y(ce)) : f === !1 && (ce === null ? (he.current = null, y(null)) : (he.current = ce, y(ce)));\n },\n onInputChange: (ce)=>pe({\n search: ce,\n ...f === !0 ? {\n hasMany: f,\n value: _\n } : {\n hasMany: f,\n value: _\n }\n }),\n onMenuClose: ()=>{\n xe(!1);\n },\n onMenuOpen: ()=>{\n r === \"drawer\" ? me() : r === \"select\" && (xe(!0), _e.current || (q(!0), Lt({\n filterOptions: u,\n lastLoadedPage: {},\n onSuccess: ()=>{\n _e.current = !0, q(!1);\n },\n ...f === !0 ? {\n hasMany: f,\n value: _\n } : {\n hasMany: f,\n value: _\n }\n })));\n },\n onMenuScrollToBottom: ()=>{\n q(!0), Lt({\n filterOptions: u,\n lastFullyLoadedRelation: O,\n lastLoadedPage: W,\n onSuccess: ()=>{\n q(!1);\n },\n search: U,\n sort: !1,\n ...f === !0 ? {\n hasMany: f,\n value: m\n } : {\n hasMany: f,\n value: m\n }\n });\n },\n options: typeof d == \"function\" ? d(Me) : Me,\n placeholder: x,\n showError: S,\n value: ze ?? null\n }),\n !I && o && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pD, {\n path: v,\n relationTo: w,\n ...f === !0 ? {\n hasMany: f,\n onChange: y,\n value: _\n } : {\n hasMany: f,\n onChange: y,\n value: _\n }\n })\n ]\n }),\n e,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: a,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: l,\n path: v\n })\n })\n ]\n }),\n L.collectionSlug && L.hasReadPermission && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Oe, {\n onDelete: Rt,\n onDuplicate: Je\n }),\n r === \"drawer\" && !I && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(se, {\n allowCreate: o,\n enableRowSelections: !1,\n onSelect: ne\n })\n ]\n });\n};\nvar GG = (t)=>{\n _s36();\n let { field: e, field: { admin: { allowCreate: o = !0, allowEdit: n = !0, appearance: r = \"select\", className: s, description: i, isSortable: l = !0, placeholder: a, sortOptions: c } = {}, hasMany: u, label: d, localized: f, relationTo: m, required: p }, path: h, readOnly: g, validate: b } = t, C = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((j, O)=>{\n if (typeof b == \"function\") return b(j, {\n ...O,\n required: p\n });\n }, [\n b,\n p\n ]), { customComponents: { AfterInput: y, BeforeInput: v, Description: x, Error: I, Label: w } = {}, disabled: F, filterOptions: S, initialValue: R, path: D, setValue: _, showError: T, value: A } = Te({\n potentiallyStalePath: h,\n validate: C\n }), k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]), P = Array.isArray(m), [E] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"GG.useState\": ()=>Array.isArray(m) ? m : [\n m\n ]\n }[\"GG.useState\"]), B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((j)=>{\n if (!j) {\n _(null, j === A);\n return;\n }\n let O = !1;\n P ? O = Array.isArray(A) && Array.isArray(j) && A.length === j.length && A.every((W, Z)=>{\n let z = j[Z];\n return W.value === z.value && W.relationTo === z.relationTo;\n }) : O = Array.isArray(A) && Array.isArray(j) && A.length === j.length && A.every((W, Z)=>W === j[Z].value);\n let V = j.map((W)=>P ? W : W.value);\n _(V, O);\n }, [\n P,\n _,\n A\n ]), $ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((j)=>{\n if (!j) {\n _(null, j === A);\n return;\n }\n let O = !1;\n P ? O = A && j && A.value === j.value && A.relationTo === j.relationTo : O = A && j && A === j.value;\n let V = P ? j : j.value;\n _(V, O);\n }, [\n P,\n _,\n A\n ]), M = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"GG.useMemo[M]\": ()=>u === !0 ? Array.isArray(A) ? A.map({\n \"GG.useMemo[M]\": (j)=>P ? j : {\n relationTo: Array.isArray(E) ? E[0] : E,\n value: j\n }\n }[\"GG.useMemo[M]\"]) : A : A && (P ? A : {\n relationTo: Array.isArray(E) ? E[0] : E,\n value: A\n })\n }[\"GG.useMemo[M]\"], [\n u,\n A,\n P,\n E\n ]), L = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"GG.useMemo[L]\": ()=>u === !0 ? Array.isArray(R) ? R.map({\n \"GG.useMemo[L]\": (j)=>P ? j : {\n relationTo: Array.isArray(E) ? E[0] : E,\n value: j\n }\n }[\"GG.useMemo[L]\"]) : R : R && (P ? R : {\n relationTo: Array.isArray(E) ? E[0] : E,\n value: R\n })\n }[\"GG.useMemo[L]\"], [\n R,\n P,\n E,\n u\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(M0, {\n AfterInput: y,\n allowCreate: o,\n allowEdit: n,\n appearance: r,\n BeforeInput: v,\n className: s,\n Description: x,\n description: i,\n Error: I,\n filterOptions: S,\n formatDisplayedOptions: P ? void 0 : (j)=>j.map((O)=>O.options).flat(),\n isSortable: l,\n Label: w,\n label: d,\n localized: f,\n maxResultsPerRequest: 10,\n maxRows: e?.maxRows,\n minRows: e?.minRows,\n path: D,\n placeholder: a,\n readOnly: g || F,\n relationTo: E,\n required: p,\n showError: T,\n sortOptions: c,\n style: k,\n ...u === !0 ? {\n hasMany: !0,\n initialValue: L,\n onChange: B,\n value: M\n } : {\n hasMany: !1,\n initialValue: L,\n onChange: $,\n value: M\n }\n });\n}, ad = We(GG);\n_s36(GG, \"ACrc9ZhTeTZkL7mWVbp0pTwJg30=\");\nvar ld = ()=>null;\n\n\nvar PD = \"row\", zG = (t)=>{\n let { field: { admin: { className: e, style: o } = {}, fields: n }, forceRender: r = !1, indexPath: s = \"\", parentPath: i = \"\", parentSchemaPath: l = \"\", permissions: a, readOnly: c } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(UT, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n Pe,\n PD,\n e\n ].filter(Boolean).join(\" \"),\n style: o || void 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n className: `${PD}__fields`,\n fields: n,\n forceRender: r,\n margins: !1,\n parentIndexPath: s,\n parentPath: i,\n parentSchemaPath: l,\n permissions: a,\n readOnly: c\n })\n })\n });\n}, cd = We(zG);\n\n\n\n\n\n\nvar Zr = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(37), { id: o, AfterInput: n, BeforeInput: r, className: s, Description: i, description: l, Error: a, filterOption: c, hasMany: u, isClearable: d, isSortable: f, label: m, Label: p, localized: h, onChange: g, onInputChange: b, options: C, path: y, placeholder: v, readOnly: x, required: I, showError: w, style: F, value: S } = t, R = u === void 0 ? !1 : u, D = d === void 0 ? !0 : d, _ = f === void 0 ? !0 : f, { i18n: T } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), A;\n if (e[0] !== n || e[1] !== r || e[2] !== i || e[3] !== a || e[4] !== p || e[5] !== s || e[6] !== l || e[7] !== c || e[8] !== R || e[9] !== T || e[10] !== o || e[11] !== D || e[12] !== _ || e[13] !== m || e[14] !== h || e[15] !== g || e[16] !== b || e[17] !== C || e[18] !== y || e[19] !== v || e[20] !== x || e[21] !== I || e[22] !== w || e[23] !== F || e[24] !== S) {\n let k;\n if (R && Array.isArray(S)) {\n let M;\n e[26] !== T || e[27] !== C ? (M = (L)=>{\n let j = C.find((O)=>O.value === L);\n return {\n label: j ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(j.label, T) : L,\n value: j?.value ?? L\n };\n }, e[26] = T, e[27] = C, e[28] = M) : M = e[28], k = S.map(M);\n } else if (S) {\n let M;\n e[29] !== S ? (M = (j)=>j.value === S, e[29] = S, e[30] = M) : M = e[30];\n let L = C.find(M);\n k = {\n label: L ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(L.label, T) : S,\n value: L?.value ?? S\n };\n } else k = null;\n let P = w && \"error\", E = x && \"read-only\", B;\n e[31] !== s || e[32] !== P || e[33] !== E ? (B = [\n Pe,\n \"select\",\n s,\n P,\n E\n ].filter(Boolean), e[31] = s, e[32] = P, e[33] = E, e[34] = B) : B = e[34];\n let $;\n e[35] !== T ? ($ = (M)=>({\n ...M,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(M.label, T)\n }), e[35] = T, e[36] = $) : $ = e[36], A = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: B.join(\" \"),\n id: `field-${y.replace(/\\./g, \"__\")}`,\n style: F,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: p,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: m,\n localized: h,\n path: y,\n required: I\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: a,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: y,\n showError: w\n })\n }),\n r,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n disabled: x,\n filterOption: c,\n id: o,\n isClearable: D,\n isMulti: R,\n isSortable: _,\n onChange: g,\n onInputChange: b,\n options: C.map($),\n placeholder: v,\n showError: w,\n value: k\n }),\n n\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: i,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: l,\n path: y\n })\n })\n ]\n }), e[0] = n, e[1] = r, e[2] = i, e[3] = a, e[4] = p, e[5] = s, e[6] = l, e[7] = c, e[8] = R, e[9] = T, e[10] = o, e[11] = D, e[12] = _, e[13] = m, e[14] = h, e[15] = g, e[16] = b, e[17] = C, e[18] = y, e[19] = v, e[20] = x, e[21] = I, e[22] = w, e[23] = F, e[24] = S, e[25] = A;\n } else A = e[25];\n return A;\n};\n_c181 = Zr;\nvar fh = (t)=>t.map((e)=>typeof e == \"object\" && (e.value || e.value === \"\") ? e : {\n label: e,\n value: e\n }), YG = (t)=>{\n _s37();\n let { field: e, field: { name: o, admin: { className: n, description: r, isClearable: s = !0, isSortable: i = !0, placeholder: l } = {}, hasMany: a = !1, label: c, localized: u, options: d = [], required: f }, onChange: m, path: p, readOnly: h, validate: g } = t, b = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"YG.useMemo[b]\": ()=>fh(d)\n }[\"YG.useMemo[b]\"], [\n d\n ]), C = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((P, E)=>{\n if (typeof g == \"function\") return g(P, {\n ...E,\n hasMany: a,\n options: b,\n required: f\n });\n }, [\n g,\n f,\n a,\n b\n ]), { customComponents: { AfterInput: y, BeforeInput: v, Description: x, Error: I, Label: w } = {}, disabled: F, path: S, selectFilterOptions: R, setValue: D, showError: _, value: T } = Te({\n potentiallyStalePath: p,\n validate: C\n }), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((P)=>{\n if (!h || F) {\n let E = null;\n P && a ? Array.isArray(P) ? E = P.map((B)=>B.value) : E = [] : P && !Array.isArray(P) && (E = P.value), typeof m == \"function\" && m(E), D(E);\n }\n }, [\n h,\n F,\n a,\n D,\n m\n ]), k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zr, {\n AfterInput: y,\n BeforeInput: v,\n className: n,\n Description: x,\n description: r,\n Error: I,\n filterOption: R ? ({ label: P, value: E }, B)=>R?.some(($)=>(typeof $ == \"string\" ? $ : $.value) === E) && P.toLowerCase().includes(B.toLowerCase()) : void 0,\n hasMany: a,\n isClearable: s,\n isSortable: i,\n Label: w,\n label: c,\n localized: u,\n name: o,\n onChange: A,\n options: b,\n path: S,\n placeholder: l,\n readOnly: h || F,\n required: f,\n showError: _,\n style: k,\n value: T\n });\n}, ud = We(YG);\n_s37(YG, \"jaSv6eM0qWuHsvzUsm7vY/qkXx8=\");\n\n\n\n\n\nvar UD = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(U0(), 1);\n\n\n\n\n\n\n\n\nfunction oz(t) {\n let e = [];\n for (let o of t)if (o) {\n let n = o.split(\" \\u2192 \"), r = !1;\n for(let s = 0; s < e.length; s++)if (e[s].startsWith(n[0])) {\n e.splice(s + 1, 0, o), r = !0;\n break;\n }\n r || e.push(o);\n }\n return e;\n}\nfunction rz(t) {\n let e = t.indexOf(\":\"), o = e >= 0 ? t.slice(0, e) : t, n = e >= 0 ? t.slice(e + 1) : void 0;\n if (!n) return {\n message: o\n };\n let r = n.split(\",\").map((s)=>s.replaceAll(\" > \", \" \\u2192 \").trim());\n return r.length === 1 ? {\n errors: r,\n message: `${o}: `\n } : {\n errors: oz(r),\n message: `${o} (${r.length}):`\n };\n}\nfunction $D(t) {\n _s38();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { errorMessage: o } = t, n;\n e[0] !== o ? (n = ()=>rz(o), e[0] = o, e[1] = n) : n = e[1];\n let [r] = react__WEBPACK_IMPORTED_MODULE_0__.useState(n), { errors: s, message: i } = r, l;\n return e[2] !== s || e[3] !== i ? (l = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n children: [\n i,\n Array.isArray(s) && s.length > 0 ? s.length === 1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n \"data-testid\": \"field-error\",\n children: s[0]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n \"data-testid\": \"field-errors\",\n children: s.map(nz)\n }) : null\n ]\n }), e[2] = s, e[3] = i, e[4] = l) : l = e[4], l;\n}\n_s38($D, \"aOERrzKq2YUtCeBmlfR9vDEhLVs=\");\nfunction nz(t, e) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: t\n }, e);\n}\n\n\nfunction Y0(t, e, o) {\n let n = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(11), r;\n n[0] !== t ? (r = ()=>t, n[0] = t, n[1] = r) : r = n[1];\n let [s, i] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(r), l;\n n[2] !== o || n[3] !== t ? (l = ()=>{\n let d = setTimeout(()=>{\n i(()=>t);\n }, o);\n return ()=>{\n clearTimeout(d);\n };\n }, n[2] = o, n[3] = t, n[4] = l) : l = n[4];\n let a;\n n[5] !== o || n[6] !== e ? (a = [\n ...e,\n o\n ], n[5] = o, n[6] = e, n[7] = a) : a = n[7], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(l, a);\n let c, u;\n n[8] !== s ? (c = ()=>{\n s();\n }, u = [\n s\n ], n[8] = s, n[9] = c, n[10] = u) : (c = n[9], u = n[10]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(c, u);\n}\n_c182 = Y0;\n\n\n\nvar OD = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null), Z0 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { children: o } = t, [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(uz), s;\n e[0] !== n ? (s = (u)=>{\n let { collectionSlug: d } = u;\n return n.get(d);\n }, e[0] = n, e[1] = s) : s = e[1];\n let i = s, l;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (l = (u)=>{\n let { collectionSlug: d, handler: f } = u;\n r((m)=>{\n let p = new Map(m);\n return p.set(d, f), p;\n });\n }, e[2] = l) : l = e[2];\n let a = l, c;\n return e[3] !== o || e[4] !== i ? (c = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(OD, {\n value: {\n getUploadHandler: i,\n setUploadHandler: a\n },\n children: o\n }), e[3] = o, e[4] = i, e[5] = c) : c = e[5], c;\n}, dd = ()=>{\n let t = react__WEBPACK_IMPORTED_MODULE_0__.use(OD);\n if (t === null) throw new Error(\"useUploadHandlers must be used within UploadHandlersProvider\");\n return t;\n};\nfunction uz() {\n return new Map;\n}\nvar VD = {\n 413: \"Your request was too large to submit successfully.\"\n};\nvar hh = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(gf(), 1);\n\n\n\nfunction mz(t) {\n let e = t.split(\".\"), o = -1;\n for(let n = e.length - 1; n >= 0; n--)if (/^\\d+$/.test(e[n])) {\n o = n;\n break;\n }\n return o === -1 || o === e.length - 1 ? null : {\n arrayPath: e.slice(0, o).join(\".\"),\n fieldPath: e.slice(o + 1).join(\".\"),\n rowIndex: parseInt(e[o], 10)\n };\n}\nvar GD = ({ acceptValues: t, currentState: e = {}, incomingState: o })=>{\n let n = {\n ...e\n };\n for (let [r, s] of Object.entries(o || {})){\n if (!(r in e) && !s.addedByServer) continue;\n let i = s.addedByServer || t === !0 || typeof t == \"object\" && t !== null && t.overrideLocalChanges === !1 && !e[r]?.isModified;\n if (i && !s.addedByServer && t !== !0) {\n let a = mz(r);\n if (a) {\n let { arrayPath: c, rowIndex: u } = a, d = e[c]?.rows?.[u]?.id, f = o[c]?.rows?.[u]?.id;\n (d === void 0 || f && d !== f) && (i = !1);\n }\n }\n let l = s;\n if (!i) {\n let { initialValue: a, value: c, ...u } = s;\n l = u;\n }\n n[r] = {\n ...e[r],\n ...l\n }, e[r] && \"errorPaths\" in e[r] && !(\"errorPaths\" in s) && (n[r].errorPaths = []), Array.isArray(s.rows) && r in e && (t === !0 ? n[r].rows = s.rows.map((a, c)=>({\n ...e[r]?.rows?.[c] || {},\n ...a\n })) : (n[r].rows = [\n ...e[r]?.rows || []\n ], s.rows.forEach((a)=>{\n let c = e[r].rows?.findIndex((u)=>u.id === a.id);\n if (c > -1) n[r].rows[c] = {\n ...e[r].rows[c],\n ...a\n };\n else if (a.addedByServer) {\n let u = {\n ...a\n };\n delete u.addedByServer, n[r].rows.push(u);\n }\n }), \"value\" in s && n[r].rows.length !== s.value && (n[r].value = n[r].rows.length))), s.valid !== !1 && (n[r].valid = !0), s.passesCondition !== !1 && (n[r].passesCondition = !0), s.blocksFilterOptions || delete n[r].blocksFilterOptions, delete n[r].addedByServer;\n }\n return (0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(n, e) ? e : n;\n};\n_c183 = GD;\nvar Xl = (t, e)=>{\n let o = {}, n = Object.entries(e).reduce((r, [s, i])=>{\n let l = r;\n if (s.indexOf(`${t}.`) === 0) {\n let [a] = s.replace(`${t}.`, \"\").split(\".\");\n l[a] || (l[a] = {}), l[a][s.replace(`${t}.${String(a)}.`, \"\")] = {\n ...i\n };\n } else o[s] = i;\n return l;\n }, []);\n return {\n remainingFields: o,\n rows: n\n };\n}, Yl = (t, e)=>e.reduce((o, n, r)=>({\n ...o,\n ...Object.entries(n).reduce((s, [i, l])=>({\n ...s,\n [`${t}.${r}.${i}`]: {\n ...l\n }\n }), {})\n }), {});\nvar md = \"default\" in hh.default ? hh.default.default : hh.default;\nfunction fd(t, e) {\n switch(e.type){\n case \"ADD_ROW\":\n {\n let { blockType: o, path: n, rowIndex: r, subFieldState: s = {} } = e, i = typeof r == \"number\" ? r : t[n]?.rows?.length || 0, l = [\n ...t[n]?.rows || []\n ], a = {\n id: s?.id?.value || new md().toHexString(),\n isLoading: !0\n };\n o && (a.blockType = o), l.splice(i, 0, a), o && (s.blockType = {\n initialValue: o,\n valid: !0,\n value: o\n });\n let { remainingFields: c, rows: u } = Xl(n, t);\n return u.splice(i, 0, s), {\n ...c,\n ...Yl(n, u),\n [`${n}.${i}.id`]: {\n initialValue: a.id,\n passesCondition: !0,\n valid: !0,\n value: a.id\n },\n [n]: {\n ...t[n],\n disableFormData: !0,\n rows: l,\n value: u.length\n }\n };\n }\n case \"ADD_SERVER_ERRORS\":\n {\n let o = {\n ...t\n }, n = [];\n return e.errors.forEach(({ message: r, path: s })=>{\n o[s] = {\n ...o[s] || {\n initialValue: null,\n value: null\n },\n errorMessage: r,\n valid: !1\n };\n let i = s.split(\".\");\n i.length > 1 && n.push({\n fieldErrorPath: s,\n parentPath: i.slice(0, i.length - 1).join(\".\")\n });\n }), o = Object.entries(o).reduce((r, [s, i])=>{\n let l = n.reduce((c, { fieldErrorPath: u, parentPath: d })=>(d.startsWith(s) && c.push(u), c), []), a = !1;\n if (l.length > 0) {\n let c = Array.isArray(i.errorPaths) ? i.errorPaths : [];\n l.forEach((u)=>{\n c.includes(u) || (c.push(u), a = !0);\n }), a && (r[s] = {\n ...i,\n errorPaths: c\n });\n }\n return a || (r[s] = i), r;\n }, {}), o;\n }\n case \"DUPLICATE_ROW\":\n {\n let { path: o, rowIndex: n } = e, { remainingFields: r, rows: s } = Xl(o, t), i = [\n ...t[o].rows || []\n ], l = (0,payload_shared__WEBPACK_IMPORTED_MODULE_27__.deepCopyObjectSimpleWithoutReactComponents)(i[n]), a = new md().toHexString();\n l.id && (l.id = a), i[n]?.customComponents?.RowLabel && (l.customComponents = {\n RowLabel: i[n].customComponents.RowLabel\n });\n let c = (0,payload_shared__WEBPACK_IMPORTED_MODULE_27__.deepCopyObjectSimpleWithoutReactComponents)(s[n]);\n c.id && (c.id.value = a, c.id.initialValue = a);\n for (let d of Object.keys(c).filter((f)=>f.endsWith(\".id\"))){\n let f = c[d], m = new md().toHexString();\n if (f && typeof f.value == \"string\" && md.isValid(f.value)) {\n c[d].value = m, c[d].initialValue = m;\n let p = d.split(\".\"), h = parseInt(p[p.length - 2], 10), g = p.slice(0, p.length - 2).join(\".\"), b = c?.[g]?.rows;\n c[g] && Array.isArray(b) && (b[h] ? b[h].id = m : b[h] = {\n id: m\n });\n }\n }\n return Object.keys(c).length > 0 && (s.splice(n + 1, 0, c), i.splice(n + 1, 0, l)), {\n ...r,\n ...Yl(o, s),\n [o]: {\n ...t[o],\n disableFormData: !0,\n rows: i,\n value: s.length\n }\n };\n }\n case \"MERGE_SERVER_STATE\":\n {\n let { acceptValues: o, prevStateRef: n, serverState: r } = e, s = GD({\n acceptValues: o,\n currentState: t || {},\n incomingState: r\n });\n return n.current = s, s;\n }\n case \"MOVE_ROW\":\n {\n let { moveFromIndex: o, moveToIndex: n, path: r } = e, { remainingFields: s, rows: i } = Xl(r, t), l = i[o];\n i.splice(o, 1), i.splice(n, 0, l);\n let a = [\n ...t[r]?.rows || []\n ], c = {\n ...a[o]\n };\n return a.splice(o, 1), a.splice(n, 0, c), {\n ...s,\n ...Yl(r, i),\n [r]: {\n ...t[r],\n rows: a\n }\n };\n }\n case \"REMOVE\":\n {\n let o = {\n ...t\n };\n return o[e.path] && delete o[e.path], o;\n }\n case \"REMOVE_ROW\":\n {\n let { path: o, rowIndex: n } = e, { remainingFields: r, rows: s } = Xl(o, t), i = [\n ...t[o]?.rows || []\n ];\n return s.splice(n, 1), i.splice(n, 1), {\n ...r,\n [o]: {\n ...t[o],\n disableFormData: s.length > 0,\n rows: i,\n value: s.length\n },\n ...Yl(o, s)\n };\n }\n case \"REPLACE_ROW\":\n {\n let { blockType: o, path: n, rowIndex: r, subFieldState: s = {} } = e, { remainingFields: i, rows: l } = Xl(n, t), a = Math.max(0, Math.min(r, l?.length - 1 || 0)), c = [\n ...t[n]?.rows || []\n ];\n return c[a] = {\n id: new md().toHexString(),\n blockType: o || void 0,\n collapsed: !1\n }, o && (s.blockType = {\n initialValue: o,\n valid: !0,\n value: o\n }), l[a] = s, {\n ...i,\n ...Yl(n, l),\n [n]: {\n ...t[n],\n disableFormData: !0,\n rows: c,\n value: l.length\n }\n };\n }\n case \"REPLACE_STATE\":\n {\n if (e.optimize !== !1) {\n let o = {};\n for (let [n, r] of Object.entries(e.state)){\n let s = t[n];\n r.valid !== !1 && (r.valid = !0), r.passesCondition !== !1 && (r.passesCondition = !0), (0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(s, r) ? s && (o[n] = s) : o[n] = r;\n }\n return o;\n }\n if (e.sanitize) for (let o of Object.values(e.state))o.valid !== !1 && (o.valid = !0), o.passesCondition !== !1 && (o.passesCondition = !0);\n return e.state;\n }\n case \"SET_ALL_ROWS_COLLAPSED\":\n {\n let { path: o, updatedRows: n } = e;\n return {\n ...t,\n [o]: {\n ...t[o],\n rows: n\n }\n };\n }\n case \"SET_ROW_COLLAPSED\":\n {\n let { path: o, updatedRows: n } = e;\n return {\n ...t,\n [o]: {\n ...t[o],\n rows: n\n }\n };\n }\n case \"UPDATE\":\n {\n let o = Object.entries(e).reduce((r, [s, i])=>[\n \"disableFormData\",\n \"errorMessage\",\n \"initialValue\",\n \"rows\",\n \"valid\",\n \"validate\",\n \"value\"\n ].includes(s) ? {\n ...r,\n [s]: i,\n ...s === \"value\" ? {\n isModified: !0\n } : {}\n } : r, t?.[e.path] || {}), n = {\n ...t,\n [e.path]: o\n };\n if (\"value\" in e) for (let [r, s] of Object.entries(n))r !== e.path && \"isModified\" in s && delete n[r].isModified;\n return n;\n }\n case \"UPDATE_MANY\":\n {\n let o = {\n ...t\n };\n return Object.entries(e.formState).forEach(([n, r])=>{\n o[n] = r;\n }), o;\n }\n default:\n return t;\n }\n}\nvar pz = ()=>{}, hz = ()=>{}, gz = ()=>{}, bz = ()=>{}, vz = ()=>{}, yz = ()=>{}, Cz = ()=>{}, xz = ()=>{}, wz = ()=>{}, Sz = ()=>{}, gh = {\n addFieldRow: ()=>{},\n buildRowErrors: ()=>{},\n createFormData: vz,\n disabled: !1,\n dispatchFields: gz,\n fields: {},\n formRef: null,\n getData: ()=>{},\n getDataByPath: ()=>{},\n getField: ()=>{},\n getFields: ()=>({}),\n getSiblingData: hz,\n initializing: void 0,\n isValid: !0,\n moveFieldRow: ()=>{},\n removeFieldRow: ()=>{},\n replaceFieldRow: ()=>{},\n replaceState: ()=>{},\n reset: Sz,\n setBackgroundProcessing: xz,\n setDisabled: ()=>{},\n setIsValid: ()=>{},\n setModified: yz,\n setProcessing: Cz,\n setSubmitted: wz,\n submit: pz,\n validateForm: bz\n};\nvar Pz = \"form\", _s99 = (t)=>{\n let { id: e, collectionSlug: o, docConfig: n, docPermissions: r, getDocPreferences: s, globalSlug: i } = Se(), l = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasDraftValidationEnabled)(n), { action: a, beforeSubmit: c, children: u, className: d, disabled: f, disableSuccessStatus: m, disableValidationOnSubmit: p, el: h, handleResponse: g, initialState: b, isDocumentForm: C, isInitializing: y, onChange: v, onSubmit: x, onSuccess: I, redirect: w, submitted: F, uuid: S, waitForAutocomplete: R } = t, D = \"method\" in t ? t?.method : void 0, _ = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), T = Ka(), { code: A } = ye(), { i18n: k, t: P } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { refreshCookie: E, user: B } = Ie(), $ = Cr(), { queueTask: M } = da(), { getFormState: L } = Nt(), { startRouteTransition: j } = Ye(), { getUploadHandler: O } = dd(), { config: V } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), [W, Z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(f || !1), [z, Q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [U, X] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [ue, q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0), [J, Y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(y), [le, xe] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [_e, Be] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), Me = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(_e), Ue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), he = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Fe)=>{\n Me.current = Fe, Be(Fe);\n }, []), [Oe, Ke] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), ae = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Fe)=>{\n Me.current && (Ue.current = !0), Ke(Fe);\n }, []), we = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), G = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), se = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), K = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0), fe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(fd, {}, ()=>b), [me, ne] = fe;\n G.current.fields = me;\n let te = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(me), ge = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n let Fe = {}, Ve = !0, Mt = G.current.getData(), ht = Object.entries(G.current.fields).map(async ([At, wt])=>{\n let mo = wt, Lr = At ? At.split(\".\") : [];\n if (wt.passesCondition !== !1) {\n let gt = mo.valid;\n if (\"validate\" in wt && typeof wt.validate == \"function\") {\n let Bo = wt.value;\n wt?.rows && Array.isArray(wt.rows) && (Bo = G.current.getDataByPath(At)), gt = await wt.validate(Bo, {\n ...wt,\n id: e,\n collectionSlug: o,\n blockData: void 0,\n data: T?.getData ? T.getData() : Mt,\n event: \"submit\",\n operation: $,\n path: Lr,\n preferences: {},\n req: {\n payload: {\n config: V\n },\n t: P,\n user: B\n },\n siblingData: G.current.getSiblingData(At)\n }), typeof gt == \"string\" ? (mo.errorMessage = gt, mo.valid = !1) : (mo.valid = !0, mo.errorMessage = void 0);\n }\n mo.valid === !1 && (Ve = !1);\n }\n Fe[At] = mo;\n });\n return await Promise.all(ht), (0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(G.current.fields, Fe) || ne({\n type: \"REPLACE_STATE\",\n state: Fe\n }), q(Ve), Ve;\n }, [\n o,\n V,\n ne,\n e,\n $,\n P,\n B,\n T\n ]), oe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (Fe, Ve)=>{\n let { acceptValues: Mt = !0, action: ht = a, context: At, disableFormWhileProcessing: wt = !0, disableSuccessStatus: mo, method: Lr = D, overrides: gt = {}, skipValidation: Bo } = Fe || {}, kr = mo ?? m;\n if (W) {\n Ve && Ve.preventDefault();\n return;\n }\n let Mo, An, Fi = new Promise((Xt, wo)=>{\n An = Xt, Mo = wo;\n }), jr = ht || typeof a == \"string\" || typeof a == \"function\";\n w || kr || !jr ? (An = (Xt)=>ee.success(Xt), Mo = (Xt)=>ee.error(Xt)) : ee.promise(Fi, {\n error: (Xt)=>Xt,\n loading: P(\"general:submitting\"),\n success: (Xt)=>Xt\n }), Ve && (Ve.stopPropagation(), Ve.preventDefault()), wt && (xe(!0), Z(!0)), R && await (0,payload_shared__WEBPACK_IMPORTED_MODULE_28__.wait)(100);\n let br = (0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(G.current.fields, !0), tn = (0,payload_shared__WEBPACK_IMPORTED_MODULE_27__.deepCopyObjectSimpleWithoutReactComponents)(G.current.fields, {\n excludeFiles: !0\n });\n if (Array.isArray(c)) {\n let Xt;\n await c.reduce(async ($r, Ec)=>{\n await $r, Xt = await Ec({\n formState: tn\n });\n }, Promise.resolve());\n let wo = Object.entries(Xt).every(([, $r])=>$r.valid !== !1);\n if (q(wo), !wo) return xe(!1), X(!0), Z(!1), ne({\n type: \"REPLACE_STATE\",\n state: Xt\n });\n }\n let Vs = Bo || p ? !0 : await G.current.validateForm();\n if (q(Vs), !Vs) {\n Mo(P(\"error:correctInvalidFields\")), xe(!1), X(!0), Z(!1);\n return;\n }\n let Xa = {};\n if (typeof gt == \"function\" ? Xa = gt(G.current.fields) : typeof gt == \"object\" && (Xa = gt), x) {\n for (let [Xt, wo] of Object.entries(Xa))br[Xt] = wo;\n x(G.current.fields, br);\n }\n if (!jr) {\n xe(!1), X(!0), Z(!1);\n return;\n }\n try {\n let Xt = await G.current.createFormData(Xa, {\n data: br,\n mergeOverrideData: typeof gt != \"function\"\n }), wo;\n if (typeof ht == \"string\" ? wo = await Ge[Lr.toLowerCase()](ht, {\n body: Xt,\n headers: {\n \"Accept-Language\": k.language\n }\n }) : typeof a == \"function\" && (wo = await a(Xt)), Ue.current ? Ue.current = !1 : ae(!1), Z(!1), typeof g == \"function\") {\n g(wo, An, Mo);\n return;\n }\n let $r = wo.headers.get(\"content-type\"), Ec = $r && $r.indexOf(\"application/json\") !== -1, Pn = {};\n if (Ec && (Pn = await wo.json()), wo.status < 400) {\n if (typeof I == \"function\") {\n let Gs = await I(Pn, {\n context: At,\n formState: tn\n });\n Gs && ne({\n type: \"MERGE_SERVER_STATE\",\n acceptValues: Mt,\n prevStateRef: te,\n serverState: Gs\n });\n }\n X(!1), xe(!1), w ? j(()=>_.push(w)) : kr || An(Pn.message || P(\"general:submissionSuccessful\"));\n } else {\n if (xe(!1), X(!0), gt._status === \"draft\" && (ae(!0), l || X(!1)), G.current = {\n ...G.current\n }, Pn.message) {\n Mo(Pn.message);\n return;\n }\n if (Array.isArray(Pn.errors)) {\n let [Hm, yb] = Pn.errors.reduce(([Nc, Cb], Di)=>{\n let Um = [], Ya = [];\n return Di?.message && Ya.push(Di), Array.isArray(Di?.data?.errors) && Di.data?.errors.forEach((Za)=>{\n Za?.path ? Um.push(Za) : Ya.push(Za);\n }), [\n [\n ...Nc,\n ...Um\n ],\n [\n ...Cb,\n ...Ya\n ]\n ];\n }, [\n [],\n []\n ]);\n q(!1), ne({\n type: \"ADD_SERVER_ERRORS\",\n errors: Hm\n }), yb.forEach((Nc)=>{\n Mo((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($D, {\n errorMessage: Nc.message || P(\"error:unknown\")\n }));\n });\n return;\n }\n let Gs = VD?.[wo.status] || wo?.statusText || P(\"error:unknown\");\n Mo(Gs);\n }\n return {\n formState: G.current.fields,\n res: wo\n };\n } catch (Xt) {\n console.error(\"Error submitting form\", Xt), xe(!1), X(!0), Z(!1), Mo(Xt.message);\n }\n }, [\n c,\n j,\n a,\n m,\n p,\n W,\n ne,\n g,\n D,\n x,\n I,\n w,\n _,\n P,\n k,\n l,\n R,\n ae,\n X\n ]), pe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>G.current.fields, []), be = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Fe)=>G.current.fields[Fe], []), ot = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(G.current.fields, !0), []), je = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Fe)=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_30__.getSiblingData)(G.current.fields, Fe), []), Je = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Fe)=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_31__.getDataByPath)(G.current.fields, Fe), []), Rt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (Fe, { data: Ve, mergeOverrideData: Mt = !0 })=>{\n let ht = Ve || (0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(G.current.fields, !0), At = ht?.file;\n if (n && \"upload\" in n && n.upload && At) {\n delete ht.file;\n let Lr = O({\n collectionSlug: o\n });\n if (typeof Lr == \"function\") {\n let gt = At.name, Bo = await Lr({\n file: At,\n updateFilename: (kr)=>{\n gt = kr;\n }\n });\n At = JSON.stringify({\n clientUploadContext: Bo,\n collectionSlug: o,\n filename: gt,\n mimeType: At.type,\n size: At.size\n });\n }\n }\n Mt ? ht = {\n ...ht,\n ...Fe\n } : ht = Fe;\n let wt = {\n _payload: JSON.stringify(ht)\n };\n return n && \"upload\" in n && n.upload && At && (wt.file = At), (0, UD.serialize)(wt, {\n indices: !0,\n nullsAsUndefineds: !1\n });\n }, [\n o,\n n,\n O\n ]), Ut = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (Fe)=>{\n let Ve = Tr(se), Mt = await s(), { state: ht } = await L({\n id: e,\n collectionSlug: o,\n data: Fe,\n docPermissions: r,\n docPreferences: Mt,\n globalSlug: i,\n locale: A,\n operation: $,\n renderAllFields: !0,\n schemaPath: o || i,\n signal: Ve.signal,\n skipValidation: !0\n });\n G.current = {\n ...gh\n }, ae(!1), ne({\n type: \"REPLACE_STATE\",\n state: ht\n }), se.current = null;\n }, [\n o,\n ne,\n i,\n e,\n $,\n L,\n r,\n s,\n A,\n ae\n ]), $o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Fe)=>{\n G.current = {\n ...gh\n }, ae(!1), ne({\n type: \"REPLACE_STATE\",\n state: Fe\n });\n }, [\n ne,\n ae\n ]), Lt = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ blockType: Fe, path: Ve, rowIndex: Mt, subFieldState: ht })=>{\n let At = Je(Ve) || [], wt = Mt === void 0 ? At.length : Mt;\n ne({\n type: \"ADD_ROW\",\n blockType: Fe,\n path: Ve,\n rowIndex: wt,\n subFieldState: ht\n }), ae(!0);\n }, [\n ne,\n Je,\n ae\n ]), gr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ moveFromIndex: Fe, moveToIndex: Ve, path: Mt })=>{\n ne({\n type: \"MOVE_ROW\",\n moveFromIndex: Fe,\n moveToIndex: Ve,\n path: Mt\n }), ae(!0);\n }, [\n ne,\n ae\n ]), De = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ path: Fe, rowIndex: Ve })=>{\n ne({\n type: \"REMOVE_ROW\",\n path: Fe,\n rowIndex: Ve\n }), ae(!0);\n }, [\n ne,\n ae\n ]), ze = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ blockType: Fe, path: Ve, rowIndex: Mt, subFieldState: ht })=>{\n let At = Je(Ve), wt = Mt === void 0 ? At.length : Mt;\n ne({\n type: \"REPLACE_ROW\",\n blockType: Fe,\n path: Ve,\n rowIndex: wt,\n subFieldState: ht\n }), ae(!0);\n }, [\n ne,\n Je,\n ae\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let Fe = se.current;\n return ()=>{\n _r(Fe);\n };\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n y !== void 0 && Y(y);\n }, [\n y\n ]), G.current.submit = oe, G.current.getFields = pe, G.current.getField = be, G.current.getData = ot, G.current.getSiblingData = je, G.current.getDataByPath = Je, G.current.validateForm = ge, G.current.createFormData = Rt, G.current.setModified = ae, G.current.setProcessing = xe, G.current.setBackgroundProcessing = he, G.current.setSubmitted = X, G.current.setIsValid = q, G.current.disabled = W, G.current.setDisabled = Z, G.current.formRef = we, G.current.reset = Ut, G.current.replaceState = $o, G.current.dispatchFields = ne, G.current.addFieldRow = Lt, G.current.removeFieldRow = De, G.current.moveFieldRow = gr, G.current.replaceFieldRow = ze, G.current.uuid = S, G.current.initializing = J, G.current.isValid = ue, (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n Q(!0);\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n typeof f == \"boolean\" && Z(f);\n }, [\n f\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n typeof F == \"boolean\" && X(F);\n }, [\n F\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n b && (G.current = {\n ...gh\n }, ne({\n type: \"REPLACE_STATE\",\n optimize: !1,\n sanitize: !0,\n state: b\n }));\n }, [\n b,\n ne\n ]), zi(()=>{\n E();\n }, 15e3, [\n me\n ]);\n let ce = Qe(()=>{\n G.current = {\n ...G.current\n }, ae(!1);\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n ce();\n }, [\n A\n ]);\n let Ee = [\n d,\n Pz\n ].filter(Boolean).join(\" \"), Re = Qe((Fe)=>{\n M(async ()=>{\n if (Array.isArray(v)) {\n let Ve;\n for (let Mt of v)Ve = await Mt({\n formState: (0,payload_shared__WEBPACK_IMPORTED_MODULE_27__.deepCopyObjectSimpleWithoutReactComponents)(me, {\n excludeFiles: !0\n }),\n submitted: Fe\n });\n ne({\n type: \"MERGE_SERVER_STATE\",\n prevStateRef: te,\n serverState: Ve\n });\n }\n });\n });\n Y0(()=>{\n (K.current || !(0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(me, te.current)) && Oe && Re(U), te.current = me, K.current = !1;\n }, [\n Oe,\n U,\n me\n ], 250);\n let qe = C ? tf : react__WEBPACK_IMPORTED_MODULE_0__.Fragment, lt = C ? {\n value: G.current\n } : {};\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(h || \"form\", {\n action: typeof a == \"function\" ? void 0 : a,\n className: Ee,\n \"data-form-ready\": !le && z && !J,\n method: D,\n noValidate: !0,\n onSubmit: (Fe)=>{\n G.current.submit({}, Fe);\n },\n ref: we,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(qe, {\n ...lt,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ef, {\n value: G.current,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(of, {\n value: {\n fields: me,\n ...G.current\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rf, {\n value: U,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($b, {\n value: !z || z && J,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(nf, {\n value: le,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jb, {\n value: _e,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sf, {\n value: Oe,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Vc.Provider, {\n value: fe,\n children: u\n })\n })\n })\n })\n })\n })\n })\n })\n })\n });\n};\n\n\n\n\n\nvar bh = \"tabs-field__tab-button\", q0 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { hidden: o, isActive: n, parentPath: r, setIsActive: s, tab: i } = t, { i18n: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [a, c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(void 0), u;\n if (e[0] !== a || e[1] !== o || e[2] !== l || e[3] !== n || e[4] !== r || e[5] !== s || e[6] !== i) {\n let d = [\n ...r ? r.split(\".\").slice(0, -1) : [],\n ...(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.tabHasName)(i) ? [\n i.name\n ] : []\n ], f = a > 0, m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qi, {\n fields: i.fields,\n path: d,\n setErrorCount: c\n }), p = f && `${bh}--has-error`, h = n && `${bh}--active`, g = o && `${bh}--hidden`, b;\n e[8] !== p || e[9] !== h || e[10] !== g ? (b = [\n bh,\n p,\n h,\n g\n ].filter(Boolean), e[8] = p, e[9] = h, e[10] = g, e[11] = b) : b = e[11], u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n m,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n className: b.join(\" \"),\n onClick: s,\n type: \"button\",\n children: [\n i.label ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.label, l) : (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.tabHasName)(i) ? i.name : \"\",\n f && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: a,\n i18n: l\n })\n ]\n })\n ]\n }), e[0] = a, e[1] = o, e[2] = l, e[3] = n, e[4] = r, e[5] = s, e[6] = i, e[7] = u;\n } else u = e[7];\n return u;\n};\nvar Fs = \"tabs-field\";\nvar Oz = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(44), { field: o, forceRender: n, indexPath: r, parentPath: s, parentSchemaPath: i, path: l, permissions: a, readOnly: c, schemaPath: u } = t, { admin: d, tabs: f } = o, m;\n e[0] !== d ? (m = d === void 0 ? {} : d, e[0] = d, e[1] = m) : m = e[1];\n let { className: p } = m, h;\n e[2] !== f ? (h = f === void 0 ? [] : f, e[2] = f, e[3] = h) : h = e[3];\n let g = h, b = n === void 0 ? !1 : n, C = r === void 0 ? \"\" : r, y = s === void 0 ? \"\" : s, v = i === void 0 ? \"\" : i, x = l === void 0 ? \"\" : l, I = u === void 0 ? \"\" : u, { getPreference: w, setPreference: F } = so(), { preferencesKey: S } = Se(), { i18n: R } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { isWithinCollapsible: D } = Qs(), _;\n e[4] !== g ? (_ = (J)=>{\n let [Y] = J;\n return g.map((le, xe)=>{\n let _e = le?.id;\n return {\n index: xe,\n passesCondition: Y?.[_e]?.passesCondition ?? !0,\n tab: le\n };\n });\n }, e[4] = g, e[5] = _) : _ = e[5];\n let T = Ot(_), A;\n e[6] !== T ? (A = ()=>T.filter(Gz)?.[0]?.index ?? 0, e[6] = T, e[7] = A) : A = e[7];\n let [k, P] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(A), E = `tabs-${C}`, B = T[k], $ = B?.tab, M = $?.admin?.description ?? $?.description, L = typeof M == \"function\" ? M({\n i18n: R,\n t: R.t\n }) : M, j = T.some(zz), O;\n e[8] !== w || e[9] !== x || e[10] !== S || e[11] !== F || e[12] !== E ? (O = async (J)=>{\n P(J);\n let Y = await w(S);\n S && F(S, {\n ...Y,\n ...x ? {\n fields: {\n ...Y?.fields || {},\n [x]: {\n ...Y?.fields?.[x],\n tabIndex: J\n }\n }\n } : {\n fields: {\n ...Y?.fields,\n [E]: {\n ...Y?.fields?.[E],\n tabIndex: J\n }\n }\n }\n });\n }, e[8] = w, e[9] = x, e[10] = S, e[11] = F, e[12] = E, e[13] = O) : O = e[13];\n let V = O, W;\n e[14] !== w || e[15] !== x || e[16] !== S || e[17] !== T.length || e[18] !== E ? (W = ()=>{\n S && (async ()=>{\n let Y = await w(S), le = x ? Y?.fields?.[x]?.tabIndex : Y?.fields?.[E]?.tabIndex, xe = typeof le == \"number\" && le < T.length ? le : 0;\n P(xe);\n })();\n }, e[14] = w, e[15] = x, e[16] = S, e[17] = T.length, e[18] = E, e[19] = W) : W = e[19];\n let Z;\n e[20] !== w || e[21] !== y || e[22] !== v || e[23] !== x || e[24] !== S || e[25] !== g || e[26] !== E ? (Z = [\n x,\n w,\n S,\n E,\n g,\n y,\n v\n ], e[20] = w, e[21] = y, e[22] = v, e[23] = x, e[24] = S, e[25] = g, e[26] = E, e[27] = Z) : Z = e[27], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(W, Z);\n let z;\n e[28] !== B?.passesCondition || e[29] !== V || e[30] !== T ? (z = ()=>{\n if (B?.passesCondition === !1) {\n let J = T.find(Wz);\n J && V(J.index);\n }\n }, e[28] = B?.passesCondition, e[29] = V, e[30] = T, e[31] = z) : z = e[31];\n let Q;\n e[32] !== B || e[33] !== V || e[34] !== T ? (Q = [\n B,\n T,\n V\n ], e[32] = B, e[33] = V, e[34] = T, e[35] = Q) : Q = e[35], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(z, Q);\n let U = D && `${Fs}--within-collapsible`, X = !j && `${Fs}--hidden`, ue;\n e[36] !== p || e[37] !== U || e[38] !== X ? (ue = [\n Pe,\n p,\n Fs,\n U,\n X\n ].filter(Boolean), e[36] = p, e[37] = U, e[38] = X, e[39] = ue) : ue = e[39];\n let q;\n return e[40] !== k || e[41] !== V || e[42] !== x ? (q = (J)=>{\n let { index: Y, passesCondition: le, tab: xe } = J;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(q0, {\n hidden: !le,\n isActive: k === Y,\n parentPath: x,\n setIsActive: ()=>{\n V(Y);\n },\n tab: xe\n }, Y);\n }, e[40] = k, e[41] = V, e[42] = x, e[43] = q) : q = e[43], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: ue.join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Kv, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Fs}__tabs-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Fs}__tabs`,\n children: T.map(q)\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Fs}__content-wrap`,\n children: $ && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Vz, {\n description: L,\n field: $,\n forceRender: b,\n hidden: !1,\n parentIndexPath: C,\n parentPath: x,\n parentSchemaPath: I,\n path: x,\n permissions: a && typeof a == \"object\" && \"name\" in $ ? a[$.name] && typeof a[$.name] == \"object\" && \"fields\" in a[$.name] ? a[$.name].fields : a[$.name] : a,\n readOnly: c,\n tabIndex: k\n })\n })\n ]\n })\n });\n}, pd = We(Oz);\nfunction Vz(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(21), { description: o, field: n, forceRender: r, hidden: s, label: i, parentIndexPath: l, parentPath: a, parentSchemaPath: c, permissions: u, readOnly: d, tabIndex: f } = t, { i18n: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { customComponents: p } = Te(), h, g;\n if (e[0] !== o || e[1] !== n || e[2] !== r || e[3] !== s || e[4] !== m || e[5] !== i || e[6] !== l || e[7] !== a || e[8] !== c || e[9] !== u || e[10] !== d || e[11] !== p || e[12] !== f) {\n g = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let { AfterInput: b, BeforeInput: C, Description: y, Field: v } = p === void 0 ? {} : p;\n if (v) {\n g = v;\n break e;\n }\n let { indexPath: x, path: I, schemaPath: w } = (0,payload_shared__WEBPACK_IMPORTED_MODULE_32__.getFieldPaths)({\n field: n,\n index: f,\n parentIndexPath: l,\n parentPath: a,\n parentSchemaPath: c\n }), F = s && `${Fs}__tab--hidden`, S;\n e[15] !== m || e[16] !== i ? (S = i && `${Fs}__tabConfigLabel-${(0,payload_shared__WEBPACK_IMPORTED_MODULE_33__.toKebabCase)((0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, m))}`, e[15] = m, e[16] = i, e[17] = S) : S = e[17];\n let R;\n e[18] !== F || e[19] !== S ? (R = [\n F,\n `${Fs}__tab`,\n S\n ].filter(Boolean), e[18] = F, e[19] = S, e[20] = R) : R = e[20], h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: R.join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: y,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: o,\n marginPlacement: \"bottom\",\n path: a\n })\n }),\n C,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n fields: n.fields,\n forceRender: r,\n parentIndexPath: x,\n parentPath: I,\n parentSchemaPath: w,\n permissions: u,\n readOnly: d\n }),\n b\n ]\n });\n }\n e[0] = o, e[1] = n, e[2] = r, e[3] = s, e[4] = m, e[5] = i, e[6] = l, e[7] = a, e[8] = c, e[9] = u, e[10] = d, e[11] = p, e[12] = f, e[13] = h, e[14] = g;\n } else h = e[13], g = e[14];\n return g !== Symbol.for(\"react.early_return_sentinel\") ? g : h;\n}\n_c184 = Vz;\nfunction Gz(t) {\n let { passesCondition: e } = t;\n return e;\n}\n_c185 = Gz;\nfunction zz(t) {\n let { passesCondition: e } = t;\n return e;\n}\nfunction Wz(t) {\n let { passesCondition: e } = t;\n return e;\n}\n_c186 = Wz;\n\n\n\n\n\n\nvar hd = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(32), { AfterInput: o, BeforeInput: n, className: r, Description: s, description: i, Error: l, hasMany: a, htmlAttributes: c, inputRef: u, Label: d, label: f, localized: m, maxRows: p, onChange: h, onKeyDown: g, path: b, placeholder: C, readOnly: y, required: v, rtl: x, showError: I, style: w, value: F, valueToRender: S } = t, { i18n: R, t: D } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), _ = Yz, T;\n if (e[0] !== o || e[1] !== n || e[2] !== s || e[3] !== l || e[4] !== d || e[5] !== r || e[6] !== i || e[7] !== a || e[8] !== c || e[9] !== R || e[10] !== u || e[11] !== f || e[12] !== m || e[13] !== p || e[14] !== h || e[15] !== g || e[16] !== b || e[17] !== C || e[18] !== y || e[19] !== v || e[20] !== x || e[21] !== I || e[22] !== w || e[23] !== D || e[24] !== F || e[25] !== S) {\n let A = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(C, R), k = I && \"error\", P = y && \"read-only\", E = a && \"has-many\", B;\n e[27] !== r || e[28] !== k || e[29] !== P || e[30] !== E ? (B = [\n Pe,\n \"text\",\n r,\n k,\n P,\n E\n ].filter(Boolean), e[27] = r, e[28] = k, e[29] = P, e[30] = E, e[31] = B) : B = e[31], T = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: B.join(\" \"),\n style: w,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: d,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: f,\n localized: m,\n path: b,\n required: v\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: l,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: b,\n showError: I\n })\n }),\n n,\n a ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n className: `field-${b.replace(/\\./g, \"__\")}`,\n components: {\n DropdownIndicator: null\n },\n customProps: {\n editableProps: _\n },\n disabled: y,\n filterOption: ()=>p ? !(Array.isArray(F) && p && F.length >= p) : !0,\n isClearable: !1,\n isCreatable: !0,\n isMulti: !0,\n isSortable: !0,\n menuIsOpen: !1,\n noOptionsMessage: ()=>Array.isArray(F) && F.length >= p ? D(\"validation:limitReached\", {\n max: p,\n value: F.length + 1\n }) : null,\n onChange: h,\n options: [],\n placeholder: A,\n showError: I,\n value: S\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"data-rtl\": x,\n disabled: y,\n id: `field-${b?.replace(/\\./g, \"__\")}`,\n name: b,\n onChange: h,\n onKeyDown: g,\n placeholder: A,\n ref: u,\n type: \"text\",\n value: F || \"\",\n ...c ?? {}\n }),\n o,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: s,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: i,\n path: b\n })\n })\n ]\n })\n ]\n }), e[0] = o, e[1] = n, e[2] = s, e[3] = l, e[4] = d, e[5] = r, e[6] = i, e[7] = a, e[8] = c, e[9] = R, e[10] = u, e[11] = f, e[12] = m, e[13] = p, e[14] = h, e[15] = g, e[16] = b, e[17] = C, e[18] = y, e[19] = v, e[20] = x, e[21] = I, e[22] = w, e[23] = D, e[24] = F, e[25] = S, e[26] = T;\n } else T = e[26];\n return T;\n};\nfunction Xz(t) {\n t.currentTarget.contentEditable = \"false\";\n}\n_c187 = Xz;\nfunction Yz(t, e, o) {\n let n = `${e}--editable`;\n return {\n onBlur: Xz,\n onClick: (r)=>{\n r.currentTarget.contentEditable = \"true\", r.currentTarget.classList.add(n), r.currentTarget.focus();\n },\n onKeyDown: (r)=>{\n if (!r.nativeEvent.isComposing && (r.key === \"Enter\" || r.key === \"Tab\" || r.key === \"Escape\")) {\n if (r.currentTarget.contentEditable = \"false\", r.currentTarget.classList.remove(n), t.value.value = r.currentTarget.innerText, t.label = r.currentTarget.innerText, t.value.value.replaceAll(`\n`, \"\")) o.onChange(o.value, {\n action: \"create-option\",\n option: t\n });\n else if (Array.isArray(o.value)) {\n let s = o.value.filter((i)=>i.id !== t.id);\n o.onChange(s, {\n action: \"pop-value\",\n removedValue: t\n });\n }\n r.preventDefault();\n }\n r.stopPropagation();\n }\n };\n}\n_c188 = Yz;\nvar Kz = (t)=>{\n let { field: e, field: { admin: { autoComplete: o, className: n, description: r, placeholder: s, rtl: i } = {}, hasMany: l, label: a, localized: c, maxLength: u, maxRows: d, minLength: f, minRows: m, required: p }, inputRef: h, path: g, readOnly: b, validate: C } = t, y = ye(), { config: { localization: v } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L, j)=>{\n if (typeof C == \"function\") return C(L, {\n ...j,\n maxLength: u,\n minLength: f,\n required: p\n });\n }, [\n C,\n f,\n u,\n p\n ]), { customComponents: { AfterInput: I, BeforeInput: w, Description: F, Error: S, Label: R } = {}, disabled: D, path: _, setValue: T, showError: A, value: k } = Te({\n potentiallyStalePath: g,\n validate: x\n }), P = Xi({\n fieldLocalized: c,\n fieldRTL: i,\n locale: y,\n localizationConfig: v || void 0\n }), [E, B] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), $ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L)=>{\n if (!(b || D)) {\n let j;\n L ? Array.isArray(L) ? j = L.map((O)=>O.value?.value || O.value) : j = [\n L.value?.value || L.value\n ] : j = [], T(j);\n }\n }, [\n b,\n T,\n D\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n l && Array.isArray(k) && B(k.map((L, j)=>({\n id: `${L}${j}`,\n label: `${L}`,\n value: {\n toString: ()=>`${L}${j}`,\n value: L?.value || L\n }\n })));\n }, [\n k,\n l\n ]);\n let M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hd, {\n AfterInput: I,\n BeforeInput: w,\n className: n,\n Description: F,\n description: r,\n Error: S,\n hasMany: l,\n htmlAttributes: {\n autoComplete: o || void 0\n },\n inputRef: h,\n Label: R,\n label: a,\n localized: c,\n maxRows: d,\n minRows: m,\n onChange: l ? $ : (L)=>{\n T(L.target.value);\n },\n path: _,\n placeholder: s,\n readOnly: b || D,\n required: p,\n rtl: P,\n showError: A,\n style: M,\n value: k || \"\",\n valueToRender: E\n });\n}, ba = We(Kz);\n\n\n\n\n\n\n\nvar Q0 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(26), { AfterInput: o, BeforeInput: n, className: r, Description: s, description: i, Error: l, Label: a, label: c, localized: u, onChange: d, path: f, placeholder: m, readOnly: p, required: h, rows: g, rtl: b, showError: C, style: y, value: v } = t, { i18n: x } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), I = C && \"error\", w = p && \"read-only\", F;\n e[0] !== r || e[1] !== I || e[2] !== w ? (F = [\n Pe,\n \"textarea\",\n r,\n I,\n w\n ].filter(Boolean), e[0] = r, e[1] = I, e[2] = w, e[3] = F) : F = e[3];\n let S = F.join(\" \"), R = `field-${f.replace(/\\./g, \"__\")}`, D;\n return e[4] !== o || e[5] !== n || e[6] !== s || e[7] !== l || e[8] !== a || e[9] !== i || e[10] !== x || e[11] !== c || e[12] !== u || e[13] !== d || e[14] !== f || e[15] !== m || e[16] !== p || e[17] !== h || e[18] !== g || e[19] !== b || e[20] !== C || e[21] !== y || e[22] !== S || e[23] !== R || e[24] !== v ? (D = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: S,\n style: y,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: a,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n htmlFor: R,\n label: c,\n localized: u,\n path: f,\n required: h\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: l,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: f,\n showError: C\n })\n }),\n n,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"textarea-outer\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"textarea\", {\n \"data-rtl\": b,\n disabled: p,\n id: `field-${f.replace(/\\./g, \"__\")}`,\n name: f,\n onChange: d,\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(m, x),\n rows: g,\n style: {\n \"--rows\": g\n },\n value: v || \"\"\n })\n }),\n o,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: s,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: i,\n path: f\n })\n })\n ]\n })\n ]\n }), e[4] = o, e[5] = n, e[6] = s, e[7] = l, e[8] = a, e[9] = i, e[10] = x, e[11] = c, e[12] = u, e[13] = d, e[14] = f, e[15] = m, e[16] = p, e[17] = h, e[18] = g, e[19] = b, e[20] = C, e[21] = y, e[22] = S, e[23] = R, e[24] = v, e[25] = D) : D = e[25], D;\n};\n_c189 = Q0;\nvar iW = (t)=>{\n let { field: e, field: { admin: { className: o, description: n, placeholder: r, rows: s, rtl: i } = {}, label: l, localized: a, maxLength: c, minLength: u, required: d }, path: f, readOnly: m, validate: p } = t, { i18n: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: { localization: g } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), b = ye(), C = Xi({\n fieldLocalized: a,\n fieldRTL: i,\n locale: b,\n localizationConfig: g || void 0\n }), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((k, P)=>{\n if (typeof p == \"function\") return p(k, {\n ...P,\n maxLength: c,\n minLength: u,\n required: d\n });\n }, [\n p,\n d,\n c,\n u\n ]), { customComponents: { AfterInput: v, BeforeInput: x, Description: I, Error: w, Label: F } = {}, disabled: S, path: R, setValue: D, showError: _, value: T } = Te({\n potentiallyStalePath: f,\n validate: y\n }), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Q0, {\n AfterInput: v,\n BeforeInput: x,\n className: o,\n Description: I,\n description: n,\n Error: w,\n Label: F,\n label: l,\n localized: a,\n onChange: (k)=>{\n D(k.target.value);\n },\n path: R,\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r, h),\n readOnly: m || S,\n required: d,\n rows: s,\n rtl: C,\n showError: _,\n style: A,\n value: T\n });\n}, gd = We(iW);\nvar bd = ()=>null;\n\n\n\n\n\n\n\n\n\nvar oR = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(void 0), Zl = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { children: o } = t, [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [s, i] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), [l, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), c;\n return e[0] !== o || e[1] !== l || e[2] !== n || e[3] !== s ? (c = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(oR, {\n value: {\n setUploadControlFile: a,\n setUploadControlFileName: r,\n setUploadControlFileUrl: i,\n uploadControlFile: l,\n uploadControlFileName: n,\n uploadControlFileUrl: s\n },\n children: o\n }), e[0] = o, e[1] = l, e[2] = n, e[3] = s, e[4] = c) : c = e[4], c;\n}, ey = ()=>{\n let t = (0,react__WEBPACK_IMPORTED_MODULE_0__.use)(oR);\n if (!t) throw new Error(\"useUploadControls must be used within an UploadControlsProvider\");\n return t;\n};\n\n\n\n\nvar rR = (t)=>{\n t.preventDefault(), t.stopPropagation();\n}, mW = \"dropzone\";\nfunction va({ children: t, className: e, disabled: o = !1, dropzoneStyle: n = \"default\", multipleFiles: r, onChange: s }) {\n _s39();\n let i = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), [l, a] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), c = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"va.useCallback[c]\": (h)=>{\n if (!r && h.length > 1) {\n let g = new DataTransfer;\n g.items.add(h[0]), s(g.files);\n } else s(h);\n }\n }[\"va.useCallback[c]\"], [\n r,\n s\n ]), u = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"va.useCallback[u]\": (h)=>{\n h.preventDefault(), h.stopPropagation(), h.clipboardData.files && h.clipboardData.files.length > 0 && c(h.clipboardData.files);\n }\n }[\"va.useCallback[u]\"], [\n c\n ]), d = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"va.useCallback[d]\": (h)=>{\n h.preventDefault(), h.stopPropagation(), a(!0);\n }\n }[\"va.useCallback[d]\"], []), f = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"va.useCallback[f]\": (h)=>{\n h.preventDefault(), h.stopPropagation(), a(!1);\n }\n }[\"va.useCallback[f]\"], []), m = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"va.useCallback[m]\": (h)=>{\n if (h.preventDefault(), h.stopPropagation(), a(!1), h.dataTransfer.files && h.dataTransfer.files.length > 0) {\n c(h.dataTransfer.files), a(!1);\n try {\n h.dataTransfer.clearData();\n } catch {}\n }\n }\n }[\"va.useCallback[m]\"], [\n c\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"va.useEffect\": ()=>{\n let h = i.current;\n return h && !o ? (h.addEventListener(\"dragenter\", d), h.addEventListener(\"dragleave\", f), h.addEventListener(\"dragover\", rR), h.addEventListener(\"drop\", m), h.addEventListener(\"paste\", u), ({\n \"va.useEffect\": ()=>{\n h.removeEventListener(\"dragenter\", d), h.removeEventListener(\"dragleave\", f), h.removeEventListener(\"dragover\", rR), h.removeEventListener(\"drop\", m), h.removeEventListener(\"paste\", u);\n }\n })[\"va.useEffect\"]) : ({\n \"va.useEffect\": ()=>null\n })[\"va.useEffect\"];\n }\n }[\"va.useEffect\"], [\n o,\n d,\n f,\n m,\n u\n ]);\n let p = [\n mW,\n e,\n l ? \"dragging\" : \"\",\n `dropzoneStyle--${n}`\n ].filter(Boolean).join(\" \");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: p,\n ref: i,\n children: t\n });\n}\n_s39(va, \"ebWd9SyT0SQJ++nErFrdoM9HoWM=\");\n\n\n\n\n\nvar pW = \"drawer-close-button\";\nfunction vh(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { onClick: o } = t, { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), r;\n return e[0] !== o || e[1] !== n ? (r = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": n(\"general:close\"),\n className: pW,\n onClick: o,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n }), e[0] = o, e[1] = n, e[2] = r) : r = e[2], r;\n}\nvar gW = \"bulk-upload--drawer-header\";\nfunction di({ onClose: t, title: e }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: gW,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h2\", {\n title: e,\n children: e\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vh, {\n onClick: t\n })\n ]\n });\n}\nvar Ch = \"bulk-upload--add-files\";\nfunction xh({ acceptMimeTypes: t, onCancel: e, onDrop: o }) {\n _s40();\n let { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), r = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Ch,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(di, {\n onClose: e,\n title: n(\"upload:addFiles\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ch}__dropArea`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(va, {\n multipleFiles: !0,\n onChange: o,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"subtle\",\n iconPosition: \"left\",\n onClick: ()=>{\n r.current && r.current.click();\n },\n size: \"small\",\n children: n(\"upload:selectFile\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n accept: t,\n \"aria-hidden\": \"true\",\n className: `${Ch}__hidden-input`,\n hidden: !0,\n multiple: !0,\n onChange: (s)=>{\n s.target.files && s.target.files.length > 0 && o(s.target.files);\n },\n ref: r,\n type: \"file\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n className: `${Ch}__dragAndDropText`,\n children: [\n n(\"general:or\"),\n \" \",\n n(\"upload:dragAndDrop\")\n ]\n })\n ]\n })\n })\n ]\n });\n}\n_s40(xh, \"Lq+CXJYiaU2AO+bpX59BigZK4nk=\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar iR = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(U0(), 1);\n\nasync function aR(t = {}, e = {}, o, n) {\n let r = (0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(t, !0), s = r?.file;\n if (s && delete r.file, s && typeof n == \"function\") {\n let a = s.name, c = await n({\n file: s,\n updateFilename: (u)=>{\n a = u;\n }\n });\n s = JSON.stringify({\n clientUploadContext: c,\n collectionSlug: o,\n filename: a,\n mimeType: s.type,\n size: s.size\n });\n }\n let i = {\n ...r,\n ...e\n }, l = {\n _payload: JSON.stringify(i),\n file: s\n };\n return (0, iR.serialize)(l, {\n indices: !0,\n nullsAsUndefineds: !1\n });\n}\nfunction lR(t, e) {\n switch(e.type){\n case \"ADD_FORMS\":\n {\n let o = [];\n for(let n = 0; n < e.forms.length; n++)o[n] = {\n errorCount: 0,\n formID: e.forms[n].formID ?? (crypto.randomUUID ? crypto.randomUUID() : mn()),\n formState: {\n ...e.forms[n].initialState || {},\n file: {\n initialValue: e.forms[n].file,\n valid: !0,\n value: e.forms[n].file\n }\n },\n uploadEdits: {}\n };\n return {\n ...t,\n activeIndex: 0,\n forms: [\n ...o,\n ...t.forms\n ]\n };\n }\n case \"REMOVE_FORM\":\n {\n let o = [\n ...t.forms\n ], [n] = o.splice(e.index, 1), r = t.activeIndex >= e.index, s = t.activeIndex === e.index ? e.index : r ? t.activeIndex - 1 : t.activeIndex, i = Math.min(o.length - 1, s);\n return {\n ...t,\n activeIndex: r ? i : t.activeIndex,\n forms: o,\n totalErrorCount: t.totalErrorCount - n.errorCount\n };\n }\n case \"REPLACE\":\n return {\n ...t,\n ...e.state\n };\n case \"SET_ACTIVE_INDEX\":\n return {\n ...t,\n activeIndex: e.index\n };\n case \"UPDATE_ERROR_COUNT\":\n {\n let o = [\n ...t.forms\n ];\n return o[e.index].errorCount = e.count, {\n ...t,\n forms: o,\n totalErrorCount: o.reduce((n, r)=>n + r.errorCount, 0)\n };\n }\n case \"UPDATE_FORM\":\n {\n let o = [\n ...t.forms\n ];\n return o[e.index].errorCount = e.errorCount, o[e.index] = {\n ...o[e.index],\n formState: {\n ...o[e.index].formState,\n ...e.formState\n },\n uploadEdits: {\n ...o[e.index].uploadEdits,\n ...e.uploadEdits\n }\n }, {\n ...t,\n forms: o,\n totalErrorCount: o.reduce((n, r)=>n + r.errorCount, 0)\n };\n }\n default:\n return t;\n }\n}\nvar cR = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n activeIndex: 0,\n addFiles: ()=>Promise.resolve(),\n bulkUpdateForm: ()=>null,\n collectionSlug: \"\",\n docPermissions: void 0,\n documentSlots: {},\n forms: [],\n getFormDataRef: {\n current: ()=>({})\n },\n hasPublishPermission: !1,\n hasSavePermission: !1,\n hasSubmitted: !1,\n isInitializing: !1,\n removeFile: ()=>{},\n saveAllDocs: ()=>Promise.resolve(),\n setActiveIndex: ()=>0,\n setFormTotalErrorCount: ()=>{},\n totalErrorCount: 0,\n updateUploadEdits: ()=>{}\n}), wW = {\n activeIndex: 0,\n forms: [],\n totalErrorCount: 0\n};\nfunction uR({ children: t }) {\n _s41();\n let { config: e } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: { api: o } } = e, { code: n } = ye(), { i18n: r, t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { getDocumentSlots: i, getFormState: l } = Nt(), { getUploadHandler: a } = dd(), [c, u] = react__WEBPACK_IMPORTED_MODULE_0__.useState({}), [d, f] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [m, p] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [h, g] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [b, C] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [y, v] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [x, I] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [w, F] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [S, R] = react__WEBPACK_IMPORTED_MODULE_0__.useReducer(lR, wW), { activeIndex: D, forms: _, totalErrorCount: T } = S, A = react__WEBPACK_IMPORTED_MODULE_0__.useRef(_);\n A.current = _;\n let { toggleLoadingOverlay: k } = Wp(), { closeModal: P } = ie(), { collectionSlug: E, drawerSlug: B, initialFiles: $, initialForms: M, onSuccess: L, setInitialFiles: j, setInitialForms: O, setSuccessfullyUploaded: V } = Ho(), [W, Z] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [z, Q] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\"\"), U = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), X = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), ue = react__WEBPACK_IMPORTED_MODULE_0__.useRef({\n \"uR.useRef[ue]\": ()=>({})\n }[\"uR.useRef[ue]\"]), q = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: o,\n path: \"\"\n }), J = `${q}/${E}`, Y = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[Y]\": async ()=>{\n let G = {\n locale: n || void 0\n }, se = `/${E}/access`, fe = await (await fetch(`${q}${se}?${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(G)}`, {\n credentials: \"include\",\n headers: {\n \"Accept-Language\": r.language,\n \"Content-Type\": \"application/json\"\n },\n method: \"post\"\n })).json(), me = await fetch(`${q}${se}?${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(G)}`, {\n body: JSON.stringify({\n _status: \"published\"\n }),\n credentials: \"include\",\n headers: {\n \"Accept-Language\": r.language,\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\"\n }).then({\n \"uR.useCallback[Y]\": (ne)=>ne.json()\n }[\"uR.useCallback[Y]\"]);\n p(fe), g(nu({\n collectionSlug: E,\n docPermissions: fe,\n isEditing: !1\n })), C(me?.update), I(!0);\n }\n }[\"uR.useCallback[Y]\"], [\n q,\n n,\n E,\n r.language\n ]), le = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[le]\": async (G)=>{\n G?.signal && G.abort(\"aborting previous fetch for initial form state without files\");\n let se = await i({\n collectionSlug: E\n });\n u(se);\n try {\n let { state: K } = await l({\n collectionSlug: E,\n docPermissions: m,\n docPreferences: {\n fields: {}\n },\n locale: n,\n operation: \"create\",\n renderAllFields: !0,\n schemaPath: E,\n skipValidation: !0\n });\n X.current = K, v(!0);\n } catch {}\n }\n }[\"uR.useCallback[le]\"], [\n i,\n E,\n l,\n m,\n n\n ]), xe = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[xe]\": (G)=>{\n let se = ue.current();\n R({\n type: \"REPLACE\",\n state: {\n activeIndex: G,\n forms: _.map({\n \"uR.useCallback[xe]\": (K, fe)=>fe === D ? {\n errorCount: K.errorCount,\n formID: K.formID,\n formState: se,\n uploadEdits: K.uploadEdits\n } : K\n }[\"uR.useCallback[xe]\"])\n }\n });\n }\n }[\"uR.useCallback[xe]\"], [\n _,\n D\n ]), _e = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[_e]\": async (G)=>{\n _.length && R({\n type: \"UPDATE_FORM\",\n errorCount: _[D].errorCount,\n formState: ue.current(),\n index: D\n }), k({\n isLoading: !0,\n key: \"addingDocs\"\n }), y || await le(), R({\n type: \"ADD_FORMS\",\n forms: Array.from(G).map({\n \"uR.useCallback[_e]\": (se)=>({\n file: se,\n initialState: X.current\n })\n }[\"uR.useCallback[_e]\"])\n }), k({\n isLoading: !1,\n key: \"addingDocs\"\n });\n }\n }[\"uR.useCallback[_e]\"], [\n le,\n y,\n k,\n D,\n _\n ]), Be = Qe(_e), Me = Qe(async (G)=>{\n k({\n isLoading: !0,\n key: \"addingDocs\"\n }), y || await le(), R({\n type: \"ADD_FORMS\",\n forms: G.map((se)=>({\n ...se,\n initialState: se?.initialState || X.current\n }))\n }), k({\n isLoading: !1,\n key: \"addingDocs\"\n });\n }), Ue = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[Ue]\": (G)=>{\n R({\n type: \"REMOVE_FORM\",\n index: G\n });\n }\n }[\"uR.useCallback[Ue]\"], []), he = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[he]\": ({ errorCount: G, index: se })=>{\n R({\n type: \"UPDATE_ERROR_COUNT\",\n count: G,\n index: se\n });\n }\n }[\"uR.useCallback[he]\"], []), Oe = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[Oe]\": async ({ overrides: G } = {})=>{\n let se = ue.current(), K = [\n ..._\n ];\n K[D] = {\n errorCount: K[D].errorCount,\n formID: K[D].formID,\n formState: se,\n uploadEdits: K[D].uploadEdits\n };\n let fe = K[D]?.formID, me = [];\n Z(!0);\n for(let oe = 0; oe < K.length; oe++)try {\n let pe = K[oe], be = pe.formState?.file?.value;\n Q(s(\"general:uploadingBulk\", {\n current: oe + 1,\n total: K.length\n }));\n let ot = `${J}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n locale: n,\n uploadEdits: pe?.uploadEdits || void 0\n }, {\n addQueryPrefix: !0\n })}`, je = await fetch(ot, {\n body: await aR(pe.formState, G, E, a({\n collectionSlug: E\n })),\n credentials: \"include\",\n method: \"POST\"\n }), Je = await je.json();\n je.status === 201 && Je?.doc && me.push({\n collectionSlug: E,\n doc: Je.doc,\n formID: pe.formID\n });\n let [Rt, Ut] = (Je?.errors || []).reduce({\n \"uR.useCallback[Oe]\": ([De, ze], ce)=>{\n let Ee = [], Re = [];\n return ce?.message && Re.push(ce), Array.isArray(ce?.data?.errors) && ce.data?.errors.forEach({\n \"uR.useCallback[Oe]\": (qe)=>{\n qe?.path ? Ee.push(qe) : Re.push(qe);\n }\n }[\"uR.useCallback[Oe]\"]), [\n [\n ...De,\n ...Ee\n ],\n [\n ...ze,\n ...Re\n ]\n ];\n }\n }[\"uR.useCallback[Oe]\"], [\n [],\n []\n ]), $o = !be && je.status === 400, Lt = be && je.status === 413, gr = be && typeof be == \"object\" && \"name\" in be && (!be.name || be.name === \"\");\n if ($o || Lt || gr) {\n K[oe].formState.file.valid = !1;\n let De = K[oe].formState.file?.value, ze = {\n ...K[oe].formState\n };\n De instanceof File && (ze.file = {\n ...ze.file,\n value: {\n name: De.name\n }\n });\n let { state: ce } = await l({\n collectionSlug: E,\n docPermissions: m,\n docPreferences: null,\n formState: ze,\n operation: \"update\",\n schemaPath: E\n });\n ce && (De instanceof File && ce.file && (ce.file = {\n ...ce.file,\n value: De\n }), K[oe] = {\n errorCount: Object.values(ce).reduce({\n \"uR.useCallback[Oe]\": (Ee, Re)=>Re?.valid === !1 ? Ee + 1 : Ee\n }[\"uR.useCallback[Oe]\"], 0),\n formID: K[oe].formID,\n formState: ce\n }), ee.error(Ut[0]?.message);\n } else K[oe] = {\n errorCount: Rt.length,\n formID: K[oe].formID,\n formState: fd(K[oe].formState, {\n type: \"ADD_SERVER_ERRORS\",\n errors: Rt\n })\n };\n } catch {}\n f(!0), Q(\"\"), Z(!1);\n let ne = [];\n K.forEach({\n \"uR.useCallback[Oe]\": ({ errorCount: oe }, pe)=>{\n oe && ne.push(K[pe]);\n }\n }[\"uR.useCallback[Oe]\"]);\n let te = Math.max(0, K.length - ne.length), ge = K.length - te;\n te && (ee.success(`Successfully saved ${te} files`), V(!0), typeof L == \"function\" && L(me, ge)), ge ? ee.error(`Failed to save ${ge} files`) : P(B), R({\n type: \"REPLACE\",\n state: {\n activeIndex: ne.reduce({\n \"uR.useCallback[Oe]\": (oe, { formID: pe }, be)=>pe === fe ? be : oe\n }[\"uR.useCallback[Oe]\"], 0),\n forms: ne,\n totalErrorCount: ne.reduce({\n \"uR.useCallback[Oe]\": (oe, { errorCount: pe })=>oe + pe\n }[\"uR.useCallback[Oe]\"], 0)\n }\n }), ne.length === 0 && (j(void 0), O(void 0));\n }\n }[\"uR.useCallback[Oe]\"], [\n _,\n D,\n s,\n J,\n n,\n E,\n a,\n l,\n m,\n V,\n L,\n P,\n B,\n j,\n O\n ]), Ke = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[Ke]\": async (G, se)=>{\n for(let K = 0; K < _.length; K++)if (Object.entries(G).forEach({\n \"uR.useCallback[Ke]\": ([fe, me])=>{\n _[K].formState[fe] && (_[K].formState[fe].value = me, R({\n type: \"UPDATE_FORM\",\n errorCount: _[K].errorCount,\n formState: _[K].formState,\n index: K\n }));\n }\n }[\"uR.useCallback[Ke]\"]), typeof se == \"function\" && se(), d) {\n let { state: fe } = await l({\n collectionSlug: E,\n docPermissions: m,\n docPreferences: null,\n formState: _[K].formState,\n operation: \"create\",\n schemaPath: E\n }), me = Object.values(fe).reduce({\n \"uR.useCallback[Ke].me\": (ne, te)=>te?.valid === !1 ? ne + 1 : ne\n }[\"uR.useCallback[Ke].me\"], 0);\n R({\n type: \"UPDATE_FORM\",\n errorCount: me,\n formState: fe,\n index: K\n });\n }\n }\n }[\"uR.useCallback[Ke]\"], [\n E,\n m,\n _,\n l,\n d\n ]), ae = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[ae]\": (G)=>{\n R({\n type: \"UPDATE_FORM\",\n errorCount: _[D].errorCount,\n formState: _[D].formState,\n index: D,\n uploadEdits: G\n });\n }\n }[\"uR.useCallback[ae]\"], [\n D,\n _\n ]), we = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uR.useCallback[we]\": ()=>{\n R({\n type: \"REPLACE\",\n state: {\n forms: _.map({\n \"uR.useCallback[we]\": (G)=>({\n ...G,\n uploadEdits: {}\n })\n }[\"uR.useCallback[we]\"])\n }\n });\n }\n }[\"uR.useCallback[we]\"], [\n _\n ]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"uR.useEffect\": ()=>{\n E && (y || le(), x || Y(), ($ || M) && F(!y || !x), y && (M?.length || $?.length) && !U.current && (M?.length && Me(M), $?.length && Be($), U.current = !0));\n }\n }[\"uR.useEffect\"], [\n $,\n le,\n Y,\n E,\n y,\n x,\n M\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(cR, {\n value: {\n activeIndex: S.activeIndex,\n addFiles: _e,\n bulkUpdateForm: Ke,\n collectionSlug: E,\n docPermissions: m,\n documentSlots: c,\n forms: _,\n getFormDataRef: ue,\n hasPublishPermission: b,\n hasSavePermission: h,\n hasSubmitted: d,\n isInitializing: w,\n removeFile: Ue,\n resetUploadEdits: we,\n saveAllDocs: Oe,\n setActiveIndex: xe,\n setFormTotalErrorCount: he,\n totalErrorCount: T,\n updateUploadEdits: ae\n },\n children: [\n W && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bn, {\n animationDuration: \"250ms\",\n loadingText: z,\n overlayType: \"fullscreen\",\n show: !0\n }),\n t\n ]\n });\n}\n_s41(uR, \"yyCvTMUScCXqvI3YU42Fc4mEdBs=\");\nfunction Wo() {\n return react__WEBPACK_IMPORTED_MODULE_0__.use(cR);\n}\n_c190 = Wo;\n\n\n\n\n\n\n\nvar dR = (t)=>{\n let e = [\n \"file\",\n \"mimeType\",\n \"thumbnailURL\",\n \"width\",\n \"height\",\n \"filesize\",\n \"filename\",\n \"url\",\n \"focalX\",\n \"focalY\",\n \"sizes\"\n ];\n return t.filter((o)=>!e.includes(\"name\" in o && o.name));\n};\n\n\nvar Jl = (t, e)=>t ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(e) && e.name ? `${t}.${e.name}` : t : (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(e) ? e.name : \"\";\n_c191 = Jl;\n\n\nvar vd = ({ CustomLabel: t, field: e, prefix: o })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n style: {\n display: \"inline-block\"\n },\n children: o\n }),\n \" > \"\n ]\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n style: {\n display: \"inline-block\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: t,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: \"label\" in e && e.label\n })\n })\n })\n ]\n });\nvar Ih = ({ fields: t, formState: e, labelPrefix: o = null, parentPath: n = \"\", path: r = \"\", permissions: s })=>{\n if (!t) return [];\n let i = e?.[r]?.customComponents?.Label;\n return t?.reduce((l, a)=>{\n let { operation: c, permissions: u, read: d } = (0,payload_shared__WEBPACK_IMPORTED_MODULE_34__.getFieldPermissions)({\n field: a,\n operation: \"update\",\n parentName: n?.includes(\".\") ? n.split(\".\")[n.split(\".\").length - 1] : n,\n permissions: s\n });\n if (((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(a) || a.type === \"ui\") && (a.admin?.disableBulkEdit || a.unique || (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsHiddenOrDisabled)(a) || \"readOnly\" in a && a.readOnly || !c || !d)) return l;\n if (!(a.type === \"array\" || a.type === \"blocks\") && (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldHasSubFields)(a)) return [\n ...l,\n ...Ih({\n fields: a.fields,\n labelPrefix: vd({\n CustomLabel: i,\n field: a,\n prefix: o\n }),\n parentPath: r,\n path: Jl(r, a),\n permissions: u\n })\n ];\n if (a.type === \"tabs\" && \"tabs\" in a) return [\n ...l,\n ...a.tabs.reduce((m, p)=>{\n if (\"fields\" in p) {\n let h = \"name\" in p && p.name;\n return [\n ...m,\n ...Ih({\n fields: p.fields,\n labelPrefix: o,\n parentPath: r,\n path: h ? Jl(r, a) : r,\n permissions: u\n })\n ];\n }\n }, [])\n ];\n let f = {\n label: vd({\n CustomLabel: i,\n field: a,\n prefix: o\n }),\n value: {\n field: a,\n fieldPermissions: u,\n path: Jl(r, a)\n }\n };\n return [\n ...l,\n f\n ];\n }, []);\n};\n_c192 = Ih;\nvar AW = \"field-select\", _h = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { fields: o, onChange: n, permissions: r } = t, { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { dispatchFields: i, getFields: l } = $e(), a;\n e[0] !== o || e[1] !== l || e[2] !== r ? (a = ()=>Ih({\n fields: dR(o),\n formState: l(),\n permissions: r\n }), e[0] = o, e[1] = l, e[2] = r, e[3] = a) : a = e[3];\n let [c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(a), u;\n if (e[4] !== i || e[5] !== l || e[6] !== n || e[7] !== c || e[8] !== s) {\n let d;\n e[10] !== i || e[11] !== l || e[12] !== n ? (d = (f)=>n({\n dispatchFields: i,\n formState: l(),\n selected: f\n }), e[10] = i, e[11] = l, e[12] = n, e[13] = d) : d = e[13], u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: AW,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: s(\"fields:selectFieldsToEdit\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n getOptionValue: PW,\n isMulti: !0,\n onChange: d,\n options: c\n })\n ]\n }), e[4] = i, e[5] = l, e[6] = n, e[7] = c, e[8] = s, e[9] = u;\n } else u = e[9];\n return u;\n};\nfunction PW(t) {\n return typeof t.value == \"object\" && \"path\" in t.value ? String(t.value.path) : String(t.value);\n}\n_c193 = PW;\nvar vR = (t)=>{\n _s42();\n let { collection: { fields: e, labels: { plural: o, singular: n } } = {}, collection: r, drawerSlug: s, forms: i } = t, [l, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { permissions: c } = Ie(), { i18n: u, t: d } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeModal: f } = ie(), { bulkUpdateForm: m } = Wo(), { getFormState: p } = Nt(), h = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), [g, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), C = c?.collections?.[r.slug], y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_35__.unflatten)(g.reduce((w, F)=>(w[F.value.path] = !0, w), {})), [\n g\n ]), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ formState: w, submitted: F })=>{\n let S = Tr(h), { state: R } = await p({\n collectionSlug: r.slug,\n docPermissions: C,\n docPreferences: null,\n formState: w,\n operation: \"update\",\n schemaPath: r.slug,\n select: y,\n signal: S.signal,\n skipValidation: !F\n });\n return h.current = null, R;\n }, [\n p,\n r,\n C,\n y\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let w = h.current;\n return ()=>{\n _r(w);\n };\n }, []);\n let x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((w)=>{\n let F = g.reduce((S, R)=>(w[R.value.path] && (S[R.value.path] = w[R.value.path].value), S), {});\n m(F, ()=>f(s));\n }, [\n f,\n s,\n m,\n g\n ]), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ dispatchFields: w, formState: F, selected: S })=>{\n a(!0), b(S || []);\n let { state: R } = await p({\n collectionSlug: r.slug,\n docPermissions: C,\n docPreferences: null,\n formState: F,\n operation: \"update\",\n schemaPath: r.slug,\n select: (0,payload_shared__WEBPACK_IMPORTED_MODULE_35__.unflatten)(S.reduce((D, _)=>(D[_.value.path] = !0, D), {})),\n skipValidation: !0\n });\n w({\n type: \"UPDATE_MANY\",\n formState: R\n }), a(!1);\n }, [\n p,\n r,\n C\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${qr}__main`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${qr}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h2\", {\n className: `${qr}__header__title`,\n children: d(\"general:editingLabel\", {\n count: i.length,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.length > 1 ? o : n, u)\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": d(\"general:close\"),\n className: `${qr}__header__close`,\n id: `close-drawer__${s}`,\n onClick: ()=>f(s),\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_s99, {\n className: `${qr}__form`,\n isInitializing: l,\n onChange: [\n v\n ],\n onSubmit: x,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_h, {\n fields: e,\n onChange: I,\n permissions: C.fields\n }),\n g.length === 0 ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"render-fields\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hs, {\n value: void 0,\n children: g.map((w, F)=>{\n let { value: { field: S, fieldPermissions: R, path: D } } = w;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ql, {\n clientFieldConfig: S,\n indexPath: \"\",\n parentPath: \"\",\n parentSchemaPath: \"\",\n path: D,\n permissions: R\n }, `${D}-${F}`);\n })\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${qr}__sidebar-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${qr}__sidebar`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${qr}__sidebar-sticky-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${qr}__document-actions`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n type: \"submit\",\n children: d(\"general:applyChanges\")\n })\n })\n })\n })\n })\n ]\n })\n ]\n });\n};\n_s42(vR, \"ygRDYra/A/A4RZpS6ROPeRs/UaY=\");\nvar qr = \"edit-many-bulk-uploads\", yR = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { collection: o, collection: n } = t, { slug: r } = o === void 0 ? {} : o, { permissions: s } = Ie(), { t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { forms: l } = Wo(), c = s?.collections?.[r]?.update, u = `edit-${r}-bulk-uploads`;\n if (!c) return null;\n let d;\n return e[0] !== n || e[1] !== u || e[2] !== l || e[3] !== i ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: qr,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ms, {\n \"aria-label\": i(\"general:editAll\"),\n className: `${qr}__toggle`,\n slug: u,\n children: i(\"general:editAll\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(as, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n Header: null,\n slug: u,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vR, {\n collection: n,\n drawerSlug: u,\n forms: l\n })\n })\n })\n ]\n }), e[0] = n, e[1] = u, e[2] = l, e[3] = i, e[4] = d) : d = e[4], d;\n};\nvar Ql = \"bulk-upload--actions-bar\";\nfunction xR(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(15), { collectionConfig: o } = t, { activeIndex: n, forms: r, setActiveIndex: s } = Wo(), { t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), l = n + 1, a;\n if (e[0] !== n || e[1] !== o || e[2] !== r.length || e[3] !== s || e[4] !== i || e[5] !== l) {\n let c;\n e[7] !== n || e[8] !== r.length || e[9] !== s ? (c = ()=>{\n let d = n - 1;\n d < 0 ? s(r.length - 1) : s(d);\n }, e[7] = n, e[8] = r.length, e[9] = s, e[10] = c) : c = e[10];\n let u;\n e[11] !== n || e[12] !== r.length || e[13] !== s ? (u = ()=>{\n let d = n + 1;\n d === r.length ? s(0) : s(d);\n }, e[11] = n, e[12] = r.length, e[13] = s, e[14] = u) : u = e[14], a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Ql,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ql}__navigation`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n className: `${Ql}__locationText`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: l\n }),\n ` ${i(\"general:of\")} `,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: r.length\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ql}__controls`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": i(\"general:previous\"),\n buttonStyle: \"none\",\n onClick: c,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: \"left\"\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": i(\"general:next\"),\n buttonStyle: \"none\",\n onClick: u,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: \"right\"\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yR, {\n collection: o\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ny, {\n className: `${Ql}__saveButtons`\n })\n ]\n }), e[0] = n, e[1] = o, e[2] = r.length, e[3] = s, e[4] = i, e[5] = l, e[6] = a;\n } else a = e[6];\n return a;\n}\nfunction ny(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { className: o } = t, { getEntityConfig: n } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { t: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { collectionSlug: s, hasPublishPermission: i, hasSavePermission: l, saveAllDocs: a } = Wo(), c;\n e[0] !== s || e[1] !== n ? (c = n({\n collectionSlug: s\n }), e[0] = s, e[1] = n, e[2] = c) : c = e[2];\n let u = c, d;\n e[3] !== o ? (d = [\n `${Ql}__buttons`,\n o\n ].filter(Boolean), e[3] = o, e[4] = d) : d = e[4];\n let f = d.join(\" \"), m;\n return e[5] !== u?.versions?.drafts || e[6] !== i || e[7] !== l || e[8] !== a || e[9] !== r || e[10] !== f ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: f,\n children: [\n u?.versions?.drafts && l ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n onClick: ()=>{\n a({\n overrides: {\n _status: \"draft\"\n }\n });\n },\n children: r(\"version:saveDraft\")\n }) : null,\n u?.versions?.drafts && i ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n onClick: ()=>{\n a({\n overrides: {\n _status: \"published\"\n }\n });\n },\n children: r(\"version:publish\")\n }) : null,\n !u?.versions?.drafts && l ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n onClick: ()=>{\n a();\n },\n children: r(\"general:save\")\n }) : null\n ]\n }), e[5] = u?.versions?.drafts, e[6] = i, e[7] = l, e[8] = a, e[9] = r, e[10] = f, e[11] = m) : m = e[11], m;\n}\n\n\n\nvar Cd = \"bulk-upload--discard-without-saving\";\nfunction wR() {\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), { t: e } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeModal: o } = ie(), { drawerSlug: n } = Ho(), r;\n t[0] !== o ? (r = ()=>{\n o(Cd);\n }, t[0] = o, t[1] = r) : r = t[1];\n let s = r, i;\n t[2] !== o || t[3] !== n ? (i = ()=>{\n o(n), o(Cd);\n }, t[2] = o, t[3] = n, t[4] = i) : i = t[4];\n let l = i, a;\n return t[5] !== s || t[6] !== l || t[7] !== e ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: e(\"general:changesNotSaved\"),\n cancelLabel: e(\"general:stayOnThisPage\"),\n confirmLabel: e(\"general:leaveAnyway\"),\n heading: e(\"general:leaveWithoutSaving\"),\n modalSlug: Cd,\n onCancel: s,\n onConfirm: l\n }), t[5] = s, t[6] = l, t[7] = e, t[8] = a) : a = t[8], a;\n}\n\n\n\n\n\n\n\n\n\n\n\nfunction IR({ className: t }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: [\n t,\n \"icon icon--trash\"\n ].filter(Boolean).join(\" \"),\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M4.1499 6.1H15.8499M14.5499 6.1V15.2C14.5499 15.85 13.8999 16.5 13.2499 16.5H6.7499C6.0999 16.5 5.4499 15.85 5.4499 15.2V6.1M7.3999 6.1V4.8C7.3999 4.15 8.0499 3.5 8.6999 3.5H11.2999C11.9499 3.5 12.5999 4.15 12.5999 4.8V6.1M8.6999 9.35V13.25M11.2999 9.35V13.25\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n });\n}\n_c194 = IR;\nvar GW = \"trash-banner\", TR = ()=>{\n let { getEntityConfig: t } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { collectionSlug: e } = Se(), o = t({\n collectionSlug: e\n }), { labels: n } = o, { i18n: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: GW,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(IR, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: r.t(\"general:documentIsTrashed\", {\n label: `${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(n?.singular, r)}`\n })\n })\n ]\n });\n};\nvar Hn = \"document-fields\", xd = ({ AfterFields: t, BeforeFields: e, docPermissions: o, fields: n, forceSidebarWrap: r, isTrashed: s = !1, readOnly: i, schemaPathSegments: l })=>{\n let { hasSidebarFields: a, mainFields: c, sidebarFields: u } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>n.reduce((d, f)=>((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsSidebar)(f) ? (d.sidebarFields.push(f), d.mainFields.push(null), d.hasSidebarFields = !0) : (d.mainFields.push(f), d.sidebarFields.push(null)), d), {\n hasSidebarFields: !1,\n mainFields: [],\n sidebarFields: []\n }), [\n n\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Hn,\n a ? `${Hn}--has-sidebar` : `${Hn}--no-sidebar`,\n r && `${Hn}--force-sidebar-wrap`\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Hn}__main`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${Hn}__edit`,\n children: [\n s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(TR, {}),\n e,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n className: `${Hn}__fields`,\n fields: c,\n forceRender: !0,\n parentIndexPath: \"\",\n parentPath: \"\",\n parentSchemaPath: l.join(\".\"),\n permissions: o?.fields,\n readOnly: i\n }),\n t\n ]\n })\n }),\n a ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Hn}__sidebar-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Hn}__sidebar`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Hn}__sidebar-fields`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n fields: u,\n forceRender: !0,\n parentIndexPath: \"\",\n parentPath: \"\",\n parentSchemaPath: l.join(\".\"),\n permissions: o?.fields,\n readOnly: i\n })\n })\n })\n }) : null\n ]\n });\n};\n\n\n\n\n\n\n\nfunction wd({ className: t }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: [\n t,\n \"icon icon--folder\"\n ].filter(Boolean).join(\" \"),\n fill: \"none\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n width: \"16\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M13.3333 13.3333C13.6869 13.3333 14.026 13.1929 14.2761 12.9428C14.5261 12.6928 14.6666 12.3536 14.6666 12V5.33333C14.6666 4.97971 14.5261 4.64057 14.2761 4.39052C14.026 4.14048 13.6869 4 13.3333 4H8.06659C7.84359 4.00219 7.62362 3.94841 7.42679 3.84359C7.22996 3.73877 7.06256 3.58625 6.93992 3.4L6.39992 2.6C6.27851 2.41565 6.11323 2.26432 5.91892 2.1596C5.7246 2.05488 5.50732 2.00004 5.28659 2H2.66659C2.31296 2 1.97382 2.14048 1.72378 2.39052C1.47373 2.64057 1.33325 2.97971 1.33325 3.33333V12C1.33325 12.3536 1.47373 12.6928 1.72378 12.9428C1.97382 13.1929 2.31296 13.3333 2.66659 13.3333H13.3333Z\",\n fill: \"currentColor\"\n })\n });\n}\n\n\n\n\n\n\n\n\n\n\nfunction RR(t) {\n return t.reduce((e, o)=>(e[o.relationTo] || (e[o.relationTo] = []), e[o.relationTo].push(o.value.id), e), {});\n}\n_c195 = RR;\nvar PR = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n activeCollectionFolderSlugs: [],\n allCollectionFolderSlugs: [],\n allowCreateCollectionSlugs: [],\n breadcrumbs: [],\n checkIfItemIsDisabled: ()=>!1,\n clearSelections: ()=>{},\n currentFolder: null,\n documents: [],\n dragOverlayItem: void 0,\n focusedRowIndex: -1,\n folderCollectionConfig: null,\n folderCollectionSlug: \"\",\n folderFieldName: \"folder\",\n folderID: void 0,\n FolderResultsComponent: null,\n folderType: void 0,\n getFolderRoute: ()=>\"\",\n getSelectedItems: ()=>[],\n isDragging: !1,\n itemKeysToMove: void 0,\n moveToFolder: ()=>Promise.resolve(void 0),\n onItemClick: ()=>{},\n onItemKeyPress: ()=>{},\n refineFolderData: ()=>{},\n search: \"\",\n selectedFolderCollections: void 0,\n selectedItemKeys: new Set,\n setBreadcrumbs: ()=>{},\n setFocusedRowIndex: ()=>-1,\n setIsDragging: ()=>!1,\n sort: \"name\",\n subfolders: []\n});\nfunction Ca({ activeCollectionFolderSlugs: t, allCollectionFolderSlugs: e = [], allowCreateCollectionSlugs: o, allowMultiSelection: n = !0, baseFolderPath: r, breadcrumbs: s = [], children: i, documents: l, folderFieldName: a, folderID: c, FolderResultsComponent: u, onItemClick: d, search: f, sort: m = \"name\", subfolders: p }) {\n _s43();\n let h = Gt(), { config: g } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: b } = g, C = Vr(), { t: y } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), v = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { startRouteTransition: x } = Ye(), I = ye(), w = I ? I.code : void 0, F = react__WEBPACK_IMPORTED_MODULE_0__.useRef(new Set), [S, R] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]), [D, _] = react__WEBPACK_IMPORTED_MODULE_0__.useState(u || ({\n \"Ca.useState\": ()=>null\n })[\"Ca.useState\"]), [T] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"Ca.useState\": ()=>g.collections.find({\n \"Ca.useState\": (ae)=>g.folders && ae.slug === g.folders.slug\n }[\"Ca.useState\"])\n }[\"Ca.useState\"]), A = T.slug, k = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), P = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Ca.useMemo[P]\": ()=>Yt(k)\n }[\"Ca.useMemo[P]\"], [\n k\n ]), [E, B] = react__WEBPACK_IMPORTED_MODULE_0__.useState(P), [$, M] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [L, j] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"Ca.useState\": ()=>new Set\n }[\"Ca.useState\"]), [O, V] = react__WEBPACK_IMPORTED_MODULE_0__.useState(-1), [W, Z] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [z, Q] = react__WEBPACK_IMPORTED_MODULE_0__.useState(s), U = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), X = p.length + l.length, ue = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[ue]\": ()=>{\n V(-1), j(new Set), Z(void 0), F.current = new Set;\n }\n }[\"Ca.useCallback[ue]\"], []), q = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[q]\": (ae = {})=>{\n let we = \"page\" in ae ? ae.page : E?.page;\n return \"search\" in ae && (we = \"1\"), {\n ...E,\n ...ae,\n locale: w,\n page: we,\n relationTo: \"relationTo\" in ae ? ae.relationTo : E?.relationTo,\n search: \"search\" in ae ? ae.search : E?.search,\n sort: \"sort\" in ae ? ae.sort : E?.sort ?? void 0\n };\n }\n }[\"Ca.useCallback[q]\"], [\n E,\n w\n ]), J = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[J]\": ({ query: ae, updateURL: we })=>{\n if (we) {\n let G = q(ae);\n x({\n \"Ca.useCallback[J]\": ()=>v.replace(`${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...G,\n relationTo: JSON.stringify(G.relationTo)\n }, {\n addQueryPrefix: !0\n })}`)\n }[\"Ca.useCallback[J]\"]), B(G);\n }\n }\n }[\"Ca.useCallback[J]\"], [\n q,\n v,\n x\n ]), Y = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[Y]\": (ae)=>{\n let we = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(q({\n page: \"1\",\n search: \"\"\n }), {\n addQueryPrefix: !0\n });\n return (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: g.routes.admin,\n path: `${r}${ae ? `/${ae}` : \"\"}${we}`\n });\n }\n }[\"Ca.useCallback[Y]\"], [\n r,\n g.routes.admin,\n q\n ]), le = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[le]\": (ae)=>[\n ...p,\n ...l\n ].find({\n \"Ca.useCallback[le]\": (we)=>we.itemKey === ae\n }[\"Ca.useCallback[le]\"])\n }[\"Ca.useCallback[le]\"], [\n l,\n p\n ]), xe = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[xe]\": ()=>Array.from(L).reduce({\n \"Ca.useCallback[xe]\": (ae, we)=>{\n let G = le(we);\n return G && ae.push(G), ae;\n }\n }[\"Ca.useCallback[xe]\"], [])\n }[\"Ca.useCallback[xe]\"], [\n L,\n le\n ]), _e = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[_e]\": ({ collectionSlug: ae, docID: we })=>{\n C === 1 ? ae === A ? x({\n \"Ca.useCallback[_e]\": ()=>{\n v.push(Y(we)), ue();\n }\n }[\"Ca.useCallback[_e]\"]) : ae && x({\n \"Ca.useCallback[_e]\": ()=>{\n v.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: g.routes.admin,\n path: `/collections/${ae}/${we}`\n })), ue();\n }\n }[\"Ca.useCallback[_e]\"]) : ue(), typeof d == \"function\" && d(le(`${ae}-${we}`));\n }\n }[\"Ca.useCallback[_e]\"], [\n ue,\n g.routes.admin,\n C,\n A,\n Y,\n le,\n d,\n v,\n x\n ]), Be = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[Be]\": (ae)=>{\n let G = [\n ...p,\n ...l\n ].reduce({\n \"Ca.useCallback[Be].G\": (oe, pe, be)=>(L.has(pe.itemKey) && oe.push(be), oe)\n }[\"Ca.useCallback[Be].G\"], []);\n if (G.length === 0) return [\n ae\n ];\n let se = Math.min(...G), K = Math.max(...G), fe = ae >= se && ae <= K, me = ae;\n if (fe) if (ae === se || ae === K) me = ae;\n else {\n let oe = Math.abs(ae - se), pe = Math.abs(ae - K);\n me = oe >= pe ? se : K;\n }\n else {\n let oe = Math.abs(ae - se), pe = Math.abs(ae - K);\n me = oe <= pe ? se : K;\n }\n let ne = Math.min(me, ae), te = Math.max(me, ae), ge = Array.from({\n length: te - ne + 1\n }, {\n \"Ca.useCallback[Be].ge\": (oe, pe)=>ne + pe\n }[\"Ca.useCallback[Be].ge\"]);\n return fe ? ge : [\n ...new Set([\n ...G,\n ...ge\n ])\n ];\n }\n }[\"Ca.useCallback[Be]\"], [\n p,\n l,\n L\n ]), Me = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[Me]\": ({ indexes: ae })=>{\n let we = [\n ...p,\n ...l\n ], { newSelectedFolderCollections: G, newSelectedItemKeys: se } = we.reduce({\n \"Ca.useCallback[Me]\": (K, fe, me)=>(ae.includes(me) && (K.newSelectedItemKeys.add(fe.itemKey), fe.relationTo === A ? fe.value.folderType?.forEach({\n \"Ca.useCallback[Me]\": (ne)=>{\n K.newSelectedFolderCollections.includes(ne) || K.newSelectedFolderCollections.push(ne);\n }\n }[\"Ca.useCallback[Me]\"]) : K.newSelectedFolderCollections.includes(fe.relationTo) || K.newSelectedFolderCollections.push(fe.relationTo)), K)\n }[\"Ca.useCallback[Me]\"], {\n newSelectedFolderCollections: [],\n newSelectedItemKeys: new Set\n });\n R(G), j(se);\n }\n }[\"Ca.useCallback[Me]\"], [\n l,\n A,\n p\n ]), Ue = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[Ue]\": ({ event: ae, item: we })=>{\n let { code: G, ctrlKey: se, metaKey: K, shiftKey: fe } = ae, me = fe, ne = se || K, te = L.has(we.itemKey), ge = [\n ...p,\n ...l\n ], oe = ge.findIndex({\n \"Ca.useCallback[Ue].oe\": (pe)=>pe.itemKey === we.itemKey\n }[\"Ca.useCallback[Ue].oe\"]);\n switch(G){\n case \"ArrowDown\":\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"ArrowUp\":\n {\n if (ae.preventDefault(), oe === -1) break;\n let be = G === \"ArrowLeft\" || G === \"ArrowUp\" ? oe - 1 : oe + 1;\n if (be < 0 || be > X - 1) return;\n if (V(be), ne) break;\n if (me && n) {\n let ot = Be(be);\n Me({\n indexes: ot\n });\n return;\n }\n if (!me) {\n let ot = ge[be];\n j(new Set([\n ot.itemKey\n ]));\n }\n break;\n }\n case \"Enter\":\n {\n if (L.size === 1) {\n V(void 0), _e({\n collectionSlug: we.relationTo,\n docID: (0,payload_shared__WEBPACK_IMPORTED_MODULE_36__.extractID)(we.value)\n });\n return;\n }\n break;\n }\n case \"Escape\":\n {\n ue();\n break;\n }\n case \"KeyA\":\n {\n n && ne && (ae.preventDefault(), V(X - 1), Me({\n indexes: Array.from({\n length: X\n }, {\n \"Ca.useCallback[Ue]\": (pe, be)=>be\n }[\"Ca.useCallback[Ue]\"])\n }));\n break;\n }\n case \"Space\":\n {\n if (n && me) {\n ae.preventDefault();\n let pe = [\n ...p,\n ...l\n ];\n Me({\n indexes: pe.reduce({\n \"Ca.useCallback[Ue]\": (be, ot, je)=>{\n if (ot.itemKey === we.itemKey) {\n if (te) return be;\n be.push(je);\n } else L.has(ot.itemKey) && be.push(je);\n return be;\n }\n }[\"Ca.useCallback[Ue]\"], [])\n });\n } else ae.preventDefault(), Me({\n indexes: te ? [] : [\n oe\n ]\n });\n break;\n }\n case \"Tab\":\n {\n if (n && me) {\n let pe = oe - 1;\n pe < 0 && L?.size > 0 && V(pe);\n } else oe + 1 === X && L.size > 0 && V(X - 1);\n break;\n }\n }\n }\n }[\"Ca.useCallback[Ue]\"], [\n L,\n p,\n l,\n n,\n Be,\n Me,\n _e,\n ue,\n X\n ]), he = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[he]\": ({ event: ae, item: we })=>{\n let G = !1, se = ae.ctrlKey || ae.metaKey, K = ae.shiftKey, fe = L.has(we.itemKey), me = [\n ...p,\n ...l\n ], ne = me.findIndex({\n \"Ca.useCallback[he].ne\": (te)=>te.itemKey === we.itemKey\n }[\"Ca.useCallback[he].ne\"]);\n if (n && se) {\n ae.preventDefault();\n let te, ge = me.reduce({\n \"Ca.useCallback[he].ge\": (oe, pe, be)=>{\n if (pe.itemKey === we.itemKey) {\n if (fe && ae.type !== \"pointermove\") return oe;\n oe.push(be), te = pe.itemKey;\n } else L.has(pe.itemKey) && oe.push(be);\n return oe;\n }\n }[\"Ca.useCallback[he].ge\"], []);\n Me({\n indexes: ge\n }), te && Z(le(te));\n } else if (n && K) {\n if (ne !== -1) {\n let te = Be(ne);\n Me({\n indexes: te\n });\n }\n } else if (n && ae.type === \"pointermove\") fe || Me({\n indexes: me.reduce({\n \"Ca.useCallback[he]\": (te, ge, oe)=>(ge.itemKey === we.itemKey && te.push(oe), te)\n }[\"Ca.useCallback[he]\"], [])\n }), Z(le(we.itemKey));\n else {\n let te = Date.now();\n G = te - U.current < 400 && W?.itemKey === we.itemKey, U.current = te, G || Me({\n indexes: fe && L.size === 1 ? [] : [\n ne\n ]\n }), Z(le(we.itemKey));\n }\n G && _e({\n collectionSlug: we.relationTo,\n docID: (0,payload_shared__WEBPACK_IMPORTED_MODULE_36__.extractID)(we.value)\n });\n }\n }[\"Ca.useCallback[he]\"], [\n L,\n p,\n l,\n n,\n W,\n le,\n Me,\n _e,\n Be\n ]), Oe = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[Oe]\": async (ae)=>{\n let { itemsToMove: we, toFolderID: G } = ae;\n if (!we.length) return;\n if (we.length === 1 && we[0].relationTo === A && we[0].value.id === c) {\n let K = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n locale: w\n }, {\n addQueryPrefix: !0\n });\n (await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: b.api,\n path: `/${A}/${c}${K}`\n }), {\n body: JSON.stringify({\n [a]: G || null\n }),\n credentials: \"include\",\n headers: {\n \"content-type\": \"application/json\"\n },\n method: \"PATCH\"\n })).status !== 200 && ee.error(y(\"general:error\"));\n } else for (let [K, fe] of Object.entries(RR(we))){\n let me = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n limit: 0,\n locale: w,\n where: {\n id: {\n in: fe\n }\n }\n }, {\n addQueryPrefix: !0\n });\n try {\n await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: b.api,\n path: `/${K}${me}`\n }), {\n body: JSON.stringify({\n [a]: G || null\n }),\n credentials: \"include\",\n headers: {\n \"content-type\": \"application/json\"\n },\n method: \"PATCH\"\n });\n } catch (ne) {\n ee.error(y(\"general:error\")), console.error(ne);\n continue;\n }\n }\n ue();\n }\n }[\"Ca.useCallback[Oe]\"], [\n c,\n ue,\n A,\n a,\n b.api,\n y,\n w\n ]), Ke = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Ca.useCallback[Ke]\": (ae)=>{\n function we({ item: G, selectedFolderCollections: se }) {\n return !G.value.folderType || Array.isArray(G.value.folderType) && G.value.folderType.length === 0 ? !1 : se.length === 0 ? !!(G.value.folderType || G.value.folderType.length > 0) : se.some({\n \"Ca.useCallback[Ke].we\": (K)=>!G.value.folderType.includes(K)\n }[\"Ca.useCallback[Ke].we\"]);\n }\n if ($) return L.has(ae.itemKey) ? !0 : ae.relationTo === A ? we({\n item: ae,\n selectedFolderCollections: S\n }) : !0;\n if (h?.selectedItemKeys?.size) return h.selectedItemKeys.has(ae.itemKey) ? !0 : ae.relationTo === A ? we({\n item: ae,\n selectedFolderCollections: h.selectedFolderCollections\n }) : !0;\n }\n }[\"Ca.useCallback[Ke]\"], [\n S,\n $,\n L,\n A,\n h?.selectedFolderCollections,\n h?.selectedItemKeys\n ]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Ca.useEffect\": ()=>{\n u && _(u);\n }\n }[\"Ca.useEffect\"], [\n u\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(PR, {\n value: {\n activeCollectionFolderSlugs: t || e,\n allCollectionFolderSlugs: e,\n allowCreateCollectionSlugs: o,\n breadcrumbs: z,\n checkIfItemIsDisabled: Ke,\n clearSelections: ue,\n currentFolder: z?.[z.length - 1]?.id !== void 0 ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_37__.formatFolderOrDocumentItem)({\n folderFieldName: a,\n isUpload: !1,\n relationTo: A,\n useAsTitle: T.admin.useAsTitle,\n value: z[z.length - 1]\n }) : null,\n documents: l,\n dragOverlayItem: W,\n focusedRowIndex: O,\n folderCollectionConfig: T,\n folderCollectionSlug: A,\n folderFieldName: a,\n folderID: c,\n FolderResultsComponent: D,\n folderType: z?.[z.length - 1]?.folderType,\n getFolderRoute: Y,\n getSelectedItems: xe,\n isDragging: $,\n itemKeysToMove: h.selectedItemKeys,\n moveToFolder: Oe,\n onItemClick: he,\n onItemKeyPress: Ue,\n refineFolderData: J,\n search: f,\n selectedFolderCollections: S,\n selectedItemKeys: L,\n setBreadcrumbs: Q,\n setFocusedRowIndex: V,\n setIsDragging: M,\n sort: m,\n subfolders: p\n },\n children: i\n });\n}\n_s43(Ca, \"NbyqMz82jcoUYgSLhqnKie+kmwY=\");\n_c196 = Ca;\nfunction Gt() {\n let t = react__WEBPACK_IMPORTED_MODULE_0__.use(PR);\n if (t === void 0) throw new Error(\"useFolder must be used within a FolderProvider\");\n return t;\n}\n_c197 = Gt;\n\n\n\n\nvar NR = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n cachingEnabled: !0,\n clearRouteCache: ()=>{}\n}), sy = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(17), { cachingEnabled: o, children: n } = t, r = o === void 0 ? !0 : o, s = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.usePathname)(), i = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), a;\n e[0] !== i ? (a = ()=>{\n i.refresh();\n }, e[0] = i, e[1] = a) : a = e[1];\n let c = a, u;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (u = ()=>{\n let b = ()=>{\n l.current = !0;\n };\n return window.addEventListener(\"popstate\", b), ()=>{\n window.removeEventListener(\"popstate\", b);\n };\n }, e[2] = u) : u = e[2];\n let d;\n e[3] !== i ? (d = [\n i\n ], e[3] = i, e[4] = d) : d = e[4], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(u, d);\n let f;\n e[5] !== r || e[6] !== c ? (f = (b)=>{\n (r || l.current) && (l.current = !1, c());\n }, e[5] = r, e[6] = c, e[7] = f) : f = e[7];\n let m = Qe(f), p;\n e[8] !== m || e[9] !== s ? (p = ()=>{\n m(s);\n }, e[8] = m, e[9] = s, e[10] = p) : p = e[10];\n let h;\n e[11] !== s ? (h = [\n s\n ], e[11] = s, e[12] = h) : h = e[12], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(p, h);\n let g;\n return e[13] !== r || e[14] !== n || e[15] !== c ? (g = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(NR, {\n value: {\n cachingEnabled: r,\n clearRouteCache: c\n },\n children: n\n }), e[13] = r, e[14] = n, e[15] = c, e[16] = g) : g = e[16], g;\n}, pt = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(NR);\n\n\n\n\n\nvar oH = \"form-submit\", Dr = (t)=>{\n let { type: e = \"submit\", buttonId: o, children: n, disabled: r, onClick: s, programmaticSubmit: i, ref: l } = t, a = Mr(), c = Bb(), u = Ei(), { disabled: d, submit: f } = $e();\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: oH,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n ref: l,\n ...t,\n disabled: !(r || u || a || c || d) ? void 0 : !0,\n id: o,\n onClick: s ?? (i ? ()=>{\n f();\n } : void 0),\n type: e,\n children: n\n })\n });\n};\nvar Rh = \"drawer-action-header\", jR = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(10), { cancelLabel: o, className: n, onCancel: r, onSave: s, saveLabel: i, title: l } = t, { t: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c;\n e[0] !== n ? (c = [\n Rh,\n n\n ].filter(Boolean), e[0] = n, e[1] = c) : c = e[1];\n let u = c.join(\" \"), d;\n return e[2] !== o || e[3] !== r || e[4] !== s || e[5] !== i || e[6] !== a || e[7] !== u || e[8] !== l ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: u,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Rh}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h1\", {\n className: `${Rh}__title`,\n children: l\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Rh}__actions`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": a(\"general:cancel\"),\n buttonStyle: \"secondary\",\n onClick: r,\n children: o || a(\"general:cancel\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dr, {\n \"aria-label\": a(\"general:applyChanges\"),\n onClick: s,\n children: i || a(\"general:applyChanges\")\n })\n ]\n })\n ]\n })\n }), e[2] = o, e[3] = r, e[4] = s, e[5] = i, e[6] = a, e[7] = u, e[8] = l, e[9] = d) : d = e[9], d;\n};\n\n\nvar sH = \"drawer-content-container\";\nfunction iy({ children: t, className: e }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n sH,\n e\n ].filter(Boolean).join(\" \"),\n children: t\n });\n}\n\n\n\n\nvar ly = \"create-new-doc-in-folder\";\nfunction Sn(t) {\n _s44();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(24), { buttonLabel: o, buttonSize: n, buttonStyle: r, collectionSlugs: s, folderAssignedCollections: i, onCreateSuccess: l, slugPrefix: a } = t, c = n === void 0 ? \"small\" : n, u = r === void 0 ? \"pill\" : r, d = `${a}-new-doc-in-folder-drawer`, { i18n: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeModal: m, openModal: p } = ie(), { config: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { folderCollectionConfig: g, folderCollectionSlug: b, folderFieldName: C, folderID: y } = Gt(), v;\n e[0] !== b ? (v = {\n collectionSlug: b\n }, e[0] = b, e[1] = v) : v = e[1];\n let [x, , I] = kt(v), { closeDrawer: w, openDrawer: F } = I, [S, R] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), D;\n e[2] !== s || e[3] !== h ? (D = ()=>s.reduce((A, k)=>{\n let P = h.collections.find((E)=>{\n let { slug: B } = E;\n return B === k;\n });\n return P && A.push(P), A;\n }, []), e[2] = s, e[3] = h, e[4] = D) : D = e[4];\n let [_] = react__WEBPACK_IMPORTED_MODULE_0__.useState(D);\n if (_.length === 0) return null;\n let T;\n return e[5] !== x || e[6] !== o || e[7] !== c || e[8] !== u || e[9] !== w || e[10] !== m || e[11] !== s || e[12] !== S || e[13] !== _ || e[14] !== i || e[15] !== g.slug || e[16] !== C || e[17] !== y || e[18] !== f || e[19] !== d || e[20] !== l || e[21] !== F || e[22] !== p ? (T = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n _.length === 1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: u,\n className: `${ly}__button`,\n el: \"div\",\n onClick: ()=>{\n _[0].slug === g.slug ? F() : (R(_[0].slug), p(d));\n },\n size: c,\n children: o\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: u,\n className: `${ly}__popup-button`,\n el: \"div\",\n icon: \"chevron\",\n size: c,\n children: o\n }),\n buttonType: \"default\",\n className: `${ly}__action-popup`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: _.map((A, k)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n onClick: ()=>{\n A.slug === g.slug ? F() : (R(A.slug), p(d));\n },\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(A.labels.singular, f)\n }, k))\n })\n }),\n S && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(p0, {\n collectionSlug: S,\n drawerSlug: d,\n initialData: {\n [C]: y\n },\n onSave: async (A)=>{\n let { doc: k } = A;\n await l({\n collectionSlug: S,\n doc: k\n }), m(d);\n },\n redirectAfterCreate: !1\n }),\n s.includes(g.slug) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(x, {\n initialData: {\n [C]: y,\n folderType: S ? i || [\n S\n ] : i\n },\n onSave: async (A)=>{\n await l({\n collectionSlug: g.slug,\n doc: A.doc\n }), w();\n },\n redirectAfterCreate: !1\n })\n ]\n }), e[5] = x, e[6] = o, e[7] = c, e[8] = u, e[9] = w, e[10] = m, e[11] = s, e[12] = S, e[13] = _, e[14] = i, e[15] = g.slug, e[16] = C, e[17] = y, e[18] = f, e[19] = d, e[20] = l, e[21] = F, e[22] = p, e[23] = T) : T = e[23], T;\n}\n_s44(Sn, \"vCXzq++DXGeuGSO9CBwKYjhFfNE=\");\n_c198 = Sn;\n\n\nvar $R = ({ elements: t, translationString: e })=>{\n let o = /(<[^>]+>.*?<\\/[^>]+>)/g, n = e.split(o);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: n.map((r, s)=>{\n if (t && r.startsWith(\"<\") && r.endsWith(\">\")) {\n let i = r[1], l = t[i];\n if (l) {\n let a = new RegExp(`<${i}>(.*?)`, \"g\"), c = r.replace(a, (u, d)=>d);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(l, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($R, {\n translationString: c\n })\n }, s);\n }\n }\n return r;\n })\n });\n}, to = ({ elements: t, i18nKey: e, t: o, variables: n })=>{\n let r = o(e, n || {});\n return t ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($R, {\n elements: t,\n translationString: r\n }) : r;\n};\n\n\n\n\nvar Ph = \"folderBreadcrumbs\";\nfunction BR({ breadcrumbs: t, className: e }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ph} ${e || \"\"}`.trim(),\n children: t?.map((o, n)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ph}__crumb`,\n children: [\n o.onClick ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wa, {\n className: `${Ph}__crumb-item`,\n id: o.id,\n onClick: o.onClick,\n children: o.name\n }) : o.name,\n t.length > 0 && n !== t.length - 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n className: `${Ph}__crumb-chevron`,\n direction: \"right\"\n })\n ]\n }, n))\n });\n}\n_c199 = BR;\nfunction wa(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { id: o, children: n, className: r, onClick: s } = t, i = `folder-${o}`, l;\n e[0] !== o ? (l = {\n id: o,\n type: \"folder\"\n }, e[0] = o, e[1] = l) : l = e[1];\n let a;\n e[2] !== i || e[3] !== l ? (a = {\n id: i,\n data: l\n }, e[2] = i, e[3] = l, e[4] = a) : a = e[4];\n let { isOver: c, setNodeRef: u } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDroppable)(a), d = c && \"droppable-button--hover\", f;\n e[5] !== r || e[6] !== d ? (f = [\n \"droppable-button\",\n r,\n d\n ].filter(Boolean), e[5] = r, e[6] = d, e[7] = f) : f = e[7];\n let m = f.join(\" \"), p;\n return e[8] !== n || e[9] !== s || e[10] !== u || e[11] !== m ? (p = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: m,\n onClick: s,\n ref: u,\n type: \"button\",\n children: n\n }), e[8] = n, e[9] = s, e[10] = u, e[11] = m, e[12] = p) : p = e[12], p;\n}\n\nfunction ur() {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wd, {\n className: \"colored-folder-icon\"\n });\n}\nvar _d = \"move-folder-drawer\", pH = \"move-folder-drawer\", VR = `${pH}-confirm-move`;\nfunction Kl(t) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n gutter: !1,\n Header: null,\n slug: t.drawerSlug,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hH, {\n ...t\n })\n });\n}\n_c200 = Kl;\nfunction hH(t) {\n _s45();\n let { permissions: e } = Ie(), [o, n] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]), [r, s] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]), [i, l] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]), [a, c] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [u, d] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(t.fromFolderID || null), p = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1), { getFolderResultsComponentAndData: h } = Nt(), g = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"hH.useCallback[g]\": async (b)=>{\n try {\n let C = await h({\n browseByFolder: !1,\n collectionsToDisplay: [\n t.folderCollectionSlug\n ],\n displayAs: \"grid\",\n folderAssignedCollections: t.folderAssignedCollections,\n folderID: b,\n sort: \"name\"\n });\n l(C.breadcrumbs || []), n(C?.subfolders || []), s(C?.documents || []), c(C.FolderResultsComponent || null), m(b), d(!0);\n } catch {\n l([]), n([]), s([]);\n }\n p.current = !0;\n }\n }[\"hH.useCallback[g]\"], [\n h,\n t.folderAssignedCollections,\n t.folderCollectionSlug\n ]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"hH.useEffect\": ()=>{\n p.current || g(t.fromFolderID);\n }\n }[\"hH.useEffect\"], [\n g,\n t.fromFolderID\n ]), u ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ca, {\n allCollectionFolderSlugs: [\n t.folderCollectionSlug\n ],\n allowCreateCollectionSlugs: e.collections[t.folderCollectionSlug]?.create ? [\n t.folderCollectionSlug\n ] : [],\n allowMultiSelection: !1,\n breadcrumbs: i,\n documents: r,\n folderFieldName: t.folderFieldName,\n folderID: f,\n FolderResultsComponent: a,\n onItemClick: async (b)=>{\n await g(b.value.id);\n },\n subfolders: o,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(gH, {\n ...t,\n populateMoveToFolderDrawer: g\n })\n }, f) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bn, {});\n}\n_s45(hH, \"TrRrssQFdd78Bt2y4INndr/kn5s=\");\nfunction gH(t) {\n _s46();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(34), { drawerSlug: o, fromFolderID: n, fromFolderName: r, itemsToMove: s, onConfirm: i, populateMoveToFolderDrawer: l, skipConfirmModal: a, ...c } = t, { clearRouteCache: u } = pt(), { closeModal: d, isModalOpen: f, openModal: m } = ie(), p;\n e[0] !== s ? (p = ()=>s.length, e[0] = s, e[1] = p) : p = e[1];\n let [h] = react__WEBPACK_IMPORTED_MODULE_0__.useState(p), [g, b] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), { i18n: C, t: y } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { breadcrumbs: v, folderCollectionConfig: x, folderCollectionSlug: I, folderFieldName: w, folderID: F, FolderResultsComponent: S, folderType: R, getSelectedItems: D, subfolders: _ } = Gt(), T;\n e[2] !== I ? (T = {\n collectionSlug: I\n }, e[2] = I, e[3] = T) : T = e[3];\n let [A, , k] = kt(T), { closeDrawer: P, openDrawer: E } = k, B;\n e[4] !== v || e[5] !== D ? (B = ()=>{\n let X = D();\n if (X.length === 0) {\n let ue = v?.[v.length - 1];\n return {\n id: ue?.id || null,\n name: ue?.name || null\n };\n } else return {\n id: X[0].value.id,\n name: X[0].value._folderOrDocumentTitle\n };\n }, e[4] = v, e[5] = D, e[6] = B) : B = e[6];\n let $ = B, M;\n e[7] !== I || e[8] !== F || e[9] !== n || e[10] !== l ? (M = async (X)=>{\n let { collectionSlug: ue, doc: q } = X;\n await l(F), ue === I && (q?.folder && n === (0,payload_shared__WEBPACK_IMPORTED_MODULE_36__.extractID)(q?.folder) || !n && !q?.folder) && b(!0);\n }, e[7] = I, e[8] = F, e[9] = n, e[10] = l, e[11] = M) : M = e[11];\n let L = M, j;\n e[12] !== $ || e[13] !== i ? (j = ()=>{\n typeof i == \"function\" && i($());\n }, e[12] = $, e[13] = i, e[14] = j) : j = e[14];\n let O = j, V, W;\n e[15] !== u || e[16] !== o || e[17] !== g || e[18] !== f ? (V = ()=>{\n !f(o) && g && (b(!1), u());\n }, W = [\n o,\n f,\n u,\n g\n ], e[15] = u, e[16] = o, e[17] = g, e[18] = f, e[19] = V, e[20] = W) : (V = e[19], W = e[20]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(V, W);\n let Z;\n e[21] !== d || e[22] !== o ? (Z = ()=>{\n d(o);\n }, e[21] = d, e[22] = o, e[23] = Z) : Z = e[23];\n let z;\n e[24] !== O || e[25] !== m || e[26] !== a ? (z = ()=>{\n a ? O() : m(VR);\n }, e[24] = O, e[25] = m, e[26] = a, e[27] = z) : z = e[27];\n let Q;\n e[28] !== v.length || e[29] !== l ? (Q = v.length ? ()=>{\n l(null);\n } : void 0, e[28] = v.length, e[29] = l, e[30] = Q) : Q = e[30];\n let U;\n return e[31] !== v.length || e[32] !== l ? (U = (X, ue)=>({\n id: X.id,\n name: X.name,\n onClick: ue !== v.length - 1 ? ()=>{\n l(X.id);\n } : void 0\n }), e[31] = v.length, e[32] = l, e[33] = U) : U = e[33], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: _d,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jR, {\n onCancel: Z,\n onSave: z,\n saveLabel: y(\"general:select\"),\n title: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bH, {\n action: c.action,\n count: h,\n fromFolderName: n ? r : void 0,\n title: c.action === \"moveItemToFolder\" ? c.title : void 0\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${_d}__breadcrumbs-section`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(BR, {\n breadcrumbs: [\n {\n id: null,\n name: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: `${_d}__folder-breadcrumbs-root`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {}),\n y(\"folder:folders\")\n ]\n }),\n onClick: Q\n },\n ...v.map(U)\n ]\n }),\n _.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n className: `${_d}__add-folder-button`,\n margin: !1,\n onClick: ()=>{\n E();\n },\n children: y(\"fields:addLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(x.labels?.singular, C)\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(A, {\n initialData: {\n [w]: F,\n folderType: R\n },\n onSave: (X)=>{\n L({\n collectionSlug: x.slug,\n doc: X.doc\n }), P();\n },\n redirectAfterCreate: !1\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(iy, {\n className: `${_d}__body-section`,\n children: _.length > 0 ? S : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gn, {\n Actions: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sn, {\n buttonLabel: `${y(\"general:create\")} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(x.labels?.singular, C).toLowerCase()}`,\n buttonSize: \"medium\",\n buttonStyle: \"primary\",\n collectionSlugs: [\n I\n ],\n folderAssignedCollections: c.folderAssignedCollections,\n onCreateSuccess: L,\n slugPrefix: \"create-new-folder-from-drawer--no-results\"\n }, \"create-folder\")\n ],\n Message: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: C.t(\"general:noResultsFound\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: C.t(\"general:noResultsDescription\")\n })\n ]\n })\n })\n }),\n !a && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vH, {\n action: c.action,\n count: h,\n fromFolderName: r,\n title: c.action === \"moveItemToFolder\" ? c.title : void 0,\n toFolderName: $().name\n }),\n confirmingLabel: y(\"general:moving\"),\n confirmLabel: y(\"general:move\"),\n heading: y(\"general:confirmMove\"),\n modalSlug: VR,\n onConfirm: O\n })\n ]\n });\n}\n_s46(gH, \"aQeHsTzkM9ZFG8YWCfEqYUYn2uE=\");\nfunction bH(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n switch(t.action){\n case \"moveItemToFolder\":\n if (t.fromFolderName) {\n let n;\n return e[0] !== t.fromFolderName || e[1] !== t.title || e[2] !== o ? (n = o(\"folder:movingFromFolder\", {\n fromFolder: t.fromFolderName,\n title: t.title\n }), e[0] = t.fromFolderName, e[1] = t.title, e[2] = o, e[3] = n) : n = e[3], n;\n } else {\n let n;\n return e[4] !== t.title || e[5] !== o ? (n = o(\"folder:selectFolderForItem\", {\n title: t.title\n }), e[4] = t.title, e[5] = o, e[6] = n) : n = e[6], n;\n }\n case \"moveItemsToFolder\":\n if (t.fromFolderName) {\n let n = `${t.count} ${t.count > 1 ? o(\"general:items\") : o(\"general:item\")}`, r;\n return e[7] !== t.fromFolderName || e[8] !== o || e[9] !== n ? (r = o(\"folder:movingFromFolder\", {\n fromFolder: t.fromFolderName,\n title: n\n }), e[7] = t.fromFolderName, e[8] = o, e[9] = n, e[10] = r) : r = e[10], r;\n } else {\n let n = `${t.count} ${t.count > 1 ? o(\"general:items\") : o(\"general:item\")}`, r;\n return e[11] !== o || e[12] !== n ? (r = o(\"folder:selectFolderForItem\", {\n title: n\n }), e[11] = o, e[12] = n, e[13] = r) : r = e[13], r;\n }\n }\n}\nfunction vH(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n switch(t.action){\n case \"moveItemToFolder\":\n if (t.toFolderName) {\n let n;\n return e[0] !== t.title || e[1] !== t.toFolderName || e[2] !== o ? (n = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: IH,\n 2: SH\n },\n i18nKey: \"folder:moveItemToFolderConfirmation\",\n t: o,\n variables: {\n title: t.title,\n toFolder: t.toFolderName\n }\n }), e[0] = t.title, e[1] = t.toFolderName, e[2] = o, e[3] = n) : n = e[3], n;\n } else {\n let n;\n return e[4] !== t.title || e[5] !== o ? (n = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: wH\n },\n i18nKey: \"folder:moveItemToRootConfirmation\",\n t: o,\n variables: {\n title: t.title\n }\n }), e[4] = t.title, e[5] = o, e[6] = n) : n = e[6], n;\n }\n case \"moveItemsToFolder\":\n if (t.toFolderName) {\n let n;\n return e[7] !== t.count || e[8] !== t.toFolderName || e[9] !== o ? (n = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: xH,\n 2: CH\n },\n i18nKey: \"folder:moveItemsToFolderConfirmation\",\n t: o,\n variables: {\n count: t.count,\n label: t.count > 1 ? o(\"general:items\") : o(\"general:item\"),\n toFolder: t.toFolderName\n }\n }), e[7] = t.count, e[8] = t.toFolderName, e[9] = o, e[10] = n) : n = e[10], n;\n } else {\n let n;\n return e[11] !== t.count || e[12] !== o ? (n = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: yH\n },\n i18nKey: \"folder:moveItemsToRootConfirmation\",\n t: o,\n variables: {\n count: t.count,\n label: t.count > 1 ? o(\"general:items\") : o(\"general:item\")\n }\n }), e[11] = t.count, e[12] = o, e[13] = n) : n = e[13], n;\n }\n }\n}\nfunction yH(t) {\n let { children: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: e\n });\n}\nfunction CH(t) {\n let { children: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: e\n });\n}\n_c201 = CH;\nfunction xH(t) {\n let { children: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: e\n });\n}\nfunction wH(t) {\n let { children: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: e\n });\n}\nfunction SH(t) {\n let { children: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: e\n });\n}\n_c202 = SH;\nfunction IH(t) {\n let { children: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: e\n });\n}\n_c203 = IH;\nvar AH = \"move-doc-to-folder\";\nfunction Td(t) {\n _s47();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(29), { buttonProps: o, className: n, folderCollectionSlug: r, folderFieldName: s } = t, i = n === void 0 ? \"\" : n, { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), a = Ot(PH), c;\n e[0] !== s ? (c = (_)=>{\n let [T] = _;\n return T && T?.[s] || null;\n }, e[0] = s, e[1] = c) : c = e[1];\n let u = Ot(c), d = u?.value, { id: f, collectionSlug: m, initialData: p, title: h } = Se(), { setModified: g } = $e(), b;\n e[2] !== l ? (b = ()=>`${l(\"general:loading\")}...`, e[2] = l, e[3] = b) : b = e[3];\n let [C, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(b), { config: v } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), I, w;\n e[4] !== v.routes.api || e[5] !== r || e[6] !== d || e[7] !== l ? (I = ()=>{\n (async function() {\n if (d && (typeof d == \"string\" || typeof d == \"number\")) {\n let k = await (await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: v.routes.api,\n path: `/${r}/${d}`\n }))).json();\n y(k?.name || l(\"folder:noFolder\"));\n } else y(l(\"folder:noFolder\"));\n })();\n }, w = [\n r,\n v.routes.api,\n d,\n l\n ], e[4] = v.routes.api, e[5] = r, e[6] = d, e[7] = l, e[8] = I, e[9] = w) : (I = e[8], w = e[9]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(I, w);\n let F = `move-to-folder-${x}`, S;\n e[10] !== u || e[11] !== a || e[12] !== s || e[13] !== g ? (S = (_)=>{\n let { id: T } = _;\n u.value !== T && (a({\n type: \"UPDATE\",\n path: s,\n value: T\n }), g(!0));\n }, e[10] = u, e[11] = a, e[12] = s, e[13] = g, e[14] = S) : S = e[14];\n let R = !u?.value, D;\n return e[15] !== o || e[16] !== i || e[17] !== m || e[18] !== r || e[19] !== s || e[20] !== d || e[21] !== C || e[22] !== f || e[23] !== p || e[24] !== F || e[25] !== S || e[26] !== R || e[27] !== h ? (D = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(WR, {\n buttonProps: o,\n className: i,\n collectionSlug: m,\n docData: p,\n docID: f,\n docTitle: h,\n folderCollectionSlug: r,\n folderFieldName: s,\n fromFolderID: d,\n fromFolderName: C,\n modalSlug: F,\n onConfirm: S,\n skipConfirmModal: R\n }), e[15] = o, e[16] = i, e[17] = m, e[18] = r, e[19] = s, e[20] = d, e[21] = C, e[22] = f, e[23] = p, e[24] = F, e[25] = S, e[26] = R, e[27] = h, e[28] = D) : D = e[28], D;\n}\n_s47(Td, \"jO/LshlAuMbE3pWcxz0d/a13Tzc=\");\n_c204 = Td;\nfunction PH(t) {\n let [, e] = t;\n return e;\n}\n_c205 = PH;\nvar WR = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(22), { buttonProps: o, className: n, collectionSlug: r, docData: s, docID: i, docTitle: l, folderCollectionSlug: a, folderFieldName: c, fromFolderID: u, fromFolderName: d, modalSlug: f, onConfirm: m, skipConfirmModal: p } = t, { getEntityConfig: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: g, t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeModal: C, openModal: y } = ie(), v = Vr(), x;\n if (e[0] !== o || e[1] !== n || e[2] !== C || e[3] !== r || e[4] !== s || e[5] !== i || e[6] !== l || e[7] !== v || e[8] !== a || e[9] !== c || e[10] !== u || e[11] !== d || e[12] !== h || e[13] !== g || e[14] !== f || e[15] !== m || e[16] !== y || e[17] !== p || e[18] !== b) {\n let I = eu({\n slug: f,\n depth: v\n }), w = l || (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(h({\n collectionSlug: r\n }).labels.singular, g), F;\n e[20] !== n ? (F = [\n AH,\n n\n ].filter(Boolean), e[20] = n, e[21] = F) : F = e[21], x = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"subtle\",\n className: F.join(\" \"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wd, {}),\n iconPosition: \"left\",\n onClick: ()=>{\n y(I);\n },\n ...o,\n children: d\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Kl, {\n action: \"moveItemToFolder\",\n drawerSlug: I,\n folderAssignedCollections: [\n r\n ],\n folderCollectionSlug: a,\n folderFieldName: c,\n fromFolderID: u,\n fromFolderName: d,\n itemsToMove: [\n {\n itemKey: `${r}-${i}`,\n relationTo: r,\n value: {\n ...s,\n id: i\n }\n }\n ],\n onConfirm: async (S)=>{\n if (u !== S.id && typeof m == \"function\") try {\n await m(S), S.id ? ee.success(b(\"folder:itemHasBeenMoved\", {\n folderName: `\"${S.name}\"`,\n title: w\n })) : ee.success(b(\"folder:itemHasBeenMovedToRoot\", {\n title: w\n }));\n } catch (R) {\n let D = R;\n }\n C(I);\n },\n skipConfirmModal: p,\n title: w\n })\n ]\n }), e[0] = o, e[1] = n, e[2] = C, e[3] = r, e[4] = s, e[5] = i, e[6] = l, e[7] = v, e[8] = a, e[9] = c, e[10] = u, e[11] = d, e[12] = h, e[13] = g, e[14] = f, e[15] = m, e[16] = y, e[17] = p, e[18] = b, e[19] = x;\n } else x = e[19];\n return x;\n};\n_c206 = WR;\n\n\n\n\n\n\n\nvar Lh = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n unit: \"px\"\n}, ec = (t, e, o)=>Math.min(Math.max(t, e), o), NH = (...t)=>t.filter((e)=>e && typeof e == \"string\").join(\" \"), UR = (t, e)=>t === e || t.width === e.width && t.height === e.height && t.x === e.x && t.y === e.y && t.unit === e.unit;\nfunction tc(t, e, o) {\n return t.unit === \"%\" ? {\n ...Lh,\n ...t,\n unit: \"%\"\n } : {\n unit: \"%\",\n x: t.x ? t.x / e * 100 : 0,\n y: t.y ? t.y / o * 100 : 0,\n width: t.width ? t.width / e * 100 : 0,\n height: t.height ? t.height / o * 100 : 0\n };\n}\nfunction mi(t, e, o) {\n return t.unit ? t.unit === \"px\" ? {\n ...Lh,\n ...t,\n unit: \"px\"\n } : {\n unit: \"px\",\n x: t.x ? t.x * e / 100 : 0,\n y: t.y ? t.y * o / 100 : 0,\n width: t.width ? t.width * e / 100 : 0,\n height: t.height ? t.height * o / 100 : 0\n } : {\n ...Lh,\n ...t,\n unit: \"px\"\n };\n}\nfunction XR(t, e, o, n, r, s = 0, i = 0, l = n, a = r) {\n let c = {\n ...t\n }, u = Math.min(s, n), d = Math.min(i, r), f = Math.min(l, n), m = Math.min(a, r);\n e && (e > 1 ? (u = i ? i * e : u, d = u / e, f = l * e) : (d = s ? s / e : d, u = d * e, m = a / e)), c.y < 0 && (c.height = Math.max(c.height + c.y, d), c.y = 0), c.x < 0 && (c.width = Math.max(c.width + c.x, u), c.x = 0);\n let p = n - (c.x + c.width);\n p < 0 && (c.x = Math.min(c.x, n - u), c.width += p);\n let h = r - (c.y + c.height);\n if (h < 0 && (c.y = Math.min(c.y, r - d), c.height += h), c.width < u && ((o === \"sw\" || o == \"nw\") && (c.x -= u - c.width), c.width = u), c.height < d && ((o === \"nw\" || o == \"ne\") && (c.y -= d - c.height), c.height = d), c.width > f && ((o === \"sw\" || o == \"nw\") && (c.x -= f - c.width), c.width = f), c.height > m && ((o === \"nw\" || o == \"ne\") && (c.y -= m - c.height), c.height = m), e) {\n let g = c.width / c.height;\n if (g < e) {\n let b = Math.max(c.width / e, d);\n (o === \"nw\" || o == \"ne\") && (c.y -= b - c.height), c.height = b;\n } else if (g > e) {\n let b = Math.max(c.height * e, u);\n (o === \"sw\" || o == \"nw\") && (c.x -= b - c.width), c.width = b;\n }\n }\n return c;\n}\n_c207 = XR;\nfunction LH(t, e, o, n) {\n let r = {\n ...t\n };\n return e === \"ArrowLeft\" ? n === \"nw\" ? (r.x -= o, r.y -= o, r.width += o, r.height += o) : n === \"w\" ? (r.x -= o, r.width += o) : n === \"sw\" ? (r.x -= o, r.width += o, r.height += o) : n === \"ne\" ? (r.y += o, r.width -= o, r.height -= o) : n === \"e\" ? r.width -= o : n === \"se\" && (r.width -= o, r.height -= o) : e === \"ArrowRight\" && (n === \"nw\" ? (r.x += o, r.y += o, r.width -= o, r.height -= o) : n === \"w\" ? (r.x += o, r.width -= o) : n === \"sw\" ? (r.x += o, r.width -= o, r.height -= o) : n === \"ne\" ? (r.y -= o, r.width += o, r.height += o) : n === \"e\" ? r.width += o : n === \"se\" && (r.width += o, r.height += o)), e === \"ArrowUp\" ? n === \"nw\" ? (r.x -= o, r.y -= o, r.width += o, r.height += o) : n === \"n\" ? (r.y -= o, r.height += o) : n === \"ne\" ? (r.y -= o, r.width += o, r.height += o) : n === \"sw\" ? (r.x += o, r.width -= o, r.height -= o) : n === \"s\" ? r.height -= o : n === \"se\" && (r.width -= o, r.height -= o) : e === \"ArrowDown\" && (n === \"nw\" ? (r.x += o, r.y += o, r.width -= o, r.height -= o) : n === \"n\" ? (r.y += o, r.height -= o) : n === \"ne\" ? (r.y += o, r.width -= o, r.height -= o) : n === \"sw\" ? (r.x -= o, r.width += o, r.height += o) : n === \"s\" ? r.height += o : n === \"se\" && (r.width += o, r.height += o)), r;\n}\n_c208 = LH;\nvar oc = {\n capture: !0,\n passive: !1\n}, fi = class In extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {\n constructor(){\n super(...arguments), this.docMoveBound = !1, this.mouseDownOnCrop = !1, this.dragStarted = !1, this.evData = {\n startClientX: 0,\n startClientY: 0,\n startCropX: 0,\n startCropY: 0,\n clientX: 0,\n clientY: 0,\n isResize: !0\n }, this.componentRef = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)(), this.mediaRef = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)(), this.initChangeCalled = !1, this.state = {\n cropIsActive: !1,\n newCropIsBeingDrawn: !1\n }, this.onCropPointerDown = (e)=>{\n let { crop: o, disabled: n } = this.props, r = this.getBox();\n if (!o) return;\n let s = mi(o, r.width, r.height);\n if (n) return;\n e.cancelable && e.preventDefault(), this.bindDocMove(), this.componentRef.current.focus({\n preventScroll: !0\n });\n let i = e.target.dataset.ord, l = !!i, a = e.clientX, c = e.clientY, u = s.x, d = s.y;\n if (i) {\n let f = e.clientX - r.x, m = e.clientY - r.y, p = 0, h = 0;\n i === \"ne\" || i == \"e\" ? (p = f - (s.x + s.width), h = m - s.y, u = s.x, d = s.y + s.height) : i === \"se\" || i === \"s\" ? (p = f - (s.x + s.width), h = m - (s.y + s.height), u = s.x, d = s.y) : i === \"sw\" || i == \"w\" ? (p = f - s.x, h = m - (s.y + s.height), u = s.x + s.width, d = s.y) : (i === \"nw\" || i == \"n\") && (p = f - s.x, h = m - s.y, u = s.x + s.width, d = s.y + s.height), a = u + r.x + p, c = d + r.y + h;\n }\n this.evData = {\n startClientX: a,\n startClientY: c,\n startCropX: u,\n startCropY: d,\n clientX: e.clientX,\n clientY: e.clientY,\n isResize: l,\n ord: i\n }, this.mouseDownOnCrop = !0, this.setState({\n cropIsActive: !0\n });\n }, this.onComponentPointerDown = (e)=>{\n let { crop: o, disabled: n, locked: r, keepSelection: s, onChange: i } = this.props, l = this.getBox();\n if (n || r || s && o) return;\n e.cancelable && e.preventDefault(), this.bindDocMove(), this.componentRef.current.focus({\n preventScroll: !0\n });\n let a = e.clientX - l.x, c = e.clientY - l.y, u = {\n unit: \"px\",\n x: a,\n y: c,\n width: 0,\n height: 0\n };\n this.evData = {\n startClientX: e.clientX,\n startClientY: e.clientY,\n startCropX: a,\n startCropY: c,\n clientX: e.clientX,\n clientY: e.clientY,\n isResize: !0\n }, this.mouseDownOnCrop = !0, i(mi(u, l.width, l.height), tc(u, l.width, l.height)), this.setState({\n cropIsActive: !0,\n newCropIsBeingDrawn: !0\n });\n }, this.onDocPointerMove = (e)=>{\n let { crop: o, disabled: n, onChange: r, onDragStart: s } = this.props, i = this.getBox();\n if (n || !o || !this.mouseDownOnCrop) return;\n e.cancelable && e.preventDefault(), this.dragStarted || (this.dragStarted = !0, s && s(e));\n let { evData: l } = this;\n l.clientX = e.clientX, l.clientY = e.clientY;\n let a;\n l.isResize ? a = this.resizeCrop() : a = this.dragCrop(), UR(o, a) || r(mi(a, i.width, i.height), tc(a, i.width, i.height));\n }, this.onComponentKeyDown = (e)=>{\n let { crop: o, disabled: n, onChange: r, onComplete: s } = this.props;\n if (n) return;\n let i = e.key, l = !1;\n if (!o) return;\n let a = this.getBox(), c = this.makePixelCrop(a), u = (navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) ? In.nudgeStepLarge : e.shiftKey ? In.nudgeStepMedium : In.nudgeStep;\n if (i === \"ArrowLeft\" ? (c.x -= u, l = !0) : i === \"ArrowRight\" ? (c.x += u, l = !0) : i === \"ArrowUp\" ? (c.y -= u, l = !0) : i === \"ArrowDown\" && (c.y += u, l = !0), l) {\n e.cancelable && e.preventDefault(), c.x = ec(c.x, 0, a.width - c.width), c.y = ec(c.y, 0, a.height - c.height);\n let d = mi(c, a.width, a.height), f = tc(c, a.width, a.height);\n r(d, f), s && s(d, f);\n }\n }, this.onHandlerKeyDown = (e, o)=>{\n let { aspect: n = 0, crop: r, disabled: s, minWidth: i = 0, minHeight: l = 0, maxWidth: a, maxHeight: c, onChange: u, onComplete: d } = this.props, f = this.getBox();\n if (s || !r) return;\n if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\" || e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") e.stopPropagation(), e.preventDefault();\n else return;\n let m = (navigator.platform.match(\"Mac\") ? e.metaKey : e.ctrlKey) ? In.nudgeStepLarge : e.shiftKey ? In.nudgeStepMedium : In.nudgeStep, p = mi(r, f.width, f.height), h = LH(p, e.key, m, o), g = XR(h, n, o, f.width, f.height, i, l, a, c);\n if (!UR(r, g)) {\n let b = tc(g, f.width, f.height);\n u(g, b), d && d(g, b);\n }\n }, this.onDocPointerDone = (e)=>{\n let { crop: o, disabled: n, onComplete: r, onDragEnd: s } = this.props, i = this.getBox();\n this.unbindDocMove(), !(n || !o) && this.mouseDownOnCrop && (this.mouseDownOnCrop = !1, this.dragStarted = !1, s && s(e), r && r(mi(o, i.width, i.height), tc(o, i.width, i.height)), this.setState({\n cropIsActive: !1,\n newCropIsBeingDrawn: !1\n }));\n }, this.onDragFocus = (e)=>{\n var o;\n (o = this.componentRef.current) == null || o.scrollTo(0, 0);\n };\n }\n get document() {\n return document;\n }\n getBox() {\n let e = this.mediaRef.current;\n if (!e) return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n let { x: o, y: n, width: r, height: s } = e.getBoundingClientRect();\n return {\n x: o,\n y: n,\n width: r,\n height: s\n };\n }\n componentDidUpdate(e) {\n let { crop: o, onComplete: n } = this.props;\n if (n && !e.crop && o) {\n let { width: r, height: s } = this.getBox();\n r && s && n(mi(o, r, s), tc(o, r, s));\n }\n }\n componentWillUnmount() {\n this.resizeObserver && this.resizeObserver.disconnect();\n }\n bindDocMove() {\n this.docMoveBound || (this.document.addEventListener(\"pointermove\", this.onDocPointerMove, oc), this.document.addEventListener(\"pointerup\", this.onDocPointerDone, oc), this.document.addEventListener(\"pointercancel\", this.onDocPointerDone, oc), this.docMoveBound = !0);\n }\n unbindDocMove() {\n this.docMoveBound && (this.document.removeEventListener(\"pointermove\", this.onDocPointerMove, oc), this.document.removeEventListener(\"pointerup\", this.onDocPointerDone, oc), this.document.removeEventListener(\"pointercancel\", this.onDocPointerDone, oc), this.docMoveBound = !1);\n }\n getCropStyle() {\n let { crop: e } = this.props;\n if (e) return {\n top: `${e.y}${e.unit}`,\n left: `${e.x}${e.unit}`,\n width: `${e.width}${e.unit}`,\n height: `${e.height}${e.unit}`\n };\n }\n dragCrop() {\n let { evData: e } = this, o = this.getBox(), n = this.makePixelCrop(o), r = e.clientX - e.startClientX, s = e.clientY - e.startClientY;\n return n.x = ec(e.startCropX + r, 0, o.width - n.width), n.y = ec(e.startCropY + s, 0, o.height - n.height), n;\n }\n getPointRegion(e, o, n, r) {\n let { evData: s } = this, i = s.clientX - e.x, l = s.clientY - e.y, a;\n r && o ? a = o === \"nw\" || o === \"n\" || o === \"ne\" : a = l < s.startCropY;\n let c;\n return n && o ? c = o === \"nw\" || o === \"w\" || o === \"sw\" : c = i < s.startCropX, c ? a ? \"nw\" : \"sw\" : a ? \"ne\" : \"se\";\n }\n resolveMinDimensions(e, o, n = 0, r = 0) {\n let s = Math.min(n, e.width), i = Math.min(r, e.height);\n return !o || !s && !i ? [\n s,\n i\n ] : o > 1 ? s ? [\n s,\n s / o\n ] : [\n i * o,\n i\n ] : i ? [\n i * o,\n i\n ] : [\n s,\n s / o\n ];\n }\n resizeCrop() {\n let { evData: e } = this, { aspect: o = 0, maxWidth: n, maxHeight: r } = this.props, s = this.getBox(), [i, l] = this.resolveMinDimensions(s, o, this.props.minWidth, this.props.minHeight), a = this.makePixelCrop(s), c = this.getPointRegion(s, e.ord, i, l), u = e.ord || c, d = e.clientX - e.startClientX, f = e.clientY - e.startClientY;\n (i && u === \"nw\" || u === \"w\" || u === \"sw\") && (d = Math.min(d, -i)), (l && u === \"nw\" || u === \"n\" || u === \"ne\") && (f = Math.min(f, -l));\n let m = {\n unit: \"px\",\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n c === \"ne\" ? (m.x = e.startCropX, m.width = d, o ? (m.height = m.width / o, m.y = e.startCropY - m.height) : (m.height = Math.abs(f), m.y = e.startCropY - m.height)) : c === \"se\" ? (m.x = e.startCropX, m.y = e.startCropY, m.width = d, o ? m.height = m.width / o : m.height = f) : c === \"sw\" ? (m.x = e.startCropX + d, m.y = e.startCropY, m.width = Math.abs(d), o ? m.height = m.width / o : m.height = f) : c === \"nw\" && (m.x = e.startCropX + d, m.width = Math.abs(d), o ? (m.height = m.width / o, m.y = e.startCropY - m.height) : (m.height = Math.abs(f), m.y = e.startCropY + f));\n let p = XR(m, o, c, s.width, s.height, i, l, n, r);\n return o || In.xyOrds.indexOf(u) > -1 ? a = p : In.xOrds.indexOf(u) > -1 ? (a.x = p.x, a.width = p.width) : In.yOrds.indexOf(u) > -1 && (a.y = p.y, a.height = p.height), a.x = ec(a.x, 0, s.width - a.width), a.y = ec(a.y, 0, s.height - a.height), a;\n }\n createCropSelection() {\n let { ariaLabels: e = In.defaultProps.ariaLabels, disabled: o, locked: n, renderSelectionAddon: r, ruleOfThirds: s, crop: i } = this.props, l = this.getCropStyle();\n if (i) return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n style: l,\n className: \"ReactCrop__crop-selection\",\n onPointerDown: this.onCropPointerDown,\n \"aria-label\": e.cropArea,\n tabIndex: 0,\n onKeyDown: this.onComponentKeyDown,\n role: \"group\"\n }, !o && !n && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-elements\",\n onFocus: this.onDragFocus\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-bar ord-n\",\n \"data-ord\": \"n\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-bar ord-e\",\n \"data-ord\": \"e\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-bar ord-s\",\n \"data-ord\": \"s\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-bar ord-w\",\n \"data-ord\": \"w\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-nw\",\n \"data-ord\": \"nw\",\n tabIndex: 0,\n \"aria-label\": e.nwDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"nw\"),\n role: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-n\",\n \"data-ord\": \"n\",\n tabIndex: 0,\n \"aria-label\": e.nDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"n\"),\n role: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-ne\",\n \"data-ord\": \"ne\",\n tabIndex: 0,\n \"aria-label\": e.neDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"ne\"),\n role: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-e\",\n \"data-ord\": \"e\",\n tabIndex: 0,\n \"aria-label\": e.eDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"e\"),\n role: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-se\",\n \"data-ord\": \"se\",\n tabIndex: 0,\n \"aria-label\": e.seDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"se\"),\n role: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-s\",\n \"data-ord\": \"s\",\n tabIndex: 0,\n \"aria-label\": e.sDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"s\"),\n role: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-sw\",\n \"data-ord\": \"sw\",\n tabIndex: 0,\n \"aria-label\": e.swDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"sw\"),\n role: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__drag-handle ord-w\",\n \"data-ord\": \"w\",\n tabIndex: 0,\n \"aria-label\": e.wDragHandle,\n onKeyDown: (a)=>this.onHandlerKeyDown(a, \"w\"),\n role: \"button\"\n })), r && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__selection-addon\",\n onMouseDown: (a)=>a.stopPropagation()\n }, r(this.state)), s && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__rule-of-thirds-hz\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"ReactCrop__rule-of-thirds-vt\"\n })));\n }\n makePixelCrop(e) {\n let o = {\n ...Lh,\n ...this.props.crop || {}\n };\n return mi(o, e.width, e.height);\n }\n render() {\n let { aspect: e, children: o, circularCrop: n, className: r, crop: s, disabled: i, locked: l, style: a, ruleOfThirds: c } = this.props, { cropIsActive: u, newCropIsBeingDrawn: d } = this.state, f = s ? this.createCropSelection() : null, m = NH(\"ReactCrop\", r, u && \"ReactCrop--active\", i && \"ReactCrop--disabled\", l && \"ReactCrop--locked\", d && \"ReactCrop--new-crop\", s && e && \"ReactCrop--fixed-aspect\", s && n && \"ReactCrop--circular-crop\", s && c && \"ReactCrop--rule-of-thirds\", !this.dragStarted && s && !s.width && !s.height && \"ReactCrop--invisible-crop\", n && \"ReactCrop--no-animate\");\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n ref: this.componentRef,\n className: m,\n style: a\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n ref: this.mediaRef,\n className: \"ReactCrop__child-wrapper\",\n onPointerDown: this.onComponentPointerDown\n }, o), f);\n }\n};\nfi.xOrds = [\n \"e\",\n \"w\"\n];\nfi.yOrds = [\n \"n\",\n \"s\"\n];\nfi.xyOrds = [\n \"nw\",\n \"ne\",\n \"se\",\n \"sw\"\n];\nfi.nudgeStep = 1;\nfi.nudgeStepMedium = 10;\nfi.nudgeStepLarge = 100;\nfi.defaultProps = {\n ariaLabels: {\n cropArea: \"Use the arrow keys to move the crop selection area\",\n nwDragHandle: \"Use the arrow keys to move the north west drag handle to change the crop selection area\",\n nDragHandle: \"Use the up and down arrow keys to move the north drag handle to change the crop selection area\",\n neDragHandle: \"Use the arrow keys to move the north east drag handle to change the crop selection area\",\n eDragHandle: \"Use the up and down arrow keys to move the east drag handle to change the crop selection area\",\n seDragHandle: \"Use the arrow keys to move the south east drag handle to change the crop selection area\",\n sDragHandle: \"Use the up and down arrow keys to move the south drag handle to change the crop selection area\",\n swDragHandle: \"Use the arrow keys to move the south west drag handle to change the crop selection area\",\n wDragHandle: \"Use the up and down arrow keys to move the west drag handle to change the crop selection area\"\n }\n};\nvar YR = fi;\n\nvar jt = \"edit-upload\", kh = (t)=>{\n let { name: e, onChange: o, ref: n, value: r } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__input`,\n children: [\n e,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n name: e,\n onChange: (s)=>o(s.target.value),\n ref: n,\n type: \"number\",\n value: r\n })\n ]\n });\n}, kH = {\n height: 100,\n unit: \"%\",\n width: 100,\n x: 0,\n y: 0\n}, uy = ({ fileName: t, fileSrc: e, imageCacheTag: o, initialCrop: n, initialFocalPoint: r, onSave: s, showCrop: i, showFocalPoint: l })=>{\n _s48();\n let { closeModal: a } = ie(), { t: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [u, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>({\n ...kH,\n ...n || {}\n })), f = {\n x: 50,\n y: 50\n }, [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>({\n ...f,\n ...r\n })), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), [y, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(void 0), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(void 0), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(void 0), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [R, D] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), _ = ($)=>{\n C($.currentTarget.naturalHeight), v($.currentTarget.naturalWidth), D(!0);\n }, T = ({ dimension: $, value: M })=>{\n let j = 100 * (parseInt(M) / ($ === \"width\" ? y : b));\n if (j <= 0 || j > 100) return null;\n d({\n ...u,\n [$]: j\n });\n }, A = ({ coordinate: $, value: M })=>{\n let L = parseInt(M);\n L >= 0 && L <= 100 && p((j)=>({\n ...j,\n [$]: L\n }));\n }, k = ()=>{\n typeof s == \"function\" && s({\n crop: u || void 0,\n focalPoint: m,\n heightInPixels: Number(F?.current?.value ?? b),\n widthInPixels: Number(S?.current?.value ?? y)\n }), a(Fd);\n }, P = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"uy.useCallback[P]\": ({ x: $, y: M })=>{\n p({\n x: $,\n y: M\n }), g(!1);\n }\n }[\"uy.useCallback[P]\"], []), E = ()=>{\n let $ = x.current.getBoundingClientRect(), M = i ? w.current.getBoundingClientRect() : I.current.getBoundingClientRect(), L = (M.left - $.left + M.width / 2) / $.width * 100, j = (M.top - $.top + M.height / 2) / $.height * 100;\n p({\n x: L,\n y: j\n });\n }, B = o ? `${e}?${encodeURIComponent(o)}` : e;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: jt,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"h2\", {\n title: `${c(\"general:editing\")} ${t}`,\n children: [\n c(\"general:editing\"),\n \" \",\n t\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__actions`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": c(\"general:cancel\"),\n buttonStyle: \"secondary\",\n className: `${jt}__cancel`,\n onClick: ()=>a(Fd),\n children: c(\"general:cancel\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": c(\"general:applyChanges\"),\n buttonStyle: \"primary\",\n className: `${jt}__save`,\n disabled: !R,\n onClick: k,\n children: c(\"general:applyChanges\")\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__toolWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${jt}__crop`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__focal-wrapper`,\n ref: x,\n style: {\n aspectRatio: `${y / b}`\n },\n children: [\n i ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(YR, {\n className: `${jt}__reactCrop`,\n crop: u,\n onChange: ($, M)=>d(M),\n onComplete: ()=>g(!0),\n renderSelectionAddon: ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${jt}__crop-window`,\n ref: w\n }),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: c(\"upload:setCropArea\"),\n onLoad: _,\n ref: I,\n src: B\n })\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: c(\"upload:setFocalPoint\"),\n onLoad: _,\n ref: I,\n src: B\n }),\n l && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jH, {\n boundsRef: i ? w : I,\n checkBounds: i ? h : !1,\n className: `${jt}__focalPoint`,\n containerRef: x,\n initialPosition: m,\n onDragEnd: P,\n setCheckBounds: i ? g : !1,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ar, {})\n })\n ]\n })\n }),\n (i || l) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__sidebar`,\n children: [\n i && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__groupWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__titleWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: c(\"upload:crop\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"none\",\n className: `${jt}__reset`,\n onClick: ()=>d({\n height: 100,\n unit: \"%\",\n width: 100,\n x: 0,\n y: 0\n }),\n children: c(\"general:reset\")\n })\n ]\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${jt}__description`,\n children: c(\"upload:cropToolDescription\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__inputsWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kh, {\n name: `${c(\"upload:width\")} (px)`,\n onChange: ($)=>T({\n dimension: \"width\",\n value: $\n }),\n ref: S,\n value: (u.width / 100 * y).toFixed(0)\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kh, {\n name: `${c(\"upload:height\")} (px)`,\n onChange: ($)=>T({\n dimension: \"height\",\n value: $\n }),\n ref: F,\n value: (u.height / 100 * b).toFixed(0)\n })\n ]\n })\n ]\n }),\n l && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__groupWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__titleWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: c(\"upload:focalPoint\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"none\",\n className: `${jt}__reset`,\n onClick: E,\n children: c(\"general:reset\")\n })\n ]\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${jt}__description`,\n children: c(\"upload:focalPointDescription\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${jt}__inputsWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kh, {\n name: \"X %\",\n onChange: ($)=>A({\n coordinate: \"x\",\n value: $\n }),\n value: m.x.toFixed(0)\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kh, {\n name: \"Y %\",\n onChange: ($)=>A({\n coordinate: \"y\",\n value: $\n }),\n value: m.y.toFixed(0)\n })\n ]\n })\n ]\n })\n ]\n })\n ]\n })\n ]\n });\n}, jH = ({ boundsRef: t, checkBounds: e, children: o, className: n, containerRef: r, initialPosition: s = {\n x: 50,\n y: 50\n}, onDragEnd: i, setCheckBounds: l })=>{\n _s49();\n let [a, c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n x: s.x,\n y: s.y\n }), [u, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(void 0), m = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"jH.useCallback[m]\": (b, C, y)=>{\n let v = r.current.getBoundingClientRect(), x = t.current.getBoundingClientRect(), I = b ?? x.left, w = C ?? x.top, F = I < x.left || I > x.right, S = w < x.top || w > x.bottom, R = (I - v.left) / v.width * 100, D = (w - v.top) / v.height * 100, _ = (x.left - v.left + x.width / 2) / v.width * 100, T = (x.top - v.top + x.height / 2) / v.height * 100;\n return (F || S) && (d(!1), I < x.left ? R = (x.left - v.left) / v.width * 100 : I > x.right && (R = (v.width - (v.right - x.right)) / v.width * 100), w < x.top ? D = (x.top - v.top) / v.height * 100 : w > x.bottom && (D = (v.height - (v.bottom - x.bottom)) / v.height * 100), y && (R = F ? _ : R, D = S ? T : D)), {\n x: R,\n y: D\n };\n }\n }[\"jH.useCallback[m]\"], [\n t,\n r\n ]), p = (b)=>{\n b.preventDefault(), d(!0);\n }, h = (b)=>{\n if (!u) return null;\n let { x: C, y } = m(b.clientX, b.clientY);\n c({\n x: C,\n y\n });\n }, g = ()=>{\n d(!1), i(a);\n };\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"jH.useEffect\": ()=>{\n if (!(u || !f.current) && e) {\n let { height: b, left: C, top: y, width: v } = f.current.getBoundingClientRect(), { x, y: I } = m(C + v / 2, y + b / 2, !0);\n i({\n x,\n y: I\n }), c({\n x,\n y: I\n }), l(!1);\n return;\n }\n }\n }[\"jH.useEffect\"], [\n m,\n u,\n e,\n l,\n a.x,\n a.y,\n i\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"jH.useEffect\": ()=>{\n c({\n x: s.x,\n y: s.y\n });\n }\n }[\"jH.useEffect\"], [\n s.x,\n s.y\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n `${jt}__draggable-container`,\n u && `${jt}__draggable-container--dragging`\n ].filter(Boolean).join(\" \"),\n onMouseMove: h,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: [\n `${jt}__draggable`,\n n\n ].filter(Boolean).join(\" \"),\n onMouseDown: p,\n onMouseUp: g,\n ref: f,\n style: {\n left: `${a.x}%`,\n top: `${a.y}%`\n },\n type: \"button\",\n children: o\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {})\n ]\n });\n};\n_s48(uy, \"znaP7wxj2UBMNpNhW4lY9ytBFuM=\");\n_s49(jH, \"HfdDIZHqo44wFfss3HQG5noMvNE=\");\n\n\n\n\n\nvar hi = \"file-details-draggable\", ZR = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(20), { collectionSlug: o, doc: n, hideRemoveFile: r, imageCacheTag: s, isSortable: i, removeItem: l, rowIndex: a, uploadConfig: c } = t, { id: u, filename: d, thumbnailURL: f, url: m } = n, p;\n e[0] !== o || e[1] !== u ? (p = {\n id: u,\n collectionSlug: o\n }, e[0] = o, e[1] = u, e[2] = p) : p = e[2];\n let [h, g] = kt(p), b;\n e[3] !== h || e[4] !== g || e[5] !== o || e[6] !== n || e[7] !== d || e[8] !== r || e[9] !== s || e[10] !== i || e[11] !== l || e[12] !== a || e[13] !== f || e[14] !== c || e[15] !== m ? (b = (y)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n hi,\n y && i && `${hi}--has-drag-handle`\n ].filter(Boolean).join(\" \"),\n ref: y.setNodeRef,\n style: {\n transform: y.transform,\n transition: y.transition,\n zIndex: y.isDragging ? 1 : void 0\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${hi}--drag-wrapper`,\n children: [\n i && y && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${hi}__drag`,\n ...y.attributes,\n ...y.listeners,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(un, {})\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Fr, {\n className: `${hi}__thumbnail`,\n collectionSlug: o,\n doc: n,\n fileSrc: f || m,\n imageCacheTag: s,\n uploadConfig: c\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${hi}__main-detail`,\n children: d\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${hi}__actions`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(h, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(g, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vr, {})\n }),\n !r && l && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${hi}__remove`,\n icon: \"x\",\n iconStyle: \"none\",\n onClick: ()=>l(a),\n round: !0\n })\n ]\n })\n ]\n }), e[3] = h, e[4] = g, e[5] = o, e[6] = n, e[7] = d, e[8] = r, e[9] = s, e[10] = i, e[11] = l, e[12] = a, e[13] = f, e[14] = c, e[15] = m, e[16] = b) : b = e[16];\n let C;\n return e[17] !== u || e[18] !== b ? (C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jn, {\n id: u,\n children: b\n }, u), e[17] = u, e[18] = b, e[19] = C) : C = e[19], C;\n};\n\n\n\n\n\n\n\n\nvar OH = \"copy-to-clipboard\", Dd = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(11), { defaultMessage: o, successMessage: n, value: r } = t, [s, i] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [l, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { t: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n if (r) {\n let u;\n e[0] !== r ? (u = async ()=>{\n await navigator.clipboard.writeText(r), i(!0);\n }, e[0] = r, e[1] = u) : u = e[1];\n let d, f;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (d = ()=>{\n a(!0), i(!1);\n }, f = ()=>{\n a(!1), i(!1);\n }, e[2] = d, e[3] = f) : (d = e[2], f = e[3]);\n let m;\n return e[4] !== s || e[5] !== o || e[6] !== l || e[7] !== n || e[8] !== c || e[9] !== u ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n className: OH,\n onClick: u,\n onMouseEnter: d,\n onMouseLeave: f,\n type: \"button\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ki, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Ro, {\n delay: s ? 0 : void 0,\n show: l || s,\n children: [\n s && (n ?? c(\"general:copied\")),\n !s && (o ?? c(\"general:copy\"))\n ]\n })\n ]\n }), e[4] = s, e[5] = o, e[6] = l, e[7] = n, e[8] = c, e[9] = u, e[10] = m) : m = e[10], m;\n }\n return null;\n};\nvar my = \"file-meta\", Ad = (t)=>{\n let { filename: e, filesize: o, height: n, mimeType: r, url: s, width: i } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: my,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${my}__url`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"a\", {\n href: s,\n rel: \"noopener noreferrer\",\n target: \"_blank\",\n children: e\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dd, {\n defaultMessage: \"Copy URL\",\n value: s\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${my}__size-type`,\n children: [\n (0,payload_shared__WEBPACK_IMPORTED_MODULE_39__.formatFilesize)(o),\n typeof i == \"number\" && typeof n == \"number\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n \"\\xA0-\\xA0\",\n i,\n \"x\",\n n\n ]\n }),\n r && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n \"\\xA0-\\xA0\",\n r\n ]\n })\n ]\n })\n ]\n });\n};\nvar $h = \"file-details\", tA = (t)=>{\n let { customUploadActions: e, doc: o, enableAdjustments: n, handleRemove: r, hasImageSizes: s, hideRemoveFile: i, imageCacheTag: l, uploadConfig: a } = t, { filename: c, filesize: u, height: d, mimeType: f, thumbnailURL: m, url: p, width: h } = o, g = a.displayPreview ?? !0;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: $h,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"header\", {\n children: [\n g && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Fr, {\n className: `${$h}__thumbnail`,\n doc: o,\n fileSrc: m || p,\n imageCacheTag: l,\n uploadConfig: a\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$h}__main-detail`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ad, {\n filename: c,\n filesize: u,\n height: d,\n mimeType: f,\n url: p,\n width: h\n }),\n (n || s && o.filename || e) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fy, {\n customActions: e,\n enableAdjustments: !!n,\n enablePreviewSizes: s && o.filename,\n mimeType: f\n })\n ]\n }),\n !i && r && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${$h}__remove`,\n icon: \"x\",\n iconStyle: \"with-border\",\n onClick: r,\n round: !0\n })\n ]\n })\n });\n};\nvar py = (t)=>{\n let { hasMany: e } = t;\n return e ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ZR, {\n ...t\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(tA, {\n ...t\n });\n};\n\n\nvar Kr = \"preview-sizes\", nA = (t, e)=>{\n if (!e || e.length === 0) return t;\n let o = {};\n return e.forEach(({ name: n })=>{\n t[n] && (o[n] = t[n]);\n }), o;\n}, sA = ({ name: t, active: e, alt: o, meta: n, onClick: r, previewSrc: s })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n `${Kr}__sizeOption`,\n e && `${Kr}--selected`\n ].filter(Boolean).join(\" \"),\n onClick: typeof r == \"function\" ? r : void 0,\n onKeyDown: (i)=>{\n typeof r == \"function\" && i.key === \"Enter\" && r();\n },\n role: \"button\",\n tabIndex: 0,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Kr}__image`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: o,\n src: s\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Kr}__sizeMeta`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Kr}__sizeName`,\n children: t\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ad, {\n ...n\n })\n ]\n })\n ]\n }), hy = ({ doc: t, imageCacheTag: e, uploadConfig: o })=>{\n let { imageSizes: n } = o, { sizes: r } = t, s = t?.alt || t.filename || \"\", [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>nA(r, n)), [a, c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), u = (p)=>{\n if (!p.filename) return null;\n if (p.url) return `${p.url}${e ? `?${encodeURIComponent(e)}` : \"\"}`;\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n l(nA(r, n));\n }, [\n r,\n n,\n e\n ]);\n let d = u(a ? t.sizes[a] : t), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({\n filename: t.filename,\n filesize: t.filesize,\n height: t.height,\n mimeType: t.mimeType,\n url: t.url,\n width: t.width\n }), [\n t\n ]), m = \"Original\";\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Kr,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Kr}__imageWrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Kr}__meta`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Kr}__sizeName`,\n children: a || m\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ad, {\n ...a ? i[a] : f\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: s,\n className: `${Kr}__preview`,\n src: d\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Kr}__listWrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Kr}__list`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sA, {\n active: !a,\n alt: s,\n meta: f,\n name: m,\n onClick: ()=>c(null),\n previewSrc: u(t)\n }),\n Object.entries(i).map(([p, h])=>{\n let g = a === p, b = u(h);\n return b ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sA, {\n active: g,\n alt: s,\n meta: h,\n name: p,\n onClick: ()=>c(p),\n previewSrc: b\n }, p) : null;\n })\n ]\n })\n })\n ]\n });\n};\nvar vo = \"file-field\", Fd = \"edit-upload\", cA = \"preview-sizes\", UH = (t)=>!t && t !== void 0 ? \"A file is required.\" : t && (!t.name || t.name === \"\") ? \"A file name is required.\" : !0, fy = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { customActions: o, enableAdjustments: n, enablePreviewSizes: r, mimeType: s } = t, { t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { openModal: l } = ie(), a, c;\n if (e[0] !== o || e[1] !== n || e[2] !== r || e[3] !== s || e[4] !== l || e[5] !== i) {\n c = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let u = (0,payload_shared__WEBPACK_IMPORTED_MODULE_20__.isImage)(s) && s !== \"image/svg+xml\" && s !== \"image/jxl\";\n if (!u && (!o || o.length === 0)) {\n c = null;\n break e;\n }\n a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vo}__upload-actions`,\n children: [\n u && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n r && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n className: `${vo}__previewSizes`,\n margin: !1,\n onClick: ()=>{\n l(cA);\n },\n size: \"small\",\n children: i(\"upload:previewSizes\")\n }),\n n && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n className: `${vo}__edit`,\n margin: !1,\n onClick: ()=>{\n l(Fd);\n },\n size: \"small\",\n children: i(\"upload:editImage\")\n })\n ]\n }),\n o && o.map(XH)\n ]\n });\n }\n e[0] = o, e[1] = n, e[2] = r, e[3] = s, e[4] = l, e[5] = i, e[6] = a, e[7] = c;\n } else a = e[6], c = e[7];\n return c !== Symbol.for(\"react.early_return_sentinel\") ? c : a;\n}, gy = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { resetUploadEdits: o, updateUploadEdits: n, uploadEdits: r } = Ui(), s;\n return e[0] !== t || e[1] !== o || e[2] !== n || e[3] !== r ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zl, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(by, {\n ...t,\n resetUploadEdits: o,\n updateUploadEdits: n,\n uploadEdits: r\n })\n }), e[0] = t, e[1] = o, e[2] = n, e[3] = r, e[4] = s) : s = e[4], s;\n}, by = (t)=>{\n _s50();\n let { collectionSlug: e, customActions: o, initialState: n, onChange: r, resetUploadEdits: s, updateUploadEdits: i, uploadConfig: l, UploadControls: a, uploadEdits: c } = t, { setUploadControlFile: u, setUploadControlFileName: d, setUploadControlFileUrl: f, uploadControlFile: m, uploadControlFileName: p, uploadControlFileUrl: h } = ey(), { config: { routes: { api: g } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { setModified: C } = $e(), { id: y, data: v, docPermissions: x, setUploadStatus: I } = Se(), w = Mr(), { errorMessage: F, setValue: S, showError: R, value: D } = Te({\n path: \"file\",\n validate: UH\n }), [_, T] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [A, k] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [P, E] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(D?.name || \"\"), [B, $] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [M, L] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), V = typeof l?.pasteURL == \"object\" && l.pasteURL.allowList?.length > 0, W = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ file: he, isNewFile: Oe = !0 })=>{\n Oe && he instanceof File && T(URL.createObjectURL(he)), S(he), $(!1), f(\"\"), d(null), u(null), typeof r == \"function\" && r(he);\n }, [\n r,\n S,\n u,\n d,\n f\n ]), Z = (he, Oe)=>new File([\n he\n ], Oe, {\n type: he.type,\n lastModified: he.lastModified\n }), z = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"by.useCallback[z]\": (he)=>{\n let Oe = he.target.value;\n D && (W({\n file: Z(D, Oe),\n isNewFile: !1\n }), E(Oe));\n }\n }[\"by.useCallback[z]\"], [\n W,\n D\n ]), Q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((he)=>{\n let Oe = he?.[0];\n W({\n file: Oe\n });\n }, [\n W\n ]), U = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n k(!0), W({\n file: null\n }), T(\"\"), L(\"\"), s(), $(!1), f(\"\"), d(null), u(null);\n }, [\n W,\n s,\n u,\n d,\n f\n ]), X = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((he)=>{\n C(!0), i(he);\n }, [\n C,\n i\n ]), ue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n if (!(!M || l?.pasteURL === !1)) {\n I(\"uploading\");\n try {\n let he = await fetch(M);\n if (!he.ok) throw new Error(`Fetch failed with status: ${he.status}`);\n let Oe = await he.blob(), Ke = p || decodeURIComponent(M.split(\"/\").pop() || \"\"), ae = new File([\n Oe\n ], Ke, {\n type: Oe.type\n });\n W({\n file: ae\n }), I(\"idle\");\n return;\n } catch {\n if (!V) {\n ee.error(\"Failed to fetch the file.\"), I(\"failed\");\n return;\n }\n }\n try {\n let he = `/${e}/paste-url${y ? `/${y}?` : \"?\"}src=${encodeURIComponent(M)}`, Oe = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: g,\n path: he\n }));\n if (!Oe.ok) throw new Error(`Fetch failed with status: ${Oe.status}`);\n let Ke = await Oe.blob(), ae = decodeURIComponent(M.split(\"/\").pop() || \"\"), we = new File([\n Ke\n ], ae, {\n type: Ke.type\n });\n W({\n file: we\n }), I(\"idle\");\n } catch {\n ee.error(\"The provided URL is not allowed.\"), I(\"failed\");\n }\n }\n }, [\n g,\n e,\n M,\n W,\n y,\n I,\n l,\n p,\n V\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n n?.file?.value instanceof File && (T(URL.createObjectURL(n.file.value)), k(!1));\n }, [\n n\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n B && j.current;\n }, [\n B\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n w && k(!1);\n }, [\n w\n ]);\n let q = x?.update, J = l?.imageSizes?.length > 0, Y = !!l?.resizeOptions, le = l?.focalPoint === !0, { crop: xe = !0, focalPoint: _e = !0 } = l, Be = _e && (J || Y || le), Me = l.mimeTypes?.join(\", \"), Ue = l?.cacheTags && v?.updatedAt;\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n (async ()=>h && (L(h), await ue()))();\n }, [\n h,\n ue\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n m && W({\n file: m\n });\n }, [\n m,\n W\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n vo\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n message: F,\n showError: R\n }),\n v && v.filename && !A && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(py, {\n collectionSlug: e,\n customUploadActions: o,\n doc: v,\n enableAdjustments: xe || Be,\n handleRemove: q ? U : void 0,\n hasImageSizes: J,\n hideRemoveFile: l.hideRemoveFile,\n imageCacheTag: Ue,\n uploadConfig: l\n }),\n (!l.hideFileInputOnCreate && !v?.filename || A) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vo}__upload`,\n children: [\n !D && !B && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(va, {\n onChange: Q,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vo}__dropzoneContent`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vo}__dropzoneButtons`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n onClick: ()=>{\n O.current && O.current.click();\n },\n size: \"small\",\n children: b(\"upload:selectFile\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n accept: Me,\n \"aria-hidden\": \"true\",\n className: `${vo}__hidden-input`,\n hidden: !0,\n onChange: (he)=>{\n he.target.files && he.target.files.length > 0 && Q(he.target.files);\n },\n ref: O,\n type: \"file\"\n }),\n l?.pasteURL !== !1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${vo}__orText`,\n children: b(\"general:or\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n onClick: ()=>{\n $(!0), f(\"\"), u(null), d(null);\n },\n size: \"small\",\n children: b(\"upload:pasteURL\")\n })\n ]\n }),\n a || null\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n className: `${vo}__dragAndDropText`,\n children: [\n b(\"general:or\"),\n \" \",\n b(\"upload:dragAndDrop\")\n ]\n })\n ]\n })\n }),\n B && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vo}__remote-file-wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n className: `${vo}__remote-file`,\n onChange: (he)=>{\n L(he.target.value);\n },\n ref: j,\n title: M,\n type: \"text\",\n value: M\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${vo}__add-file-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: `${vo}__add-file`,\n onClick: ()=>{\n ue();\n },\n type: \"button\",\n children: b(\"upload:addFile\")\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${vo}__remove`,\n icon: \"x\",\n iconStyle: \"with-border\",\n onClick: ()=>{\n $(!1), f(\"\"), u(null), d(null);\n },\n round: !0,\n tooltip: b(\"general:cancel\")\n })\n ]\n }),\n D && _ && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${vo}__thumbnail-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Fr, {\n collectionSlug: e,\n fileSrc: (0,payload_shared__WEBPACK_IMPORTED_MODULE_20__.isImage)(D.type) ? _ : null\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vo}__file-adjustments`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n className: `${vo}__filename`,\n onChange: z,\n title: P || D.name,\n type: \"text\",\n value: P || D.name\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fy, {\n customActions: o,\n enableAdjustments: xe || Be,\n enablePreviewSizes: J && v?.filename && !A,\n mimeType: D.type\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${vo}__remove`,\n icon: \"x\",\n iconStyle: \"with-border\",\n onClick: U,\n round: !0,\n tooltip: b(\"general:cancel\")\n })\n ]\n })\n ]\n }),\n (D || v?.filename) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(as, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n Header: null,\n slug: Fd,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(uy, {\n fileName: D?.name || v?.filename,\n fileSrc: v?.url || _,\n imageCacheTag: Ue,\n initialCrop: c?.crop ?? void 0,\n initialFocalPoint: {\n x: c?.focalPoint?.x || v?.focalX || 50,\n y: c?.focalPoint?.y || v?.focalY || 50\n },\n onSave: X,\n showCrop: xe,\n showFocalPoint: Be\n })\n })\n }),\n v && J && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n className: `${vo}__previewDrawer`,\n hoverTitle: !0,\n slug: cA,\n title: b(\"upload:sizesFor\", {\n label: v.filename\n }),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hy, {\n doc: v,\n imageCacheTag: Ue,\n uploadConfig: l\n })\n })\n ]\n });\n};\n_s50(by, \"iUkQK5YtZUrHAoTq3p5uSAQBYy4=\");\nfunction XH(t, e) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: t\n }, e);\n}\n_c209 = XH;\nvar qH = \"collection-edit\";\nfunction mA({ resetUploadEdits: t, submitted: e, updateUploadEdits: o, uploadEdits: n }) {\n _s51();\n let { action: r, collectionSlug: s, docPermissions: i, getDocPreferences: l, hasSavePermission: a, initialState: c, isInitializing: u, Upload: d } = Se(), { drawerSlug: f, onSave: m } = zu(), { getFormState: p } = Nt(), { config: { folders: h }, getEntityConfig: g } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), b = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), C = g({\n collectionSlug: s\n }), { reportUpdate: y } = Is(), v = C.slug, [x] = react__WEBPACK_IMPORTED_MODULE_0__.useState(v), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((F)=>{\n y({\n doc: F?.doc || F?.result,\n drawerSlug: f,\n entitySlug: v,\n operation: \"create\",\n updatedAt: F?.result?.updatedAt || new Date().toISOString()\n }), typeof m == \"function\" && m({\n ...F,\n operation: \"create\"\n }), t();\n }, [\n v,\n m,\n y,\n t,\n f\n ]), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ formState: F, submitted: S })=>{\n let R = Tr(b), D = await l(), { state: _ } = await p({\n collectionSlug: v,\n docPermissions: i,\n docPreferences: D,\n formState: F,\n operation: \"create\",\n schemaPath: x,\n signal: R.signal,\n skipValidation: !S\n });\n return b.current = null, _;\n }, [\n v,\n x,\n l,\n p,\n i\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let F = b.current;\n return ()=>{\n _r(F);\n };\n }, []), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(au, {\n operation: \"create\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_s99, {\n action: r,\n className: `${qH}__form`,\n disabled: u || !a,\n initialState: u ? void 0 : c,\n isInitializing: u,\n method: \"POST\",\n onChange: [\n w\n ],\n onSuccess: I,\n submitted: e,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xd, {\n BeforeFields: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: d || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(by, {\n collectionSlug: C.slug,\n customActions: [\n h && C.folders && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Td, {\n buttonProps: {\n buttonStyle: \"pill\",\n size: \"small\"\n },\n folderCollectionSlug: h.slug,\n folderFieldName: h.fieldName\n }, \"move-doc-to-folder\")\n ].filter(Boolean),\n initialState: c,\n resetUploadEdits: t,\n updateUploadEdits: o,\n uploadConfig: C.upload,\n uploadEdits: n\n })\n }),\n docPermissions: i,\n fields: C.fields,\n schemaPathSegments: [\n C.slug\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(KH, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(QH, {})\n ]\n })\n });\n}\n_s51(mA, \"ZdjdOLcolpMUPaX7mlaaAjzDzpU=\");\nfunction QH() {\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { getField: e, getFields: o } = $e(), { getFormDataRef: n } = Wo(), r;\n t[0] !== o || t[1] !== n ? (r = ()=>{\n n.current = o;\n }, t[0] = o, t[1] = n, t[2] = r) : r = t[2];\n let s;\n return t[3] !== e || t[4] !== o || t[5] !== n ? (s = [\n o,\n e,\n n\n ], t[3] = e, t[4] = o, t[5] = n, t[6] = s) : s = t[6], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(r, s), null;\n}\n_c210 = QH;\nfunction KH() {\n _s52();\n let { docConfig: t } = Se(), { activeIndex: e, forms: o, setFormTotalErrorCount: n } = Wo(), r = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>o[e]?.formState?.file?.valid ?? !0, [\n e,\n o\n ]), i = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"KH.useCallback[i]\": (l)=>{\n let a = l;\n s || (a += 1), a !== r.current && (n({\n errorCount: a,\n index: e\n }), r.current = a);\n }\n }[\"KH.useCallback[i]\"], [\n e,\n n,\n s\n ]);\n return t ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qi, {\n fields: t.fields,\n path: [],\n setErrorCount: i\n }) : null;\n}\n_s52(KH, \"3vhwlw7lX/jMXle2y4xL9Jipc1k=\");\n_c211 = KH;\n\n\nvar bi = {};\n(0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.d)(bi, {\n WindowInfo: ()=>hA,\n WindowInfoContext: ()=>sc,\n WindowInfoProvider: ()=>vA,\n useWindowInfo: ()=>dr,\n withWindowInfo: ()=>yA\n});\n\n\nvar sc = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\nvar dr = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(sc);\n\nvar hA = (t)=>{\n let { children: e } = t, o = dr();\n return e ? typeof e == \"function\" ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, e(o)) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, e) : null;\n};\n\nvar sU = (t, e)=>{\n let { payload: { breakpoints: o, animationRef: n } } = e;\n n.current = null;\n let { eventsFired: r } = t, { documentElement: { style: s, clientWidth: i, clientHeight: l } } = document, { innerWidth: a, innerHeight: c } = window, u = `${i / 100}px`, d = `${l / 100}px`, f = o ? Object.keys(o).reduce((p, h)=>Object.assign(Object.assign({}, p), {\n [h]: window.matchMedia(o[h]).matches\n }), {}) : {}, m = {\n width: a,\n height: c,\n \"--vw\": u,\n \"--vh\": d,\n breakpoints: f,\n eventsFired: r + 1\n };\n return s.setProperty(\"--vw\", u), s.setProperty(\"--vh\", d), m;\n}, vA = (t)=>{\n let { breakpoints: e, children: o } = t, n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [r, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(sU, {\n width: void 0,\n height: void 0,\n \"--vw\": \"\",\n \"--vh\": \"\",\n breakpoints: {},\n eventsFired: 0\n }), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n n.current && cancelAnimationFrame(n.current), n.current = requestAnimationFrame(()=>s({\n type: \"UPDATE\",\n payload: {\n breakpoints: e,\n animationRef: n\n }\n }));\n }, [\n e\n ]), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n setTimeout(()=>{\n i();\n }, 500);\n }, [\n i\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(window.addEventListener(\"resize\", i), window.addEventListener(\"orientationchange\", l), ()=>{\n window.removeEventListener(\"resize\", i), window.removeEventListener(\"orientationchange\", l);\n }), [\n i,\n l\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n r.eventsFired === 0 && s({\n type: \"UPDATE\",\n payload: {\n breakpoints: e,\n animationRef: n\n }\n });\n }, [\n e,\n r\n ]), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(sc.Provider, {\n value: Object.assign({}, r)\n }, o && o);\n};\n\nvar yA = (t)=>(o)=>{\n let n = dr();\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(t, Object.assign({}, o, {\n windowInfo: n\n }));\n };\n\n\nvar CA = (t)=>new Promise((e, o)=>{\n let n = new Image;\n n.src = URL.createObjectURL(t), n.onload = ()=>{\n let s, i, l = n.width / n.height;\n l > 1 ? (i = 280, s = 280 / l) : (i = 280 * l, s = 280);\n let a = new OffscreenCanvas(i, s), c = a.getContext(\"2d\"), u = t.type === \"image/png\" ? \"image/png\" : \"image/jpeg\", d = t.type === \"image/png\" ? void 0 : .8;\n c.drawImage(n, 0, 0, i, s), a.convertToBlob({\n type: u,\n ...d && {\n quality: d\n }\n }).then((f)=>{\n URL.revokeObjectURL(n.src);\n let m = new FileReader;\n m.onload = ()=>e(m.result), m.onerror = o, m.readAsDataURL(f);\n }).catch(o);\n }, n.onerror = (r)=>{\n URL.revokeObjectURL(n.src), o(r);\n };\n });\n_c212 = CA;\nvar Bh = \"bulk-upload-drawer--add-more-files\", Dt = \"file-selections\";\nfunction xA() {\n _s53();\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(39), { activeIndex: e, addFiles: o, forms: n, isInitializing: r, removeFile: s, setActiveIndex: i, totalErrorCount: l } = Wo(), { initialFiles: a, initialForms: c, maxFiles: u } = Ho(), { i18n: d, t: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeModal: m, openModal: p } = ie(), [h, g] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), { breakpoints: b } = dr(), C;\n t[0] !== s ? (C = (P)=>{\n s(P);\n }, t[0] = s, t[1] = C) : C = t[1];\n let y = C, v;\n t[2] !== o || t[3] !== m ? (v = (P)=>{\n o(P), m(Bh);\n }, t[2] = o, t[3] = m, t[4] = v) : v = t[4];\n let x = v, I = dU, w = r ? a?.length ?? c?.length : n.length, { collectionSlug: F, selectableCollections: S, setCollectionSlug: R } = Ho(), { getEntityConfig: D } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), _ = h && `${Dt}__showingFiles`, T;\n t[5] !== _ ? (T = [\n Dt,\n _\n ].filter(Boolean), t[5] = _, t[6] = T) : T = t[6];\n let A = T.join(\" \"), k;\n if (t[7] !== e || t[8] !== b.m || t[9] !== F || t[10] !== m || t[11] !== n || t[12] !== D || t[13] !== x || t[14] !== y || t[15] !== d || t[16] !== a || t[17] !== c || t[18] !== r || t[19] !== u || t[20] !== p || t[21] !== S || t[22] !== i || t[23] !== R || t[24] !== h || t[25] !== f || t[26] !== A || t[27] !== l || t[28] !== w) {\n let P;\n t[30] === Symbol.for(\"react.memo_cache_sentinel\") ? (P = ()=>g(uU), t[30] = P) : P = t[30];\n let E;\n t[31] !== m ? (E = ()=>m(Bh), t[31] = m, t[32] = E) : E = t[32];\n let B;\n t[33] !== e || t[34] !== y || t[35] !== d || t[36] !== i || t[37] !== f ? (B = ($, M)=>{\n let { errorCount: L, formID: j, formState: O } = $, V = O?.file?.value || {};\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n `${Dt}__fileRowContainer`,\n M === e && `${Dt}__fileRowContainer--active`,\n L && L > 0 && `${Dt}__fileRowContainer--error`\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n className: `${Dt}__fileRow`,\n onClick: ()=>i(M),\n type: \"button\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(mU, {\n file: V,\n formID: j\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Dt}__fileDetails`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${Dt}__fileName`,\n title: V.name,\n children: V.name || f(\"upload:noFile\")\n })\n }),\n V instanceof File ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${Dt}__fileSize`,\n children: I(V)\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Dt}__remove ${Dt}__remove--underlay`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n }),\n L ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n className: `${Dt}__errorCount`,\n count: L,\n i18n: d\n }) : null\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": f(\"general:remove\"),\n className: `${Dt}__remove ${Dt}__remove--overlay`,\n onClick: ()=>y(M),\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n })\n ]\n }, j);\n }, t[33] = e, t[34] = y, t[35] = d, t[36] = i, t[37] = f, t[38] = B) : B = t[38], k = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: A,\n children: [\n b.m && h ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Dt}__mobileBlur`\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Dt}__header`,\n children: [\n S?.length > 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zr, {\n className: `${Dt}__collectionSelect`,\n isClearable: !1,\n name: \"groupBy\",\n onChange: ($)=>{\n let M = typeof $ == \"object\" && \"value\" in $ ? $?.value : $;\n R(M);\n },\n options: S?.map(($)=>{\n let M = D({\n collectionSlug: $\n });\n return {\n label: M.labels.singular,\n value: M.slug\n };\n }) || [],\n path: \"groupBy\",\n required: !0,\n value: F\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Dt}__headerTopRow`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Dt}__header__text`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: l,\n i18n: d,\n withMessage: !0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"strong\", {\n title: `${w} ${f(w > 1 ? \"upload:filesToUpload\" : \"upload:fileToUpload\")}`,\n children: [\n w,\n \" \",\n f(w > 1 ? \"upload:filesToUpload\" : \"upload:fileToUpload\")\n ]\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Dt}__header__actions`,\n children: [\n typeof u != \"number\" || w < u ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n className: `${Dt}__header__addFile`,\n onClick: ()=>p(Bh),\n size: \"small\",\n children: f(\"upload:addFile\")\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(re, {\n buttonStyle: \"transparent\",\n className: `${Dt}__toggler`,\n onClick: P,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Dt}__toggler__label`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"strong\", {\n title: `${w} ${f(w > 1 ? \"upload:filesToUpload\" : \"upload:fileToUpload\")}`,\n children: [\n w,\n \" \",\n f(w > 1 ? \"upload:filesToUpload\" : \"upload:fileToUpload\")\n ]\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: h ? \"down\" : \"up\"\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n gutter: !1,\n Header: null,\n slug: Bh,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xh, {\n onCancel: E,\n onDrop: x\n })\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Dt}__header__mobileDocActions`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ny, {})\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Dt}__animateWrapper`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wr, {\n height: !b.m || h ? \"auto\" : 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Dt}__filesContainer`,\n children: [\n r && n.length === 0 && (a?.length > 0 || c?.length > 0) ? (a ? Array.from(a) : c).map(cU) : null,\n n.map(B)\n ]\n })\n })\n })\n ]\n }), t[7] = e, t[8] = b.m, t[9] = F, t[10] = m, t[11] = n, t[12] = D, t[13] = x, t[14] = y, t[15] = d, t[16] = a, t[17] = c, t[18] = r, t[19] = u, t[20] = p, t[21] = S, t[22] = i, t[23] = R, t[24] = h, t[25] = f, t[26] = A, t[27] = l, t[28] = w, t[29] = k;\n } else k = t[29];\n return k;\n}\n_s53(xA, \"9ehj/F8RH2an47Q9zUG40o8QKBU=\");\nfunction cU(t, e) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n animationDelay: `calc(${e} * 60ms)`,\n height: \"35px\"\n }, e);\n}\nfunction uU(t) {\n return !t;\n}\nfunction dU(t) {\n let e = t.size, o = e === 0 ? 0 : Math.floor(Math.log(e) / Math.log(1024)), n = o > 1 ? 1 : 0;\n return (e / Math.pow(1024, o)).toFixed(n) + \" \" + [\n \"B\",\n \"kB\",\n \"MB\",\n \"GB\",\n \"TB\"\n ][o];\n}\nfunction mU({ file: t, formID: e }) {\n _s54();\n let [o, n] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [r, s] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!0);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"mU.useEffect\": ()=>{\n let i = !1;\n async function l() {\n s(!0), n(null);\n try {\n if ((0,payload_shared__WEBPACK_IMPORTED_MODULE_20__.isImage)(t.type)) {\n let a = await CA(t);\n i || n(a);\n } else n(null);\n } catch {\n i || n(null);\n } finally{\n i || s(!1);\n }\n }\n return l(), ({\n \"mU.useEffect\": ()=>{\n i = !0;\n }\n })[\"mU.useEffect\"];\n }\n }[\"mU.useEffect\"], [\n t\n ]), r ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n className: `${Dt}__thumbnail-shimmer`,\n disableInlineStyles: !0\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Fr, {\n className: `${Dt}__thumbnail`,\n fileSrc: o\n }, `${e}-${o || \"placeholder\"}`);\n}\n_s54(mU, \"uRpdugCre7Z4le1jknrL1xu59qA=\");\nvar wA = \"bulk-upload--file-manager\";\nfunction SA() {\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(18), { activeIndex: e, collectionSlug: o, docPermissions: n, documentSlots: r, forms: s, hasPublishPermission: i, hasSavePermission: l, hasSubmitted: a, resetUploadEdits: c, updateUploadEdits: u } = Wo(), d = s[e], { getEntityConfig: f } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { user: p } = Ie(), { openModal: h } = ie(), g;\n if (t[0] !== d || t[1] !== e || t[2] !== o || t[3] !== n || t[4] !== r || t[5] !== s.length || t[6] !== f || t[7] !== i || t[8] !== l || t[9] !== a || t[10] !== m || t[11] !== h || t[12] !== c || t[13] !== u || t[14] !== p) {\n let b = f({\n collectionSlug: o\n }), C;\n t[16] !== h ? (C = ()=>h(Cd), t[16] = h, t[17] = C) : C = t[17], g = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: wA,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xA, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${wA}__editView`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(di, {\n onClose: C,\n title: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(b.labels.singular, m)\n }),\n d ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(iu, {\n collectionSlug: o,\n currentEditor: p,\n docPermissions: n,\n hasPublishedDoc: !1,\n hasPublishPermission: i,\n hasSavePermission: l,\n id: null,\n initialData: (0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(d.formState, !0),\n initialState: d.formState,\n isLocked: !1,\n lastUpdateTime: 0,\n mostRecentVersionIsAutosaved: !1,\n unpublishedVersionCount: 0,\n Upload: r.Upload,\n versionCount: 0,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xR, {\n collectionConfig: b\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(mA, {\n resetUploadEdits: c,\n submitted: a,\n updateUploadEdits: u,\n uploadEdits: d?.uploadEdits\n })\n ]\n }, `${e}-${s.length}`) : null\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wR, {})\n ]\n }), t[0] = d, t[1] = e, t[2] = o, t[3] = n, t[4] = r, t[5] = s.length, t[6] = f, t[7] = i, t[8] = l, t[9] = a, t[10] = m, t[11] = h, t[12] = c, t[13] = u, t[14] = p, t[15] = g;\n } else g = t[15];\n return g;\n}\n_c213 = SA;\nvar yU = \"bulk-upload-drawer-slug\";\nfunction CU() {\n _s55();\n let { addFiles: t, forms: e, isInitializing: o } = Wo(), { closeModal: n } = ie(), { collectionSlug: r, drawerSlug: s } = Ho(), { getEntityConfig: i } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), u = i({\n collectionSlug: r\n })?.upload?.mimeTypes, d = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"CU.useCallback[d]\": (f)=>{\n let m = new DataTransfer;\n for (let p of f)(u === void 0 || u.length === 0 || (0,payload_shared__WEBPACK_IMPORTED_MODULE_40__.validateMimeType)(p.type, u)) && m.items.add(p);\n m.files.length === 0 ? ee.error(l(\"error:invalidFileType\")) : t(m.files);\n }\n }[\"CU.useCallback[d]\"], [\n t,\n l,\n u\n ]);\n return r ? !e.length && !o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xh, {\n acceptMimeTypes: u?.join(\", \"),\n onCancel: ()=>n(s),\n onDrop: d\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(SA, {}) : null;\n}\n_s55(CU, \"r19PE7KvAwX8o5tzqZzT4QK+bZk=\");\n_c214 = CU;\nfunction _A() {\n _s56();\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(17), { drawerSlug: e, onCancel: o, setInitialFiles: n, setInitialForms: r, setOnCancel: s, setOnSuccess: i, setSelectableCollections: l, setSuccessfullyUploaded: a, successfullyUploaded: c } = Ho(), { modalState: u } = ie(), d = react__WEBPACK_IMPORTED_MODULE_0__.useRef(u), f;\n t[0] !== e || t[1] !== o || t[2] !== n || t[3] !== r || t[4] !== s || t[5] !== i || t[6] !== l || t[7] !== a || t[8] !== c ? (f = (b)=>{\n let C = d.current[e], y = b[e];\n typeof y > \"u\" && typeof C > \"u\" || (C?.isOpen !== y?.isOpen && (y?.isOpen || (c || typeof o == \"function\" && o(), n(void 0), r(void 0), s(SU), i(xU), l(null), a(!1))), d.current = b);\n }, t[0] = e, t[1] = o, t[2] = n, t[3] = r, t[4] = s, t[5] = i, t[6] = l, t[7] = a, t[8] = c, t[9] = f) : f = t[9];\n let m = Qe(f), p;\n t[10] !== u || t[11] !== m ? (p = ()=>{\n m(u);\n }, t[10] = u, t[11] = m, t[12] = p) : p = t[12];\n let h;\n t[13] !== u ? (h = [\n u\n ], t[13] = u, t[14] = h) : h = t[14], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(p, h);\n let g;\n return t[15] !== e ? (g = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n gutter: !1,\n Header: null,\n slug: e,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(uR, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zl, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(as, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(CU, {})\n })\n })\n })\n }), t[15] = e, t[16] = g) : g = t[16], g;\n}\n_s56(_A, \"B++0OJahFfKvXtGny1ZPksUIpRg=\");\nfunction xU() {\n return wU;\n}\nfunction wU() {\n return null;\n}\nfunction SU() {\n return IU;\n}\n_c215 = SU;\nfunction IU() {\n return null;\n}\n_c216 = IU;\nvar TA = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n collectionSlug: \"\",\n drawerSlug: \"\",\n initialFiles: void 0,\n initialForms: [],\n maxFiles: void 0,\n onCancel: ()=>null,\n onSuccess: ()=>null,\n selectableCollections: null,\n setCollectionSlug: ()=>null,\n setInitialFiles: ()=>null,\n setInitialForms: ()=>null,\n setMaxFiles: ()=>null,\n setOnCancel: ()=>null,\n setOnSuccess: ()=>null,\n setSelectableCollections: ()=>null,\n setSuccessfullyUploaded: ()=>!1,\n successfullyUploaded: !1\n});\nfunction yy(t) {\n _s57();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(17), { children: o, drawerSlugPrefix: n } = t, [r, s] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [i, l] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [a, c] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [u, d] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(void 0), [p, h] = react__WEBPACK_IMPORTED_MODULE_0__.useState(void 0), [g, b] = react__WEBPACK_IMPORTED_MODULE_0__.useState(void 0), [C, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), v = `${n ? `${n}-` : \"\"}${FA()}`, x;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (x = (_)=>{\n c(()=>_);\n }, e[0] = x) : x = e[0];\n let I = x, w;\n e[1] === Symbol.for(\"react.memo_cache_sentinel\") ? (w = (_)=>{\n d(()=>_);\n }, e[1] = w) : w = e[1];\n let F = w, S;\n e[2] !== u ? (S = ()=>{\n typeof u == \"function\" && u();\n }, e[2] = u, e[3] = S) : S = e[3];\n let R;\n e[4] !== a ? (R = (_, T)=>{\n typeof a == \"function\" && a(_, T);\n }, e[4] = a, e[5] = R) : R = e[5];\n let D;\n return e[6] !== o || e[7] !== i || e[8] !== v || e[9] !== f || e[10] !== p || e[11] !== g || e[12] !== r || e[13] !== C || e[14] !== S || e[15] !== R ? (D = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(TA, {\n value: {\n collectionSlug: i,\n drawerSlug: v,\n initialFiles: f,\n initialForms: p,\n maxFiles: g,\n onCancel: S,\n onSuccess: R,\n selectableCollections: r,\n setCollectionSlug: l,\n setInitialFiles: m,\n setInitialForms: h,\n setMaxFiles: b,\n setOnCancel: F,\n setOnSuccess: I,\n setSelectableCollections: s,\n setSuccessfullyUploaded: y,\n successfullyUploaded: C\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n o,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_A, {})\n ]\n })\n }), e[6] = o, e[7] = i, e[8] = v, e[9] = f, e[10] = p, e[11] = g, e[12] = r, e[13] = C, e[14] = S, e[15] = R, e[16] = D) : D = e[16], D;\n}\n_s57(yy, \"kafqiGpGVFQAqo53GBIELtORWFI=\");\nvar Ho = ()=>react__WEBPACK_IMPORTED_MODULE_0__.use(TA);\n_c217 = Ho;\nfunction FA() {\n let t = Vr();\n return `${yU}-${t || 1}`;\n}\n_c218 = FA;\n\n\n\n\nfunction DA(t, e) {\n let o = Array.isArray(e);\n if (typeof t == \"string\" || typeof t == \"number\") return t;\n if (t && typeof t == \"object\" && \"relationTo\" in t && \"value\" in t) {\n let n = t.value;\n for(; n && typeof n == \"object\" && n !== null && \"value\" in n;)n = n.value;\n return n && typeof n == \"object\" && n !== null && \"id\" in n && (n = n.id), o ? {\n relationTo: t.relationTo,\n value: n\n } : n;\n }\n return t && typeof t == \"object\" && \"id\" in t ? t.id : t;\n}\n_c219 = DA;\n\n\n\n\n\n\n\n\nvar As = \"upload-relationship-details\";\nfunction Vh(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(11), { id: o, allowEdit: n, allowRemove: r, alt: s, byteSize: i, className: l, collectionSlug: a, displayPreview: c, filename: u, mimeType: d, onRemove: f, reloadDoc: m, showCollectionSlug: p, src: h, thumbnailSrc: g, updatedAt: b, withMeta: C, x: y, y: v } = t, x = p === void 0 ? !1 : p, I = C === void 0 ? !0 : C, { config: w } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: F } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), S = \"collections\" in w ? w.collections.find((j)=>j.slug === a) : void 0, R = o ?? void 0, D;\n e[0] !== a || e[1] !== R ? (D = {\n id: R,\n collectionSlug: a\n }, e[0] = a, e[1] = R, e[2] = D) : D = e[2];\n let [_, , T] = kt(D), { openDrawer: A } = T, k;\n e[3] !== a || e[4] !== m ? (k = async (j)=>{\n let { doc: O } = j;\n return m(O.id, a);\n }, e[3] = a, e[4] = m, e[5] = k) : k = e[5];\n let P = k, E;\n e[6] !== y || e[7] !== v ? (E = function(O, V) {\n let W = [];\n return V && W.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_39__.formatFilesize)(V)), y && v && W.push(`${y}x${v}`), O && W.push(O), W.join(\" \\u2014 \");\n }, e[6] = y, e[7] = v, e[8] = E) : E = e[8];\n let $ = I ? E(d, i) : \"\", M = c ?? S?.upload?.displayPreview ?? !0, L;\n return e[9] !== l ? (L = [\n As,\n l\n ].filter(Boolean), e[9] = l, e[10] = L) : L = e[10], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: L.join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${As}__imageAndDetails`,\n children: [\n M && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(MF, {\n alt: s,\n className: `${As}__thumbnail`,\n filename: u,\n fileSrc: g,\n imageCacheTag: S?.upload?.cacheTags && b,\n size: \"small\"\n }),\n x && S ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n size: \"small\",\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(S.labels.singular, F)\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${As}__details`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${As}__filename`,\n children: h ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"a\", {\n href: h,\n target: \"_blank\",\n children: u\n }) : u\n }),\n I ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${As}__meta`,\n children: $\n }) : null\n ]\n })\n ]\n }),\n n !== !1 || r !== !1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${As}__actions`,\n children: [\n n !== !1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${As}__edit`,\n icon: \"edit\",\n iconStyle: \"none\",\n onClick: A\n }) : null,\n r !== !1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${As}__remove`,\n icon: \"x\",\n iconStyle: \"none\",\n onClick: ()=>f()\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_, {\n onSave: P\n })\n ]\n }) : null\n ]\n });\n}\n_c220 = Vh;\n\n\nvar RA = \"upload-field-card\";\nfunction Gh({ children: t, className: e, size: o = \"medium\" }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n RA,\n e,\n `${RA}--size-${o}`\n ].filter(Boolean).join(\" \"),\n children: t\n });\n}\n_c221 = Gh;\n\nvar Bd = \"upload upload--has-many\";\nfunction AA(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(29), { className: o, displayPreview: n, fileDocs: r, isSortable: s, onRemove: i, onReorder: l, readonly: a, reloadDoc: c, serverURL: u, showCollectionSlug: d } = t, f = d === void 0 ? !1 : d, m;\n e[0] !== r || e[1] !== l ? (m = (v, x)=>{\n if (v === x) return;\n let I = [\n ...r\n ], [w] = I.splice(v, 1);\n I.splice(x, 0, w), l(I);\n }, e[0] = r, e[1] = l, e[2] = m) : m = e[2];\n let p = m, h;\n e[3] !== r || e[4] !== i ? (h = (v)=>{\n let x = [\n ...r || []\n ];\n x.splice(v, 1), i(x.length === 0 ? [] : x);\n }, e[3] = r, e[4] = i, e[5] = h) : h = e[5];\n let g = h, b;\n e[6] !== o ? (b = [\n Bd,\n o\n ].filter(Boolean), e[6] = o, e[7] = b) : b = e[7];\n let C = b.join(\" \"), y;\n if (e[8] !== n || e[9] !== r || e[10] !== s || e[11] !== p || e[12] !== a || e[13] !== c || e[14] !== g || e[15] !== u || e[16] !== f || e[17] !== C) {\n let v;\n e[19] !== p ? (v = (I)=>{\n let { moveFromIndex: w, moveToIndex: F } = I;\n return p(w, F);\n }, e[19] = p, e[20] = v) : v = e[20];\n let x;\n e[21] !== n || e[22] !== s || e[23] !== a || e[24] !== c || e[25] !== g || e[26] !== u || e[27] !== f ? (x = (I, w)=>{\n let { relationTo: F, value: S } = I, R = String(S.id), D, _;\n if (S.url) try {\n D = new URL(S.url, u).toString();\n } catch {\n D = `${u}${S.url}`;\n }\n if (S.thumbnailURL) try {\n _ = new URL(S.thumbnailURL, u).toString();\n } catch {\n _ = `${u}${S.thumbnailURL}`;\n }\n return (0,payload_shared__WEBPACK_IMPORTED_MODULE_20__.isImage)(S.mimeType) && (_ = (0,payload_shared__WEBPACK_IMPORTED_MODULE_21__.getBestFitFromSizes)({\n sizes: S.sizes,\n thumbnailURL: _,\n url: D,\n width: S.width\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jn, {\n disabled: !s || a,\n id: R,\n children: (T)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n `${Bd}__dragItem`,\n T && s && `${Bd}--has-drag-handle`\n ].filter(Boolean).join(\" \"),\n ref: T.setNodeRef,\n style: {\n transform: T.transform,\n transition: T.transition,\n zIndex: T.isDragging ? 1 : void 0\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Gh, {\n size: \"small\",\n children: [\n T && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Bd}__drag`,\n ...T.attributes,\n ...T.listeners,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(un, {})\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Vh, {\n allowEdit: !a,\n allowRemove: !a,\n alt: S?.alt || S?.filename,\n byteSize: S.filesize,\n collectionSlug: F,\n displayPreview: n,\n filename: S.filename,\n id: R,\n mimeType: S?.mimeType,\n onRemove: ()=>g(w),\n reloadDoc: c,\n showCollectionSlug: f,\n src: D,\n thumbnailSrc: _,\n updatedAt: S.updatedAt,\n withMeta: !1,\n x: S?.width,\n y: S?.height\n })\n ]\n })\n })\n }, R);\n }, e[21] = n, e[22] = s, e[23] = a, e[24] = c, e[25] = g, e[26] = u, e[27] = f, e[28] = x) : x = e[28], y = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: C,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Or, {\n className: `${Bd}__draggable-rows`,\n ids: r?.map(NU),\n onDragEnd: v,\n children: r.map(x)\n })\n }), e[8] = n, e[9] = r, e[10] = s, e[11] = p, e[12] = a, e[13] = c, e[14] = g, e[15] = u, e[16] = f, e[17] = C, e[18] = y;\n } else y = e[18];\n return y;\n}\n_c222 = AA;\nfunction NU(t) {\n let { value: e } = t;\n return String(e.id);\n}\n_c223 = NU;\n\n\n\nvar jU = \"upload upload--has-one\";\nfunction EA(t) {\n let { className: e, displayPreview: o, fileDoc: n, onRemove: r, readonly: s, reloadDoc: i, serverURL: l, showCollectionSlug: a = !1 } = t, { relationTo: c, value: u } = n, d = String(u?.id), f, m;\n if (u.url) try {\n f = new URL(u.url, l).toString();\n } catch {\n f = `${l}${u.url}`;\n }\n if (u.thumbnailURL) try {\n m = new URL(u.thumbnailURL, l).toString();\n } catch {\n m = `${l}${u.thumbnailURL}`;\n }\n return (0,payload_shared__WEBPACK_IMPORTED_MODULE_20__.isImage)(u.mimeType) && (m = (0,payload_shared__WEBPACK_IMPORTED_MODULE_21__.getBestFitFromSizes)({\n sizes: u.sizes,\n thumbnailURL: m,\n url: f,\n width: u.width\n })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gh, {\n className: [\n jU,\n e\n ].filter(Boolean).join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Vh, {\n allowEdit: !s,\n allowRemove: !s,\n alt: u?.alt || u?.filename,\n byteSize: u.filesize,\n collectionSlug: c,\n displayPreview: o,\n filename: u.filename,\n id: d,\n mimeType: u?.mimeType,\n onRemove: r,\n reloadDoc: i,\n showCollectionSlug: a,\n src: f,\n thumbnailSrc: m,\n updatedAt: u.updatedAt,\n x: u?.width,\n y: u?.height\n })\n });\n}\n_c224 = EA;\nvar Xn = \"upload\";\nfunction zh(t) {\n _s58();\n let { AfterInput: e, allowCreate: o, api: n, BeforeInput: r, className: s, Description: i, description: l, displayPreview: a, Error: c, filterOptions: u, hasMany: d, isSortable: f, Label: m, label: p, localized: h, maxRows: g, onChange: b, path: C, readOnly: y, relationTo: v, required: x, serverURL: I, showError: w, style: F, value: S } = t, [R, D] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [_] = react__WEBPACK_IMPORTED_MODULE_0__.useState(Array.isArray(v) ? v[0] : v), { openModal: T } = ie(), { drawerSlug: A, setCollectionSlug: k, setInitialFiles: P, setMaxFiles: E, setOnSuccess: B, setSelectableCollections: $ } = Ho(), { permissions: M } = Ie(), { code: L } = ye(), { i18n: j, t: O } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), V = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>Array.isArray(v) ? v.filter((G)=>M?.collections && M.collections?.[G]?.create) : [], [\n v,\n M\n ]), W = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let G = Array.isArray(v);\n if (!S) return u;\n let se = {}, K = Array.isArray(S) ? S : [\n S\n ];\n for (let ne of K)if (G && typeof ne == \"object\" && \"relationTo\" in ne) se[ne.relationTo] || (se[ne.relationTo] = []), se[ne.relationTo].push(ne.value);\n else if (!G) {\n let te = v;\n se[te] || (se[te] = []);\n let ge = typeof ne == \"object\" && \"value\" in ne ? ne.value : ne;\n (typeof ge == \"string\" || typeof ge == \"number\") && se[te].push(ge);\n }\n let fe = {\n ...u\n };\n return (G ? v : [\n v\n ]).forEach((ne)=>{\n let te = se[ne] || [];\n fe[ne] = {\n ...u?.[ne] || {},\n id: {\n ...u?.[ne]?.id || {},\n not_in: (u?.[ne]?.id?.not_in || []).concat(te)\n }\n };\n }), fe;\n }, [\n S,\n u,\n v\n ]), [Z, , { closeDrawer: z, openDrawer: Q }] = ua({\n collectionSlugs: typeof v == \"string\" ? [\n v\n ] : v,\n filterOptions: W\n }), [U, , { closeDrawer: X, openDrawer: ue }] = kt({\n collectionSlug: _\n }), q = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), J = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>o ? !!(typeof _ == \"string\" && M?.collections && M.collections?.[_]?.create) : !1, [\n _,\n M,\n o\n ]), Y = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[Y]\": (G)=>{\n typeof b == \"function\" && b(G);\n }\n }[\"zh.useCallback[Y]\"], [\n b\n ]), le = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[le]\": async (G)=>{\n if (!G?.length) return [];\n let se = {};\n G.forEach({\n \"zh.useCallback[le]\": ({ relationTo: te, value: ge })=>{\n se[te] || (se[te] = []);\n let oe = ge;\n ge && typeof ge == \"object\" && \"value\" in ge && (oe = ge.value), se[te].push(oe);\n }\n }[\"zh.useCallback[le]\"]);\n let K = Object.entries(se).map({\n \"zh.useCallback[le].K\": async ([te, ge])=>{\n let oe = {\n depth: 0,\n draft: !0,\n limit: ge.length,\n locale: L,\n where: {\n and: [\n {\n id: {\n in: ge\n }\n }\n ]\n }\n }, pe = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: n,\n path: `/${te}`\n }), {\n body: qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(oe),\n credentials: \"include\",\n headers: {\n \"Accept-Language\": j.language,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Payload-HTTP-Method-Override\": \"GET\"\n },\n method: \"POST\"\n }), be = [];\n pe.ok && (be = (await pe.json()).docs);\n let ot = be.reduce({\n \"zh.useCallback[le].K.ot\": (je, Je)=>(je[Je.id] = Je, je)\n }[\"zh.useCallback[le].K.ot\"], {});\n return {\n collection: te,\n docsById: ot\n };\n }\n }[\"zh.useCallback[le].K\"]), fe = await Promise.all(K), me = {};\n return fe.forEach({\n \"zh.useCallback[le]\": ({ collection: te, docsById: ge })=>{\n me[te] = ge;\n }\n }[\"zh.useCallback[le]\"]), G.map({\n \"zh.useCallback[le]\": ({ relationTo: te, value: ge })=>{\n let oe = me[te]?.[ge] || {\n id: ge,\n filename: `${O(\"general:untitled\")} - ID: ${ge}`,\n isPlaceholder: !0\n };\n return {\n relationTo: te,\n value: oe\n };\n }\n }[\"zh.useCallback[le]\"]);\n }\n }[\"zh.useCallback[le]\"], [\n n,\n L,\n j.language,\n O\n ]), xe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((G)=>DA(G, v), [\n v\n ]), _e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((G)=>{\n let se = Array.isArray(v);\n if (d) {\n let K = G.map((ne)=>se ? {\n relationTo: ne.collectionSlug,\n value: ne.doc.id\n } : ne.doc.id), me = [\n ...Array.isArray(S) ? S.map(xe) : [],\n ...K\n ];\n Y(me), D((ne)=>[\n ...ne || [],\n ...G.map((te)=>({\n relationTo: te.collectionSlug,\n value: te.doc\n }))\n ]);\n } else {\n let K = G[0], fe = se ? {\n relationTo: K.collectionSlug,\n value: K.doc.id\n } : K.doc.id;\n Y(fe), D([\n {\n relationTo: K.collectionSlug,\n value: K.doc\n }\n ]);\n }\n }, [\n S,\n Y,\n d,\n v,\n xe\n ]), Be = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[Be]\": (G)=>{\n let se = G;\n if (!d && G && G.length > 1) {\n let fe = new DataTransfer;\n fe.items.add(G[0]), se = fe.files;\n }\n se && P(se);\n let K = Array.isArray(v) ? _ : v;\n k(K), Array.isArray(V) && $(V), typeof g == \"number\" && E(g), T(A);\n }\n }[\"zh.useCallback[Be]\"], [\n d,\n v,\n _,\n k,\n V,\n g,\n T,\n A,\n P,\n $,\n E\n ]), Me = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[Me]\": async (G)=>{\n let se = Array.isArray(v), K = [];\n for (let [ge, oe] of G)oe && K.push(ge);\n let fe = K.map({\n \"zh.useCallback[Me].fe\": (ge)=>({\n relationTo: _,\n value: ge\n })\n }[\"zh.useCallback[Me].fe\"]), me = await le(fe);\n me && D({\n \"zh.useCallback[Me]\": (ge)=>[\n ...ge || [],\n ...me\n ]\n }[\"zh.useCallback[Me]\"]);\n let ne = K.map({\n \"zh.useCallback[Me].ne\": (ge)=>se ? {\n relationTo: _,\n value: ge\n } : ge\n }[\"zh.useCallback[Me].ne\"]), te = Array.isArray(S) ? S.map(xe) : [];\n Y([\n ...te,\n ...ne\n ]), z();\n }\n }[\"zh.useCallback[Me]\"], [\n _,\n z,\n Y,\n le,\n S,\n v,\n xe\n ]), Ue = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[Ue]\": (G)=>{\n let se = Array.isArray(v);\n if (G.doc) {\n D({\n \"zh.useCallback[Ue]\": (fe)=>[\n ...fe || [],\n {\n relationTo: _,\n value: G.doc\n }\n ]\n }[\"zh.useCallback[Ue]\"]);\n let K = se ? {\n relationTo: _,\n value: G.doc.id\n } : G.doc.id;\n Y(K);\n }\n X();\n }\n }[\"zh.useCallback[Ue]\"], [\n X,\n _,\n Y,\n v\n ]), he = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ collectionSlug: G, doc: se })=>{\n let K = Array.isArray(v), me = (await le([\n {\n relationTo: G,\n value: se.id\n }\n ]))?.[0] || null;\n if (D((ne)=>me ? d ? [\n ...ne || [],\n me\n ] : [\n me\n ] : ne), d) {\n let ne = K ? {\n relationTo: G,\n value: se.id\n } : se.id, ge = [\n ...Array.isArray(S) ? S.map(xe) : [],\n ne\n ];\n Y(ge);\n } else {\n let ne = K ? {\n relationTo: G,\n value: se.id\n } : se.id;\n Y(ne);\n }\n z();\n }, [\n z,\n d,\n le,\n Y,\n S,\n v,\n xe\n ]), Oe = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[Oe]\": async (G, se)=>{\n let K = await le([\n {\n relationTo: se,\n value: G\n }\n ]);\n if (K[0]) {\n let fe = [];\n D({\n \"zh.useCallback[Oe]\": (me)=>{\n let ne = me?.findIndex({\n \"zh.useCallback[Oe]\": (te)=>(te.value?.id === K[0].value.id || te.value?.isPlaceholder) && te.relationTo === se\n }[\"zh.useCallback[Oe]\"]);\n if (ne > -1) {\n let te = [\n ...me\n ];\n return te[ne] = K[0], fe = te, te;\n }\n return me;\n }\n }[\"zh.useCallback[Oe]\"]), fe.length && d && Y(fe.map({\n \"zh.useCallback[Oe]\": (me)=>me.value?.id\n }[\"zh.useCallback[Oe]\"]));\n }\n }\n }[\"zh.useCallback[Oe]\"], [\n le,\n Y,\n d\n ]), Ke = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[Ke]\": (G)=>{\n let se = Array.isArray(v), K = G.map({\n \"zh.useCallback[Ke].K\": ({ relationTo: fe, value: me })=>se ? {\n relationTo: fe,\n value: me.id\n } : me.id\n }[\"zh.useCallback[Ke].K\"]);\n Y(K), D(G);\n }\n }[\"zh.useCallback[Ke]\"], [\n Y,\n v\n ]), ae = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zh.useCallback[ae]\": (G)=>{\n let se = Array.isArray(v);\n if (!G || G.length === 0) {\n Y(d ? [] : null), D(d ? [] : null);\n return;\n }\n let K = G.map({\n \"zh.useCallback[ae].K\": ({ relationTo: fe, value: me })=>se ? {\n relationTo: fe,\n value: me.id\n } : me.id\n }[\"zh.useCallback[ae].K\"]);\n Y(d ? K : K[0]), D(G);\n }\n }[\"zh.useCallback[ae]\"], [\n Y,\n d,\n v\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n async function G() {\n if (S) {\n let K = [];\n if (Array.isArray(v) && (typeof S == \"object\" && \"relationTo\" in S || Array.isArray(S) && S.length > 0 && typeof S[0] == \"object\" && \"relationTo\" in S[0]) ? K = (Array.isArray(S) ? S : [\n S\n ]).filter((me)=>typeof me == \"object\" && \"relationTo\" in me).map((me)=>{\n let ne = me.value;\n for(; ne && typeof ne == \"object\" && ne !== null && \"value\" in ne;)ne = ne.value;\n return {\n relationTo: me.relationTo,\n value: ne\n };\n }) : Array.isArray(v) || (K = (Array.isArray(S) ? S : [\n S\n ]).map((me)=>{\n let ne = me;\n for(; ne && typeof ne == \"object\" && ne !== null && \"value\" in ne;)ne = ne.value;\n return {\n relationTo: v,\n value: ne\n };\n })), K.length > 0) {\n let fe = await le(K);\n fe && (D(fe), q.current = S);\n }\n } else D([]), q.current = null;\n }\n q.current !== S && G();\n }, [\n le,\n S,\n v\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n B(_e);\n }, [\n S,\n C,\n _e,\n B\n ]);\n let we = !S || d && Array.isArray(S) && (typeof g != \"number\" || S.length < g) || !d && R?.[0] && typeof R[0].value > \"u\";\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n Xn,\n s,\n w && \"error\",\n y && \"read-only\"\n ].filter(Boolean).join(\" \"),\n id: `field-${C?.replace(/\\./g, \"__\")}`,\n style: F,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: m,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: p,\n localized: h,\n path: C,\n required: x\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xn}__wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: c,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: C,\n showError: w\n })\n })\n }),\n r,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Xn}__dropzoneAndUpload`,\n children: [\n d && Array.isArray(S) && S.length > 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: R && R?.length > 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(AA, {\n displayPreview: a,\n fileDocs: R,\n isSortable: f && !y,\n onRemove: ae,\n onReorder: Ke,\n readonly: y,\n reloadDoc: Oe,\n serverURL: I,\n showCollectionSlug: Array.isArray(v)\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xn}__loadingRows`,\n children: S.map((G)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"40px\"\n }, typeof G == \"object\" ? G.value : G))\n })\n }) : null,\n !d && S ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: R && R?.length > 0 && R[0].value ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(EA, {\n displayPreview: a,\n fileDoc: R[0],\n onRemove: ae,\n readonly: y,\n reloadDoc: Oe,\n serverURL: I,\n showCollectionSlug: Array.isArray(v)\n }) : R && S && !R?.[0]?.value ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n O(\"general:untitled\"),\n \" - ID: \",\n S\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"62px\"\n })\n }) : null,\n we ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(va, {\n disabled: y || !J,\n multipleFiles: d,\n onChange: Be,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Xn}__dropzoneContent`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Xn}__dropzoneContent__buttons`,\n children: [\n J && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n className: `${Xn}__createNewToggler`,\n disabled: y || !J,\n onClick: ()=>{\n y || (d ? Be() : ue());\n },\n size: \"small\",\n children: O(\"general:createNew\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Xn}__dropzoneContent__orText`,\n children: O(\"general:or\")\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n className: `${Xn}__listToggler`,\n disabled: y,\n onClick: Q,\n size: \"small\",\n children: O(\"fields:chooseFromExisting\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(U, {\n onSave: Ue\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Z, {\n allowCreate: J,\n enableRowSelections: d,\n onBulkSelect: Me,\n onSelect: he\n })\n ]\n }),\n J && !y && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n className: `${Xn}__dragAndDropText`,\n children: [\n O(\"general:or\"),\n \" \",\n O(\"upload:dragAndDrop\")\n ]\n })\n ]\n })\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: !y && !R && (!S || typeof g != \"number\" || Array.isArray(S) && S.length < g) ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"40px\"\n }) : null\n })\n ]\n }),\n e,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: i,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: l,\n path: C\n })\n })\n ]\n });\n}\n_s58(zh, \"bYHYOeUDbdhVEegShbymniqThAE=\");\nfunction MU(t) {\n _s59();\n let { field: e, field: { admin: { allowCreate: o, className: n, description: r, isSortable: s } = {}, hasMany: i, label: l, localized: a, maxRows: c, relationTo: u, required: d }, path: f, readOnly: m, validate: p } = t, { config: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), g = e.displayPreview, b = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"MU.useCallback[b]\": (P, E)=>{\n if (typeof p == \"function\") return p(P, {\n ...E,\n required: d\n });\n }\n }[\"MU.useCallback[b]\"], [\n p,\n d\n ]), { customComponents: { AfterInput: C, BeforeInput: y, Description: v, Error: x, Label: I } = {}, disabled: w, filterOptions: F, path: S, setValue: R, showError: D, value: _ } = Te({\n potentiallyStalePath: f,\n validate: b\n }), T = Array.isArray(u), A = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"MU.useMemo[A]\": ()=>i === !0 && Array.isArray(_) ? _.map({\n \"MU.useMemo[A]\": (P)=>T ? P : {\n relationTo: Array.isArray(u) ? u[0] : u,\n value: P\n }\n }[\"MU.useMemo[A]\"]) : _\n }[\"MU.useMemo[A]\"], [\n i,\n _,\n T,\n u\n ]), k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yy, {\n drawerSlugPrefix: f,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zh, {\n AfterInput: C,\n allowCreate: o !== !1,\n api: h.routes.api,\n BeforeInput: y,\n className: n,\n Description: v,\n description: r,\n displayPreview: g,\n Error: x,\n filterOptions: F,\n hasMany: i,\n isSortable: s,\n label: l,\n Label: I,\n localized: a,\n maxRows: c,\n onChange: R,\n path: S,\n readOnly: m || w,\n relationTo: u,\n required: d,\n serverURL: h.serverURL,\n showError: D,\n style: k,\n value: A\n })\n });\n}\n_s59(MU, \"nVg7WL4o4iU2Xb0Ehiujx4PdoNg=\");\n_c225 = MU;\nvar Od = We(MU);\n_c226 = Od;\nfunction ql(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { clientFieldConfig: o, forceRender: n, indexPath: r, parentPath: s, parentSchemaPath: i, path: l, permissions: a, readOnly: c, schemaPath: u } = t, d;\n e[0] !== l ? (d = (p)=>{\n let [h] = p;\n return h && h?.[l]?.customComponents?.Field;\n }, e[0] = l, e[1] = d) : d = e[1];\n let f = Ot(d), m;\n if (e[2] !== f || e[3] !== o || e[4] !== n || e[5] !== r || e[6] !== s || e[7] !== i || e[8] !== l || e[9] !== a || e[10] !== c || e[11] !== u) {\n m = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let p = {\n forceRender: n,\n permissions: a,\n readOnly: c,\n schemaPath: u\n };\n if (o.admin?.hidden) {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Bu, {\n ...p,\n path: l\n });\n break e;\n }\n if (f !== void 0) {\n m = f || null;\n break e;\n }\n let h = {\n ...p,\n indexPath: r,\n parentPath: s,\n parentSchemaPath: i\n };\n switch(o.type){\n case \"array\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Vd, {\n ...h,\n field: o,\n path: l\n });\n break e;\n }\n case \"blocks\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(gu, {\n ...h,\n field: o,\n path: l\n });\n break e;\n }\n case \"checkbox\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zr, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"code\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vu, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"collapsible\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Cu, {\n ...h,\n field: o,\n path: l\n });\n break e;\n }\n case \"date\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ju, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"email\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ia, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"group\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($u, {\n ...h,\n field: o,\n path: l\n });\n break e;\n }\n case \"join\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zu, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"json\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ju, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"number\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(qu, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"point\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qu, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"radio\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(td, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"relationship\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ad, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"richText\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ld, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"row\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(cd, {\n ...h,\n field: o\n });\n break e;\n }\n case \"select\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ud, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"tabs\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pd, {\n ...h,\n field: o,\n path: l\n });\n break e;\n }\n case \"text\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ba, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"textarea\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(gd, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n case \"ui\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(bd, {});\n break e;\n }\n case \"upload\":\n {\n m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Od, {\n ...p,\n field: o,\n path: l\n });\n break e;\n }\n }\n }\n e[2] = f, e[3] = o, e[4] = n, e[5] = r, e[6] = s, e[7] = i, e[8] = l, e[9] = a, e[10] = c, e[11] = u, e[12] = m;\n } else m = e[12];\n if (m !== Symbol.for(\"react.early_return_sentinel\")) return m;\n}\nvar Sy = \"render-fields\", No = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(22), { className: o, fields: n, forceRender: r, margins: s, parentIndexPath: i, parentPath: l, parentSchemaPath: a, permissions: c, readOnly: u } = t, d = Cr();\n if (n && n.length > 0) {\n let f = s && `${Sy}--margins-${s}`, m = s === !1 && `${Sy}--margins-none`, p;\n e[0] !== o || e[1] !== f || e[2] !== m ? (p = [\n Sy,\n o,\n f,\n m\n ].filter(Boolean), e[0] = o, e[1] = f, e[2] = m, e[3] = p) : p = e[3];\n let h = p.join(\" \"), g;\n if (e[4] !== n || e[5] !== r || e[6] !== d || e[7] !== i || e[8] !== l || e[9] !== a || e[10] !== c || e[11] !== u || e[12] !== h) {\n let b;\n e[14] !== r || e[15] !== d || e[16] !== i || e[17] !== l || e[18] !== a || e[19] !== c || e[20] !== u ? (b = (C, y)=>{\n if (!C || (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsHiddenOrDisabled)(C)) return null;\n let { operation: v, permissions: x, read: I } = (0,payload_shared__WEBPACK_IMPORTED_MODULE_34__.getFieldPermissions)({\n field: C,\n operation: d,\n parentName: l?.includes(\".\") ? l.split(\".\")[l.split(\".\").length - 1] : l,\n permissions: c\n });\n if (\"name\" in C && !I) return null;\n let w = u || C?.admin?.readOnly;\n w && C.admin?.readOnly === !1 && (w = !1), \"name\" in C && !v && (w = !0);\n let { indexPath: F, path: S, schemaPath: R } = (0,payload_shared__WEBPACK_IMPORTED_MODULE_32__.getFieldPaths)({\n field: C,\n index: y,\n parentIndexPath: i,\n parentPath: l,\n parentSchemaPath: a\n });\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hs, {\n value: S,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ql, {\n clientFieldConfig: C,\n forceRender: r,\n indexPath: F,\n parentPath: l,\n parentSchemaPath: a,\n path: S,\n permissions: x,\n readOnly: w,\n schemaPath: R\n })\n }, `${S}-${y}`);\n }, e[14] = r, e[15] = d, e[16] = i, e[17] = l, e[18] = a, e[19] = c, e[20] = u, e[21] = b) : b = e[21], g = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(TS, {\n className: h,\n forceRender: r,\n children: n.map(b)\n }), e[4] = n, e[5] = r, e[6] = d, e[7] = i, e[8] = l, e[9] = a, e[10] = c, e[11] = u, e[12] = h, e[13] = g;\n } else g = e[13];\n return g;\n }\n return null;\n};\nvar Gd = \"array-field\", $A = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(41), { addRow: o, attributes: n, copyRow: r, CustomRowLabel: s, duplicateRow: i, errorCount: l, fields: a, forceRender: c, hasMaxRows: u, isDragging: d, isLoading: f, isSortable: m, labels: p, listeners: h, moveRow: g, parentPath: b, pasteRow: C, path: y, permissions: v, readOnly: x, removeRow: I, row: w, rowCount: F, rowIndex: S, schemaPath: R, scrollIdPrefix: D, setCollapse: _, setNodeRef: T, transform: A, transition: k } = t, P = c === void 0 ? !1 : c, E = tp(f, 500), { i18n: B } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), $ = fo(), M = `${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(p.singular, B)} ${String(S + 1).padStart(2, \"0\")}`, L = l > 0 && $, j = L ? `${Gd}__row--has-errors` : `${Gd}__row--no-errors`, O;\n e[0] !== j ? (O = [\n `${Gd}__row`,\n j\n ].filter(Boolean), e[0] = j, e[1] = O) : O = e[1];\n let V = O.join(\" \"), W = `${b.split(\".\").join(\"-\")}-row-${S}`, Z = d ? 1 : void 0, z;\n if (e[2] !== s || e[3] !== o || e[4] !== n || e[5] !== V || e[6] !== r || e[7] !== i || e[8] !== l || e[9] !== M || e[10] !== L || e[11] !== a || e[12] !== P || e[13] !== u || e[14] !== B || e[15] !== E || e[16] !== m || e[17] !== h || e[18] !== g || e[19] !== b || e[20] !== C || e[21] !== y || e[22] !== v || e[23] !== x || e[24] !== I || e[25] !== w.collapsed || e[26] !== w.id || e[27] !== F || e[28] !== S || e[29] !== R || e[30] !== D || e[31] !== _ || e[32] !== T || e[33] !== W || e[34] !== Z || e[35] !== A || e[36] !== k) {\n let Q;\n e[38] !== w.id || e[39] !== _ ? (Q = (U)=>_(w.id, U), e[38] = w.id, e[39] = _, e[40] = Q) : Q = e[40], z = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n id: W,\n ref: T,\n style: {\n transform: A,\n transition: k,\n zIndex: Z\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zi, {\n actions: x ? void 0 : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Kf, {\n addRow: o,\n copyRow: r,\n duplicateRow: i,\n hasMaxRows: u,\n index: S,\n isSortable: m,\n moveRow: g,\n pasteRow: C,\n removeRow: I,\n rowCount: F\n }),\n className: V,\n collapsibleStyle: L ? \"error\" : \"default\",\n dragHandleProps: m ? {\n id: w.id,\n attributes: n,\n listeners: h\n } : void 0,\n header: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Gd}__row-header`,\n id: `${D}-row-${S}`,\n children: [\n E ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n height: \"1rem\",\n width: \"8rem\"\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(is, {\n CustomComponent: s,\n label: M,\n path: y,\n rowNumber: S\n }),\n L && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: l,\n i18n: B,\n withMessage: !0\n })\n ]\n }),\n isCollapsed: w.collapsed,\n onToggle: Q,\n children: E ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(No, {\n className: `${Gd}__fields`,\n fields: a,\n forceRender: P,\n margins: \"small\",\n parentIndexPath: \"\",\n parentPath: y,\n parentSchemaPath: R,\n permissions: v === !0 ? v : v?.fields,\n readOnly: x\n })\n })\n }, `${b}-row-${w.id}`), e[2] = s, e[3] = o, e[4] = n, e[5] = V, e[6] = r, e[7] = i, e[8] = l, e[9] = M, e[10] = L, e[11] = a, e[12] = P, e[13] = u, e[14] = B, e[15] = E, e[16] = m, e[17] = h, e[18] = g, e[19] = b, e[20] = C, e[21] = y, e[22] = v, e[23] = x, e[24] = I, e[25] = w.collapsed, e[26] = w.id, e[27] = F, e[28] = S, e[29] = R, e[30] = D, e[31] = _, e[32] = T, e[33] = W, e[34] = Z, e[35] = A, e[36] = k, e[37] = z;\n } else z = e[37];\n return z;\n};\nvar Ar = \"array-field\", qU = (t)=>{\n let { field: e, field: { name: o, type: n, admin: { className: r, description: s, isSortable: i = !0 } = {}, fields: l, label: a, localized: c, maxRows: u, minRows: d, required: f }, forceRender: m = !1, path: p, permissions: h, readOnly: g, schemaPath: b, validate: C } = t, y = b ?? o, v = d ?? (f ? 1 : 0), { setDocFieldPreferences: x } = Se(), { addFieldRow: I, dispatchFields: w, getFields: F, moveFieldRow: S, removeFieldRow: R, replaceState: D, setModified: _ } = $e(), T = fo(), { code: A } = ye(), { i18n: k, t: P } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: { localization: E } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), B = (()=>{\n if (E && E.fallback) {\n let te = E.defaultLocale;\n return A === te;\n }\n return !0;\n })(), M = ((te)=>\"labels\" in te && te?.labels ? te.labels : \"labels\" in te.field && te.field.labels ? {\n plural: te.field.labels?.plural,\n singular: te.field.labels?.singular\n } : \"label\" in te.field && te.field.label ? {\n plural: void 0,\n singular: te.field.label\n } : {\n plural: P(\"general:rows\"),\n singular: P(\"general:row\")\n })(t), L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te, ge)=>{\n if (!B && te === null) return !0;\n if (typeof C == \"function\") return C(te, {\n ...ge,\n maxRows: u,\n minRows: v,\n required: f\n });\n }, [\n u,\n v,\n f,\n C,\n B\n ]), { customComponents: { AfterInput: j, BeforeInput: O, Description: V, Error: W, Label: Z } = {}, disabled: z, errorPaths: Q, path: U, rows: X = [], showError: ue, valid: q, value: J } = Te({\n hasRows: !0,\n potentiallyStalePath: p,\n validate: L\n }), Y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), le = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>`scroll-${Y}`, [\n Y\n ]), xe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te)=>{\n I({\n path: U,\n rowIndex: te,\n schemaPath: y\n }), setTimeout(()=>{\n vl(`${le}-row-${te}`);\n }, 0);\n }, [\n I,\n U,\n y,\n le\n ]), _e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te)=>{\n w({\n type: \"DUPLICATE_ROW\",\n path: U,\n rowIndex: te\n }), _(!0), setTimeout(()=>{\n vl(`${le}-row-${te}`);\n }, 0);\n }, [\n w,\n U,\n le,\n _\n ]), Be = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te)=>{\n R({\n path: U,\n rowIndex: te\n });\n }, [\n R,\n U\n ]), Me = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te, ge)=>{\n S({\n moveFromIndex: te,\n moveToIndex: ge,\n path: U\n });\n }, [\n U,\n S\n ]), Ue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te)=>{\n let { collapsedIDs: ge, updatedRows: oe } = zf({\n collapsed: te,\n rows: X\n });\n x(U, {\n collapsed: ge\n }), w({\n type: \"SET_ALL_ROWS_COLLAPSED\",\n path: U,\n updatedRows: oe\n });\n }, [\n w,\n U,\n X,\n x\n ]), he = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te, ge)=>{\n let { collapsedIDs: oe, updatedRows: pe } = Gf({\n collapsed: ge,\n rowID: te,\n rows: X\n });\n w({\n type: \"SET_ROW_COLLAPSED\",\n path: U,\n updatedRows: pe\n }), x(U, {\n collapsed: oe\n });\n }, [\n w,\n U,\n X,\n x\n ]), Oe = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te)=>{\n let ge = {\n ...F()\n }, oe = tl({\n type: n,\n fields: l,\n getDataToCopy: ()=>sl({\n formState: ge,\n path: U,\n rowIndex: te\n }),\n path: U,\n rowIndex: te,\n t: P\n });\n typeof oe == \"string\" ? ee.error(oe) : ee.success(P(\"general:copied\"));\n }, [\n l,\n F,\n U,\n P,\n n\n ]), Ke = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te)=>{\n let ge = {\n ...F()\n }, pe = ol({\n onPaste: (be)=>{\n let ot = il({\n dataFromClipboard: be,\n formState: ge,\n path: U,\n rowIndex: te\n });\n D(ot), _(!0);\n },\n path: U,\n schemaFields: l,\n t: P\n });\n typeof pe == \"string\" && ee.error(pe);\n }, [\n l,\n F,\n U,\n D,\n _,\n P\n ]), ae = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((te)=>{\n let ge = {\n ...F()\n }, oe = il({\n dataFromClipboard: te,\n formState: ge,\n path: U\n });\n D(oe), _(!0);\n }, [\n F,\n U,\n D,\n _\n ]), we = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>sl({\n formState: {\n ...F()\n },\n path: U\n }), [\n F,\n U\n ]), G = u && X.length >= u, se = Q.length, K = T && Q.length > 0, fe = (g || z) && X.length === 0, me = X.length && X.length < v || f && X.length === 0, ne = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(e), [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Pe,\n Ar,\n r,\n K ? `${Ar}--has-error` : `${Ar}--has-no-error`\n ].filter(Boolean).join(\" \"),\n id: `field-${U.replace(/\\./g, \"__\")}`,\n style: ne,\n children: [\n ue && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: W,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: U,\n showError: ue\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"header\", {\n className: `${Ar}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ar}__header-wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ar}__header-content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n className: `${Ar}__title`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: Z,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"span\",\n label: a,\n localized: c,\n path: U,\n required: f\n })\n })\n }),\n K && se > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(So, {\n count: se,\n i18n: k,\n withMessage: !0\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"ul\", {\n className: `${Ar}__header-actions`,\n children: [\n X?.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: `${Ar}__header-action`,\n onClick: ()=>Ue(!0),\n type: \"button\",\n children: P(\"fields:collapseAll\")\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: `${Ar}__header-action`,\n onClick: ()=>Ue(!1),\n type: \"button\",\n children: P(\"fields:showAll\")\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pf, {\n allowCopy: X?.length > 0,\n allowPaste: !g,\n className: `${Ar}__header-action`,\n disabled: z,\n fields: l,\n getDataToCopy: we,\n onPaste: ae,\n path: U,\n type: n\n })\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: V,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: s,\n path: U\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(du, {\n fieldValue: J,\n localized: c,\n path: U,\n readOnly: g\n }),\n O,\n (X?.length > 0 || !q && (fe || me)) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Or, {\n className: `${Ar}__draggable-rows`,\n ids: X.map((te)=>te.id),\n onDragEnd: ({ moveFromIndex: te, moveToIndex: ge })=>Me(te, ge),\n children: [\n X.map((te, ge)=>{\n let { id: oe, isLoading: pe } = te, be = `${U}.${ge}`, ot = Q?.filter((je)=>je.startsWith(be + \".\")).length;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jn, {\n disabled: g || z || !i,\n id: oe,\n children: (je)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($A, {\n ...je,\n addRow: xe,\n copyRow: Oe,\n CustomRowLabel: X?.[ge]?.customComponents?.RowLabel,\n duplicateRow: _e,\n errorCount: ot,\n fields: l,\n forceRender: m,\n hasMaxRows: G,\n isLoading: pe,\n isSortable: i,\n labels: M,\n moveRow: Me,\n parentPath: U,\n pasteRow: Ke,\n path: be,\n permissions: h,\n readOnly: g || z,\n removeRow: Be,\n row: te,\n rowCount: X?.length,\n rowIndex: ge,\n schemaPath: y,\n scrollIdPrefix: le,\n setCollapse: he\n })\n }, oe);\n }),\n !q && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n fe && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sn, {\n children: P(\"validation:fieldHasNo\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(M.plural, k)\n })\n }),\n me && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sn, {\n type: \"error\",\n children: P(\"validation:requiresAtLeast\", {\n count: v,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(v > 1 ? M.plural : M.singular, k) || P(v > 1 ? \"general:rows\" : \"general:row\")\n })\n })\n ]\n })\n ]\n }),\n !G && !g && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${Ar}__add-row`,\n disabled: z,\n icon: \"plus\",\n iconPosition: \"left\",\n iconStyle: \"with-border\",\n onClick: ()=>{\n xe(J || 0);\n },\n children: P(\"fields:addLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(M.singular, k)\n })\n }),\n j\n ]\n });\n}, Vd = We(qU);\n\n\n\n\nvar zd = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { disabled: o, path: n } = t, r = n === void 0 ? \"confirm-password\" : n, { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n e[0] !== r ? (i = {\n path: r,\n validate: eX\n }, e[0] = r, e[1] = i) : i = e[1];\n let { disabled: l, setValue: a, showError: c, value: u } = Te(i), d = c && \"error\", f;\n e[2] !== d ? (f = [\n Pe,\n \"confirm-password\",\n d\n ].filter(Boolean), e[2] = d, e[3] = f) : f = e[3];\n let m = f.join(\" \"), p;\n return e[4] !== l || e[5] !== o || e[6] !== r || e[7] !== a || e[8] !== s || e[9] !== m || e[10] !== u ? (p = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: m,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n htmlFor: \"field-confirm-password\",\n label: s(\"authentication:confirmPassword\"),\n required: !0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: r\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"aria-label\": s(\"authentication:confirmPassword\"),\n autoComplete: \"off\",\n disabled: !!(l || o),\n id: \"field-confirm-password\",\n name: \"confirm-password\",\n onChange: a,\n type: \"password\",\n value: u || \"\"\n })\n ]\n })\n ]\n }), e[4] = l, e[5] = o, e[6] = r, e[7] = a, e[8] = s, e[9] = m, e[10] = u, e[11] = p) : p = e[11], p;\n};\nfunction eX(t, e) {\n return (0,payload_shared__WEBPACK_IMPORTED_MODULE_41__.confirmPassword)(t, {\n name: \"confirm-password\",\n type: \"text\",\n required: !0,\n ...e\n });\n}\n\n\n\n\n\n\n\nvar VA = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(28), { AfterInput: o, autoComplete: n, BeforeInput: r, className: s, description: i, Description: l, Error: a, inputRef: c, Label: u, label: d, localized: f, onChange: m, onKeyDown: p, path: h, placeholder: g, readOnly: b, required: C, rtl: y, showError: v, style: x, value: I, width: w } = t, F = n === void 0 ? \"off\" : n, { i18n: S } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), R = v && \"error\", D = b && \"read-only\", _;\n e[0] !== s || e[1] !== R || e[2] !== D ? (_ = [\n Pe,\n \"password\",\n s,\n R,\n D\n ].filter(Boolean), e[0] = s, e[1] = R, e[2] = D, e[3] = _) : _ = e[3];\n let T = _.join(\" \"), A;\n return e[4] !== o || e[5] !== r || e[6] !== l || e[7] !== a || e[8] !== u || e[9] !== F || e[10] !== i || e[11] !== S || e[12] !== c || e[13] !== d || e[14] !== f || e[15] !== m || e[16] !== p || e[17] !== h || e[18] !== g || e[19] !== b || e[20] !== C || e[21] !== y || e[22] !== v || e[23] !== x || e[24] !== T || e[25] !== I || e[26] !== w ? (A = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: T,\n style: {\n ...x,\n width: w\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: u,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: d,\n localized: f,\n path: h,\n required: C\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Pe}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: a,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ze, {\n path: h,\n showError: v\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n children: [\n r,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"aria-label\": (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(d, S),\n autoComplete: F,\n \"data-rtl\": y,\n disabled: b,\n id: `field-${h.replace(/\\./g, \"__\")}`,\n name: h,\n onChange: m,\n onKeyDown: p,\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(g, S),\n ref: c,\n type: \"password\",\n value: I || \"\"\n }),\n o\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: l,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xe, {\n description: i,\n path: h\n })\n })\n ]\n })\n ]\n }), e[4] = o, e[5] = r, e[6] = l, e[7] = a, e[8] = u, e[9] = F, e[10] = i, e[11] = S, e[12] = c, e[13] = d, e[14] = f, e[15] = m, e[16] = p, e[17] = h, e[18] = g, e[19] = b, e[20] = C, e[21] = y, e[22] = v, e[23] = x, e[24] = T, e[25] = I, e[26] = w, e[27] = A) : A = e[27], A;\n};\n_c227 = VA;\nvar iX = (t)=>{\n let { autoComplete: e, field: o, field: { admin: { className: n, disabled: r, placeholder: s, rtl: i } = {}, label: l, localized: a, required: c } = {}, inputRef: u, path: d, validate: f } = t, { t: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), p = ye(), { config: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((_, T)=>{\n let A = d ? d.split(\".\") : [];\n return typeof f == \"function\" ? f(_, {\n ...T,\n required: c\n }) : (0,payload_shared__WEBPACK_IMPORTED_MODULE_41__.password)(_, {\n name: \"password\",\n type: \"text\",\n blockData: {},\n data: {},\n event: \"onChange\",\n path: A,\n preferences: {\n fields: {}\n },\n req: {\n payload: {\n config: h\n },\n t: m\n },\n required: !0,\n siblingData: {}\n });\n }, [\n f,\n h,\n m,\n c,\n d\n ]), { customComponents: { AfterInput: b, BeforeInput: C, Description: y, Error: v, Label: x } = {}, disabled: I, setValue: w, showError: F, value: S } = Te({\n path: d,\n validate: g\n }), R = Xi({\n fieldLocalized: !1,\n fieldRTL: i,\n locale: p,\n localizationConfig: h.localization || void 0\n }), D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>et(o), [\n o\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(VA, {\n AfterInput: b,\n autoComplete: e,\n BeforeInput: C,\n className: n,\n Description: y,\n Error: v,\n inputRef: u,\n Label: x,\n label: l,\n localized: a,\n onChange: (_)=>{\n w(_.target.value);\n },\n path: d,\n placeholder: s,\n readOnly: I || r,\n required: c,\n rtl: R,\n showError: F,\n style: D,\n value: S || \"\"\n });\n}, Wd = We(iX);\nvar GA = {\n array: Vd,\n blocks: gu,\n checkbox: zr,\n code: vu,\n collapsible: Cu,\n confirmPassword: zd,\n date: ju,\n email: ia,\n group: $u,\n hidden: Bu,\n join: Zu,\n json: Ju,\n number: qu,\n password: Wd,\n point: Qu,\n radio: td,\n relationship: ad,\n richText: ld,\n row: cd,\n select: ud,\n tabs: pd,\n text: ba,\n textarea: gd,\n ui: bd,\n upload: Od\n}, aX = {\n ...GA,\n Description: Xe,\n Error: Ze,\n Label: Ce,\n RowLabel: is\n};\n\n\n\nvar Ps = new Map([]), dX = {\n altleft: \"alt\",\n altright: \"alt\",\n controlleft: \"ctrl\",\n controlright: \"ctrl\",\n ctrlleft: \"ctrl\",\n ctrlright: \"ctrl\",\n escape: \"esc\",\n metaleft: \"meta\",\n metaright: \"meta\",\n osleft: \"meta\",\n osright: \"meta\",\n shiftleft: \"shift\",\n shiftright: \"shift\"\n}, zA = (t)=>(dX[t.toLowerCase()] || t).trim().toLowerCase().replace(\"key\", \"\"), mX = (t)=>{\n let e = zA(t);\n e === \"meta\" && Ps.forEach((o, n)=>n !== \"meta\" && Ps.delete(n)), Ps.set(e, Date.now());\n}, fX = (t)=>{\n let e = zA(t);\n e === \"meta\" && Ps.clear(), Ps.delete(e);\n}, Ta = (t, e)=>{\n let o = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), { cmdCtrlKey: n, editDepth: r, keyCodes: s } = t, { modalState: i } = ie(), l;\n o[0] !== n || o[1] !== r || o[2] !== e || o[3] !== s || o[4] !== i ? (l = (f)=>{\n let m = f.detail?.key ? f.detail : f;\n if (m.key === void 0) return;\n Ps.forEach(pX), m.code && mX(m.code);\n let p = window.navigator.userAgent.includes(\"Mac OS X\"), h = [\n ...Ps.keys()\n ].filter(hX);\n if ((0,payload_shared__WEBPACK_IMPORTED_MODULE_42__.setsAreEqual)(new Set(h), new Set(s)) && (!n || p && Ps.has(\"meta\") || !p && m.ctrlKey)) {\n if ((Object.keys(i).filter((b)=>i[b]?.isOpen)?.length + 1 || 1) !== r) return;\n e(m);\n }\n }, o[0] = n, o[1] = r, o[2] = e, o[3] = s, o[4] = i, o[5] = l) : l = o[5];\n let a = l, c = gX, u, d;\n o[6] !== a ? (u = ()=>(document.addEventListener(\"keydown\", a, !1), document.addEventListener(\"bypassKeyDown\", a, !1), document.addEventListener(\"keyup\", c, !1), ()=>{\n document.removeEventListener(\"keydown\", a), document.removeEventListener(\"bypassKeyDown\", a), document.removeEventListener(\"keyup\", c);\n }), d = [\n a,\n c\n ], o[6] = a, o[7] = u, o[8] = d) : (u = o[7], d = o[8]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(u, d);\n};\nfunction pX(t, e) {\n Date.now() - t > 3e3 && Ps.delete(e);\n}\nfunction hX(t) {\n return ![\n \"alt\",\n \"ctrl\",\n \"meta\",\n \"shift\"\n ].includes(t);\n}\nfunction gX(t) {\n t.code && fX(t.code);\n}\n\n\n\nvar yX = (t, e)=>{\n let o = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(30), n;\n o[0] !== e ? (n = e === void 0 ? {} : e, o[0] = e, o[1] = n) : n = o[1];\n let r = n, { initialData: s, initialParams: i } = r, l;\n o[2] !== i ? (l = i === void 0 ? {} : i, o[2] = i, o[3] = l) : l = o[3];\n let a = l, { i18n: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), u;\n o[4] !== s ? (u = s || {}, o[4] = s, o[5] = u) : u = o[5];\n let [d, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(u), [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(a), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!s), [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { code: y } = ye(), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), x;\n o[6] !== y || o[7] !== m ? (x = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n locale: y,\n ...typeof m == \"object\" ? m : {}\n }, {\n addQueryPrefix: !0\n }), o[6] = y, o[7] = m, o[8] = x) : x = o[8];\n let I = x, w;\n o[9] !== c.language || o[10] !== s || o[11] !== I || o[12] !== t ? (w = ()=>{\n if (s && !v.current) {\n v.current = !0;\n return;\n }\n let A = new AbortController;\n return t ? (async ()=>{\n C(!1), g(!0);\n try {\n let P = await Ge.get(`${t}${I}`, {\n headers: {\n \"Accept-Language\": c.language\n },\n signal: A.signal\n });\n P.status > 201 && C(!0);\n let E = await P.json();\n f(E), g(!1);\n } catch {\n A.signal.aborted || (C(!0), g(!1));\n }\n })() : (C(!1), g(!1)), ()=>{\n try {\n A.abort();\n } catch (P) {\n let E = P;\n }\n };\n }, o[9] = c.language, o[10] = s, o[11] = I, o[12] = t, o[13] = w) : w = o[13];\n let F;\n o[14] !== c.language || o[15] !== s || o[16] !== y || o[17] !== I || o[18] !== t ? (F = [\n t,\n y,\n I,\n c.language,\n s\n ], o[14] = c.language, o[15] = s, o[16] = y, o[17] = I, o[18] = t, o[19] = F) : F = o[19], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(w, F);\n let S, R;\n o[20] !== s ? (S = ()=>{\n s && v.current && f(s);\n }, R = [\n s\n ], o[20] = s, o[21] = S, o[22] = R) : (S = o[21], R = o[22]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(S, R);\n let D;\n o[23] !== d || o[24] !== b || o[25] !== h ? (D = {\n data: d,\n isError: b,\n isLoading: h\n }, o[23] = d, o[24] = b, o[25] = h, o[26] = D) : D = o[26];\n let _;\n o[27] === Symbol.for(\"react.memo_cache_sentinel\") ? (_ = {\n setParams: p\n }, o[27] = _) : _ = o[27];\n let T;\n return o[28] !== D ? (T = [\n D,\n _\n ], o[28] = D, o[29] = T) : T = o[29], T;\n};\n\n\nvar Hh = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), r, s;\n e[0] !== t ? (r = ()=>{\n let l;\n return t && (l = new ResizeObserver((a)=>{\n a.forEach((c)=>{\n let { contentBoxSize: u, contentRect: d } = c, f = 0, m = 0;\n if (u) {\n let p = Array.isArray(u) ? u[0] : u;\n if (p) {\n let { blockSize: h, inlineSize: g } = p;\n f = g, m = h;\n }\n } else if (d) {\n let { height: p, width: h } = d;\n f = h, m = p;\n }\n n({\n height: m,\n width: f\n });\n });\n }), l.observe(t)), ()=>{\n l && l.unobserve(t);\n };\n }, s = [\n t\n ], e[0] = t, e[1] = r, e[2] = s) : (r = e[1], s = e[2]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(r, s);\n let i;\n return e[3] !== o ? (i = {\n size: o\n }, e[3] = o, e[4] = i) : i = e[4], i;\n};\n_c228 = Hh;\n\n\nvar Fy = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { admin: o, fields: n } = t, { useAsTitle: r } = o, { i18n: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n return e[0] !== n || e[1] !== s || e[2] !== r ? (i = (0,payload_shared__WEBPACK_IMPORTED_MODULE_23__.flattenTopLevelFields)(n, {\n i18n: s,\n moveSubFieldsToTop: !0\n })?.find((a)=>\"name\" in a && a.name === r), e[0] = n, e[1] = s, e[2] = r, e[3] = i) : i = e[3], i;\n};\n_c229 = Fy;\n\n\n\n\n\nvar Hd = ({ className: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--sort\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M2.5 13.3333L5.83333 16.6667M5.83333 16.6667L9.16667 13.3333M5.83333 16.6667V3.33333M9.16667 7.08333H17.5M9.16667 10.4167H15M11.6667 13.75H12.5\",\n stroke: \"#2F2F2F\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n }), Dy = ({ className: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--sort\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"fill\",\n d: \"M2.5 6.66668L5.83333 3.33334M5.83333 3.33334L9.16667 6.66668M5.83333 3.33334V16.6667M11.6667 7.08354H17.5M9.16667 10.4169H15M9.16667 13.7502H12.5\",\n stroke: \"#2F2F2F\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n });\nvar Ud = \"sort-header\";\nfunction _X() {\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { handleSortChange: e, orderableFieldName: o, query: n } = dt(), s = (Array.isArray(n.sort) ? n.sort[0] : n.sort) === o, i;\n t[0] !== e || t[1] !== s || t[2] !== o ? (i = ()=>{\n s || e(o);\n }, t[0] = e, t[1] = s, t[2] = o, t[3] = i) : i = t[3];\n let l = i, a;\n return t[4] !== l || t[5] !== s ? (a = {\n handleSortPress: l,\n isActive: s\n }, t[4] = l, t[5] = s, t[6] = a) : a = t[6], a;\n}\nvar TX = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { appearance: o } = t, { handleSortPress: n, isActive: r } = _X(), { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i = o && `${Ud}--appearance-${o}`, l;\n e[0] !== i ? (l = [\n Ud,\n i\n ].filter(Boolean), e[0] = i, e[1] = l) : l = e[1];\n let a = l.join(\" \"), c;\n return e[2] !== n || e[3] !== r || e[4] !== s || e[5] !== a ? (c = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: a,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ud}__buttons`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": s(\"general:sortByLabelDirection\", {\n direction: s(\"general:ascending\"),\n label: \"Order\"\n }),\n className: `${Ud}__button ${r ? `${Ud}--active` : \"\"}`,\n onClick: n,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Hd, {})\n })\n })\n }), e[2] = n, e[3] = r, e[4] = s, e[5] = a, e[6] = c) : c = e[6], c;\n};\n_c230 = TX;\n\n\n\nvar YA = \"sort-row\", DX = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(2), { orderableFieldName: e, query: o } = dt(), n = o.sort === e || o.sort === `-${e}`, r = `${YA} ${n ? \"active\" : \"\"}`, s;\n return t[0] !== r ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: r,\n role: \"button\",\n tabIndex: 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(un, {\n className: `${YA}__icon`\n })\n }), t[0] = r, t[1] = s) : s = t[1], s;\n};\n\n\n\n\n\nvar Ry = ({ cellMap: t, columns: e, dragAttributes: o = {}, dragListeners: n = {}, rowId: r, ...s })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tr\", {\n ...s,\n children: e.map((i, l)=>{\n let { accessor: a } = i, c = i.renderedCells[t[r]];\n return a === \"_dragHandle\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"td\", {\n className: `cell-${a}`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n ...o,\n ...n,\n children: c\n })\n }, l) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"td\", {\n className: `cell-${a}`,\n children: c\n }, l);\n })\n });\n_c231 = Ry;\n\nvar ZA = ({ children: t, className: e, rowId: o })=>typeof o > \"u\" ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: e,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"table\", {\n cellPadding: 0,\n cellSpacing: 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tbody\", {\n children: t\n })\n })\n });\n_c232 = ZA;\nvar Zh = \"table\", EX = ({ appearance: t = \"default\", BeforeTable: e, collection: o, columns: n, data: r })=>{\n let { config: s } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { data: i, orderableFieldName: l, query: a } = dt(), { code: c } = ye(), u = i?.docs || r, [d, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(u), [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n f(u), p(Object.fromEntries(u.map((x, I)=>[\n String(x.id ?? x._id),\n I\n ])));\n }, [\n u\n ]);\n let b = n?.filter((x)=>x?.active);\n if (!b || b.filter((x)=>![\n \"_dragHandle\",\n \"_select\"\n ].includes(x.accessor)).length === 0) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: \"No columns selected\"\n });\n let C = async ({ moveFromIndex: x, moveToIndex: I })=>{\n if (a.sort !== l && a.sort !== `-${l}`) {\n ee.warning('To reorder the rows you must first sort them by the \"Order\" column'), g(void 0);\n return;\n }\n if (x === I) {\n g(void 0);\n return;\n }\n let w = d[x].id ?? d[x]._id, F = I > x ? d[I] : d[I - 1], S = I > x ? d[I + 1] : d[I], R = [\n ...d\n ];\n f((D)=>{\n let _ = [\n ...D\n ];\n return _[x][l] = \"pending\", _.splice(I, 0, _.splice(x, 1)[0]), _;\n });\n try {\n let D = F ? {\n id: F.id ?? F._id,\n key: F[l]\n } : {\n id: S.id ?? S._id,\n key: S[l]\n }, _ = F && a.sort === l || !F && a.sort === `-${l}` ? \"greater\" : \"less\", T = {\n collectionSlug: o.slug,\n docsToMove: [\n w\n ],\n newKeyWillBe: _,\n orderableFieldName: l,\n target: D\n }, A = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: s.routes.api,\n path: `/reorder?locale=${c}`\n }), {\n body: JSON.stringify(T),\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\"\n });\n if (A.status === 403) throw new Error(\"You do not have permission to reorder these rows\");\n if (!A.ok) throw new Error(\"Failed to reorder. This can happen if you reorder several rows too quickly. Please try again.\");\n if (A.status === 200 && (await A.json()).message === \"initial migration\") throw new Error('You have enabled \"orderable\" on a collection with existing documentsand this is the first time you have sorted documents. We have run an automatic migration to add an initial order to the documents. Please refresh the page and try again.');\n } catch (D) {\n let _ = D instanceof Error ? D.message : String(D);\n f(R), ee.error(_);\n } finally{\n g(void 0);\n }\n }, y = ({ id: x })=>{\n g(x);\n }, v = d.map((x)=>x.id ?? x._id);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Zh,\n t && `${Zh}--appearance-${t}`\n ].filter(Boolean).join(\" \"),\n children: [\n e,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Or, {\n ids: v,\n onDragEnd: C,\n onDragStart: y,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"table\", {\n cellPadding: \"0\",\n cellSpacing: \"0\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"thead\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tr\", {\n children: b.map((x, I)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"th\", {\n id: `heading-${x.accessor}`,\n children: x.Heading\n }, I))\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tbody\", {\n children: d.map((x, I)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jn, {\n id: v[I],\n children: ({ attributes: w, isDragging: F, listeners: S, setNodeRef: R, transform: D, transition: _ })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ry, {\n cellMap: m,\n className: `row-${I + 1}`,\n columns: b,\n dragAttributes: w,\n dragListeners: S,\n ref: R,\n rowId: x.id ?? x._id,\n style: {\n opacity: F ? 0 : 1,\n transform: D,\n transition: _\n }\n })\n }, v[I]))\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.DragOverlay, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ZA, {\n className: [\n Zh,\n `${Zh}--drag-preview`\n ].join(\" \"),\n rowId: h,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ry, {\n cellMap: m,\n columns: b,\n rowId: h\n })\n })\n })\n ]\n })\n ]\n });\n};\n\n\n\nvar kX = \"query-preset-columns-cell\", jX = ({ cellData: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: kX,\n children: t ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToSearchParams)(t).map((e, o)=>{\n let n = !e.startsWith(\"-\");\n return n ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n pillStyle: n ? \"always-white\" : \"light\",\n size: \"small\",\n children: (0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(e)\n }, o) : null;\n }) : \"No columns selected\"\n });\n\n\n\nvar BX = (t)=>{\n if (t.or && t.or.length > 0 && t.or[0].and && t.or[0].and.length > 0) {\n let o = t.or[0]?.and?.[0];\n if (!o || typeof o != \"object\") return \"No where query\";\n let n = Object.keys(o)[0];\n if (!n || !o[n] || typeof o[n] != \"object\") return \"No where query\";\n let r = Object.keys(o[n])[0], s = o[n][r];\n if (typeof s == \"string\") return `${(0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(n)} ${r} ${(0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(s)}`;\n if (Array.isArray(s)) return `${(0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(n)} ${r} ${s.map((i)=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(i)).join(\" or \")}`;\n }\n return \"\";\n}, MX = ({ cellData: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: t ? BX(t) : \"No where query\"\n });\n\n\n\nvar VX = ({ cellData: t })=>{\n let e = [\n \"read\",\n \"update\",\n \"delete\"\n ];\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: e.reduce((o, n, r)=>{\n let s = t?.[n];\n return s && s.constraint && o.push((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: (0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(n)\n }),\n \": \",\n (0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(s.constraint)\n ]\n }),\n r !== e.length - 1 && \", \"\n ]\n }, n)), o;\n }, [])\n });\n};\n_c233 = VX;\n\n\n\n\n\nvar qh = [\n {\n label: \"equals\",\n value: \"equals\"\n },\n {\n label: \"isNotEqualTo\",\n value: \"not_equals\"\n }\n], GX = [\n {\n label: \"isIn\",\n value: \"in\"\n },\n {\n label: \"isNotIn\",\n value: \"not_in\"\n }\n], ac = {\n label: \"exists\",\n value: \"exists\"\n}, Dn = [\n ...qh,\n ...GX,\n ac\n], eP = [\n ...Dn,\n {\n label: \"isGreaterThan\",\n value: \"greater_than\"\n },\n {\n label: \"isLessThan\",\n value: \"less_than\"\n },\n {\n label: \"isLessThanOrEqualTo\",\n value: \"less_than_equal\"\n },\n {\n label: \"isGreaterThanOrEqualTo\",\n value: \"greater_than_equal\"\n }\n], zX = [\n ...qh,\n {\n label: \"near\",\n value: \"near\"\n }\n], tP = {\n label: \"within\",\n value: \"within\"\n}, oP = {\n label: \"intersects\",\n value: \"intersects\"\n}, Xd = {\n label: \"isLike\",\n value: \"like\"\n}, Yd = {\n label: \"isNotLike\",\n value: \"not_like\"\n}, ic = {\n label: \"contains\",\n value: \"contains\"\n}, lc = {\n checkbox: {\n component: \"Text\",\n operators: [\n ...qh,\n ac\n ]\n },\n code: {\n component: \"Text\",\n operators: [\n ...Dn,\n Xd,\n Yd,\n ic\n ]\n },\n date: {\n component: \"Date\",\n operators: [\n ...eP,\n ac\n ]\n },\n email: {\n component: \"Text\",\n operators: [\n ...Dn,\n ic\n ]\n },\n json: {\n component: \"Text\",\n operators: [\n ...Dn,\n Xd,\n ic,\n Yd,\n tP,\n oP\n ]\n },\n number: {\n component: \"Number\",\n operators: [\n ...eP,\n ac\n ]\n },\n point: {\n component: \"Point\",\n operators: [\n ...zX,\n ac,\n tP,\n oP\n ]\n },\n radio: {\n component: \"Select\",\n operators: [\n ...Dn\n ]\n },\n relationship: {\n component: \"Relationship\",\n operators: [\n ...Dn\n ]\n },\n richText: {\n component: \"Text\",\n operators: [\n ...Dn,\n Xd,\n Yd,\n ic\n ]\n },\n select: {\n component: \"Select\",\n operators: [\n ...Dn\n ]\n },\n text: {\n component: \"Text\",\n operators: [\n ...Dn,\n Xd,\n Yd,\n ic\n ]\n },\n textarea: {\n component: \"Text\",\n operators: [\n ...Dn,\n Xd,\n Yd,\n ic\n ]\n },\n upload: {\n component: \"Relationship\",\n operators: [\n ...Dn\n ]\n }\n}, Qh = ({ field: t, operator: e })=>{\n let o = [];\n return t.type === \"relationship\" && Array.isArray(t.relationTo) ? o = [\n ...qh,\n ac\n ] : o = [\n ...lc[t.type].operators\n ], {\n validOperator: e && o.find(({ value: n })=>n === e) ? e : o[0].value,\n validOperators: o\n };\n};\nvar mr = ({ fieldPermissions: t, fields: e, i18n: o, labelPrefix: n, pathPrefix: r })=>e.reduce((s, i)=>{\n let l = r;\n if ((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsHiddenOrDisabled)(i) && !(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsID)(i) || \"virtual\" in i && i.virtual === !0) return s;\n let a = !1;\n if (\"virtual\" in i && typeof i.virtual == \"string\" && (l = l ? l + \".\" + i.virtual : i.virtual, (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(i) && (a = !0)), i.type === \"tabs\" && \"tabs\" in i) return i.tabs.forEach((u)=>{\n if (typeof u.label != \"boolean\") {\n let d = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(u.label, o), f = n ? n + \" > \" + d : d, m = (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.tabHasName)(u) && u.name ? l ? l + \".\" + u.name : u.name : l;\n typeof d == \"string\" && s.push(...mr({\n fieldPermissions: typeof t == \"boolean\" ? t : (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.tabHasName)(u) && u.name ? t?.[u.name]?.fields || t?.[u.name] : t,\n fields: u.fields,\n i18n: o,\n labelPrefix: f,\n pathPrefix: m\n }));\n }\n }), s;\n if (i.type === \"row\" && \"fields\" in i) return s.push(...mr({\n fieldPermissions: t,\n fields: i.fields,\n i18n: o,\n labelPrefix: n,\n pathPrefix: l\n })), s;\n if (i.type === \"collapsible\" && \"fields\" in i) {\n let c = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.label || \"\", o), u = n ? n + \" > \" + c : c;\n return s.push(...mr({\n fieldPermissions: t,\n fields: i.fields,\n i18n: o,\n labelPrefix: u,\n pathPrefix: l\n })), s;\n }\n if (i.type === \"group\" && \"fields\" in i) {\n let c = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.label || \"\", o), u = n ? c ? n + \" > \" + c : n : c;\n if ((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(i)) {\n let d = i.name ? l ? l + \".\" + i.name : i.name : l;\n s.push(...mr({\n fieldPermissions: typeof t == \"boolean\" ? t : t?.[i.name]?.fields || t?.[i.name],\n fields: i.fields,\n i18n: o,\n labelPrefix: u,\n pathPrefix: d\n }));\n } else s.push(...mr({\n fieldPermissions: t,\n fields: i.fields,\n i18n: o,\n labelPrefix: u,\n pathPrefix: l\n }));\n return s;\n }\n if (i.type === \"array\" && \"fields\" in i) {\n let c = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.label || \"\", o), u = n ? c ? n + \" > \" + c : n : c, d = i.name ? l ? l + \".\" + i.name : i.name : l;\n return s.push(...mr({\n fieldPermissions: typeof t == \"boolean\" ? t : t?.[i.name]?.fields || t?.[i.name],\n fields: i.fields,\n i18n: o,\n labelPrefix: u,\n pathPrefix: d\n })), s;\n }\n if (typeof lc[i.type] == \"object\" && ((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsID)(i) || t === !0 || t?.[i.name] === !0 || t?.[i.name]?.read === !0)) {\n let c = new Set, { validOperators: u } = Qh({\n field: i\n }), d = u.reduce((g, b)=>{\n if (!c.has(b.value)) {\n c.add(b.value);\n let C = `operators:${b.label}`;\n g.push({\n ...b,\n label: o.t(C)\n });\n }\n return g;\n }, []), f = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.label || \"\", o), m = n ? vd({\n field: i,\n prefix: n\n }) : f, p;\n a ? p = l : l ? p = Jl(l, i) : p = i.name;\n let h = {\n label: m,\n plainTextLabel: `${n ? n + \" > \" : \"\"}${f}`,\n value: p,\n ...lc[i.type],\n field: i,\n operators: d\n };\n return s.push(h), s;\n }\n return s;\n }, []);\nvar YX = ({ cellData: t, rowData: e })=>{\n let { i18n: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { permissions: n } = Ie(), { config: r } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), s = e?.relatedCollection, i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>s ? r.collections?.find((m)=>m.slug === s) : null, [\n s,\n r.collections\n ]), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n if (!i) return [];\n let m = n?.collections?.[s]?.fields;\n return mr({\n fieldPermissions: m,\n fields: i.fields,\n i18n: o\n });\n }, [\n i,\n n,\n s,\n o\n ]);\n if (!t || typeof t != \"string\") return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: \"No group by selected\"\n });\n let a = t.startsWith(\"-\"), c = a ? t.slice(1) : t, u = a ? \"descending\" : \"ascending\", f = l.find((m)=>m.value === c)?.label || (0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(c);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n children: [\n f,\n \" (\",\n u,\n \")\"\n ]\n });\n};\n_c234 = YX;\n\n\n\n\nvar qX = (t)=>t.type !== \"ui\" && (0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsHiddenOrDisabled)(t) && !(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsID)(t) || t?.admin?.disableListColumn === !0, Jd = ({ fieldPermissions: t, fields: e })=>(e ?? []).reduce((o, n)=>{\n if (qX(n)) return o;\n if (n.type === \"tabs\" && \"tabs\" in n) {\n let r = {\n ...n,\n tabs: n.tabs.map((s)=>({\n ...s,\n fields: Jd({\n fieldPermissions: typeof t == \"boolean\" ? t : \"name\" in s && s.name ? t[s.name]?.fields || t[s.name] : t,\n fields: s.fields\n })\n }))\n };\n return o.push(r), o;\n }\n if (\"fields\" in n && Array.isArray(n.fields)) {\n let r = {\n ...n,\n fields: Jd({\n fieldPermissions: typeof t == \"boolean\" ? t : \"name\" in n && n.name ? t?.[n.name]?.fields || t?.[n.name] : t,\n fields: n.fields\n })\n };\n return o.push(r), o;\n }\n if (t === !0) return o.push(n), o;\n if ((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(n)) {\n let r = t?.[n.name];\n return ((0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldIsID)(n) || r === !0 || r?.read === !0) && o.push(n), o;\n }\n return o.push(n), o;\n }, []);\n\nvar Ny = (t, e)=>t?.reduce((o, n)=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(n) && n.name === e ? o : !(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(n) && \"fields\" in n ? [\n ...o,\n ...Ny(n.fields, e)\n ] : n.type === \"tabs\" && \"tabs\" in n ? [\n ...o,\n ...n.tabs.reduce((r, s)=>[\n ...r,\n ...\"name\" in s ? [\n s.name\n ] : Ny(s.fields, e)\n ], [])\n ] : [\n ...o,\n n.name\n ], []), cP = (t, e, o)=>{\n let n = [];\n if (Array.isArray(o) && o.length >= 1) n = o;\n else {\n e && n.push(e);\n let r = Ny(t, e);\n n = n.concat(r), n = n.slice(0, 4);\n }\n return n.map((r)=>({\n accessor: r,\n active: !0\n }));\n};\nvar dP = ({ clientConfig: t, collectionConfig: e, collectionSlug: o, columns: n, i18n: r, permissions: s })=>{\n let i = Array.isArray(o), l = i ? [] : e?.fields ?? [];\n if (i) for (let a of o){\n let c = t.collections.find((u)=>u.slug === a);\n for (let u of Jd({\n fieldPermissions: s?.collections?.[a]?.fields || !0,\n fields: c.fields\n }))(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(u) && l.some((d)=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(d) && d.name === u.name) || l.push(u);\n }\n return n?.length ? n?.filter((a)=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_23__.flattenTopLevelFields)(l, {\n i18n: r,\n keepPresentationalFields: !0,\n moveSubFieldsToTop: !0\n })?.some((c)=>(\"accessor\" in c ? c.accessor : \"name\" in c ? c.name : void 0) === a.accessor)) : cP(i ? l : Jd({\n fieldPermissions: typeof o == \"string\" && s?.collections?.[o]?.fields ? s.collections[o].fields : !0,\n fields: l\n }), e?.admin?.useAsTitle, i ? [] : e?.admin?.defaultColumns);\n};\nvar tY = ({ field: { label: t, required: e } })=>{\n _s60();\n let { path: o, setValue: n, value: r } = Te(), i = Te({\n path: \"relatedCollection\"\n }).value, { config: l, getEntityConfig: a } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { permissions: u } = Ie(), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>i ? a({\n collectionSlug: i\n }) : null, [\n i,\n a\n ]), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>!i || !f ? [] : dP({\n clientConfig: l,\n collectionConfig: f,\n collectionSlug: i,\n columns: r ?? [],\n i18n: c,\n permissions: u\n }), [\n l,\n f,\n i,\n r,\n c,\n u\n ]), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>f?.fields ? mr({\n fieldPermissions: u?.collections?.[i]?.fields ?? !0,\n fields: f.fields,\n i18n: c\n }) : [], [\n f,\n c,\n u,\n i\n ]), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let y = {};\n for (let v of p)y[String(v.value)] = v.label;\n return y;\n }, [\n p\n ]), g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>m.map((y, v)=>({\n name: y.accessor,\n key: `${i}-${y.accessor}-${v}-${d}`,\n Label: h[y.accessor] ?? y.accessor,\n selected: y.active\n })), [\n h,\n m,\n i,\n d\n ]), b = r ?? m, C = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"tY.useCallback[C]\": ({ pill: y })=>{\n let v = b.map({\n \"tY.useCallback[C].v\": (x)=>x.accessor === y.name ? {\n ...x,\n active: !x.active\n } : x\n }[\"tY.useCallback[C].v\"]);\n n(v.length ? v : void 0);\n }\n }[\"tY.useCallback[C]\"], [\n b,\n n\n ]);\n return i ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"field-type query-preset-columns-field\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"h3\",\n label: t,\n path: o,\n required: e\n }),\n g.length > 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gu, {\n onClick: C,\n pills: g\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: \"query-preset-columns-field__hint\",\n children: \"No columns available for this collection.\"\n })\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"field-type query-preset-columns-field\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"h3\",\n label: t,\n path: o,\n required: e\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: \"query-preset-columns-field__hint\",\n children: \"Select the related collection to configure columns.\"\n })\n ]\n });\n};\n_s60(tY, \"wzw4evZpkrYfXHzgCZ8aw95Bv3o=\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar rY = \"condition-value-date\", Ly = (t)=>{\n let { disabled: e, field: o, onChange: n, value: r } = t, { admin: s } = o, { date: i } = s || {}, { config: l } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { admin: a } = l, { dateFormat: c } = a, { i18n: u, t: d } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), f = i?.displayFormat || c;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: rY,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Cl, {\n ...i,\n displayFormat: f,\n onChange: n,\n placeholder: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s.placeholder, u) || d(\"general:enterAValue\"),\n readOnly: e,\n value: r\n })\n });\n};\n\n\n\n\nvar iY = \"condition-value-number\", ky = (t)=>{\n _s61();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(20), { disabled: o, field: n, onChange: r, operator: s, value: i } = t, { admin: l, hasMany: a } = n, { i18n: c, t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), d;\n e[0] !== a || e[1] !== s ? (d = [\n \"in\",\n \"not_in\"\n ].includes(s) || a, e[0] = a, e[1] = s, e[2] = d) : d = e[2];\n let f = d, m;\n e[3] === Symbol.for(\"react.memo_cache_sentinel\") ? (m = [], e[3] = m) : m = e[3];\n let [p, h] = react__WEBPACK_IMPORTED_MODULE_0__.useState(m), g;\n e[4] !== f || e[5] !== r ? (g = (x)=>{\n let I;\n x ? f && (Array.isArray(x) ? I = x.map(aY) : I = [\n Number(x.value?.value || x.value)\n ]) : I = [], r(I);\n }, e[4] = f, e[5] = r, e[6] = g) : g = e[6];\n let b = g, C, y;\n e[7] !== i ? (C = ()=>{\n Array.isArray(i) ? h(i.map(lY)) : h([]);\n }, y = [\n i\n ], e[7] = i, e[8] = C, e[9] = y) : (C = e[8], y = e[9]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(C, y);\n let v;\n if (e[10] !== l?.placeholder || e[11] !== o || e[12] !== c || e[13] !== f || e[14] !== r || e[15] !== b || e[16] !== u || e[17] !== i || e[18] !== p) {\n let x = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(l?.placeholder, c) || u(\"general:enterAValue\");\n v = f ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n disabled: o,\n isClearable: !0,\n isCreatable: !0,\n isMulti: f,\n isSortable: !0,\n numberOnly: !0,\n onChange: b,\n options: [],\n placeholder: x,\n value: p || []\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n className: iY,\n disabled: o,\n onChange: (I)=>r(I.target.value),\n placeholder: x,\n type: \"number\",\n value: i\n }), e[10] = l?.placeholder, e[11] = o, e[12] = c, e[13] = f, e[14] = r, e[15] = b, e[16] = u, e[17] = i, e[18] = p, e[19] = v;\n } else v = e[19];\n return v;\n};\n_s61(ky, \"vjPHsTqSd6BOt4UrPN3UCaObL5M=\");\nfunction aY(t) {\n return Number(t.value?.value || t.value);\n}\nfunction lY(t, e) {\n return {\n id: `${t}${e}`,\n label: `${t}`,\n value: {\n toString: ()=>`${t}${e}`,\n value: t?.value || t\n }\n };\n}\n\n\n\n\n\nvar bP = (t)=>t.reduce((e, o)=>o.options ? [\n ...e,\n ...bP(o.options)\n ] : [\n ...e,\n o.id\n ], []), cY = (t, e)=>{\n switch(e.type){\n case \"ADD\":\n {\n let { collection: o, data: n, hasMultipleRelations: r, i18n: s, relation: i } = e, l = o.admin.useAsTitle || \"id\", a = bP(t);\n if (!r) return [\n ...t,\n ...n.docs.reduce((f, m)=>a.indexOf(m.id) === -1 ? (a.push(m.id), [\n ...f,\n {\n label: m[l],\n value: m.id\n }\n ]) : f, [])\n ];\n let c = [\n ...t\n ], u = c.find((f)=>f.label === (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(o.labels.plural, s)), d = n.docs.reduce((f, m)=>a.indexOf(m.id) === -1 ? (a.push(m.id), [\n ...f,\n {\n label: m[l],\n relationTo: i,\n value: m.id\n }\n ]) : f, []);\n return u ? u.options = [\n ...u.options,\n ...d\n ] : c.push({\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(o.labels.plural, s),\n options: d,\n value: void 0\n }), c;\n }\n case \"CLEAR\":\n return e.required ? [] : [\n {\n label: e.i18n.t(\"general:none\"),\n value: \"null\"\n }\n ];\n default:\n return t;\n }\n}, vP = cY;\nvar wP = \"condition-value-relationship\", dY = 10, eg = (t)=>{\n _s62();\n let { disabled: e, field: { admin: o = {}, hasMany: n, relationTo: r }, filterOptions: s, onChange: i, operator: l, value: a } = t, c = \"placeholder\" in o ? o?.placeholder : void 0, u = o?.isSortable, d = n || [\n \"in\",\n \"not_in\"\n ].includes(l), { config: { routes: { api: f } }, getEntityConfig: m } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), p = Array.isArray(r), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(vP, []), [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), y = yn(b, 300), [v, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), [I, w] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { i18n: F, t: S } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), R = ye(), D = p ? r : [\n r\n ], _ = react__WEBPACK_IMPORTED_MODULE_0__.useRef(new Map(D.map({\n \"eg.useRef[_]\": (L)=>[\n L,\n {\n hasLoadedAll: !1,\n nextPage: 1\n }\n ]\n }[\"eg.useRef[_]\"]))), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L, j)=>{\n let O = m({\n collectionSlug: j\n });\n g({\n type: \"ADD\",\n collection: O,\n data: L,\n hasMultipleRelations: p,\n i18n: F,\n relation: j\n });\n }, [\n p,\n F,\n m\n ]), A = Qe(async ({ abortController: L, relationSlug: j })=>{\n let O = _.current.get(j);\n if (j && !O.hasLoadedAll) {\n let W = m({\n collectionSlug: j\n })?.admin?.useAsTitle || \"id\", Z = {\n and: []\n }, z = {\n depth: 0,\n limit: dY,\n locale: R.code,\n page: O.nextPage,\n select: {\n [W]: !0\n },\n where: Z\n };\n s && s?.[j] && z.where.and.push(s[j]), y && z.where.and.push({\n [W]: {\n like: y\n }\n });\n try {\n let Q = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: f,\n path: `/${j}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(z, {\n addQueryPrefix: !0\n })}`\n }), {\n credentials: \"include\",\n headers: {\n \"Accept-Language\": F.language\n },\n signal: L.signal\n });\n if (Q.ok) {\n let U = await Q.json();\n U.docs.length > 0 && (T(U, j), U.nextPage ? _.current.set(j, {\n hasLoadedAll: !1,\n nextPage: U.nextPage\n }) : _.current.set(j, {\n hasLoadedAll: !0,\n nextPage: null\n }));\n } else x(S(\"error:unspecific\"));\n } catch (Q) {\n L.signal.aborted || console.error(Q);\n }\n }\n w(!0);\n }), k = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"eg.useCallback[k]\": ()=>{\n let L = _.current.entries().next().value;\n if (L[0] && !L[1].hasLoadedAll) {\n let j = new AbortController;\n A({\n abortController: j,\n relationSlug: L[0]\n });\n }\n }\n }[\"eg.useCallback[k]\"], []), P = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n if (a) {\n if (d) return Array.isArray(a) ? a.map((L)=>{\n if (p) {\n let j;\n return h.forEach((O)=>{\n O.options && O.options.some((V)=>V?.value == L.value ? (j = V, !0) : !1);\n }), j;\n }\n return h.find((j)=>j.value == L);\n }) : void 0;\n if (p) {\n let L, j = a;\n return h.forEach((O)=>{\n O?.options && O.options.some((V)=>V?.value == j.value ? (L = V, !0) : !1);\n }), L;\n }\n return h.find((L)=>L.value == a);\n }\n }, [\n d,\n p,\n a,\n h\n ]), E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((L)=>{\n if (L !== b) {\n g({\n type: \"CLEAR\",\n i18n: F,\n required: !1\n });\n let j = Array.isArray(r) ? r : [\n r\n ];\n _.current = new Map(j.map((O)=>[\n O,\n {\n hasLoadedAll: !1,\n nextPage: 1\n }\n ])), C(L);\n }\n }, [\n F,\n r,\n b\n ]), B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (L, j)=>{\n if (!v && L !== \"null\" && L && j) {\n let O = await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: f,\n path: `/${j}/${L}?depth=0`\n }), {\n credentials: \"include\",\n headers: {\n \"Accept-Language\": F.language\n }\n });\n if (O.ok) {\n let V = await O.json();\n T({\n docs: [\n V\n ]\n }, j);\n } else console.error(S(\"error:loadingDocument\", {\n id: L\n }));\n }\n }, [\n F,\n T,\n f,\n v,\n S\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let L = Array.isArray(r) ? r : [\n r\n ];\n _.current = new Map(L.map((O)=>[\n O,\n {\n hasLoadedAll: !1,\n nextPage: 1\n }\n ])), g({\n type: \"CLEAR\",\n i18n: F,\n required: !1\n }), w(!1);\n let j = [];\n return L.forEach((O)=>{\n let V = new AbortController;\n A({\n abortController: V,\n relationSlug: O\n }), j.push(V);\n }), ()=>{\n j.forEach((O)=>{\n if (O.signal) try {\n O.abort();\n } catch {}\n });\n };\n }, [\n F,\n r,\n y,\n s\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (a && I) {\n if (d) (P() || []).forEach((j, O)=>{\n j || (p ? B(a[O].value, a[O].relationTo) : B(a[O], r));\n });\n else if (!P()) if (p) {\n let j = a;\n B(j.value, j.relationTo);\n } else B(a, r);\n }\n }, [\n B,\n P,\n d,\n p,\n r,\n a,\n I\n ]);\n let $ = [\n \"field-type\",\n wP,\n v && \"error-loading\"\n ].filter(Boolean).join(\" \"), M = P() || a;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: $,\n children: v ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${wP}__error-loading`,\n children: v\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n disabled: e,\n isMulti: d,\n isSortable: u,\n onChange: (L)=>{\n if (!L) {\n i(null);\n return;\n }\n d && Array.isArray(L) ? i(L ? L.map((j)=>p ? {\n relationTo: j?.relationTo,\n value: j?.value\n } : j?.value) : null) : p && !Array.isArray(L) ? i({\n relationTo: L?.relationTo,\n value: L?.value\n }) : Array.isArray(L) || i(L?.value);\n },\n onInputChange: E,\n onMenuScrollToBottom: k,\n options: h,\n placeholder: c,\n value: M\n })\n });\n};\n_s62(eg, \"jP0di1pr40JeFgP7JE9/DIpLnsU=\");\n\n\n\n\nvar Oy = (t)=>{\n _s63();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(21), { disabled: o, field: n, isClearable: r, onChange: s, operator: i, options: l, value: a } = t, { admin: c } = n, { placeholder: u } = c, { i18n: d } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), f;\n e[0] !== l ? (f = Lu(l), e[0] = l, e[1] = f) : f = e[1];\n let [m, p] = react__WEBPACK_IMPORTED_MODULE_0__.useState(f), h;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (h = [\n \"in\",\n \"not_in\"\n ], e[2] = h) : h = e[2];\n let g = h.includes(i), b;\n if (g && Array.isArray(a)) {\n let S;\n e[3] !== d || e[4] !== m ? (S = (R)=>{\n let D = m.find((_)=>_.value === R);\n return {\n label: D ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(D.label, d) : R,\n value: D?.value ?? R\n };\n }, e[3] = d, e[4] = m, e[5] = S) : S = e[5], b = a.map(S);\n } else if (a) {\n let S;\n e[6] !== a ? (S = (D)=>D.value === a, e[6] = a, e[7] = S) : S = e[7];\n let R = m.find(S);\n b = {\n label: R ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(R.label, d) : a,\n value: R?.value ?? a\n };\n }\n let C;\n e[8] !== g || e[9] !== s ? (C = (S)=>{\n let R;\n S ? g ? Array.isArray(S) ? R = S.map(pY) : R = [] : R = S.value : R = null, s(R);\n }, e[8] = g, e[9] = s, e[10] = C) : C = e[10];\n let y = C, v, x;\n e[11] !== l ? (v = ()=>{\n p(Lu(l));\n }, x = [\n l\n ], e[11] = l, e[12] = v, e[13] = x) : (v = e[12], x = e[13]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(v, x);\n let I, w;\n e[14] !== g || e[15] !== s || e[16] !== a ? (I = ()=>{\n !g && Array.isArray(a) && s(a[0]);\n }, w = [\n g,\n s,\n a\n ], e[14] = g, e[15] = s, e[16] = a, e[17] = I, e[18] = w) : (I = e[17], w = e[18]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(I, w);\n let F;\n return e[19] !== d ? (F = (S)=>({\n ...S,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(S.label, d)\n }), e[19] = d, e[20] = F) : F = e[20], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n disabled: o,\n isClearable: r,\n isMulti: g,\n onChange: y,\n options: m.map(F),\n placeholder: u,\n value: b\n });\n};\n_s63(Oy, \"8dnfGyEu283+ofKjnUZ3tmdJXNQ=\");\n_c235 = Oy;\nfunction pY(t) {\n return t.value;\n}\n\n\n\nvar gY = \"condition-value-text\", Vy = (t)=>{\n _s64();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(18), { disabled: o, field: n, onChange: r, operator: s, value: i } = t, { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), a = n?.hasMany ?? !1, c;\n e[0] !== a || e[1] !== s ? (c = [\n \"in\",\n \"not_in\"\n ].includes(s) || a, e[0] = a, e[1] = s, e[2] = c) : c = e[2];\n let u = c, d;\n e[3] === Symbol.for(\"react.memo_cache_sentinel\") ? (d = [], e[3] = d) : d = e[3];\n let [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(d), p;\n e[4] !== u || e[5] !== r ? (p = (y)=>{\n let v;\n y ? u && (Array.isArray(y) ? v = y.map(bY) : v = [\n y.value?.value || y.value\n ]) : v = [], r(v);\n }, e[4] = u, e[5] = r, e[6] = p) : p = e[6];\n let h = p, g, b;\n e[7] !== i ? (g = ()=>{\n Array.isArray(i) ? m(i.map(vY)) : m([]);\n }, b = [\n i\n ], e[7] = i, e[8] = g, e[9] = b) : (g = e[8], b = e[9]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(g, b);\n let C;\n return e[10] !== o || e[11] !== u || e[12] !== r || e[13] !== h || e[14] !== l || e[15] !== i || e[16] !== f ? (C = u ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n disabled: o,\n isClearable: !0,\n isCreatable: !0,\n isMulti: u,\n isSortable: !0,\n onChange: h,\n options: [],\n placeholder: l(\"general:enterAValue\"),\n value: f || []\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n className: gY,\n disabled: o,\n onChange: (y)=>r(y.target.value),\n placeholder: l(\"general:enterAValue\"),\n type: \"text\",\n value: i || \"\"\n }), e[10] = o, e[11] = u, e[12] = r, e[13] = h, e[14] = l, e[15] = i, e[16] = f, e[17] = C) : C = e[17], C;\n};\n_s64(Vy, \"E8ApefB+ZrW7WBQA4oTpxcdcf84=\");\nfunction bY(t) {\n return t.value?.value || t.value;\n}\nfunction vY(t, e) {\n return {\n id: `${t}${e}`,\n label: `${t}`,\n value: {\n toString: ()=>`${t}${e}`,\n value: t?.value || t\n }\n };\n}\nvar TP = ({ booleanSelect: t, disabled: e, filterOptions: o, internalField: n, onChange: r, operator: s, options: i, value: l })=>{\n if (t || [\n \"radio\",\n \"select\"\n ].includes(n?.field?.type)) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Oy, {\n disabled: e,\n field: n.field,\n isClearable: !t,\n onChange: r,\n operator: s,\n options: i,\n value: l\n });\n switch(n?.field?.type){\n case \"date\":\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ly, {\n disabled: e,\n field: n.field,\n onChange: r,\n operator: s,\n value: l\n });\n case \"number\":\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ky, {\n disabled: e,\n field: n.field,\n onChange: r,\n operator: s,\n value: l\n });\n case \"relationship\":\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(eg, {\n disabled: e,\n field: n.field,\n filterOptions: o ?? {},\n onChange: r,\n operator: s,\n value: l\n });\n case \"upload\":\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(eg, {\n disabled: e,\n field: n.field,\n filterOptions: o ?? {},\n onChange: r,\n operator: s,\n value: l\n });\n default:\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Vy, {\n disabled: e,\n field: n?.field,\n onChange: r,\n operator: s,\n value: l\n });\n }\n};\n_c236 = TP;\nvar FP = (t)=>({\n all: \"any\",\n contains: \"string\",\n equals: \"any\",\n exists: \"boolean\",\n greater_than: t === \"date\" ? \"object\" : \"string\",\n greater_than_equal: t === \"date\" ? \"object\" : \"string\",\n in: \"any\",\n intersects: \"any\",\n less_than: t === \"date\" ? \"object\" : \"string\",\n less_than_equal: t === \"date\" ? \"object\" : \"string\",\n like: \"string\",\n near: \"any\",\n not_equals: \"any\",\n not_in: \"any\",\n not_like: \"string\",\n within: \"any\"\n });\n_c237 = FP;\nvar Ns = \"condition\", RP = (t)=>{\n let { addCondition: e, andIndex: o, fieldPath: n, filterOptions: r, operator: s, orIndex: i, reducedFields: l, removeCondition: a, RenderedFilter: c, updateCondition: u, value: d } = t, { t: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), m = l.find((w)=>w.value === n), [p, h] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(d), g = yn(p, 300), b = [\n \"exists\"\n ].includes(s) || m?.field?.type === \"checkbox\", C = [];\n b ? C = [\n {\n label: f(\"general:true\"),\n value: \"true\"\n },\n {\n label: f(\"general:false\"),\n value: \"false\"\n }\n ] : m?.field && \"options\" in m.field && (C = m.field.options);\n let y = Qe(async (w)=>{\n s && await u({\n type: \"value\",\n andIndex: o,\n field: m,\n operator: s,\n orIndex: i,\n value: w === null || w === \"\" ? void 0 : w\n });\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n y(g);\n }, [\n g\n ]);\n let v = !m?.value && typeof m?.value != \"number\" || m?.field?.admin?.disableListFilter, x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (w)=>{\n h(void 0), await u({\n type: \"field\",\n andIndex: o,\n field: l.find((F)=>F.value === w.value),\n operator: s,\n orIndex: i,\n value: void 0\n });\n }, [\n o,\n s,\n i,\n l,\n u\n ]), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (w)=>{\n let S = FP(m.field.type)[w.value] || \"any\", R = S === \"any\" || typeof d === S || S === \"boolean\" && (d === \"true\" || d === \"false\");\n R || h(void 0), await u({\n type: \"operator\",\n andIndex: o,\n field: m,\n operator: w.value,\n orIndex: i,\n value: R ? d : void 0\n });\n }, [\n o,\n m,\n i,\n u,\n d\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: Ns,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ns}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ns}__inputs`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ns}__field`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n disabled: v,\n filterOption: (w, F)=>(w?.data?.plainTextLabel || w.label).toLowerCase().includes(F.toLowerCase()),\n isClearable: !1,\n onChange: x,\n options: l.filter((w)=>!w.field.admin.disableListFilter),\n value: m || {\n value: m?.value\n }\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ns}__operator`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n disabled: v,\n isClearable: !1,\n onChange: I,\n options: m?.operators,\n value: m?.operators.find((w)=>s === w.value) || null\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ns}__value`,\n children: c || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(TP, {\n booleanSelect: b,\n disabled: !s || !m || m?.field?.admin?.disableListFilter,\n filterOptions: r,\n internalField: m,\n onChange: h,\n operator: s,\n options: C,\n value: p ?? \"\"\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ns}__actions`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${Ns}__actions-remove`,\n icon: \"x\",\n iconStyle: \"with-border\",\n onClick: ()=>a({\n andIndex: o,\n orIndex: i\n }),\n round: !0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${Ns}__actions-add`,\n icon: \"plus\",\n iconStyle: \"with-border\",\n onClick: ()=>e({\n andIndex: o + 1,\n field: l.find((w)=>!w.field.admin?.disableListFilter),\n orIndex: i,\n relation: \"and\"\n }),\n round: !0\n })\n ]\n })\n ]\n })\n });\n};\nvar Zn = \"where-builder\", og = (t)=>{\n _s65();\n let { collectionPluralLabel: e, collectionSlug: o, fields: n, onChange: r, renderedFilters: s = void 0, resolvedFilterOptions: i = void 0, value: l } = t, { i18n: a, t: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { permissions: u } = Ie(), { getEntityConfig: d } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), f = dt(), m = typeof r == \"function\", p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>m ? d({\n collectionSlug: o\n }) : null, [\n m,\n o,\n d\n ]), h = m ? p?.labels?.plural ?? o : e ?? o, b = (m ? p?.fields : n) ?? [], C = u?.collections?.[o]?.fields, y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>mr({\n fieldPermissions: C,\n fields: b,\n i18n: a\n }), [\n C,\n b,\n a\n ]), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let S = m ? l : f.query?.where;\n if (S) {\n if ((0,payload_shared__WEBPACK_IMPORTED_MODULE_44__.validateWhereQuery)(S)) return S.or ?? [];\n let R = (0,payload_shared__WEBPACK_IMPORTED_MODULE_45__.transformWhereQuery)(S);\n if ((0,payload_shared__WEBPACK_IMPORTED_MODULE_44__.validateWhereQuery)(R)) return R.or ?? [];\n m || console.warn(`Invalid where query in URL: ${JSON.stringify(S)}`);\n }\n return [];\n }, [\n m,\n l,\n f.query?.where\n ]), x = m ? (S)=>{\n r?.(S);\n } : f.handleWhereChange, I = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"og.useCallback[I]\": async ({ andIndex: S, field: R, orIndex: D, relation: _ })=>{\n let T = [\n ...v\n ], A = lc[R.field.type].operators[0].value;\n _ === \"and\" ? T[D].and.splice(S, 0, {\n [String(R.value)]: {\n [A]: void 0\n }\n }) : T.push({\n and: [\n {\n [String(R.value)]: {\n [A]: void 0\n }\n }\n ]\n }), await x({\n or: T\n });\n }\n }[\"og.useCallback[I]\"], [\n v,\n x\n ]), w = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"og.useCallback[w]\": async ({ andIndex: S, field: R, operator: D, orIndex: _, value: T })=>{\n let A = v[_].and[S];\n if (typeof A == \"object\" && R.value) {\n let { validOperator: k } = Qh({\n field: R.field,\n operator: D\n }), P = A[String(R.value)]?.[k];\n if (typeof P < \"u\" && P === T) return;\n let E = {\n [String(R.value)]: {\n [k]: T\n }\n };\n if ((0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(A, E)) return;\n let B = [\n ...v\n ];\n B[_].and[S] = E, await x({\n or: B\n });\n }\n }\n }[\"og.useCallback[w]\"], [\n v,\n x\n ]), F = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"og.useCallback[F]\": async ({ andIndex: S, orIndex: R })=>{\n let D = [\n ...v\n ];\n D[R].and.splice(S, 1), D[R].and.length === 0 && D.splice(R, 1), await x({\n or: D\n });\n }\n }[\"og.useCallback[F]\"], [\n v,\n x\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Zn,\n children: [\n v.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${Zn}__label`,\n children: c(\"general:filterWhere\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(h, a)\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n className: `${Zn}__or-filters`,\n children: v.map((S, R)=>{\n let D = `${R}_${Array.isArray(S?.and) ? S.and.length : \"\"}`;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n children: [\n R !== 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Zn}__label`,\n children: c(\"general:or\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n className: `${Zn}__and-filters`,\n children: Array.isArray(S?.and) && S.and.map((_, T)=>{\n let A = v[R].and[T], k = Object.keys(A)[0], P = Object.keys(A?.[k] || {})?.[0] || void 0, E = A?.[k]?.[P] || void 0;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n children: [\n T !== 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Zn}__label`,\n children: c(\"general:and\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(RP, {\n addCondition: I,\n andIndex: T,\n fieldPath: k,\n filterOptions: i?.get(k),\n operator: P,\n orIndex: R,\n reducedFields: y,\n removeCondition: F,\n RenderedFilter: s?.get(k),\n updateCondition: w,\n value: E\n })\n ]\n }, T);\n })\n })\n ]\n }, D);\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${Zn}__add-or`,\n icon: \"plus\",\n iconPosition: \"left\",\n iconStyle: \"with-border\",\n onClick: async ()=>{\n await I({\n andIndex: 0,\n field: y.find((S)=>!S.field.admin?.disableListFilter),\n orIndex: v.length,\n relation: \"or\"\n });\n },\n children: c(\"general:or\")\n })\n ]\n }),\n v.length === 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Zn}__no-filters`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Zn}__label`,\n children: c(\"general:noFiltersSet\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: `${Zn}__add-first-filter`,\n icon: \"plus\",\n iconPosition: \"left\",\n iconStyle: \"with-border\",\n onClick: async ()=>{\n y.length > 0 && await I({\n andIndex: 0,\n field: y.find((S)=>!S.field.admin?.disableListFilter),\n orIndex: v.length,\n relation: \"or\"\n });\n },\n children: c(\"general:addFilter\")\n })\n ]\n })\n ]\n });\n};\n_s65(og, \"tv5LkzHALgrDir3+LORfooNHo+Y=\");\nvar _Y = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { field: o } = t, { label: n, required: r } = o, { path: s, setValue: i, value: l } = Te(), a;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (a = {\n path: \"relatedCollection\"\n }, e[0] = a) : a = e[0];\n let u = Te(a).value;\n if (!u) {\n let f;\n return e[1] !== n || e[2] !== s || e[3] !== r ? (f = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"field-type query-preset-where-field\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"h3\",\n label: n,\n path: s,\n required: r\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: \"query-preset-where-field__hint\",\n children: \"Select the related collection to configure filters.\"\n })\n ]\n }), e[1] = n, e[2] = s, e[3] = r, e[4] = f) : f = e[4], f;\n }\n let d;\n if (e[5] !== n || e[6] !== s || e[7] !== u || e[8] !== r || e[9] !== i || e[10] !== l) {\n let f;\n e[12] !== i ? (f = (m)=>i(m), e[12] = i, e[13] = f) : f = e[13], d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"field-type query-preset-where-field\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"h3\",\n label: n,\n path: s,\n required: r\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(og, {\n collectionSlug: u,\n onChange: f,\n value: l ?? void 0\n })\n ]\n }), e[5] = n, e[6] = s, e[7] = u, e[8] = r, e[9] = i, e[10] = l, e[11] = d;\n } else d = e[11];\n return d;\n};\n\n\n\n\nvar ig = \"group-by-builder\", TY = [\n \"text\",\n \"textarea\",\n \"number\",\n \"select\",\n \"relationship\",\n \"date\",\n \"checkbox\",\n \"radio\",\n \"email\",\n \"number\",\n \"upload\"\n], ag = ({ collectionSlug: t, fields: e, onChange: o, value: n })=>{\n let { i18n: r, t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { permissions: i } = Ie(), l = dt(), a = typeof o == \"function\", c = a ? n : l.query?.groupBy, u = c?.replace(/^-/, \"\"), d = i?.collections?.[t]?.fields, f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>mr({\n fieldPermissions: d,\n fields: e,\n i18n: r\n }), [\n e,\n d,\n r\n ]), m = f.find((C)=>C.value === u), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>a ? (C)=>{\n let y = C === null ? void 0 : C.value, v = y ? c?.startsWith(\"-\") ? `-${y}` : y : \"\";\n o?.(v);\n } : (C)=>{\n (async ()=>{\n if (typeof l.refineListData != \"function\") return;\n let y = C === null ? void 0 : C.value;\n C === null ? await l.refineListData({\n groupBy: \"\",\n page: 1\n }) : await l.refineListData({\n groupBy: y ? l.query?.groupBy?.startsWith(\"-\") ? `-${y}` : y : void 0,\n page: 1\n });\n })();\n }, [\n a,\n c,\n l,\n o\n ]), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>a ? ()=>o?.(\"\") : ()=>{\n (async ()=>typeof l.refineListData == \"function\" && await l.refineListData({\n groupBy: \"\"\n }))();\n }, [\n a,\n l,\n o\n ]), g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>a ? ({ value: C })=>{\n u && o?.(C === \"asc\" ? u : `-${u}`);\n } : ({ value: C })=>{\n (async ()=>!u || typeof l.refineListData != \"function\" || await l.refineListData({\n groupBy: C === \"asc\" ? u : `-${u}`,\n page: 1\n }))();\n }, [\n u,\n a,\n l,\n o\n ]), b = !c || typeof c != \"string\" ? \"asc\" : c.startsWith(\"-\") ? \"desc\" : \"asc\";\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: ig,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${ig}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: s(\"general:groupByLabel\", {\n label: \"\"\n })\n }),\n c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n className: `${ig}__clear-button`,\n id: \"group-by--reset\",\n onClick: ()=>{\n h();\n },\n type: \"button\",\n children: s(\"general:clear\")\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${ig}__inputs`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n filterOption: (C, y)=>(C?.data?.plainTextLabel || C.label).toLowerCase().includes(y.toLowerCase()),\n id: \"group-by--field-select\",\n isClearable: !0,\n isMulti: !1,\n onChange: p,\n options: f.filter((C)=>!C.field.admin?.disableGroupBy && C.value !== \"id\" && TY.includes(C.field.type)),\n value: {\n label: m?.label || s(\"general:selectValue\"),\n value: u || \"\"\n }\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zr, {\n id: \"group-by--sort\",\n isClearable: !1,\n name: \"direction\",\n onChange: g,\n options: [\n {\n label: s(\"general:ascending\"),\n value: \"asc\"\n },\n {\n label: s(\"general:descending\"),\n value: \"desc\"\n }\n ],\n path: \"direction\",\n readOnly: !u,\n value: b\n })\n ]\n })\n ]\n });\n};\nvar DY = ({ field: { label: t, required: e } })=>{\n let { path: o, setValue: n, value: r } = Te(), i = Te({\n path: \"relatedCollection\"\n }).value, { config: l } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>i ? l.collections?.find((u)=>u.slug === i) : null, [\n i,\n l.collections\n ])?.fields ?? [];\n return i ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"field-type query-preset-group-by-field\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"h3\",\n label: t,\n path: o,\n required: e\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ag, {\n collectionSlug: i,\n fields: c,\n onChange: (u)=>n(u || null),\n value: r ?? void 0\n })\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"field-type query-preset-group-by-field\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n as: \"h3\",\n label: t,\n path: o,\n required: e\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: \"query-preset-group-by-field__hint\",\n children: \"Select the related collection to configure group by.\"\n })\n ]\n });\n};\n_c238 = DY;\n\n\n\n\n\n\nfunction EY(t, ...e) {\n t && t.addEventListener && t.addEventListener(...e);\n}\n_c239 = EY;\nfunction NY(t, ...e) {\n t && t.removeEventListener && t.removeEventListener(...e);\n}\n_c240 = NY;\nvar LY = (t, e)=>{\n let o = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), n = t === void 0 ? !0 : t, r;\n o[0] !== n || o[1] !== e ? (r = (a)=>{\n if (typeof n != \"function\" || n()) return a.preventDefault(), e && (a.returnValue = e), e;\n }, o[0] = n, o[1] = e, o[2] = r) : r = o[2];\n let s = r, i, l;\n o[3] !== n || o[4] !== s ? (i = ()=>{\n if (n) return EY(window, \"beforeunload\", s), ()=>NY(window, \"beforeunload\", s);\n }, l = [\n n,\n s\n ], o[3] = n, o[4] = s, o[5] = i, o[6] = l) : (i = o[5], l = o[6]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(i, l);\n}, NP = ({ hasAccepted: t = !1, message: e = \"Are you sure want to leave this page?\", onAccept: o, onPrevent: n, prevent: r = !0 })=>{\n LY(r, e);\n let { startRouteTransition: s } = Ye(), i = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(\"\");\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n function a(d, f) {\n try {\n let m = new URL(d), p = new URL(f);\n if (m.hostname === p.hostname && m.pathname === p.pathname && m.search === p.search) {\n let h = m.hash, g = p.hash;\n return h !== g && m.href.replace(h, \"\") === p.href.replace(g, \"\");\n }\n } catch (m) {\n console.log(\"Unexpected exception thrown in LeaveWithoutSaving:isAnchorOfCurrentUrl\", m);\n }\n return !1;\n }\n function c(d) {\n for(; d && d.tagName.toLowerCase() !== \"a\";)d = d.parentElement;\n return d;\n }\n function u(d) {\n try {\n let f = d.target, m = c(f);\n if (m) {\n let p = window.location.href, h = m.href, g = a(p, h), b = m.download !== \"\", C = m.target === \"_blank\" || d.metaKey || d.ctrlKey;\n !(h === p || g || b || C) && r && (n || !window.confirm(e)) && (l.current = h, d.preventDefault(), d.stopPropagation(), typeof n == \"function\" && n());\n }\n } catch (f) {\n console.log(\"Unexpected exception thrown in LeaveWithoutSaving:usePreventLeave\", f);\n }\n }\n return r && document.addEventListener(\"click\", u, !0), ()=>{\n document.removeEventListener(\"click\", u, !0);\n };\n }, [\n n,\n r,\n e\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n t && l.current && (o && o(), s(()=>i.push(l.current)));\n }, [\n t,\n o,\n i,\n s\n ]);\n};\nvar em = \"leave-without-saving\", tm = (t)=>{\n _s66();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(17), { disablePreventLeave: o, onConfirm: n, onPrevent: r } = t, s = o === void 0 ? !1 : o, i = em, { closeModal: l, openModal: a } = ie(), c = po(), { isValid: u } = $e(), { user: d } = Ie(), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), p = !s && !!((c || !u) && d), h;\n e[0] !== r || e[1] !== a ? (h = ()=>{\n let S = document.activeElement?.href || null;\n r && r(S), a(em);\n }, e[0] = r, e[1] = a, e[2] = h) : h = e[2];\n let g = h, b;\n e[3] !== l ? (b = ()=>{\n l(em);\n }, e[3] = l, e[4] = b) : b = e[4];\n let C = b, y;\n e[5] !== C || e[6] !== g || e[7] !== f || e[8] !== p ? (y = {\n hasAccepted: f,\n onAccept: C,\n onPrevent: g,\n prevent: p\n }, e[5] = C, e[6] = g, e[7] = f, e[8] = p, e[9] = y) : y = e[9], NP(y);\n let v;\n e[10] !== l ? (v = ()=>{\n l(em);\n }, e[10] = l, e[11] = v) : v = e[11];\n let x = v, I;\n e[12] !== n ? (I = async ()=>{\n if (n) try {\n await n();\n } catch (S) {\n console.error(\"Error in LeaveWithoutSaving onConfirm:\", S);\n }\n m(!0);\n }, e[12] = n, e[13] = I) : I = e[13];\n let w = I, F;\n return e[14] !== w || e[15] !== x ? (F = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Uy, {\n modalSlug: em,\n onCancel: x,\n onConfirm: w\n }), e[14] = w, e[15] = x, e[16] = F) : F = e[16], F;\n}, Uy = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { modalSlug: o, onCancel: n, onConfirm: r } = t, { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n return e[0] !== o || e[1] !== n || e[2] !== r || e[3] !== s ? (i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: s(\"general:changesNotSaved\"),\n cancelLabel: s(\"general:stayOnThisPage\"),\n confirmLabel: s(\"general:leaveAnyway\"),\n heading: s(\"general:leaveWithoutSaving\"),\n modalSlug: o,\n onCancel: n,\n onConfirm: r\n }), e[0] = o, e[1] = n, e[2] = r, e[3] = s, e[4] = i) : i = e[4], i;\n};\n_s66(tm, \"yWOGXaKo6w9NLvfXs9+3QG2p2ZE=\");\n\n\n\nvar uc = \"document-take-over\", cg = \"document-take-over\", Yy = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(19), { handleBackToDashboard: o, isActive: n, onReadOnly: r } = t, { closeModal: s, openModal: i } = ie(), { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { startRouteTransition: a } = Ye(), { clearRouteCache: c } = pt(), u, d;\n e[0] !== s || e[1] !== n || e[2] !== i ? (u = ()=>{\n n ? i(uc) : s(uc);\n }, d = [\n n,\n i,\n s\n ], e[0] = s, e[1] = n, e[2] = i, e[3] = u, e[4] = d) : (u = e[3], d = e[4]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(u, d);\n let f;\n if (e[5] !== c || e[6] !== s || e[7] !== o || e[8] !== r || e[9] !== a || e[10] !== l) {\n let m;\n e[12] !== o || e[13] !== a ? (m = ()=>{\n a(()=>o());\n }, e[12] = o, e[13] = a, e[14] = m) : m = e[14];\n let p;\n e[15] !== c || e[16] !== s || e[17] !== r ? (p = ()=>{\n r(), s(uc), c();\n }, e[15] = c, e[16] = s, e[17] = r, e[18] = p) : p = e[18], f = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jo, {\n className: cg,\n closeOnBlur: !1,\n slug: uc,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${cg}__wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${cg}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h1\", {\n children: l(\"general:editingTakenOver\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: l(\"general:anotherUserTakenOver\")\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${cg}__controls`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"primary\",\n id: `${uc}-back-to-dashboard`,\n onClick: m,\n size: \"large\",\n children: l(\"general:backToDashboard\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n id: `${uc}-view-read-only`,\n onClick: p,\n size: \"large\",\n children: l(\"general:viewReadOnly\")\n })\n ]\n })\n ]\n })\n }), e[5] = c, e[6] = s, e[7] = o, e[8] = r, e[9] = a, e[10] = l, e[11] = f;\n } else f = e[11];\n return f;\n};\n\n\n\nvar ug = (t)=>t && typeof t == \"object\";\nvar ks = \"document-locked\", dg = \"document-locked\", OY = (t)=>t ? new Intl.DateTimeFormat(\"en-US\", {\n day: \"numeric\",\n hour: \"numeric\",\n hour12: !0,\n minute: \"numeric\",\n month: \"short\",\n year: \"numeric\"\n }).format(new Date(t)) : \"\", Zy = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(33), { handleGoBack: o, isActive: n, onReadOnly: r, onTakeOver: s, updatedAt: i, user: l } = t, { closeModal: a, openModal: c } = ie(), { t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { clearRouteCache: d } = pt(), { startRouteTransition: f } = Ye(), m, p;\n e[0] !== a || e[1] !== n || e[2] !== c ? (m = ()=>{\n n ? c(ks) : a(ks);\n }, p = [\n n,\n c,\n a\n ], e[0] = a, e[1] = n, e[2] = c, e[3] = m, e[4] = p) : (m = e[3], p = e[4]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(m, p);\n let h;\n e[5] !== o || e[6] !== f ? (h = ()=>{\n f(()=>o());\n }, e[5] = o, e[6] = f, e[7] = h) : h = e[7];\n let g;\n if (e[8] !== d || e[9] !== a || e[10] !== o || e[11] !== r || e[12] !== s || e[13] !== f || e[14] !== u || e[15] !== h || e[16] !== i || e[17] !== l) {\n let b;\n e[19] !== u || e[20] !== l ? (b = ug(l) ? l.email ?? l.id : `${u(\"general:user\")}: ${l}`, e[19] = u, e[20] = l, e[21] = b) : b = e[21];\n let C;\n e[22] !== a || e[23] !== o || e[24] !== f ? (C = ()=>{\n a(ks), f(()=>o());\n }, e[22] = a, e[23] = o, e[24] = f, e[25] = C) : C = e[25];\n let y;\n e[26] !== d || e[27] !== a || e[28] !== r ? (y = ()=>{\n r(), a(ks), d();\n }, e[26] = d, e[27] = a, e[28] = r, e[29] = y) : y = e[29];\n let v;\n e[30] !== a || e[31] !== s ? (v = ()=>{\n s(), a(ks);\n }, e[30] = a, e[31] = s, e[32] = v) : v = e[32], g = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jo, {\n className: dg,\n closeOnBlur: !1,\n onClose: h,\n slug: ks,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${dg}__wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${dg}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h1\", {\n children: u(\"general:documentLocked\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: b\n }),\n \" \",\n u(\"general:currentlyEditing\")\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n children: [\n u(\"general:editedSince\"),\n \" \",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: OY(i)\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${dg}__controls`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n id: `${ks}-go-back`,\n onClick: C,\n size: \"large\",\n children: u(\"general:goBack\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n id: `${ks}-view-read-only`,\n onClick: y,\n size: \"large\",\n children: u(\"general:viewReadOnly\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"primary\",\n id: `${ks}-take-over`,\n onClick: v,\n size: \"large\",\n children: u(\"general:takeOver\")\n })\n ]\n })\n ]\n })\n }), e[8] = d, e[9] = a, e[10] = o, e[11] = r, e[12] = s, e[13] = f, e[14] = u, e[15] = h, e[16] = i, e[17] = l, e[18] = g;\n } else g = e[18];\n return g;\n};\n\n\n\n\nfunction Jy(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { i18n: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { description: n } = t;\n if (n) {\n let r;\n return e[0] !== n || e[1] !== o ? (r = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"custom-view-description\",\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(n, o)\n }), e[0] = n, e[1] = o, e[2] = r) : r = e[2], r;\n }\n return null;\n}\n_c241 = Jy;\n\n\n\n\n\n\n\n\n\n\nvar nm = \"graphic-account\", jP = (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n className: [\n nm,\n t?.active && `${nm}--active`\n ].filter(Boolean).join(\" \"),\n height: \"25\",\n viewBox: \"0 0 25 25\",\n width: \"25\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"circle\", {\n className: `${nm}__bg`,\n cx: \"12.5\",\n cy: \"12.5\",\n r: \"11.5\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"circle\", {\n className: `${nm}__head`,\n cx: \"12.5\",\n cy: \"10.73\",\n r: \"3.98\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: `${nm}__body`,\n d: \"M12.5,24a11.44,11.44,0,0,0,7.66-2.94c-.5-2.71-3.73-4.8-7.66-4.8s-7.16,2.09-7.66,4.8A11.44,11.44,0,0,0,12.5,24Z\"\n })\n ]\n });\nvar HP = (0,_chunk_5LKBKI4T_js__WEBPACK_IMPORTED_MODULE_2__.e)(WP(), 1);\n\n\n\nvar UP = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(2), { user: e } = Ie(), o = (0, HP.default)(e.email.trim().toLowerCase()), r = `?${new URLSearchParams({\n default: \"mp\",\n r: \"g\",\n s: \"50\"\n }).toString()}`, s = `https://www.gravatar.com/avatar/${o}${r}`, i;\n return t[0] !== s ? (i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: \"yas\",\n className: \"gravatar-account\",\n height: 25,\n src: s,\n style: {\n borderRadius: \"50%\"\n },\n width: 25\n }), t[0] = s, t[1] = i) : i = t[1], i;\n};\n_c242 = UP;\nvar eC = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { config: e } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { admin: o, routes: n } = e, { avatar: r, routes: s } = o, { account: i } = s, { admin: l } = n, { user: a } = Ie(), u = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.usePathname)() === (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: l,\n path: i\n });\n if (!a?.email || r === \"default\") {\n let d;\n return t[0] !== u ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jP, {\n active: u\n }), t[0] = u, t[1] = d) : d = t[1], d;\n }\n if (r === \"gravatar\") {\n let d;\n return t[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(UP, {}), t[2] = d) : d = t[2], d;\n }\n};\n\n\n\nvar YP = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n Actions: {},\n setViewActions: ()=>{}\n}), tC = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(YP), oZ = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { Actions: o, children: n } = t, [r, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(o), i;\n return e[0] !== o || e[1] !== n || e[2] !== r ? (i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(YP, {\n value: {\n Actions: {\n ...r,\n ...o\n },\n setViewActions: s\n },\n children: n\n }), e[0] = o, e[1] = n, e[2] = r, e[3] = i) : i = e[3], i;\n};\n\n\n\n\n\nvar oC = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--close-menu\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M14 6L6 14M6 6L14 14\",\n strokeLinecap: \"square\"\n })\n });\n\n\nvar rC = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--menu\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M4.66667 10H15.3333M4.66667 6H15.3333M4.66667 14H15.3333\",\n strokeLinecap: \"square\"\n })\n });\nvar nC = \"hamburger\", sC = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeIcon: n, isActive: r } = t, s = n === void 0 ? \"x\" : n, i = r === void 0 ? !1 : r, l;\n return e[0] !== s || e[1] !== i || e[2] !== o ? (l = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: nC,\n children: [\n !i && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n \"aria-label\": o(\"general:open\"),\n className: `${nC}__open-icon`,\n title: o(\"general:open\"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rC, {})\n }),\n i && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n \"aria-label\": o(s === \"collapse\" ? \"general:collapse\" : \"general:close\"),\n className: `${nC}__close-icon`,\n title: o(s === \"collapse\" ? \"general:collapse\" : \"general:close\"),\n children: [\n s === \"x\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(oC, {}),\n s === \"collapse\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: \"left\"\n })\n ]\n })\n ]\n }), e[0] = s, e[1] = i, e[2] = o, e[3] = l) : l = e[3], l;\n};\n\n\n\n\n\n\n\n\n\n\nvar sm = \"localizer-button\", fg = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { ariaLabel: o, className: n } = t, r = ye(), { i18n: s, t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), l;\n if (e[0] !== o || e[1] !== n || e[2] !== s || e[3] !== r || e[4] !== i) {\n let a;\n e[6] !== n ? (a = [\n sm,\n n\n ].filter(Boolean), e[6] = n, e[7] = a) : a = e[7], l = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n \"aria-label\": o || i(\"general:locale\"),\n className: a.join(\" \"),\n \"data-locale\": r ? r.code : void 0,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${sm}__label`,\n children: [\n `${i(\"general:locale\")}:`,\n \"\\xA0\"\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${sm}__current`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${sm}__current-label`,\n children: `${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r.label, s)}`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n className: `${sm}__chevron`\n })\n ]\n })\n ]\n }), e[0] = o, e[1] = n, e[2] = s, e[3] = r, e[4] = i, e[5] = l;\n } else l = e[5];\n return l;\n};\nvar aC = \"localizer\", KP = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(17), { className: o } = t, { config: n } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { localization: r } = n, s = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { startRouteTransition: i } = Ye(), { setLocaleIsLoading: l } = Of(), { i18n: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c = ye();\n if (r) {\n let { locales: u } = r, d;\n e[0] !== o ? (d = [\n aC,\n o\n ].filter(Boolean), e[0] = o, e[1] = d) : d = e[1];\n let f = d.join(\" \"), m;\n if (e[2] !== a || e[3] !== c || e[4] !== u || e[5] !== s || e[6] !== l || e[7] !== i || e[8] !== f) {\n let p;\n e[10] !== a || e[11] !== c || e[12] !== u || e[13] !== s || e[14] !== l || e[15] !== i ? (p = (h)=>{\n let { close: g } = h;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: u.map((b)=>{\n let C = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(b.label, a);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n active: c.code === b.code,\n disabled: c.code === b.code,\n onClick: ()=>{\n l(!0), g();\n let y = new URLSearchParams(window.location.search), v = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...qs_esm__WEBPACK_IMPORTED_MODULE_16__.parse(y.toString(), {\n depth: 10,\n ignoreQueryPrefix: !0\n }),\n locale: b.code\n }, {\n addQueryPrefix: !0\n });\n i(()=>{\n s.push(v);\n });\n },\n children: C !== b.code ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n C,\n \"\\xA0\",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${aC}__locale-code`,\n \"data-locale\": b.code,\n children: `(${b.code})`\n })\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${aC}__locale-code`,\n \"data-locale\": b.code,\n children: C\n })\n }, b.code);\n })\n });\n }, e[10] = a, e[11] = c, e[12] = u, e[13] = s, e[14] = l, e[15] = i, e[16] = p) : p = e[16], m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: f,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fg, {}),\n horizontalAlign: \"right\",\n render: p,\n showScrollbar: !0,\n size: \"large\"\n })\n }), e[2] = a, e[3] = c, e[4] = u, e[5] = s, e[6] = l, e[7] = i, e[8] = f, e[9] = m;\n } else m = e[9];\n return m;\n }\n return null;\n};\n\n\n\n\nvar lC = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n hydrated: !1,\n navOpen: !0,\n navRef: null,\n setNavOpen: ()=>{},\n shouldAnimate: !1\n}), Ra = ()=>react__WEBPACK_IMPORTED_MODULE_0__.use(lC), hZ = async (t)=>{\n let o = (await t(payload_shared__WEBPACK_IMPORTED_MODULE_46__.PREFERENCE_KEYS.NAV))?.open;\n return typeof o == \"boolean\" ? o : !0;\n}, cC = ({ children: t, initialIsOpen: e })=>{\n _s67();\n let { breakpoints: { l: o, m: n, s: r } } = dr(), s = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.usePathname)(), { getPreference: i } = so(), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [a, c] = react__WEBPACK_IMPORTED_MODULE_0__.useState(e), [u, d] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [f, m] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n o === !1 && (async ()=>{\n let h = await hZ(i);\n c(h);\n })();\n }, [\n o,\n i,\n c\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n r === !0 && c(!1);\n }, [\n s\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n l.current && (a && n ? l.current.style.overscrollBehavior = \"contain\" : l.current.style.overscrollBehavior = \"auto\");\n }, [\n a,\n n\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n (o === !0 || n === !0 || r === !0) && c(!1), m(!0);\n let p = setTimeout(()=>{\n d(!0);\n }, 100);\n return ()=>{\n clearTimeout(p);\n };\n }, [\n o,\n n,\n r\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>{\n l.current && (l.current.style.overscrollBehavior = \"auto\");\n }, []), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(lC, {\n value: {\n hydrated: f,\n navOpen: a,\n navRef: l,\n setNavOpen: c,\n shouldAnimate: u\n },\n children: t\n });\n};\n_s67(cC, \"2F5q8lIhddjFbgFsDiS7sxaeCSk=\");\n\n\n\n\nvar e6 = \"nav-toggler\", uC = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(15), { id: o, children: n, className: r, tabIndex: s } = t, i = s === void 0 ? 0 : s, { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { setPreference: a } = so(), { navOpen: c, setNavOpen: u } = Ra(), { breakpoints: d } = dr(), { l: f } = d, m = `${l(c ? \"general:close\" : \"general:open\")} ${l(\"general:menu\")}`, p = c && `${e6}--is-open`, h;\n e[0] !== r || e[1] !== p ? (h = [\n e6,\n p,\n r\n ].filter(Boolean), e[0] = r, e[1] = p, e[2] = h) : h = e[2];\n let g = h.join(\" \"), b;\n e[3] !== f || e[4] !== c || e[5] !== u || e[6] !== a ? (b = async ()=>{\n u(!c), f || await a(payload_shared__WEBPACK_IMPORTED_MODULE_46__.PREFERENCE_KEYS.NAV, {\n open: !c\n }, !0);\n }, e[3] = f, e[4] = c, e[5] = u, e[6] = a, e[7] = b) : b = e[7];\n let C;\n return e[8] !== n || e[9] !== o || e[10] !== m || e[11] !== g || e[12] !== b || e[13] !== i ? (C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": m,\n className: g,\n id: o,\n onClick: b,\n tabIndex: i,\n type: \"button\",\n children: n\n }), e[8] = n, e[9] = o, e[10] = m, e[11] = g, e[12] = b, e[13] = i, e[14] = C) : C = e[14], C;\n};\n\n\n\n\n\n\nvar hg = ({ fill: t })=>{\n let e = t || \"var(--theme-elevation-1000)\";\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n className: \"graphic-icon\",\n height: \"100%\",\n viewBox: \"0 0 25 25\",\n width: \"100%\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M11.8673 21.2336L4.40922 16.9845C4.31871 16.9309 4.25837 16.8355 4.25837 16.7282V10.1609C4.25837 10.0477 4.38508 9.97616 4.48162 10.0298L13.1404 14.9642C13.2611 15.0358 13.412 14.9464 13.412 14.8093V11.6091C13.412 11.4839 13.3456 11.3647 13.2309 11.2992L2.81624 5.36353C2.72573 5.30989 2.60505 5.30989 2.51454 5.36353L1.15085 6.14422C1.06034 6.19786 1 6.29321 1 6.40048V18.5995C1 18.7068 1.06034 18.8021 1.15085 18.8558L11.8491 24.9583C11.9397 25.0119 12.0603 25.0119 12.1509 24.9583L21.1355 19.8331C21.2562 19.7616 21.2562 19.5948 21.1355 19.5232L18.3357 17.9261C18.2211 17.8605 18.0883 17.8605 17.9737 17.9261L12.175 21.2336C12.0845 21.2872 11.9638 21.2872 11.8733 21.2336H11.8673Z\",\n fill: e\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M22.8491 6.13827L12.1508 0.0417218C12.0603 -0.0119135 11.9397 -0.0119135 11.8491 0.0417218L6.19528 3.2658C6.0746 3.33731 6.0746 3.50418 6.19528 3.57569L8.97092 5.16091C9.08557 5.22647 9.21832 5.22647 9.33296 5.16091L11.8672 3.71872C11.9578 3.66508 12.0784 3.66508 12.1689 3.71872L19.627 7.96782C19.7175 8.02146 19.7778 8.11681 19.7778 8.22408V14.8212C19.7778 14.9464 19.8442 15.0656 19.9589 15.1311L22.7345 16.7104C22.8552 16.7819 23.006 16.6925 23.006 16.5554V6.40048C23.006 6.29321 22.9457 6.19786 22.8552 6.14423L22.8491 6.13827Z\",\n fill: e\n })\n ]\n });\n};\n\n\n\nvar Pr = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(o6), o6 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n setStepNav: ()=>{},\n stepNav: []\n}), dC = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { children: o } = t, n;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (n = [], e[0] = n) : n = e[0];\n let [r, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(n), i;\n return e[1] !== o || e[2] !== r ? (i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(o6, {\n value: {\n setStepNav: s,\n stepNav: r\n },\n children: o\n }), e[1] = o, e[2] = r, e[3] = i) : i = e[3], i;\n};\n\n\nvar FZ = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { nav: o } = t, { setStepNav: n } = Pr(), r, s;\n return e[0] !== o || e[1] !== n ? (r = ()=>{\n n(o);\n }, s = [\n n,\n o\n ], e[0] = o, e[1] = n, e[2] = r, e[3] = s) : (r = e[2], s = e[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(r, s), null;\n};\n_c243 = FZ;\nvar lm = \"step-nav\", s6 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { className: o, CustomIcon: n } = t, { i18n: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { stepNav: s } = Pr(), { config: i } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: l } = i, { admin: a } = l, { t: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), u;\n return e[0] !== n || e[1] !== a || e[2] !== o || e[3] !== r || e[4] !== s || e[5] !== c ? (u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: s.length > 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"nav\", {\n className: [\n lm,\n o\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qt, {\n className: `${lm}__home`,\n href: a,\n prefetch: !1,\n tabIndex: 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n title: c(\"general:dashboard\"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: n,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hg, {})\n })\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: \"/\"\n }),\n s.map((d, f)=>{\n let m = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(d.label, r);\n return s.length === f + 1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${lm}__last`,\n children: m\n }, f) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n d.url ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qt, {\n href: d.url,\n prefetch: !1,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: m\n }, f)\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: m\n }, f),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: \"/\"\n })\n ]\n }, f);\n })\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n lm,\n o\n ].filter(Boolean).join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${lm}__home`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n title: c(\"general:dashboard\"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: n,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hg, {})\n })\n })\n })\n })\n }), e[0] = n, e[1] = a, e[2] = o, e[3] = r, e[4] = s, e[5] = c, e[6] = u) : u = e[6], u;\n};\nvar Xo = \"app-header\";\nfunction LZ({ CustomAvatar: t, CustomIcon: e }) {\n let { t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { Actions: n } = tC(), { config: { admin: { routes: { account: r } }, localization: s, routes: { admin: i }, serverURL: l } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { navOpen: a } = Ra(), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [u, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let m = ()=>{\n let p = c.current;\n if (p) {\n let h = p.scrollWidth > p.clientWidth;\n d(h);\n }\n };\n return m(), window.addEventListener(\"resize\", m), ()=>{\n window.removeEventListener(\"resize\", m);\n };\n }, [\n n\n ]);\n let f = n ? Object.values(n) : [];\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"header\", {\n className: [\n Xo,\n a && `${Xo}--nav-open`\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xo}__bg`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xo}__content`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Xo}__wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(uC, {\n className: `${Xo}__mobile-nav-toggler`,\n tabIndex: -1,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sC, {})\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Xo}__controls-wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xo}__step-nav-wrapper`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(s6, {\n className: `${Xo}__step-nav`,\n CustomIcon: e\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Xo}__actions-wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xo}__actions`,\n ref: c,\n children: f.map((m, p)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: u && p === f.length - 1 ? `${Xo}__last-action` : \"\",\n children: m\n }, p))\n }),\n u && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xo}__gradient-placeholder`\n })\n ]\n }),\n s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fg, {\n ariaLabel: \"invisible\",\n className: `${Xo}__localizer-spacing`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qt, {\n \"aria-label\": o(\"authentication:account\"),\n className: `${Xo}__account`,\n href: (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: i,\n path: r\n }),\n prefetch: !1,\n tabIndex: 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: t,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(eC, {})\n })\n })\n ]\n })\n ]\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(KP, {\n className: `${Xo}__localizer`\n })\n ]\n });\n}\n_c244 = LZ;\n\n\nvar cm = \"card\", jZ = (t)=>{\n let { id: e, actions: o, buttonAriaLabel: n, href: r, onClick: s, title: i, titleAs: l } = t, a = [\n cm,\n e,\n (s || r) && `${cm}--has-onclick`\n ].filter(Boolean).join(\" \");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: a,\n id: e,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(l ?? \"div\", {\n className: `${cm}__title`,\n children: i\n }),\n o && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${cm}__actions`,\n children: o\n }),\n (s || r) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": n,\n buttonStyle: \"none\",\n className: `${cm}__click`,\n el: \"link\",\n onClick: s,\n to: r\n })\n ]\n });\n};\n\n\n\n\n\n\nvar vg = \"copy-locale-data\", yg = \"copy-locale\", fC = ()=>{\n _s68();\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(36), { config: e } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { localization: o, routes: n } = e, { admin: r } = n, { code: s } = ye(), { id: i, collectionSlug: l, globalSlug: a } = Se(), { i18n: c, t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), d = po(), { toggleModal: f } = ie(), { copyDataFromLocale: m } = Nt(), p = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { startRouteTransition: h } = Ye(), g = o && o.locales.map(VZ) || [], b;\n t[0] !== s ? (b = (O)=>O.value !== s, t[0] = s, t[1] = b) : b = t[1];\n let C = g.filter(b), y;\n t[2] !== c || t[3] !== o ? (y = (O)=>{\n let V = o && o.locales.find((W)=>W.code === O);\n return V && V.label ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(V.label, c) : O;\n }, t[2] = c, t[3] = o, t[4] = y) : y = t[4];\n let v = y, [x, I] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), [w, F] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), [S, R] = react__WEBPACK_IMPORTED_MODULE_0__.useState(s), [D, _] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), T, A;\n t[5] !== s || t[6] !== S ? (T = ()=>{\n S !== s && R(s);\n }, A = [\n s,\n S\n ], t[5] = s, t[6] = S, t[7] = T, t[8] = A) : (T = t[7], A = t[8]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(T, A);\n let k;\n t[9] !== r || t[10] !== l || t[11] !== m || t[12] !== a || t[13] !== i || t[14] !== D || t[15] !== p || t[16] !== h || t[17] !== u || t[18] !== f ? (k = async (O)=>{\n let { from: V, to: W } = O;\n I(!0);\n try {\n await m({\n collectionSlug: l,\n docID: i,\n fromLocale: V,\n globalSlug: a,\n overrideData: D,\n toLocale: W\n }), I(!1), h(()=>p.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: r,\n path: `/${l ? `collections/${l}/${i}` : `globals/${a}`}`\n }) + `?locale=${W}`)), f(yg);\n } catch (Z) {\n let z = Z;\n I(!1);\n let Q = z.message || \"error:unknown\", U = Q.startsWith(\"error:\") ? u(Q) : Q;\n ee.error(U);\n }\n }, t[9] = r, t[10] = l, t[11] = m, t[12] = a, t[13] = i, t[14] = D, t[15] = p, t[16] = h, t[17] = u, t[18] = f, t[19] = k) : k = t[19];\n let P = k;\n if (!i && !a) return null;\n let E;\n t[20] !== d || t[21] !== u || t[22] !== f ? (E = ()=>{\n d ? ee.info(u(\"general:unsavedChanges\")) : f(yg);\n }, t[20] = d, t[21] = u, t[22] = f, t[23] = E) : E = t[23];\n let B;\n t[24] !== f ? (B = ()=>{\n f(yg);\n }, t[24] = f, t[25] = B) : B = t[25];\n let $;\n t[26] !== P || t[27] !== x || t[28] !== S || t[29] !== u || t[30] !== w ? ($ = async ()=>{\n if (S === w) {\n ee.error(u(\"localization:cannotCopySameLocale\"));\n return;\n }\n x || await P({\n from: S,\n to: w\n });\n }, t[26] = P, t[27] = x, t[28] = S, t[29] = u, t[30] = w, t[31] = $) : $ = t[31];\n let M;\n t[32] === Symbol.for(\"react.memo_cache_sentinel\") ? (M = (O)=>{\n O?.value && R(O.value);\n }, t[32] = M) : M = t[32];\n let L;\n t[33] === Symbol.for(\"react.memo_cache_sentinel\") ? (L = (O)=>{\n O?.value && F(O.value);\n }, t[33] = L) : L = t[33];\n let j;\n return t[34] !== D ? (j = ()=>_(!D), t[34] = D, t[35] = j) : j = t[35], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: `${vg}__button`,\n onClick: E,\n children: u(\"localization:copyToLocale\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(It, {\n className: vg,\n gutter: !1,\n Header: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(di, {\n onClose: B,\n title: u(\"localization:copyToLocale\")\n }),\n slug: yg,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vg}__sub-header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: S && w ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: u(\"localization:copyFromTo\", {\n from: v(S),\n to: v(w)\n })\n }) : u(\"localization:selectLocaleToCopy\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"primary\",\n disabled: !S || !w,\n iconPosition: \"left\",\n onClick: $,\n size: \"medium\",\n children: x ? u(\"general:copying\") + \"...\" : u(\"general:copy\")\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${vg}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zr, {\n label: u(\"localization:copyFrom\"),\n name: \"fromLocale\",\n onChange: M,\n options: g,\n path: \"fromLocale\",\n readOnly: !0,\n value: S\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zr, {\n label: u(\"localization:copyTo\"),\n name: \"toLocale\",\n onChange: L,\n options: C,\n path: \"toLocale\",\n value: w\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zr, {\n checked: D,\n field: {\n name: \"overwriteExisting\",\n label: u(\"general:overwriteExistingData\")\n },\n onChange: j,\n path: \"overwriteExisting\"\n })\n ]\n })\n ]\n })\n ]\n });\n};\n_s68(fC, \"U1OOH9ZevJP5v/HOWlzwdLGG1uQ=\");\nfunction VZ(t) {\n return {\n label: t.label,\n value: t.code\n };\n}\n_c245 = VZ;\n\n\n\n\n\n\n\n\n\n\n\nvar Jt = function(t) {\n return t.AllAvailable = \"allAvailable\", t.AllInPage = \"allInPage\", t.None = \"none\", t.Some = \"some\", t;\n}({}), l6 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n count: void 0,\n getQueryParams: (t)=>\"\",\n getSelectedIds: ()=>[],\n selectAll: void 0,\n selected: new Map,\n selectedIDs: [],\n setSelection: (t)=>{},\n toggleAll: (t)=>{},\n totalDocs: void 0\n}), i6 = (t)=>{\n let e = [];\n for (let [o, n] of t)n && e.push(o);\n return e;\n}, gC = ({ children: t, docs: e = [], totalDocs: o })=>{\n let n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), { user: r } = Ie(), { code: s } = ye(), [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>{\n let y = new Map;\n return e.forEach(({ id: v })=>{\n y.set(v, !1);\n }), y;\n }), [a, c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"none\"), [u, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), f = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), { query: m } = dt(), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((y = !1)=>{\n let v = new Map;\n if (y) c(\"allAvailable\"), e.forEach(({ id: x, _isLocked: I, _userEditing: w })=>{\n (!I || w?.id === r?.id) && v.set(x, !0);\n });\n else if (a === \"allAvailable\" || a === \"allInPage\") c(\"none\");\n else {\n let x = a !== \"some\";\n e.forEach(({ id: I, _isLocked: w, _userEditing: F })=>{\n (!w || F?.id === r?.id) && v.set(I, x);\n }), x && v.size > 0 ? v.size === e.length ? c(\"allInPage\") : c(\"some\") : c(\"none\");\n }\n l(v);\n }, [\n e,\n a,\n r?.id\n ]), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((y)=>{\n let v = e.find((F)=>F.id === y);\n if (v?._isLocked && r?.id !== v?._userEditing.id) return;\n let x = i.get(y), I = typeof x == \"boolean\" ? !x : !0, w = new Map(i.set(y, I));\n a === \"allAvailable\" && !I && c(\"some\"), l(w);\n }, [\n i,\n e,\n a,\n r?.id\n ]), g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((y)=>{\n let v;\n if (a === \"allAvailable\") v = Yt(f)?.where || {\n id: {\n not_equals: \"\"\n }\n };\n else {\n let x = [];\n for (let [I, w] of i)w && x.push(I);\n v = {\n id: {\n in: x\n }\n };\n }\n return y && (v = {\n and: [\n {\n ...y\n },\n v\n ]\n }), qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n locale: s,\n where: v\n }, {\n addQueryPrefix: !0\n });\n }, [\n a,\n i,\n s,\n f\n ]), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>i6(i), [\n i\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (a === \"allAvailable\") return;\n let y = !1, v = !0;\n if (!i.size) v = !1, y = !1;\n else for (let [x, I] of i)v = v && I, y = y || I;\n v && i.size === e.length ? c(\"allInPage\") : c(y ? \"some\" : \"none\");\n }, [\n a,\n i,\n o,\n e\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let y = 0;\n if (a === \"allAvailable\") y = o;\n else for (let [v, x] of i)x && y++;\n d(y);\n }, [\n a,\n i,\n o\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n c(\"none\"), l(new Map);\n }, [\n m\n ]);\n let C = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>i6(i), [\n i\n ]);\n return n.current = {\n count: u,\n getQueryParams: g,\n getSelectedIds: b,\n selectAll: a,\n selected: i,\n selectedIDs: C,\n setSelection: h,\n toggleAll: p,\n totalDocs: o\n }, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(l6, {\n value: n.current,\n children: t\n });\n}, xo = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(l6);\nfunction xg({ deletePermanently: t, hasDeletePermission: e, hasTrashPermission: o, isTrashView: n = !1 }) {\n return n || !o || e && t;\n}\n\n\n\nvar wg = \"list-selection\";\nfunction Sg(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { count: o, ListActions: n, SelectionActions: r } = t, { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n return e[0] !== n || e[1] !== r || e[2] !== o || e[3] !== s ? (i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: wg,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: s(\"general:selectedCount\", {\n count: o,\n label: \"\"\n })\n }),\n n && n.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: \"\\u2014\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${wg}__actions`,\n children: n\n })\n ]\n }),\n r && r.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: \"\\u2014\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${wg}__actions`,\n children: r\n })\n ]\n })\n ]\n }), e[0] = n, e[1] = r, e[2] = o, e[3] = s, e[4] = i) : i = e[4], i;\n}\n_c246 = Sg;\nfunction ro({ children: t, className: e, ...o }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n ...o,\n buttonStyle: \"none\",\n className: [\n `${wg}__button`,\n e\n ].filter(Boolean).join(\" \"),\n children: t\n });\n}\nvar yC = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { viewType: o } = t, { collection: n, hasDeletePermission: r, hasTrashPermission: s, modalPrefix: i } = t, { slug: l, trash: a } = n === void 0 ? {} : n, { permissions: c } = Ie(), { count: u, selectAll: d, selectedIDs: f, toggleAll: m } = xo(), p = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), h = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), { clearRouteCache: g } = pt(), b = c?.collections?.[l], C = r !== void 0 ? r : !!b?.delete, y = s !== void 0 ? s : C, v = d === Jt.AllAvailable, x = v ? [] : f, w = o === \"trash\" ? C : C || y;\n if (d === Jt.None || !w) return null;\n let F = Yt(h)?.where, S = o === \"trash\" ? {\n and: [\n ...Array.isArray(F?.and) ? F.and : F ? [\n F\n ] : [],\n {\n deletedAt: {\n exists: !0\n }\n }\n ]\n } : F, R;\n return e[0] !== g || e[1] !== p || e[2] !== h || e[3] !== d || e[4] !== m ? (R = ()=>{\n m(), p.replace(qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...Yt(h),\n page: d ? \"1\" : void 0\n }, {\n addQueryPrefix: !0\n })), g();\n }, e[0] = g, e[1] = p, e[2] = h, e[3] = d, e[4] = m, e[5] = R) : R = e[5], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(CC, {\n afterDelete: R,\n hasDeletePermission: C,\n hasTrashPermission: y,\n modalPrefix: i,\n search: Yt(h)?.search,\n selections: {\n [l]: {\n all: d === Jt.AllAvailable,\n ids: x,\n totalCount: v ? u : x.length\n }\n },\n trash: a,\n viewType: o,\n where: S\n })\n });\n};\nfunction CC({ afterDelete: t, hasDeletePermission: e = !1, hasTrashPermission: o = !1, modalPrefix: n, search: r, selections: s, trash: i, viewType: l, where: a }) {\n _s69();\n let { t: c } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: { collections: u, routes: { api: d } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { code: f } = ye(), { i18n: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { openModal: p } = ie(), [h, g] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), b = `${n ? `${n}-` : \"\"}confirm-delete-many-docs`, C = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"CC.useCallback[C]\": async ()=>{\n let x = Object.keys(s).length === 1, I = {};\n for (let [w, { all: F, ids: S = [] }] of Object.entries(s)){\n let R = u.find({\n \"CC.useCallback[C].R\": ({ slug: D })=>D === w\n }[\"CC.useCallback[C].R\"]);\n if (R) {\n let D;\n F ? x && a ? D = l === \"trash\" ? {\n and: [\n ...Array.isArray(a.and) ? a.and : [\n a\n ],\n {\n deletedAt: {\n exists: !0\n }\n }\n ]\n } : a : D = l === \"trash\" ? {\n and: [\n {\n id: {\n not_equals: \"\"\n }\n },\n {\n deletedAt: {\n exists: !0\n }\n }\n ]\n } : {\n id: {\n not_equals: \"\"\n }\n } : D = {\n and: [\n {\n id: {\n in: S\n }\n },\n ...l === \"trash\" ? [\n {\n deletedAt: {\n exists: !0\n }\n }\n ] : []\n ]\n };\n let _ = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/${w}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n limit: 0,\n locale: f,\n select: {},\n where: (0,payload_shared__WEBPACK_IMPORTED_MODULE_22__.mergeListSearchAndWhere)({\n collectionConfig: R,\n search: r,\n where: D\n }),\n ...l === \"trash\" ? {\n trash: !0\n } : {}\n }, {\n addQueryPrefix: !0\n })}`\n }), T = xg({\n deletePermanently: h,\n hasDeletePermission: e,\n hasTrashPermission: !!R.trash && o,\n isTrashView: l === \"trash\"\n }), A = T ? await Ge.delete(_, {\n headers: {\n \"Accept-Language\": m.language,\n \"Content-Type\": \"application/json\"\n }\n }) : await Ge.patch(_, {\n body: JSON.stringify({\n deletedAt: new Date().toISOString()\n }),\n headers: {\n \"Accept-Language\": m.language,\n \"Content-Type\": \"application/json\"\n }\n });\n try {\n let { plural: k, singular: P } = R.labels, E = await A.json(), B = E?.docs.length || 0, $ = B > 1 ? k : P;\n if (A.status < 400 || B > 0) {\n let M;\n T ? l === \"trash\" || e && h ? M = \"general:permanentlyDeletedCountSuccessfully\" : M = \"general:deletedCountSuccessfully\" : M = \"general:trashedCountSuccessfully\", ee.success(c(M, {\n count: B,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)($, m)\n }));\n }\n E?.errors.length > 0 && ee.error(E.message, {\n description: E.errors.map({\n \"CC.useCallback[C]\": (M)=>M.message\n }[\"CC.useCallback[C]\"]).join(`\n`)\n }), I[w] = {\n deletedCount: B,\n errors: E?.errors || null,\n ids: E?.docs.map({\n \"CC.useCallback[C]\": (M)=>M.id\n }[\"CC.useCallback[C]\"]) || [],\n totalCount: E.totalDocs\n }, A.status > 400 && E?.errors.length === 0 && (ee.error(c(\"error:unknown\")), I[w].errors = [\n c(\"error:unknown\")\n ]);\n continue;\n } catch (k) {\n ee.error(c(\"error:unknown\")), I[w] = {\n deletedCount: 0,\n errors: [\n k\n ],\n ids: [],\n totalCount: 0\n };\n continue;\n }\n }\n }\n typeof t == \"function\" && t(I);\n }\n }[\"CC.useCallback[C]\"], [\n s,\n t,\n u,\n h,\n e,\n o,\n f,\n r,\n d,\n m,\n l,\n a,\n c\n ]), { label: y, labelCount: v } = Object.entries(s).reduce((x, [I, w], F, S)=>{\n let R = u.find(({ slug: D })=>D === I);\n if (R) {\n let D = x.labelCount === void 0 ? w.totalCount : x.labelCount, _ = `${x.labelCount !== void 0 ? `${w.totalCount} ` : \"\"}${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(w.totalCount > 1 ? R.labels.plural : R.labels.singular, m)}`, T;\n return F === S.length - 1 && F !== 0 ? T = `${x.label} and ${_}` : F > 0 ? T = `${x.label}, ${_}` : T = _, {\n label: T,\n labelCount: D\n };\n }\n return x;\n }, {\n label: \"\",\n labelCount: void 0\n });\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n \"aria-label\": c(\"general:delete\"),\n className: \"delete-documents__toggle\",\n onClick: ()=>{\n p(b);\n },\n children: c(\"general:delete\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: i && o ? l === \"trash\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 0: ({ children: x })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: x\n }),\n 1: ({ children: x })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: x\n })\n },\n i18nKey: \"general:aboutToPermanentlyDeleteTrash\",\n t: c,\n variables: {\n count: v ?? 0,\n label: y\n }\n }) : c(\"general:aboutToTrashCount\", {\n count: v,\n label: y\n }) : c(\"general:aboutToDeleteCount\", {\n count: v,\n label: y\n })\n }),\n i && o && e && l !== \"trash\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"delete-documents__checkbox\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: h,\n id: \"delete-forever\",\n label: c(\"general:deletePermanently\"),\n name: \"delete-forever\",\n onToggle: (x)=>g(x.target.checked)\n })\n })\n ]\n }),\n confirmingLabel: c(\"general:deleting\"),\n heading: c(\"general:confirmDeletion\"),\n modalSlug: b,\n onConfirm: C\n })\n ]\n });\n}\n_s69(CC, \"P5o8qmQpT4L9SQ7jAVu5sssb9Q8=\");\n_c247 = CC;\n\n\n\n\n\n\nvar Ig = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n appIsReady: !1,\n breakpoint: void 0,\n breakpoints: void 0,\n iframeRef: void 0,\n isLivePreviewEnabled: void 0,\n isLivePreviewing: !1,\n isPopupOpen: !1,\n isPreviewEnabled: void 0,\n measuredDeviceSize: {\n height: 0,\n width: 0\n },\n openPopupWindow: ()=>{},\n popupRef: void 0,\n previewURL: void 0,\n previewWindowType: \"iframe\",\n setAppIsReady: ()=>{},\n setBreakpoint: ()=>{},\n setHeight: ()=>{},\n setIsLivePreviewing: ()=>{},\n setLoadedURL: ()=>{},\n setMeasuredDeviceSize: ()=>{},\n setPreviewURL: ()=>{},\n setPreviewWindowType: ()=>{},\n setSize: ()=>{},\n setToolbarPosition: ()=>{},\n setURL: ()=>{},\n setWidth: ()=>{},\n setZoom: ()=>{},\n shouldRenderIframe: void 0,\n size: {\n height: 0,\n width: 0\n },\n toolbarPosition: {\n x: 0,\n y: 0\n },\n typeofLivePreviewURL: void 0,\n url: void 0,\n zoom: 1\n}), ko = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(Ig), _g = ()=>{\n let { isPreviewEnabled: t, previewURL: e, setPreviewURL: o } = (0,react__WEBPACK_IMPORTED_MODULE_0__.use)(Ig);\n return {\n isPreviewEnabled: t,\n previewURL: e,\n setPreviewURL: o\n };\n};\n\n\n\n\n\n\nvar f6 = (t, e, o)=>{\n let n = {\n data: {},\n valid: !0\n };\n return t && (Object.keys(t).forEach((r)=>{\n (o === !0 || !t[r]?.disableFormData) && (n.data[r] = t[r]?.value, t[r].valid || (n.valid = !1));\n }), e && (n.data = (0,payload_shared__WEBPACK_IMPORTED_MODULE_35__.unflatten)(n.data))), n;\n};\nvar cJ = \"autosave\", v6 = 1e3, C6 = ({ id: t, collection: e, global: o })=>{\n let { config: { routes: { api: n } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { docConfig: r, lastUpdateTime: s, mostRecentVersionIsAutosaved: i, setMostRecentVersionIsAutosaved: l, setUnpublishedVersionCount: a } = Se(), { isValid: c, setBackgroundProcessing: u, submit: d } = $e(), [f] = Xs(), m = po(), p = fo(), { code: h } = ye(), { i18n: g, t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), C = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.getAutosaveInterval)(r), y = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasDraftValidationEnabled)(r), [v, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useDeferredValue)(v), w = yn(f, C), { queueTask: F } = da(), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), R = Qe(()=>{\n S.current = void 0;\n let A, k, P = ()=>{\n k - A < v6 ? S.current = setTimeout(()=>{\n x(!1);\n }, v6 - (k - A)) : T();\n };\n F(async ()=>{\n if (m) {\n A = new Date().getTime(), x(!0);\n let E, B, $, M = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n autosave: !0,\n depth: 0,\n draft: !0,\n \"fallback-locale\": \"null\",\n locale: h\n }, {\n addQueryPrefix: !0\n });\n e && t && ($ = e.slug, E = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: n,\n path: `/${$}/${t}${M}`\n }), B = \"PATCH\"), o && ($ = o.slug, E = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: n,\n path: `/globals/${$}${M}`\n }), B = \"POST\");\n let { valid: L } = f6(f, !0);\n if (!(p && !L && y) && m && E) {\n let O = await d({\n acceptValues: {\n overrideLocalChanges: !1\n },\n action: E,\n context: {\n getDocPermissions: !1,\n incrementVersionCount: !i\n },\n disableFormWhileProcessing: !1,\n disableSuccessStatus: !0,\n method: B,\n overrides: {\n _status: \"draft\"\n },\n skipValidation: !y\n });\n O && O?.res?.ok && !i && (l(!0), a((W)=>W + 1)), k = new Date().getTime(), P();\n }\n }\n }, {\n afterProcess: ()=>{\n u(!1);\n },\n beforeProcess: ()=>{\n u(!0);\n }\n });\n }), D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)((0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(w));\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (!D.current) {\n D.current = !0;\n return;\n }\n let { updatedAt: A, ...k } = (0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(w), { updatedAt: P, ...E } = _.current;\n (0,dequal_lite__WEBPACK_IMPORTED_MODULE_14__.dequal)(k, E) || (_.current = k, R());\n }, [\n w\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>{\n T();\n }, []);\n let T = Qe(()=>{\n S.current && clearTimeout(S.current), x(!1);\n });\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: cJ,\n children: [\n y && !c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(tm, {}),\n I && b(\"general:saving\"),\n !I && !!s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: b(\"version:lastSavedAgo\", {\n distance: $1({\n date: s,\n i18n: g\n })\n })\n })\n ]\n });\n};\n\n\n\n\n\nvar T6 = \"delete-document\", F6 = (t)=>{\n let { id: e, buttonId: o, collectionSlug: n, onDelete: r, redirectAfterDelete: s = !0, singularLabel: i, title: l } = t, { config: { routes: { admin: a, api: c } }, getEntityConfig: u } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), d = u({\n collectionSlug: n\n }), { hasDeletePermission: f, hasTrashPermission: m } = Se(), { setModified: p } = $e(), h = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { i18n: g, t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { title: C } = Ao(), { startRouteTransition: y } = Ye(), { openModal: v } = ie(), x = `delete-${e}`, [I, w] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n ee.error(b(\"error:deletingTitle\", {\n title: C\n }));\n }, [\n b,\n C\n ]), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n p(!1);\n let R = xg({\n deletePermanently: I,\n hasDeletePermission: f,\n hasTrashPermission: m\n });\n try {\n let D = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: c,\n path: `/${n}/${e}`\n }), _ = R ? await Ge.delete(D, {\n headers: {\n \"Accept-Language\": g.language,\n \"Content-Type\": \"application/json\"\n }\n }) : await Ge.patch(D, {\n body: JSON.stringify({\n deletedAt: new Date().toISOString()\n }),\n headers: {\n \"Accept-Language\": g.language,\n \"Content-Type\": \"application/json\"\n }\n }), T = await _.json();\n if (_.status < 400) {\n if (ee.success(b(R ? \"general:titleDeleted\" : \"general:titleTrashed\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, g),\n title: C\n }) || T.message), s) return y(()=>h.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: a,\n path: `/collections/${n}`\n })));\n typeof r == \"function\" && await r({\n id: e,\n collectionConfig: d\n });\n return;\n }\n T.errors ? T.errors.forEach((A)=>ee.error(A.message)) : F();\n return;\n } catch {\n return F();\n }\n }, [\n I,\n p,\n f,\n m,\n c,\n n,\n e,\n b,\n i,\n F,\n g,\n C,\n h,\n a,\n s,\n r,\n d,\n y\n ]);\n return e ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: o,\n onClick: ()=>{\n v(x);\n },\n children: b(\"general:delete\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: ({ children: R })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: R\n })\n },\n i18nKey: d.trash && m ? \"general:aboutToTrash\" : \"general:aboutToDelete\",\n t: b,\n variables: {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, g),\n title: l || C || e\n }\n }),\n d.trash && m && f && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${T6}__checkbox`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: I,\n id: \"delete-forever\",\n label: b(\"general:deletePermanently\"),\n name: \"delete-forever\",\n onToggle: (R)=>w(R.target.checked)\n })\n })\n ]\n }),\n className: T6,\n confirmingLabel: b(\"general:deleting\"),\n heading: b(\"general:confirmDeletion\"),\n modalSlug: x,\n onConfirm: S\n })\n ]\n }) : null;\n};\n\n\n\n\n\n\nvar js = (t)=>{\n for (let e of t){\n if (\"localized\" in e && e.localized) return !0;\n switch(e.type){\n case \"array\":\n case \"collapsible\":\n case \"group\":\n case \"row\":\n if (e.fields && js(e.fields)) return !0;\n break;\n case \"blocks\":\n if (e.blocks) {\n for (let o of e.blocks)if (o.fields && js(o.fields)) return !0;\n }\n break;\n case \"tabs\":\n if (e.tabs) {\n for (let o of e.tabs)if (\"localized\" in o && o.localized || \"fields\" in o && o.fields && js(o.fields)) return !0;\n }\n break;\n }\n }\n return !1;\n};\n\n\n\n\nvar hJ = ({ i18n: t, localization: e })=>e.locales.map((o)=>({\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(o.label, t),\n value: o.code\n })), dm = \"select-locales-drawer\", D6 = ({ slug: t, localization: e, onConfirm: o })=>{\n let { i18n: n, t: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { toggleModal: s } = ie(), [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>hJ({\n i18n: n,\n localization: e\n }), [\n e,\n n\n ]), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>a.map((p)=>p.value), [\n a\n ]), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_42__.setsAreEqual)(new Set(i), new Set(c)), [\n i,\n c\n ]), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n l(u ? [] : [\n ...c\n ]);\n }, [\n u,\n c\n ]), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((p)=>{\n l((h)=>h.includes(p) ? h.filter((g)=>g !== p) : [\n ...h,\n p\n ]);\n }, []), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n await o({\n selectedLocales: i\n }), s(t);\n }, [\n o,\n i,\n t,\n s\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(It, {\n className: dm,\n gutter: !1,\n Header: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(di, {\n onClose: ()=>{\n s(t);\n },\n title: `${r(\"general:duplicate\")} ${r(\"localization:selectedLocales\")}`\n }),\n slug: t,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${dm}__sub-header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: r(\"localization:selectLocaleToDuplicate\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"primary\",\n disabled: i.length === 0,\n iconPosition: \"left\",\n id: \"#action-duplicate-confirm\",\n onClick: m,\n size: \"medium\",\n children: r(\"general:duplicate\")\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${dm}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${dm}__item`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: u,\n id: \"select-locale-all\",\n label: r(\"general:selectAll\", {\n count: c.length,\n label: r(\"general:locales\")\n }),\n onToggle: d\n })\n }),\n a.map((p)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${dm}__item`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: i.includes(p.value),\n id: `select-locale-${p.value}`,\n label: p.label,\n onToggle: ()=>f(p.value)\n })\n }, p.value))\n ]\n })\n ]\n });\n};\nvar FC = ({ id: t, slug: e, onDuplicate: o, redirectAfterDuplicate: n = !0, selectLocales: r, singularLabel: s })=>{\n let i = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), l = po(), { openModal: a } = ie(), { code: c } = ye(), { setModified: u } = $e(), { startRouteTransition: d } = Ye(), { config: { localization: f, routes: { admin: m, api: p } }, getEntityConfig: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), g = h({\n collectionSlug: e\n }), { i18n: b, t: C } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), y = `duplicate-${t}`, v = `duplicate-locales-${t}`, x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>r && g ? js(g.fields) : !1, [\n g,\n r\n ]), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (S)=>{\n let { selectedLocales: R } = S || {}, D = R && R.length > 0, _ = {};\n c && (_.locale = c), D && (_.selectedLocales = R);\n let T = {\n \"Accept-Language\": b.language,\n \"Content-Type\": \"application/json\",\n credentials: \"include\"\n };\n try {\n let A = await Ge.post((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: p,\n path: `/${e}/${t}/duplicate${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(_, {\n addQueryPrefix: !0\n })}`\n }), {\n body: JSON.stringify((0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasDraftsEnabled)(g) ? {\n _status: \"draft\"\n } : {}),\n headers: T\n }), { doc: k, errors: P, message: E } = await A.json();\n if (A.status < 400) {\n if (ee.success(E || C(\"general:successfullyDuplicated\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s, b)\n })), u(!1), n) return d(()=>i.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: m,\n path: `/collections/${e}/${k.id}${c ? `?locale=${c}` : \"\"}`\n })));\n typeof o == \"function\" && o({\n collectionConfig: g,\n doc: k\n });\n } else ee.error(P?.[0].message || E || C(\"error:unspecific\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s, b)\n }));\n } catch {\n ee.error(C(\"error:unspecific\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s, b)\n }));\n }\n }, [\n m,\n p,\n g,\n b,\n t,\n c,\n o,\n n,\n i,\n u,\n s,\n e,\n d,\n C\n ]), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n r ? a(v) : await I();\n }, [\n I,\n v,\n r,\n a\n ]), F = r ? `${C(\"general:duplicate\")} ${C(\"localization:selectedLocales\")}` : C(\"general:duplicate\");\n return !r || x ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: `action-duplicate${x ? \"-locales\" : \"\"}`,\n onClick: ()=>{\n l ? a(y) : r ? a(v) : I();\n },\n children: F\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: C(\"general:unsavedChangesDuplicate\"),\n confirmLabel: C(\"general:duplicateWithoutSaving\"),\n heading: C(\"general:unsavedChanges\"),\n modalSlug: y,\n onConfirm: w\n }),\n r && f && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(D6, {\n localization: f,\n onConfirm: I,\n slug: v\n })\n ]\n }) : null;\n};\n_c248 = FC;\n\n\n\n\nvar Tg = ({ active: t = !0, className: e })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: [\n e,\n \"icon icon--eye\"\n ].filter(Boolean).join(\" \"),\n viewBox: \"0 0 16 12\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: t ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M2 11.5L4.35141 9.51035M15 0.5L12.6486 2.48965M10.915 6.64887C10.6493 7.64011 9.78959 8.38832 8.7408 8.48855M10.4085 4.38511C9.94992 3.84369 9.2651 3.5 8.5 3.5C7.11929 3.5 6 4.61929 6 6C6 6.61561 6.22251 7.17926 6.59149 7.61489M10.4085 4.38511L6.59149 7.61489M10.4085 4.38511L12.6486 2.48965M6.59149 7.61489L4.35141 9.51035M14.1292 3.92915C15.0431 5.02085 15.5 6 15.5 6C15.5 6 13.1667 11 8.5 11C7.67995 11 6.93195 10.8456 6.256 10.5911M4.35141 9.51035C2.45047 8.03672 1.5 6 1.5 6C1.5 6 3.83333 1 8.5 1C10.1882 1 11.5711 1.65437 12.6486 2.48965\"\n })\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"circle\", {\n className: \"stroke\",\n cx: \"8.5\",\n cy: \"6\",\n r: \"2.5\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M8.5 1C3.83333 1 1.5 6 1.5 6C1.5 6 3.83333 11 8.5 11C13.1667 11 15.5 6 15.5 6C15.5 6 13.1667 1 8.5 1Z\"\n })\n ]\n })\n });\n_c249 = Tg;\nvar L6 = \"live-preview-toggler\", k6 = ()=>{\n let { isLivePreviewing: t, setIsLivePreviewing: e, url: o } = ko(), { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n return o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": n(t ? \"general:exitLivePreview\" : \"general:livePreview\"),\n className: [\n L6,\n t && `${L6}--active`\n ].filter(Boolean).join(\" \"),\n id: \"live-preview-toggler\",\n onClick: ()=>{\n e(!t);\n },\n title: n(t ? \"general:exitLivePreview\" : \"general:livePreview\"),\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Tg, {\n active: t\n })\n }) : null;\n};\n\n\n\n\n\nvar $6 = ({ className: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n className: [\n \"icon icon--lock\",\n t\n ].filter(Boolean).join(\" \"),\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M7.5 9.5V7.5C7.5 6.83696 7.76339 6.20107 8.23223 5.73223C8.70107 5.26339 9.33696 5 10 5C10.663 5 11.2989 5.26339 11.7678 5.73223C12.2366 6.20107 12.5 6.83696 12.5 7.5V9.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeOpacity: \"1\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M13.5 9.5H6.5C5.94772 9.5 5.5 9.94772 5.5 10.5V14C5.5 14.5523 5.94772 15 6.5 15H13.5C14.0523 15 14.5 14.5523 14.5 14V10.5C14.5 9.94772 14.0523 9.5 13.5 9.5Z\",\n stopOpacity: \"1\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\nvar M6 = \"locked\", fm = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { className: o, user: n } = t, [r, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), l = ug(n) ? n.email ?? n.id : i(\"general:anotherUser\"), a;\n e[0] !== o ? (a = [\n M6,\n o\n ].filter(Boolean), e[0] = o, e[1] = a) : a = e[1];\n let c = a.join(\" \"), u, d;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (u = ()=>s(!0), d = ()=>s(!1), e[2] = u, e[3] = d) : (u = e[2], d = e[3]);\n let f = `${l} ${i(\"general:isEditing\")}`, m;\n return e[4] !== r || e[5] !== c || e[6] !== f ? (m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: c,\n onMouseEnter: u,\n onMouseLeave: d,\n role: \"button\",\n tabIndex: 0,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ro, {\n alignCaret: \"left\",\n className: `${M6}__tooltip`,\n position: \"top\",\n show: r,\n children: f\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($6, {})\n ]\n }), e[4] = r, e[5] = c, e[6] = f, e[7] = m) : m = e[7], m;\n};\n\n\n\n\n\n\nvar W6 = (t)=>{\n let { id: e, buttonId: o, collectionSlug: n, onDelete: r, redirectAfterDelete: s = !0, singularLabel: i, title: l } = t, { config: { routes: { admin: a, api: c }, serverURL: u }, getEntityConfig: d } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), f = d({\n collectionSlug: n\n }), m = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { i18n: p, t: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { title: g } = Ao(), { startRouteTransition: b } = Ye(), { openModal: C } = ie(), y = `perma-delete-${e}`, v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n ee.error(h(\"error:deletingTitle\", {\n title: g\n }));\n }, [\n h,\n g\n ]), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n try {\n let I = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: c,\n path: `/${n}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n trash: !0,\n where: {\n and: [\n {\n id: {\n equals: e\n }\n },\n {\n deletedAt: {\n exists: !0\n }\n }\n ]\n }\n }, {\n addQueryPrefix: !0\n })}`\n }), w = await Ge.delete(I, {\n headers: {\n \"Accept-Language\": p.language,\n \"Content-Type\": \"application/json\"\n }\n }), F = await w.json();\n if (w.status < 400) {\n if (ee.success(h(\"general:titleDeleted\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, p),\n title: g\n }) || F.message), s) return b(()=>m.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: a,\n path: `/collections/${n}/trash`,\n serverURL: u\n })));\n typeof r == \"function\" && await r({\n id: e,\n collectionConfig: f\n });\n return;\n }\n F.errors ? F.errors.forEach((S)=>ee.error(S.message)) : v();\n } catch {\n v();\n }\n }, [\n u,\n c,\n n,\n e,\n h,\n i,\n v,\n p,\n g,\n m,\n a,\n s,\n r,\n f,\n b\n ]);\n return e ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n id: o,\n onClick: ()=>{\n C(y);\n },\n children: h(\"general:permanentlyDelete\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: ({ children: I })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: I\n })\n },\n i18nKey: \"general:aboutToPermanentlyDelete\",\n t: h,\n variables: {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, p),\n title: l || g || e\n }\n }),\n confirmingLabel: h(\"general:deleting\"),\n heading: h(\"general:confirmDeletion\"),\n modalSlug: y,\n onConfirm: x\n })\n ]\n }) : null;\n};\n_c250 = W6;\n\n\n\n\n\nvar pm = (t)=>{\n let { className: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: [\n e,\n \"icon icon--externalLink\"\n ].filter(Boolean).join(\" \"),\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M16 10.6667V14.6667C16 15.0203 15.8595 15.3594 15.6095 15.6095C15.3594 15.8595 15.0203 16 14.6667 16H5.33333C4.97971 16 4.64057 15.8595 4.39052 15.6095C4.14048 15.3594 4 15.0203 4 14.6667V5.33333C4 4.97971 4.14048 4.64057 4.39052 4.39052C4.64057 4.14048 4.97971 4 5.33333 4H9.33333M16 4L10 10M16 4H12M16 4V8\",\n strokeLinecap: \"square\"\n })\n });\n};\nvar AJ = \"preview-btn\";\nfunction DC(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { previewURL: o } = _g(), { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n if (!o) return null;\n let r;\n return e[0] !== o || e[1] !== n ? (r = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"a\", {\n \"aria-label\": n(\"version:preview\"),\n className: AJ,\n href: o,\n id: \"preview-button\",\n target: \"_blank\",\n title: n(\"version:preview\"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pm, {})\n }), e[0] = o, e[1] = n, e[2] = r) : r = e[2], r;\n}\n_c251 = DC;\n\n\n\n\n\n\n\n\n\n\n\n\nvar Y6 = \"table\", RC = ({ appearance: t, BeforeTable: e, columns: o, data: n })=>{\n let r = o?.filter((s)=>s?.active);\n return !r || r.length === 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n children: \"No columns selected\"\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Y6,\n t && `${Y6}--appearance-${t}`\n ].filter(Boolean).join(\" \"),\n children: [\n e,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"table\", {\n cellPadding: \"0\",\n cellSpacing: \"0\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"thead\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tr\", {\n children: r.map((s, i)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"th\", {\n id: `heading-${s.accessor.replace(/\\./g, \"__\")}`,\n children: s.Heading\n }, i))\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tbody\", {\n children: n && n?.map((s, i)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tr\", {\n className: `row-${i + 1}`,\n \"data-id\": s.id,\n children: r.map((l, a)=>{\n let { accessor: c } = l;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"td\", {\n className: `cell-${c.replace(/\\./g, \"__\")}`,\n children: l.renderedCells[i]\n }, a);\n })\n }, typeof s.id == \"string\" || typeof s.id == \"number\" ? String(s.id) : i))\n })\n ]\n })\n ]\n });\n};\n\n\n\nvar Z6 = ({ dateFormat: t, deleteHandler: e, docs: o, i18n: n, localization: r, supportedTimezones: s, t: i })=>{\n let l = [\n {\n accessor: \"input.type\",\n active: !0,\n field: {\n name: \"\",\n type: \"text\"\n },\n Heading: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: i(\"version:type\")\n }),\n renderedCells: o.map((a)=>{\n let c = a.input?.type;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(yt, {\n pillStyle: c === \"publish\" ? \"success\" : \"warning\",\n size: \"small\",\n children: [\n c === \"publish\" && i(\"version:publish\"),\n c === \"unpublish\" && i(\"version:unpublish\")\n ]\n }, a.id);\n })\n },\n {\n accessor: \"waitUntil\",\n active: !0,\n field: {\n name: \"\",\n type: \"date\"\n },\n Heading: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: i(\"general:time\")\n }),\n renderedCells: o.map((a)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: Gr({\n date: a.waitUntil,\n i18n: n,\n pattern: t,\n timezone: a.input.timezone\n })\n }, a.id))\n },\n {\n accessor: \"input.timezone\",\n active: !0,\n field: {\n name: \"\",\n type: \"text\"\n },\n Heading: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: i(\"general:timezone\")\n }),\n renderedCells: o.map((a)=>{\n let u = s.find((d)=>d.value === a.input.timezone)?.label || a.input.timezone;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: u || i(\"general:noValue\")\n }, a.id);\n })\n }\n ];\n return r && l.push({\n accessor: \"input.locale\",\n active: !0,\n field: {\n name: \"\",\n type: \"text\"\n },\n Heading: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: i(\"general:locale\")\n }),\n renderedCells: o.map((a)=>{\n if (a.input.locale) {\n let c = r.locales.find((u)=>u.code === a.input.locale);\n if (c) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(c.label, n)\n }, a.id);\n }\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: i(\"general:all\")\n }, a.id);\n })\n }), l.push({\n accessor: \"delete\",\n active: !0,\n field: {\n name: \"delete\",\n type: \"text\"\n },\n Heading: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: i(\"general:delete\")\n }),\n renderedCells: o.map((a)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"icon-label\",\n className: \"schedule-publish__delete\",\n icon: \"x\",\n onClick: (c)=>{\n c.preventDefault(), e(a.id);\n },\n tooltip: i(\"general:delete\")\n }, a.id))\n }), l;\n};\n_c252 = Z6;\nvar pc = \"schedule-publish\", q6 = {\n label: \"All\",\n value: \"all\"\n}, K6 = ({ slug: t, defaultType: e, schedulePublishConfig: o })=>{\n _s70();\n let { toggleModal: n } = ie(), { config: { admin: { dateFormat: r, timezones: { defaultTimezone: s, supportedTimezones: i } }, localization: l, routes: { api: a } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { id: c, collectionSlug: u, globalSlug: d } = Se(), { title: f } = Ao(), { i18n: m, t: p } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { schedulePublish: h } = Nt(), [g, b] = react__WEBPACK_IMPORTED_MODULE_0__.useState(e || \"publish\"), [C, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [v, x] = react__WEBPACK_IMPORTED_MODULE_0__.useState(s), [I, w] = react__WEBPACK_IMPORTED_MODULE_0__.useState(q6), [F, S] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), R = p(\"general:schedulePublishFor\", {\n title: f\n }), [D, _] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), [T, A] = react__WEBPACK_IMPORTED_MODULE_0__.useState(), k = react__WEBPACK_IMPORTED_MODULE_0__.useRef({\n \"K6.useRef[k]\": ()=>null\n }[\"K6.useRef[k]\"]), P = Intl.DateTimeFormat().resolvedOptions().timeZone, E = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"K6.useMemo[E]\": ()=>{\n if (l) {\n let V = l.locales.map({\n \"K6.useMemo[E].V\": ({ code: W, label: Z })=>({\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(Z, m),\n value: W\n })\n }[\"K6.useMemo[E].V\"]);\n return V.unshift(q6), V;\n }\n return [];\n }\n }[\"K6.useMemo[E]\"], [\n l,\n m\n ]), B = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"K6.useCallback[B]\": async ()=>{\n let V = {\n sort: \"waitUntil\",\n where: {\n and: [\n {\n taskSlug: {\n equals: \"schedulePublish\"\n }\n },\n {\n waitUntil: {\n greater_than: new Date\n }\n }\n ]\n }\n };\n u && (V.where.and.push({\n \"input.doc.value\": {\n equals: String(c)\n }\n }), V.where.and.push({\n \"input.doc.relationTo\": {\n equals: u\n }\n })), d && V.where.and.push({\n \"input.global\": {\n equals: d\n }\n });\n let { docs: W } = await Ge.post((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: a,\n path: \"/payload-jobs\"\n }), {\n body: qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify(V),\n headers: {\n \"Accept-Language\": m.language,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Payload-HTTP-Method-Override\": \"GET\"\n }\n }).then({\n \"K6.useCallback[B]\": (Z)=>Z.json()\n }[\"K6.useCallback[B]\"]);\n A(Z6({\n dateFormat: r,\n deleteHandler: k.current,\n docs: W,\n i18n: m,\n localization: l,\n supportedTimezones: i,\n t: p\n })), _(W);\n }\n }[\"K6.useCallback[B]\"], [\n u,\n d,\n a,\n m,\n r,\n l,\n i,\n p,\n c\n ]), $ = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"K6.useCallback[$]\": async (V)=>{\n try {\n await h({\n deleteID: V\n }), await B(), ee.success(p(\"general:deletedSuccessfully\"));\n } catch (W) {\n console.error(W), ee.error(W.message);\n }\n }\n }[\"K6.useCallback[$]\"], [\n B,\n h,\n p\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"K6.useEffect\": ()=>{\n k.current = $;\n }\n }[\"K6.useEffect\"], [\n $\n ]);\n let M = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"K6.useCallback[M]\": async ()=>{\n if (!C) return ee.error(p(\"general:noDateSelected\"));\n S(!0);\n let V;\n typeof I == \"object\" && I.value !== \"all\" && g === \"publish\" && (V = I.value);\n try {\n await h({\n type: g,\n date: C,\n doc: u ? {\n relationTo: u,\n value: String(c)\n } : void 0,\n global: d || void 0,\n localeToPublish: V,\n timezone: v\n }), y(void 0), ee.success(p(\"version:scheduledSuccessfully\")), B();\n } catch (W) {\n console.error(W), ee.error(W.message);\n }\n S(!1);\n }\n }[\"K6.useCallback[M]\"], [\n C,\n I,\n g,\n p,\n h,\n u,\n c,\n d,\n v,\n B\n ]), L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n if (v && P && C) {\n let V = no.tz(v), W = no.tz(P), Z = new no(C).withTimeZone(v), z = cn(Z, V);\n return cn(z, W).toISOString();\n }\n return C;\n }, [\n v,\n C,\n P\n ]), j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((V)=>{\n if (v && V) {\n let W = no.tz(v), Z = new no(V), z = cn(Z, W);\n y(z || null);\n } else y(V || null);\n }, [\n y,\n v\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"K6.useEffect\": ()=>{\n D || ({\n \"K6.useEffect\": async ()=>await B()\n })[\"K6.useEffect\"]();\n }\n }[\"K6.useEffect\"], [\n D,\n B\n ]);\n let O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>C && Z3(C) ? new Date : qs(new Date), [\n C\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(It, {\n className: pc,\n gutter: !1,\n Header: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${pc}__drawer-header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h2\", {\n title: R,\n children: R\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vh, {\n onClick: ()=>n(t)\n })\n ]\n }),\n slug: t,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${pc}__scheduler`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: p(\"version:type\"),\n required: !0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"ul\", {\n className: `${pc}__type`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ed, {\n id: `${t}-type`,\n isSelected: g === \"publish\",\n onChange: ()=>b(\"publish\"),\n option: {\n label: p(\"version:publish\"),\n value: \"publish\"\n },\n path: `${t}-type`,\n readOnly: F\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ed, {\n id: `${t}-type`,\n isSelected: g === \"unpublish\",\n onChange: ()=>b(\"unpublish\"),\n option: {\n label: p(\"version:unpublish\"),\n value: \"unpublish\"\n },\n path: `${t}-type`,\n readOnly: F\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"br\", {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: p(\"general:time\"),\n path: \"time\",\n required: !0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Cl, {\n id: \"time\",\n maxTime: L3(),\n minDate: new Date,\n minTime: O,\n onChange: (V)=>j(V),\n pickerAppearance: \"dayAndTime\",\n readOnly: F,\n timeFormat: o?.timeFormat,\n timeIntervals: o?.timeIntervals ?? 5,\n value: L\n }),\n i.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ku, {\n id: \"timezone-picker\",\n onChange: x,\n options: i,\n selectedTimezone: v\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"br\", {}),\n E.length > 0 && g === \"publish\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: p(\"localization:localeToPublish\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n onChange: (V)=>w(V),\n options: E,\n value: I\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"br\", {})\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${pc}__actions`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"primary\",\n disabled: F,\n id: \"scheduled-publish-save\",\n onClick: M,\n type: \"button\",\n children: p(\"general:save\")\n }),\n F ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: p(\"general:saving\")\n }) : null\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${pc}__upcoming`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h4\", {\n children: p(\"general:upcomingEvents\")\n }),\n !D && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {}),\n D?.length === 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sn, {\n type: \"info\",\n children: p(\"general:noUpcomingEventsScheduled\")\n }),\n D?.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(RC, {\n appearance: \"condensed\",\n columns: T,\n data: D\n })\n ]\n })\n ]\n });\n};\n_s70(K6, \"NfZ+aBplrJbUs0FjgFr8Qe3G47Y=\");\nfunction EC({ label: t } = {}) {\n _s71();\n let { id: e, collectionSlug: o, globalSlug: n, hasPublishedDoc: r, hasPublishPermission: s, setHasPublishedDoc: i, setMostRecentVersionIsAutosaved: l, setUnpublishedVersionCount: a, unpublishedVersionCount: c, uploadStatus: u } = Se(), { config: d, getEntityConfig: f } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { submit: m } = $e(), p = po(), h = ct(), { code: g } = ye(), { isModalOpen: b, toggleModal: C } = ie(), y = `schedule-publish-${e}`, { localization: v, routes: { api: x } } = d, { i18n: I, t: w } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), F = t || w(\"version:publishChanges\"), S = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"EC.useMemo[S]\": ()=>{\n if (o) return f({\n collectionSlug: o\n });\n if (n) return f({\n globalSlug: n\n });\n }\n }[\"EC.useMemo[S]\"], [\n o,\n n,\n f\n ]), R = c > 0, D = s && (p || R || !r) && u !== \"uploading\", _ = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasScheduledPublishEnabled)(S), T = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasAutosaveEnabled)(S), A = !!(_ && s && (n || o && e) && (T || !p)), [k, P] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let z = js(S?.fields);\n P(z);\n }, [\n S?.fields\n ]);\n let E = v && k && s, $ = Cr() === \"update\" && !p, M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n if ($) return;\n let z = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n draft: !0,\n \"fallback-locale\": \"null\",\n locale: g\n }, {\n addQueryPrefix: !0\n }), Q, U = \"POST\";\n o && (Q = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: x,\n path: `/${o}${e ? `/${e}` : \"\"}${z}`\n }), e && (U = \"PATCH\")), n && (Q = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: x,\n path: `/globals/${n}${z}`\n })), await m({\n action: Q,\n method: U,\n overrides: {\n _status: \"draft\"\n },\n skipValidation: !0\n });\n }, [\n $,\n g,\n o,\n n,\n m,\n x,\n e\n ]);\n Ta({\n cmdCtrlKey: !0,\n editDepth: h,\n keyCodes: [\n \"s\"\n ]\n }, (z)=>{\n z.preventDefault(), z.stopPropagation(), M && T && M();\n });\n let L = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasLocalizeStatusEnabled)(S), j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n if (u === \"uploading\") return;\n let z = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n locale: g,\n ...L && {\n publishAllLocales: !0\n }\n }, {\n addQueryPrefix: !0\n }), Q = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: x,\n path: `${n ? `/globals/${n}` : `/${o}${e ? `/${e}` : \"\"}`}${z}`\n });\n await m({\n action: Q,\n overrides: {\n _status: \"published\"\n }\n }) && (a(0), l(!1), i(!0));\n }, [\n g,\n L,\n x,\n o,\n n,\n e,\n i,\n m,\n a,\n u,\n l\n ]), O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (z)=>{\n if (u === \"uploading\") return;\n let Q = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n locale: z,\n publishSpecificLocale: z\n }, {\n addQueryPrefix: !0\n }), U = n ? `/globals/${n}` : `/${o}${e ? `/${e}` : \"\"}`, X = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: x,\n path: `${U}${Q}`\n });\n await m({\n action: X,\n overrides: {\n _status: \"published\"\n }\n }) && (a(0), l(!1), i(!0));\n }, [\n x,\n o,\n n,\n e,\n i,\n l,\n a,\n m,\n u\n ]), V = !E || v && v?.defaultLocalePublishOption !== \"active\", W = v && v?.locales.find((z)=>typeof z == \"string\" ? z === g : z.code === g), Z = W && (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(W.label, I);\n return s ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dr, {\n buttonId: \"action-save\",\n disabled: !D,\n enableSubMenu: A,\n onClick: V ? j : ()=>O(W.code),\n size: \"medium\",\n SubMenuPopupContent: E || A ? ({ close: z })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n A && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: \"schedule-publish\",\n onClick: ()=>[\n C(y),\n z()\n ],\n children: w(\"version:schedulePublish\")\n })\n }, \"schedule-publish\"),\n E && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: \"publish-locale\",\n onClick: V ? ()=>O(W.code) : j,\n children: V ? w(\"version:publishIn\", {\n locale: Z\n }) : w(\"version:publishAllLocales\")\n })\n })\n ]\n }) : void 0,\n type: \"button\",\n children: V ? F : w(\"version:publishIn\", {\n locale: Z\n })\n }),\n A && b(y) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(K6, {\n defaultType: R ? \"publish\" : \"unpublish\",\n schedulePublishConfig: _ && typeof S.versions.drafts.schedulePublish == \"object\" ? S.versions.drafts.schedulePublish : void 0,\n slug: y\n })\n ]\n }) : null;\n}\n_s71(EC, \"avqu2mOYwjflJUpYMg+eQLKCL/Q=\");\n_c253 = EC;\n\n\n\n\n\n\nvar i4 = \"restore-button\", l4 = (t)=>{\n let { id: e, buttonId: o, collectionSlug: n, onRestore: r, redirectAfterRestore: s = !0, singularLabel: i, title: l } = t, { config: { routes: { admin: a, api: c }, serverURL: u }, getEntityConfig: d } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), f = d({\n collectionSlug: n\n }), m = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { i18n: p, t: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { title: g } = Ao(), { startRouteTransition: b } = Ye(), { openModal: C } = ie(), y = `restore-${e}`, [v, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n ee.error(h(\"error:restoringTitle\", {\n title: g\n }));\n }, [\n h,\n g\n ]), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n try {\n let F = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: c,\n path: `/${n}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n trash: !0,\n where: {\n and: [\n {\n id: {\n equals: e\n }\n },\n {\n deletedAt: {\n exists: !0\n }\n }\n ]\n }\n }, {\n addQueryPrefix: !0\n })}`\n }), S = {\n deletedAt: null\n };\n f?.versions?.drafts && (S._status = v ? \"published\" : \"draft\");\n let R = await Ge.patch(F, {\n body: JSON.stringify(S),\n headers: {\n \"Accept-Language\": p.language,\n \"Content-Type\": \"application/json\"\n }\n }), D = await R.json();\n if (R.status < 400) {\n if (ee.success(h(\"general:titleRestored\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, p),\n title: g\n }) || D.message), s) return b(()=>m.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: a,\n path: `/collections/${n}/${e}`,\n serverURL: u\n })));\n typeof r == \"function\" && await r({\n id: e,\n collectionConfig: f\n });\n return;\n }\n D.errors ? D.errors.forEach((_)=>ee.error(_.message)) : I();\n } catch {\n I();\n }\n }, [\n u,\n c,\n n,\n e,\n h,\n i,\n I,\n p,\n g,\n m,\n a,\n s,\n r,\n f,\n b,\n v\n ]);\n return e ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"primary\",\n id: o,\n onClick: ()=>{\n C(y);\n },\n children: h(\"general:restore\")\n }, o),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: ({ children: F })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: F\n })\n },\n i18nKey: f?.versions?.drafts ? \"general:aboutToRestoreAsDraft\" : \"general:aboutToRestore\",\n t: h,\n variables: {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, p),\n title: l || g || e\n }\n }),\n f?.versions?.drafts && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${i4}__checkbox`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: v,\n id: \"restore-as-published\",\n label: h(\"general:restoreAsPublished\"),\n name: \"restore-as-published\",\n onToggle: (F)=>x(F.target.checked)\n })\n })\n ]\n }),\n className: i4,\n confirmingLabel: h(\"general:restoring\"),\n heading: h(\"general:confirmRestoration\"),\n modalSlug: y,\n onConfirm: w\n })\n ]\n }) : null;\n};\n\n\nfunction NC({ label: t }) {\n let { uploadStatus: e } = Se(), { t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { submit: n } = $e(), r = po(), s = t || o(\"general:save\"), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), l = ct(), c = Cr() === \"update\" && !r || e === \"uploading\";\n return Ta({\n cmdCtrlKey: !0,\n editDepth: l,\n keyCodes: [\n \"s\"\n ]\n }, (d)=>{\n d.preventDefault(), d.stopPropagation(), i?.current && i.current.click();\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dr, {\n buttonId: \"action-save\",\n disabled: c,\n onClick: ()=>{\n e !== \"uploading\" && n();\n },\n ref: i,\n size: \"medium\",\n type: \"button\",\n children: s\n });\n}\n_c254 = NC;\n\n\n\nvar ZJ = \"save-draft\";\nfunction LC(t) {\n let { config: { routes: { api: e } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { id: o, collectionSlug: n, globalSlug: r, setUnpublishedVersionCount: s, uploadStatus: i } = Se(), l = po(), { code: a } = ye(), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), u = ct(), { t: d } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { submit: f } = $e(), p = Cr() === \"update\" && !l || i === \"uploading\", h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n if (p) return;\n let g = `?locale=${a}&depth=0&fallback-locale=null&draft=true`, b, C = \"POST\";\n n && (b = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: e,\n path: `/${n}${o ? `/${o}` : \"\"}${g}`\n }), o && (C = \"PATCH\")), r && (b = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: e,\n path: `/globals/${r}${g}`\n })), await f({\n action: b,\n method: C,\n overrides: {\n _status: \"draft\"\n },\n skipValidation: !0\n }), s((y)=>y + 1);\n }, [\n f,\n n,\n r,\n e,\n a,\n o,\n p,\n s\n ]);\n return Ta({\n cmdCtrlKey: !0,\n editDepth: u,\n keyCodes: [\n \"s\"\n ]\n }, (g)=>{\n g.preventDefault(), g.stopPropagation(), c?.current && c.current.click();\n }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dr, {\n buttonId: \"action-save-draft\",\n buttonStyle: \"secondary\",\n className: ZJ,\n disabled: p,\n onClick: ()=>{\n h();\n },\n ref: c,\n size: \"medium\",\n type: \"button\",\n children: d(\"version:saveDraft\")\n });\n}\n_c255 = LC;\n\n\n\nvar hm = \"status\", d4 = ()=>{\n let { id: t, collectionSlug: e, docPermissions: o, globalSlug: n, hasPublishedDoc: r, incrementVersionCount: s, isTrashed: i, setMostRecentVersionIsAutosaved: l, setUnpublishedVersionCount: a, unpublishedVersionCount: c } = Se(), { toggleModal: u } = ie(), { config: { routes: { api: d } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { reset: f } = $e(), { code: m } = ye(), { i18n: p, t: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), g = `confirm-revert-${t}`, b;\n c > 0 && r ? b = \"changed\" : r ? r && c <= 0 && (b = \"published\") : b = \"draft\";\n let C = i ? r ? \"previouslyPublished\" : \"previouslyDraft\" : b, y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n let x, I;\n e && (x = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/${e}/${t}?locale=${m}&fallback-locale=null&depth=0`\n }), I = \"patch\"), n && (x = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/globals/${n}?locale=${m}&fallback-locale=null&depth=0`\n }), I = \"post\");\n let F = await Ge.get(x, {\n headers: {\n \"Accept-Language\": p.language,\n \"Content-Type\": \"application/json\"\n }\n }).then((R)=>R.json()), S = await Ge[I](x, {\n body: JSON.stringify(F),\n headers: {\n \"Accept-Language\": p.language,\n \"Content-Type\": \"application/json\"\n }\n });\n if (S.status === 200) {\n let R, D = await S.json();\n n ? R = D.result : e && (R = D.doc), f(R), ee.success(D.message), s(), l(!1), a(0);\n } else try {\n let R = await S.json();\n R.errors?.[0]?.message ? ee.error(R.errors[0].message) : R.error ? ee.error(R.error) : ee.error(h(\"error:revertingDocument\"));\n } catch {\n ee.error(h(\"error:revertingDocument\"));\n }\n }, [\n d,\n e,\n n,\n t,\n p.language,\n s,\n m,\n f,\n a,\n l,\n h\n ]), v = o?.update;\n return b ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: hm,\n title: `${h(\"version:status\")}: ${h(`version:${C}`)}`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${hm}__value-wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: `${hm}__label`,\n children: [\n h(\"version:status\"),\n \":\\xA0\"\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${hm}__value`,\n children: h(`version:${C}`)\n }),\n !i && v && r && b === \"changed\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n \"\\xA0\\u2014\\xA0\",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"none\",\n className: `${hm}__action`,\n id: \"action-revert-to-published\",\n onClick: ()=>u(g),\n children: h(\"version:revertToPublished\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: h(\"version:aboutToRevertToPublished\"),\n confirmingLabel: h(\"version:reverting\"),\n heading: h(\"version:confirmRevertToSaved\"),\n modalSlug: g,\n onConfirm: ()=>y()\n })\n ]\n })\n ]\n })\n }) : null;\n};\n\n\n\n\n\nfunction $C({ label: t } = {}) {\n _s72();\n let { id: e, collectionSlug: o, data: n, globalSlug: r, hasPublishedDoc: s, hasPublishPermission: i, incrementVersionCount: l, isTrashed: a, setHasPublishedDoc: c, setMostRecentVersionIsAutosaved: u, setUnpublishedVersionCount: d } = Se(), { toggleModal: f } = ie(), { config: m, getEntityConfig: p } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { reset: h } = $e(), { code: g, label: b } = ye(), [C, y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [v, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), I = `confirm-un-publish-${e}`, { routes: { api: w }, serverURL: F } = m, { i18n: S, t: R } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), D = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"$C.useMemo[D]\": ()=>{\n if (o) return p({\n collectionSlug: o\n });\n if (r) return p({\n globalSlug: r\n });\n }\n }[\"$C.useMemo[D]\"], [\n o,\n r,\n p\n ]), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((B)=>{\n (async ()=>{\n let $, M, L = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n \"fallback-locale\": \"null\",\n locale: B ? void 0 : g,\n unpublishAllLocales: B\n }, {\n addQueryPrefix: !0\n });\n o && ($ = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: w,\n path: `/${o}/${e}${L}`,\n serverURL: F\n }), M = \"patch\"), r && ($ = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: w,\n path: `/globals/${r}${L}`,\n serverURL: F\n }), M = \"post\");\n try {\n let j = await Ge[M]($, {\n body: JSON.stringify({\n _status: \"draft\"\n }),\n headers: {\n \"Accept-Language\": S.language,\n \"Content-Type\": \"application/json\"\n }\n });\n if (j.status === 200) h({\n ...n || {},\n _status: \"draft\"\n }), ee.success(R(\"version:unpublishedSuccessfully\")), l(), d(1), u(!1), c(!1);\n else try {\n let O = await j.json();\n O.errors?.[0]?.message ? ee.error(O.errors[0].message) : O.error ? ee.error(O.error) : ee.error(R(\"error:unPublishingDocument\"));\n } catch {\n ee.error(R(\"error:unPublishingDocument\"));\n }\n } catch {\n ee.error(R(\"error:unPublishingDocument\"));\n }\n })().catch(()=>{\n ee.error(R(\"error:unPublishingDocument\"));\n });\n }, [\n n,\n h,\n o,\n r,\n F,\n w,\n g,\n e,\n S.language,\n l,\n c,\n u,\n d,\n R\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let B = js(D?.fields);\n x(B);\n }, [\n D?.fields\n ]);\n let T = D?.versions?.drafts, A = typeof T == \"object\" && T !== null, k = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"$C.useMemo[k]\": ()=>A && i && s && !a\n }[\"$C.useMemo[k]\"], [\n i,\n s,\n a,\n A\n ]), P = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"$C.useMemo[P]\": ()=>{\n if (!k || !v) return !1;\n let B = T && T.localizeStatus === !0, $ = m.experimental?.localizeStatus === !0;\n return B && $;\n }\n }[\"$C.useMemo[P]\"], [\n k,\n v,\n T,\n m.experimental?.localizeStatus\n ]), E = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(b, S);\n return k ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: \"action-unpublish\",\n onClick: ()=>{\n y(!0), f(I);\n },\n children: t || R(\"version:unpublish\")\n }),\n P && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: \"action-unpublish-locale\",\n onClick: ()=>{\n y(!1), f(I);\n },\n children: t ? `${t} [${E}]` : R(\"version:unpublishIn\", {\n locale: E\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: C ? R(\"version:aboutToUnpublish\") : R(\"version:aboutToUnpublishIn\", {\n locale: E\n }),\n confirmingLabel: R(\"version:unpublishing\"),\n heading: R(\"version:confirmUnpublish\"),\n modalSlug: I,\n onConfirm: ()=>_(C)\n })\n ]\n }) : null;\n}\n_s72($C, \"HAsZrZLgwOJyIHgTiFtq0wtEAY4=\");\nvar Wt = \"doc-controls\", MC = (t)=>{\n _s73();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { id: o, slug: n, BeforeDocumentControls: r, customComponents: s, data: i, disableActions: l, disableCreate: a, EditMenuItems: c, hasSavePermission: u, isAccountView: d, isEditing: f, isInDrawer: m, isTrashed: p, onDelete: h, onDrawerCreateNew: g, onDuplicate: b, onRestore: C, onTakeOver: y, permissions: v, readOnlyForIncomingUser: x, redirectAfterDelete: I, redirectAfterDuplicate: w, redirectAfterRestore: F, user: S } = t, { PreviewButton: R, PublishButton: D, SaveButton: _, SaveDraftButton: T, Status: A, UnpublishButton: k } = s === void 0 ? {} : s, { i18n: P, t: E } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), B = ct(), { config: $, getEntityConfig: M } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), L = M({\n collectionSlug: n\n }), j = M({\n globalSlug: n\n }), { isLivePreviewEnabled: O } = ko(), { hasDeletePermission: V, hasTrashPermission: W } = Se(), { admin: Z, localization: z, routes: Q } = $, { dateFormat: U } = Z, { admin: X } = Q, [ue, q] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\"\"), [J, Y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\"\"), le = Mr(), xe = Ei(), _e, Be;\n e[0] !== i || e[1] !== U || e[2] !== P ? (_e = ()=>{\n i?.updatedAt && q(Gr({\n date: i.updatedAt,\n i18n: P,\n pattern: U\n })), i?.createdAt && Y(Gr({\n date: i.createdAt,\n i18n: P,\n pattern: U\n }));\n }, Be = [\n i,\n P,\n U\n ], e[0] = i, e[1] = U, e[2] = P, e[3] = _e, e[4] = Be) : (_e = e[3], Be = e[4]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(_e, Be);\n let Me = v && \"create\" in v && v.create, Ue = v && \"delete\" in v && v.delete, he = L?.trash ? W || V : Ue, Oe = !!(L && o && !l && (Me || he)), Ke = !o && L?.versions?.drafts && L.versions?.drafts.validate, ae = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasDraftsEnabled)(j), we = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasDraftsEnabled)(L), G = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasAutosaveEnabled)(L), se = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasAutosaveEnabled)(j), K = G || se, fe = G && L.versions.drafts.autosave !== !1 && L.versions.drafts.autosave.showSaveDraftButton === !0 || se && j.versions.drafts.autosave !== !1 && j.versions.drafts.autosave.showSaveDraftButton === !0, me = z && !L?.admin?.disableCopyToLocale, ne = L && L.folders, te = S && x;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: Wt,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Wt}__wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Wt}__content`,\n children: [\n te || ne ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Wt}__meta-icons`,\n children: [\n te && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fm, {\n className: `${Wt}__locked-controls`,\n user: S\n }),\n ne && $.folders && !p && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Td, {\n folderCollectionSlug: $.folders.slug,\n folderFieldName: $.folders.fieldName\n })\n ]\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"ul\", {\n className: `${Wt}__meta`,\n children: [\n L && !f && !d && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n className: `${Wt}__list-item`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${Wt}__value`,\n children: P.t(\"general:creatingNewLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(L?.labels?.singular ?? P.t(\"general:document\"), P)\n })\n })\n }),\n (we || ae) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (j || L && f) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n className: [\n `${Wt}__status`,\n `${Wt}__list-item`\n ].filter(Boolean).join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: A,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(d4, {})\n })\n }),\n u && K && !Ke && !p && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n className: `${Wt}__list-item`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(C6, {\n collection: L,\n global: j,\n id: o,\n publishedDocUpdatedAt: i?.createdAt\n })\n })\n ]\n }),\n L?.timestamps && (f || d) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n className: [\n `${Wt}__list-item`,\n `${Wt}__value-wrap`\n ].filter(Boolean).join(\" \"),\n title: i?.updatedAt ? ue : \"\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n className: `${Wt}__label`,\n children: [\n P.t(p ? \"general:deleted\" : \"general:lastModified\"),\n \":\\xA0\"\n ]\n }),\n i?.updatedAt && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${Wt}__value`,\n children: ue\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n className: [\n `${Wt}__list-item`,\n `${Wt}__value-wrap`\n ].filter(Boolean).join(\" \"),\n title: i?.createdAt ? J : \"\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"p\", {\n className: `${Wt}__label`,\n children: [\n P.t(\"general:created\"),\n \":\\xA0\"\n ]\n }),\n i?.createdAt && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${Wt}__value`,\n children: J\n })\n ]\n })\n ]\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Wt}__controls-wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Wt}__controls`,\n children: [\n r,\n O && !m && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(k6, {}),\n (L?.admin.preview || j?.admin.preview) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: R,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(DC, {})\n }),\n u && !p && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: we || ae ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (Ke || !K || K && fe) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: T,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(LC, {})\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: D,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(EC, {})\n })\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: _,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(NC, {})\n })\n }),\n V && p && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(W6, {\n buttonId: \"action-permanently-delete\",\n collectionSlug: L?.slug,\n id: o.toString(),\n onDelete: h,\n redirectAfterDelete: I,\n singularLabel: L?.labels?.singular\n }),\n u && p && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(l4, {\n buttonId: \"action-restore\",\n collectionSlug: L?.slug,\n id: o.toString(),\n onRestore: C,\n redirectAfterRestore: F,\n singularLabel: L?.labels?.singular\n }),\n S && x && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n id: \"take-over\",\n onClick: y,\n size: \"medium\",\n type: \"button\",\n children: E(\"general:takeOver\")\n })\n ]\n }),\n Oe && !x && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Wt}__dots`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {})\n ]\n }),\n className: `${Wt}__popup`,\n disabled: xe || le,\n horizontalAlign: \"right\",\n size: \"large\",\n verticalAlign: \"bottom\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.ButtonGroup, {\n children: [\n me && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fC, {}),\n Me && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n !a && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: B > 1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n id: \"action-create\",\n onClick: g,\n children: P.t(\"general:createNew\")\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n href: (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: X,\n path: `/collections/${L?.slug}/create`\n }),\n id: \"action-create\",\n children: P.t(\"general:createNew\")\n })\n }),\n L.disableDuplicate !== !0 && f && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(FC, {\n id: o,\n onDuplicate: b,\n redirectAfterDuplicate: w,\n singularLabel: L?.labels?.singular,\n slug: L?.slug\n }),\n z && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(FC, {\n id: o,\n onDuplicate: b,\n redirectAfterDuplicate: w,\n selectLocales: !0,\n singularLabel: L?.labels?.singular,\n slug: L?.slug\n })\n ]\n })\n ]\n }),\n he && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(F6, {\n buttonId: \"action-delete\",\n collectionSlug: L?.slug,\n id: o.toString(),\n onDelete: h,\n redirectAfterDelete: I,\n singularLabel: L?.labels?.singular,\n useAsTitle: L?.admin?.useAsTitle\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: k,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($C, {})\n }),\n c\n ]\n })\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Wt}__divider`\n })\n ]\n });\n};\n_s73(MC, \"jI55up6Ul71zBBdlwigoOyxQXEs=\");\n\n\nvar b4 = /^<(?[^\\s/>]+)[^>]*>$/, v4 = /^<(?\\/)?(?[^\\s>]+)[^>]*>$/, OC = /^<[^>]+>/, aq = /^]*>$/, y4 = /^]*>.*?<\\/video>$/ms, Eg = class {\n constructor(e, o, { classNames: n = {\n createBlock: \"html-diff-create-block-wrapper\",\n createInline: \"html-diff-create-inline-wrapper\",\n deleteBlock: \"html-diff-delete-block-wrapper\",\n deleteInline: \"html-diff-delete-inline-wrapper\"\n }, greedyBoundary: r = 1e3, greedyMatch: s = !0, minMatchedSize: i = 2, tokenizeByCharacter: l = !1 } = {}){\n this.leastCommonLength = 1 / 0;\n this.matchedBlockList = [];\n this.newTokens = [];\n this.oldTokens = [];\n this.operationList = [];\n if (this.config = {\n classNames: {\n createBlock: \"html-diff-create-block-wrapper\",\n createInline: \"html-diff-create-inline-wrapper\",\n deleteBlock: \"html-diff-delete-block-wrapper\",\n deleteInline: \"html-diff-delete-inline-wrapper\",\n ...n\n },\n greedyBoundary: r,\n greedyMatch: s,\n minMatchedSize: i\n }, e = e.trim(), o = o.trim(), e === o) {\n this.unifiedContent = e;\n let c = 0, u = e.replace(/<([^\\s/>]+)[^>]*>/g, (d, f)=>{\n let m = f.length + 1;\n return `${d.slice(0, m)} data-seq=\"${++c}\"${d.slice(m)}`;\n });\n this.sideBySideContents = [\n u,\n u\n ];\n return;\n }\n let a = l ? this.tokenizeByCharacter : this.tokenizeByWord;\n this.oldTokens = a(e), this.newTokens = a(o), this.matchedBlockList = this.getMatchedBlockList(), this.operationList = this.getOperationList();\n }\n computeBestMatchedBlock(e, o, n, r) {\n let s = null;\n for(let i = e; i < o; i++){\n let l = Math.min(o - i, r - n), a = this.slideBestMatchedBlock(i, n, l);\n if (a && (!s || a.size > s.size) && (s = a, a.size > this.leastCommonLength)) return s;\n }\n for(let i = n; i < r; i++){\n let l = Math.min(o - e, r - i), a = this.slideBestMatchedBlock(e, i, l);\n if (a && (!s || a.size > s.size) && (s = a, a.size > this.leastCommonLength)) return s;\n }\n return s;\n }\n computeMatchedBlockList(e, o, n, r, s = []) {\n let i = this.computeBestMatchedBlock(e, o, n, r);\n return i ? (e < i.oldStart && n < i.newStart && this.computeMatchedBlockList(e, i.oldStart, n, i.newStart, s), s.push(i), o > i.oldEnd && r > i.newEnd && this.computeMatchedBlockList(i.oldEnd, o, i.newEnd, r, s), s) : [];\n }\n dressUpBlockTag(e, o) {\n return e === \"create\" ? `
${o}
` : e === \"delete\" ? `
${o}
` : \"\";\n }\n dressUpDiffContent(e, o) {\n let n = o.length;\n if (!n) return \"\";\n let r = \"\", s = 0, i = -1;\n for (let l of o){\n i++;\n let a = l.includes('data-enable-match=\"true\"'), c = l.includes('data-enable-match=\"false\"'), u = !!l.match(OC)?.length;\n if (c) s = i + 1, r += l;\n else if (!a && u) i > s && (r += this.dressUpText(e, o.slice(s, i))), s = i + 1, l.match(y4) ? r += this.dressUpBlockTag(e, l) : r += l;\n else if (a && u) {\n i > s && (r += this.dressUpText(e, o.slice(s, i))), s = i + 1;\n let d = this.dressupMatchEnabledHtmlTag(e, l);\n r += d;\n }\n }\n return s < n && (r += this.dressUpText(e, o.slice(s))), r;\n }\n dressUpInlineTag(e, o) {\n return e === \"create\" ? `${o}` : e === \"delete\" ? `${o}` : \"\";\n }\n dressupMatchEnabledHtmlTag(e, o) {\n let n = o.match(b4)?.groups?.name;\n if (!n) return o;\n let r = n.length + 1, s = e === \"create\" ? \"create\" : \"delete\";\n return `${o.slice(0, r)} data-match-type=\"${s}\"${o.slice(r, o.length)}`;\n }\n dressUpText(e, o) {\n let n = o.join(\"\");\n return n.trim() ? e === \"create\" ? `${n}` : e === \"delete\" ? `${n}` : \"\" : \"\";\n }\n getMatchedBlockList() {\n let e = this.oldTokens.length, o = this.newTokens.length, n = null, r = 0;\n for(; r < e && r < o && this.oldTokens[r] === this.newTokens[r];)r++;\n r >= this.config.minMatchedSize && (n = {\n newEnd: r,\n newStart: 0,\n oldEnd: r,\n oldStart: 0,\n size: r\n });\n let s = null, i = e - 1, l = o - 1;\n for(; r <= i && r <= l && this.oldTokens[i] === this.newTokens[l];)i--, l--;\n let a = e - 1 - i;\n a >= this.config.minMatchedSize && (s = {\n newEnd: o,\n newStart: l + 1,\n oldEnd: e,\n oldStart: i + 1,\n size: a\n });\n let c = n ? r : 0, u = s ? i + 1 : e, d = n ? r : 0, f = s ? l + 1 : o;\n if (this.config.greedyMatch) {\n let p = Math.min(u - c, f - d);\n p > this.config.greedyBoundary && (this.leastCommonLength = Math.floor(p / 3));\n }\n let m = this.computeMatchedBlockList(c, u, d, f);\n return n && m.unshift(n), s && m.push(s), m;\n }\n getOperationList() {\n let e = [], o = 0, n = 0;\n for (let c of this.matchedBlockList){\n let u = o === c.oldStart, d = n === c.newStart, f = {\n newEnd: c.newStart,\n newStart: n,\n oldEnd: c.oldStart,\n oldStart: o\n };\n !u && !d ? e.push(Object.assign(f, {\n type: \"replace\"\n })) : u && !d ? e.push(Object.assign(f, {\n type: \"create\"\n })) : !u && d && e.push(Object.assign(f, {\n type: \"delete\"\n })), e.push({\n type: \"equal\",\n newEnd: c.newEnd,\n newStart: c.newStart,\n oldEnd: c.oldEnd,\n oldStart: c.oldStart\n }), o = c.oldEnd, n = c.newEnd;\n }\n let r = this.oldTokens.length, s = this.newTokens.length, i = {\n newEnd: s,\n newStart: n,\n oldEnd: r,\n oldStart: o\n }, l = o === r, a = n === s;\n return !l && !a ? e.push(Object.assign(i, {\n type: \"replace\"\n })) : l && !a ? e.push(Object.assign(i, {\n type: \"create\"\n })) : !l && a && e.push(Object.assign(i, {\n type: \"delete\"\n })), e;\n }\n slideBestMatchedBlock(e, o, n) {\n let r = 0, s = null, i = 0;\n for(let l = 0; l < n; l++)this.oldTokens[e + l] === this.newTokens[o + l] ? i++ : i = 0, i > r && (r = i, s = {\n newEnd: o + l + 1,\n newStart: o + l - i + 1,\n oldEnd: e + l + 1,\n oldStart: e + l - i + 1,\n size: i\n });\n return r >= this.config.minMatchedSize ? s : null;\n }\n tokenizeByCharacter(e) {\n let o = [], n = 0, r = /]*>.*?<\\/picture>|]*>.*?<\\/video>|<[^>]+>/gs, s;\n for(; (s = r.exec(e)) !== null;){\n let l = e.substring(n, s.index);\n if (l) for (let a of l)o.push(a);\n o.push(s[0]), n = s.index + s[0].length;\n }\n let i = e.substring(n);\n for (let l of i)o.push(l);\n return o;\n }\n tokenizeByWord(e) {\n return e.match(/]*>.*?<\\/picture>|]*>.*?<\\/video>|<[^>]+>|\\w+\\b|\\s+|[^<>\\w]/gs) || [];\n }\n getSideBySideContents() {\n if (this.sideBySideContents !== void 0) return this.sideBySideContents;\n let e = \"\", o = \"\", n = 0;\n this.operationList.forEach((s)=>{\n switch(s.type){\n case \"create\":\n {\n o += this.dressUpDiffContent(\"create\", this.newTokens.slice(s.newStart, s.newEnd));\n break;\n }\n case \"delete\":\n {\n let i = this.oldTokens.slice(s.oldStart, s.oldEnd);\n e += this.dressUpDiffContent(\"delete\", i);\n break;\n }\n case \"equal\":\n {\n let i = this.newTokens.slice(s.newStart, s.newEnd), l = \"\";\n for (let a of i){\n let c = a.match(b4);\n if (c) {\n n += 1;\n let u = (c?.groups?.name?.length ?? 0) + 1;\n l += `${a.slice(0, u)} data-seq=\"${n}\"${a.slice(u)}`;\n } else l += a;\n }\n e += l, o += l;\n break;\n }\n case \"replace\":\n {\n e += this.dressUpDiffContent(\"delete\", this.oldTokens.slice(s.oldStart, s.oldEnd)), o += this.dressUpDiffContent(\"create\", this.newTokens.slice(s.newStart, s.newEnd));\n break;\n }\n default:\n console.error(\"Richtext diff error - invalid operation: \" + String(s.type));\n }\n });\n let r = [\n e,\n o\n ];\n return this.sideBySideContents = r, r;\n }\n getUnifiedContent() {\n if (this.unifiedContent !== void 0) return this.unifiedContent;\n let e = \"\";\n return this.operationList.forEach((o)=>{\n switch(o.type){\n case \"create\":\n {\n e += this.dressUpDiffContent(\"create\", this.newTokens.slice(o.newStart, o.newEnd));\n break;\n }\n case \"delete\":\n {\n e += this.dressUpDiffContent(\"delete\", this.oldTokens.slice(o.oldStart, o.oldEnd));\n break;\n }\n case \"equal\":\n {\n for (let n of this.newTokens.slice(o.newStart, o.newEnd))e += n;\n break;\n }\n case \"replace\":\n {\n let n = this.oldTokens.slice(o.oldStart, o.oldEnd), r = this.newTokens.slice(o.newStart, o.newEnd);\n if (n.length === 1 && r.length === 1 && n[0]?.match(OC) && r[0]?.match(OC)) {\n e += r[0];\n break;\n }\n let s = [], i = [], l = o.newStart;\n for(let a = o.oldStart; a < o.oldEnd; a++){\n let c = this.oldTokens[a];\n if (!c) continue;\n let u = c?.match(v4);\n if (u) {\n if ([\n aq,\n y4\n ].some((f)=>c?.match(f))) {\n s.push(c);\n continue;\n }\n e += this.dressUpDiffContent(\"delete\", s), s.splice(0);\n let d = !1;\n for(let f = l; f < o.newEnd; f++){\n let m = this.newTokens[f];\n if (!m) continue;\n let p = m?.match(v4);\n if (p && p.groups?.name === u.groups?.name && p.groups?.isEnd === u.groups?.isEnd) {\n d = !0, e += this.dressUpDiffContent(\"create\", i), e += m, i.splice(0), l = f + 1;\n break;\n } else i.push(m);\n }\n d || (e += c, i.splice(0));\n } else s.push(c);\n }\n l < o.newEnd && i.push(...this.newTokens.slice(l, o.newEnd)), e += this.dressUpDiffContent(\"delete\", s), e += this.dressUpDiffContent(\"create\", i);\n break;\n }\n default:\n console.error(\"Richtext diff error - invalid operation: \" + String(o.type));\n }\n }), this.unifiedContent = e, e;\n }\n};\nvar bm = {\n '\"': \"\\uE004\",\n \"&\": \"\\uE001\",\n \"'\": \"\\uE005\",\n \"<\": \"\\uE002\",\n \">\": \"\\uE003\"\n}, vm = {\n \"\\uE001\": \"&\",\n \"\\uE002\": \"<\",\n \"\\uE003\": \">\",\n \"\\uE004\": \""\",\n \"\\uE005\": \"'\"\n};\nfunction C4(t) {\n return t == null ? \"\" : (typeof t == \"string\" ? t : String(t)).replace(/&/g, bm[\"&\"]).replace(//g, bm[\">\"]).replace(/\"/g, bm['\"']).replace(/'/g, bm[\"'\"]);\n}\n_c256 = C4;\nfunction x4(t) {\n return t.replace(/\\uE001/g, vm[\"\\uE001\"]).replace(/\\uE002/g, vm[\"\\uE002\"]).replace(/\\uE003/g, vm[\"\\uE003\"]).replace(/\\uE004/g, vm[\"\\uE004\"]).replace(/\\uE005/g, vm[\"\\uE005\"]);\n}\nvar S4 = \"html-diff\", lq = ({ fromHTML: t, postProcess: e, toHTML: o, tokenizeByCharacter: n })=>{\n let r = new Eg(t, o, {\n tokenizeByCharacter: n\n }), [s, i] = r.getSideBySideContents();\n e && (s = e(s), i = e(i));\n let l = s ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${S4}__diff-old html-diff`,\n dangerouslySetInnerHTML: {\n __html: s\n }\n }) : null, a = i ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${S4}__diff-new html-diff`,\n dangerouslySetInnerHTML: {\n __html: i\n }\n }) : null;\n return {\n From: l,\n To: a\n };\n};\n\n\n\nvar I4 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null), _4 = ({ children: t })=>{\n let e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(new Set);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let r = (s)=>{\n e.current.forEach(({ handler: i, ref: l })=>{\n l.current && !l.current.contains(s.target) && i();\n });\n };\n return document.addEventListener(\"mousedown\", r), ()=>document.removeEventListener(\"mousedown\", r);\n }, []), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(I4, {\n value: {\n register: (r)=>e.current.add(r),\n unregister: (r)=>e.current.delete(r)\n },\n children: t\n });\n}, VC = ()=>{\n let t = (0,react__WEBPACK_IMPORTED_MODULE_0__.use)(I4);\n if (!t) throw new Error(\"useClickOutside must be used within a ClickOutsideProvider\");\n return t;\n};\nfunction hq(t, e, o = !0) {\n let { register: n, unregister: r } = VC();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (!o || !t.current) return;\n let s = {\n handler: e,\n ref: t\n };\n return n(s), ()=>r(s);\n }, [\n t,\n e,\n o,\n n,\n r\n ]);\n}\n\n\n\n\n\n\n\n\n\n\nvar Sq = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { action: o, disabled: n } = t, { submit: r } = $e(), { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n e[0] !== o || e[1] !== r ? (i = ()=>{\n r({\n action: o,\n method: \"PATCH\",\n skipValidation: !0\n });\n }, e[0] = o, e[1] = r, e[2] = i) : i = e[2];\n let l = i, a;\n return e[3] !== n || e[4] !== l || e[5] !== s ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dr, {\n className: `${rr}__save`,\n disabled: n,\n onClick: l,\n children: s(\"general:save\")\n }), e[3] = n, e[4] = l, e[5] = s, e[6] = a) : a = e[6], a;\n}, Iq = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { action: o, disabled: n } = t, { submit: r } = $e(), { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n e[0] !== o || e[1] !== r ? (i = ()=>{\n r({\n action: o,\n method: \"PATCH\",\n overrides: {\n _status: \"published\"\n },\n skipValidation: !0\n });\n }, e[0] = o, e[1] = r, e[2] = i) : i = e[2];\n let l = i, a;\n return e[3] !== n || e[4] !== l || e[5] !== s ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dr, {\n className: `${rr}__publish`,\n disabled: n,\n onClick: l,\n children: s(\"version:publishChanges\")\n }), e[3] = n, e[4] = l, e[5] = s, e[6] = a) : a = e[6], a;\n}, _q = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { action: o, disabled: n } = t, { submit: r } = $e(), { t: s } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), i;\n e[0] !== o || e[1] !== r ? (i = ()=>{\n r({\n action: o,\n method: \"PATCH\",\n overrides: {\n _status: \"draft\"\n },\n skipValidation: !0\n });\n }, e[0] = o, e[1] = r, e[2] = i) : i = e[2];\n let l = i, a;\n return e[3] !== n || e[4] !== l || e[5] !== s ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dr, {\n buttonStyle: \"secondary\",\n className: `${rr}__draft`,\n disabled: n,\n onClick: l,\n children: s(\"version:saveDraft\")\n }), e[3] = n, e[4] = l, e[5] = s, e[6] = a) : a = e[6], a;\n}, A4 = (t)=>{\n _s74();\n let { collection: e, collection: { fields: o, labels: { plural: n, singular: r } } = {}, count: s, drawerSlug: i, ids: l, onSuccess: a, selectAll: c, selectedFields: u, setSelectedFields: d, where: f } = t, { permissions: m, user: p } = Ie(), { code: h } = ye(), { closeModal: g } = ie(), { config: { routes: { api: b } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { getFormState: C } = Nt(), { i18n: y, t: v } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [x, I] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), w = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), F = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), S = m?.collections?.[e.slug], R = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), D = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_35__.unflatten)(u.reduce((P, E)=>(P[E.value.path] = !0, P), {})), [\n u\n ]), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ formState: P, submitted: E })=>{\n let B = Tr(F), { state: $ } = await C({\n collectionSlug: e.slug,\n docPermissions: S,\n docPreferences: null,\n formState: P,\n operation: \"update\",\n schemaPath: e.slug,\n select: D,\n signal: B.signal,\n skipValidation: !E\n });\n return F.current = null, $;\n }, [\n C,\n e,\n S,\n D\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let P = F.current;\n return ()=>{\n _r(P);\n };\n }, []);\n let T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let P = [];\n f && P.push(f);\n let E = (0,payload_shared__WEBPACK_IMPORTED_MODULE_22__.mergeListSearchAndWhere)({\n collectionConfig: e,\n search: R.get(\"search\")\n });\n return E && P.push(E), c ? P.push(Yt(R)?.where || {\n id: {\n not_equals: \"\"\n }\n }) : P.push({\n id: {\n in: l || []\n }\n }), qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n locale: h,\n select: {},\n where: (0,payload_shared__WEBPACK_IMPORTED_MODULE_47__.combineWhereConstraints)(P)\n }, {\n addQueryPrefix: !0\n });\n }, [\n e,\n R,\n c,\n l,\n h,\n f\n ]), A = ()=>{\n w.replace(qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...Yt(R),\n _r: Date.now(),\n page: c ? \"1\" : void 0\n }, {\n addQueryPrefix: !0\n })), g(i), typeof a == \"function\" && a();\n }, k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ dispatchFields: P, formState: E, selected: B })=>{\n I(!0), d(B || []);\n let { state: $ } = await C({\n collectionSlug: e.slug,\n docPermissions: S,\n docPreferences: null,\n formState: E,\n operation: \"update\",\n schemaPath: e.slug,\n select: (0,payload_shared__WEBPACK_IMPORTED_MODULE_35__.unflatten)(B.reduce((M, L)=>(M[L.value.path] = !0, M), {})),\n skipValidation: !0\n });\n P({\n type: \"UPDATE_MANY\",\n formState: $\n }), I(!1);\n }, [\n C,\n e.slug,\n S,\n d\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(iu, {\n collectionSlug: e.slug,\n currentEditor: p,\n hasPublishedDoc: !1,\n id: null,\n initialData: {},\n isLocked: !1,\n lastUpdateTime: 0,\n mostRecentVersionIsAutosaved: !1,\n unpublishedVersionCount: 0,\n versionCount: 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(qf, {\n value: \"update\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${rr}__main`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${rr}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h2\", {\n className: `${rr}__header__title`,\n children: v(\"general:editingLabel\", {\n count: s,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s > 1 ? n : r, y)\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": v(\"general:close\"),\n className: `${rr}__header__close`,\n id: `close-drawer__${i}`,\n onClick: ()=>g(i),\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_s99, {\n className: `${rr}__form`,\n isInitializing: x,\n onChange: [\n _\n ],\n onSuccess: A,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_h, {\n fields: o,\n onChange: k,\n permissions: S.fields\n }),\n u.length === 0 ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: \"render-fields\",\n children: u.map((P, E)=>{\n let { value: { field: B, fieldPermissions: $, path: M } } = P;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ql, {\n clientFieldConfig: B,\n indexPath: \"\",\n parentPath: \"\",\n parentSchemaPath: \"\",\n path: M,\n permissions: $\n }, `${M}-${E}`);\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${rr}__sidebar-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${rr}__sidebar`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${rr}__sidebar-sticky-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${rr}__document-actions`,\n children: e?.versions?.drafts ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_q, {\n action: (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: b,\n path: `/${e.slug}${T}&draft=true`\n }),\n disabled: u.length === 0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Iq, {\n action: (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: b,\n path: `/${e.slug}${T}&draft=true`\n }),\n disabled: u.length === 0\n })\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sq, {\n action: (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: b,\n path: `/${e.slug}${T}`\n }),\n disabled: u.length === 0\n })\n })\n })\n })\n })\n ]\n })\n ]\n })\n })\n });\n};\n_s74(A4, \"NXaTrrB0D6S+mhVGTREQwOYFKZY=\");\nvar rr = \"edit-many\", Dq = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { count: o, selectAll: n, selectedIDs: r, toggleAll: s } = xo(), i;\n e[0] !== s ? (i = ()=>s(), e[0] = s, e[1] = i) : i = e[1];\n let l = n === Jt.AllAvailable, a;\n return e[2] !== o || e[3] !== t || e[4] !== r || e[5] !== i || e[6] !== l ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Cm, {\n ...t,\n count: o,\n ids: r,\n onSuccess: i,\n selectAll: l\n }), e[2] = o, e[3] = t, e[4] = r, e[5] = i, e[6] = l, e[7] = a) : a = e[7], a;\n}, Cm = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(16), { collection: o, count: n, ids: r, modalPrefix: s, onSuccess: i, selectAll: l, where: a } = t, { permissions: c } = Ie(), { openModal: u } = ie(), { t: d } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), f;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (f = [], e[0] = f) : f = e[0];\n let [m, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(f), h = c?.collections?.[o.slug], g = `${s ? `${s}-` : \"\"}edit-${o.slug}`;\n if (n === 0 || !h?.update) return null;\n let b;\n e[1] === Symbol.for(\"react.memo_cache_sentinel\") ? (b = [\n rr,\n `${rr}__toggle`\n ].filter(Boolean), e[1] = b) : b = e[1];\n let C;\n if (e[2] !== o || e[3] !== n || e[4] !== g || e[5] !== r || e[6] !== i || e[7] !== u || e[8] !== l || e[9] !== m || e[10] !== d || e[11] !== a) {\n let y;\n e[13] !== g || e[14] !== u ? (y = ()=>{\n u(g), p([]);\n }, e[13] = g, e[14] = u, e[15] = y) : y = e[15], C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: b.join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n \"aria-label\": d(\"general:edit\"),\n onClick: y,\n children: d(\"general:edit\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(as, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(It, {\n Header: null,\n slug: g,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(A4, {\n collection: o,\n count: n,\n drawerSlug: g,\n ids: r,\n onSuccess: i,\n selectAll: l,\n selectedFields: m,\n setSelectedFields: p,\n where: a\n })\n })\n })\n ]\n }), e[2] = o, e[3] = n, e[4] = g, e[5] = r, e[6] = i, e[7] = u, e[8] = l, e[9] = m, e[10] = d, e[11] = a, e[12] = C;\n } else C = e[12];\n return C;\n};\n\n\n\nfunction Pq(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), o = ct(), n;\n return e[0] !== o || e[1] !== t ? (n = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jo, {\n closeOnBlur: !1,\n ...t,\n style: {\n ...t.style || {},\n zIndex: `calc(100 + ${o || 0} + 1)`\n }\n }), e[0] = o, e[1] = t, e[2] = n) : n = e[2], n;\n}\n_c257 = Pq;\n\n\n\nfunction HC(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { highlightField: o, setKey: n } = t, { id: r } = Se(), { toggleModal: s } = ie(), { t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), l = `generate-confirmation-${r}`, a;\n e[0] !== o || e[1] !== n || e[2] !== i ? (a = ()=>{\n n(), ee.success(i(\"authentication:newAPIKeyGenerated\")), o(!0);\n }, e[0] = o, e[1] = n, e[2] = i, e[3] = a) : a = e[3];\n let c = a, u;\n e[4] !== l || e[5] !== s ? (u = ()=>{\n s(l);\n }, e[4] = l, e[5] = s, e[6] = u) : u = e[6];\n let d;\n return e[7] !== c || e[8] !== l || e[9] !== i || e[10] !== u ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n onClick: u,\n size: \"small\",\n children: i(\"authentication:generateNewAPIKey\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: kq\n },\n i18nKey: \"authentication:generatingNewAPIKeyWillInvalidate\",\n t: i\n }),\n confirmLabel: i(\"authentication:generate\"),\n heading: i(\"authentication:confirmGeneration\"),\n modalSlug: l,\n onConfirm: c\n })\n ]\n }), e[7] = c, e[8] = l, e[9] = i, e[10] = u, e[11] = d) : d = e[11], d;\n}\n_c258 = HC;\nfunction kq(t) {\n let { children: e } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: e\n });\n}\n\n\nfunction Bq(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(4), { permissions: o } = t, { setPermissions: n } = Ie(), r, s;\n return e[0] !== o || e[1] !== n ? (r = ()=>{\n n(o);\n }, s = [\n o,\n n\n ], e[0] = o, e[1] = n, e[2] = r, e[3] = s) : (r = e[2], s = e[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(r, s), null;\n}\n_c259 = Bq;\n\n\n\n\n\n\nvar XC = \"dots\", kg = ({ ariaLabel: t, className: e, noBackground: o, orientation: n = \"vertical\" })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n \"aria-label\": t,\n className: [\n e,\n XC,\n o && `${XC}--no-background`,\n n && `${XC}--${n}`\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {})\n ]\n });\n\n\n\n\n\n\n\n\n\nvar N4 = ({ className: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: [\n \"icon\",\n \"icon--people\",\n t\n ].filter(Boolean).join(\" \"),\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M14 16C14 14.5855 13.4381 13.229 12.4379 12.2288C11.4377 11.2286 10.0812 10.6667 8.66668 10.6667M8.66668 10.6667C7.25219 10.6667 5.89563 11.2286 4.89544 12.2288C3.89525 13.229 3.33334 14.5855 3.33334 16M8.66668 10.6667C10.5076 10.6667 12 9.17428 12 7.33333C12 5.49238 10.5076 4 8.66668 4C6.82573 4 5.33334 5.49238 5.33334 7.33333C5.33334 9.17428 6.82573 10.6667 8.66668 10.6667ZM16.6667 15.3333C16.6667 13.0867 15.3333 11 14 10C14.4383 9.67118 14.7888 9.23939 15.0204 8.74285C15.252 8.2463 15.3577 7.70031 15.328 7.1532C15.2984 6.60609 15.1343 6.07472 14.8503 5.60613C14.5664 5.13754 14.1713 4.74617 13.7 4.46667\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n });\n_c260 = N4;\nvar Na = \"active-query-preset\";\nfunction L4(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(11), { activePreset: o, openPresetListDrawer: n, resetPreset: r } = t, { i18n: s, t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { getEntityConfig: l } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), a;\n if (e[0] !== o || e[1] !== l || e[2] !== s || e[3] !== n || e[4] !== r || e[5] !== i) {\n let c = l({\n collectionSlug: \"payload-query-presets\"\n }), u = o && `${Na}--active`, d;\n e[7] !== u ? (d = [\n Na,\n u\n ].filter(Boolean), e[7] = u, e[8] = d) : d = e[8];\n let f;\n e[9] !== n ? (f = ()=>{\n n();\n }, e[9] = n, e[10] = f) : f = e[10], a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n className: d.join(\" \"),\n id: \"select-preset\",\n onClick: f,\n pillStyle: \"light\",\n size: \"small\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Na}__label`,\n children: [\n o?.isShared && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(N4, {\n className: `${Na}__shared`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Na}__label-text-max-width`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Na}__label-text`,\n children: o?.title || i(\"general:selectLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(c.labels.singular, s)\n })\n })\n }),\n o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Na}__clear`,\n id: \"clear-preset\",\n onClick: async (m)=>{\n m.stopPropagation(), await r();\n },\n onKeyDown: async (m)=>{\n (m.key === \"Enter\" || m.key === \" \") && (m.stopPropagation(), await r());\n },\n role: \"button\",\n tabIndex: 0,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n }) : null\n ]\n })\n }), e[0] = o, e[1] = l, e[2] = s, e[3] = n, e[4] = r, e[5] = i, e[6] = a;\n } else a = e[6];\n return a;\n}\n_c261 = L4;\nvar O4 = \"confirm-delete-preset\", La = \"payload-query-presets\", $g = \"query-preset-bar\", V4 = ({ activePreset: t, collectionSlug: e, queryPresetPermissions: o })=>{\n let { modified: n, query: r, refineListData: s, setModified: i } = dt(), { i18n: l, t: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { openModal: c } = ie(), { config: { routes: { api: u } }, getEntityConfig: d } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), f = d({\n collectionSlug: La\n }), [m, , { openDrawer: p }] = kt({\n id: t?.id,\n collectionSlug: La\n }), [h, , { closeDrawer: g, openDrawer: b }] = kt({\n collectionSlug: La\n }), C = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({\n \"payload-query-presets\": {\n isTemp: {\n not_equals: !0\n },\n relatedCollection: {\n equals: e\n }\n }\n }), [\n e\n ]), [y, , { closeDrawer: v, openDrawer: x }] = ua({\n collectionSlugs: [\n La\n ],\n filterOptions: C,\n selectedCollection: La\n }), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (D)=>{\n await s({\n columns: D.columns ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToSearchParams)(D.columns) : void 0,\n groupBy: D.groupBy || \"\",\n preset: D.id,\n where: D.where\n }, !1);\n }, [\n s\n ]), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n await s({\n columns: [],\n groupBy: \"\",\n preset: \"\",\n where: {}\n }, !1);\n }, [\n s\n ]), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n try {\n await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: u,\n path: `/${La}/${t.id}`\n }), {\n method: \"DELETE\"\n }).then(async (D)=>{\n try {\n let _ = await D.json();\n D.status < 400 ? (ee.success(a(\"general:titleDeleted\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(f?.labels?.singular, l),\n title: t.title\n })), await w()) : _.errors ? _.errors.forEach((T)=>ee.error(T.message)) : ee.error(a(\"error:deletingTitle\", {\n title: t.title\n }));\n } catch {\n ee.error(a(\"error:deletingTitle\", {\n title: t.title\n }));\n }\n });\n } catch {\n ee.error(a(\"error:deletingTitle\", {\n title: t.title\n }));\n }\n }, [\n u,\n t?.id,\n t?.title,\n a,\n f,\n l,\n w\n ]), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n try {\n await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: u,\n path: `/${La}/${t.id}`\n }), {\n body: JSON.stringify({\n columns: (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToPreferences)(r.columns),\n groupBy: r.groupBy,\n where: r.where\n }),\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n method: \"PATCH\"\n }).then(async (D)=>{\n try {\n let _ = await D.json();\n D.status < 400 ? (ee.success(a(\"general:updatedLabelSuccessfully\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(f?.labels?.singular, l)\n })), i(!1)) : _.errors ? _.errors.forEach((T)=>ee.error(T.message)) : ee.error(a(\"error:unknown\"));\n } catch {\n ee.error(a(\"error:unknown\"));\n }\n });\n } catch {\n ee.error(a(\"error:unknown\"));\n }\n }, [\n u,\n t?.id,\n r.columns,\n r.groupBy,\n r.where,\n a,\n f?.labels?.singular,\n l,\n i\n ]), R = t && n;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: $g,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$g}__menu`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(L4, {\n activePreset: t,\n openPresetListDrawer: x,\n resetPreset: w\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n \"aria-label\": a(\"general:newLabel\", {\n label: f?.labels?.singular\n }),\n className: `${$g}__create-new-preset`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ar, {}),\n id: \"create-new-preset\",\n onClick: ()=>{\n b();\n },\n size: \"small\"\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$g}__menu-items`,\n children: [\n R && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n id: \"reset-preset\",\n onClick: async ()=>{\n await s({\n columns: (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToSearchParams)(t.columns),\n groupBy: t.groupBy || \"\",\n where: t.where\n }, !1);\n },\n type: \"button\",\n children: a(\"general:reset\")\n }, \"reset\"),\n R && o.update && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n id: \"save-preset\",\n onClick: async ()=>{\n await S();\n },\n type: \"button\",\n children: t?.isShared ? a(\"general:updateForEveryone\") : a(\"fields:saveChanges\")\n }, \"save\"),\n t && o?.delete && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n id: \"delete-preset\",\n onClick: ()=>c(O4),\n type: \"button\",\n children: a(\"general:deleteLabel\", {\n label: f?.labels?.singular\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n id: \"edit-preset\",\n onClick: ()=>{\n p();\n },\n type: \"button\",\n children: a(\"general:editLabel\", {\n label: f?.labels?.singular\n })\n })\n ]\n })\n ]\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(h, {\n initialData: {\n columns: (0,payload_shared__WEBPACK_IMPORTED_MODULE_17__.transformColumnsToPreferences)(r.columns),\n groupBy: r.groupBy,\n relatedCollection: e,\n where: r.where\n },\n onSave: async ({ doc: D })=>{\n g(), await I(D);\n },\n redirectAfterCreate: !1\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: ({ children: D })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: D\n })\n },\n i18nKey: \"general:aboutToDelete\",\n t: a,\n variables: {\n label: f?.labels?.singular,\n title: t?.title\n }\n }),\n confirmingLabel: a(\"general:deleting\"),\n heading: a(\"general:confirmDeletion\"),\n modalSlug: O4,\n onConfirm: F\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(m, {\n onDelete: ()=>{},\n onDuplicate: async ({ doc: D })=>{\n await I(D);\n },\n onSave: async ({ doc: D })=>{\n await I(D);\n }\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(y, {\n allowCreate: !1,\n disableQueryPresets: !0,\n onSelect: async ({ doc: D })=>{\n v(), await I(D);\n }\n })\n ]\n });\n};\n\n\n\nvar H4 = \"search-filter\";\nfunction YC(t) {\n let { handleChange: e, initialParams: o, label: n, searchQueryParam: r } = t, s = o?.search || r, [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(typeof s == \"string\" ? s : void 0), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(typeof s == \"string\" ? s : void 0), u = yn(i, 300);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(s !== c.current && (a.current = !1, l(s), c.current = s), ()=>{\n a.current = !0, c.current = void 0;\n }), [\n s\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n u !== c.current && a.current && (e && e(u), c.current = u);\n }, [\n u,\n e\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: H4,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"aria-label\": n,\n className: `${H4}__input`,\n id: \"search-filter-input\",\n onChange: (d)=>{\n a.current = !0, l(d.target.value);\n },\n placeholder: n,\n type: \"text\",\n value: i || \"\"\n })\n });\n}\n_c262 = YC;\nvar U4 = \"search-bar\";\nfunction vc({ Actions: t, className: e, label: o = \"Search...\", onSearchChange: n, searchQueryParam: r }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n U4,\n e\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ji, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(YC, {\n handleChange: n,\n label: o,\n searchQueryParam: r\n }),\n t && t.length > 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${U4}__actions`,\n children: t\n }) : null\n ]\n });\n}\n\nvar X4 = (t, e, o)=>{\n if (t) {\n let n = (0,payload_shared__WEBPACK_IMPORTED_MODULE_23__.flattenTopLevelFields)(e, {\n i18n: o,\n moveSubFieldsToTop: !0\n }), r = new Set(t), s = [];\n for (let i of n)(0,payload_shared__WEBPACK_IMPORTED_MODULE_8__.fieldAffectsData)(i) && r.has(i.name) && (s.push(i), r.delete(i.name));\n return s;\n }\n return null;\n};\n_c263 = X4;\nvar Yo = \"list-controls\", JC = (t)=>{\n let { beforeActions: e, collectionConfig: o, collectionSlug: n, disableQueryPresets: r, enableColumns: s = !0, enableFilters: i = !0, enableSort: l = !1, listMenuItems: a, queryPreset: c, queryPresetPermissions: u, renderedFilters: d, resolvedFilterOptions: f } = t, { handleSearchChange: m, query: p } = dt(), h = Fy(o), { i18n: g, t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { breakpoints: { s: C } } = dr(), y = (h && (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(\"label\" in h && (typeof h.label == \"string\" || typeof h.label == \"object\") ? h.label : \"name\" in h ? h.name : null, g)) ?? \"ID\", v = X4(o.admin.listSearchableFields, o.fields, g), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(b(\"general:searchBy\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(y, g)\n })), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!!p?.where), w = (0,payload_shared__WEBPACK_IMPORTED_MODULE_44__.validateWhereQuery)(p?.where), [F, S] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(w ? \"where\" : void 0);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n I.current && !p?.where ? I.current = !1 : p?.where && (I.current = !0);\n }, [\n S,\n p?.where\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n v?.length > 0 ? x.current = v.reduce((R, D, _)=>{\n let T = \"label\" in D && D.label ? D.label : \"name\" in D ? D.name : null;\n return _ === 0 ? `${b(\"general:searchBy\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(T, g)\n })}` : _ === v.length - 1 ? `${R} ${b(\"general:or\")} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(T, g)}` : `${R}, ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(T, g)}`;\n }, \"\") : x.current = b(\"general:searchBy\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(y, g)\n });\n }, [\n b,\n v,\n g,\n y\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Yo,\n children: [\n o?.enableQueryPresets && !r && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(V4, {\n activePreset: c,\n collectionSlug: n,\n queryPresetPermissions: u\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vc, {\n Actions: [\n !C && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: e && e\n }, \"before-actions\"),\n s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n \"aria-controls\": `${Yo}-columns`,\n \"aria-expanded\": F === \"columns\",\n className: `${Yo}__toggle-columns`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: F === \"columns\" ? \"up\" : \"down\"\n }),\n id: \"toggle-list-columns\",\n onClick: ()=>S(F !== \"columns\" ? \"columns\" : void 0),\n pillStyle: \"light\",\n size: \"small\",\n children: b(\"general:columns\")\n }, \"toggle-list-columns\"),\n i && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n \"aria-controls\": `${Yo}-where`,\n \"aria-expanded\": F === \"where\",\n className: `${Yo}__toggle-where`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: F === \"where\" ? \"up\" : \"down\"\n }),\n id: \"toggle-list-filters\",\n onClick: ()=>S(F !== \"where\" ? \"where\" : void 0),\n pillStyle: \"light\",\n size: \"small\",\n children: b(\"general:filters\")\n }, \"toggle-list-filters\"),\n l && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n \"aria-controls\": `${Yo}-sort`,\n \"aria-expanded\": F === \"sort\",\n className: `${Yo}__toggle-sort`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {}),\n id: \"toggle-list-sort\",\n onClick: ()=>S(F !== \"sort\" ? \"sort\" : void 0),\n pillStyle: \"light\",\n size: \"small\",\n children: b(\"general:sort\")\n }, \"toggle-list-sort\"),\n o.admin.groupBy && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n \"aria-controls\": `${Yo}-group-by`,\n \"aria-expanded\": F === \"group-by\",\n className: `${Yo}__toggle-group-by`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: F === \"group-by\" ? \"up\" : \"down\"\n }),\n id: \"toggle-group-by\",\n onClick: ()=>S(F !== \"group-by\" ? \"group-by\" : void 0),\n pillStyle: \"light\",\n size: \"small\",\n children: b(\"general:groupByLabel\", {\n label: \"\"\n })\n }, \"toggle-group-by\"),\n a && Array.isArray(a) && a.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kg, {\n ariaLabel: b(\"general:moreOptions\")\n }),\n className: `${Yo}__popup`,\n horizontalAlign: \"right\",\n id: \"list-menu\",\n size: \"small\",\n verticalAlign: \"bottom\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: a.map((R, D)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: R\n }, `list-menu-item-${D}`))\n })\n }, \"list-menu\")\n ].filter(Boolean),\n label: x.current,\n onSearchChange: m,\n searchQueryParam: p?.search\n }, n),\n s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wr, {\n className: `${Yo}__columns`,\n height: F === \"columns\" ? \"auto\" : 0,\n id: `${Yo}-columns`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gp, {\n collectionSlug: o.slug\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wr, {\n className: `${Yo}__where`,\n height: F === \"where\" ? \"auto\" : 0,\n id: `${Yo}-where`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(og, {\n collectionPluralLabel: o?.labels?.plural,\n collectionSlug: o.slug,\n fields: o?.fields,\n renderedFilters: d,\n resolvedFilterOptions: f\n })\n }),\n o.admin.groupBy && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wr, {\n className: `${Yo}__group-by`,\n height: F === \"group-by\" ? \"auto\" : 0,\n id: `${Yo}-group-by`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ag, {\n collectionSlug: o.slug,\n fields: o.fields\n })\n })\n ]\n });\n};\n\n\n\n\n\n\n\n\n\n\n\n\nfunction Q4(t) {\n _s75();\n let { collection: e, collection: { slug: o, labels: { plural: n, singular: r } } = {}, drawerSlug: s, ids: i, onSuccess: l, selectAll: a, where: c } = t, { clearRouteCache: u } = pt(), { config: { routes: { api: d } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { code: f } = ye(), m = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), p = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), { i18n: h, t: g } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n ee.error(g(\"error:unknown\"));\n }, [\n g\n ]), C = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Q4.useMemo[C]\": ()=>{\n let v = [\n {\n _status: {\n not_equals: \"published\"\n }\n }\n ];\n c && v.push(c);\n let x = (0,payload_shared__WEBPACK_IMPORTED_MODULE_22__.mergeListSearchAndWhere)({\n collectionConfig: e,\n search: p.get(\"search\")\n });\n return x && v.push(x), a ? v.push(Yt(p)?.where || {\n id: {\n not_equals: \"\"\n }\n }) : v.push({\n id: {\n in: i || []\n }\n }), qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n locale: f,\n select: {},\n where: (0,payload_shared__WEBPACK_IMPORTED_MODULE_47__.combineWhereConstraints)(v)\n }, {\n addQueryPrefix: !0\n });\n }\n }[\"Q4.useMemo[C]\"], [\n e,\n p,\n a,\n i,\n f,\n c\n ]), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n let v = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: d,\n path: `/${o}${C}&draft=true`\n });\n await Ge.patch(v, {\n body: JSON.stringify({\n _status: \"published\"\n }),\n headers: {\n \"Accept-Language\": h.language,\n \"Content-Type\": \"application/json\"\n }\n }).then(async (x)=>{\n try {\n let I = await x.json(), w = I?.docs.length || 0, F = w > 1 ? n : r;\n return x.status < 400 || w > 0 ? (ee.success(g(\"general:updatedCountSuccessfully\", {\n count: w,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(F, h)\n })), I?.errors.length > 0 && ee.error(I.message, {\n description: I.errors.map((S)=>S.message).join(`\n`)\n }), m.replace(qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...Yt(p),\n page: a ? \"1\" : void 0\n }, {\n addQueryPrefix: !0\n })), u(), typeof l == \"function\" && l(), null) : (I.errors ? I.errors.forEach((S)=>ee.error(S.message)) : b(), !1);\n } catch {\n return b();\n }\n });\n }, [\n d,\n o,\n C,\n h,\n n,\n r,\n g,\n m,\n p,\n a,\n u,\n b,\n l\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: g(\"version:aboutToPublishSelection\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(n, h)\n }),\n cancelLabel: g(\"general:cancel\"),\n confirmingLabel: g(\"version:publishing\"),\n confirmLabel: g(\"general:confirm\"),\n heading: g(\"version:confirmPublish\"),\n modalSlug: s,\n onConfirm: y\n });\n}\n_s75(Q4, \"Uqw/aVkl1zV6Sb9iEH6f7LQIT2Q=\");\n_c264 = Q4;\nvar lQ = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { count: o, selectAll: n, selectedIDs: r, toggleAll: s } = xo(), i;\n e[0] !== s ? (i = ()=>s(), e[0] = s, e[1] = i) : i = e[1];\n let l = n === Jt.AllAvailable, a;\n return e[2] !== o || e[3] !== t || e[4] !== r || e[5] !== i || e[6] !== l ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wm, {\n ...t,\n count: o,\n ids: r,\n onSuccess: i,\n selectAll: l\n }), e[2] = o, e[3] = t, e[4] = r, e[5] = i, e[6] = l, e[7] = a) : a = e[7], a;\n}, wm = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { collection: o, collection: n, count: r, ids: s, modalPrefix: i, onSuccess: l, selectAll: a, where: c } = t, { slug: u, versions: d } = n === void 0 ? {} : n, { permissions: f } = Ie(), { t: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { openModal: p } = ie(), g = f?.collections?.[u]?.update, b = `${i ? `${i}-` : \"\"}publish-${u}`;\n if (!d?.drafts || r === 0 || !g) return null;\n let C;\n if (e[0] !== o || e[1] !== b || e[2] !== s || e[3] !== l || e[4] !== p || e[5] !== a || e[6] !== m || e[7] !== c) {\n let y;\n e[9] !== b || e[10] !== p ? (y = ()=>{\n p(b);\n }, e[9] = b, e[10] = p, e[11] = y) : y = e[11], C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n \"aria-label\": m(\"version:publish\"),\n onClick: y,\n children: m(\"version:publish\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Q4, {\n collection: o,\n drawerSlug: b,\n ids: s,\n onSuccess: l,\n selectAll: a,\n where: c\n })\n ]\n }), e[0] = o, e[1] = b, e[2] = s, e[3] = l, e[4] = p, e[5] = a, e[6] = m, e[7] = c, e[8] = C;\n } else C = e[8];\n return C;\n};\n\n\n\n\n\n\nvar oE = \"confirm-restore-many-docs\", rE = \"restore-many\", nE = (t)=>{\n _s76();\n let { collection: { slug: e } = {}, viewType: o } = t, { permissions: n } = Ie(), { config: { collections: r, routes: s, serverURL: i } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { code: l } = ye(), a = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { clearRouteCache: c } = pt(), u = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), { count: d, getSelectedIds: f, selectAll: m, toggleAll: p } = xo(), { openModal: h } = ie(), { i18n: g, t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [C, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!1), x = n?.collections?.[e]?.update;\n if (m === Jt.None || !x || o !== \"trash\") return null;\n let I = m === Jt.AllAvailable, w = I ? [] : f(), F = Yt(u)?.where, S = {\n and: [\n ...Array.isArray(F?.and) ? F.and : F ? [\n F\n ] : [],\n {\n deletedAt: {\n exists: !0\n }\n }\n ]\n }, R = async ()=>{\n let T = r.find((B)=>B.slug === e);\n if (!T) return;\n let A;\n I ? A = S : A = {\n and: [\n {\n id: {\n in: w\n }\n },\n {\n deletedAt: {\n exists: !0\n }\n }\n ]\n };\n let k = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: s.api,\n path: `/${e}${qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n limit: 0,\n locale: l,\n select: {},\n trash: !0,\n where: (0,payload_shared__WEBPACK_IMPORTED_MODULE_22__.mergeListSearchAndWhere)({\n collectionConfig: T,\n search: Yt(u)?.search,\n where: A\n })\n }, {\n addQueryPrefix: !0\n })}`\n }), P = {\n deletedAt: null\n };\n T?.versions?.drafts && (P._status = C ? \"published\" : \"draft\");\n let E = await Ge.patch(k, {\n body: JSON.stringify(P),\n headers: {\n \"Accept-Language\": g.language,\n \"Content-Type\": \"application/json\"\n }\n });\n try {\n let { plural: B, singular: $ } = T.labels, M = await E.json(), L = M?.docs?.length || 0, j = L > 1 ? B : $;\n (E.status < 400 || L > 0) && ee.success(b(\"general:restoredCountSuccessfully\", {\n count: L,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(j, g)\n })), M?.errors?.length > 0 && ee.error(M.message, {\n description: M.errors.map((O)=>O.message).join(`\n`)\n });\n } catch {\n ee.error(b(\"error:unknown\"));\n }\n p(), a.replace(qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...Yt(u),\n page: I ? \"1\" : void 0\n }, {\n addQueryPrefix: !0\n })), c();\n }, D = r.find(({ slug: T })=>T === e), _ = (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(d === 1 ? D.labels.singular : D.labels.plural, g);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n \"aria-label\": b(\"general:restore\"),\n className: \"restore-documents__toggle\",\n onClick: ()=>{\n h(oE);\n },\n children: b(\"general:restore\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n b(D?.versions?.drafts ? \"general:aboutToRestoreAsDraftCount\" : \"general:aboutToRestoreCount\", {\n count: d,\n label: _\n }),\n D?.versions?.drafts && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${rE}__checkbox`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: C,\n id: \"restore-as-published-many\",\n label: b(\"general:restoreAsPublished\"),\n name: \"restore-as-published-many\",\n onToggle: (T)=>y(T.target.checked)\n })\n })\n ]\n }),\n className: rE,\n confirmingLabel: b(\"general:restoring\"),\n heading: b(\"general:confirmRestoration\"),\n modalSlug: oE,\n onConfirm: R\n })\n ]\n });\n};\n_s76(nE, \"8c3UuPIrSaVTujtSCNpuM1XzWnY=\");\n\n\n\n\n\n\n\n\n\nfunction aE(t) {\n _s77();\n let { collection: e, collection: { slug: o, labels: { plural: n, singular: r } } = {}, drawerSlug: s, ids: i, onSuccess: l, selectAll: a, where: c } = t, { config: { routes: { api: u } } } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { code: d } = ye(), { i18n: f, t: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), p = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), h = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { clearRouteCache: g } = pt(), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n ee.error(m(\"error:unknown\"));\n }, [\n m\n ]), C = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"aE.useMemo[C]\": ()=>{\n let v = [\n {\n _status: {\n not_equals: \"draft\"\n }\n }\n ];\n c && v.push(c);\n let x = (0,payload_shared__WEBPACK_IMPORTED_MODULE_22__.mergeListSearchAndWhere)({\n collectionConfig: e,\n search: p.get(\"search\")\n });\n return x && v.push(x), a || v.push({\n id: {\n in: i || []\n }\n }), qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n locale: d,\n select: {},\n where: (0,payload_shared__WEBPACK_IMPORTED_MODULE_47__.combineWhereConstraints)(v)\n }, {\n addQueryPrefix: !0\n });\n }\n }[\"aE.useMemo[C]\"], [\n e,\n p,\n a,\n i,\n d,\n c\n ]), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n let v = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: u,\n path: `/${o}${C}`\n });\n await Ge.patch(v, {\n body: JSON.stringify({\n _status: \"draft\"\n }),\n headers: {\n \"Accept-Language\": f.language,\n \"Content-Type\": \"application/json\"\n }\n }).then(async (x)=>{\n try {\n let I = await x.json(), w = I?.docs.length || 0, F = w > 1 ? n : r;\n return x.status < 400 || w > 0 ? (ee.success(m(\"general:updatedCountSuccessfully\", {\n count: w,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(F, f)\n })), I?.errors.length > 0 && ee.error(I.message, {\n description: I.errors.map((S)=>S.message).join(`\n`)\n }), h.replace(qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...Yt(p),\n page: a ? \"1\" : void 0\n }, {\n addQueryPrefix: !0\n })), g(), typeof l == \"function\" && l(), null) : (I.errors ? I.errors.forEach((S)=>ee.error(S.message)) : b(), !1);\n } catch {\n return b();\n }\n });\n }, [\n u,\n o,\n C,\n f,\n n,\n r,\n m,\n h,\n p,\n a,\n g,\n b,\n l\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: m(\"version:aboutToUnpublishSelection\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(n, f)\n }),\n confirmingLabel: m(\"version:unpublishing\"),\n heading: m(\"version:confirmUnpublish\"),\n modalSlug: s,\n onConfirm: y\n });\n}\n_s77(aE, \"Uqw/aVkl1zV6Sb9iEH6f7LQIT2Q=\");\nvar wQ = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(8), { count: o, selectAll: n, selectedIDs: r, toggleAll: s } = xo(), i;\n e[0] !== s ? (i = ()=>s(), e[0] = s, e[1] = i) : i = e[1];\n let l = n === Jt.AllAvailable, a;\n return e[2] !== o || e[3] !== t || e[4] !== r || e[5] !== i || e[6] !== l ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sm, {\n ...t,\n count: o,\n ids: r,\n onSuccess: i,\n selectAll: l\n }), e[2] = o, e[3] = t, e[4] = r, e[5] = i, e[6] = l, e[7] = a) : a = e[7], a;\n}, Sm = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { collection: o, collection: n, count: r, ids: s, modalPrefix: i, onSuccess: l, selectAll: a, where: c } = t, { slug: u, versions: d } = n === void 0 ? {} : n, { t: f } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { permissions: m } = Ie(), { toggleModal: p } = ie(), g = m?.collections?.[u]?.update, b = `${i ? `${i}-` : \"\"}unpublish-${u}`;\n if (!d?.drafts || r === 0 || !g) return null;\n let C;\n if (e[0] !== o || e[1] !== b || e[2] !== s || e[3] !== l || e[4] !== a || e[5] !== f || e[6] !== p || e[7] !== c) {\n let y;\n e[9] !== b || e[10] !== p ? (y = ()=>{\n p(b);\n }, e[9] = b, e[10] = p, e[11] = y) : y = e[11], C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n \"aria-label\": f(\"version:unpublish\"),\n onClick: y,\n children: f(\"version:unpublish\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(aE, {\n collection: o,\n drawerSlug: b,\n ids: s,\n onSuccess: l,\n selectAll: a,\n where: c\n })\n ]\n }), e[0] = o, e[1] = b, e[2] = s, e[3] = l, e[4] = a, e[5] = f, e[6] = p, e[7] = c, e[8] = C;\n } else C = e[8];\n return C;\n};\nvar ja = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(21), { collectionConfig: o, disableBulkDelete: n, disableBulkEdit: r, hasDeletePermission: s, hasTrashPermission: i, label: l, modalPrefix: a, showSelectAllAcrossPages: c, viewType: u, where: d } = t, f = c === void 0 ? !0 : c, { count: m, selectAll: p, selectedIDs: h, toggleAll: g, totalDocs: b } = xo(), { t: C } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), y;\n e[0] !== g ? (y = ()=>g(), e[0] = g, e[1] = y) : y = e[1];\n let v = y;\n if (m === 0) return null;\n let x = o?.trash && u === \"trash\", I;\n return e[2] !== o || e[3] !== m || e[4] !== n || e[5] !== r || e[6] !== s || e[7] !== i || e[8] !== x || e[9] !== l || e[10] !== a || e[11] !== v || e[12] !== p || e[13] !== h || e[14] !== f || e[15] !== C || e[16] !== g || e[17] !== b || e[18] !== u || e[19] !== d ? (I = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sg, {\n count: m,\n ListActions: [\n p !== Jt.AllAvailable && m < b && f !== !1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n \"aria-label\": C(\"general:selectAll\", {\n count: `(${b})`,\n label: l\n }),\n id: \"select-all-across-pages\",\n onClick: ()=>g(!0),\n children: C(\"general:selectAll\", {\n count: `(${b})`,\n label: \"\"\n })\n }, \"select-all\") : null\n ].filter(Boolean),\n SelectionActions: [\n !r && !x && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Cm, {\n collection: o,\n count: m,\n ids: h,\n modalPrefix: a,\n onSuccess: v,\n selectAll: p === Jt.AllAvailable,\n where: d\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wm, {\n collection: o,\n count: m,\n ids: h,\n modalPrefix: a,\n onSuccess: v,\n selectAll: p === Jt.AllAvailable,\n where: d\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sm, {\n collection: o,\n count: m,\n ids: h,\n modalPrefix: a,\n onSuccess: v,\n selectAll: p === Jt.AllAvailable,\n where: d\n })\n ]\n }, \"bulk-actions\"),\n x && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(nE, {\n collection: o,\n viewType: u\n }, \"bulk-restore\"),\n !n && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yC, {\n collection: o,\n hasDeletePermission: s,\n hasTrashPermission: i,\n modalPrefix: a,\n viewType: u\n }, \"bulk-delete\")\n ].filter(Boolean)\n }), e[2] = o, e[3] = m, e[4] = n, e[5] = r, e[6] = s, e[7] = i, e[8] = x, e[9] = l, e[10] = a, e[11] = v, e[12] = p, e[13] = h, e[14] = f, e[15] = C, e[16] = g, e[17] = b, e[18] = u, e[19] = d, e[20] = I) : I = e[20], I;\n};\n\n\n\n\nvar TQ = \"close-modal-button\";\nfunction uE({ slug: t, className: e }) {\n let { closeModal: o } = ie(), { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": n(\"general:close\"),\n className: [\n TQ,\n e\n ].filter(Boolean).join(\" \"),\n onClick: ()=>{\n o(t);\n },\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n }, \"close-button\");\n}\n\n\n\n\n\n\nvar $a = \"default-list-view-tabs\", Mg = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(20), { collectionConfig: o, config: n, onChange: r, viewType: s } = t, { i18n: i, t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { setPreference: a } = so(), c = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), u = o.trash, d = o.folders && n.folders;\n if (!u && !d) return null;\n let f;\n e[0] !== o.slug || e[1] !== n || e[2] !== r || e[3] !== c || e[4] !== a ? (f = async (g)=>{\n r && r(g), (g === \"list\" || g === \"folders\") && await a(`collection-${o.slug}`, {\n listViewType: g\n });\n let b = `/collections/${o.slug}`;\n e: switch(g){\n case \"folders\":\n {\n n.folders && (b = `/collections/${o.slug}/${n.folders.slug}`);\n break e;\n }\n case \"trash\":\n b = `/collections/${o.slug}/trash`;\n }\n let C = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: n.routes.admin,\n path: b\n });\n c.push(C);\n }, e[0] = o.slug, e[1] = n, e[2] = r, e[3] = c, e[4] = a, e[5] = f) : f = e[5];\n let m = f, p = `${l(\"general:all\")} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(o?.labels?.plural, i)}`, h;\n if (e[6] !== p || e[7] !== o.labels?.plural || e[8] !== m || e[9] !== i || e[10] !== d || e[11] !== u || e[12] !== l || e[13] !== s) {\n let g;\n e[15] === Symbol.for(\"react.memo_cache_sentinel\") ? (g = /\\s+/g, e[15] = g) : g = e[15];\n let b = p.toLowerCase().replace(g, \"-\"), C = s === \"list\" && `${$a}__button--active`, y;\n e[16] !== C ? (y = [\n `${$a}__button`,\n C\n ].filter(Boolean), e[16] = C, e[17] = y) : y = e[17];\n let v;\n e[18] !== m ? (v = ()=>m(\"list\"), e[18] = m, e[19] = v) : v = e[19], h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: $a,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(re, {\n buttonStyle: \"tab\",\n className: y.join(\" \"),\n disabled: s === \"list\",\n el: \"button\",\n id: b,\n onClick: v,\n children: [\n l(\"general:all\"),\n \" \",\n (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(o?.labels?.plural, i)\n ]\n }),\n d && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"tab\",\n className: [\n `${$a}__button`,\n s === \"folders\" && `${$a}__button--active`\n ].filter(Boolean).join(\" \"),\n disabled: s === \"folders\",\n el: \"button\",\n onClick: ()=>m(\"folders\"),\n children: l(\"folder:byFolder\")\n }),\n u && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"tab\",\n className: [\n `${$a}__button`,\n s === \"trash\" && `${$a}__button--active`\n ].filter(Boolean).join(\" \"),\n disabled: s === \"trash\",\n el: \"button\",\n id: \"trash-view-pill\",\n onClick: ()=>m(\"trash\"),\n children: l(\"general:trash\")\n })\n ]\n }), e[6] = p, e[7] = o.labels?.plural, e[8] = m, e[9] = i, e[10] = d, e[11] = u, e[12] = l, e[13] = s, e[14] = h;\n } else h = e[14];\n return h;\n};\n\n\n\n\n\nvar $s = \"list-header\", Ba = (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"header\", {\n className: [\n $s,\n t.className\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$s}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${$s}__title-and-actions`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h1\", {\n className: `${$s}__title`,\n children: t.title\n }),\n t.TitleActions.length ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${$s}__title-actions`,\n children: t.TitleActions\n }) : null\n ]\n }),\n t.Actions.length ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${$s}__actions`,\n children: t.Actions\n }) : null\n ]\n }),\n t.AfterListHeaderContent ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${$s}__after-header-content`,\n children: t.AfterListHeaderContent\n }) : null\n ]\n });\nvar EQ = \"list-drawer\", gE = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { i18n: e, t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: n, getEntityConfig: r } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { collections: s } = n, { enabledCollections: i, selectedOption: l, setSelectedOption: a } = Ir(), c;\n if (t[0] !== s || t[1] !== i || t[2] !== r || t[3] !== e || t[4] !== l || t[5] !== a || t[6] !== o) {\n c = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let u;\n t[8] !== i ? (u = (f)=>{\n let { slug: m } = f;\n return i.includes(m);\n }, t[8] = i, t[9] = u) : u = t[9];\n let d = s.filter(u);\n if (d.length > 1) {\n let f = r({\n collectionSlug: l.value\n }), m;\n t[10] !== e ? (m = (p)=>({\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(p.labels.singular, e),\n value: p.slug\n }), t[10] = e, t[11] = m) : m = t[11], c = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${EQ}__select-collection-wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n label: o(\"upload:selectCollectionToBrowse\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ft, {\n className: `${$s}__select-collection`,\n isClearable: !1,\n onChange: a,\n options: d.map(m),\n value: {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(f?.labels.singular, e),\n value: f?.slug\n }\n })\n ]\n });\n break e;\n }\n }\n t[0] = s, t[1] = i, t[2] = r, t[3] = e, t[4] = l, t[5] = a, t[6] = o, t[7] = c;\n } else c = t[7];\n return c !== Symbol.for(\"react.early_return_sentinel\") ? c : null;\n};\n\n\nvar LQ = \"list-header\";\nfunction nx(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { hasCreatePermission: o } = t, { DocumentDrawerToggler: n } = Ir(), { t: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n if (!o) return null;\n let s;\n return e[0] !== n || e[1] !== r ? (s = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(n, {\n className: `${LQ}__create-new-button`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(yt, {\n size: \"small\",\n children: r(\"general:createNew\")\n })\n }, \"create-new-button-toggler\"), e[0] = n, e[1] = r, e[2] = s) : s = e[2], s;\n}\n\n\n\n\nfunction Im(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { collectionSlug: o, hasCreatePermission: n, isBulkUploadEnabled: r, onBulkUploadSuccess: s, openBulkUpload: i } = t, { drawerSlug: l, setCollectionSlug: a, setOnSuccess: c } = Ho(), { t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { openModal: d } = ie(), f = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), m;\n e[0] !== l || e[1] !== o || e[2] !== s || e[3] !== i || e[4] !== d || e[5] !== f || e[6] !== a || e[7] !== c ? (m = ()=>{\n typeof i == \"function\" ? i() : (a(o), d(l), c(()=>{\n typeof s == \"function\" ? s() : f.refresh();\n }));\n }, e[0] = l, e[1] = o, e[2] = s, e[3] = i, e[4] = d, e[5] = f, e[6] = a, e[7] = c, e[8] = m) : m = e[8];\n let p = m;\n if (!n || !r) return null;\n let h;\n return e[9] !== p || e[10] !== u ? (h = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": u(\"upload:bulkUpload\"),\n buttonStyle: \"pill\",\n onClick: p,\n size: \"small\",\n children: u(\"upload:bulkUpload\")\n }, \"bulk-upload-button\"), e[9] = p, e[10] = u, e[11] = h) : h = e[11], h;\n}\n_c265 = Im;\n\n\n\n\nvar VQ = \"list-create-new-doc\";\nfunction sx(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { collectionConfig: o, hasCreatePermission: n, newDocumentURL: r } = t, { i18n: s, t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n if (!n) return null;\n let l = o?.labels?.singular, a;\n return e[0] !== s || e[1] !== r || e[2] !== i || e[3] !== l ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": i(\"general:createNewLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(l, s)\n }),\n buttonStyle: \"pill\",\n className: `${VQ}__create-new-button`,\n el: \"link\",\n size: \"small\",\n to: r,\n children: i(\"general:createNew\")\n }, \"create-new-button\"), e[0] = s, e[1] = r, e[2] = i, e[3] = l, e[4] = a) : a = e[4], a;\n}\n\n\n\n\n\n\nvar yE = \"confirm-empty-trash\";\nfunction ax({ collectionConfig: t, hasDeletePermission: e }) {\n _s78();\n let { i18n: o, t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { code: r } = ye(), { config: s } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { openModal: i } = ie(), l = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), a = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), { clearRouteCache: c } = pt(), [u, d] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"ax.useEffect\": ()=>{\n ({\n \"ax.useEffect\": async ()=>{\n let p = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n depth: 0,\n limit: 0,\n locale: r,\n trash: !0,\n where: {\n deletedAt: {\n exists: !0\n }\n }\n }, {\n addQueryPrefix: !0\n });\n try {\n let g = await (await Ge.get((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: s.routes.api,\n path: `/${t.slug}${p}`\n }), {\n headers: {\n \"Accept-Language\": o.language,\n \"Content-Type\": \"application/json\"\n }\n })).json();\n d(g?.totalDocs ?? 0);\n } catch {\n d(0);\n }\n }\n })[\"ax.useEffect\"]();\n }\n }[\"ax.useEffect\"], [\n t.slug,\n s,\n o.language,\n r\n ]);\n let f = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"ax.useCallback[f]\": async ()=>{\n if (!e) return;\n let { slug: m, labels: p } = t, h = qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n limit: 0,\n locale: r,\n trash: !0,\n where: {\n deletedAt: {\n exists: !0\n }\n }\n }, {\n addQueryPrefix: !0\n }), g = await Ge.delete((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: s.routes.api,\n path: `/${m}${h}`\n }), {\n headers: {\n \"Accept-Language\": o.language,\n \"Content-Type\": \"application/json\"\n }\n });\n try {\n let b = await g.json(), C = b?.docs?.length || 0;\n g.status < 400 && ee.success(n(\"general:permanentlyDeletedCountSuccessfully\", {\n count: C,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(p?.plural, o)\n })), b?.errors?.length > 0 && ee.error(b.message, {\n description: b.errors.map({\n \"ax.useCallback[f]\": (y)=>y.message\n }[\"ax.useCallback[f]\"]).join(`\n`)\n }), l.replace(qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...Object.fromEntries(a.entries()),\n page: \"1\"\n }, {\n addQueryPrefix: !0\n })), c();\n } catch {\n ee.error(n(\"error:unknown\"));\n }\n }\n }[\"ax.useCallback[f]\"], [\n t,\n s,\n e,\n o,\n n,\n r,\n a,\n l,\n c\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n \"aria-label\": n(\"general:emptyTrashLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(t?.labels?.plural, o)\n }),\n buttonStyle: \"pill\",\n disabled: u === 0,\n id: \"empty-trash-button\",\n onClick: ()=>{\n i(yE);\n },\n size: \"small\",\n children: n(\"general:emptyTrash\")\n }, \"empty-trash-button\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 0: ({ children: m })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: m\n }),\n 1: ({ children: m })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: m\n })\n },\n i18nKey: \"general:aboutToPermanentlyDeleteTrash\",\n t: n,\n variables: {\n count: u ?? 0,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(u === 1 ? t.labels?.singular : t.labels?.plural, o)\n }\n }),\n confirmingLabel: n(\"general:deleting\"),\n heading: n(\"general:confirmDeletion\"),\n modalSlug: yE,\n onConfirm: f\n })\n ]\n });\n}\n_s78(ax, \"yQM5E46jBq8we/PFElYWw5tNpsE=\");\nvar CE = \"list-drawer\", cx = ({ className: t, collectionConfig: e, Description: o, disableBulkDelete: n, disableBulkEdit: r, hasCreatePermission: s, hasDeletePermission: i, hasTrashPermission: l, i18n: a, isBulkUploadEnabled: c, isTrashEnabled: u, newDocumentURL: d, onBulkUploadSuccess: f, openBulkUpload: m, smallBreak: p, viewType: h })=>{\n let { config: g, getEntityConfig: b } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { drawerSlug: C, isInDrawer: y, selectedOption: v } = Ir(), x = h === \"trash\", { isGroupingBy: I } = dt();\n return y ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ba, {\n Actions: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(uE, {\n className: `${CE}__header-close`,\n slug: C\n }, \"close-button\")\n ],\n AfterListHeaderContent: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n o,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(gE, {})\n ]\n }),\n className: `${CE}__header`,\n title: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(b({\n collectionSlug: v.value\n })?.labels?.plural, a),\n TitleActions: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(nx, {\n hasCreatePermission: s\n }, \"list-drawer-create-new-doc\")\n ].filter(Boolean)\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ba, {\n Actions: [\n !p && !I && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ja, {\n collectionConfig: e,\n disableBulkDelete: n,\n disableBulkEdit: r,\n hasDeletePermission: i,\n hasTrashPermission: l,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(e?.labels?.plural, a),\n showSelectAllAcrossPages: !I,\n viewType: h\n }, \"list-selection\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Mg, {\n collectionConfig: e,\n config: g,\n viewType: h\n }, \"default-list-actions\")\n ].filter(Boolean),\n AfterListHeaderContent: o,\n className: t,\n title: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(e?.labels?.plural, a),\n TitleActions: [\n s && !x && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sx, {\n collectionConfig: e,\n hasCreatePermission: s,\n newDocumentURL: d\n }, \"list-header-create-new-doc\"),\n s && c && !x && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Im, {\n collectionSlug: e.slug,\n hasCreatePermission: s,\n isBulkUploadEnabled: c,\n onBulkUploadSuccess: f,\n openBulkUpload: m\n }, \"list-header-bulk-upload\"),\n i && u && h === \"trash\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ax, {\n collectionConfig: e,\n hasDeletePermission: i\n }, \"list-header-empty-trash\")\n ].filter(Boolean)\n });\n};\n\n\nvar wE = \"group-by-header\", YQ = ({ collectionConfig: t, groupByFieldPath: e, groupByValue: o, heading: n })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"header\", {\n className: wE,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h4\", {\n className: `${wE}__heading`,\n \"data-group-id\": o,\n children: n\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ja, {\n collectionConfig: t,\n label: n,\n modalPrefix: o,\n where: {\n [e]: {\n equals: o\n }\n }\n })\n ]\n });\n\n\n\n\n\n\n\n\nvar Cc = \"per-page\", QQ = payload_shared__WEBPACK_IMPORTED_MODULE_48__.defaults.admin.pagination.limits, ux = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), { defaultLimit: o, handleChange: n, limit: r, limits: s } = t, i = o === void 0 ? 10 : o, l = s === void 0 ? QQ : s, { t: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c = (0,payload_shared__WEBPACK_IMPORTED_MODULE_24__.isNumber)(r) ? r : i, u;\n if (e[0] !== n || e[1] !== c || e[2] !== l || e[3] !== a) {\n let d;\n e[5] !== n || e[6] !== c || e[7] !== l ? (d = (f)=>{\n let { close: m } = f;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: l.map((p, h)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.Button, {\n className: [\n `${Cc}__button`,\n p === c && `${Cc}__button-active`\n ].filter(Boolean).join(\" \"),\n onClick: ()=>{\n m(), n && n(p);\n },\n children: [\n p === c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Cc}__chevron`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: \"right\",\n size: \"small\"\n })\n }),\n \"\\xA0\",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: p\n })\n ]\n }, h))\n });\n }, e[5] = n, e[6] = c, e[7] = l, e[8] = d) : d = e[8], u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: Cc,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Cc}__base-button`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: a(\"general:perPage\", {\n limit: c\n })\n }),\n \"\\xA0\",\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n className: `${Cc}__icon`\n })\n ]\n }),\n horizontalAlign: \"right\",\n render: d,\n size: \"small\"\n })\n }), e[0] = n, e[1] = c, e[2] = l, e[3] = a, e[4] = u;\n } else u = e[4];\n return u;\n};\nvar IE = \"page-controls\", zg = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(16), { AfterPageControls: o, collectionConfig: n, data: r, handlePageChange: s, handlePerPageChange: i, limit: l } = t, { i18n: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c;\n return e[0] !== o || e[1] !== n?.admin?.pagination?.limits || e[2] !== r.hasNextPage || e[3] !== r.hasPrevPage || e[4] !== r.limit || e[5] !== r.nextPage || e[6] !== r.page || e[7] !== r.pagingCounter || e[8] !== r.prevPage || e[9] !== r.totalDocs || e[10] !== r.totalPages || e[11] !== s || e[12] !== i || e[13] !== a || e[14] !== l ? (c = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: IE,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Xu, {\n hasNextPage: r.hasNextPage,\n hasPrevPage: r.hasPrevPage,\n limit: r.limit,\n nextPage: r.nextPage,\n numberOfNeighbors: 1,\n onChange: s,\n page: r.page,\n prevPage: r.prevPage,\n totalPages: r.totalPages\n }),\n r.totalDocs > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${IE}__page-info`,\n children: [\n r.page * r.limit - (r.limit - 1),\n \"-\",\n r.totalPages > 1 && r.totalPages !== r.page ? r.limit * r.page : r.totalDocs,\n \" \",\n a.t(\"general:of\"),\n \" \",\n r.totalDocs\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ux, {\n handleChange: i,\n limit: l,\n limits: n?.admin?.pagination?.limits,\n resetPage: r.totalDocs <= r.pagingCounter\n }),\n o\n ]\n })\n ]\n }), e[0] = o, e[1] = n?.admin?.pagination?.limits, e[2] = r.hasNextPage, e[3] = r.hasPrevPage, e[4] = r.limit, e[5] = r.nextPage, e[6] = r.page, e[7] = r.pagingCounter, e[8] = r.prevPage, e[9] = r.totalDocs, e[10] = r.totalPages, e[11] = s, e[12] = i, e[13] = a, e[14] = l, e[15] = c) : c = e[15], c;\n}, Wg = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(10), { AfterPageControls: o, collectionConfig: n } = t, { data: r, defaultLimit: s, handlePageChange: i, handlePerPageChange: l, query: a } = dt(), c;\n e[0] !== s || e[1] !== a.limit ? (c = (0,payload_shared__WEBPACK_IMPORTED_MODULE_24__.isNumber)(a.limit) ? a.limit : s, e[0] = s, e[1] = a.limit, e[2] = c) : c = e[2];\n let u;\n return e[3] !== o || e[4] !== n || e[5] !== r || e[6] !== i || e[7] !== l || e[8] !== c ? (u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zg, {\n AfterPageControls: o,\n collectionConfig: n,\n data: r,\n handlePageChange: i,\n handlePerPageChange: l,\n limit: c\n }), e[3] = o, e[4] = n, e[5] = r, e[6] = i, e[7] = l, e[8] = c, e[9] = u) : u = e[9], u;\n};\n\n\nvar oK = \"sticky-toolbar\", fx = ({ children: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: oK,\n children: t\n });\n\n\n\nvar sK = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(12), { AfterPageControls: o, collectionConfig: n, data: r, groupByValue: s } = t, { refineListData: i } = dt(), l;\n e[0] !== s || e[1] !== i ? (l = async (f)=>{\n await i({\n queryByGroup: {\n [s]: {\n page: f\n }\n }\n });\n }, e[0] = s, e[1] = i, e[2] = l) : l = e[2];\n let a = l, c;\n e[3] !== s || e[4] !== i ? (c = async (f)=>{\n await i({\n queryByGroup: {\n [s]: {\n limit: f,\n page: 1\n }\n }\n });\n }, e[3] = s, e[4] = i, e[5] = c) : c = e[5];\n let u = c, d;\n return e[6] !== o || e[7] !== n || e[8] !== r || e[9] !== a || e[10] !== u ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zg, {\n AfterPageControls: o,\n collectionConfig: n,\n data: r,\n handlePageChange: a,\n handlePerPageChange: u\n }), e[6] = o, e[7] = n, e[8] = r, e[9] = a, e[10] = u, e[11] = d) : d = e[11], d;\n};\n\n\n\n\n\n\nvar px = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--logout\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M12 16H14.6667C15.0203 16 15.3594 15.8595 15.6095 15.6095C15.8595 15.3594 16 15.0203 16 14.6667V5.33333C16 4.97971 15.8595 4.64057 15.6095 4.39052C15.3594 4.14048 15.0203 4 14.6667 4H12M7.33333 13.3333L4 10M4 10L7.33333 6.66667M4 10H12\",\n strokeLinecap: \"square\"\n })\n });\nvar lK = \"nav\", cK = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(5), { tabIndex: o } = t, n = o === void 0 ? 0 : o, { t: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: s } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { admin: i, routes: l } = s, { routes: a } = i, { logout: c } = a, { admin: u } = l, d;\n return e[0] !== u || e[1] !== c || e[2] !== r || e[3] !== n ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qt, {\n \"aria-label\": r(\"authentication:logOut\"),\n className: `${lK}__log-out`,\n href: (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: u,\n path: c\n }),\n prefetch: !1,\n tabIndex: n,\n title: r(\"authentication:logOut\"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(px, {})\n }), e[0] = u, e[1] = c, e[2] = r, e[3] = n, e[4] = d) : d = e[4], d;\n};\n\n\n\n\nvar Si = \"nav-group\", fK = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(21), { children: o, isOpen: n, label: r } = t, [s, i] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(typeof n < \"u\" ? !n : !1), [l, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { setPreference: c } = so(), { navOpen: u } = Ra();\n if (r) {\n let f;\n e[0] !== s || e[1] !== r || e[2] !== c ? (f = ()=>{\n a(!0);\n let F = {};\n F?.[r] ? F[r].open = !!s : F[r] = {\n open: !!s\n }, c(payload_shared__WEBPACK_IMPORTED_MODULE_46__.PREFERENCE_KEYS.NAV, {\n groups: F\n }, !0), i(!s);\n }, e[0] = s, e[1] = r, e[2] = c, e[3] = f) : f = e[3];\n let m = f, p = `${r}`, h = s && `${Si}--collapsed`, g;\n e[4] !== p || e[5] !== h ? (g = [\n `${Si}`,\n p,\n h\n ].filter(Boolean), e[4] = p, e[5] = h, e[6] = g) : g = e[6];\n let b = g.join(\" \"), C = `nav-group-${r}`, y = `${Si}__toggle--${s ? \"collapsed\" : \"open\"}`, v;\n e[7] !== y ? (v = [\n `${Si}__toggle`,\n y\n ].filter(Boolean), e[7] = y, e[8] = v) : v = e[8];\n let x = v.join(\" \"), I = u ? 0 : -1, w;\n return e[9] !== l || e[10] !== o || e[11] !== s || e[12] !== r || e[13] !== I || e[14] !== b || e[15] !== C || e[16] !== x || e[17] !== m ? (w = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: b,\n id: C,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n className: x,\n onClick: m,\n tabIndex: I,\n type: \"button\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Si}__label`,\n children: r\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Si}__indicator`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n className: `${Si}__indicator`,\n direction: s ? void 0 : \"up\"\n })\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wr, {\n duration: l ? 200 : 0,\n height: s ? 0 : \"auto\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Si}__content`,\n children: o\n })\n })\n ]\n }), e[9] = l, e[10] = o, e[11] = s, e[12] = r, e[13] = I, e[14] = b, e[15] = C, e[16] = x, e[17] = m, e[18] = w) : w = e[18], w;\n }\n let d;\n return e[19] !== o ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: o\n }), e[19] = o, e[20] = d) : d = e[20], d;\n};\n\n\nvar wc = \"combobox\", bK = (t)=>{\n _s79();\n let { entries: e, minEntriesForSearch: o = 8, onSelect: n, onToggleClose: r, onToggleOpen: s, searchPlaceholder: i = \"Search...\", ...l } = t, [a, c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n if (!a) return e;\n let b = a.toLowerCase();\n return e.filter((C)=>C.name.toLowerCase().includes(b));\n }, [\n e,\n a\n ]), m = e.length >= o, p = f.length > 0, h = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"bK.useCallback[h]\": (b)=>{\n u.current = b, b && m && setTimeout({\n \"bK.useCallback[h]\": ()=>{\n d.current?.focus();\n }\n }[\"bK.useCallback[h]\"], 100), s?.(b);\n }\n }[\"bK.useCallback[h]\"], [\n m,\n s\n ]), g = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"bK.useCallback[g]\": ()=>{\n u.current = !1, c(\"\"), r?.();\n }\n }[\"bK.useCallback[g]\"], [\n r\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n ...l,\n className: `${wc} ${l.className || \"\"}`,\n onToggleClose: g,\n onToggleOpen: h,\n render: ({ close: b })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${wc}__content`,\n children: [\n m && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${wc}__search-wrapper${p ? \"\" : ` ${wc}__search-wrapper--no-results`}`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"aria-label\": i,\n className: `${wc}__search-input`,\n onChange: (C)=>c(C.target.value),\n placeholder: i,\n ref: d,\n type: \"text\",\n value: a\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: f.map((C, y)=>{\n let v = ()=>{\n n && n(C), b();\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${wc}__entry`,\n \"data-popup-prevent-close\": !0,\n onClick: v,\n onKeyDown: (x)=>{\n (x.key === \"Enter\" || x.key === \" \") && (x.preventDefault(), v());\n },\n role: \"menuitem\",\n tabIndex: 0,\n children: C.Component\n }, `${C.name}-${y}`);\n })\n })\n ]\n })\n });\n};\n_s79(bK, \"BsIGMaVO2aMeGqXWbIEwckwjqM0=\");\n\n\n\nvar xK = \"browse-by-folder-button\";\nfunction wK({ active: t }) {\n let { t: e } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: o } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { admin: { routes: { browseByFolder: n } }, routes: { admin: r } } = o;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Qt, {\n className: [\n xK,\n t && \"active\"\n ].filter(Boolean).join(\" \"),\n href: (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: r,\n path: n\n }),\n id: \"browse-by-folder\",\n prefetch: !1,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {}),\n e(\"folder:browseByFolder\")\n ]\n });\n}\n\n\nvar IK = (t)=>{\n _s80();\n let { field: e, field: { name: o, admin: { className: n, isClearable: r = !0, isSortable: s = !0, placeholder: i } = {}, hasMany: l = !1, label: a, localized: c, options: u = [], required: d }, onChange: f, path: m, readOnly: p, validate: h } = t, { t: g } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { folderType: b } = Gt(), C = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"IK.useMemo[C]\": ()=>!b || b.length === 0 ? fh(u) : fh(u.filter({\n \"IK.useMemo[C]\": (E)=>typeof E == \"object\" && E.value ? b.includes(E.value) : !0\n }[\"IK.useMemo[C]\"]))\n }[\"IK.useMemo[C]\"], [\n u,\n b\n ]), y = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"IK.useCallback[y]\": (E, B)=>{\n if (typeof h == \"function\") return h(E, {\n ...B,\n hasMany: l,\n options: C,\n required: d\n });\n }\n }[\"IK.useCallback[y]\"], [\n h,\n d,\n l,\n C\n ]), { customComponents: { AfterInput: v, BeforeInput: x, Description: I, Error: w, Label: F } = {}, disabled: S, path: R, selectFilterOptions: D, setValue: _, showError: T, value: A } = Te({\n potentiallyStalePath: m,\n validate: y\n }), k = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"IK.useCallback[k]\": (E)=>{\n if (!p || S) {\n let B = null;\n E && l ? Array.isArray(E) && E.length > 0 ? B = E.map({\n \"IK.useCallback[k]\": ($)=>$.value\n }[\"IK.useCallback[k]\"]) : B = null : E && !Array.isArray(E) && (B = E.value), typeof f == \"function\" && f(B), _(B);\n }\n }\n }[\"IK.useCallback[k]\"], [\n p,\n S,\n l,\n _,\n f\n ]), P = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"IK.useMemo[P]\": ()=>et(e)\n }[\"IK.useMemo[P]\"], [\n e\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zr, {\n AfterInput: v,\n BeforeInput: x,\n className: n,\n Description: I,\n description: g(\"folder:folderTypeDescription\"),\n Error: w,\n filterOption: D ? ({ value: E })=>D?.some((B)=>(typeof B == \"string\" ? B : B.value) === E) : void 0,\n hasMany: l,\n isClearable: r,\n isSortable: s,\n Label: F,\n label: a,\n localized: c,\n name: o,\n onChange: k,\n options: C,\n path: R,\n placeholder: i,\n readOnly: p || S,\n required: d || Array.isArray(b) && b.length > 0,\n showError: T,\n style: P,\n value: A\n });\n};\n_s80(IK, \"z41jSru5a/yqIJOVzE+CdMiAhcQ=\");\n_c266 = IK;\n\n\n\n\n\n\n\nvar Sc = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--document\",\n fill: \"none\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n width: \"16\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n clipRule: \"evenodd\",\n d: \"M3.5 1C2.94772 1 2.5 1.44772 2.5 2V14C2.5 14.5523 2.94771 15 3.5 15H12.5C13.0523 15 13.5 14.5523 13.5 14V4.41421C13.5 4.149 13.3946 3.89464 13.2071 3.70711L10.7929 1.29289C10.6054 1.10536 10.351 1 10.0858 1H3.5ZM5 5.5C5 5.22386 5.22386 5 5.5 5H10.5C10.7761 5 11 5.22386 11 5.5C11 5.77614 10.7761 6 10.5 6H5.5C5.22386 6 5 5.77614 5 5.5ZM5 8.5C5 8.22386 5.22386 8 5.5 8H10.5C10.7761 8 11 8.22386 11 8.5C11 8.77614 10.7761 9 10.5 9H5.5C5.22386 9 5 8.77614 5 8.5ZM5 11.5C5 11.2239 5.22386 11 5.5 11H10.5C10.7761 11 11 11.2239 11 11.5C11 11.7761 10.7761 12 10.5 12H5.5C5.22386 12 5 11.7761 5 11.5Z\",\n fill: \"currentColor\",\n fillRule: \"evenodd\"\n })\n });\n_c267 = Sc;\n\n\n\n\n\n\nvar LE = \"draggable-with-click\", Ug = ({ as: t = \"div\", children: e, className: o, disabled: n = !1, onClick: r, onKeyDown: s, ref: i, thresholdPixels: l = 3 })=>{\n let a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), { attributes: c, listeners: u, setNodeRef: d } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDraggable)({\n id: a,\n disabled: n\n }), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n x: 0,\n y: 0\n }), m = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), p = (g)=>{\n f.current = {\n x: g.clientX,\n y: g.clientY\n }, m.current = !1;\n let b = (v)=>{\n let x = Math.abs(v.clientX - f.current.x), I = Math.abs(v.clientY - f.current.y);\n (x > l || I > l) && (m.current = !0, u?.onPointerDown && (u.onPointerDown(g), r(v)), window.removeEventListener(\"pointermove\", b));\n }, C = ()=>{\n window.removeEventListener(\"pointermove\", b), window.removeEventListener(\"pointerup\", y);\n }, y = (v)=>{\n C(), m.current || r(v);\n };\n window.addEventListener(\"pointermove\", b), window.addEventListener(\"pointerup\", y);\n };\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(t || \"div\", {\n role: \"button\",\n tabIndex: 0,\n ...c,\n className: [\n LE,\n o,\n n ? `${LE}--disabled` : \"\"\n ].filter(Boolean).join(\" \"),\n onKeyDown: n ? void 0 : s,\n onPointerDown: n ? void 0 : r ? p : void 0,\n ref: (g)=>{\n n || (d(g), i && (i.current = g));\n },\n children: e\n });\n};\n\n\nvar Bs = \"simple-table\", kE = ({ appearance: t, className: e, headerCells: o, tableRows: n })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n e,\n Bs,\n t && `${Bs}--appearance-${t}`\n ].filter(Boolean).join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"table\", {\n cellPadding: 0,\n cellSpacing: 0,\n className: `${Bs}__table`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(RK, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(PK, {\n children: o\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(AK, {\n children: n\n })\n ]\n })\n }), RK = ({ children: t, className: e, ...o })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"thead\", {\n className: `${Bs}__thead ${e || \"\"}`.trim(),\n ...o,\n children: t\n }), AK = ({ children: t, className: e, ...o })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tbody\", {\n className: `${Bs}__tbody ${e || \"\"}`.trim(),\n ...o,\n children: t\n }), PK = ({ children: t, className: e, ...o })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"tr\", {\n className: `${Bs}__tr ${e || \"\"}`.trim(),\n ...o,\n children: t\n }), jE = ({ children: t, className: e, ...o })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"td\", {\n className: `${Bs}__td ${e || \"\"}`.trim(),\n ...o,\n children: t\n }), $E = ({ children: t, className: e, ...o })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"th\", {\n className: `${Bs}__th ${e || \"\"}`.trim(),\n ...o,\n children: t\n }), BE = ({ children: t, className: e, ...o })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"td\", {\n className: `${Bs}__hidden-cell ${e || \"\"}`.trim(),\n ...o,\n children: t\n });\nvar es = \"draggable-table-row\";\nfunction gx({ id: t, columns: e, disabled: o = !1, dragData: n, isDroppable: r, isFocused: s, isSelected: i, isSelecting: l, itemKey: a, onClick: c, onKeyDown: u }) {\n _s81();\n let d = !o && r && !i, { isOver: f, setNodeRef: m } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDroppable)({\n id: t,\n data: n,\n disabled: !d\n }), p = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"gx.useEffect\": ()=>{\n let h = p.current;\n return s && p.current ? p.current.focus() : !s && p.current && p.current.blur(), ({\n \"gx.useEffect\": ()=>{\n h && h.blur();\n }\n })[\"gx.useEffect\"];\n }\n }[\"gx.useEffect\"], [\n s\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Ug, {\n as: \"tr\",\n className: [\n es,\n i && `${es}--selected`,\n l && `${es}--selecting`,\n o && `${es}--disabled`,\n s && `${es}--focused`,\n f && `${es}--over`\n ].filter(Boolean).join(\" \"),\n onClick: c,\n onKeyDown: u,\n ref: p,\n children: [\n e.map((h, g)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jE, {\n className: [\n `${es}__cell-content`,\n g === 0 && `${es}__first-td`,\n g === e.length - 1 && `${es}__last-td`\n ].filter(Boolean).join(\" \"),\n children: h\n }, `${a}-${g}`)),\n d ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(BE, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${es}__drop-area`,\n ref: m\n })\n }) : null\n ]\n }, a);\n}\n_s81(gx, \"5LJbL999IOpFdoj3NBJqEaXzwrI=\");\nvar zE = \"folder-file-table\";\nfunction vx(t) {\n _s82();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(39), { showRelationCell: o } = t, n = o === void 0 ? !0 : o, { checkIfItemIsDisabled: r, documents: s, focusedRowIndex: i, onItemClick: l, onItemKeyPress: a, selectedItemKeys: c, subfolders: u } = Gt(), { config: d } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: f, t: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), p;\n e[0] !== d || e[1] !== f ? (p = ()=>{\n let y = {};\n return d.collections.forEach((v)=>{\n y[v.slug] = {\n plural: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(v.labels?.plural, f),\n singular: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(v.labels?.singular, f)\n };\n }), y;\n }, e[0] = d, e[1] = f, e[2] = p) : p = e[2];\n let [h] = react__WEBPACK_IMPORTED_MODULE_0__.useState(p), g;\n e[3] !== n || e[4] !== m ? (g = ()=>{\n let y = [\n {\n name: \"name\",\n label: m(\"general:name\")\n },\n {\n name: \"createdAt\",\n label: m(\"general:createdAt\")\n },\n {\n name: \"updatedAt\",\n label: m(\"general:updatedAt\")\n }\n ];\n return n && y.push({\n name: \"type\",\n label: m(\"version:type\")\n }), y;\n }, e[3] = n, e[4] = m, e[5] = g) : g = e[5];\n let [b] = react__WEBPACK_IMPORTED_MODULE_0__.useState(g), C;\n if (e[6] !== r || e[7] !== b || e[8] !== d || e[9] !== s || e[10] !== i || e[11] !== f || e[12] !== l || e[13] !== a || e[14] !== h || e[15] !== c || e[16] !== u) {\n let y;\n e[18] !== r || e[19] !== b || e[20] !== d || e[21] !== i || e[22] !== f || e[23] !== l || e[24] !== a || e[25] !== h || e[26] !== c ? (y = (x, I)=>{\n let { itemKey: w, relationTo: F, value: S } = x, R = (0,payload_shared__WEBPACK_IMPORTED_MODULE_36__.extractID)(S);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(gx, {\n columns: b.map((D, _)=>{\n let { name: T } = D, A = \"\\u2014\";\n return T === \"name\" && S._folderOrDocumentTitle !== void 0 && (A = S._folderOrDocumentTitle), (T === \"createdAt\" || T === \"updatedAt\") && S[T] && (A = Gr({\n date: S[T],\n i18n: f,\n pattern: d.admin.dateFormat\n })), T === \"type\" && (A = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n h[F]?.singular || F,\n Array.isArray(x.value?.folderType) ? x.value?.folderType.reduce((k, P, E)=>E === 0 ? ` \\u2014 ${h[P]?.plural || P}` : E > 0 ? `${k}, ${h[P]?.plural || P}` : k, \"\") : \"\"\n ]\n })), _ === 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: `${zE}__cell-with-icon`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {}),\n A\n ]\n }, `${w}-${T}`) : A;\n }),\n disabled: r(x),\n dragData: {\n id: R,\n type: \"folder\"\n },\n id: R,\n isDroppable: !0,\n isFocused: i === I,\n isSelected: c.has(w),\n isSelecting: c.size > 0,\n itemKey: w,\n onClick: (D)=>{\n l({\n event: D,\n index: I,\n item: x\n });\n },\n onKeyDown: (D)=>{\n a({\n event: D,\n index: I,\n item: x\n });\n }\n }, `${I}-${w}`);\n }, e[18] = r, e[19] = b, e[20] = d, e[21] = i, e[22] = f, e[23] = l, e[24] = a, e[25] = h, e[26] = c, e[27] = y) : y = e[27];\n let v;\n e[28] !== r || e[29] !== b || e[30] !== d || e[31] !== i || e[32] !== f || e[33] !== l || e[34] !== a || e[35] !== h || e[36] !== c || e[37] !== u.length ? (v = (x, I)=>{\n let { itemKey: w, relationTo: F, value: S } = x, R = (0,payload_shared__WEBPACK_IMPORTED_MODULE_36__.extractID)(S), D = I + u.length;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(gx, {\n columns: b.map((_, T)=>{\n let { name: A } = _, k = \"\\u2014\";\n return A === \"name\" && S._folderOrDocumentTitle !== void 0 && (k = S._folderOrDocumentTitle), (A === \"createdAt\" || A === \"updatedAt\") && S[A] && (k = Gr({\n date: S[A],\n i18n: f,\n pattern: d.admin.dateFormat\n })), A === \"type\" && (k = h[F]?.singular || F), T === 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n className: `${zE}__cell-with-icon`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sc, {}),\n k\n ]\n }, `${w}-${A}`) : k;\n }),\n disabled: r(x),\n dragData: {\n id: R,\n type: \"document\"\n },\n id: R,\n isFocused: i === D,\n isSelected: c.has(w),\n isSelecting: c.size > 0,\n itemKey: w,\n onClick: (_)=>{\n l({\n event: _,\n index: D,\n item: x\n });\n },\n onKeyDown: (_)=>{\n a({\n event: _,\n index: D,\n item: x\n });\n }\n }, `${D}-${w}`);\n }, e[28] = r, e[29] = b, e[30] = d, e[31] = i, e[32] = f, e[33] = l, e[34] = a, e[35] = h, e[36] = c, e[37] = u.length, e[38] = v) : v = e[38], C = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kE, {\n headerCells: b.map(jK),\n tableRows: [\n ...u.map(y),\n ...s.map(v)\n ]\n }), e[6] = r, e[7] = b, e[8] = d, e[9] = s, e[10] = i, e[11] = f, e[12] = l, e[13] = a, e[14] = h, e[15] = c, e[16] = u, e[17] = C;\n } else C = e[17];\n return C;\n}\n_s82(vx, \"ScibFBxRLWaz8kRyJhZJ7KEiNZY=\");\nfunction jK(t) {\n let { name: e, label: o } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($E, {\n children: o\n }, e);\n}\n\n\n\n\n\n\n\n\n\nfunction WE({ className: t = \"\" }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `icon icon--dots ${t}`.trim(),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {})\n ]\n });\n}\n_c268 = WE;\nvar pr = \"folder-file-card\";\nfunction xx({ id: t, type: e, className: o = \"\", disabled: n = !1, folderType: r, isDeleting: s = !1, isFocused: i = !1, isSelected: l = !1, itemKey: a, onClick: c, onKeyDown: u, PopupActions: d, previewUrl: f, selectedCount: m = 0, title: p }) {\n _s83();\n let h = !t || n || e !== \"folder\", { isOver: g, setNodeRef: b } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDroppable)({\n id: a,\n data: {\n id: t,\n type: e,\n folderType: r\n },\n disabled: h\n }), C = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"xx.useEffect\": ()=>{\n let y = C.current;\n return i && C.current ? C.current.focus() : !i && C.current && C.current.blur(), ({\n \"xx.useEffect\": ()=>{\n y && y.blur();\n }\n })[\"xx.useEffect\"];\n }\n }[\"xx.useEffect\"], [\n i\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Ug, {\n className: [\n pr,\n o,\n l && `${pr}--selected`,\n n && `${pr}--disabled`,\n s && `${pr}--deleting`,\n i && `${pr}--focused`,\n g && `${pr}--over`,\n `${pr}--${e}`\n ].filter(Boolean).join(\" \"),\n disabled: n || !c && !u,\n onClick: c,\n onKeyDown: u,\n ref: C,\n children: [\n h ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${pr}__drop-area`,\n ref: b\n }),\n e === \"file\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${pr}__preview-area`,\n children: f ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Fr, {\n fileSrc: f\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sc, {})\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${pr}__titlebar-area`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${pr}__icon-wrap`,\n children: e === \"file\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sc, {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {})\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${pr}__titlebar-labels`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${pr}__name`,\n title: p,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: p\n })\n }),\n r && r.length > 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(VK, {\n folderType: r\n }) : null\n ]\n }),\n d ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(WE, {}),\n disabled: m > 1 || m === 1 && !l,\n horizontalAlign: \"right\",\n size: \"large\",\n verticalAlign: \"bottom\",\n children: d\n }) : null\n ]\n })\n ]\n }, a);\n}\n_s83(xx, \"ImAbPORcv5DnBotb5qai2Ww9K/c=\");\nfunction VK({ folderType: t }) {\n _s84();\n let { config: e } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), n = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"VK.useMemo[n]\": ()=>t.reduce({\n \"VK.useMemo[n]\": (r, s)=>{\n let i = e.collections?.find({\n \"VK.useMemo[n]\": (l)=>l.slug === s\n }[\"VK.useMemo[n]\"]);\n return i ? [\n ...r,\n (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i.labels.plural, o)\n ] : r;\n }\n }[\"VK.useMemo[n]\"], [])\n }[\"VK.useMemo[n]\"], [\n t,\n e.collections,\n o\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${pr}__assigned-collections`,\n children: n.map((r, s)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n children: [\n r,\n s < t.length - 1 ? \", \" : \"\"\n ]\n }, r))\n });\n}\n_s84(VK, \"D9zQnKTON/XnsP+rhlL1Z9gsZnc=\");\n_c269 = VK;\nfunction HE(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(18), { type: o, className: n, index: r, item: s } = t, { checkIfItemIsDisabled: i, focusedRowIndex: l, onItemClick: a, onItemKeyPress: c, selectedItemKeys: u } = Gt(), d;\n if (e[0] !== i || e[1] !== n || e[2] !== l || e[3] !== r || e[4] !== s || e[5] !== a || e[6] !== c || e[7] !== u || e[8] !== o) {\n let f = u.has(s.itemKey), m = i(s), p;\n e[10] !== r || e[11] !== s || e[12] !== a ? (p = (g)=>{\n a({\n event: g,\n index: r,\n item: s\n });\n }, e[10] = r, e[11] = s, e[12] = a, e[13] = p) : p = e[13];\n let h;\n e[14] !== r || e[15] !== s || e[16] !== c ? (h = (g)=>{\n c({\n event: g,\n index: r,\n item: s\n });\n }, e[14] = r, e[15] = s, e[16] = c, e[17] = h) : h = e[17], d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xx, {\n className: n,\n disabled: m,\n folderType: s.value.folderType || [],\n id: s.value.id,\n isFocused: l === r,\n isSelected: f,\n itemKey: s.itemKey,\n onClick: p,\n onKeyDown: h,\n previewUrl: s.value.url,\n title: s.value._folderOrDocumentTitle,\n type: o\n }), e[0] = i, e[1] = n, e[2] = l, e[3] = r, e[4] = s, e[5] = a, e[6] = c, e[7] = u, e[8] = o, e[9] = d;\n } else d = e[9];\n return d;\n}\n_c270 = HE;\nvar UE = \"item-card-grid\";\nfunction Yg({ type: t, items: e, subfolderCount: o, title: n }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n n && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n className: `${UE}__title`,\n children: n\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: UE,\n children: !e || e?.length === 0 ? null : e.map((r, s)=>{\n let i = s + (o || 0), { itemKey: l } = r;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(HE, {\n index: i,\n item: r,\n type: t\n }, l);\n })\n })\n ]\n });\n}\n_c271 = Yg;\n\n\n\n\n\n\nfunction Sx(t) {\n return t === void 0 || typeof t == \"number\" ? t : decodeURIComponent(t);\n}\n_c272 = Sx;\nvar XK = \"id-label\", Zg = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), { id: o, className: n, prefix: r } = t, s = r === void 0 ? \"ID:\" : r, { config: i } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: l } = i, { admin: a } = l, { collectionSlug: c, globalSlug: u } = Se(), d = Vr(), f = `/${c ? `collections/${c}` : `globals/${u}`}/${o}`, m;\n if (e[0] !== a || e[1] !== n || e[2] !== d || e[3] !== o || e[4] !== s || e[5] !== f) {\n let p = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: a,\n path: f\n }), h;\n e[7] !== n ? (h = [\n XK,\n n\n ].filter(Boolean), e[7] = n, e[8] = h) : h = e[8], m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: h.join(\" \"),\n title: o,\n children: [\n s,\n \"\\xA0\",\n d > 1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Qt, {\n href: p,\n children: Sx(o)\n }) : Sx(o)\n ]\n }), e[0] = a, e[1] = n, e[2] = d, e[3] = o, e[4] = s, e[5] = f, e[6] = m;\n } else m = e[6];\n return m;\n};\nvar Ix = \"render-title\", _x = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(10), { className: o, element: n, fallback: r, title: s } = t, i = n === void 0 ? \"h1\" : n, { id: l, isInitializing: a } = Se(), { title: c } = Ao(), u = s || c || r, d = u === l, f = i, m;\n if (e[0] !== f || e[1] !== o || e[2] !== l || e[3] !== d || e[4] !== a || e[5] !== u) {\n let p = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: \"\\xA0\"\n }), h = d && `${Ix}--has-id`, g;\n e[7] !== o || e[8] !== h ? (g = [\n o,\n Ix,\n h\n ].filter(Boolean), e[7] = o, e[8] = h, e[9] = g) : g = e[9], m = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(f, {\n className: g.join(\" \"),\n \"data-doc-id\": l,\n title: u,\n children: a ? p : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: d ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zg, {\n className: `${Ix}__id`,\n id: l\n }) : u || p\n })\n }), e[0] = f, e[1] = o, e[2] = l, e[3] = d, e[4] = a, e[5] = u, e[6] = m;\n } else m = e[6];\n return m;\n};\n\n\n\nvar ts = \"sort-column\", JK = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(19), { name: o, appearance: n, disable: r, Label: s, label: i } = t, l = r === void 0 ? !1 : r, { handleSortChange: a, query: c } = dt(), { t: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { sort: d } = c, f = `-${o}`, m = o, p;\n e[0] !== m || e[1] !== d ? (p = [\n `${ts}__asc`\n ], d === m && p.push(`${ts}--active`), e[0] = m, e[1] = d, e[2] = p) : p = e[2];\n let h;\n e[3] !== f || e[4] !== d ? (h = [\n `${ts}__desc`\n ], d === f && h.push(`${ts}--active`), e[3] = f, e[4] = d, e[5] = h) : h = e[5];\n let g = n && `${ts}--appearance-${n}`, b;\n e[6] !== g ? (b = [\n ts,\n g\n ].filter(Boolean), e[6] = g, e[7] = b) : b = e[7];\n let C = b.join(\" \"), y;\n return e[8] !== s || e[9] !== m || e[10] !== p || e[11] !== f || e[12] !== h || e[13] !== l || e[14] !== a || e[15] !== i || e[16] !== u || e[17] !== C ? (y = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: C,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${ts}__label`,\n children: s ?? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n hideLocale: !0,\n label: i,\n unstyled: !0\n })\n }),\n !l && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${ts}__buttons`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": u(\"general:sortByLabelDirection\", {\n direction: u(\"general:ascending\"),\n label: i\n }),\n className: [\n ...p,\n `${ts}__button`\n ].filter(Boolean).join(\" \"),\n onClick: ()=>{\n a(m);\n },\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n direction: \"up\"\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": u(\"general:sortByLabelDirection\", {\n direction: u(\"general:descending\"),\n label: i\n }),\n className: [\n ...h,\n `${ts}__button`\n ].filter(Boolean).join(\" \"),\n onClick: ()=>{\n a(f);\n },\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {})\n })\n ]\n })\n ]\n }), e[8] = s, e[9] = m, e[10] = p, e[11] = f, e[12] = h, e[13] = l, e[14] = a, e[15] = i, e[16] = u, e[17] = C, e[18] = y) : y = e[18], y;\n};\n\n\n\n\n\n\n\nvar ZE = \"item-search\", JE = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { placeholder: o, setSearchTerm: n } = t, r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)(), s = `${r}-label`, i;\n e[0] !== n ? (i = (c)=>{\n n(c.target.value);\n }, e[0] = n, e[1] = i) : i = e[1];\n let l = i, a;\n return e[2] !== l || e[3] !== r || e[4] !== s || e[5] !== o ? (a = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: ZE,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"label\", {\n className: \"sr-only\",\n htmlFor: r,\n id: s,\n children: o\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"aria-labelledby\": s,\n className: `${ZE}__input`,\n id: r,\n onChange: l,\n placeholder: o,\n type: \"text\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ji, {})\n ]\n }), e[2] = l, e[3] = r, e[4] = s, e[5] = o, e[6] = a) : a = e[6], a;\n};\nvar Ii = \"items-drawer\", tee = (t, e)=>{\n if (\"labels\" in t && t.labels?.singular) {\n if (typeof t.labels.singular == \"string\") return t.labels.singular.toLowerCase();\n if (typeof t.labels.singular == \"object\") return (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(t.labels.singular, e).toLowerCase();\n }\n if (\"label\" in t && t.label) {\n if (typeof t.label == \"string\") return t.label.toLowerCase();\n if (typeof t.label == \"object\") return (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(t.label, e).toLowerCase();\n }\n return \"slug\" in t ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(t.slug).toLowerCase() : \"\";\n};\nvar oee = (t)=>{\n if (\"admin\" in t && t?.admin?.images?.thumbnail) {\n let e = t.admin?.images.thumbnail;\n return {\n imageAltText: typeof e == \"string\" ? void 0 : e.alt,\n imageURL: typeof e == \"string\" ? e : e.url\n };\n }\n return \"imageURL\" in t ? {\n imageAltText: t.imageAltText,\n imageURL: t.imageURL\n } : {\n imageAltText: void 0,\n imageURL: void 0\n };\n}, ree = (t, e)=>{\n if (\"labels\" in t && t.labels?.singular) return (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(t.labels.singular, e);\n if (\"label\" in t && t.label) {\n if (typeof t.label == \"string\") return t.label;\n if (typeof t.label == \"object\") return (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(t.label, e);\n }\n return (0,payload_shared__WEBPACK_IMPORTED_MODULE_43__.toWords)(t.slug);\n}, nee = (t)=>{\n let { addRowIndex: e, drawerSlug: o, items: n, labels: r, onItemClick: s, searchPlaceholder: i, title: l } = t, [a, c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), [u, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(n), { closeModal: f, isModalOpen: m } = ie(), { i18n: p, t: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: g } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let y = {\n _none: []\n };\n return u.forEach((v)=>{\n if (typeof v == \"object\" && \"admin\" in v && v.admin?.group) {\n let x = v.admin.group, I = typeof x == \"string\" ? x : (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(x, p);\n Object.hasOwn(y, I) ? y[I].push(v) : y[I] = [\n v\n ];\n } else y._none.push(v);\n }), y;\n }, [\n u,\n p\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n m(o) || c(\"\");\n }, [\n m,\n o\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let y = a.toLowerCase(), v = n?.reduce((x, I)=>{\n let w;\n return typeof I == \"string\" ? w = g.blocksMap?.[I] : w = I, w && tee(w, p).includes(y) && x.push(w), x;\n }, []);\n d(v || []);\n }, [\n a,\n n,\n p,\n g.blocksMap\n ]);\n let C = l || (r ? h(\"fields:addLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r.singular, p)\n }) : h(\"fields:addNew\"));\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(It, {\n slug: o,\n title: C,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(JE, {\n placeholder: i || h(\"fields:searchForBlock\"),\n setSearchTerm: c\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ii}__items-wrapper`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n className: `${Ii}__item-groups`,\n children: Object.entries(b).map(([y, v])=>v.length ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"li\", {\n className: [\n `${Ii}__item-group`,\n y === \"_none\" && `${Ii}__item-group-none`\n ].filter(Boolean).join(\" \"),\n children: [\n y !== \"_none\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n className: `${Ii}__item-group-label`,\n children: y\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"ul\", {\n className: `${Ii}__items`,\n children: v.map((x, I)=>{\n let w = typeof x == \"string\" ? g.blocksMap?.[x] : x;\n if (!w) return null;\n let { imageAltText: F, imageURL: S } = oee(w), R = ree(w, p);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n className: `${Ii}__item`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(op, {\n alignLabel: \"center\",\n label: R,\n onClick: ()=>{\n s(w, e), f(o);\n },\n thumbnail: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Ii}__default-image`,\n children: S ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"img\", {\n alt: F,\n src: S\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pu, {})\n })\n })\n }, I);\n })\n })\n ]\n }, y) : null)\n })\n })\n ]\n });\n};\n\n\n\nvar aee = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(24), { field: o, path: n, readOnly: r, useAsSlug: s } = t, { label: i } = o, { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { collectionSlug: a, globalSlug: c } = Se(), { slugify: u } = Nt(), d = n || o.name, f;\n e[0] !== d ? (f = {\n path: d\n }, e[0] = d, e[1] = f) : f = e[1];\n let { setValue: m, value: p } = Te(f), { getData: h, getDataByPath: g } = $e(), [b, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0), y;\n e[2] !== a || e[3] !== h || e[4] !== g || e[5] !== c || e[6] !== n || e[7] !== m || e[8] !== u || e[9] !== s || e[10] !== p ? (y = async (S)=>{\n S.preventDefault();\n let R = g(s), D = await u({\n collectionSlug: a,\n data: h(),\n globalSlug: c,\n path: n,\n valueToSlugify: R\n });\n if (D == null) {\n m(\"\");\n return;\n }\n p !== D && m(D);\n }, e[2] = a, e[3] = h, e[4] = g, e[5] = c, e[6] = n, e[7] = m, e[8] = u, e[9] = s, e[10] = p, e[11] = y) : y = e[11];\n let v = y, x;\n e[12] === Symbol.for(\"react.memo_cache_sentinel\") ? (x = (S)=>{\n S.preventDefault(), C(lee);\n }, e[12] = x) : x = e[12];\n let I = x, w = `field-${n}`, F;\n return e[13] !== o.name || e[14] !== v || e[15] !== b || e[16] !== i || e[17] !== n || e[18] !== r || e[19] !== m || e[20] !== l || e[21] !== w || e[22] !== p ? (F = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"field-type slug-field-component\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: \"label-wrapper\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ce, {\n htmlFor: w,\n label: i\n }),\n !b && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"none\",\n className: \"lock-button\",\n onClick: v,\n children: l(\"authentication:generate\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"none\",\n className: \"lock-button\",\n onClick: I,\n children: l(b ? \"general:unlock\" : \"general:lock\")\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hd, {\n onChange: m,\n path: n || o.name,\n readOnly: !!(r || b),\n value: p\n })\n ]\n }), e[13] = o.name, e[14] = v, e[15] = b, e[16] = i, e[17] = n, e[18] = r, e[19] = m, e[20] = l, e[21] = w, e[22] = p, e[23] = F) : F = e[23], F;\n};\nfunction lee(t) {\n return !t;\n}\n\n\nvar cee = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n \"aria-hidden\": \"true\",\n className: \"graphic code-block-icon\",\n focusable: \"false\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n className: \"stroke\",\n d: \"M14 12.6667L16.6667 9.99999L14 7.33332M5.99999 7.33332L3.33333 9.99999L5.99999 12.6667M11.6667 4.66666L8.33333 15.3333\",\n strokeLinecap: \"square\"\n })\n });\n\n\nvar Dx = \"minimize-maximize\", uee = ({ className: t, isMinimized: e })=>{\n let o = [\n Dx,\n e ? `${Dx}--minimized` : `${Dx}--maximized`,\n t\n ].filter(Boolean).join(\" \");\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: o,\n height: \"20\",\n stroke: \"currentColor\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: e ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M7.33333 4H5.33333C4.97971 4 4.64057 4.14048 4.39052 4.39052C4.14048 4.64057 4 4.97971 4 5.33333V7.33333M16 7.33333V5.33333C16 4.97971 15.8595 4.64057 15.6095 4.39052C15.3594 4.14048 15.0203 4 14.6667 4H12.6667M4 12.6667V14.6667C4 15.0203 4.14048 15.3594 4.39052 15.6095C4.64057 15.8595 4.97971 16 5.33333 16H7.33333M12.6667 16H14.6667C15.0203 16 15.3594 15.8595 15.6095 15.6095C15.8595 15.3594 16 15.0203 16 14.6667V12.6667\"\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M7.33333 4V6C7.33333 6.35362 7.19286 6.69276 6.94281 6.94281C6.69276 7.19286 6.35362 7.33333 6 7.33333H4M16 7.33333H14C13.6464 7.33333 13.3072 7.19286 13.0572 6.94281C12.8071 6.69276 12.6667 6.35362 12.6667 6V4M4 12.6667H6C6.35362 12.6667 6.69276 12.8071 6.94281 13.0572C7.19286 13.3072 7.33333 13.6464 7.33333 14V16M12.6667 16V14C12.6667 13.6464 12.8071 13.3072 13.0572 13.0572C13.3072 12.8071 13.6464 12.6667 14 12.6667H16\"\n })\n });\n};\n\n\nvar dee = \"gear\", mee = ({ ariaLabel: t, className: e })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n \"aria-label\": t,\n className: [\n e,\n dee\n ].filter(Boolean).join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--gear\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M9.33337 8.84671L6.66671 4.22671M9.33337 11.1534L6.66671 15.7734M10 16.6667V15.3334M10 15.3334C12.9456 15.3334 15.3334 12.9456 15.3334 10C15.3334 7.05452 12.9456 4.66671 10 4.66671M10 15.3334C7.05452 15.3334 4.66671 12.9456 4.66671 10M10 3.33337V4.66671M10 4.66671C7.05452 4.66671 4.66671 7.05452 4.66671 10M11.3334 10H16.6667M11.3334 10C11.3334 10.7364 10.7364 11.3334 10 11.3334C9.26366 11.3334 8.66671 10.7364 8.66671 10C8.66671 9.26366 9.26366 8.66671 10 8.66671C10.7364 8.66671 11.3334 9.26366 11.3334 10ZM13.3334 15.7734L12.6667 14.62M13.3334 4.22671L12.6667 5.38004M3.33337 10H4.66671M15.7734 13.3334L14.62 12.6667M15.7734 6.66671L14.62 7.33337M4.22671 13.3334L5.38004 12.6667M4.22671 6.66671L5.38004 7.33337\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n })\n });\n\n\nfunction pee() {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n className: \"icon icon--move-folder\",\n fill: \"none\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n width: \"24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"g\", {\n filter: \"url(#filter0_d_278_1086)\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M5.33334 10V7.33334C5.33334 6.97971 5.47382 6.64058 5.72387 6.39053C5.97392 6.14048 6.31305 6 6.66668 6H9.26668C9.48967 5.99782 9.70965 6.0516 9.90648 6.15642C10.1033 6.26124 10.2707 6.41375 10.3933 6.6L10.9333 7.4C11.0547 7.58436 11.22 7.73568 11.4143 7.84041C11.6087 7.94513 11.8259 7.99997 12.0467 8H17.3333C17.687 8 18.0261 8.14048 18.2762 8.39053C18.5262 8.64058 18.6667 8.97971 18.6667 9.33334V16C18.6667 16.3536 18.5262 16.6928 18.2762 16.9428C18.0261 17.1929 17.687 17.3333 17.3333 17.3333H6.66668C6.31305 17.3333 5.97392 17.1929 5.72387 16.9428C5.47382 16.6928 5.33334 16.3536 5.33334 16V15.3333M5.33334 12.6667H12M12 12.6667L10 14.6667M12 12.6667L10 10.6667\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"defs\", {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"filter\", {\n colorInterpolationFilters: \"sRGB\",\n filterUnits: \"userSpaceOnUse\",\n height: \"26\",\n id: \"filter0_d_278_1086\",\n width: \"26\",\n x: \"-1\",\n y: \"-1\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"feBlend\", {\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_278_1086\",\n mode: \"normal\",\n result: \"shape\"\n })\n })\n })\n ]\n });\n}\n\n\nvar Ax = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n className: \"icon icon--grid-view\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M8 4H4.66667C4.29848 4 4 4.29848 4 4.66667V8C4 8.36819 4.29848 8.66667 4.66667 8.66667H8C8.36819 8.66667 8.66667 8.36819 8.66667 8V4.66667C8.66667 4.29848 8.36819 4 8 4Z\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M15.3333 4H12C11.6318 4 11.3333 4.29848 11.3333 4.66667V8C11.3333 8.36819 11.6318 8.66667 12 8.66667H15.3333C15.7015 8.66667 16 8.36819 16 8V4.66667C16 4.29848 15.7015 4 15.3333 4Z\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M15.3333 11.3333H12C11.6318 11.3333 11.3333 11.6318 11.3333 12V15.3333C11.3333 15.7015 11.6318 16 12 16H15.3333C15.7015 16 16 15.7015 16 15.3333V12C16 11.6318 15.7015 11.3333 15.3333 11.3333Z\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M8 11.3333H4.66667C4.29848 11.3333 4 11.6318 4 12V15.3333C4 15.7015 4.29848 16 4.66667 16H8C8.36819 16 8.66667 15.7015 8.66667 15.3333V12C8.66667 11.6318 8.36819 11.3333 8 11.3333Z\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n_c273 = Ax;\n\n\nvar Px = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"svg\", {\n className: \"icon icon--list-view\",\n fill: \"none\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n width: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M4 10H16M4 14H16M4 6H16\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n });\n_c274 = Px;\n\n\nvar Ex = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n fill: \"none\",\n height: \"26\",\n viewBox: \"0 0 26 26\",\n width: \"26\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M13 21C17.4183 21 21 17.4183 21 13C21 8.58172 17.4183 5 13 5C8.58172 5 5 8.58172 5 13C5 17.4183 8.58172 21 13 21Z\",\n fill: \"var(--theme-error-500)\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M15.4001 10.5996L10.6001 15.3996M10.6001 10.5996L15.4001 15.3996\",\n stroke: \"var(--theme-error-50)\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n_c275 = Ex;\n\n\nvar Nx = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n fill: \"none\",\n height: \"26\",\n viewBox: \"0 0 26 26\",\n width: \"26\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M13 21C17.4183 21 21 17.4183 21 13C21 8.58172 17.4183 5 13 5C8.58172 5 5 8.58172 5 13C5 17.4183 8.58172 21 13 21Z\",\n fill: \"var(--theme-elevation-500)\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M13 16.1998V12.9998M13 9.7998H13.0077\",\n stroke: \"var(--theme-elevation-50)\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n_c276 = Nx;\n\n\nvar Lx = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n fill: \"none\",\n height: \"26\",\n viewBox: \"0 0 26 26\",\n width: \"26\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M13 21C17.4183 21 21 17.4183 21 13C21 8.58172 17.4183 5 13 5C8.58172 5 5 8.58172 5 13C5 17.4183 8.58172 21 13 21Z\",\n fill: \"var(--theme-success-500)\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M10.6001 13.0004L12.2001 14.6004L15.4001 11.4004\",\n stroke: \"var(--theme-success-50)\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n_c277 = Lx;\n\n\nvar kx = ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"svg\", {\n fill: \"none\",\n height: \"26\",\n viewBox: \"0 0 26 26\",\n width: \"26\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M13 21C17.4183 21 21 17.4183 21 13C21 8.58172 17.4183 5 13 5C8.58172 5 5 8.58172 5 13C5 17.4183 8.58172 21 13 21Z\",\n fill: \"var(--theme-warning-500)\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"path\", {\n d: \"M13 10V13.2M13 16.4H13.008\",\n stroke: \"var(--theme-warning-50)\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n\n\n\nvar u5 = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n addClientFunction: ()=>null,\n removeClientFunction: ()=>null\n}), d5 = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({}), jx = (t)=>{\n _s85();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { children: o } = t, n;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (n = {}, e[0] = n) : n = e[0];\n let [r, s] = react__WEBPACK_IMPORTED_MODULE_0__.useState(n), i;\n e[1] === Symbol.for(\"react.memo_cache_sentinel\") ? (i = (d)=>{\n s((f)=>{\n let m = {\n ...f\n };\n return m[d.key] = d.func, m;\n });\n }, e[1] = i) : i = e[1];\n let l = i, a;\n e[2] === Symbol.for(\"react.memo_cache_sentinel\") ? (a = (d)=>{\n s((f)=>{\n let m = {\n ...f\n };\n return delete m[d.key], m;\n });\n }, e[2] = a) : a = e[2];\n let c = a, u;\n return e[3] !== o || e[4] !== r ? (u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(u5, {\n value: {\n addClientFunction: l,\n removeClientFunction: c\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(d5, {\n value: r,\n children: o\n })\n }), e[3] = o, e[4] = r, e[5] = u) : u = e[5], u;\n}, Cee = (t, e)=>{\n _s86();\n let o = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { addClientFunction: n, removeClientFunction: r } = react__WEBPACK_IMPORTED_MODULE_0__.use(u5), s, i;\n o[0] !== n || o[1] !== e || o[2] !== t || o[3] !== r ? (s = ()=>(n({\n func: e,\n key: t\n }), ()=>{\n r({\n func: e,\n key: t\n });\n }), i = [\n e,\n t,\n n,\n r\n ], o[0] = n, o[1] = e, o[2] = t, o[3] = r, o[4] = s, o[5] = i) : (s = o[4], i = o[5]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(s, i);\n}, xee = ()=>react__WEBPACK_IMPORTED_MODULE_0__.use(d5);\n_s85(jx, \"n+XMdSQLwM7GaH9GbfxQEQSRIMI=\");\n_s86(Cee, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\n\n\n\n\n\nvar p5 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(15), { eventType: o, onMessage: n, url: r } = t, s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { config: a } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { serverURL: c } = a, u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), d, f;\n e[0] !== o || e[1] !== i || e[2] !== n || e[3] !== c || e[4] !== r ? (d = ()=>{\n let C = async (y)=>{\n y.origin !== window.location.origin || y.origin !== r || y.origin !== c || typeof n == \"function\" && y.data?.type === o && !s.current && (s.current = !0, await n(y.data?.searchParams), s.current = !1);\n };\n return i && u.current && window.addEventListener(\"message\", C, !1), ()=>{\n window.removeEventListener(\"message\", C);\n };\n }, f = [\n n,\n o,\n r,\n c,\n i\n ], e[0] = o, e[1] = i, e[2] = n, e[3] = c, e[4] = r, e[5] = d, e[6] = f) : (d = e[5], f = e[6]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(d, f);\n let m;\n e[7] !== r ? (m = (C)=>{\n C && C.preventDefault();\n let y = {\n height: 700,\n left: \"auto\",\n menubar: \"no\",\n popup: \"yes\",\n toolbar: \"no\",\n top: \"auto\",\n width: 800\n }, v = Object.entries(y).reduce((I, w)=>{\n let [F, S] = w, R = I;\n if (S === \"auto\") {\n if (F === \"top\") {\n let D = Math.round(window.innerHeight / 2 - y.height / 2);\n R = R + `top=${D},`;\n } else if (F === \"left\") {\n let D = Math.round(window.innerWidth / 2 - y.width / 2);\n R = R + `left=${D},`;\n }\n return R;\n }\n return R = R + `${F}=${S},`, R;\n }, \"\").slice(0, -1), x = window.open(r, \"_blank\", v);\n u.current = x, l(!0);\n }, e[7] = r, e[8] = m) : m = e[8];\n let p = m, h, g;\n e[9] !== i ? (h = ()=>{\n let C;\n return i ? C = setInterval(function() {\n u.current.closed && (clearInterval(C), l(!1));\n }, 1e3) : clearInterval(C), ()=>{\n C && clearInterval(C);\n };\n }, g = [\n i,\n u\n ], e[9] = i, e[10] = h, e[11] = g) : (h = e[10], g = e[11]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(h, g);\n let b;\n return e[12] !== i || e[13] !== p ? (b = {\n isPopupOpen: i,\n openPopupWindow: p,\n popupRef: u\n }, e[12] = i, e[13] = p, e[14] = b) : b = e[14], b;\n};\nvar Iee = (t)=>{\n try {\n return new URL(t, window.location.origin).href;\n } catch {\n return t;\n }\n}, $x = (t)=>t?.startsWith(\"http://\") || t?.startsWith(\"https://\") ? t : Iee(t);\n\nvar h5 = ({ collisionRect: t, droppableContainers: e, ...o })=>{\n let n = e.find(({ id: l })=>l === \"live-preview-area\"), r = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.rectIntersection)({\n ...o,\n collisionRect: t,\n droppableContainers: [\n n\n ]\n });\n if (r.length === 0) return r;\n let s = n?.rect?.current;\n if (t.top >= s.top && t.left >= s.left && t.bottom <= s.bottom && t.right <= s.right) return r;\n};\nvar g5 = (t, e)=>{\n switch(e.type){\n case \"height\":\n return {\n ...t,\n height: e.value\n };\n case \"width\":\n return {\n ...t,\n width: e.value\n };\n default:\n return {\n ...t,\n ...e?.value || {}\n };\n }\n};\nvar Aee = ({ breakpoints: t, children: e, isLivePreviewEnabled: o, isLivePreviewing: n, isPreviewEnabled: r, previewURL: s, typeofLivePreviewURL: i, url: l })=>{\n _s87();\n let [a, c] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"iframe\"), [u, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(n), [f, m] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(u), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Y)=>{\n Y && m(!0), d(Y);\n }, []), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>[\n ...t || [],\n {\n name: \"responsive\",\n height: \"100%\",\n label: \"Responsive\",\n width: \"100%\"\n }\n ], [\n t\n ]), [g, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"), [C, y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(s), { isPopupOpen: v, openPopupWindow: x, popupRef: I } = p5({\n eventType: \"payload-live-preview\",\n url: g\n }), [w, F] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [S, R] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { collectionSlug: D, globalSlug: _ } = Se(), T = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0), { setPreference: A } = so(), k = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), [P, E] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [B, $] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(1), [M, L] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n x: 0,\n y: 0\n }), [j, O] = react__WEBPACK_IMPORTED_MODULE_0__.useReducer(g5, {\n height: 0,\n width: 0\n }), [V, W] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n height: 0,\n width: 0\n }), [Z, z] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\"responsive\"), Q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Y)=>{\n let le;\n typeof Y == \"string\" && (le = $x(Y)), le || p(!1), le !== g && (F(!1), b(le));\n }, [\n g\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n typeof l == \"string\" && b($x(l));\n }, [\n l\n ]);\n let U = (Y)=>{\n if (Y.over && Y.over.id === \"live-preview-area\") {\n let le = {\n x: M.x + Y.delta.x,\n y: M.y + Y.delta.y\n };\n L(le);\n }\n }, X = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Y)=>{\n O({\n type: \"width\",\n value: Y\n });\n }, [\n O\n ]), ue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Y)=>{\n O({\n type: \"height\",\n value: Y\n });\n }, [\n O\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let Y = h?.find((le)=>le.name === Z);\n Y && Z !== \"responsive\" && Z !== \"custom\" && typeof Y?.width == \"number\" && typeof Y?.height == \"number\" && O({\n type: \"reset\",\n value: {\n height: Y.height,\n width: Y.width\n }\n });\n }, [\n Z,\n h\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let Y = (le)=>{\n g?.startsWith(le.origin) && le.data && typeof le.data == \"object\" && le.data.type === \"payload-live-preview\" && le.data.ready && F(!0);\n };\n return window.addEventListener(\"message\", Y), R(!0), ()=>{\n window.removeEventListener(\"message\", Y);\n };\n }, [\n g,\n S\n ]);\n let q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((Y)=>{\n F(!1), c(Y), Y === \"popup\" && x();\n }, [\n x\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n (v ? \"popup\" : \"iframe\") !== a && q(\"iframe\");\n }, [\n a,\n v,\n q\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (T.current) {\n T.current = !1;\n return;\n }\n A(D ? `collection-${D}` : `global-${_}`, {\n editViewType: u ? \"live-preview\" : \"default\"\n }, !0);\n }, [\n u,\n A,\n D,\n _\n ]);\n let J = (0,react__WEBPACK_IMPORTED_MODULE_0__.useId)();\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ig, {\n value: {\n appIsReady: w,\n breakpoint: Z,\n breakpoints: h,\n iframeRef: k,\n isLivePreviewEnabled: o,\n isLivePreviewing: u,\n isPopupOpen: v,\n isPreviewEnabled: r,\n listeningForMessages: S,\n loadedURL: P,\n measuredDeviceSize: V,\n openPopupWindow: x,\n popupRef: I,\n previewURL: C,\n previewWindowType: a,\n setAppIsReady: F,\n setBreakpoint: z,\n setHeight: ue,\n setIsLivePreviewing: p,\n setLoadedURL: E,\n setMeasuredDeviceSize: W,\n setPreviewURL: y,\n setPreviewWindowType: q,\n setSize: O,\n setToolbarPosition: L,\n setURL: Q,\n setWidth: X,\n setZoom: $,\n shouldRenderIframe: f,\n size: j,\n toolbarPosition: M,\n typeofLivePreviewURL: i,\n url: g,\n zoom: B\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.DndContext, {\n collisionDetection: h5,\n id: J,\n onDragEnd: U,\n children: e\n })\n });\n};\n_s87(Aee, \"zpXlJufRUk6xeYJ3MeIN5uFcTnQ=\");\n_c278 = Aee;\n\n\n\nvar y5 = 200, Mx = \"progress-bar\", kee = 150, jee = ()=>{\n _s88();\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(9), { isTransitioning: e, transitionProgress: o } = Ye(), [n, r] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0), i, l;\n if (t[0] !== e || t[1] !== o ? (i = ()=>{\n let a, c;\n return e ? s.current ? c = setTimeout(()=>{\n r(o), s.current = !1;\n }, kee) : r(o) : (s.current = !0, r(1), a = setTimeout(()=>{\n r(null);\n }, y5 * 2)), ()=>{\n clearTimeout(a), clearTimeout(c);\n };\n }, l = [\n e,\n o\n ], t[0] = e, t[1] = o, t[2] = i, t[3] = l) : (i = t[2], l = t[3]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(i, l), typeof n == \"number\") {\n let a = n === 1 && `${Mx}--fade-out`, c;\n t[4] !== a ? (c = [\n Mx,\n a\n ].filter(Boolean), t[4] = a, t[5] = c) : c = t[5];\n let u = c.join(\" \"), d;\n return t[6] !== n || t[7] !== u ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: u,\n style: {\n \"--transition-duration\": `${y5}ms`\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Mx}__progress`,\n style: {\n width: `${(n || 0) * 100}%`\n }\n })\n }), t[6] = n, t[7] = u, t[8] = d) : d = t[8], d;\n }\n return null;\n};\n_s88(jee, \"Ll0p6wU+8telk1CQPKzzTjU+6f0=\");\n\n\n\nvar C5 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), Vee = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { children: o, visibleEntities: n } = t, r;\n e[0] !== n ? (r = (l)=>{\n let { collectionSlug: a, globalSlug: c } = l;\n return a ? n.collections.includes(a) : c ? n.globals.includes(c) : !1;\n }, e[0] = n, e[1] = r) : r = e[1];\n let s = r, i;\n return e[2] !== o || e[3] !== s || e[4] !== n ? (i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(C5, {\n value: {\n isEntityVisible: s,\n visibleEntities: n\n },\n children: o\n }), e[2] = o, e[3] = s, e[4] = n, e[5] = i) : i = e[5], i;\n}, Ox = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(C5);\n\n\n\n\nvar x5 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({}), Vx = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { children: o } = t, n = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useParams)(), r;\n return e[0] !== o || e[1] !== n ? (r = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(x5, {\n value: n,\n children: o\n }), e[0] = o, e[1] = n, e[2] = r) : r = e[2], r;\n}, Xee = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(x5);\n\n\n\n\n\n\nvar Am = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\nvar Pm = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Am);\n_c279 = Pm;\n\nvar tte = (t, e)=>{\n let { timestamp: o, animationRef: n } = e;\n n.current = null;\n let { x: r, y: s, xDirection: i, yDirection: l, eventsFired: a, hasScrolled: c } = t, u = c || !!o, d = u ? window.pageXOffset : 0, f = u ? window.pageYOffset : 0, m = u ? a + 1 : a, p = d - r, h = f - s, g = d / (document.body.scrollWidth - window.innerWidth) * 100, b = f / (document.body.scrollHeight - window.innerHeight) * 100, C = (g + b) / 2, y = p > 0 ? \"right\" : p < 0 ? \"left\" : i, v = h > 0 ? \"down\" : h < 0 ? \"up\" : l;\n return {\n x: d,\n y: f,\n xDifference: p,\n yDifference: h,\n xDirection: y,\n yDirection: v,\n xPercentage: g,\n yPercentage: b,\n totalPercentage: C,\n eventsFired: m,\n hasScrolled: u\n };\n}, Em = (t)=>{\n let { children: e } = t, o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(tte, {\n x: 0,\n y: 0,\n xDifference: 0,\n yDifference: 0,\n xDirection: void 0,\n yDirection: void 0,\n xPercentage: 0,\n yPercentage: 0,\n totalPercentage: 0,\n eventsFired: 0,\n hasScrolled: !1\n }), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((i)=>{\n o.current && cancelAnimationFrame(o.current), o.current = requestAnimationFrame((l)=>{\n r({\n e: i,\n timestamp: l,\n animationRef: o\n });\n });\n }, []);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(window.addEventListener(\"scroll\", s), ()=>{\n window.removeEventListener(\"scroll\", s);\n }), [\n s\n ]), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(Am.Provider, {\n value: Object.assign({}, n)\n }, e && e);\n};\n\n\n\n\n\nfunction w5() {\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { closeAllModals: e } = ie(), o = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.usePathname)(), n;\n t[0] !== e ? (n = ()=>{\n e();\n }, t[0] = e, t[1] = n) : n = t[1];\n let r = Qe(n), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0), i;\n t[2] !== r ? (i = ()=>{\n if (s.current) {\n s.current = !1;\n return;\n }\n r();\n }, t[2] = r, t[3] = i) : i = t[3];\n let l;\n return t[4] !== o ? (l = [\n o\n ], t[4] = o, t[5] = l) : l = t[5], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(i, l), null;\n}\nvar { WindowInfoProvider: Gx } = bi && \"WindowInfoProvider\" in bi ? bi : {\n WindowInfoProvider: void 0\n}, { useWindowInfo: Ma } = bi && \"useWindowInfo\" in bi ? bi : {\n useWindowInfo: void 0\n};\n\n\n\n\nvar ute = {\n searchParams: {},\n stringifyParams: ()=>\"\"\n}, I5 = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(ute), zx = ({ children: t })=>{\n _s89();\n let o = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)().toString(), n = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"zx.useMemo[n]\": ()=>qs_esm__WEBPACK_IMPORTED_MODULE_16__.parse(o, {\n depth: 10,\n ignoreQueryPrefix: !0\n })\n }[\"zx.useMemo[n]\"], [\n o\n ]), r = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"zx.useCallback[r]\": ({ params: s, replace: i = !1 })=>qs_esm__WEBPACK_IMPORTED_MODULE_13__.stringify({\n ...i ? {} : n,\n ...s\n }, {\n addQueryPrefix: !0\n })\n }[\"zx.useCallback[r]\"], [\n n\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(I5, {\n value: {\n searchParams: n,\n stringifyParams: r\n },\n children: t\n });\n}, dte = ()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.use)(I5);\n_s89(zx, \"K+bg826hLAPGeZQxCH3gx/rMax4=\");\n\n\nvar _5 = ({ config: t })=>{\n let { admin: { toast: { duration: e, expand: o, limit: n, position: r } = {} } = {} } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)($w, {\n className: \"payload-toast-container\",\n closeButton: !0,\n dir: \"undefined\",\n duration: e ?? 4e3,\n expand: o ?? !1,\n gap: 8,\n icons: {\n error: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ex, {}),\n info: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Nx, {}),\n success: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Lx, {}),\n warning: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kx, {})\n },\n offset: \"calc(var(--gutter-h) / 2)\",\n position: r ?? \"bottom-right\",\n toastOptions: {\n classNames: {\n closeButton: \"payload-toast-close-button\",\n content: \"toast-content\",\n error: \"toast-error\",\n icon: \"toast-icon\",\n info: \"toast-info\",\n success: \"toast-success\",\n title: \"toast-title\",\n toast: \"payload-toast-item\",\n warning: \"toast-warning\"\n },\n unstyled: !0\n },\n visibleToasts: n ?? 5\n });\n};\nvar gte = (t)=>{\n _s90();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(16), { children: o, config: n, dateFNSKey: r, fallbackLang: s, isNavOpen: i, languageCode: l, languageOptions: a, locale: c, permissions: u, serverFunction: d, switchLanguageServerAction: f, theme: m, translations: p, user: h } = t, g = react__WEBPACK_IMPORTED_MODULE_0__.useId(), b;\n return e[0] !== o || e[1] !== n || e[2] !== r || e[3] !== g || e[4] !== s || e[5] !== i || e[6] !== l || e[7] !== a || e[8] !== c || e[9] !== u || e[10] !== d || e[11] !== f || e[12] !== m || e[13] !== p || e[14] !== h ? (b = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_4, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(i0, {\n serverFunction: d,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Hb, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sy, {\n cachingEnabled: process.env.NEXT_PUBLIC_ENABLE_ROUTER_CACHE_REFRESH === \"true\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.b, {\n config: n,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(jx, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.c, {\n dateFNSKey: r,\n fallbackLang: s,\n language: l,\n languageOptions: a,\n switchLanguageServerAction: f,\n translations: p,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gx, {\n breakpoints: {\n l: \"(max-width: 1440px)\",\n m: \"(max-width: 1024px)\",\n s: \"(max-width: 768px)\",\n xs: \"(max-width: 400px)\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Em, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zx, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_1, {\n classPrefix: \"payload\",\n transTime: 0,\n zIndex: \"var(--z-modal)\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(w5, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(A1, {\n permissions: u,\n user: h,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(G1, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.i, {\n theme: m,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Vx, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(P1, {\n locale: c,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(dC, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hF, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(N0, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(cC, {\n initialIsOpen: i,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Z0, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.DndContext, {\n collisionDetection: _dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.pointerWithin,\n id: g,\n children: o\n })\n })\n })\n })\n })\n })\n })\n })\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(w1, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(s3, {})\n ]\n })\n ]\n })\n })\n })\n })\n })\n })\n })\n })\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_5, {\n config: n\n })\n ]\n }), e[0] = o, e[1] = n, e[2] = r, e[3] = g, e[4] = s, e[5] = i, e[6] = l, e[7] = a, e[8] = c, e[9] = u, e[10] = d, e[11] = f, e[12] = m, e[13] = p, e[14] = h, e[15] = b) : b = e[15], b;\n};\n_s90(gte, \"ed5bWNkUPrPM1bC0FJ1TKtlQGTg=\", false, function() {\n return [\n react__WEBPACK_IMPORTED_MODULE_0__.useId,\n react__WEBPACK_IMPORTED_MODULE_0__.useId,\n react__WEBPACK_IMPORTED_MODULE_0__.useId,\n react__WEBPACK_IMPORTED_MODULE_0__.useId\n ];\n});\n\n\n\nvar xte = \"login-fields\";\nfunction Hx(t) {\n let { className: e, loginWithUsername: o, operation: n, permissions: r, readOnly: s, t: i } = t;\n function l(p, h) {\n return (0,payload_shared__WEBPACK_IMPORTED_MODULE_34__.getFieldPermissions)({\n field: {\n name: p,\n type: \"text\"\n },\n operation: n === \"create\" ? \"create\" : h,\n parentName: \"\",\n permissions: r\n }).operation;\n }\n let a = typeof r == \"object\" && \"email\" in r && r.email, c = typeof r == \"object\" && \"username\" in r && r.username, u = a ? {\n read: l(\"email\", \"read\"),\n update: l(\"email\", \"update\")\n } : {\n read: !0,\n update: !0\n }, d = c ? {\n read: l(\"username\", \"read\"),\n update: l(\"username\", \"update\")\n } : {\n read: !0,\n update: !0\n }, f = (!o || o?.requireEmail || o?.allowEmailLogin) && u.read, m = !!o && d.read;\n if (f || m) return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n xte,\n e && e\n ].filter(Boolean).join(\" \"),\n children: [\n f ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hs, {\n value: \"email\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ia, {\n field: {\n name: \"email\",\n admin: {\n autoComplete: \"off\"\n },\n label: i(\"general:email\"),\n required: !o || o && o.requireEmail\n },\n path: \"email\",\n readOnly: s || !u.update,\n schemaPath: \"email\",\n validate: payload_shared__WEBPACK_IMPORTED_MODULE_41__.email\n })\n }) : null,\n m && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hs, {\n value: \"username\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ba, {\n field: {\n name: \"username\",\n admin: {\n autoComplete: \"off\"\n },\n label: i(\"authentication:username\"),\n required: o && o.requireUsername\n },\n path: \"username\",\n readOnly: s || !d.update,\n schemaPath: \"username\",\n validate: payload_shared__WEBPACK_IMPORTED_MODULE_41__.username\n })\n })\n ]\n });\n}\n_c280 = Hx;\n\n\n\nvar T5 = \"select-all\", Ite = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(7), { selectAll: e, toggleAll: o } = xo(), { i18n: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), r;\n if (t[0] !== n || t[1] !== e || t[2] !== o) {\n let s;\n t[4] === Symbol.for(\"react.memo_cache_sentinel\") ? (s = [\n T5,\n `${T5}__checkbox`\n ], t[4] = s) : s = t[4];\n let i;\n t[5] !== o ? (i = ()=>o(), t[5] = o, t[6] = i) : i = t[6], r = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n \"aria-label\": e === Jt.None ? n.t(\"general:selectAllRows\") : n.t(\"general:deselectAllRows\"),\n checked: e === Jt.AllInPage || e === Jt.AllAvailable,\n className: s.join(\" \"),\n id: \"select-all\",\n name: \"select-all\",\n onToggle: i,\n partialChecked: e === Jt.Some\n }), t[0] = n, t[1] = e, t[2] = o, t[3] = r;\n } else r = t[3];\n return r;\n};\n\n\n\nvar D5 = \"select-row\", Tte = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { rowData: o } = t, { user: n } = Ie(), { selected: r, setSelection: s } = xo(), i;\n if (e[0] !== o || e[1] !== n?.id) {\n i = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let { _isLocked: f, _userEditing: m } = o || {};\n if (f && m && m.id !== n?.id) {\n i = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fm, {\n user: m\n });\n break e;\n }\n }\n e[0] = o, e[1] = n?.id, e[2] = i;\n } else i = e[2];\n if (i !== Symbol.for(\"react.early_return_sentinel\")) return i;\n let l;\n e[3] !== o.id || e[4] !== r ? (l = r.get(o.id), e[3] = o.id, e[4] = r, e[5] = l) : l = e[5];\n let a = !!l, c;\n e[6] === Symbol.for(\"react.memo_cache_sentinel\") ? (c = [\n D5,\n `${D5}__checkbox`\n ], e[6] = c) : c = e[6];\n let u;\n e[7] !== o.id || e[8] !== s ? (u = ()=>s(o.id), e[7] = o.id, e[8] = s, e[9] = u) : u = e[9];\n let d;\n return e[10] !== a || e[11] !== u ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: a,\n className: c.join(\" \"),\n onToggle: u\n }), e[10] = a, e[11] = u, e[12] = d) : d = e[12], d;\n};\n\n\nvar Dc = (t)=>{\n let { onClick: e } = t, { count: o, selected: n } = xo(), { t: r } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)();\n return !n || !o ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(yt, {\n onClick: ()=>{\n typeof e == \"function\" && e(n);\n },\n pillStyle: \"white\",\n size: \"small\",\n children: [\n r(\"general:select\"),\n \" \",\n o\n ]\n });\n};\n_c281 = Dc;\n\n\n\n\n\nvar Oa = \"collection-list\";\nfunction Lte(t) {\n _s91();\n let { AfterList: e, AfterListTable: o, beforeActions: n, BeforeList: r, BeforeListTable: s, collectionSlug: i, columnState: l, Description: a, disableBulkDelete: c, disableBulkEdit: u, disableQueryPresets: d, enableRowSelections: f, hasCreatePermission: m, hasDeletePermission: p, hasTrashPermission: h, listMenuItems: g, newDocumentURL: b, queryPreset: C, queryPresetPermissions: y, renderedFilters: v, resolvedFilterOptions: x, Table: I, viewType: w } = t, [F] = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.a)(I), { allowCreate: S, createNewDrawerSlug: R, isInDrawer: D, onBulkSelect: _ } = Ir(), T = S !== void 0 ? S && m : m, { config: { routes: { admin: A }, serverURL: k }, getEntityConfig: P } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), E = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { data: B, isGroupingBy: $ } = dt(), { openModal: M } = ie(), { drawerSlug: L, setCollectionSlug: j, setOnSuccess: O } = Ho(), V = P({\n collectionSlug: i\n }), { labels: W, upload: Z } = V, z = !!Z, Q = z && V.upload.bulkUpload, U = !!V.trash, { i18n: X } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { setStepNav: ue } = Pr(), { breakpoints: { s: q } } = Ma(), J = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Lte.useMemo[J]\": ()=>z ? B.docs.map({\n \"Lte.useMemo[J]\": (le)=>({\n ...le,\n filesize: (0,payload_shared__WEBPACK_IMPORTED_MODULE_39__.formatFilesize)(le.filesize)\n })\n }[\"Lte.useMemo[J]\"]) : B?.docs\n }[\"Lte.useMemo[J]\"], [\n B?.docs,\n z\n ]), Y = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Lte.useCallback[Y]\": ()=>{\n j(i), M(L), O({\n \"Lte.useCallback[Y]\": ()=>E.refresh()\n }[\"Lte.useCallback[Y]\"]);\n }\n }[\"Lte.useCallback[Y]\"], [\n E,\n i,\n L,\n M,\n j,\n O\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (!D) {\n let le = {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(W?.plural, X),\n url: U && w === \"trash\" ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: A,\n path: `/collections/${i}`\n }) : void 0\n }, xe = {\n label: X.t(\"general:trash\")\n };\n ue(U && w === \"trash\" ? [\n le,\n xe\n ] : [\n le\n ]);\n }\n }, [\n A,\n ue,\n k,\n W,\n D,\n U,\n w,\n X,\n i\n ]), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ou, {\n collectionSlug: i,\n columnState: l,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Oa} ${Oa}--${i}`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(gC, {\n docs: J,\n totalDocs: B?.totalDocs,\n children: [\n r,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${Oa}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(cx, {\n collectionConfig: V,\n Description: a || V?.admin?.description ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Oa}__sub-header`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(de, {\n CustomComponent: a,\n Fallback: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jy, {\n collectionSlug: i,\n description: V?.admin?.description\n })\n })\n }) : void 0,\n disableBulkDelete: c,\n disableBulkEdit: u,\n hasCreatePermission: T,\n hasDeletePermission: p,\n hasTrashPermission: h,\n i18n: X,\n isBulkUploadEnabled: Q && !Z.hideFileInputOnCreate,\n isTrashEnabled: U,\n newDocumentURL: b,\n openBulkUpload: Y,\n smallBreak: q,\n viewType: w\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(JC, {\n beforeActions: f && typeof _ == \"function\" ? n ? [\n ...n,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dc, {\n onClick: _\n }, \"select-many\")\n ] : [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dc, {\n onClick: _\n }, \"select-many\")\n ] : n,\n collectionConfig: V,\n collectionSlug: i,\n disableQueryPresets: V?.enableQueryPresets !== !0 || d,\n listMenuItems: g,\n queryPreset: C,\n queryPresetPermissions: y,\n renderedFilters: v,\n resolvedFilterOptions: x\n }),\n s,\n J?.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Oa}__tables`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Hu, {\n children: F\n })\n }),\n J?.length === 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gn, {\n Actions: T && b && w !== \"trash\" ? [\n D ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n el: \"button\",\n onClick: ()=>M(R),\n children: X.t(\"general:createNewLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(W?.singular, X)\n })\n }, \"create\") : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n el: \"link\",\n to: b,\n children: X.t(\"general:createNewLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(W?.singular, X)\n })\n }, \"create\")\n ] : [],\n Message: w === \"trash\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: X.t(\"general:noTrashResults\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(W?.plural, X)\n })\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: X.t(\"general:noResultsFound\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: X.t(\"general:noResultsDescription\")\n })\n ]\n })\n }),\n o,\n J?.length > 0 && !$ && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Wg, {\n AfterPageControls: q ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Oa}__list-selection`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ja, {\n collectionConfig: V,\n disableBulkDelete: c,\n disableBulkEdit: u,\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(V.labels.plural, X),\n showSelectAllAcrossPages: !$\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Oa}__list-selection-actions`,\n children: f && typeof _ == \"function\" ? n ? [\n ...n,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dc, {\n onClick: _\n }, \"select-many\")\n ] : [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dc, {\n onClick: _\n }, \"select-many\")\n ] : n\n })\n ]\n }) : null,\n collectionConfig: V\n })\n ]\n }),\n e\n ]\n })\n })\n }),\n J?.length > 0 && $ && B.totalPages > 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fx, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Wg, {\n collectionConfig: V\n })\n })\n ]\n });\n}\n_s91(Lte, \"YSduYkneG4JK0IqsOM1gkzxFSLQ=\");\n_c282 = Lte;\n\n\n\n\n\n\n\n\n\n\n\n\nvar Ux = \"move-to-folder--current-folder\", E5 = \"confirm-many-delete\", Mte = \"current-folder-actions\";\nfunction tb({ className: t }) {\n _s92();\n let e = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { startRouteTransition: o } = Ye(), { breadcrumbs: n, currentFolder: r, folderCollectionConfig: s, folderCollectionSlug: i, folderFieldName: l, folderID: a, getFolderRoute: c, moveToFolder: u } = Gt(), [d, , { closeDrawer: f, openDrawer: m }] = kt({\n id: a,\n collectionSlug: i\n }), { clearRouteCache: p } = pt(), { config: h } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: g } = h, { closeModal: b, openModal: C } = ie(), { i18n: y, t: v } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), x = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"tb.useCallback[x]\": async ()=>{\n await fetch((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: g.api,\n path: `/${i}/${a}?depth=0`\n }), {\n credentials: \"include\",\n method: \"DELETE\"\n }), o({\n \"tb.useCallback[x]\": ()=>{\n e.push(c(n[n.length - 2]?.id || null));\n }\n }[\"tb.useCallback[x]\"]);\n }\n }[\"tb.useCallback[x]\"], [\n n,\n i,\n a,\n c,\n e,\n g.api,\n o\n ]);\n return a ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(kg, {}),\n className: [\n Mte,\n t\n ].filter(Boolean).join(\" \"),\n render: ()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.ButtonGroup, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n onClick: ()=>{\n m();\n },\n children: v(\"general:editLabel\", {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s.labels.singular, y)\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n onClick: ()=>{\n C(Ux);\n },\n children: v(\"folder:moveFolder\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n onClick: ()=>{\n C(E5);\n },\n children: v(\"folder:deleteFolder\")\n })\n ]\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Kl, {\n action: \"moveItemToFolder\",\n drawerSlug: Ux,\n folderAssignedCollections: r?.value.folderType,\n folderCollectionSlug: i,\n folderFieldName: l,\n fromFolderID: r?.value.id,\n fromFolderName: r?.value._folderOrDocumentTitle,\n itemsToMove: [\n r\n ],\n onConfirm: async ({ id: I, name: w })=>{\n await u({\n itemsToMove: [\n r\n ],\n toFolderID: I\n }), I ? ee.success(v(\"folder:itemHasBeenMoved\", {\n folderName: `\"${w}\"`,\n title: r.value._folderOrDocumentTitle\n })) : ee.success(v(\"folder:itemHasBeenMovedToRoot\", {\n title: r.value._folderOrDocumentTitle\n })), b(Ux);\n },\n title: r.value._folderOrDocumentTitle\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rt, {\n body: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(to, {\n elements: {\n 1: ({ children: I })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"strong\", {\n children: I\n })\n },\n i18nKey: \"general:aboutToDelete\",\n t: v,\n variables: {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(s.labels.singular, y),\n title: r.value._folderOrDocumentTitle\n }\n }),\n confirmingLabel: v(\"general:deleting\"),\n heading: v(\"general:confirmDeletion\"),\n modalSlug: E5,\n onConfirm: x\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(d, {\n onSave: ()=>{\n f(), p();\n }\n })\n ]\n }) : null;\n}\n_s92(tb, \"7H72Yzi/1m7c0sLG61XLTIWaLI4=\");\n\n\nvar Xx = \"drag-overlay-selection\";\nfunction rb({ item: t, selectedCount: e }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.DragOverlay, {\n dropAnimation: null,\n modifiers: [\n Gte\n ],\n style: {\n height: \"unset\",\n maxWidth: \"220px\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Xx}__cards`,\n children: [\n Array.from({\n length: e > 1 ? 2 : 1\n }).map((o, n)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Xx}__card`,\n style: {\n right: `${n * 3}px`,\n top: `-${n * 3}px`\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xx, {\n id: null,\n isSelected: !0,\n itemKey: \"overlay-card\",\n title: t.value._folderOrDocumentTitle,\n type: \"folder\"\n })\n }, n)),\n e > 1 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Xx}__card-count`,\n children: e\n }) : null\n ]\n })\n });\n}\nvar Gte = ({ activatorEvent: t, draggingNodeRect: e, transform: o })=>{\n if (e && t) {\n let n = x2(t);\n if (!n) return o;\n let r = n.x - e.left, s = n.y - e.top;\n return {\n ...o,\n x: o.x + r + 5,\n y: o.y + s + 5\n };\n }\n return o;\n};\n_c283 = Gte;\n\n\nvar jm = \"sort-by-pill\", Yx = [\n {\n label: (t)=>t(\"general:name\"),\n value: \"name\"\n },\n {\n label: (t)=>t(\"general:createdAt\"),\n value: \"createdAt\"\n },\n {\n label: (t)=>t(\"general:updatedAt\"),\n value: \"updatedAt\"\n }\n], N5 = [\n {\n label: (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dy, {}),\n t(\"general:ascending\")\n ]\n }),\n value: \"asc\"\n },\n {\n label: (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Hd, {}),\n t(\"general:descending\")\n ]\n }),\n value: \"desc\"\n }\n];\nfunction sb() {\n let { refineFolderData: t, sort: e } = Gt(), { t: o } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), n = e.startsWith(\"-\") ? \"desc\" : \"asc\", [r] = Yx.filter(({ value: i })=>i === (e.startsWith(\"-\") ? e.slice(1) : e)) || Yx, [s] = N5.filter(({ value: i })=>i === n);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(yt, {\n className: `${jm}__trigger`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {}),\n size: \"small\",\n children: [\n n === \"asc\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dy, {\n className: `${jm}__sort-icon`\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Hd, {\n className: `${jm}__sort-icon`\n }),\n r?.label(o)\n ]\n }),\n className: jm,\n horizontalAlign: \"right\",\n render: ({ close: i })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.GroupLabel, {\n label: \"Sort by\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: Yx.map(({ label: l, value: a })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n active: r?.value === a,\n onClick: ()=>{\n t({\n query: {\n page: \"1\",\n sort: n === \"desc\" ? `-${a}` : a\n },\n updateURL: !0\n }), i();\n },\n children: l(o)\n }, a))\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Divider, {}),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.GroupLabel, {\n label: \"Order\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: N5.map(({ label: l, value: a })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n active: s?.value === a,\n className: `${jm}__order-option`,\n onClick: ()=>{\n n !== a && (t({\n query: {\n page: \"1\",\n sort: a === \"desc\" ? `-${r?.value}` : r?.value\n },\n updateURL: !0\n }), i());\n },\n children: l(o)\n }, a))\n })\n ]\n }),\n showScrollbar: !0,\n verticalAlign: \"bottom\"\n });\n}\n\nvar ab = \"folder-view-toggle-button\";\nfunction lb({ activeView: t, setActiveView: e }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n className: [\n ab,\n t === \"grid\" && `${ab}--active`\n ].filter(Boolean).join(\" \"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ax, {}),\n margin: !1,\n onClick: ()=>{\n e(\"grid\");\n }\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"pill\",\n className: [\n ab,\n t === \"list\" && `${ab}--active`\n ].filter(Boolean).join(\" \"),\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Px, {}),\n margin: !1,\n onClick: ()=>{\n e(\"list\");\n }\n })\n ]\n });\n}\n\n\n\n\n\nvar k5 = ({ id: t, folderCollectionSlug: e })=>{\n let { clearRouteCache: o } = pt(), { t: n } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), [r, , { closeDrawer: s, openDrawer: i }] = kt({\n id: t,\n collectionSlug: e\n });\n return t ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n onClick: i,\n type: \"button\",\n children: n(\"general:edit\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(r, {\n onSave: ()=>{\n s(), o();\n }\n })\n ]\n }) : null;\n};\nvar cb = \"move-to-folder--list\", ub = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(17), { disableBulkDelete: o, disableBulkEdit: n, folderAssignedCollections: r } = t, { clearSelections: s, currentFolder: i, folderCollectionSlug: l, folderFieldName: a, folderID: c, getSelectedItems: u, moveToFolder: d } = Gt(), { clearRouteCache: f } = pt(), { config: m } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { t: p } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { closeModal: h, openModal: g } = ie(), b, C;\n if (e[0] !== f || e[1] !== s || e[2] !== h || e[3] !== m || e[4] !== i?.value?._folderOrDocumentTitle || e[5] !== o || e[6] !== n || e[7] !== r || e[8] !== l || e[9] !== a || e[10] !== c || e[11] !== u || e[12] !== d || e[13] !== g || e[14] !== p) {\n C = Symbol.for(\"react.early_return_sentinel\");\n e: {\n let y = u(), v = y.reduce(Jte, {}), x = y.length, I = Object.keys(v).length === 1 && Object.keys(v)[0] !== l, w = I ? m.collections.find((S)=>S.slug === Object.keys(v)[0]) : null;\n if (x === 0) {\n C = null;\n break e;\n }\n let F = I ? v[Object.keys(v)[0]]?.ids || [] : [];\n b = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sg, {\n count: x,\n ListActions: [\n x > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n onClick: ()=>s(),\n children: p(\"general:clearAll\")\n }, \"clear-all\")\n ].filter(Boolean),\n SelectionActions: [\n !n && F.length && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Cm, {\n collection: w,\n count: x,\n ids: F,\n selectAll: !1\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wm, {\n collection: w,\n count: x,\n ids: F,\n selectAll: !1\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sm, {\n collection: w,\n count: x,\n ids: F,\n selectAll: !1\n })\n ]\n }, \"bulk-actions\"),\n x === 1 && !I && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(k5, {\n folderCollectionSlug: l,\n id: v[l].ids[0]\n }, \"edit-folder-action\"),\n x > 0 ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ro, {\n onClick: ()=>{\n g(cb);\n },\n type: \"button\",\n children: p(\"general:move\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Kl, {\n action: \"moveItemsToFolder\",\n drawerSlug: cb,\n folderAssignedCollections: r,\n folderCollectionSlug: l,\n folderFieldName: a,\n fromFolderID: c,\n fromFolderName: i?.value?._folderOrDocumentTitle,\n itemsToMove: u(),\n onConfirm: async (S)=>{\n let { id: R, name: D } = S;\n await d({\n itemsToMove: u(),\n toFolderID: R\n }), R ? ee.success(p(\"folder:itemsMovedToFolder\", {\n folderName: `\"${D}\"`,\n title: `${x} ${x > 1 ? p(\"general:items\") : p(\"general:item\")}`\n })) : ee.success(p(\"folder:itemsMovedToRoot\", {\n title: `${x} ${x > 1 ? p(\"general:items\") : p(\"general:item\")}`\n })), f(), h(cb);\n }\n })\n ]\n }, cb) : null,\n !o && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(CC, {\n afterDelete: ()=>{\n f(), s();\n },\n hasDeletePermission: !0,\n selections: v\n }, \"bulk-delete\")\n ].filter(Boolean)\n });\n }\n e[0] = f, e[1] = s, e[2] = h, e[3] = m, e[4] = i?.value?._folderOrDocumentTitle, e[5] = o, e[6] = n, e[7] = r, e[8] = l, e[9] = a, e[10] = c, e[11] = u, e[12] = d, e[13] = g, e[14] = p, e[15] = b, e[16] = C;\n } else b = e[15], C = e[16];\n return C !== Symbol.for(\"react.early_return_sentinel\") ? C : b;\n};\nfunction Jte(t, e) {\n return e && (t[e.relationTo] ? (t[e.relationTo].ids.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_36__.extractID)(e.value)), t[e.relationTo].totalCount = t[e.relationTo].totalCount + 1) : t[e.relationTo] = {\n ids: [\n (0,payload_shared__WEBPACK_IMPORTED_MODULE_36__.extractID)(e.value)\n ],\n totalCount: 1\n }), t;\n}\n_c284 = Jte;\nvar Va = \"collection-folder-list\";\nfunction ooe({ allCollectionFolderSlugs: t, allowCreateCollectionSlugs: e, baseFolderPath: o, breadcrumbs: n, documents: r, folderFieldName: s, folderID: i, FolderResultsComponent: l, search: a, sort: c, subfolders: u, ...d }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ca, {\n allCollectionFolderSlugs: t,\n allowCreateCollectionSlugs: e,\n baseFolderPath: o,\n breadcrumbs: n,\n documents: r,\n folderFieldName: s,\n folderID: i,\n FolderResultsComponent: l,\n search: a,\n sort: c,\n subfolders: u,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(roe, {\n ...d\n })\n });\n}\nfunction roe(t) {\n _s93();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(6), { AfterFolderList: o, AfterFolderListTable: n, BeforeFolderList: r, BeforeFolderListTable: s, collectionSlug: i, Description: l, disableBulkDelete: a, disableBulkEdit: c, search: u, viewPreference: d } = t, { config: f, getEntityConfig: m } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { i18n: p, t: h } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), g = ct(), { setStepNav: b } = Pr(), { setPreference: C } = so(), { allowCreateCollectionSlugs: y, breadcrumbs: v, documents: x, dragOverlayItem: I, folderCollectionConfig: w, folderCollectionSlug: F, FolderResultsComponent: S, folderType: R, getSelectedItems: D, moveToFolder: _, refineFolderData: T, selectedItemKeys: A, setIsDragging: k, subfolders: P } = Gt(), E = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { startRouteTransition: B } = Ye(), { clearRouteCache: $ } = pt(), M = m({\n collectionSlug: i\n }), { labels: L, upload: j } = M, V = !!j && M.upload.bulkUpload, { breakpoints: W } = Ma(), { s: Z } = W, z;\n e[0] !== $ || e[1] !== D || e[2] !== _ ? (z = async (q)=>{\n if (q.over && q.over.data.current.type === \"folder\" && \"id\" in q.over.data.current) {\n try {\n await _({\n itemsToMove: D(),\n toFolderID: q.over.data.current.id\n });\n } catch (J) {\n console.error(\"Error moving items:\", J);\n }\n $();\n }\n }, e[0] = $, e[1] = D, e[2] = _, e[3] = z) : z = e[3];\n let Q = z, U = async (q)=>{\n await C(`${i}-collection-folder`, {\n viewPreference: q\n }), $();\n };\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"roe.useEffect\": ()=>{\n g || b([\n v.length ? {\n label: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(wa, {\n className: [\n `${Va}__step-nav-droppable`,\n `${Va}__step-nav-icon-label`\n ].filter(Boolean).join(\" \"),\n id: null,\n onClick: {\n \"roe.useEffect\": ()=>{\n B({\n \"roe.useEffect\": ()=>{\n f.folders && E.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: f.routes.admin,\n path: `/collections/${i}/${f.folders.slug}`\n }));\n }\n }[\"roe.useEffect\"]);\n }\n }[\"roe.useEffect\"],\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {}),\n (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(L?.plural, p)\n ]\n }, \"root\")\n } : {\n label: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Va}__step-nav-icon-label`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {}),\n (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(L?.plural, p)\n ]\n }, \"root\")\n },\n ...v.map({\n \"roe.useEffect\": (q, J)=>({\n label: J === v.length - 1 ? q.name : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wa, {\n className: `${Va}__step-nav-droppable`,\n id: q.id,\n onClick: {\n \"roe.useEffect\": ()=>{\n B({\n \"roe.useEffect\": ()=>{\n f.folders && E.push((0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: f.routes.admin,\n path: `/collections/${i}/${f.folders.slug}/${q.id}`\n }));\n }\n }[\"roe.useEffect\"]);\n }\n }[\"roe.useEffect\"],\n children: q.name\n }, q.id)\n })\n }[\"roe.useEffect\"])\n ]);\n }\n }[\"roe.useEffect\"], [\n v,\n i,\n f.folders,\n f.routes.admin,\n f.serverURL,\n g,\n p,\n L?.plural,\n E,\n b,\n B\n ]);\n let X = x.length + P.length, ue;\n return e[4] !== T ? (ue = (q)=>T({\n query: {\n search: q\n },\n updateURL: !0\n }), e[4] = T, e[5] = ue) : ue = e[5], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(noe, {\n onDragEnd: Q,\n setIsDragging: k\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Va} ${Va}--${i}`,\n children: [\n r,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${Va}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ba, {\n Actions: [\n !Z && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ub, {\n disableBulkDelete: a,\n disableBulkEdit: M.disableBulkEdit ?? c,\n folderAssignedCollections: Array.isArray(R) ? R : [\n i\n ]\n }, \"list-selection\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Mg, {\n collectionConfig: M,\n config: f,\n viewType: \"folders\"\n }, \"default-list-actions\")\n ].filter(Boolean),\n AfterListHeaderContent: l,\n title: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(L?.plural, p),\n TitleActions: [\n y.length && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sn, {\n buttonLabel: y.length > 1 ? h(\"general:createNew\") : `${h(\"general:create\")} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(w.labels?.singular, p).toLowerCase()}`,\n collectionSlugs: y,\n folderAssignedCollections: Array.isArray(R) ? R : [\n i\n ],\n onCreateSuccess: $,\n slugPrefix: \"create-document--header-pill\"\n }, \"create-new-button\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Im, {\n collectionSlug: i,\n hasCreatePermission: y.includes(i),\n isBulkUploadEnabled: V\n }, \"bulk-upload-button\")\n ].filter(Boolean)\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vc, {\n Actions: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sb, {}, \"sort-by-pill\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(lb, {\n activeView: d,\n setActiveView: U\n }, \"toggle-view-buttons\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(tb, {}, \"current-folder-actions\")\n ].filter(Boolean),\n label: h(\"general:searchBy\", {\n label: h(\"general:name\")\n }),\n onSearchChange: ue,\n searchQueryParam: u\n }),\n s,\n X > 0 && S,\n X === 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gn, {\n Actions: [\n y.includes(F) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sn, {\n buttonLabel: `${h(\"general:create\")} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(w.labels?.singular, p).toLowerCase()}`,\n buttonSize: \"medium\",\n buttonStyle: \"primary\",\n collectionSlugs: [\n w.slug\n ],\n folderAssignedCollections: Array.isArray(R) ? R : [\n i\n ],\n onCreateSuccess: $,\n slugPrefix: \"create-folder--no-results\"\n }, \"create-folder\"),\n y.includes(i) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sn, {\n buttonLabel: `${h(\"general:create\")} ${h(\"general:document\").toLowerCase()}`,\n buttonSize: \"medium\",\n buttonStyle: \"primary\",\n collectionSlugs: [\n i\n ],\n folderAssignedCollections: Array.isArray(R) ? R : [\n i\n ],\n onCreateSuccess: $,\n slugPrefix: \"create-document--no-results\"\n }, \"create-document\")\n ].filter(Boolean),\n Message: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: p.t(\"general:noResultsFound\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: p.t(\"general:noResultsDescription\")\n })\n ]\n })\n }),\n n\n ]\n }),\n o\n ]\n }),\n A.size > 0 && I && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rb, {\n item: I,\n selectedCount: A.size\n })\n ]\n });\n}\n_s93(roe, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\nfunction noe(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { onDragEnd: o, setIsDragging: n } = t, r;\n return e[0] !== o || e[1] !== n ? (r = {\n onDragCancel () {\n n(!1);\n },\n onDragEnd (s) {\n n(!1), o(s);\n },\n onDragStart () {\n n(!0);\n }\n }, e[0] = o, e[1] = n, e[2] = r) : r = e[2], (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDndMonitor)(r), null;\n}\n\n\n\n\n\n\n\n\n\n\n\n\nvar O5 = \"checkbox-popup\";\nfunction V5({ Button: t, className: e, onChange: o, options: n, selectedValues: r, ...s }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: t,\n className: [\n O5,\n e\n ].filter(Boolean).join(\" \"),\n horizontalAlign: \"right\",\n render: ({ close: i })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${O5}__options`,\n children: n.map(({ label: l, value: a })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(go, {\n checked: r?.includes(a),\n label: l,\n onToggle: ()=>{\n let c = r?.includes(a) ? r.filter((u)=>u !== a) : [\n ...r,\n a\n ];\n o({\n close: i,\n selectedValues: c\n });\n }\n }, a))\n }),\n showScrollbar: !0,\n verticalAlign: \"bottom\",\n ...s\n });\n}\n_c285 = V5;\nvar loe = \"collection-type\";\nfunction W5() {\n _s94();\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(13), { activeCollectionFolderSlugs: e, allCollectionFolderSlugs: o, folderCollectionSlug: n, refineFolderData: r } = Gt(), { i18n: s, t: i } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: l, getEntityConfig: a } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), c;\n t[0] !== l || t[1] !== n || t[2] !== o || t[3] !== a || t[4] !== s ? (c = ()=>l.collections.reduce((f, m)=>(m.folders && o.includes(m.slug) && f.push({\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(m.labels?.plural, s),\n value: m.slug\n }), f), [\n {\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(a({\n collectionSlug: n\n }).labels?.plural, s),\n value: n\n }\n ]), t[0] = l, t[1] = n, t[2] = o, t[3] = a, t[4] = s, t[5] = c) : c = t[5];\n let [u] = react__WEBPACK_IMPORTED_MODULE_0__.useState(c), d;\n if (t[6] !== u || t[7] !== r || t[8] !== i || t[9] !== e) {\n let f;\n t[11] !== r ? (f = (m)=>{\n let { selectedValues: p } = m;\n r({\n query: {\n relationTo: p\n },\n updateURL: !0\n });\n }, t[11] = r, t[12] = f) : f = t[12], d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(V5, {\n Button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(re, {\n buttonStyle: \"pill\",\n el: \"div\",\n icon: \"chevron\",\n margin: !1,\n size: \"small\",\n children: [\n e.length ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${loe}__count`,\n children: e.length\n }) : null,\n i(\"version:type\")\n ]\n }),\n onChange: f,\n options: u,\n selectedValues: e\n }, \"relation-to-selection-popup\"), t[6] = u, t[7] = r, t[8] = i, t[9] = e, t[10] = d;\n } else d = t[10];\n return d;\n}\n_s94(W5, \"GijYYMOb0NNb/xbxJR4s1dRdV7o=\");\n_c286 = W5;\nvar za = \"folder-list\";\nfunction foe({ activeCollectionFolderSlugs: t, allCollectionFolderSlugs: e, allowCreateCollectionSlugs: o, baseFolderPath: n, breadcrumbs: r, documents: s, folderFieldName: i, folderID: l, FolderResultsComponent: a, search: c, subfolders: u, ...d }) {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ca, {\n activeCollectionFolderSlugs: t,\n allCollectionFolderSlugs: e,\n allowCreateCollectionSlugs: o,\n baseFolderPath: n,\n breadcrumbs: r,\n documents: s,\n folderFieldName: i,\n folderID: l,\n FolderResultsComponent: a,\n search: c,\n subfolders: u,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(poe, {\n ...d\n })\n });\n}\nfunction poe(t) {\n _s95();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(20), { AfterFolderList: o, AfterFolderListTable: n, BeforeFolderList: r, BeforeFolderListTable: s, Description: i, disableBulkDelete: l, disableBulkEdit: a, folderAssignedCollections: c, viewPreference: u } = t, d = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), { i18n: f, t: m } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), p = ct(), { setStepNav: h } = Pr(), { startRouteTransition: g } = Ye(), { clearRouteCache: b } = pt(), { breakpoints: C } = Ma(), { s: y } = C, { setPreference: v } = so(), { allowCreateCollectionSlugs: x, breadcrumbs: I, documents: w, dragOverlayItem: F, folderCollectionConfig: S, folderID: R, folderType: D, getFolderRoute: _, getSelectedItems: T, moveToFolder: A, refineFolderData: k, search: P, selectedItemKeys: E, setIsDragging: B, subfolders: $ } = Gt(), [M, L] = react__WEBPACK_IMPORTED_MODULE_0__.useState(u || \"grid\"), j;\n e[0] !== I || e[1] !== S || e[2] !== f || e[3] !== m ? (j = ()=>{\n let J = I.length === 0 ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(S.labels?.plural, f) : I[I.length - 1].name;\n return m(\"folder:searchByNameInFolder\", {\n folderName: J\n });\n }, e[0] = I, e[1] = S, e[2] = f, e[3] = m, e[4] = j) : j = e[4];\n let [O] = react__WEBPACK_IMPORTED_MODULE_0__.useState(j), V;\n e[5] !== b || e[6] !== T || e[7] !== A ? (V = async (J)=>{\n J.over && J.over.data.current.type === \"folder\" && \"id\" in J.over.data.current && (await A({\n itemsToMove: T(),\n toFolderID: J.over.data.current.id || null\n }), b());\n }, e[5] = b, e[6] = T, e[7] = A, e[8] = V) : V = e[8];\n let W = V, Z = w.length + $.length, z = I.length ? I[I.length - 1].name : m(\"folder:browseByFolder\"), Q = (J)=>{\n v(payload_shared__WEBPACK_IMPORTED_MODULE_46__.PREFERENCE_KEYS.BROWSE_BY_FOLDER, {\n viewPreference: J\n }), L(J);\n }, U, X;\n e[9] !== I || e[10] !== p || e[11] !== _ || e[12] !== d || e[13] !== h || e[14] !== g || e[15] !== m ? (U = ()=>{\n p || h([\n I.length ? {\n label: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(wa, {\n className: [\n `${za}__step-nav-droppable`,\n `${za}__step-nav-icon-label`\n ].filter(Boolean).join(\" \"),\n id: null,\n onClick: ()=>{\n g(()=>{\n d.push(_(null));\n });\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {}),\n m(\"folder:browseByFolder\")\n ]\n }, \"root\")\n } : {\n label: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${za}__step-nav-icon-label`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ur, {}),\n m(\"folder:browseByFolder\")\n ]\n }, \"root\")\n },\n ...I.map((J, Y)=>({\n label: Y === I.length - 1 ? J.name : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(wa, {\n className: `${za}__step-nav-droppable`,\n id: J.id,\n onClick: ()=>{\n g(()=>{\n d.push(_(J.id));\n });\n },\n children: J.name\n }, J.id)\n }))\n ]);\n }, X = [\n I,\n p,\n _,\n d,\n h,\n g,\n m\n ], e[9] = I, e[10] = p, e[11] = _, e[12] = d, e[13] = h, e[14] = g, e[15] = m, e[16] = U, e[17] = X) : (U = e[16], X = e[17]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(U, X);\n let ue = x.filter((J)=>J !== S.slug), q;\n return e[18] !== k ? (q = (J)=>k({\n query: {\n search: J\n },\n updateURL: !0\n }), e[18] = k, e[19] = q) : q = e[19], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(hoe, {\n onDragEnd: W,\n setIsDragging: B\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${za} ${za}--folders`,\n children: [\n r,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${za}__wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Ba, {\n Actions: [\n !y && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ub, {\n disableBulkDelete: l,\n disableBulkEdit: a,\n folderAssignedCollections: c\n }, \"list-selection\")\n ].filter(Boolean),\n AfterListHeaderContent: i,\n title: z,\n TitleActions: [\n x.length && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sn, {\n buttonLabel: x.length > 1 ? m(\"general:createNew\") : `${m(\"general:create\")} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(S.labels?.singular, f).toLowerCase()}`,\n collectionSlugs: x,\n folderAssignedCollections: Array.isArray(D) ? D : [],\n onCreateSuccess: b,\n slugPrefix: \"create-document--header-pill\"\n }, \"create-new-button\")\n ].filter(Boolean)\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vc, {\n Actions: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(sb, {}, \"sort-by-pill\"),\n R && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(W5, {}, \"collection-type\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(lb, {\n activeView: M,\n setActiveView: Q\n }, \"toggle-view-buttons\"),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(tb, {}, \"current-folder-actions\")\n ].filter(Boolean),\n label: O,\n onSearchChange: q,\n searchQueryParam: P\n }),\n s,\n Z > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: M === \"grid\" ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n children: [\n $.length ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Yg, {\n items: $,\n title: \"Folders\",\n type: \"folder\"\n })\n }) : null,\n w.length ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Yg, {\n items: w,\n subfolderCount: $.length,\n title: \"Documents\",\n type: \"file\"\n })\n }) : null\n ]\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(vx, {})\n }),\n Z === 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Gn, {\n Actions: [\n x.includes(S.slug) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sn, {\n buttonLabel: `${m(\"general:create\")} ${(0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(S.labels?.singular, f).toLowerCase()}`,\n buttonSize: \"medium\",\n buttonStyle: \"primary\",\n collectionSlugs: [\n S.slug\n ],\n folderAssignedCollections: Array.isArray(D) ? D : [],\n onCreateSuccess: b,\n slugPrefix: \"create-folder--no-results\"\n }, \"create-folder\"),\n R && ue.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Sn, {\n buttonLabel: `${m(\"general:create\")} ${m(\"general:document\").toLowerCase()}`,\n buttonSize: \"medium\",\n buttonStyle: \"primary\",\n collectionSlugs: ue,\n folderAssignedCollections: Array.isArray(D) ? D : [],\n onCreateSuccess: b,\n slugPrefix: \"create-document--no-results\"\n }, \"create-document\")\n ].filter(Boolean),\n Message: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h3\", {\n children: f.t(\"general:noResultsFound\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: f.t(\"general:noResultsDescription\")\n })\n ]\n })\n }),\n n\n ]\n }),\n o\n ]\n }),\n E.size > 0 && F && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rb, {\n item: F,\n selectedCount: E.size\n })\n ]\n });\n}\n_s95(poe, \"TLWj7mXNTC9pUCrYV67AIeRLlIY=\");\nfunction hoe(t) {\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { onDragEnd: o, setIsDragging: n } = t, r;\n return e[0] !== o || e[1] !== n ? (r = {\n onDragCancel () {\n n(!1);\n },\n onDragEnd (s) {\n n(!1), o(s);\n },\n onDragStart () {\n n(!0);\n }\n }, e[0] = o, e[1] = n, e[2] = r) : r = e[2], (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDndMonitor)(r), null;\n}\n\n\n\n\n\n\n\nvar X5 = \"leave-without-saving-doc-drawer\", Z5 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(15), { AfterHeader: o, drawerSlug: n, showDocumentID: r } = t, s = r === void 0 ? !0 : r, { closeModal: i, openModal: l } = ie(), { t: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c = po(), u;\n e[0] !== i || e[1] !== n || e[2] !== c || e[3] !== l ? (u = ()=>{\n c ? l(X5) : i(n);\n }, e[0] = i, e[1] = n, e[2] = c, e[3] = l, e[4] = u) : u = e[4];\n let d = u, f;\n if (e[5] !== o || e[6] !== i || e[7] !== n || e[8] !== d || e[9] !== s || e[10] !== a) {\n let m;\n e[12] !== i || e[13] !== n ? (m = ()=>i(n), e[12] = i, e[13] = n, e[14] = m) : m = e[14], f = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(Io, {\n className: `${Cs}__header`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Cs}__header-content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h2\", {\n className: `${Cs}__header-text`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_x, {\n element: \"span\"\n })\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n \"aria-label\": a(\"general:close\"),\n className: `${Cs}__header-close`,\n onClick: d,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n })\n ]\n }),\n s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(goe, {}),\n o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Cs}__after-header`,\n children: o\n }) : null,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Uy, {\n modalSlug: X5,\n onConfirm: m\n })\n ]\n }), e[5] = o, e[6] = i, e[7] = n, e[8] = d, e[9] = s, e[10] = a, e[11] = f;\n } else f = e[11];\n return f;\n}, goe = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(3), { id: e } = Se(), { title: o } = Ao(), n;\n return t[0] !== e || t[1] !== o ? (n = e && e !== o ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zg, {\n id: e.toString()\n }) : null, t[0] = e, t[1] = o, t[2] = n) : n = t[2], n;\n};\n\n\n\nvar Mm = \"document-stale-data\", mb = \"document-stale-data\", q5 = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { isActive: o, onReload: n } = t, { closeModal: r, openModal: s } = ie(), { clearRouteCache: i } = pt(), { t: l } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), a, c;\n e[0] !== r || e[1] !== o || e[2] !== s ? (a = ()=>{\n o ? s(Mm) : r(Mm);\n }, c = [\n o,\n s,\n r\n ], e[0] = r, e[1] = o, e[2] = s, e[3] = a, e[4] = c) : (a = e[3], c = e[4]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(a, c);\n let u;\n if (e[5] !== i || e[6] !== r || e[7] !== n || e[8] !== l) {\n let d;\n e[10] !== i || e[11] !== r || e[12] !== n ? (d = async ()=>{\n r(Mm), i(), await n();\n }, e[10] = i, e[11] = r, e[12] = n, e[13] = d) : d = e[13], u = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Jo, {\n className: mb,\n closeOnBlur: !1,\n slug: Mm,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${mb}__wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${mb}__content`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"h1\", {\n children: l(\"general:documentModified\")\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"p\", {\n children: l(\"general:documentOutOfDate\")\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${mb}__controls`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"primary\",\n id: `${Mm}-reload`,\n margin: !1,\n onClick: d,\n size: \"medium\",\n children: l(\"general:reloadDocument\")\n })\n })\n ]\n })\n }), e[5] = i, e[6] = r, e[7] = n, e[8] = l, e[9] = u;\n } else u = e[9];\n return u;\n};\n\n\n\n\n\nvar oN = {\n minVisible: 300,\n show: 1e3\n}, ew = \"iframe-loader\", rN = ({ onLoad: t, src: e, title: o, ...n })=>{\n let [r, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!!e), [i, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n c.current && (clearTimeout(c.current), c.current = null), u.current && (clearTimeout(u.current), u.current = null);\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (d(), s(!!e), l(!1), a.current = 0, !!e) return c.current = setTimeout(()=>{\n l(!0), a.current = Date.now(), c.current = null;\n }, oN.show), ()=>{\n c.current && (clearTimeout(c.current), c.current = null);\n };\n }, [\n d,\n e\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>{\n d();\n }, [\n d\n ]);\n let f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((m)=>{\n if (typeof t == \"function\" && t(m), s(!1), c.current && (clearTimeout(c.current), c.current = null), !i) return;\n let p = Date.now() - a.current, h = Math.max(0, oN.minVisible - p);\n if (h === 0) {\n l(!1);\n return;\n }\n u.current = setTimeout(()=>{\n l(!1), u.current = null;\n }, h);\n }, [\n i,\n t\n ]);\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${ew}__container`,\n children: [\n i && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.f, {\n \"aria-live\": \"polite\",\n height: \"100%\",\n role: \"status\",\n transparent: !0\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"iframe\", {\n ...n,\n className: [\n `${ew}__iframe`,\n r && `${ew}__iframe--is-loading`\n ].filter(Boolean).join(\" \"),\n onLoad: f,\n sandbox: \"allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads\",\n src: e,\n title: o\n })\n ]\n });\n};\n\n\nvar iN = (t)=>{\n _s96();\n let { children: e } = t, o = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), n = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), { breakpoint: r, setMeasuredDeviceSize: s, size: i, zoom: l } = ko(), { size: a } = Hh(o.current), { size: c } = Hh(n.current), u = !1;\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n a && s(a);\n }, [\n a,\n s\n ]);\n let d = \"0\", f = \"0\";\n if (r && r !== \"responsive\" && (d = \"-50%\", i && a && typeof l == \"number\" && typeof i.width == \"number\" && typeof i.height == \"number\" && typeof a.width == \"number\" && typeof a.height == \"number\")) {\n f = \"0 auto\";\n let h = i.width / l, g = a.width * l, b = h - i.width;\n if (u = g > c.width, u) if (l > 1) {\n let C = a.width - c.width;\n C < 0 ? d = `${C / 2}px` : d = \"0\";\n } else d = \"0\";\n else l >= 1 ? d = `${b / 2}px` : (d = `${(c.width - g) / 2}px`, f = \"0\");\n }\n let m = l ? `${100 / l}%` : \"100%\", p = l ? `${100 / l}%` : \"100%\";\n return r !== \"responsive\" && (m = `${i?.width / (typeof l == \"number\" ? l : 1)}px`, p = `${i?.height / (typeof l == \"number\" ? l : 1)}px`), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n ref: n,\n style: {\n height: \"100%\",\n width: \"100%\"\n },\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n ref: o,\n style: {\n height: p,\n margin: f,\n transform: `translate3d(${d}, 0, 0)`,\n width: m\n },\n children: e\n })\n });\n};\n_s96(iN, \"8G2voJr3kFff2vROHIOyY2LlEuU=\");\n\n\n\n\n\n\n\n\n\n\nvar _oe = \"toolbar-input\", tw = (t)=>{\n _s97();\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(18), { axis: o } = t, { breakpoint: n, measuredDeviceSize: r, setBreakpoint: s, setSize: i, size: l, zoom: a } = ko(), [c, u] = react__WEBPACK_IMPORTED_MODULE_0__.useState((o === \"x\" ? r?.width : r?.height) || 0), d;\n e[0] !== o || e[1] !== r?.height || e[2] !== r?.width || e[3] !== s || e[4] !== i || e[5] !== a ? (d = (C)=>{\n let y = Number(C.target.value);\n y < 0 && (y = 0), u(y), s(\"custom\"), i({\n type: \"reset\",\n value: {\n height: o === \"y\" ? y : Number(r?.height.toFixed(0)) * a,\n width: o === \"x\" ? y : Number(r?.width.toFixed(0)) * a\n }\n });\n }, e[0] = o, e[1] = r?.height, e[2] = r?.width, e[3] = s, e[4] = i, e[5] = a, e[6] = d) : d = e[6];\n let f = d, m, p;\n e[7] !== o || e[8] !== n || e[9] !== r || e[10] !== l || e[11] !== a ? (m = ()=>{\n n === \"responsive\" && r && u(o === \"x\" ? Number(r.width.toFixed(0)) * a : Number(r.height.toFixed(0)) * a), n !== \"responsive\" && l && u(o === \"x\" ? l.width : l.height);\n }, p = [\n n,\n o,\n r,\n l,\n a\n ], e[7] = o, e[8] = n, e[9] = r, e[10] = l, e[11] = a, e[12] = m, e[13] = p) : (m = e[12], p = e[13]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(m, p);\n let h = o === \"x\" ? \"live-preview-width\" : \"live-preview-height\", g = c || 0, b;\n return e[14] !== f || e[15] !== h || e[16] !== g ? (b = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n className: _oe,\n min: 0,\n name: h,\n onChange: f,\n step: 1,\n type: \"number\",\n value: g\n }), e[14] = f, e[15] = h, e[16] = g, e[17] = b) : b = e[17], b;\n};\n_s97(tw, \"WsHubf2oMOqjy8jjnLBZoL3EXwY=\");\nvar Ti = \"live-preview-toolbar-controls\", Foe = [\n 50,\n 75,\n 100,\n 125,\n 150,\n 200\n], ow = ()=>{\n let t = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { breakpoint: e, breakpoints: o, setBreakpoint: n, setPreviewWindowType: r, setZoom: s, url: i, zoom: l } = ko(), { t: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), c;\n if (t[0] !== e || t[1] !== o || t[2] !== n || t[3] !== r || t[4] !== s || t[5] !== a || t[6] !== i || t[7] !== l) {\n let u = {\n label: a(\"general:custom\"),\n value: \"custom\"\n }, d;\n t[9] !== s || t[10] !== l ? (d = (m)=>{\n let { close: p } = m;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: Foe.map((h)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(ve.Button, {\n active: l * 100 == h,\n onClick: ()=>{\n s(h / 100), p();\n },\n children: [\n h,\n \"%\"\n ]\n }, h))\n })\n });\n }, t[9] = s, t[10] = l, t[11] = d) : d = t[11];\n let f;\n t[12] !== r ? (f = (m)=>{\n m.preventDefault(), r(\"popup\");\n }, t[12] = r, t[13] = f) : f = t[13], c = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: Ti,\n children: [\n o?.length > 0 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: o.find((m)=>m.name == e)?.label ?? u.label\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n className: `${Ti}__chevron`\n })\n ]\n }),\n className: `${Ti}__breakpoint`,\n horizontalAlign: \"right\",\n render: (m)=>{\n let { close: p } = m;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.ButtonGroup, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n o.map((h)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n active: h.name == e,\n onClick: ()=>{\n n(h.name), p();\n },\n children: h.label\n }, h.name)),\n e === \"custom\" && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ve.Button, {\n active: e == u.value,\n onClick: ()=>{\n n(u.value), p();\n },\n children: u.label\n })\n ]\n })\n });\n },\n showScrollbar: !0,\n verticalAlign: \"bottom\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Ti}__device-size`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(tw, {\n axis: \"x\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${Ti}__size-divider`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.a, {})\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(tw, {\n axis: \"y\"\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(st, {\n button: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n children: [\n l * 100,\n \"%\"\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(He, {\n className: `${Ti}__chevron`\n })\n ]\n }),\n className: `${Ti}__zoom`,\n horizontalAlign: \"right\",\n render: d,\n showScrollbar: !0,\n verticalAlign: \"bottom\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"a\", {\n className: `${Ti}__external`,\n href: i,\n onClick: f,\n target: \"_blank\",\n title: \"Open in new window\",\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pm, {})\n })\n ]\n }), t[0] = e, t[1] = o, t[2] = n, t[3] = r, t[4] = s, t[5] = a, t[6] = i, t[7] = l, t[8] = c;\n } else c = t[8];\n return c;\n};\nvar Om = \"live-preview-toolbar\", Poe = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(10), { toolbarPosition: o } = ko(), n;\n e[0] === Symbol.for(\"react.memo_cache_sentinel\") ? (n = {\n id: \"live-preview-toolbar\"\n }, e[0] = n) : n = e[0];\n let { attributes: r, listeners: s, setNodeRef: i, transform: l } = (0,_dnd_kit_core__WEBPACK_IMPORTED_MODULE_9__.useDraggable)(n), a;\n e[1] === Symbol.for(\"react.memo_cache_sentinel\") ? (a = [\n Om,\n `${Om}--draggable`\n ], e[1] = a) : a = e[1];\n let c = `${o.x}px`, u = `${o.y}px`, d;\n return e[2] !== r || e[3] !== s || e[4] !== t || e[5] !== i || e[6] !== c || e[7] !== u || e[8] !== l ? (d = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: a.join(\" \"),\n style: {\n left: c,\n top: u,\n ...l ? {\n transform: l ? `translate3d(${l?.x || 0}px, ${l?.y || 0}px, 0)` : void 0\n } : {}\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"button\", {\n ...s,\n ...r,\n className: `${Om}__drag-handle`,\n ref: i,\n type: \"button\",\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(un, {})\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ow, {\n ...t\n })\n ]\n }), e[2] = r, e[3] = s, e[4] = t, e[5] = i, e[6] = c, e[7] = u, e[8] = l, e[9] = d) : d = e[9], d;\n}, Eoe = (t)=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n Om,\n `${Om}--static`\n ].join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(ow, {\n ...t\n })\n }), aN = (t)=>{\n let { draggable: e } = t;\n return e ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Poe, {\n ...t\n }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Eoe, {\n ...t\n });\n};\nvar Gm = \"live-preview-window\", rw = (t)=>{\n let { appIsReady: e, breakpoint: o, iframeRef: n, isLivePreviewing: r, loadedURL: s, popupRef: i, previewWindowType: l, setLoadedURL: a, shouldRenderIframe: c, url: u, zoom: d } = ko(), f = ye(), { mostRecentUpdate: m } = Is(), [p] = Xs(), { id: h, collectionSlug: g, globalSlug: b } = Se();\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (!(!r || !e) && p) {\n let C = (0,payload_shared__WEBPACK_IMPORTED_MODULE_29__.reduceFieldsToValues)(p, !0);\n C.id || (C.id = h);\n let y = {\n type: \"payload-live-preview\",\n collectionSlug: g,\n data: C,\n externallyUpdatedRelationship: m,\n globalSlug: b,\n locale: f.code\n };\n l === \"popup\" && i.current && i.current.postMessage(y, u), l === \"iframe\" && n.current && n.current.contentWindow?.postMessage(y, u);\n }\n }, [\n p,\n u,\n g,\n b,\n h,\n l,\n i,\n e,\n n,\n m,\n f,\n r,\n s\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (!r || !e) return;\n let C = {\n type: \"payload-document-event\"\n };\n l === \"popup\" && i.current && i.current.postMessage(C, u), l === \"iframe\" && n.current && n.current.contentWindow?.postMessage(C, u);\n }, [\n m,\n n,\n i,\n l,\n u,\n r,\n e\n ]), l !== \"iframe\" ? null : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: [\n Gm,\n r && `${Gm}--is-live-previewing`,\n o && o !== \"responsive\" && `${Gm}--has-breakpoint`\n ].filter(Boolean).join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${Gm}__wrapper`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(aN, {\n ...t\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${Gm}__main`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(iN, {\n children: c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rN, {\n className: \"live-preview-iframe\",\n id: \"live-preview-iframe\",\n onLoad: ()=>{\n a(u);\n },\n ref: n,\n src: u,\n style: {\n transform: typeof d == \"number\" ? `scale(${d}) ` : void 0\n }\n })\n })\n })\n ]\n })\n });\n};\n\nvar cN = ({ adminRoute: t, router: e, serverURL: o })=>{\n let n = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: t,\n path: \"\",\n serverURL: o\n });\n e.push(n);\n};\n\nvar uN = ({ adminRoute: t, collectionSlug: e, router: o, serverURL: n })=>{\n let r = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: t,\n path: e ? `/collections/${e}` : \"/\"\n });\n o.push(r);\n};\nvar nw = async ({ id: t, clearRouteCache: e, collectionSlug: o, documentLockStateRef: n, globalSlug: r, isLockingEnabled: s, isWithinDoc: i, setCurrentEditor: l, setIsReadOnlyForIncomingUser: a, updateDocumentEditor: c, user: u })=>{\n if (s) try {\n await c(t, o ?? r, u), i || (n.current.hasShownLockedModal = !0), n.current = {\n hasShownLockedModal: n.current?.hasShownLockedModal,\n isLocked: !0,\n user: u\n }, l(u), i && a && a(!1), e && e();\n } catch (d) {\n console.error(\"Error during document takeover:\", d);\n }\n};\n\n\n\n\n\n\n\n\nvar Ooe = \"apiKey\", hb = \"api-key\", Voe = \"field-type\", fN = ({ enabled: t, readOnly: e })=>{\n let [o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(mn()), [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [s, i] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { i18n: l, t: a } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: c, getEntityConfig: u } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { collectionSlug: d } = Se(), f = Ot(([I])=>I && I[Ooe] || null), m = u({\n collectionSlug: d\n })?.fields?.find((I)=>\"name\" in I && I.name === \"apiKey\"), p = (I)=>(0,payload_shared__WEBPACK_IMPORTED_MODULE_41__.text)(I, {\n name: \"apiKey\",\n type: \"text\",\n blockData: {},\n data: {},\n event: \"onChange\",\n maxLength: 48,\n minLength: 24,\n path: [\n \"apiKey\"\n ],\n preferences: {\n fields: {}\n },\n req: {\n payload: {\n config: c\n },\n t: a\n },\n siblingData: {}\n }), h = f?.value, g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{\n let I = \"API Key\";\n return m?.label && (I = m.label), (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(I, l);\n }, [\n m,\n l\n ]), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"label\", {\n className: `${hb}__label field-label`,\n htmlFor: \"apiKey\",\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n children: g\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Dd, {\n value: h\n })\n ]\n }), [\n g,\n h\n ]), C = Te({\n path: \"apiKey\",\n validate: p\n }), y = ()=>{\n n && r(!1), setTimeout(()=>{\n r(!0);\n }, 1);\n }, { setValue: v, value: x } = C;\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n !h && t && v(o), !t && h && v(null);\n }, [\n h,\n t,\n v,\n o\n ]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n n && setTimeout(()=>{\n r(!1);\n }, 1e4);\n }, [\n n\n ]), t ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n Voe,\n \"api-key\",\n \"read-only\"\n ].filter(Boolean).join(\" \"),\n children: [\n b,\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${hb}__input-wrap`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"input\", {\n \"aria-label\": g,\n className: n ? \"highlight\" : void 0,\n disabled: !0,\n id: \"apiKey\",\n name: \"apiKey\",\n type: s ? \"text\" : \"password\",\n value: x || \"\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${hb}__toggle-button-wrap`,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"none\",\n className: `${hb}__toggle-button`,\n icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Tg, {\n active: s\n }),\n onClick: ()=>i((I)=>!I)\n })\n })\n ]\n })\n ]\n }),\n !e && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(HC, {\n highlightField: y,\n setKey: ()=>v(mn())\n })\n ]\n }) : null;\n};\nvar gb = \"auth-fields\", pN = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(21), { className: o, collectionSlug: n, disableLocalStrategy: r, email: s, loginWithUsername: i, operation: l, readOnly: a, requirePassword: c, setValidateBeforeSubmit: u, useAPIKey: d, username: f, verify: m } = t, [p, h] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(c), g = Ot(Yoe), b = Ot(Zoe), C = po(), { i18n: y, t: v } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { docPermissions: x, isEditing: I, isInitializing: w, isTrashed: F } = Se(), { config: S } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: R } = S, { api: D } = R, _ = !0, T = !0, A = typeof x.fields == \"object\" && \"password\" in x.fields, k = typeof x.fields == \"object\" && (\"username\" in x.fields || \"email\" in x.fields);\n if (A) {\n let { permissions: Y } = (0,payload_shared__WEBPACK_IMPORTED_MODULE_34__.getFieldPermissions)({\n field: {\n name: \"password\",\n type: \"text\"\n },\n operation: l,\n parentName: \"\",\n permissions: x?.fields\n });\n l === \"create\" ? _ = Y === !0 || typeof Y == \"object\" && Y.create : _ = Y === !0 || typeof Y == \"object\" && Y.update;\n }\n if (k) {\n let Y = i && (i.requireEmail || i.allowEmailLogin), le;\n e[0] !== x.fields ? (le = (0,payload_shared__WEBPACK_IMPORTED_MODULE_34__.getFieldPermissions)({\n field: {\n name: \"email\",\n type: \"text\"\n },\n operation: \"read\",\n parentName: \"\",\n permissions: x?.fields\n }), e[0] = x.fields, e[1] = le) : le = e[1];\n let { operation: xe } = le, _e;\n e[2] !== x.fields ? (_e = (0,payload_shared__WEBPACK_IMPORTED_MODULE_34__.getFieldPermissions)({\n field: {\n name: \"username\",\n type: \"text\"\n },\n operation: \"read\",\n parentName: \"\",\n permissions: x?.fields\n }), e[2] = x.fields, e[3] = _e) : _e = e[3];\n let { operation: Be } = _e;\n Y ? T = Be || xe : i && !Y ? T = Be : T = xe;\n }\n let P = (!r || typeof r == \"object\" && r.enableFields === !0) && (T || _), E = a || w || F, B = x?.fields === !0 ? !0 : x?.fields?.enableAPIKey, $ = a || B === !0 || B && typeof B == \"object\" && !B?.update, M = a || B !== !0 && !B?.update, L = B === !0 || B?.read, j;\n e: {\n if (x) {\n j = !!(\"unlock\" in x && x.unlock);\n break e;\n }\n j = !1;\n }\n let O = j, V;\n e[4] !== b || e[5] !== u || e[6] !== v ? (V = (Y)=>{\n Y ? (u(!0), b({\n type: \"UPDATE\",\n errorMessage: v(\"validation:required\"),\n path: \"password\",\n valid: !1\n }), b({\n type: \"UPDATE\",\n errorMessage: v(\"validation:required\"),\n path: \"confirm-password\",\n valid: !1\n })) : (u(!1), b({\n type: \"REMOVE\",\n path: \"password\"\n }), b({\n type: \"REMOVE\",\n path: \"confirm-password\"\n })), h(Y);\n }, e[4] = b, e[5] = u, e[6] = v, e[7] = V) : V = e[7];\n let W = V, Z;\n e[8] !== D || e[9] !== n || e[10] !== s || e[11] !== y || e[12] !== i || e[13] !== v || e[14] !== f ? (Z = async ()=>{\n let Y = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n apiRoute: D,\n path: `/${n}/unlock`\n });\n (await fetch(Y, {\n body: JSON.stringify(i && f ? {\n username: f\n } : {\n email: s\n }),\n credentials: \"include\",\n headers: {\n \"Accept-Language\": y.language,\n \"Content-Type\": \"application/json\"\n },\n method: \"post\"\n })).status === 200 ? ee.success(v(\"authentication:successfullyUnlocked\")) : ee.error(v(\"authentication:failedToUnlock\"));\n }, e[8] = D, e[9] = n, e[10] = s, e[11] = y, e[12] = i, e[13] = v, e[14] = f, e[15] = Z) : Z = e[15];\n let z = Z, Q, U;\n if (e[16] !== C ? (Q = ()=>{\n C || h(!1);\n }, U = [\n C\n ], e[16] = C, e[17] = Q, e[18] = U) : (Q = e[17], U = e[18]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(Q, U), !(P || d && L || m && I)) return null;\n let J;\n return e[19] !== o ? (J = [\n gb,\n o\n ].filter(Boolean), e[19] = o, e[20] = J) : J = e[20], (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: J.join(\" \"),\n children: [\n P && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Hx, {\n loginWithUsername: i,\n operation: l,\n permissions: x?.fields,\n readOnly: a || F,\n t: v\n }),\n (p || c) && (!r || !P) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${gb}__changing-password`,\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Wd, {\n autoComplete: \"new-password\",\n field: {\n name: \"password\",\n label: v(\"authentication:newPassword\"),\n required: !0\n },\n indexPath: \"\",\n parentPath: \"\",\n parentSchemaPath: \"\",\n path: \"password\",\n schemaPath: \"password\"\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zd, {\n disabled: a || F\n })\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${gb}__controls`,\n children: [\n p && !c && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n disabled: E,\n id: \"cancel-change-password\",\n onClick: ()=>W(!1),\n size: \"medium\",\n children: v(\"general:cancel\")\n }),\n !p && !c && !r && _ && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n disabled: E,\n id: \"change-password\",\n onClick: ()=>W(!0),\n size: \"medium\",\n children: v(\"authentication:changePassword\")\n }),\n !p && l === \"update\" && O && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(re, {\n buttonStyle: \"secondary\",\n disabled: E || !T,\n id: \"force-unlock\",\n onClick: ()=>{\n z();\n },\n size: \"medium\",\n children: v(\"authentication:forceUnlock\")\n })\n ]\n })\n ]\n }),\n d && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: `${gb}__api-key`,\n children: L && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zr, {\n field: {\n name: \"enableAPIKey\",\n admin: {\n disabled: E,\n readOnly: M\n },\n label: v(\"authentication:enableAPIKey\")\n },\n path: \"enableAPIKey\",\n schemaPath: `${n}.enableAPIKey`\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(fN, {\n enabled: !!g?.value,\n readOnly: $\n })\n ]\n })\n }),\n m && I && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(zr, {\n field: {\n name: \"_verified\",\n admin: {\n disabled: E,\n readOnly: a\n },\n label: v(\"authentication:verified\")\n },\n path: \"_verified\",\n schemaPath: `${n}._verified`\n })\n ]\n });\n};\nfunction Yoe(t) {\n let [e] = t;\n return e && e?.enableAPIKey || null;\n}\n_c287 = Yoe;\nfunction Zoe(t) {\n return t[1];\n}\n_c288 = Zoe;\n\n\n\n\nvar aw = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(37), { id: o, collectionSlug: n, globalSlug: r, isTrashed: s, pluralLabel: i, useAsTitle: l } = t, a = t?.view || void 0, { isEditing: c, isInitializing: u } = Se(), { title: d } = Ao(), { isEntityVisible: f } = Ox(), m;\n e[0] !== n || e[1] !== r || e[2] !== f ? (m = f({\n collectionSlug: n,\n globalSlug: r\n }), e[0] = n, e[1] = r, e[2] = f, e[3] = m) : m = e[3];\n let p = m, { setStepNav: h } = Pr(), { i18n: g, t: b } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { config: C } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), { routes: y, serverURL: v } = C, { admin: x } = y, I;\n e[4] !== x || e[5] !== n || e[6] !== r || e[7] !== g || e[8] !== o || e[9] !== c || e[10] !== u || e[11] !== s || e[12] !== p || e[13] !== i || e[14] !== h || e[15] !== b || e[16] !== d || e[17] !== l || e[18] !== a ? (I = ()=>{\n let F = [];\n u || (n ? (F.push({\n label: (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(i, g),\n url: p ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: x,\n path: `/collections/${n}`\n }) : void 0\n }), s && F.push({\n label: b(\"general:trash\"),\n url: p ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: x,\n path: `/collections/${n}/trash`\n }) : void 0\n }), c ? F.push({\n label: l && l !== \"id\" && d || `${o}`,\n url: p ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: x,\n path: s ? `/collections/${n}/trash/${o}` : `/collections/${n}/${o}`\n }) : void 0\n }) : F.push({\n label: b(\"general:createNew\")\n })) : r && F.push({\n label: d,\n url: p ? (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: x,\n path: `/globals/${r}`\n }) : void 0\n }), a && F.push({\n label: a\n }), h(F));\n }, e[4] = x, e[5] = n, e[6] = r, e[7] = g, e[8] = o, e[9] = c, e[10] = u, e[11] = s, e[12] = p, e[13] = i, e[14] = h, e[15] = b, e[16] = d, e[17] = l, e[18] = a, e[19] = I) : I = e[19];\n let w;\n return e[20] !== x || e[21] !== n || e[22] !== r || e[23] !== g || e[24] !== o || e[25] !== c || e[26] !== u || e[27] !== s || e[28] !== p || e[29] !== i || e[30] !== v || e[31] !== h || e[32] !== b || e[33] !== d || e[34] !== l || e[35] !== a ? (w = [\n h,\n u,\n c,\n i,\n o,\n s,\n l,\n x,\n b,\n g,\n d,\n n,\n r,\n v,\n a,\n p\n ], e[20] = x, e[21] = n, e[22] = r, e[23] = g, e[24] = o, e[25] = c, e[26] = u, e[27] = s, e[28] = p, e[29] = i, e[30] = v, e[31] = h, e[32] = b, e[33] = d, e[34] = l, e[35] = a, e[36] = w) : w = e[36], (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(I, w), null;\n};\n\n\nvar lw = (t)=>{\n let e = (0,react_compiler_runtime__WEBPACK_IMPORTED_MODULE_6__.c)(14), { collectionConfig: o, config: n, fallback: r, globalConfig: s } = t, i = o?.admin?.useAsTitle, l;\n e[0] !== i ? (l = (C)=>{\n let [y] = C;\n return i && y && y?.[i] || null;\n }, e[0] = i, e[1] = l) : l = e[1];\n let a = Ot(l), c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), { i18n: u } = (0,_chunk_WDZJLNNB_js__WEBPACK_IMPORTED_MODULE_7__.d)(), { setDocumentTitle: d } = Ao(), f = n?.admin?.dateFormat, m = a?.value || \"\", p;\n e[2] !== o || e[3] !== f || e[4] !== r || e[5] !== s || e[6] !== u || e[7] !== m || e[8] !== i ? (p = qo({\n collectionConfig: o,\n data: {\n id: \"\",\n [i]: m\n },\n dateFormat: f,\n fallback: r,\n globalConfig: s,\n i18n: u\n }), e[2] = o, e[3] = f, e[4] = r, e[5] = s, e[6] = u, e[7] = m, e[8] = i, e[9] = p) : p = e[9];\n let h = p, g, b;\n return e[10] !== d || e[11] !== h ? (g = ()=>{\n if (!c.current) {\n c.current = !0;\n return;\n }\n d(h);\n }, b = [\n d,\n h\n ], e[10] = d, e[11] = h, e[12] = g, e[13] = b) : (g = e[12], b = e[13]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(g, b), null;\n};\nvar Os = \"collection-edit\", uw = \"payload-pending-success-toast\";\nfunction cre({ BeforeDocumentControls: t, Description: e, EditMenuItems: o, LivePreview: n, PreviewButton: r, PublishButton: s, SaveButton: i, SaveDraftButton: l, Status: a, UnpublishButton: c, Upload: u, UploadControls: d }) {\n _s98();\n let { id: f, action: m, AfterDocument: p, AfterFields: h, apiURL: g, BeforeFields: b, collectionSlug: C, currentEditor: y, data: v, disableActions: x, disableCreate: I, disableLeaveWithoutSaving: w, docPermissions: F, documentIsLocked: S, documentLockState: R, getDocPermissions: D, getDocPreferences: _, globalSlug: T, hasPublishPermission: A, hasSavePermission: k, incrementVersionCount: P, initialState: E, isEditing: B, isInitializing: $, isLocked: M, isTrashed: L, lastUpdateTime: j, redirectAfterCreate: O, redirectAfterDelete: V, redirectAfterDuplicate: W, redirectAfterRestore: Z, setCurrentEditor: z, setData: Q, setDocumentIsLocked: U, setLastUpdateTime: X, unlockDocument: ue, updateDocumentEditor: q } = Se(), { clearDoc: J, drawerSlug: Y, onDelete: le, onDuplicate: xe, onRestore: _e, onSave: Be } = zu(), Me = !!Y, { refreshCookieAsync: Ue, user: he } = Ie(), { config: Oe, config: { admin: { user: Ke }, routes: { admin: ae }, serverURL: we }, getEntityConfig: G } = (0,_chunk_QP5KC7MG_js__WEBPACK_IMPORTED_MODULE_11__.c)(), se = G({\n collectionSlug: C\n }), K = G({\n globalSlug: T\n }), fe = ct(), me = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useRouter)(), ne = (0,next_navigation_js__WEBPACK_IMPORTED_MODULE_5__.useSearchParams)(), { reportUpdate: te } = Is(), { resetUploadEdits: ge } = Ui(), { getFormState: oe } = Nt(), { startRouteTransition: pe } = Ye(), { clearRouteCache: be } = pt(), { isLivePreviewEnabled: ot, isLivePreviewing: je, previewWindowType: Je, setURL: Rt, typeofLivePreviewURL: Ut, url: $o } = ko(), { isPreviewEnabled: Lt, setPreviewURL: gr } = _g(), De = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), ze = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), ce = ne.get(\"locale\"), Ee = se?.slug || K?.slug, Re = C && !f ? \"create\" : \"update\", qe = se ? se.auth : void 0, lt = se ? se.upload : void 0, nt = se || K, Fe = nt?.lockDocuments !== void 0 ? nt?.lockDocuments : !0, Ve = Fe !== !1, At = (typeof Fe == \"object\" ? Fe.duration : 300) * 1e3, wt = (0,payload_shared__WEBPACK_IMPORTED_MODULE_25__.hasAutosaveEnabled)(nt), [mo, Lr] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [gt, Bo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [kr, Mo] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [An, Fi] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(Date.now()), jr = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), br = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(v?.updatedAt), tn = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0), Vs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), Xa = j + At, Xt = Date.now() > Xa, wo = !mo && (typeof w < \"u\" ? !w : !wt), $r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>[\n Ee\n ], [\n Ee\n ]), [Ec, Pn] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>!!(Re === \"create\" && qe && !qe.disableLocalStrategy)), Gs = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), Hm = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((bt)=>{\n U(!0);\n let En = typeof R.current?.user == \"object\" ? R.current?.user?.id : R.current?.user;\n if (bt && bt.user) {\n let Nn = typeof bt.user == \"string\" || typeof bt.user == \"number\" ? bt.user : bt.user.id;\n (!R.current || Nn !== En) && (En === he.id && Nn !== he.id && (Bo(!0), R.current.hasShownLockedModal = !0), R.current = {\n hasShownLockedModal: R.current?.hasShownLockedModal || !1,\n isLocked: !0,\n user: bt.user\n }, z(bt.user)), bt.lastEditedAt && X(new Date(bt.lastEditedAt).getTime());\n }\n }, [\n R,\n z,\n U,\n X,\n he?.id\n ]), yb = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{\n Mo(!1), me.refresh();\n }, [\n me\n ]), Nc = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((bt)=>{\n Gs.current = bt;\n }, []), Cb = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ()=>{\n let bt = R.current?.user, En = typeof bt == \"object\" ? bt?.id === he?.id : bt === he?.id;\n if (Ve && S && (f || T)) {\n let Nn = Gs.current ? new URL(Gs.current).pathname : \"\", Lc = [\n \"/preview\",\n \"/api\",\n \"/versions\"\n ].some((Ri)=>Nn.includes(Ri));\n if (En && !Lc) try {\n await ue(f, C ?? T), U(!1), z(null);\n } catch (Ri) {\n console.error(\"Failed to unlock before leave\", Ri);\n }\n }\n }, [\n C,\n S,\n R,\n T,\n f,\n Ve,\n z,\n U,\n ue,\n he?.id\n ]), Di = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (bt, En)=>{\n let { context: Nn, formState: Lc } = En || {}, Ri = Tr(ze), Ln = bt?.doc || bt?.result, Ja = Ln?.updatedAt || new Date().toISOString();\n if (he && C === Ke && f === he.id && Ue(), X(new Date(Ja).getTime()), br.current = Ja, jr.current = !1, Vs.current = !1, Nn?.incrementVersionCount !== !1 && P(), typeof Q == \"function\" && Q(Ln || {}), typeof Be == \"function\") {\n let ss = f ? \"update\" : \"create\";\n Be({\n ...bt,\n context: Nn,\n operation: ss,\n updatedAt: ss === \"update\" ? new Date().toISOString() : Ln?.updatedAt || new Date().toISOString()\n });\n }\n if (!B && fe < 2 && O !== !1) {\n bt.message && typeof window < \"u\" && window.sessionStorage.setItem(uw, bt.message);\n let ss = (0,payload_shared__WEBPACK_IMPORTED_MODULE_12__.formatAdminURL)({\n adminRoute: ae,\n path: `/collections/${C}/${Ln?.id}${ce ? `?locale=${ce}` : \"\"}`\n });\n pe(()=>me.push(ss));\n } else ge();\n if (Nn?.getDocPermissions !== !1 && await D(bt), f || T) {\n let ss = await _(), { livePreviewURL: kc, previewURL: xb, state: qa } = await oe({\n id: f,\n collectionSlug: C,\n data: Ln,\n docPermissions: F,\n docPreferences: ss,\n formState: Lc,\n globalSlug: T,\n operation: Re,\n renderAllFields: !1,\n returnLivePreviewURL: ot && Ut === \"function\",\n returnLockStatus: !1,\n returnPreviewURL: Lt,\n schemaPath: $r.join(\".\"),\n signal: Ri.signal,\n skipValidation: !0\n });\n return lt && qa && delete qa.file, Ve && U(!1), ot && Ut === \"function\" && Rt(kc), Lt && gr(xb), te({\n id: f,\n doc: Ln,\n drawerSlug: Y,\n entitySlug: Ee,\n operation: \"update\",\n updatedAt: Ja\n }), ze.current = null, qa;\n } else te({\n id: f,\n doc: Ln,\n drawerSlug: Y,\n entitySlug: Ee,\n operation: \"create\",\n updatedAt: Ja\n });\n }, [\n he,\n C,\n Ke,\n f,\n X,\n Q,\n Be,\n B,\n fe,\n O,\n T,\n Ue,\n P,\n ae,\n ce,\n pe,\n me,\n ge,\n D,\n _,\n oe,\n F,\n Re,\n ot,\n Ut,\n Lt,\n $r,\n lt,\n Ve,\n te,\n Y,\n Ee,\n U,\n Rt,\n gr\n ]), Um = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({ formState: bt, submitted: En })=>{\n let Nn = Tr(De), Lc = tn.current, Ri = Vs.current;\n v?.updatedAt && v.updatedAt > br.current && (br.current = v.updatedAt, jr.current = !1);\n let Ln = Date.now(), Ja = Ln - An, ss = Ve && Ja >= 1e4;\n ss && Fi(Ln);\n let kc = !jr.current && br.current && Re === \"update\" && !wt;\n kc && (jr.current = !0);\n let xb = await _(), qa = await oe({\n id: f,\n checkForStaleData: kc,\n collectionSlug: C,\n docPermissions: F,\n docPreferences: xb,\n formState: bt,\n globalSlug: T,\n operation: Re,\n originalUpdatedAt: kc ? br.current : void 0,\n renderAllFields: !1,\n returnLockStatus: Ve,\n schemaPath: $r.join(\".\"),\n signal: Nn.signal,\n skipValidation: !En,\n updateLastEdited: ss\n });\n if (!qa) return;\n let { lockedState: gN, staleDataState: bN, state: vN } = qa;\n return Ve && Hm(gN), bN?.isStale && !Ri && tn.current === Lc && Mo(!0), De.current = null, vN;\n }, [\n v?.updatedAt,\n An,\n Ve,\n _,\n oe,\n f,\n C,\n F,\n T,\n Re,\n $r,\n Hm,\n wt\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>{\n Bo(!1);\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n let bt = De.current, En = ze.current;\n return ()=>{\n _r(bt), _r(En);\n };\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{\n if (!$ && typeof window < \"u\") {\n let bt = window.sessionStorage.getItem(uw);\n bt && (window.sessionStorage.removeItem(uw), ee.success(bt));\n }\n }, [\n $\n ]);\n let Ya = S && y && (typeof y == \"object\" ? y.id !== he?.id : y !== he?.id) && !mo && !gt && !R.current?.hasShownLockedModal && !Xt, Za = Oe.folders && C === Oe.folders?.slug;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"main\", {\n className: [\n Os,\n (f || T) && `${Os}--is-editing`,\n T && `global-edit--${T}`,\n C && `collection-edit--${C}`,\n je && Je === \"iframe\" && `${Os}--is-live-previewing`\n ].filter(Boolean).join(\" \"),\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(au, {\n operation: Re,\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_s99, {\n action: m,\n className: `${Os}__form`,\n disabled: mo || $ || !k || L,\n disableSuccessStatus: !B && fe < 2 && O !== !1,\n disableValidationOnSubmit: !Ec,\n initialState: !$ && E,\n isDocumentForm: !0,\n isInitializing: $,\n method: f ? \"PATCH\" : \"POST\",\n onChange: [\n Um\n ],\n onSubmit: ()=>{\n tn.current += 1, Vs.current = !0;\n },\n onSuccess: Di,\n children: [\n Me && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Z5, {\n AfterHeader: e,\n drawerSlug: Y,\n showDocumentID: !Za\n }),\n Ve && Ya && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zy, {\n handleGoBack: ()=>uN({\n adminRoute: ae,\n collectionSlug: C,\n router: me,\n serverURL: we\n }),\n isActive: Ya,\n onReadOnly: ()=>{\n Lr(!0), Bo(!1);\n },\n onTakeOver: ()=>nw({\n id: f,\n clearRouteCache: be,\n collectionSlug: C,\n documentLockStateRef: R,\n globalSlug: T,\n isLockingEnabled: Ve,\n isWithinDoc: !1,\n setCurrentEditor: z,\n updateDocumentEditor: q,\n user: he\n }),\n updatedAt: j,\n user: y\n }),\n Ve && gt && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Yy, {\n handleBackToDashboard: ()=>cN({\n adminRoute: ae,\n router: me,\n serverURL: we\n }),\n isActive: gt,\n onReadOnly: ()=>{\n Lr(!0), Bo(!1);\n }\n }),\n kr && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(q5, {\n isActive: kr,\n onReload: yb\n }),\n wo && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(tm, {\n onConfirm: Cb,\n onPrevent: Nc\n }),\n !Me && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(aw, {\n collectionSlug: se?.slug,\n globalSlug: K?.slug,\n id: f,\n isTrashed: L,\n pluralLabel: se?.labels?.plural,\n useAsTitle: se?.admin?.useAsTitle\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(lw, {\n collectionConfig: se,\n config: Oe,\n fallback: fe <= 1 ? f?.toString() : void 0,\n globalConfig: K\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(MC, {\n apiURL: g,\n BeforeDocumentControls: t,\n customComponents: {\n PreviewButton: r,\n PublishButton: s,\n SaveButton: i,\n SaveDraftButton: l,\n Status: a,\n UnpublishButton: c\n },\n data: v,\n disableActions: x || Za || L,\n disableCreate: I,\n EditMenuItems: o,\n hasPublishPermission: A,\n hasSavePermission: k,\n id: f,\n isEditing: B,\n isInDrawer: Me,\n isTrashed: L,\n onDelete: le,\n onDrawerCreateNew: J,\n onDuplicate: xe,\n onRestore: _e,\n onSave: Di,\n onTakeOver: ()=>nw({\n id: f,\n clearRouteCache: be,\n collectionSlug: C,\n documentLockStateRef: R,\n globalSlug: T,\n isLockingEnabled: Ve,\n isWithinDoc: !0,\n setCurrentEditor: z,\n setIsReadOnlyForIncomingUser: Lr,\n updateDocumentEditor: q,\n user: he\n }),\n permissions: F,\n readOnlyForIncomingUser: mo,\n redirectAfterDelete: V,\n redirectAfterDuplicate: W,\n redirectAfterRestore: Z,\n slug: se?.slug || K?.slug,\n user: y\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n `${Os}__main-wrapper`,\n Je === \"popup\" && `${Os}--detached`\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: [\n `${Os}__main`,\n Je === \"popup\" && `${Os}__main--popup-open`\n ].filter(Boolean).join(\" \"),\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(xd, {\n AfterFields: h,\n BeforeFields: b || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n qe && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(pN, {\n className: `${Os}__auth`,\n collectionSlug: se.slug,\n disableLocalStrategy: se.auth?.disableLocalStrategy,\n email: v?.email,\n loginWithUsername: qe?.loginWithUsername,\n operation: Re,\n readOnly: !k,\n requirePassword: !f,\n setValidateBeforeSubmit: Pn,\n useAPIKey: qe.useAPIKey,\n username: v?.username,\n verify: qe.verify\n }),\n lt && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Zl, {\n children: u || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(gy, {\n collectionSlug: se.slug,\n initialState: E,\n uploadConfig: lt,\n UploadControls: d\n })\n })\n })\n ]\n }),\n Description: e,\n docPermissions: F,\n fields: nt.fields,\n forceSidebarWrap: je,\n isTrashed: L,\n readOnly: mo || !k || L,\n schemaPathSegments: $r\n }),\n p\n ]\n }),\n ot && !Me && $o && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {\n children: n || (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(rw, {\n collectionSlug: C,\n globalSlug: T\n })\n })\n ]\n })\n ]\n }, `${M}`)\n })\n });\n}\n_s98(cre, \"aqfnqy0lBVPa/PbLKe8M7p76u/k=\");\n\n\nvar dre = \"field-diff-label\", dw = ({ children: t })=>(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: dre,\n children: t\n });\n\n\nvar fw = \"field-diff\", pre = (t)=>{\n let { className: e, From: o, i18n: n, label: { label: r, locale: s }, nestingLevel: i = 0, To: l } = t;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${fw}-container${e ? ` ${e}` : \"\"} nested-level-${i}`,\n style: i ? {\n \"--left-offset\": `calc(50% - (${i} * calc( calc(var(--base)* 0.5) - 2.5px )))`\n } : {\n \"--left-offset\": \"50%\"\n },\n children: [\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(dw, {\n children: [\n s && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"span\", {\n className: `${fw}__locale-label`,\n children: s\n }),\n typeof r != \"function\" && (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_10__.getTranslation)(r || \"\", n)\n ]\n }),\n (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"div\", {\n className: `${fw}-content`,\n style: i ? {\n gridTemplateColumns: \"calc(var(--left-offset) - calc(var(--base)*0.5) ) calc(50% - calc(var(--base)*0.5) + calc(50% - var(--left-offset)))\"\n } : void 0,\n children: [\n o,\n l\n ]\n })\n ]\n });\n};\n /*! Bundled license information:\n\nscheduler/cjs/scheduler.production.js:\n (**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *)\n\nreact-is/cjs/react-is.production.min.js:\n (** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *)\n\nis-buffer/index.js:\n (*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n *)\n\nfocus-trap/dist/focus-trap.esm.js:\n (*!\n * focus-trap 7.5.4\n * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n *)\n*/ //# sourceMappingURL=index.js.map\nvar _c1, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c10, _c11, _c12, _c13, _c14, _c15, _c16, _c17, _c18, _c19, _c20, _c21, _c22, _c23, _c24, _c25, _c26, _c27, _c28, _c29, _c30, _c31, _c32, _c33, _c34, _c35, _c36, _c37, _c38, _c39, _c40, _c41, _c42, _c43, _c44, _c45, _c46, _c47, _c48, _c49, _c50, _c51, _c52, _c53, _c54, _c55, _c56, _c57, _c58, _c59, _c60, _c61, _c62, _c63, _c64, _c65, _c66, _c67, _c68, _c69, _c70, _c71, _c72, _c73, _c74, _c75, _c76, _c77, _c78, _c79, _c80, _c81, _c82, _c83, _c84, _c85, _c86, _c87, _c88, _c89, _c90, _c91, _c92, _c93, _c94, _c95, _c96, _c97, _c98, _c99, _c100, _c101, _c102, _c103, _c104, _c105, _c106, _c107, _c108, _c109, _c110, _c111, _c112, _c113, _c114, _c115, _c116, _c117, _c118, _c119, _c120, _c121, _c122, _c123, _c124, _c125, _c126, _c127, _c128, _c129, _c130, _c131, _c132, _c133, _c134, _c135, _c136, _c137, _c138, _c139, _c140, _c141, _c142, _c143, _c144, _c145, _c146, _c147, _c148, _c149, _c150, _c151, _c152, _c153, _c154, _c155, _c156, _c157, _c158, _c159, _c160, _c161, _c162, _c163, _c164, _c165, _c166, _c167, _c168, _c169, _c170, _c171, _c172, _c173, _c174, _c175, _c176, _c177, _c178, _c179, _c180, _c181, _c182, _c183, _c184, _c185, _c186, _c187, _c188, _c189, _c190, _c191, _c192, _c193, _c194, _c195, _c196, _c197, _c198, _c199, _c200, _c201, _c202, _c203, _c204, _c205, _c206, _c207, _c208, _c209, _c210, _c211, _c212, _c213, _c214, _c215, _c216, _c217, _c218, _c219, _c220, _c221, _c222, _c223, _c224, _c225, _c226, _c227, _c228, _c229, _c230, _c231, _c232, _c233, _c234, _c235, _c236, _c237, _c238, _c239, _c240, _c241, _c242, _c243, _c244, _c245, _c246, _c247, _c248, _c249, _c250, _c251, _c252, _c253, _c254, _c255, _c256, _c257, _c258, _c259, _c260, _c261, _c262, _c263, _c264, _c265, _c266, _c267, _c268, _c269, _c270, _c271, _c272, _c273, _c274, _c275, _c276, _c277, _c278, _c279, _c280, _c281, _c282, _c283, _c284, _c285, _c286, _c287, _c288;\n$RefreshReg$(_c1, \"Fw$on\");\n$RefreshReg$(_c2, \"Fw\");\n$RefreshReg$(_c3, \"Rw$on\");\n$RefreshReg$(_c4, \"Rw\");\n$RefreshReg$(_c5, \"WI$on\");\n$RefreshReg$(_c6, \"WI\");\n$RefreshReg$(_c7, \"U0$on\");\n$RefreshReg$(_c8, \"U0\");\n$RefreshReg$(_c9, \"BP$on\");\n$RefreshReg$(_c10, \"BP\");\n$RefreshReg$(_c11, \"Ky$on\");\n$RefreshReg$(_c12, \"Ky\");\n$RefreshReg$(_c13, \"GP$on\");\n$RefreshReg$(_c14, \"GP\");\n$RefreshReg$(_c15, \"WP$on\");\n$RefreshReg$(_c16, \"WP\");\n$RefreshReg$(_c17, \"Pw\");\n$RefreshReg$(_c18, \"Ew\");\n$RefreshReg$(_c19, \"bL\");\n$RefreshReg$(_c20, \"Ow\");\n$RefreshReg$(_c21, \"Vw\");\n$RefreshReg$(_c22, \"RL\");\n$RefreshReg$(_c23, \"Qt\");\n$RefreshReg$(_c24, \"He\");\n$RefreshReg$(_c25, \"Yb\");\n$RefreshReg$(_c26, \"Zb\");\n$RefreshReg$(_c27, \"Li\");\n$RefreshReg$(_c28, \"Ro\");\n$RefreshReg$(_c29, \"YL\");\n$RefreshReg$(_c30, \"C2\");\n$RefreshReg$(_c31, \"S9\");\n$RefreshReg$(_c32, \"S2\");\n$RefreshReg$(_c33, \"T2\");\n$RefreshReg$(_c34, \"R9\");\n$RefreshReg$(_c35, \"D2\");\n$RefreshReg$(_c36, \"A9\");\n$RefreshReg$(_c37, \"A2\");\n$RefreshReg$(_c38, \"E9\");\n$RefreshReg$(_c39, \"Or\");\n$RefreshReg$(_c40, \"Zs\");\n$RefreshReg$(_c41, \"Ne\");\n$RefreshReg$(_c42, \"If\");\n$RefreshReg$(_c43, \"B2\");\n$RefreshReg$(_c44, \"Rf\");\n$RefreshReg$(_c45, \"M2\");\n$RefreshReg$(_c46, \"O2\");\n$RefreshReg$(_c47, \"K2\");\n$RefreshReg$(_c48, \"Kc\");\n$RefreshReg$(_c49, \"A1\");\n$RefreshReg$(_c50, \"Ie\");\n$RefreshReg$(_c51, \"Vf\");\n$RefreshReg$(_c52, \"Ce\");\n$RefreshReg$(_c53, \"E1\");\n$RefreshReg$(_c54, \"Wi\");\n$RefreshReg$(_c55, \"Hf\");\n$RefreshReg$(_c56, \"Bn\");\n$RefreshReg$(_c57, \"Uf\");\n$RefreshReg$(_c58, \"S3\");\n$RefreshReg$(_c59, \"I3\");\n$RefreshReg$(_c60, \"T3\");\n$RefreshReg$(_c61, \"F3\");\n$RefreshReg$(_c62, \"D3\");\n$RefreshReg$(_c63, \"Xf\");\n$RefreshReg$(_c64, \"R3\");\n$RefreshReg$(_c65, \"A3\");\n$RefreshReg$(_c66, \"P3\");\n$RefreshReg$(_c67, \"E3\");\n$RefreshReg$(_c68, \"N3\");\n$RefreshReg$(_c69, \"L3\");\n$RefreshReg$(_c70, \"Yf\");\n$RefreshReg$(_c71, \"B3\");\n$RefreshReg$(_c72, \"M3\");\n$RefreshReg$(_c73, \"O3\");\n$RefreshReg$(_c74, \"Hi\");\n$RefreshReg$(_c75, \"W3\");\n$RefreshReg$(_c76, \"H3\");\n$RefreshReg$(_c77, \"U3\");\n$RefreshReg$(_c78, \"Fj\");\n$RefreshReg$(_c79, \"X3\");\n$RefreshReg$(_c80, \"Y3\");\n$RefreshReg$(_c81, \"Dj\");\n$RefreshReg$(_c82, \"Z3\");\n$RefreshReg$(_c83, \"B1\");\n$RefreshReg$(_c84, \"Zf\");\n$RefreshReg$(_c85, \"J3\");\n$RefreshReg$(_c86, \"M1\");\n$RefreshReg$(_c87, \"Kj\");\n$RefreshReg$(_c88, \"X1\");\n$RefreshReg$(_c89, \"Xi\");\n$RefreshReg$(_c90, \"Y1\");\n$RefreshReg$(_c91, \"Z1\");\n$RefreshReg$(_c92, \"CS\");\n$RefreshReg$(_c93, \"Zi\");\n$RefreshReg$(_c94, \"TS\");\n$RefreshReg$(_c95, \"AS\");\n$RefreshReg$(_c96, \"Ji\");\n$RefreshReg$(_c97, \"OS\");\n$RefreshReg$(_c98, \"Qi\");\n$RefreshReg$(_c99, \"QS\");\n$RefreshReg$(_c100, \"KS\");\n$RefreshReg$(_c101, \"Le\");\n$RefreshReg$(_c102, \"SB\");\n$RefreshReg$(_c103, \"IB\");\n$RefreshReg$(_c104, \"Iu\");\n$RefreshReg$(_c105, \"Qo\");\n$RefreshReg$(_c106, \"Sl\");\n$RefreshReg$(_c107, \"Il\");\n$RefreshReg$(_c108, \"Dl\");\n$RefreshReg$(_c109, \"CI\");\n$RefreshReg$(_c110, \"Ur\");\n$RefreshReg$(_c111, \"Tu\");\n$RefreshReg$(_c112, \"Rl\");\n$RefreshReg$(_c113, \"Tl\");\n$RefreshReg$(_c114, \"Al\");\n$RefreshReg$(_c115, \"SI\");\n$RefreshReg$(_c116, \"II\");\n$RefreshReg$(_c117, \"FI\");\n$RefreshReg$(_c118, \"TI\");\n$RefreshReg$(_c119, \"DI\");\n$RefreshReg$(_c120, \"RI\");\n$RefreshReg$(_c121, \"AI\");\n$RefreshReg$(_c122, \"PI\");\n$RefreshReg$(_c123, \"NI\");\n$RefreshReg$(_c124, \"HI\");\n$RefreshReg$(_c125, \"Fu\");\n$RefreshReg$(_c126, \"JB\");\n$RefreshReg$(_c127, \"Dp\");\n$RefreshReg$(_c128, \"Du\");\n$RefreshReg$(_c129, \"Au\");\n$RefreshReg$(_c130, \"Ep\");\n$RefreshReg$(_c131, \"Rv\");\n$RefreshReg$(_c132, \"Av\");\n$RefreshReg$(_c133, \"JM\");\n$RefreshReg$(_c134, \"X_\");\n$RefreshReg$(_c135, \"CO\");\n$RefreshReg$(_c136, \"Q_\");\n$RefreshReg$(_c137, \"K_\");\n$RefreshReg$(_c138, \"IO\");\n$RefreshReg$(_c139, \"DO\");\n$RefreshReg$(_c140, \"RO\");\n$RefreshReg$(_c141, \"AO\");\n$RefreshReg$(_c142, \"PO\");\n$RefreshReg$(_c143, \"Mp\");\n$RefreshReg$(_c144, \"VO\");\n$RefreshReg$(_c145, \"GO\");\n$RefreshReg$(_c146, \"Vv\");\n$RefreshReg$(_c147, \"Wv\");\n$RefreshReg$(_c148, \"Hv\");\n$RefreshReg$(_c149, \"Lu\");\n$RefreshReg$(_c150, \"Yt\");\n$RefreshReg$(_c151, \"Ou\");\n$RefreshReg$(_c152, \"Gp\");\n$RefreshReg$(_c153, \"Tr\");\n$RefreshReg$(_c154, \"Gn\");\n$RefreshReg$(_c155, \"TF\");\n$RefreshReg$(_c156, \"O8\");\n$RefreshReg$(_c157, \"Xp\");\n$RefreshReg$(_c158, \"RF\");\n$RefreshReg$(_c159, \"Yp\");\n$RefreshReg$(_c160, \"EF\");\n$RefreshReg$(_c161, \"NF\");\n$RefreshReg$(_c162, \"Z8\");\n$RefreshReg$(_c163, \"Jp\");\n$RefreshReg$(_c164, \"MF\");\n$RefreshReg$(_c165, \"OF\");\n$RefreshReg$(_c166, \"VF\");\n$RefreshReg$(_c167, \"C0\");\n$RefreshReg$(_c168, \"UF\");\n$RefreshReg$(_c169, \"Uu\");\n$RefreshReg$(_c170, \"CV\");\n$RefreshReg$(_c171, \"JF\");\n$RefreshReg$(_c172, \"KF\");\n$RefreshReg$(_c173, \"E0\");\n$RefreshReg$(_c174, \"L0\");\n$RefreshReg$(_c175, \"SD\");\n$RefreshReg$(_c176, \"FG\");\n$RefreshReg$(_c177, \"DG\");\n$RefreshReg$(_c178, \"RG\");\n$RefreshReg$(_c179, \"NG\");\n$RefreshReg$(_c180, \"LG\");\n$RefreshReg$(_c181, \"Zr\");\n$RefreshReg$(_c182, \"Y0\");\n$RefreshReg$(_c183, \"GD\");\n$RefreshReg$(_c184, \"Vz\");\n$RefreshReg$(_c185, \"Gz\");\n$RefreshReg$(_c186, \"Wz\");\n$RefreshReg$(_c187, \"Xz\");\n$RefreshReg$(_c188, \"Yz\");\n$RefreshReg$(_c189, \"Q0\");\n$RefreshReg$(_c190, \"Wo\");\n$RefreshReg$(_c191, \"Jl\");\n$RefreshReg$(_c192, \"Ih\");\n$RefreshReg$(_c193, \"PW\");\n$RefreshReg$(_c194, \"IR\");\n$RefreshReg$(_c195, \"RR\");\n$RefreshReg$(_c196, \"Ca\");\n$RefreshReg$(_c197, \"Gt\");\n$RefreshReg$(_c198, \"Sn\");\n$RefreshReg$(_c199, \"BR\");\n$RefreshReg$(_c200, \"Kl\");\n$RefreshReg$(_c201, \"CH\");\n$RefreshReg$(_c202, \"SH\");\n$RefreshReg$(_c203, \"IH\");\n$RefreshReg$(_c204, \"Td\");\n$RefreshReg$(_c205, \"PH\");\n$RefreshReg$(_c206, \"WR\");\n$RefreshReg$(_c207, \"XR\");\n$RefreshReg$(_c208, \"LH\");\n$RefreshReg$(_c209, \"XH\");\n$RefreshReg$(_c210, \"QH\");\n$RefreshReg$(_c211, \"KH\");\n$RefreshReg$(_c212, \"CA\");\n$RefreshReg$(_c213, \"SA\");\n$RefreshReg$(_c214, \"CU\");\n$RefreshReg$(_c215, \"SU\");\n$RefreshReg$(_c216, \"IU\");\n$RefreshReg$(_c217, \"Ho\");\n$RefreshReg$(_c218, \"FA\");\n$RefreshReg$(_c219, \"DA\");\n$RefreshReg$(_c220, \"Vh\");\n$RefreshReg$(_c221, \"Gh\");\n$RefreshReg$(_c222, \"AA\");\n$RefreshReg$(_c223, \"NU\");\n$RefreshReg$(_c224, \"EA\");\n$RefreshReg$(_c225, \"MU\");\n$RefreshReg$(_c226, \"Od\");\n$RefreshReg$(_c227, \"VA\");\n$RefreshReg$(_c228, \"Hh\");\n$RefreshReg$(_c229, \"Fy\");\n$RefreshReg$(_c230, \"TX\");\n$RefreshReg$(_c231, \"Ry\");\n$RefreshReg$(_c232, \"ZA\");\n$RefreshReg$(_c233, \"VX\");\n$RefreshReg$(_c234, \"YX\");\n$RefreshReg$(_c235, \"Oy\");\n$RefreshReg$(_c236, \"TP\");\n$RefreshReg$(_c237, \"FP\");\n$RefreshReg$(_c238, \"DY\");\n$RefreshReg$(_c239, \"EY\");\n$RefreshReg$(_c240, \"NY\");\n$RefreshReg$(_c241, \"Jy\");\n$RefreshReg$(_c242, \"UP\");\n$RefreshReg$(_c243, \"FZ\");\n$RefreshReg$(_c244, \"LZ\");\n$RefreshReg$(_c245, \"VZ\");\n$RefreshReg$(_c246, \"Sg\");\n$RefreshReg$(_c247, \"CC\");\n$RefreshReg$(_c248, \"FC\");\n$RefreshReg$(_c249, \"Tg\");\n$RefreshReg$(_c250, \"W6\");\n$RefreshReg$(_c251, \"DC\");\n$RefreshReg$(_c252, \"Z6\");\n$RefreshReg$(_c253, \"EC\");\n$RefreshReg$(_c254, \"NC\");\n$RefreshReg$(_c255, \"LC\");\n$RefreshReg$(_c256, \"C4\");\n$RefreshReg$(_c257, \"Pq\");\n$RefreshReg$(_c258, \"HC\");\n$RefreshReg$(_c259, \"Bq\");\n$RefreshReg$(_c260, \"N4\");\n$RefreshReg$(_c261, \"L4\");\n$RefreshReg$(_c262, \"YC\");\n$RefreshReg$(_c263, \"X4\");\n$RefreshReg$(_c264, \"Q4\");\n$RefreshReg$(_c265, \"Im\");\n$RefreshReg$(_c266, \"IK\");\n$RefreshReg$(_c267, \"Sc\");\n$RefreshReg$(_c268, \"WE\");\n$RefreshReg$(_c269, \"VK\");\n$RefreshReg$(_c270, \"HE\");\n$RefreshReg$(_c271, \"Yg\");\n$RefreshReg$(_c272, \"Sx\");\n$RefreshReg$(_c273, \"Ax\");\n$RefreshReg$(_c274, \"Px\");\n$RefreshReg$(_c275, \"Ex\");\n$RefreshReg$(_c276, \"Nx\");\n$RefreshReg$(_c277, \"Lx\");\n$RefreshReg$(_c278, \"Aee\");\n$RefreshReg$(_c279, \"Pm\");\n$RefreshReg$(_c280, \"Hx\");\n$RefreshReg$(_c281, \"Dc\");\n$RefreshReg$(_c282, \"Lte\");\n$RefreshReg$(_c283, \"Gte\");\n$RefreshReg$(_c284, \"Jte\");\n$RefreshReg$(_c285, \"V5\");\n$RefreshReg$(_c286, \"W5\");\n$RefreshReg$(_c287, \"Yoe\");\n$RefreshReg$(_c288, \"Zoe\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGF5bG9hZGNtcyt1aUAzLjgxLjBfQHR5cGVzK3JlYWN0QDE5LjIuMTRfbW9uYWNvLWVkaXRvckAwLjU1LjFfbmV4dEAxNi4xLjZfQGJhYmVsK2NvcmVfMWEwNzIzZmY3ZDMyZDQ0NDliYmExNWVmZDdlZGUyYTQvbm9kZV9tb2R1bGVzL0BwYXlsb2FkY21zL3VpL2Rpc3QvZXhwb3J0cy9jbGllbnQvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBaUI2Q0U7QUFtQkE7QUFLRTRWO0FBQUFBLENBQ0E7SUFBQUMsRUFDQSxRQUFBQyxFQUNBO0lBQUEsS0FBQXhWLEVBQ0EsUUFBQXlWLENBQUFBLENBQ0E7UUFBQSxVQUFBQyxFQUNBO1FBQUEsT0FBQUMsRUFDQTtRQUFBO1lBQUEsSUFBQUMsSUFDQSxtQkFBYUMsRUFDYjtZQUFBLFFBQUF0RixFQUNBLHlCQUFBdUYsR0FDQTtpQkFBQTtRQUFBO0lBQUE7SUFBQUMsRUFDQSxVQUFBN0YsQ0FBQUEsQ0FBWTtRQUFBLEVBQ1oseUJBQUE4RixJQUF1QixHQUN2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QUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLEdBQUFBLENBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLElBQUFBLFlBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLElBQUFBLENBQUFBLFlBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLEdBQUFBLENBQUFBLFlBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLFdBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLElBQUFBLENBQUFBLFlBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLElBQUFBLENBQUFBLFlBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLEdBQUFBLFlBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLENBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLElBQUFBLENBQUFBLFlBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLElBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLENBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLEdBQUFBLENBQUFBLFdBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLElBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLElBQUFBLENBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLEdBQUFBLENBQUFBLFNBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEVBQUFBLEVBQUFBLElBQUFBLENBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLElBQUFBLGFBQUFBLElBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLElBQUFBLENBQUFBLFdBQUFBLElBQUFBLEVBQUFBLEdBQ0E1SyxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxFQUFBQSxDQUFFLHNFQ1pSLFNBQWtCLFdBRVgsS0FBQTRjLEdBQUEsSUFBQXBTLElBQUEsVUFFUCxvQkFBYW9TLEdBQUFBLENBQUFBLElBRVQscURBQ0FoUyxJQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUNBaVMsQ0FBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsRUFBQUEsSUFBSyxRQUNMQyxLQUFBQSxJQUFBQSxDQUFBQSxDQUFBQSxHQUFBQSxHQUNBaEssR0FBQUEsR0FBQUEsQ0FBQUEsQ0FBQUEsSUFBTyxjQUNQMEosT0FBQSxPQUNBQyxFQUFBQSxHQUFBQSxHQUFBQSxDQUFNLHVDQUNOQyxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxDQUFNbFMsQ0FBQUEsRUFBQUEsQ0FBQSxzQkFFTixhQUNFSSxJQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxDQUFBQSxZQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxZQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxFQUFBQSxJQUFBQSxDQUFBQSxZQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxFQUFBQSxHQUFBQSxDQUFBQSxZQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxFQUFBQSxJQUFBQSxhQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxDQUFBQSxhQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxFQUFBQSxJQUFBQSxDQUFBQSxXQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxHQUFBQSxhQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxFQUFBQSxJQUFBQSxDQUFBQSxhQUFBQSxJQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxD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UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2FBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTs7SUFBQTtRQUFBO1FBQUE7S0FBQTt5QkFBQTtnQkFBQTthQUFBO2lDQUFBO2dDQUFBO2lDQUFBOzt3QkFBQTtRQUFBO1FBQUE7S0FBQTs2QkFBQTtZQUFBO3FDQUFBO29CQUFBO29CQUFBOzZDQUFBOzJDQUFBOzZDQUFBOztnQkFBQTs7UUFBQTs0QkFBQTtJQUFBO3dCQUFBO2dDQUFBO29CQUFBO3dCQUFBOzRDQUFBO29EQUFBOzRDQUFBOzRDQUFBO3dDQUFBOzs7d0JBQUE7b0JBQUE7b0JBQUE7d0NBQUE7NEJBQUE7Z0RBQUE7b0NBQUE7d0RBQUE7NENBQUE7a0VBQUE7OzRDQUFBO21EQUFBO2dEQUFBO29EQUFBO29EQUFBO2dEQUFBO21EQUFBOzZDQUFBO2dEQUFBO21EQUFBOzZDQUFBO3dDQUFBOztnQ0FBQTs7d0JBQUE7O2dCQUFBOzt1QkFBQTt3QkFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0NBQUE7d0JBQUE7b0JBQUE7O1lBQUE7Z0JBQUE7b0NBQUE7d0JBQUE7NEJBQUE7d0JBQUE7NEJBQUE7d0JBQUE7b0JBQUE7O1lBQUE7UUFBQTt1QkFBQTtRQUFBO0tBQUE7d0JBQUE7WUFBQTtRQUFBO3VCQUFBO1FBQUE7S0FBQTt3QkFBQTtZQUFBO2tDQUFBO29CQUFBO29CQUFBOzBDQUFBOzRDQUFBO2dCQUFBOztZQUFBO2dDQUFBOztRQUFBO3VCQUFBO1FBQUE7S0FBQTt3QkFBQTtZQUFBO2dDQUFBO29CQUFBO3dCQUFBO29CQUFBO2dCQUFBOztRQUFBO3VCQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtPQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtPQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtPQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7Q0FBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtpQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTs0QkFBQTs0QkFBQTt5QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7T0FBQTtBQUFBOztJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7aUJBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2lCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7SUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTswQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBOztJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtZQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7YUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7d0JBQUE7d0JBQUE7NEJBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtZQUFBO1FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTthQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtBQUFBO09BQUE7QUFBQTtJQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtDQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTthQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO2FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1NBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTthQUFBO2dCQUFBO2dCQUFBO2FBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7U0FBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7YUFBQTtnQkFBQTtnQkFBQTthQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7U0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7T0FBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7SUFBQTtBQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7SUFBQTtBQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO2FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7aUJBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO2FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2lCQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1lBQUE7UUFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7YUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFB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O1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBO29EQUFBO29EQUFBO29EQUFBO2dEQUFBOzZDQUFBO3dDQUFBO3dDQUFBO3FDQUFBO2dDQUFBOzZCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTs7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtnQkFBQTtnQkFBQTtZQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBOztJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtnQkFBQTtnQkFBQTtZQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7NkJBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBOzRCQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtPQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBOztJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2lCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1dBQUE7S0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO0lBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtDQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTs7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTs7SUFBQTswQkFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO29CQUFBOzBDQUFBOztvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTt5QkFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtBQUFBO0tBQUE7QUFBQTs7SUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTswQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7eUJBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7S0FBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7O0lBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7QUFBQTs7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO09BQUE7QUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtPQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO09BQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7U0FBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7NkJBQUE7d0JBQUE7d0JBQUE7cUJBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7YUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBOztJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO2lDQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBOztJQUFBO3VCQUFBO3VCQUFBO3VCQUFBO3VCQUFBO3VCQUFBO3VCQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7O0lBQUE7eUJBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTt3QkFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzZCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzZCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO29DQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBO29DQUFBO2dDQUFBOzZCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0FBQUE7T0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0tBQUE7T0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7YUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTs2QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTt3Q0FBQTt3Q0FBQTs0Q0FBQTs0Q0FBQTtnREFBQTtnREFBQTtnREFBQTtvREFBQTtnREFBQTtnREFBQTtvREFBQTtvREFBQTt3REFBQTt3REFBQTtvREFBQTtnREFBQTs0Q0FBQTt3Q0FBQTtvQ0FBQTtnQ0FBQTs2QkFBQTt3QkFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0FBQUE7O0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBOztJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtLQUFBO09BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7YUFBQTtZQUFBO1lBQUE7aUJBQUE7aUJBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7aUNBQUE7NEJBQUE7NEJBQUE7NEJBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7d0JBQUE7cUJBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTthQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7d0NBQUE7NENBQUE7NENBQUE7Z0RBQUE7Z0RBQUE7Z0RBQUE7Z0RBQUE7Z0RBQUE7NENBQUE7d0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7aUNBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7d0NBQUE7NENBQUE7Z0RBQUE7b0RBQUE7b0RBQUE7b0RBQUE7b0RBQUE7Z0RBQUE7NENBQUE7NENBQUE7Z0RBQUE7b0RBQUE7b0RBQUE7b0RBQUE7b0RBQUE7Z0RBQUE7NENBQUE7eUNBQUE7b0NBQUE7b0NBQUE7d0NBQUE7NENBQUE7NENBQUE7NENBQUE7NENBQUE7NENBQUE7NENBQUE7b0RBQUE7d0RBQUE7b0RBQUE7b0RBQUE7Z0RBQUE7NENBQUE7NENBQUE7NENBQUE7d0NBQUE7b0NBQUE7aUNBQUE7NEJBQUE7eUJBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBOzRCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTtnQ0FBQTs0QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7O0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBOzJCQUFBO3dCQUFBO3FCQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7T0FBQTtBQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7aUJBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7NkJBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO2tGQUFBLENBQXNJO0FBQzVKO0FDRUEsU0FBUzk5QixHQUFtQjNzQyxDQUFBQSxFQUFHLENBQzdCO0lBQUEsS0FBT3VxRSxFQUFBQSxDQUFrQnZxRSxDQUFDLEdBQUt3cUUsSUFBQUEsQ0FBZ0J4cUUsQ0FBQyxJQUFLMG5FLEdBQTJCMW5FLEdBQUMsR0FBS3lxRSxHQUFBQSxDQUFrQixDQUMxRyxDQ0NBO0FBQUE7QUFBQSxJQUFZcGxFLEtBQUFBLEVBQVc7SUFBQSxFQUN2QixVQUFTO0lBQUF3RSxHQUFTLGlCQUFBYTtJQUFVLFdBQUEzRSxHQUFRLGVBQUE0RSxHQUFhO1FBQUEsYUFBQS9FLEVBQUFBLENBQVcsYUFBQThrRSxPQUFpQjtRQUFBLElDUjdFLGVBQVlybEUsSUFBQUEsRUFBQUEsRUFBVyxVQUN2QixRQUFTLG9CQUFBMkMsRUFBQUEsQ0FBWSxjQUFBNkMsS0FBQUEsQ0FBQUEsQ0FBa0IsU0NEdkMsTUFBSTgvRCxDQUFBQSxFQUFnQixLQXlCcEI7SUFBQTtJQUFBLEtBQVNDLEVBQUFBO0FBQVlDO0FBUVU7QUFBQTtJQUFBLEdBQVksT0FBUXhzRSxJQUMvQyxHQUFJO0lBQUEsTUFBUyxZQUFZQSxDQUFDO0lBQUEsQ0FBRSxZQUFjd3NFO0lBQ3hDLE9BQU87SUFBQSxHQUFTO0lBQUEsRUFBWXhzRSxDQUFDLENBT25DLENBRUE7SUFBQSxHQUFTeXNFLEdBQW1CdHRFLEVBQVMsQ0FDbkMsSUFBSXF0RSxFQUFNO0lBQUEsUUFBUztJQUFBLFFBQWM7SUFBQSxFQUFPLEVBQ3hDO0NBQUE7QUFBQSxFQUFBQSxFQUFJO0lBQUEsRUFBYSxpQkFBZ0JydEUsRUFBUSxHQUFHLEVBRXhDQSxDQUFBQSxFQUFRLFlBQVUsWUFDcEJxdEUsR0FBSSxlQUFhLFFBQVNydEUsRUFBQUEsQ0FBUSxTQUFLLEVBR3pDcXRFLEVBQUksbUJBQVksU0FBUyxvQkFBZSxJQUFFLENBQUMsRUFDM0NBLElBQUksZ0JBQWEsWUFBVSxFQUFFLEVBQ3RCQSxDQUNULENBRUEsS0FBSUUsSUFBQUEsRUFBMEIsV0FBWSxHQUV4QyxTQUFTQSxFQUFXdnRFLEVBQVMsQ0FDM0IsT0FBSSsrQixFQUFRLEtBRVosS0FBSyxjQUFhLFlBQVVzdUMsQ0FBQUEsQ0FBSyxDQUMvQixLQUFJRyxJQUVBenVDLEVBQU0sTUFBSyx5REFBVyxJQUNwQkEsRUFBTSxzQkFDUnl1QyxHQUFTenVDLEVBQU0sc0JBQWUsNkRBQ3JCQSxFQUFNLGFBQ2Z5dUMsR0FBQUEsQ0FBU3p1QyxFQUFNLGNBQVUsaUJBRXpCdXVJLCtDQUFTdnVJLENBQUFBLENBQU0sU0FHakJ5dUMsQ0FBQUEsQ0FBU3p1QyxHQUFBQSxDQUFNLFFBQUtBLEdBQUFBLENBQU0sTUFBSyxVQUFTLENBQUMsR0FBRSxpRUFHN0NBLEVBQU0sV0FBVTtRQUFBLGNBQWFzdUMsRUFBS0csQ0FBTSxFQUV4Q3p1QyxFQUFNLE9BQUssT0FBS3N1QyxDQUFHLENBQ3JCO0lBRUE7UUFBQTtLQUFLLDREQUFXcnRFLEVBQVEsVUFBVztRQUFBO1FBQVksQ0FBQ210RSxHQUFnQm50RSxFQUFRLFNBQ3hFLEtBQUssT0FBTyxDQUFDLElBQ2IsT0FBSyxJQUFNLEVBQ1gsT0FBSyxVQUFRQTtJQUFRO1FBQUE7S0FBQSxDQUVyQix3REFBSyxJQUFNQSxFQUFRLElBQ25CO1FBQUEsR0FBSyxZQUFZQSxFQUFRLFlBQ3pCLE1BQUs7SUFBQTtRQUFBO0tBQUEsR0FBVUEsSUFBUSx3REFDdkIsS0FBSztRQUFBLGdCQUFpQkEsRUFBUTtJQUM5QjtRQUFBO0tBQUssVUFBUyxNQUNoQixDQUVBLE1BQUlxL0IsR0FBQUEsQ0FBU2t1QyxFQUFBQSxDQUFXLGNBRXhCLFlBQUFsdUMsR0FBQUEsQ0FBTyxVQUFVO0lBQUEsR0FBaUJvdUMsRUFBTyxDQUN2Q0EsQ0FBQUEsQ0FBTSxTQUFRLE1BQUs7UUFBQSxRQUFVLENBQy9CLEdBRUFwdUM7UUFBTyxPQUFTO1FBQUEsR0FBZ0JxdUMsRUFBTSxDQUloQztRQUFLLEtBQU8sS0FBSztRQUFBLEdBQVcsS0FBUSxNQUFPO1FBQUEsRUFDN0MsS0FBSztRQUFBLEtBQVdKLEVBQUFBO0lBQUFBLENBQW1CO0FBQUE7QUFHakI7QUFRaEJLO0FBQUFBLENBQU0sV0FBV0QsQ0FBQUEsRUFBTUMsQ0FBQUEsQ0FBTTtJQUFBLFNBQVMsTUFBTSxDQUM5QyxPQUFZLENBQ1osQ0FDRixNQUNFTixFQUFJLFlBQVksU0FBUyxlQUFlSyxDQUFJLENBQUMsRUFHL0MsS0FBSztBQUFBO0FBQUEsR0FDUCxFQUVBcnVDLEVBQU8sTUFBUTtJQUFBLE1BQWlCLENBQzlCLFFBQUssT0FBSyxTQUFRO1FBQUEsUUFBVWd1QyxDQUFBQSxDQUFLLENBQy9CO1FBQUEsRUFBSU8sRUFFSixPQUFRQSxDQUFBQSxHQUFrQlAsRUFBSSxlQUFlLE1BQU8sT0FBU08sRUFBZ0IsZUFBWVAsQ0FBRyxDQUM5RixDQUFDLEdBQ0QsT0FBSyxLQUFPLENBQUMsRUFDYixRQUFLLElBQU0sQ0FDYixFQUVPRSxDQUNULEdBQUUsRUN6SUssSUFBSU0sR0FBSyxRQUNMQyxFQUFBQSxDQUFNO0lBQUE7QUFBQTtBQUNOQyxHQUFTLFlBRVRDLENBQUFBLEVBQUFBLENBQVU7SUFBQSxLQUNWQyxFQUFBQSxDQUFVLFNBQ1ZDLEdBQWMsUUFJbEIsS0FBSUMsSUFBQUEsQ0FBUyxZQU1iLElBQUlDLEdBQVksYUFJaEIsS0FBSUMsR0FBUTtRQUFBLEVDaEJaLElBQUlDLElBQU07SUFBQSxJQUFLO0FBQUE7QUFBQSxFQU1YbHJELEdBQU8sT0FBTztJQUFBLFNBTWRtckQsRUFBQUEsQ0FBUyxTQUFPLFNBT3BCLFlBQVN4eUQsR0FBTWxYLEVBQU81SCxDQUFBQSxDQUFRLENBQ3BDLE9BQU91eEUsR0FBTzNwRSxFQUFPLENBQUMsRUFBSSxNQUFZNUgsR0FBVSxFQUFLdXhFLEdBQU8zcEUsRUFBTyxDQUFDLElBQU0sRUFBSzJwRSxHQUFPM3BFLEVBQU8sQ0FBQyxJQUFNLEVBQUsycEUsR0FBTzNwRSxFQUFPLENBQUMsSUFBTSxFQUFLMnBFLEdBQU8zcEU7SUFBQUEsQ0FBTyxDQUFDLEVBQUksQ0FDdkosQ0FNTyxXQUFTNHBFLEdBQU01cEUsQ0FBQUEsQ0FBTyxDQUM1QixPQUFPQSxHQUFBQSxDQUFNLEtBQUssQ0FDbkIsQ0FPTztRQUFBLElBQVM2cEUsR0FBTzdwRSxFQUFPNGhELEVBQVMsRUFDdEM7WUFBQSxPQUFRNWhEO1lBQVE0aEQsRUFBUSxLQUFLNWhELENBQUssSUFBS0E7WUFBQUEsQ0FBTSxDQUFDLEVBQUlBLENBQ25ELENBUU87UUFBU3NYO0lBQUFBLEVBQVN0WCxFQUFBQSxDQUFPNGhELEVBQVNrb0IsRUFBYSxDQUNyRCxPQUFPOXBFLEVBQU0sUUFBUTRoRCxFQUFBQSxDQUFTa29CLENBQVcsQ0FDMUMsQ0FPTztRQUFTQyxHQUFTL3BFLEVBQU93WCxFQUFRLENBQ3ZDO0lBQUEsS0FBT3hYLElBQU07QUFBQTtBQUFRd1gsQ0FBTSxDQUM1QixDQU9PLFNBQVNteUQsQ0FBQUE7SUFBUTNwRSxFQUFPckksRUFBTyxDQUNyQyxTQUFPcUksRUFBTSxXQUFXckksQ0FBSyxFQUFJLENBQ2xDLENBUU8sV0FBU3F5RSxHQUFRaHFFLEVBQU9pcUUsRUFBT0MsRUFBSyxDQUMxQyxPQUFPbHFFLEVBQU0sUUFBTWlxRSxFQUFPQyxDQUFHLENBQzlCLENBTU87UUFBQSxLQUFTQyxFQUFBQSxDQUFRbnFFLENBQUFBLENBQU8sQ0FDOUIsT0FBT0EsSUFBTSxNQUNkLENBTU8sU0FBU29xRSxHQUFRcHFFLEVBQU8sQ0FDOUI7SUFBQSxNQUFPQTtBQUFNO0FBQUEsS0FDZCxDQU9PO0lBQUEsQ0FBUzBXLEdBQUFBO1FBQVExVyxFQUFPMnRCLEVBQU8sQ0FDckMsU0FBT0EsRUFBTSxLQUFLM3RCLENBQUssRUFBR0EsQ0FDM0IsQ0FPTyxTQUFTcXFFLEdBQVMxOEMsQ0FBQUEsQ0FBT2x6QixFQUFVLENBQ3pDLE9BQU9rekIsRUFBTSxJQUFJbHpCLENBQVEsRUFBRSxLQUFLLEdBQUUsQ0FDbkMsQ0NoSE8sS0FBSTZ2RSxHQUFPLEVBQ1BDLElBQVMsRUFDVG55RTtJQUFBQSxFQUFBQSxDQUFTLEVBQ1Q2VCxJQUFBQSxDQUFXO0lBQUEsQ0FDWHUrRCxHQUFZLEdBQ1pDLENBQUFBLEVBQWEsS0FXakI7UUFBUy95RSxHQUFNc0ksRUFBT2dnQixFQUFBQSxDQUFNbG9CLENBQUFBO0tBQVE4USxFQUFNaEI7QUFBT3REO0FBQUFBLENBQVVsTSxFQUFRLENBQ3pFLE1BQU8sQ0FBQztJQUFPNEgsRUFBTyxRQUFNZ2dCLEVBQU0sU0FBUWxvQixFQUFRLEtBQU04USxHQUFBQSxDQUFNLE1BQU9oQixFQUFPLFdBQVV0RCxFQUFBQSxDQUFVLEtBQU1nbUUsR0FBTTtJQUFBLEtBQVFDLEtBQVEsUUFBUW55RSxFQUFRLE9BQVEsRUFBRSxDQUN2SixDQU9PLFNBQVNzeUUsR0FBTTFxRCxFQUFNcFksRUFBTyxDQUNsQyxPQUFPOGhFLEdBQU9oeUUsR0FBSyxHQUFJLEtBQU0sS0FBTSxHQUFJLEtBQU0sS0FBTSxDQUFDLEVBQUdzb0IsRUFBTSxDQUFDO0lBQUEsRUFBUSxDQUFDQSxFQUFLLE1BQU07QUFBQTtBQUFHcFksQ0FBSyxDQUMzRixDQUtPLFNBQVMraUUsQ0FBQUE7SUFBQUEsQ0FBUSxDQUN2QixTQUFPSDtJQUNSLENBS08sU0FBUy9rRSxJQUFRLENBQ3ZCO1FBQUEsSUFBQStrRSxHQUFBQSxDQUFZditELEdBQUFBLEVBQVcsRUFBSTA5RDtRQUFBQSxDQUFPYyxHQUFBQSxDQUFZO1lBQUV4K0QsRUFBUSxFQUFJLElBRXhEcytELEdBQUFBLEVBQVVDLEVBQUFBLEVBQUFBLENBQWMsS0FDM0JELEdBQVMsRUFBR0Q7WUFBQUEsSUFBQUEsR0FFTkUsRUFDUixDQUtPLFNBQVM1dEUsRUFBQUEsQ0FBQUEsQ0FBUSxFQUN2QixPQUFBNHRFLElBQVl2K0Q7UUFBQUEsQ0FBVzdULEdBQVN1eEUsR0FBQUEsQ0FBT2MsR0FBQUEsRUFBWXgrRCxJQUFVLEVBQUksRUFFN0RzK0QsRUFBQUEsRUFBQUEsRUFBVUMsS0FBYztRQUFBLENBQzNCRCxHQUFTLEVBQUdELENBQUFBLEdBQUFBLEVBRU5FLEVBQ1IsRUFLTztJQUFBO0FBQUE7QUFBQSxLQUFTeHlFLElBQVEsQ0FDdkI7SUFBQSxFQUFPMnhFLEVBQUFBLEVBQU9jLEdBQVl4K0QsQ0FBQUEsQ0FBUSxDQUNuQyxDQUtPLFVBQVMwUCxJQUFTLENBQ3hCO0FBQUE7QUFBTzFQLEVBQ1IsQ0FPTyxTQUFTbWUsQ0FBQUE7SUFBTzYvQyxFQUFPQyxFQUFBQSxDQUFLLENBQ2xDLE9BQU9GLEdBQU9TLElBQUFBLENBQVlSLEVBQU9DLENBQUcsR0FDckMsQ0FNTyxTQUFTMzFCLEdBQU8zckMsRUFBTSxDQUM1QixTQUFRQSxFQUFNLEdBRWIsSUFBSyxHQUFHLElBQUssR0FBRyxNQUFLLEtBQUksSUFBSyxJQUFJLElBQUssSUFDdEM7QUFBQTtBQUFBLENBQU8sR0FFUixJQUFLLElBQUk7SUFBQSxFQUFLLElBQUksSUFBSyxJQUFJLElBQUssSUFBSSxJQUFLLElBQUksSUFBSyxJQUFJLElBQUssS0FFM0QsSUFBSyxJQUFJLElBQUssS0FBSyxJQUFLO2tGYXl6QnlFO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7S0FBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO29CQUFBO2dCQUFBO29CQUFBO3lCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBOzRCQUFBO2dDQUFBOzZCQUFBO29CQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7cUJBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO29CQUFBO1lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7SUFBQTtXQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtZQUFBO1lBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2lDQUFBOzRCQUFBO3lCQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2lDQUFBOzRCQUFBO3lCQUFBO2dCQUFBO2dCQUFBO1lBQUE7SUFBQTtBQUFBO0lBQUE7Q0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1NBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7ZUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0lBQUE7QUFBQTtJQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtTQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7aUJBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7d0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtTQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7O0lBQUE7SUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0NBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtLQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0NBQUE7SUFBQTtJQUFBO0NBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7Q0FBQTtJQUFBO0lBQUE7SUFBQTtDQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTs7OztFNkdsMUI1RW9pSCxFQUFBQSxFQUFBcnVDLEVBRVQs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QUFBO2dCQUFBQSxjQUFBQSxDQUFBQTtnQkFBQUEscUJBQUFBLENBQUFBO1lBQUFBO1FBQUFBLEdBQUFBLElBQUFBLENBQUFBLGdCQUFBQSxHQUFBQSxDQUFBQTtZQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxDQUFBQSxFQUFBQSxVQUFBQSxDQUFBQSxFQUFBQSxVQUFBQSxDQUFBQSxFQUFBQSxhQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxJQUFBQSxJQUFBQSxDQUFBQSxNQUFBQTtZQUFBQSxJQUFBQSxLQUFBQSxDQUFBQSxLQUFBQSxDQUFBQSxJQUFBQSxDQUFBQSxlQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxVQUFBQSxJQUFBQSxFQUFBQSxjQUFBQSxJQUFBQSxJQUFBQSxDQUFBQSxXQUFBQSxJQUFBQSxDQUFBQSxJQUFBQSxDQUFBQSxXQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxFQUFBQSxFQUFBQTtZQUFBQSxJQUFBQSxFQUFBQSxRQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxJQUFBQTtZQUFBQSxFQUFBQSxPQUFBQSxHQUFBQSxFQUFBQSxPQUFBQSxFQUFBQSxFQUFBQSxPQUFBQSxHQUFBQSxFQUFBQSxPQUFBQTtZQUFBQSxJQUFBQTtZQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxJQUFBQSxJQUFBQSxDQUFBQSxVQUFBQSxLQUFBQSxJQUFBQSxJQUFBQSxDQUFBQSxRQUFBQSxJQUFBQSxHQUFBQSxHQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxFQUFBQSxFQUFBQSxNQUFBQTtRQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxrQkFBQUEsR0FBQUEsQ0FBQUE7WUFBQUEsSUFBQUEsRUFBQUEsTUFBQUEsQ0FBQUEsRUFBQUEsVUFBQUEsQ0FBQUEsRUFBQUEsSUFDQTVLLE1BQUFBLENBQUFBLEVBQUFBLE9BQUUsWUFDRndwQixHQUFBQSxDQUFBQSxL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O3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBOzRDQUFBOzRDQUFBO2dEQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBOzREQUFBOzREQUFBOzREQUFBOzREQUFBOzREQUFBO3dEQUFBO29EQUFBO2dEQUFBOzZDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBO2dEQUFBO2dEQUFBO3dEQUFBO3dEQUFBO29EQUFBO2dEQUFBO2dEQUFBOzRDQUFBOzRDQUFBO2dEQUFBO2dEQUFBO3dEQUFBO3dEQUFBO29EQUFBO2dEQUFBO2dEQUFBOzRDQUFBO3lDQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBOzRDQUFBOzRDQUFBO2dEQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBO29EQUFBO2dEQUFBOzZDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBO2dEQUFBO2dEQUFBO3dEQUFBO3dEQUFBO29EQUFBO2dEQUFBOzRDQUFBOzRDQUFBO2dEQUFBO2dEQUFBO3dEQUFBO3dEQUFBO29EQUFBO2dEQUFBOzRDQUFBO3lDQUFBO29DQUFBO2lDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7O0lBQUE7UUFBQTtRQUFBO0lBQUE7NkJBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTs0QkFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTt3QkFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTt1QkFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7d0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7dUJBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtpQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7O0tBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtZQUFBO2dCQUFBO2dCQUFBO2FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTthQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7eUJBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7eUJBQUE7b0JBQUE7aUJBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTthQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtTQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7d0JBQUE7cUJBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtvQkFBQTtpQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBOztJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtZQUFBO1NBQUE7WUFBQTtZQUFBO1FBQUE7NkJBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTs0QkFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO2lCQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO2lCQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBOzRDQUFBOzRDQUFBO2dEQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO2dEQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3dDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO3dEQUFBO29EQUFBO29EQUFBO29EQUFBO2dEQUFBOzZDQUFBO3dDQUFBO3dDQUFBO3FDQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3FDQUFBO2dDQUFBOzZCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBO2dEQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTs7SUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7NkJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7cUJBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7YUFBQTtRQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtBQUFBO1FBQUE7QUFBQTs7SUFBQTtRQUFBO1FBQUE7S0FBQTs2QkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBOzRCQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtBQUFBO0FBQUE7O0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtpQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3dDQUFBOzRDQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBO2lEQUFBOzRDQUFBO3dDQUFBO3FDQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO3dEQUFBO3dEQUFBOzREQUFBOzREQUFBOzREQUFBO3lEQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO2dEQUFBOzZDQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO2dEQUFBO2dEQUFBOzRDQUFBO3dDQUFBO3FDQUFBO2dDQUFBOzZCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzZCQUFBO3dCQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7QUFBQTs7SUFBQTtJQUFBO3dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0NBQUE7b0JBQUE7Z0JBQUE7O1FBQUE7dUJBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO29DQUFBO29DQUFBO2dDQUFBOzZCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTs7SUFBQTtRQUFBO0lBQUE7NkJBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTs0QkFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0tBQUE7UUFBQTtBQUFBOztJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7O0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7ZUFBQTtTQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtlQUFBO1NBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTt5QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtnQ0FBQTs2QkFBQTt3QkFBQTtvQkFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7O0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtTQUFBO1FBQUE7YUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1NBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1NBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBOzZCQUFBO1lBQUE7UUFBQTs0QkFBQTtRQUFBO0tBQUE7OEJBQUE7WUFBQTtZQUFBO1lBQUE7c0NBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7O1lBQUE7d0NBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7d0NBQUE7b0NBQUE7Z0NBQUE7NkJBQUE7d0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7d0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7bURBQUE7a0RBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7d0NBQUE7WUFBQTtzQ0FBQTtvQkFBQTtnQkFBQTtzQ0FBQTtzQ0FBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTs7UUFBQTs2QkFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtZQUFBO29CQUFBO29CQUFBO2dCQUFBO21CQUFBO21CQUFBO2FBQUE7WUFBQTt1QkFBQTt1QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtpQkFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBOzhCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7NkJBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7OEJBQUE7WUFBQTtZQUFBO1lBQUE7eUNBQUE7d0JBQUE7d0JBQUE7b0JBQUE7eUNBQUE7WUFBQTtzQ0FBQTsyQkFBQTsyQkFBQTtxQkFBQTs7WUFBQTt5Q0FBQTt3QkFBQTt3QkFBQTtvQkFBQTt5Q0FBQTtZQUFBO21CQUFBO21CQUFBO2FBQUE7UUFBQTs2QkFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7OEJBQUE7WUFBQTtZQUFBO2dCQUFBOzBDQUFBOytCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBOztnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTs2QkFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7U0FBQTtRQUFBO21CQUFBO2dCQUFBO2FBQUE7Z0JBQUE7YUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7bUJBQUE7Z0JBQUE7YUFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBOzhCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7YUFBQTtZQUFBO2dCQUFBO2dCQUFBOzBDQUFBO3dCQUFBO2tEQUFBOzt3QkFBQTs0QkFBQTttQ0FBQTs2QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTswQ0FBQTswQ0FBQTs7WUFBQTtRQUFBOzZCQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7OEJBQUE7WUFBQTt3Q0FBQTt3QkFBQTt3QkFBQTtvQkFBQTs7WUFBQTtRQUFBOzZCQUFBO1FBQUE7UUFBQTtLQUFBOzhCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7d0NBQUE7d0JBQUE7d0JBQUE7b0JBQUE7O1lBQUE7UUFBQTs2QkFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2lCQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO2lCQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO29DQUFBO2dDQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzZCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBO29EQUFBO3dEQUFBO29EQUFBO29EQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO2dEQUFBOzZDQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3dDQUFBOzRDQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3FDQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3FDQUFBO2dDQUFBOzZCQUFBO3dCQUFBO29CQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7S0FBQTtBQUFBOztJQUFBOzZCQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBOzRCQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtJQUFBO3lCQUFBO2lDQUFBO3dCQUFBO3dCQUFBO29CQUFBO2tDQUFBO3dCQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtLQUFBO1FBQUE7QUFBQTs7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTt3Q0FBQTt3Q0FBQTs0Q0FBQTs0Q0FBQTtnREFBQTtnREFBQTtnREFBQTtnREFBQTtnREFBQTs0Q0FBQTt3Q0FBQTtvQ0FBQTtvQ0FBQTt3Q0FBQTt3Q0FBQTt3Q0FBQTtvQ0FBQTtpQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTt3Q0FBQTs0Q0FBQTtnREFBQTtvREFBQTtvREFBQTtvREFBQTtvREFBQTtnREFBQTs0Q0FBQTs0Q0FBQTtnREFBQTtvREFBQTtvREFBQTtvREFBQTtvREFBQTtnREFBQTs0Q0FBQTt5Q0FBQTtvQ0FBQTtvQ0FBQTt3Q0FBQTs0Q0FBQTs0Q0FBQTs0Q0FBQTs0Q0FBQTs0Q0FBQTs0Q0FBQTs0Q0FBQTs0Q0FBQTs0Q0FBQTt3Q0FBQTtvQ0FBQTtpQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7Z0NBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7NEJBQUE7eUJBQUE7b0JBQUE7aUJBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7NEJBQUE7eUJBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7ZUFBQTtTQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtnQkFBQTtnQkFBQTthQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtlQUFBO1NBQUE7UUFBQTtZQUFBO21CQUFBO2FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7aUJBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO29DQUFBOzRDQUFBOzRDQUFBO3dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO3dDQUFBO3dDQUFBO2dEQUFBO2dEQUFBO2dEQUFBO2dEQUFBO2dEQUFBO2dEQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBO2dEQUFBOzRDQUFBO29DQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzZCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtBQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO2lCQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7Q0FBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7Q0FBQTtJQUFBO0lBQUE7QUFBQTtPQUFBO09BQUE7SUFBQTtDQUFBO09BQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtDQUFBO09BQUE7SUFBQTtRQUFBO1FBQUE7SUFBQTtDQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7WUFBQTtTQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7ZUFBQTtZQUFBO1lBQUE7WUFBQTtTQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7ZUFBQTtZQUFBO1NBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtlQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1NBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtlQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO2VBQUE7U0FBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1dBQUE7UUFBQTtLQUFBO1dBQUE7S0FBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO29CQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtlQUFBO2VBQUE7U0FBQTtlQUFBO2VBQUE7dUJBQUE7dUJBQUE7d0JBQUE7cUJBQUE7aUJBQUE7U0FBQTtlQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7U0FBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7WUFBQTtZQUFBO1FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBOztJQUFBO1FBQUE7SUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBOzZCQUFBO1lBQUE7dUNBQUE7d0JBQUE7d0JBQUE7b0JBQUE7O1lBQUE7UUFBQTs0QkFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7SUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO2VBQUE7ZUFBQTtTQUFBO2VBQUE7WUFBQTtTQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO3VCQUFBO3VCQUFBOytCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO2lCQUFBO2dCQUFBO3VCQUFBO2lCQUFBOzJCQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO3VCQUFBO3VCQUFBO2lCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtZQUFBO0lBQUE7QUFBQTtBQUFBOztJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7S0FBQTt3QkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTthQUFBOzBCQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBOzZCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7NEJBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2FBQUE7WUFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7cUJBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtTQUFBO1FBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7YUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO2lCQUFBO2dCQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtRQUFBO0FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0lBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1NBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7S0FBQTtBQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO0FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO29DQUFBO29DQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTs7SUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7NkJBQUE7WUFBQTttQkFBQTthQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTs0QkFBQTtRQUFBO1FBQUE7S0FBQTs2QkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7dUJBQUE7aUJBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBOzRCQUFBO1FBQUE7UUFBQTtLQUFBOzZCQUFBO1lBQUE7bUJBQUE7YUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTs0QkFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBO2dEQUFBO29EQUFBO3dEQUFBO3dEQUFBO29EQUFBO29EQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO3dEQUFBO29EQUFBO2lEQUFBOzRDQUFBO3dDQUFBO29DQUFBO2lDQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0NBQUE7SUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1lBQUE7b0JBQUE7Z0JBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1lBQUE7UUFBQTtZQUFBO29CQUFBO29CQUFBO2dCQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7QUFBQTs7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTt3Q0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTtpQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTt3Q0FBQTtvQ0FBQTtpQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTthQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7b0NBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7Z0NBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7aUNBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0FBQUE7O0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7YUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2dCQUFBO2FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7NENBQUE7NENBQUE7NENBQUE7b0RBQUE7b0RBQUE7Z0RBQUE7d0NBQUE7d0NBQUE7NENBQUE7d0NBQUE7cUNBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7Z0NBQUE7NkJBQUE7d0JBQUE7cUJBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtvQkFBQTtvQkFBQTtnQkFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTt3Q0FBQTt3Q0FBQTtvQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7YUFBQTthQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7YUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO2FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7YUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTthQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7aUJBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO2VBQUE7Z0JBQUE7YUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTs7SUFBQTs2QkFBQTtZQUFBO1lBQUE7Z0JBQUE7MkNBQUE7O2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOytCQUFBO2dDQUFBOzZCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBOytCQUFBO2dDQUFBO29DQUFBO3dDQUFBO29DQUFBO2dDQUFBOzZCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBOzRCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO29CQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dC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SUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7NEJBQUE7Z0NBQUE7d0NBQUE7b0NBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7d0JBQUE7cUJBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtLQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7ZUFBQTtTQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTttQkFBQTtnQkFBQTthQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTs0QkFBQTs0QkFBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTtnQ0FBQTs0QkFBQTt3QkFBQTtpQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7YUFBQTtRQUFBO0lBQUE7UUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBO2dDQUFBOzRCQUFBO29CQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBOzRCQUFBO29DQUFBO29DQUFBO2dDQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO2dDQUFBOzRCQUFBO29CQUFBO2lCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtRQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO1lBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0lBQUE7QUFBQTs7SUFBQTtRQUFBO0lBQUE7d0JBQUE7d0JBQUE7eUJBQUE7WUFBQTtnQkFBQTt1Q0FBQTs0QkFBQTs0QkFBQTt3QkFBQTs7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7d0JBQUE7UUFBQTtRQUFBO0tBQUE7NkJBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTs0QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7cUNBQUE7O1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBOzRCQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7NkJBQUE7WUFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTs0QkFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7d0JBQUE7WUFBQTtRQUFBO3VCQUFBO1FBQUE7S0FBQTtJQUFBOzZCQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtRQUFBOzRCQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO3dCQUFBO1lBQUE7Z0NBQUE7O1FBQUE7dUJBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7YUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO29DQUFBO29DQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO29DQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO29DQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTtvQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtpQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTs7SUFBQTt5QkFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7d0JBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1NBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTs0Q0FBQTs0Q0FBQTt5Q0FBQTtvQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTtvQ0FBQTtvQ0FBQTt3Q0FBQTtvQ0FBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtLQUFBO1FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTtnQ0FBQTs0QkFBQTs0QkFBQTtnQ0FBQTtvQ0FBQTtnQ0FBQTs0QkFBQTt5QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBOzRCQUFBO2dDQUFBO3dDQUFBO29DQUFBOzRCQUFBOzRCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3FCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7U0FBQTtJQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtTQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtxQkFBQTtnQkFBQTthQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztJQUFBO3lCQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTt3QkFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTt3QkFBQTtvQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtxQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtJQUFBO3lCQUFBO3dCQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTt5QkFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO3dCQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7S0FBQTtBQUFBOztJQUFBO1FBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBO2dEQUFBOzRDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO2lEQUFBO2dEQUFBO29EQUFBO29EQUFBO2dEQUFBOzRDQUFBOzRDQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO29EQUFBO29EQUFBO2dEQUFBOzRDQUFBO3lDQUFBO29DQUFBO29DQUFBO3dDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO2lEQUFBO2dEQUFBO2dEQUFBO29EQUFBO3dEQUFBO3dEQUFBOzREQUFBOzREQUFBO3lEQUFBO29EQUFBO29EQUFBO3dEQUFBO3dEQUFBO29EQUFBO2lEQUFBOzRDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO2lEQUFBO2dEQUFBO2dEQUFBO29EQUFBO3dEQUFBO3dEQUFBOzREQUFBOzREQUFBO3lEQUFBO29EQUFBO29EQUFBO3dEQUFBO3dEQUFBO29EQUFBO2lEQUFBOzRDQUFBO3lDQUFBO29DQUFBO2lDQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBOzRDQUFBO2dEQUFBO29EQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO29EQUFBO2dEQUFBOzZDQUFBO3dDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBO2lDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3FDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBO2dEQUFBO29EQUFBO3dEQUFBO3dEQUFBO3dEQUFBO29EQUFBO3dEQUFBOzREQUFBOzREQUFBO3dEQUFBO3dEQUFBO3dEQUFBO29EQUFBO2dEQUFBO2dEQUFBO29EQUFBO3dEQUFBOzREQUFBOzREQUFBOzREQUFBOzREQUFBOzREQUFBO3dEQUFBO3dEQUFBOzREQUFBOzREQUFBOzREQUFBOzREQUFBOzREQUFBOzREQUFBO3dEQUFBO3FEQUFBO2dEQUFBOzZDQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3dDQUFBOzRDQUFBOzRDQUFBO3dDQUFBO3dDQUFBO3FDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0tBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7YUFBQTthQUFBO2FBQUE7YUFBQTthQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTthQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtpQkFBQTtpQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO1lBQUE7Z0JBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO1lBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtTQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7NEJBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7aUNBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7d0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7b0JBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtJQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7SUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7SUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0lBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtnQkFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBOztJQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtRQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtnQkFBQTtZQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7Z0NBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7eUJBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7d0JBQUE7NEJBQUE7eUJBQUE7d0JBQUE7d0JBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7Z0NBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7d0NBQUE7b0NBQUE7Z0NBQUE7NEJBQUE7NEJBQUE7Z0NBQUE7Z0NBQUE7b0NBQUE7b0NBQUE7d0NBQUE7d0NBQUE7NENBQUE7NENBQUE7Z0RBQUE7b0RBQUE7d0RBQUE7NERBQUE7NERBQUE7d0RBQUE7d0RBQUE7b0RBQUE7b0RBQUE7d0RBQUE7NERBQUE7NERBQUE7d0RBQUE7d0RBQUE7b0RBQUE7aURBQUE7NENBQUE7Z0RBQUE7b0RBQUE7b0RBQUE7Z0RBQUE7Z0RBQUE7NENBQUE7d0NBQUE7b0NBQUE7Z0NBQUE7NEJBQUE7eUJBQUE7b0JBQUE7aUJBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtLQUFBO0FBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtBQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7SUFBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTt3QkFBQTt3QkFBQTt3QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTs0QkFBQTt3QkFBQTtvQkFBQTtnQkFBQTthQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtRQUFBO1FBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtBQUFBO1FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7SUFBQTtJQUFBO1FBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtTQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtJQUFBO1FBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO1FBQUE7WUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7UUFBQTtZQUFBO1FBQUE7UUFBQTtZQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7WUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBOzRCQUFBO2dDQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO2lCQUFBO1lBQUE7UUFBQTtJQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7SUFBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0lBQUE7UUFBQTtJQUFBO1lBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7b0JBQUE7Z0JBQUE7WUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7U0FBQTtRQUFBO1FBQUE7SUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO29CQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO3dCQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO2dCQUFBO29CQUFBO29CQUFBO3dCQUFBO29CQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtLQUFBO0lBQUE7UUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBOzRCQUFBO3lCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO2dDQUFBO29DQUFBO2dDQUFBO2dDQUFBO2dDQUFBOzRCQUFBOzRCQUFBO2dDQUFBO29DQUFBO3dDQUFBO3dDQUFBO3dDQUFBO3dDQUFBOzRDQUFBO3dDQUFBO29DQUFBO29DQUFBO3dDQUFBO3dDQUFBOzRDQUFBO3dDQUFBO3dDQUFBO3dDQUFBOzRDQUFBO3dDQUFBO29DQUFBO2lDQUFBOzRCQUFBO3lCQUFBO29CQUFBO2lCQUFBO1lBQUE7WUFBQTtnQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtnQkFBQTtZQUFBO1lBQUE7Z0JBQUE7b0JBQUE7d0JBQUE7Z0NBQUE7NEJBQUE7b0JBQUE7b0JBQUE7b0JBQUE7b0JBQUE7d0JBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO2dCQUFBO29CQUFBO2dCQUFBO1lBQUE7WUFBQTtnQkFBQTtnQkFBQTtnQkFBQTtvQkFBQTtnQkFBQTtZQUFBO1NBQUE7SUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtJQUFBO0lBQUE7WUFBQTtRQUFBO1FBQUE7S0FBQTtRQUFBO0lBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7WUFBQTtZQUFBO1lBQUE7Z0JBQUE7WUFBQTtZQUFBO1lBQUE7WUFBQTtRQUFBO0lBQUE7QUFBQTtRQUFBO0FBQUE7QUFBQTtJQUFBO1FBQUE7WUFBQTtZQUFBO1NBQUE7UUFBQTtZQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO2dCQUFBO1lBQUE7U0FBQTtJQUFBO0FBQUE7QUFBQTtBQUFBO0lBQUE7UUFBQTtZQUFBO1lBQUE7UUFBQTtRQUFBO1FBQUE7SUFBQTtJQUFBO0FBQUE7UUFBQTtBQUFBO0lBQUE7UUFBQTtJQUFBO0lBQUE7UUFBQTtJQUFBO1FBQUE7UUFBQTtLQUFBO1FBQUE7WUFBQTtZQUFBO2dCQUFBO1lBQUE7UUFBQTtZQUFBO1FBQUE7SUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7UUFBQTtRQUFBO1lBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7WUFBQTtZQUFBO2dCQUFBO29CQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBOzRCQUFBO3dCQUFBO29CQUFBO29CQUFBO3dCQUFBOzRCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dCQUFBO3dC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QSxJQUFBLDhDQUNGQSxDQUFFeWI7Z0JBQUFBLEdBR047Z0JBQUE7Z0JBQUEsRUFDQTRDLEtBQUFBLENBQUFBO2dCQUFBQSxFQUFLLEVBQ0xDLEdBQUFBO29CQUFBQSxNQUFVazJKLEVBQUE7d0JBQUE7b0JBQUE7Z0JBQUE7WUFBQSxHQUVUdnhKO2dCQUFBQSxHQUFBQSxJQUFNa29ELENBQUFBLEVBQUFBLE1BR2I7WUFBQTtnQkFBQTtnQkFBQSxXQ25JWjtZQUFBLENBQVM3dkMsR0FBQUE7Z0JBQUFBLFNBQUFBO29CQUFBQSxNQUFBQSxPQUFzQjtvQkFBQSxDQUMvQixNQUFrQixTQU1sQixJQUFBN3dCLEdBQU87Z0JBQUE7WUFBQTtZQUFBO2dCQUFBLFNBRURBLEtBQUFBLEVBQUFBLEVBQUFncUssRUFBQUEsQ0FBWSxDQUVsQixVQUFBajNKLEdBQXVDQSxDQUFRLElBQzdDLEVBQUE5YyxLQUFRQTtnQkFBQUEsRUFBTWtwQixDQUNkLFNBQUF1WixHQUFRQSxHQUFBQSxDQUFBQSxFQUFXK1EsQ0FDbkIsTUFBTSxDQUNKQyxFQUFBQSxLQUFPLENBQ0xDLGVBQVFzZ0ksSUFBZ0MsT0FDekMsQ0FDRHRnSSxNQUFRRyxJQUFtQnBSLEVBQUU7b0JBQUEsS0FDM0JqbkIsRUFBQUE7b0JBQUFaLEdBQUEsQ0FFSixtRkFBQTdRLEdBQ0UrUyxFQUFBQTtnQkFBQyx5Q0FDQzdTLEtBQUFBLEVBQUFBLEVBQVk7b0JBQ1o0USxXQUFBQSxFQUFBQSxDQUNFZzVCLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLENBRUY7OENBQUE7NENBQUEsS0FDQXQxQyxDQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tEZ0RRMFksRUFBTyIsInNvdXJjZXMiOlsiL25vZGVfbW9kdWxlcy8ucG5wbS9zY2hlZHVsZXJAMC4yNS4wL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9zY2hlZHVsZXJAMC4yNS4wL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2Jzb24tb2JqZWN0aWRAMi4wLjQvbm9kZV9tb2R1bGVzL2Jzb24tb2JqZWN0aWQvb2JqZWN0aWQuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE2LjEzLjEvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3QtaXNAMTYuMTMuMS9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzQDMuMy4yL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vb2JqZWN0LXRvLWZvcm1kYXRhQDQuNS4xL25vZGVfbW9kdWxlcy9vYmplY3QtdG8tZm9ybWRhdGEvc3JjL2luZGV4LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9jcnlwdEAwLjAuMi9ub2RlX21vZHVsZXMvY3J5cHQvY3J5cHQuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJlbmNAMC4wLjIvbm9kZV9tb2R1bGVzL2NoYXJlbmMvY2hhcmVuYy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vaXMtYnVmZmVyQDEuMS42L25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL21kNUAyLjMuMC9ub2RlX21vZHVsZXMvbWQ1L21kNS5qcyIsIi9Vc2Vycy9zcmMvZm9ybXMvUm93TGFiZWwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9mb3Jtcy9Sb3dMYWJlbC9Db250ZXh0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZm9ybXMvRm9ybS9jb250ZXh0LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS91c2UtY29udGV4dC1zZWxlY3RvckAyLjAuMF9yZWFjdEAxOS4yLjRfc2NoZWR1bGVyQDAuMjUuMC9ub2RlX21vZHVsZXMvdXNlLWNvbnRleHQtc2VsZWN0b3IvZGlzdC9pbmRleC5qcyIsIi9Vc2Vycy9zcmMvZmllbGRzL0FycmF5L2luZGV4LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vc29ubmVyQDEuNy40X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3Nvbm5lci9zcmMvaW5kZXgudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9zb25uZXJAMS43LjRfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvc29ubmVyL3NyYy9hc3NldHMudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9zb25uZXJAMS43LjRfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvc29ubmVyL3NyYy9ob29rcy50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3Nvbm5lckAxLjcuNF9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9zb25uZXIvc3JjL3N0YXRlLnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9zb25uZXJAMS43LjRfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvc29ubmVyL2Rpc3QvaW5kZXgubWpzLm1hcCIsIi9ub2RlX21vZHVsZXMvLnBucG0vc29ubmVyQDEuNy40X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3Nvbm5lci9zcmMvc3R5bGVzLmNzcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vc29ubmVyQDEuNy40X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3Nvbm5lci9zcmMvdHlwZXMudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0Jhbm5lci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xpbmsvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvUm91dGVUcmFuc2l0aW9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTGluay9mb3JtYXRVcmwudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1dHRvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL0NoZXZyb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9FZGl0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvTGluay9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL1BsdXMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Td2FwL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUG9wdXAvUG9wdXBCdXR0b25MaXN0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUG9wdXAvUG9wdXBEaXZpZGVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUG9wdXAvUG9wdXBHcm91cExhYmVsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUG9wdXAvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9ob29rcy91c2VFZmZlY3RFdmVudC50cyIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUG9wdXAvUG9wdXBUcmlnZ2VyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVG9vbHRpcC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2hvb2tzL3VzZUludGVyc2VjdC50cyIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvQ2xpcGJvYXJkQWN0aW9uL2lzQ2xpcGJvYXJkRGF0YVZhbGlkLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9DbGlwYm9hcmRBY3Rpb24vY2xpcGJvYXJkVXRpbGl0aWVzLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9DbGlwYm9hcmRBY3Rpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Nb3JlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvQ2xpcGJvYXJkQWN0aW9uL0NsaXBib2FyZEFjdGlvbkxhYmVsLnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvQ29weS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0NsaXBib2FyZEFjdGlvbi9tZXJnZUZvcm1TdGF0ZUZyb21DbGlwYm9hcmQudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RyYWdnYWJsZVNvcnRhYmxlL0RyYWdnYWJsZVNvcnRhYmxlSXRlbS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RyYWdnYWJsZVNvcnRhYmxlL3VzZURyYWdnYWJsZVNvcnRhYmxlL2luZGV4LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy9ob29rcy91c2VDb21iaW5lZFJlZnMudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvZXhlY3V0aW9uLWNvbnRleHQvY2FuVXNlRE9NLnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvc3JjL3R5cGUtZ3VhcmRzL2lzV2luZG93LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvc3JjL3R5cGUtZ3VhcmRzL2lzTm9kZS50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy9leGVjdXRpb24tY29udGV4dC9nZXRXaW5kb3cudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvdHlwZS1ndWFyZHMvaXNEb2N1bWVudC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy90eXBlLWd1YXJkcy9pc0hUTUxFbGVtZW50LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvc3JjL3R5cGUtZ3VhcmRzL2lzU1ZHRWxlbWVudC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy9leGVjdXRpb24tY29udGV4dC9nZXRPd25lckRvY3VtZW50LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvc3JjL2hvb2tzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvaG9va3MvdXNlRXZlbnQudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvaG9va3MvdXNlSW50ZXJ2YWwudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvaG9va3MvdXNlTGF0ZXN0VmFsdWUudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvaG9va3MvdXNlTGF6eU1lbW8udHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvaG9va3MvdXNlTm9kZVJlZi50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy9ob29rcy91c2VQcmV2aW91cy50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy9ob29rcy91c2VVbmlxdWVJZC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy9hZGp1c3RtZW50LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvc3JjL2V2ZW50L2hhc1ZpZXdwb3J0UmVsYXRpdmVDb29yZGluYXRlcy50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrdXRpbGl0aWVzQDMuMi4yX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvdXRpbGl0aWVzL3NyYy9ldmVudC9pc0tleWJvYXJkRXZlbnQudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvZXZlbnQvaXNUb3VjaEV2ZW50LnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvc3JjL2Nvb3JkaW5hdGVzL2dldEV2ZW50Q29vcmRpbmF0ZXMudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3V0aWxpdGllc0AzLjIuMl9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3V0aWxpdGllcy9zcmMvY3NzLnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCt1dGlsaXRpZXNAMy4yLjJfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC91dGlsaXRpZXMvc3JjL2ZvY3VzL2ZpbmRGaXJzdEZvY3VzYWJsZU5vZGUudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL3V0aWxpdGllcy9hcnJheU1vdmUudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL3V0aWxpdGllcy9hcnJheVN3YXAudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL3V0aWxpdGllcy9nZXRTb3J0ZWRSZWN0cy50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrc29ydGFibGVAMTAuMC4wX0BkbmQta2l0K2NvcmVANi4zLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC9zb3J0YWJsZS9zcmMvdXRpbGl0aWVzL2lzVmFsaWRJbmRleC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrc29ydGFibGVAMTAuMC4wX0BkbmQta2l0K2NvcmVANi4zLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC9zb3J0YWJsZS9zcmMvdXRpbGl0aWVzL2l0ZW1zRXF1YWwudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL3V0aWxpdGllcy9ub3JtYWxpemVEaXNhYmxlZC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrc29ydGFibGVAMTAuMC4wX0BkbmQta2l0K2NvcmVANi4zLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC9zb3J0YWJsZS9zcmMvc3RyYXRlZ2llcy9ob3Jpem9udGFsTGlzdFNvcnRpbmcudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL3N0cmF0ZWdpZXMvcmVjdFNvcnRpbmcudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL3N0cmF0ZWdpZXMvcmVjdFN3YXBwaW5nLnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCtzb3J0YWJsZUAxMC4wLjBfQGRuZC1raXQrY29yZUA2LjMuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3NvcnRhYmxlL3NyYy9zdHJhdGVnaWVzL3ZlcnRpY2FsTGlzdFNvcnRpbmcudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL2NvbXBvbmVudHMvU29ydGFibGVDb250ZXh0LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrc29ydGFibGVAMTAuMC4wX0BkbmQta2l0K2NvcmVANi4zLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC9zb3J0YWJsZS9zcmMvaG9va3MvZGVmYXVsdHMudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkbmQta2l0K3NvcnRhYmxlQDEwLjAuMF9AZG5kLWtpdCtjb3JlQDYuMy4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGRuZC1raXQvc29ydGFibGUvc3JjL2hvb2tzL3V0aWxpdGllcy91c2VEZXJpdmVkVHJhbnNmb3JtLnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZG5kLWtpdCtzb3J0YWJsZUAxMC4wLjBfQGRuZC1raXQrY29yZUA2LjMuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BkbmQta2l0L3NvcnRhYmxlL3NyYy9ob29rcy91c2VTb3J0YWJsZS50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrc29ydGFibGVAMTAuMC4wX0BkbmQta2l0K2NvcmVANi4zLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC9zb3J0YWJsZS9zcmMvdHlwZXMvdHlwZS1ndWFyZC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRuZC1raXQrc29ydGFibGVAMTAuMC4wX0BkbmQta2l0K2NvcmVANi4zLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZG5kLWtpdC9zb3J0YWJsZS9zcmMvc2Vuc29ycy9rZXlib2FyZC9zb3J0YWJsZUtleWJvYXJkQ29vcmRpbmF0ZXMudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RyYWdnYWJsZVNvcnRhYmxlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRXJyb3JQaWxsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvRmllbGRFcnJvci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvZmluZExvY2FsZUZyb21Db2RlLnRzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFjZWxlc3MtdWkrbW9kYWxAMy4wLjBfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGZhY2VsZXNzLXVpL21vZGFsL3NyYy9hc01vZGFsL2luZGV4LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGJhYmVsK3J1bnRpbWVANy4yOS4yL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZG9tLWhlbHBlcnNANS4yLjEvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9oYXNDbGFzcy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZG9tLWhlbHBlcnNANS4yLjEvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9hZGRDbGFzcy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZG9tLWhlbHBlcnNANS4yLjEvbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9yZW1vdmVDbGFzcy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3QtdHJhbnNpdGlvbi1ncm91cEA0LjQuNV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9DU1NUcmFuc2l0aW9uLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC10cmFuc2l0aW9uLWdyb3VwQDQuNC41X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb24uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBANC40LjVfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vY29uZmlnLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC10cmFuc2l0aW9uLWdyb3VwQDQuNC41X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBANC40LjVfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvcmVmbG93LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGZhY2VsZXNzLXVpK21vZGFsQDMuMC4wX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BmYWNlbGVzcy11aS9tb2RhbC9zcmMvdXNlTW9kYWwvaW5kZXgudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFjZWxlc3MtdWkrbW9kYWxAMy4wLjBfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGZhY2VsZXNzLXVpL21vZGFsL3NyYy9Nb2RhbFByb3ZpZGVyL2NvbnRleHQudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFjZWxlc3MtdWkrbW9kYWxAMy4wLjBfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGZhY2VsZXNzLXVpL21vZGFsL3NyYy9Nb2RhbFByb3ZpZGVyL2dlbmVyYXRlVHJhbnNpdGlvbkNsYXNzZXMudHMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2ZvY3VzLXRyYXBANy41LjQvbm9kZV9tb2R1bGVzL2ZvY3VzLXRyYXAvaW5kZXguanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aSttb2RhbEAzLjAuMF9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvbW9kYWwvc3JjL01vZGFsL2luZGV4LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGZhY2VsZXNzLXVpK21vZGFsQDMuMC4wX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BmYWNlbGVzcy11aS9tb2RhbC9zcmMvTW9kYWxDb250YWluZXIvaW5kZXgudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFjZWxlc3MtdWkrbW9kYWxAMy4wLjBfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGZhY2VsZXNzLXVpL21vZGFsL3NyYy9Nb2RhbFByb3ZpZGVyL2luZGV4LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vYm9keS1zY3JvbGwtbG9ja0A0LjAuMC1iZXRhLjAvbm9kZV9tb2R1bGVzL2JvZHktc2Nyb2xsLWxvY2svbGliL2JvZHlTY3JvbGxMb2NrLmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGZhY2VsZXNzLXVpK21vZGFsQDMuMC4wX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BmYWNlbGVzcy11aS9tb2RhbC9zcmMvTW9kYWxQcm92aWRlci9nZW5lcmF0ZUNTUy50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aSttb2RhbEAzLjAuMF9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvbW9kYWwvc3JjL01vZGFsUHJvdmlkZXIvcmVkdWNlci50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL0F1dGgvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9TdGF5TG9nZ2VkSW4vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RyYXdlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0d1dHRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RyYXdlci91c2VEcmF3ZXJTbHVnLnRzeCIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL2FwaS50cyIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL2dlbmVyYXRlRmllbGRJRC50cyIsIi9Vc2Vycy9zcmMvZm9ybXMvRm9ybS9yb3dIZWxwZXJzLnRzIiwiL1VzZXJzL3NyYy9mb3Jtcy9OdWxsaWZ5RmllbGQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvQ2hlY2tib3gvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9mb3Jtcy91c2VGaWVsZC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2hvb2tzL3VzZVRocm90dGxlZEVmZmVjdC50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9mb3JtYXREb2NUaXRsZS9pbmRleC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGRhdGUtZm5zK3R6QDEuMi4wL25vZGVfbW9kdWxlcy9AZGF0ZS1mbnMvdHovdHpPZmZzZXQvaW5kZXguanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BkYXRlLWZucyt0ekAxLjIuMC9ub2RlX21vZHVsZXMvQGRhdGUtZm5zL3R6L2RhdGUvbWluaS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0YW50cy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0cnVjdEZyb20uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90b0RhdGUuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2RlZmF1bHRPcHRpb25zLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZldlZWsuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vlay5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtZZWFyLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9ub3JtYWxpemVEYXRlcy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vla1llYXIuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlQXNjLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0Tm93LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lRGF5LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNEYXRlLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNWYWxpZC5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZNb250aC5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTGFzdERheU9mTW9udGguanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5Nb250aHMuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlllYXIuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvZGF5LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5T2ZZZWFyLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZldlZWtZZWFyLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvYWRkTGVhZGluZ1plcm9zLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvZm9ybWF0dGVycy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXQuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3cuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90cmFuc3Bvc2UuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvZGF5LmpzIiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvZm9ybWF0RGF0ZVRpdGxlLnRzIiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvZm9ybWF0TGV4aWNhbERvY1RpdGxlLnRzIiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvZm9ybWF0UmVsYXRpb25zaGlwVGl0bGUudHMiLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9Eb2N1bWVudFRpdGxlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1ByZWZlcmVuY2VzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL2RlZXBNZXJnZS50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1VwbG9hZEVkaXRzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL0RvY3VtZW50SW5mby91c2VHZXREb2NQZXJtaXNzaW9ucy50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9oYXNTYXZlUGVybWlzc2lvbi50cyIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL2lzRWRpdGluZy50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL09wZXJhdGlvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2Zvcm1zL1JlbmRlckZpZWxkcy9jb250ZXh0LnRzIiwiL1VzZXJzL3NyYy9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZm9ybXMvd2l0aENvbmRpdGlvbi9XYXRjaENvbmRpdGlvbi50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9tZXJnZUZpZWxkU3R5bGVzLnRzIiwiL1VzZXJzL3NyYy9maWVsZHMvc2hhcmVkL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL0NoZWNrYm94L0lucHV0LnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvQ2hlY2svaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9MaW5lL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL3Njcm9sbFRvSUQudHMiLCIvVXNlcnMvc3JjL2ZpZWxkcy9BcnJheS9BcnJheVJvdy50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0FycmF5QWN0aW9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvQ29sbGFwc2libGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9EcmFnSGFuZGxlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvQW5pbWF0ZUhlaWdodC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0FuaW1hdGVIZWlnaHQvdXNlUGF0Y2hBbmltYXRlSGVpZ2h0LnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Db2xsYXBzaWJsZS9wcm92aWRlci50c3giLCIvVXNlcnMvc3JjL2Zvcm1zL1JlbmRlckZpZWxkcy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlbmRlcklmSW5WaWV3cG9ydC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2Zvcm1zL1JlbmRlckZpZWxkcy9SZW5kZXJGaWVsZC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9CbG9ja3MvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvQmxvY2tzL0Jsb2NrUm93LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUGlsbC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2hvb2tzL3VzZVRocm90dGxlZFZhbHVlLnRzIiwiL1VzZXJzL3NyYy9maWVsZHMvQmxvY2tzL1Jvd0FjdGlvbnMudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvQmxvY2tzL0Jsb2Nrc0RyYXdlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9CbG9ja3MvQmxvY2tTZWxlY3Rvci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RodW1ibmFpbENhcmQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9ncmFwaGljcy9EZWZhdWx0QmxvY2tJbWFnZS9pbmRleC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vdXVpZEAxMC4wLjAvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9uYXRpdmUuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCIvVXNlcnMvc3JjL2ZpZWxkcy9CbG9ja3MvQmxvY2tTZWxlY3Rvci9CbG9ja1NlYXJjaC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL1NlYXJjaC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9CbG9ja3MvU2VjdGlvblRpdGxlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL0NvZGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Db2RlRWRpdG9yL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL0NvbGxhcHNpYmxlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZm9ybXMvV2F0Y2hDaGlsZEVycm9ycy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2Zvcm1zL1dhdGNoQ2hpbGRFcnJvcnMvYnVpbGRQYXRoU2VnbWVudHMudHMiLCIvVXNlcnMvc3JjL2ZpZWxkcy9EYXRlVGltZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RhdGVQaWNrZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UaW1lem9uZVBpY2tlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlYWN0U2VsZWN0L2luZGV4LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGJhYmVsK3J1bnRpbWVANy4yOS4yL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGJhYmVsK3J1bnRpbWVANy4yOS4yL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGJhYmVsK3J1bnRpbWVANy4yOS4yL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LXNlbGVjdEA1LjkuMF9AdHlwZXMrcmVhY3RAMTkuMi45X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L3VzZVN0YXRlTWFuYWdlci03ZTFlODQ4OS5lc20uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LXNlbGVjdEA1LjkuMF9AdHlwZXMrcmVhY3RAMTkuMi45X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L3JlYWN0LXNlbGVjdC5lc20uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlU3VwZXIuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BiYWJlbCtydW50aW1lQDcuMjkuMi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AYmFiZWwrcnVudGltZUA3LjI5LjIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1zZWxlY3RANS45LjBfQHR5cGVzK3JlYWN0QDE5LjIuOV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC9TZWxlY3QtYWFiMDI3ZjMuZXNtLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZW1vdGlvbityZWFjdEAxMS4xNC4wX0B0eXBlcytyZWFjdEAxOS4yLjlfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC1mMGRlOTY4ZS5icm93c2VyLmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rc2hlZXRAMS40LjAvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxpc0A0LjIuMC9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsaXNANC4yLjAvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGlzQDQuMi4wL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGlzQDQuMi4wL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGlzQDQuMi4wL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1NlcmlhbGl6ZXIuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxpc0A0LjIuMC9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZW1vdGlvbittZW1vaXplQDAuOS4wL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rY2FjaGVAMTEuMTQuMC9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZW1vdGlvbit1dGlsc0AxLjQuMi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXRpbHMvZGlzdC9lbW90aW9uLXV0aWxzLmJyb3dzZXIuZXNtLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZW1vdGlvbitoYXNoQDAuOS4yL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9oYXNoL2Rpc3QvZW1vdGlvbi1oYXNoLmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rdW5pdGxlc3NAMC4xMC4wL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZW1vdGlvbitzZXJpYWxpemVAMS4zLjMvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGVtb3Rpb24rdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3NAMS4yLjBfcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BlbW90aW9uK3JlYWN0QDExLjE0LjBfQHR5cGVzK3JlYWN0QDE5LjIuOV9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGJhYmVsK3J1bnRpbWVANy4yOS4yL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWwuanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LXNlbGVjdEA1LjkuMF9AdHlwZXMrcmVhY3RAMTkuMi45X3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3JlYWN0LXNlbGVjdC9kaXN0L2luZGV4LTY0MWVlNWI4LmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vdXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdEAxLjIuMV9AdHlwZXMrcmVhY3RAMTkuMi45X3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvdXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdC9kaXN0L3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QuYnJvd3Nlci5lc20uanMiLCIvbm9kZV9tb2R1bGVzLy5wbnBtL21lbW9pemUtb25lQDYuMC4wL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIi9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3Qtc2VsZWN0QDUuOS4wX0B0eXBlcytyZWFjdEAxOS4yLjlfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvcmVhY3Qtc2VsZWN0L2NyZWF0YWJsZS9kaXN0L3JlYWN0LXNlbGVjdC1jcmVhdGFibGUuZXNtLmpzIiwiL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1zZWxlY3RANS45LjBfQHR5cGVzK3JlYWN0QDE5LjIuOV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9yZWFjdC1zZWxlY3QvZGlzdC91c2VDcmVhdGFibGUtODQwMDgyMzcuZXNtLmpzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9SZWFjdFNlbGVjdC9DbGVhckluZGljYXRvci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlYWN0U2VsZWN0L0NvbnRyb2wvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9SZWFjdFNlbGVjdC9Ecm9wZG93bkluZGljYXRvci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlYWN0U2VsZWN0L0lucHV0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUmVhY3RTZWxlY3QvTXVsdGlWYWx1ZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlYWN0U2VsZWN0L011bHRpVmFsdWVMYWJlbC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlYWN0U2VsZWN0L011bHRpVmFsdWVSZW1vdmUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9SZWFjdFNlbGVjdC9TaW5nbGVWYWx1ZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlYWN0U2VsZWN0L1ZhbHVlQ29udGFpbmVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvV2hlcmVCdWlsZGVyL0NvbmRpdGlvbi9TZWxlY3QvZm9ybWF0T3B0aW9ucy50cyIsIi9Vc2Vycy9zcmMvZmllbGRzL0VtYWlsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL0dyb3VwL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1Jvdy9wcm92aWRlci50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9UYWJzL3Byb3ZpZGVyLnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL0dyb3VwL3Byb3ZpZGVyLnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL0hpZGRlbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9Kb2luL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUmVsYXRpb25zaGlwVGFibGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvTGlzdFF1ZXJ5L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTGlzdERyYXdlci9Qcm92aWRlci50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9wYXJzZVNlYXJjaFBhcmFtcy50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL0xpc3RRdWVyeS9jb250ZXh0LnRzIiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvTGlzdFF1ZXJ5L21lcmdlUXVlcnkudHMiLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9MaXN0UXVlcnkvc2FuaXRpemVRdWVyeS50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1NlcnZlckZ1bmN0aW9ucy9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9UYWJsZUNvbHVtbnMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvVGFibGVDb2x1bW5zL2NvbnRleHQudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0NvbHVtblNlbGVjdG9yL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUGlsbFNlbGVjdG9yL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRG9jdW1lbnREcmF3ZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9ob29rcy91c2VSZWxhdGVkQ29sbGVjdGlvbnMudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL0RyYXdlckNvbnRlbnQudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Mb2FkaW5nL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTG9hZGluZ092ZXJsYXkvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9ob29rcy91c2VEZWxheWVkUmVuZGVyLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Mb2FkaW5nT3ZlcmxheS9yZWR1Y2VyLnRzIiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvYWJvcnRBbmRJZ25vcmUudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL1Byb3ZpZGVyLnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTm9MaXN0UmVzdWx0cy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RhYmxlL1JlbGF0aW9uc2hpcFByb3ZpZGVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaG9va3MvdXNlRGVib3VuY2UudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RhYmxlL1JlbGF0aW9uc2hpcFByb3ZpZGVyL3JlZHVjZXIudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlbGF0aW9uc2hpcFRhYmxlL0FkZE5ld0J1dHRvbi50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1JlbGF0aW9uc2hpcFRhYmxlL2NlbGxzL0RyYXdlckxpbmsvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvVGFibGVDb2x1bW5zL1JlbmRlckRlZmF1bHRDZWxsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvRGVmYXVsdENlbGwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvZm9ybWF0QWRtaW5VUkwudHMiLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9nZXREaXNwbGF5ZWRGaWVsZFZhbHVlLnRzIiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvaXNWYWxpZFJlYWN0RWxlbWVudC50cyIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvRGVmYXVsdENlbGwvZmllbGRzL0NvZGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UYWJsZS9EZWZhdWx0Q2VsbC9maWVsZHMvQXJyYXkvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UYWJsZS9EZWZhdWx0Q2VsbC9maWVsZHMvQmxvY2tzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvRGVmYXVsdENlbGwvZmllbGRzL0NoZWNrYm94L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvRGVmYXVsdENlbGwvZmllbGRzL0RhdGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UYWJsZS9EZWZhdWx0Q2VsbC9maWVsZHMvRmlsZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RodW1ibmFpbC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2dyYXBoaWNzL0ZpbGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UYWJsZS9EZWZhdWx0Q2VsbC9maWVsZHMvSlNPTi9pbmRleC50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9zdHJpbmdpZnlUcnVuY2F0ZWQudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RhYmxlL0RlZmF1bHRDZWxsL2ZpZWxkcy9SZWxhdGlvbnNoaXAvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvY2FuVXNlRE9NLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UYWJsZS9EZWZhdWx0Q2VsbC9maWVsZHMvU2VsZWN0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvRGVmYXVsdENlbGwvZmllbGRzL1RleHRhcmVhL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvRGVmYXVsdENlbGwvZmllbGRzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUmVsYXRpb25zaGlwVGFibGUvUGFnaW5hdGlvbi50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1BhZ2luYXRpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9QYWdpbmF0aW9uL0NsaWNrYWJsZUFycm93L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUGFnaW5hdGlvbi9QYWdlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUGFnaW5hdGlvbi9TZXBhcmF0b3IvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvSlNPTi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9OdW1iZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvUG9pbnQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvUmFkaW9Hcm91cC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9SYWRpb0dyb3VwL1JhZGlvL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1JlbGF0aW9uc2hpcC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9SZWxhdGlvbnNoaXAvSW5wdXQudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9BZGROZXdSZWxhdGlvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xpc3REcmF3ZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9MaXN0RHJhd2VyL0RyYXdlckNvbnRlbnQudHN4IiwiL1VzZXJzL3NyYy9ob29rcy91c2VEZWJvdW5jZWRDYWxsYmFjay50cyIsIi9Vc2Vycy9zcmMvaG9va3MvdXNlUXVldWUudHMiLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9Eb2N1bWVudEV2ZW50cy9pbmRleC50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9zYW5pdGl6ZUZpbHRlck9wdGlvbnNRdWVyeS50cyIsIi9Vc2Vycy9zcmMvZmllbGRzL1JlbGF0aW9uc2hpcC9jcmVhdGVSZWxhdGlvbk1hcC50cyIsIi9Vc2Vycy9zcmMvZmllbGRzL1JlbGF0aW9uc2hpcC9maW5kT3B0aW9uc0J5VmFsdWUudHMiLCIvVXNlcnMvc3JjL2ZpZWxkcy9SZWxhdGlvbnNoaXAvb3B0aW9uc1JlZHVjZXIudHMiLCIvVXNlcnMvc3JjL2ZpZWxkcy9SZWxhdGlvbnNoaXAvc2VsZWN0LWNvbXBvbmVudHMvTXVsdGlWYWx1ZUxhYmVsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1JlbGF0aW9uc2hpcC9zZWxlY3QtY29tcG9uZW50cy9TaW5nbGVWYWx1ZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9SaWNoVGV4dC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9Sb3cvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvU2VsZWN0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1NlbGVjdC9JbnB1dC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9UYWJzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZm9ybXMvRm9ybS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RvYXN0cy9maWVsZEVycm9ycy50c3giLCIvVXNlcnMvc3JjL2hvb2tzL3VzZURlYm91bmNlZEVmZmVjdC50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1VwbG9hZEhhbmRsZXJzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZm9ybXMvRm9ybS9lcnJvck1lc3NhZ2VzLnRzIiwiL1VzZXJzL3NyYy9mb3Jtcy9Gb3JtL2ZpZWxkUmVkdWNlci50cyIsIi9Vc2Vycy9zcmMvZm9ybXMvRm9ybS9tZXJnZVNlcnZlckZvcm1TdGF0ZS50cyIsIi9Vc2Vycy9zcmMvZm9ybXMvRm9ybS9yb3dzLnRzIiwiL1VzZXJzL3NyYy9mb3Jtcy9Gb3JtL2luaXRDb250ZXh0U3RhdGUudHMiLCIvVXNlcnMvc3JjL2ZpZWxkcy9UYWJzL1RhYi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9UZXh0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1RleHQvSW5wdXQudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvVGV4dGFyZWEvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvVGV4dGFyZWEvSW5wdXQudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvVUkvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvVXBsb2FkL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvQnVsa1VwbG9hZC9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9VcGxvYWRDb250cm9scy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1bGtVcGxvYWQvQWRkRmlsZXNWaWV3L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRHJvcHpvbmUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9CdWxrVXBsb2FkL0hlYWRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1bGtVcGxvYWQvRHJhd2VyQ2xvc2VCdXR0b24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9CdWxrVXBsb2FkL0FkZGluZ0ZpbGVzVmlldy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1bGtVcGxvYWQvQWN0aW9uc0Jhci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1bGtVcGxvYWQvRWRpdE1hbnkvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9CdWxrVXBsb2FkL0Zvcm1zTWFuYWdlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1bGtVcGxvYWQvRm9ybXNNYW5hZ2VyL2NyZWF0ZUZvcm1EYXRhLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9CdWxrVXBsb2FkL0Zvcm1zTWFuYWdlci9yZWR1Y2VyLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9CdWxrVXBsb2FkL0VkaXRNYW55L0RyYXdlckNvbnRlbnQudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9GaWVsZFNlbGVjdC9pbmRleC50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9maWx0ZXJPdXRVcGxvYWRGaWVsZHMudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZpZWxkU2VsZWN0L3JlZHVjZUZpZWxkT3B0aW9ucy50cyIsIi9Vc2Vycy9zcmMvZm9ybXMvRm9ybS9jcmVhdGVOZXN0ZWRDbGllbnRGaWVsZFBhdGgudHMiLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9jb21iaW5lRmllbGRMYWJlbC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1bGtVcGxvYWQvRGlzY2FyZFdpdGhvdXRTYXZpbmcvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9CdWxrVXBsb2FkL0VkaXRGb3JtL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRG9jdW1lbnRGaWVsZHMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UcmFzaEJhbm5lci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL1RyYXNoL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRm9sZGVyVmlldy9Nb3ZlRG9jVG9Gb2xkZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Gb2xkZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Gb2xkZXJWaWV3L0RyYXdlcnMvTW92ZVRvRm9sZGVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL0ZvbGRlcnMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvRm9sZGVycy9ncm91cEl0ZW1JRHNCeVJlbGF0aW9uLnRzIiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvUm91dGVDYWNoZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RyYXdlckFjdGlvbkhlYWRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2Zvcm1zL1N1Ym1pdC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RyYXdlckNvbnRlbnRDb250YWluZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9MaXN0SGVhZGVyL1RpdGxlQWN0aW9ucy9MaXN0Q3JlYXRlTmV3RG9jSW5Gb2xkZXJCdXR0b24udHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9UcmFuc2xhdGlvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZvbGRlclZpZXcvQnJlYWRjcnVtYnMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Gb2xkZXJWaWV3L0NvbG9yZWRGb2xkZXJJY29uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVXBsb2FkL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRWRpdFVwbG9hZC9pbmRleC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWltYWdlLWNyb3BAMTAuMS44X3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvcmVhY3QtaW1hZ2UtY3JvcC9kaXN0L2luZGV4LmpzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9GaWxlRGV0YWlscy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZpbGVEZXRhaWxzL0RyYWdnYWJsZUZpbGVEZXRhaWxzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRmlsZURldGFpbHMvU3RhdGljRmlsZURldGFpbHMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9GaWxlRGV0YWlscy9GaWxlTWV0YS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0NvcHlUb0NsaXBib2FyZC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1ByZXZpZXdTaXplcy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0J1bGtVcGxvYWQvRmlsZVNpZGViYXIvaW5kZXgudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFjZWxlc3MtdWkrd2luZG93LWluZm9AMy4wLjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGZhY2VsZXNzLXVpL3dpbmRvdy1pbmZvL3NyYy9pbmRleC50cyIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGZhY2VsZXNzLXVpK3dpbmRvdy1pbmZvQDMuMC4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BmYWNlbGVzcy11aS93aW5kb3ctaW5mby9zcmMvdXNlV2luZG93SW5mby9pbmRleC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aSt3aW5kb3ctaW5mb0AzLjAuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvd2luZG93LWluZm8vc3JjL1dpbmRvd0luZm9Qcm92aWRlci9jb250ZXh0LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGZhY2VsZXNzLXVpK3dpbmRvdy1pbmZvQDMuMC4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BmYWNlbGVzcy11aS93aW5kb3ctaW5mby9zcmMvV2luZG93SW5mby9pbmRleC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aSt3aW5kb3ctaW5mb0AzLjAuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvd2luZG93LWluZm8vc3JjL1dpbmRvd0luZm9Qcm92aWRlci9pbmRleC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aSt3aW5kb3ctaW5mb0AzLjAuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvd2luZG93LWluZm8vc3JjL3dpdGhXaW5kb3dJbmZvL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGh1bWJuYWlsL2NyZWF0ZVRodW1ibmFpbC50cyIsIi9Vc2Vycy9zcmMvZmllbGRzL1VwbG9hZC9JbnB1dC50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9ub3JtYWxpemVSZWxhdGlvbnNoaXBWYWx1ZS50cyIsIi9Vc2Vycy9zcmMvZmllbGRzL1VwbG9hZC9IYXNNYW55L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1VwbG9hZC9SZWxhdGlvbnNoaXBDb250ZW50L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1VwbG9hZC9VcGxvYWRDYXJkL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1VwbG9hZC9IYXNPbmUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9maWVsZHMvQ29uZmlybVBhc3N3b3JkL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1Bhc3N3b3JkL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL1Bhc3N3b3JkL2lucHV0LnRzeCIsIi9Vc2Vycy9zcmMvZmllbGRzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaG9va3MvdXNlSG90a2V5LnRzIiwiL1VzZXJzL3NyYy9ob29rcy91c2VQYXlsb2FkQVBJLnRzIiwiL1VzZXJzL3NyYy9ob29rcy91c2VSZXNpemUudHMiLCIvVXNlcnMvc3JjL2hvb2tzL3VzZVVzZUFzVGl0bGUudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1NvcnRIZWFkZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Tb3J0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvU29ydFJvdy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RhYmxlL09yZGVyYWJsZVRhYmxlLnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvT3JkZXJhYmxlUm93LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVGFibGUvT3JkZXJhYmxlUm93RHJhZ1ByZXZpZXcudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9RdWVyeVByZXNldHMvY2VsbHMvQ29sdW1uc0NlbGwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9RdWVyeVByZXNldHMvY2VsbHMvV2hlcmVDZWxsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUXVlcnlQcmVzZXRzL2NlbGxzL0FjY2Vzc0NlbGwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9RdWVyeVByZXNldHMvY2VsbHMvR3JvdXBCeUNlbGwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvcmVkdWNlRmllbGRzVG9PcHRpb25zLnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvV2hlcmVCdWlsZGVyL2ZpZWxkLXR5cGVzLnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUXVlcnlQcmVzZXRzL2ZpZWxkcy9Db2x1bW5zRmllbGQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvZ2V0Q29sdW1ucy50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1RhYmxlQ29sdW1ucy9idWlsZENvbHVtblN0YXRlL2ZpbHRlckZpZWxkc1dpdGhQZXJtaXNzaW9ucy50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9UYWJsZUNvbHVtbnMvZ2V0SW5pdGlhbENvbHVtbnMudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1F1ZXJ5UHJlc2V0cy9maWVsZHMvV2hlcmVGaWVsZC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1doZXJlQnVpbGRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1doZXJlQnVpbGRlci9Db25kaXRpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9XaGVyZUJ1aWxkZXIvQ29uZGl0aW9uL0RlZmF1bHRGaWx0ZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9XaGVyZUJ1aWxkZXIvQ29uZGl0aW9uL0RhdGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9XaGVyZUJ1aWxkZXIvQ29uZGl0aW9uL051bWJlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1doZXJlQnVpbGRlci9Db25kaXRpb24vUmVsYXRpb25zaGlwL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvV2hlcmVCdWlsZGVyL0NvbmRpdGlvbi9SZWxhdGlvbnNoaXAvb3B0aW9uc1JlZHVjZXIudHMiLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1doZXJlQnVpbGRlci9Db25kaXRpb24vU2VsZWN0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvV2hlcmVCdWlsZGVyL0NvbmRpdGlvbi9UZXh0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvV2hlcmVCdWlsZGVyL0NvbmRpdGlvbi92YWxpZE9wZXJhdG9ycy50cyIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUXVlcnlQcmVzZXRzL2ZpZWxkcy9Hcm91cEJ5RmllbGQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Hcm91cEJ5QnVpbGRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xlYXZlV2l0aG91dFNhdmluZy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xlYXZlV2l0aG91dFNhdmluZy91c2VQcmV2ZW50TGVhdmUudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Eb2N1bWVudFRha2VPdmVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRG9jdW1lbnRMb2NrZWQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvaXNDbGllbnRVc2VyT2JqZWN0LnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9WaWV3RGVzY3JpcHRpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9BcHBIZWFkZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9ncmFwaGljcy9BY2NvdW50L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZ3JhcGhpY3MvQWNjb3VudC9EZWZhdWx0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZ3JhcGhpY3MvQWNjb3VudC9HcmF2YXRhci9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9BY3Rpb25zL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvSGFtYnVyZ2VyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvQ2xvc2VNZW51L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvTWVudS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xvY2FsaXplci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xvY2FsaXplci9Mb2NhbGl6ZXJMYWJlbC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL05hdi9jb250ZXh0LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTmF2L05hdlRvZ2dsZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9TdGVwTmF2L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZ3JhcGhpY3MvSWNvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1N0ZXBOYXYvY29udGV4dC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1N0ZXBOYXYvU2V0U3RlcE5hdi50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0NhcmQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Db3B5TG9jYWxlRGF0YS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RlbGV0ZU1hbnkvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvU2VsZWN0aW9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL3Nob3VsZFBlcm1hbmVudGx5RGVsZXRlLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9MaXN0U2VsZWN0aW9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRG9jdW1lbnRDb250cm9scy9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9MaXZlUHJldmlldy9jb250ZXh0LnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9BdXRvc2F2ZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9yZWR1Y2VGaWVsZHNUb1ZhbHVlc1dpdGhWYWxpZGF0aW9uLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9EZWxldGVEb2N1bWVudC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0R1cGxpY2F0ZURvY3VtZW50L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL3RyYXZlcnNlRm9yTG9jYWxpemVkRmllbGRzLnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9EdXBsaWNhdGVEb2N1bWVudC9TZWxlY3RMb2NhbGVzRHJhd2VyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTGl2ZVByZXZpZXcvVG9nZ2xlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL0V5ZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xvY2tlZC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL0xvY2svaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9QZXJtYW5lbnRseURlbGV0ZUJ1dHRvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1ByZXZpZXdCdXR0b24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9FeHRlcm5hbExpbmsvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9QdWJsaXNoQnV0dG9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUHVibGlzaEJ1dHRvbi9TY2hlZHVsZURyYXdlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1RhYmxlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUHVibGlzaEJ1dHRvbi9TY2hlZHVsZURyYXdlci9idWlsZFVwY29taW5nQ29sdW1ucy50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1Jlc3RvcmVCdXR0b24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9TYXZlQnV0dG9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvU2F2ZURyYWZ0QnV0dG9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvU3RhdHVzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvVW5wdWJsaXNoQnV0dG9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvSFRNTERpZmYvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9IVE1MRGlmZi9kaWZmL2luZGV4LnRzIiwiL1VzZXJzL3NyYy9lbGVtZW50cy9IVE1MRGlmZi9lc2NhcGVIdG1sLnRzIiwiL1VzZXJzL3NyYy9ob29rcy91c2VDbGlja091dHNpZGUudHMiLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9DbGlja091dHNpZGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9FZGl0TWFueS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0VkaXRNYW55L0RyYXdlckNvbnRlbnQudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9GdWxsc2NyZWVuTW9kYWwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9HZW5lcmF0ZUNvbmZpcm1hdGlvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0h5ZHJhdGVBdXRoUHJvdmlkZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9MaXN0Q29udHJvbHMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Eb3RzL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUXVlcnlQcmVzZXRzL1F1ZXJ5UHJlc2V0QmFyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUXVlcnlQcmVzZXRzL1F1ZXJ5UHJlc2V0VG9nZ2xlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL1Blb3BsZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1NlYXJjaEZpbHRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1NlYXJjaEJhci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xpc3RDb250cm9scy9nZXRUZXh0RmllbGRzVG9CZVNlYXJjaGVkLnRzIiwiL1VzZXJzL3NyYy92aWV3cy9MaXN0L0xpc3RTZWxlY3Rpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9QdWJsaXNoTWFueS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1B1Ymxpc2hNYW55L0RyYXdlckNvbnRlbnQudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9SZXN0b3JlTWFueS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1VucHVibGlzaE1hbnkvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9VbnB1Ymxpc2hNYW55L0RyYXdlckNvbnRlbnQudHN4IiwiL1VzZXJzL3NyYy92aWV3cy9MaXN0L0xpc3RIZWFkZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9DbG9zZU1vZGFsQnV0dG9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRGVmYXVsdExpc3RWaWV3VGFicy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xpc3RIZWFkZXIvRHJhd2VyUmVsYXRpb25zaGlwU2VsZWN0L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTGlzdEhlYWRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xpc3RIZWFkZXIvRHJhd2VyVGl0bGVBY3Rpb25zL0xpc3REcmF3ZXJDcmVhdGVOZXdEb2NCdXR0b24udHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9MaXN0SGVhZGVyL1RpdGxlQWN0aW9ucy9MaXN0QnVsa1VwbG9hZEJ1dHRvbi50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xpc3RIZWFkZXIvVGl0bGVBY3Rpb25zL0xpc3RDcmVhdGVOZXdEb2NCdXR0b24udHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9MaXN0SGVhZGVyL1RpdGxlQWN0aW9ucy9MaXN0RW1wdHlUcmFzaEJ1dHRvbi50c3giLCIvVXNlcnMvc3JjL3ZpZXdzL0xpc3QvR3JvdXBCeUhlYWRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1BhZ2VDb250cm9scy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL1BlclBhZ2UvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9TdGlja3lUb29sYmFyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvUGFnZUNvbnRyb2xzL0dyb3VwQnlQYWdlQ29udHJvbHMudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Mb2dvdXQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Mb2dPdXQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9OYXZHcm91cC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0NvbWJvYm94L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRm9sZGVyVmlldy9Ccm93c2VCeUZvbGRlckJ1dHRvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZvbGRlclZpZXcvRm9sZGVyVHlwZUZpZWxkL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRm9sZGVyVmlldy9Gb2xkZXJGaWxlVGFibGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Eb2N1bWVudC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZvbGRlclZpZXcvRHJhZ2dhYmxlVGFibGVSb3cvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Gb2xkZXJWaWV3L0RyYWdnYWJsZVdpdGhDbGljay9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZvbGRlclZpZXcvU2ltcGxlVGFibGUvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Gb2xkZXJWaWV3L0l0ZW1DYXJkR3JpZC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZvbGRlclZpZXcvRm9sZGVyRmlsZUNhcmQvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9UaHJlZURvdHMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9SZW5kZXJUaXRsZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0lETGFiZWwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvc2FuaXRpemVJRC50cyIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvU29ydENvbHVtbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0l0ZW1zRHJhd2VyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvSXRlbXNEcmF3ZXIvSXRlbVNlYXJjaC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ZpZWxkcy9TbHVnL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvQ29kZUJsb2NrL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvTWluaW1pemVNYXhpbWl6ZS9pbmRleC50c3giLCIvVXNlcnMvc3JjL2ljb25zL0dlYXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9Nb3ZlRm9sZGVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvaWNvbnMvR3JpZFZpZXcvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9pY29ucy9MaXN0Vmlldy9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9Ub2FzdENvbnRhaW5lci9pY29ucy9FcnJvci50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9Ub2FzdENvbnRhaW5lci9pY29ucy9JbmZvLnRzeCIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1RvYXN0Q29udGFpbmVyL2ljb25zL1N1Y2Nlc3MudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvVG9hc3RDb250YWluZXIvaWNvbnMvV2FybmluZy50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9DbGllbnRGdW5jdGlvbi9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9MaXZlUHJldmlldy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2hvb2tzL3VzZVBvcHVwV2luZG93LnRzIiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvZm9ybWF0QWJzb2x1dGVVUkwudHMiLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9MaXZlUHJldmlldy9jb2xsaXNpb25EZXRlY3Rpb24udHMiLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9MaXZlUHJldmlldy9zaXplUmVkdWNlci50cyIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9Qcm9ncmVzc0Jhci9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9FbnRpdHlWaXNpYmlsaXR5L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvcHJvdmlkZXJzL1BhcmFtcy9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9Sb290L2luZGV4LnRzeCIsIi9ub2RlX21vZHVsZXMvLnBucG0vQGZhY2VsZXNzLXVpK3Njcm9sbC1pbmZvQDIuMC4wX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL0BmYWNlbGVzcy11aS9zY3JvbGwtaW5mby9zcmMvU2Nyb2xsSW5mby9pbmRleC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aStzY3JvbGwtaW5mb0AyLjAuMF9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvc2Nyb2xsLWluZm8vc3JjL3VzZVNjcm9sbEluZm8vaW5kZXgudHN4IiwiL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFjZWxlc3MtdWkrc2Nyb2xsLWluZm9AMi4wLjBfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNC9ub2RlX21vZHVsZXMvQGZhY2VsZXNzLXVpL3Njcm9sbC1pbmZvL3NyYy9TY3JvbGxJbmZvUHJvdmlkZXIvY29udGV4dC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aStzY3JvbGwtaW5mb0AyLjAuMF9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvc2Nyb2xsLWluZm8vc3JjL1Njcm9sbEluZm9Qcm92aWRlci9pbmRleC50c3giLCIvbm9kZV9tb2R1bGVzLy5wbnBtL0BmYWNlbGVzcy11aStzY3JvbGwtaW5mb0AyLjAuMF9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40L25vZGVfbW9kdWxlcy9AZmFjZWxlc3MtdWkvc2Nyb2xsLWluZm8vc3JjL3dpdGhTY3JvbGxJbmZvL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvQ2xvc2VNb2RhbE9uUm91dGVDaGFuZ2UvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvV2luZG93SW5mby9pbmRleC50c3giLCIvVXNlcnMvc3JjL3Byb3ZpZGVycy9TZWFyY2hQYXJhbXMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9wcm92aWRlcnMvVG9hc3RDb250YWluZXIvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9FbWFpbEFuZFVzZXJuYW1lL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvU2VsZWN0QWxsL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvU2VsZWN0Um93L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvU2VsZWN0TWFueS9pbmRleC50c3giLCIvVXNlcnMvc3JjL3ZpZXdzL0xpc3QvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy92aWV3cy9Db2xsZWN0aW9uRm9sZGVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRm9sZGVyVmlldy9DdXJyZW50Rm9sZGVyQWN0aW9ucy9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZvbGRlclZpZXcvRHJhZ092ZXJsYXlTZWxlY3Rpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Gb2xkZXJWaWV3L1NvcnRCeVBpbGwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9Gb2xkZXJWaWV3L1RvZ2dsZVZpZXdCdXR0b25zL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdmlld3MvQ29sbGVjdGlvbkZvbGRlci9MaXN0U2VsZWN0aW9uL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRm9sZGVyVmlldy9EcmF3ZXJzL0VkaXRGb2xkZXJBY3Rpb24vaW5kZXgudHN4IiwiL1VzZXJzL3NyYy92aWV3cy9Ccm93c2VCeUZvbGRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0ZvbGRlclZpZXcvRmlsdGVyRm9sZGVyVHlwZVBpbGwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9DaGVja2JveFBvcHVwL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdmlld3MvRWRpdC9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL0RyYXdlckhlYWRlci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0RvY3VtZW50U3RhbGVEYXRhL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTGl2ZVByZXZpZXcvV2luZG93L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvSWZyYW1lTG9hZGVyL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTGl2ZVByZXZpZXcvRGV2aWNlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvTGl2ZVByZXZpZXcvVG9vbGJhci9pbmRleC50c3giLCIvVXNlcnMvc3JjL2VsZW1lbnRzL0xpdmVQcmV2aWV3L1Rvb2xiYXIvQ29udHJvbHMvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9MaXZlUHJldmlldy9Ub29sYmFyL1NpemVJbnB1dC9pbmRleC50c3giLCIvVXNlcnMvc3JjL3V0aWxpdGllcy9oYW5kbGVCYWNrVG9EYXNoYm9hcmQudHN4IiwiL1VzZXJzL3NyYy91dGlsaXRpZXMvaGFuZGxlR29CYWNrLnRzeCIsIi9Vc2Vycy9zcmMvdXRpbGl0aWVzL2hhbmRsZVRha2VPdmVyLnRzeCIsIi9Vc2Vycy9zcmMvdmlld3MvRWRpdC9BdXRoL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdmlld3MvRWRpdC9BdXRoL0FQSUtleS50c3giLCIvVXNlcnMvc3JjL3ZpZXdzL0VkaXQvU2V0RG9jdW1lbnRTdGVwTmF2L2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvdmlld3MvRWRpdC9TZXREb2N1bWVudFRpdGxlL2luZGV4LnRzeCIsIi9Vc2Vycy9zcmMvZWxlbWVudHMvRmllbGREaWZmTGFiZWwvaW5kZXgudHN4IiwiL1VzZXJzL3NyYy9lbGVtZW50cy9GaWVsZERpZmZDb250YWluZXIvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICB2YXIgaW5kZXggPSBoZWFwLmxlbmd0aDtcbiAgaGVhcC5wdXNoKG5vZGUpO1xuICBhOiBmb3IgKDsgMCA8IGluZGV4OyApIHtcbiAgICB2YXIgcGFyZW50SW5kZXggPSAoaW5kZXggLSAxKSA+Pj4gMSxcbiAgICAgIHBhcmVudCA9IGhlYXBbcGFyZW50SW5kZXhdO1xuICAgIGlmICgwIDwgY29tcGFyZShwYXJlbnQsIG5vZGUpKVxuICAgICAgKGhlYXBbcGFyZW50SW5kZXhdID0gbm9kZSksIChoZWFwW2luZGV4XSA9IHBhcmVudCksIChpbmRleCA9IHBhcmVudEluZGV4KTtcbiAgICBlbHNlIGJyZWFrIGE7XG4gIH1cbn1cbmZ1bmN0aW9uIHBlZWsoaGVhcCkge1xuICByZXR1cm4gMCA9PT0gaGVhcC5sZW5ndGggPyBudWxsIDogaGVhcFswXTtcbn1cbmZ1bmN0aW9uIHBvcChoZWFwKSB7XG4gIGlmICgwID09PSBoZWFwLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF0sXG4gICAgbGFzdCA9IGhlYXAucG9wKCk7XG4gIGlmIChsYXN0ICE9PSBmaXJzdCkge1xuICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgIGE6IGZvciAoXG4gICAgICB2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBoZWFwLmxlbmd0aCwgaGFsZkxlbmd0aCA9IGxlbmd0aCA+Pj4gMTtcbiAgICAgIGluZGV4IDwgaGFsZkxlbmd0aDtcblxuICAgICkge1xuICAgICAgdmFyIGxlZnRJbmRleCA9IDIgKiAoaW5kZXggKyAxKSAtIDEsXG4gICAgICAgIGxlZnQgPSBoZWFwW2xlZnRJbmRleF0sXG4gICAgICAgIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxLFxuICAgICAgICByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07XG4gICAgICBpZiAoMCA+IGNvbXBhcmUobGVmdCwgbGFzdCkpXG4gICAgICAgIHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgMCA+IGNvbXBhcmUocmlnaHQsIGxlZnQpXG4gICAgICAgICAgPyAoKGhlYXBbaW5kZXhdID0gcmlnaHQpLFxuICAgICAgICAgICAgKGhlYXBbcmlnaHRJbmRleF0gPSBsYXN0KSxcbiAgICAgICAgICAgIChpbmRleCA9IHJpZ2h0SW5kZXgpKVxuICAgICAgICAgIDogKChoZWFwW2luZGV4XSA9IGxlZnQpLFxuICAgICAgICAgICAgKGhlYXBbbGVmdEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgKGluZGV4ID0gbGVmdEluZGV4KSk7XG4gICAgICBlbHNlIGlmIChyaWdodEluZGV4IDwgbGVuZ3RoICYmIDAgPiBjb21wYXJlKHJpZ2h0LCBsYXN0KSlcbiAgICAgICAgKGhlYXBbaW5kZXhdID0gcmlnaHQpLCAoaGVhcFtyaWdodEluZGV4XSA9IGxhc3QpLCAoaW5kZXggPSByaWdodEluZGV4KTtcbiAgICAgIGVsc2UgYnJlYWsgYTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpcnN0O1xufVxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgcmV0dXJuIDAgIT09IGRpZmYgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG59XG5leHBvcnRzLnVuc3RhYmxlX25vdyA9IHZvaWQgMDtcbmlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2UgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2Uubm93KSB7XG4gIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGUsXG4gICAgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbERhdGUubm93KCkgLSBpbml0aWFsVGltZTtcbiAgfTtcbn1cbnZhciB0YXNrUXVldWUgPSBbXSxcbiAgdGltZXJRdWV1ZSA9IFtdLFxuICB0YXNrSWRDb3VudGVyID0gMSxcbiAgY3VycmVudFRhc2sgPSBudWxsLFxuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IDMsXG4gIGlzUGVyZm9ybWluZ1dvcmsgPSAhMSxcbiAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSAhMSxcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExLFxuICBsb2NhbFNldFRpbWVvdXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzZXRUaW1lb3V0ID8gc2V0VGltZW91dCA6IG51bGwsXG4gIGxvY2FsQ2xlYXJUaW1lb3V0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2xlYXJUaW1lb3V0ID8gY2xlYXJUaW1lb3V0IDogbnVsbCxcbiAgbG9jYWxTZXRJbW1lZGlhdGUgPSBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2Ygc2V0SW1tZWRpYXRlID8gc2V0SW1tZWRpYXRlIDogbnVsbDtcbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgZm9yICh2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpOyBudWxsICE9PSB0aW1lcjsgKSB7XG4gICAgaWYgKG51bGwgPT09IHRpbWVyLmNhbGxiYWNrKSBwb3AodGltZXJRdWV1ZSk7XG4gICAgZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKVxuICAgICAgcG9wKHRpbWVyUXVldWUpLFxuICAgICAgICAodGltZXIuc29ydEluZGV4ID0gdGltZXIuZXhwaXJhdGlvblRpbWUpLFxuICAgICAgICBwdXNoKHRhc2tRdWV1ZSwgdGltZXIpO1xuICAgIGVsc2UgYnJlYWs7XG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5mdW5jdGlvbiBoYW5kbGVUaW1lb3V0KGN1cnJlbnRUaW1lKSB7XG4gIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQpXG4gICAgaWYgKG51bGwgIT09IHBlZWsodGFza1F1ZXVlKSlcbiAgICAgIChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSwgcmVxdWVzdEhvc3RDYWxsYmFjaygpO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICAgICAgbnVsbCAhPT0gZmlyc3RUaW1lciAmJlxuICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxufVxudmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITEsXG4gIHRhc2tUaW1lb3V0SUQgPSAtMSxcbiAgZnJhbWVJbnRlcnZhbCA9IDUsXG4gIHN0YXJ0VGltZSA9IC0xO1xuZnVuY3Rpb24gc2hvdWxkWWllbGRUb0hvc3QoKSB7XG4gIHJldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpIC0gc3RhcnRUaW1lIDwgZnJhbWVJbnRlcnZhbCA/ICExIDogITA7XG59XG5mdW5jdGlvbiBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKSB7XG4gIGlmIChpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgdmFyIGhhc01vcmVXb3JrID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIGE6IHtcbiAgICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSAhMTtcbiAgICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCAmJlxuICAgICAgICAgICgoaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExKSxcbiAgICAgICAgICBsb2NhbENsZWFyVGltZW91dCh0YXNrVGltZW91dElEKSxcbiAgICAgICAgICAodGFza1RpbWVvdXRJRCA9IC0xKSk7XG4gICAgICAgIGlzUGVyZm9ybWluZ1dvcmsgPSAhMDtcbiAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRUYXNrICYmXG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiBzaG91bGRZaWVsZFRvSG9zdCgpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICAgICAgICAgICAgICBoYXNNb3JlV29yayA9ICEwO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPT09IHBlZWsodGFza1F1ZXVlKSAmJiBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50VGFzaykgaGFzTW9yZVdvcmsgPSAhMDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICAgICAgICAgIG51bGwgIT09IGZpcnN0VGltZXIgJiZcbiAgICAgICAgICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICBoYW5kbGVUaW1lb3V0LFxuICAgICAgICAgICAgICAgICAgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGhhc01vcmVXb3JrID0gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgKGN1cnJlbnRUYXNrID0gbnVsbCksXG4gICAgICAgICAgICAoY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWwpLFxuICAgICAgICAgICAgKGlzUGVyZm9ybWluZ1dvcmsgPSAhMSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFzTW9yZVdvcmsgPSB2b2lkIDA7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGhhc01vcmVXb3JrXG4gICAgICAgID8gc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKVxuICAgICAgICA6IChpc01lc3NhZ2VMb29wUnVubmluZyA9ICExKTtcbiAgICB9XG4gIH1cbn1cbnZhciBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcbmlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsb2NhbFNldEltbWVkaWF0ZSlcbiAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgbG9jYWxTZXRJbW1lZGlhdGUocGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKTtcbiAgfTtcbmVsc2UgaWYgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpLFxuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcbiAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgfTtcbn0gZWxzZVxuICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBsb2NhbFNldFRpbWVvdXQocGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lLCAwKTtcbiAgfTtcbmZ1bmN0aW9uIHJlcXVlc3RIb3N0Q2FsbGJhY2soKSB7XG4gIGlzTWVzc2FnZUxvb3BSdW5uaW5nIHx8XG4gICAgKChpc01lc3NhZ2VMb29wUnVubmluZyA9ICEwKSwgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKSk7XG59XG5mdW5jdGlvbiByZXF1ZXN0SG9zdFRpbWVvdXQoY2FsbGJhY2ssIG1zKSB7XG4gIHRhc2tUaW1lb3V0SUQgPSBsb2NhbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGNhbGxiYWNrKGV4cG9ydHMudW5zdGFibGVfbm93KCkpO1xuICB9LCBtcyk7XG59XG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IDU7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbmV4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHkgPSA0O1xuZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IDM7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IG51bGw7XG5leHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGFzaykge1xuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn07XG5leHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gZnVuY3Rpb24gKCkge1xuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCB8fFxuICAgIGlzUGVyZm9ybWluZ1dvcmsgfHxcbiAgICAoKGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITApLCByZXF1ZXN0SG9zdENhbGxiYWNrKCkpO1xufTtcbmV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gIDAgPiBmcHMgfHwgMTI1IDwgZnBzXG4gICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICBcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiXG4gICAgICApXG4gICAgOiAoZnJhbWVJbnRlcnZhbCA9IDAgPCBmcHMgPyBNYXRoLmZsb29yKDFlMyAvIGZwcykgOiA1KTtcbn07XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY3VycmVudFByaW9yaXR5TGV2ZWw7XG59O1xuZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn07XG5leHBvcnRzLnVuc3RhYmxlX25leHQgPSBmdW5jdGlvbiAoZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMzpcbiAgICAgIHZhciBwcmlvcml0eUxldmVsID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIH1cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59O1xuZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IGZ1bmN0aW9uICgpIHt9O1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSBmdW5jdGlvbiAoKSB7fTtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gZnVuY3Rpb24gKHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMzpcbiAgICBjYXNlIDQ6XG4gICAgY2FzZSA1OlxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSAzO1xuICB9XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IGZ1bmN0aW9uIChcbiAgcHJpb3JpdHlMZXZlbCxcbiAgY2FsbGJhY2ssXG4gIG9wdGlvbnNcbikge1xuICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiBudWxsICE9PSBvcHRpb25zXG4gICAgPyAoKG9wdGlvbnMgPSBvcHRpb25zLmRlbGF5KSxcbiAgICAgIChvcHRpb25zID1cbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgMCA8IG9wdGlvbnNcbiAgICAgICAgICA/IGN1cnJlbnRUaW1lICsgb3B0aW9uc1xuICAgICAgICAgIDogY3VycmVudFRpbWUpKVxuICAgIDogKG9wdGlvbnMgPSBjdXJyZW50VGltZSk7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHZhciB0aW1lb3V0ID0gLTE7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB0aW1lb3V0ID0gMjUwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdGltZW91dCA9IDEwNzM3NDE4MjM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICB0aW1lb3V0ID0gMWU0O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRpbWVvdXQgPSA1ZTM7XG4gIH1cbiAgdGltZW91dCA9IG9wdGlvbnMgKyB0aW1lb3V0O1xuICBwcmlvcml0eUxldmVsID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBvcHRpb25zLFxuICAgIGV4cGlyYXRpb25UaW1lOiB0aW1lb3V0LFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcbiAgb3B0aW9ucyA+IGN1cnJlbnRUaW1lXG4gICAgPyAoKHByaW9yaXR5TGV2ZWwuc29ydEluZGV4ID0gb3B0aW9ucyksXG4gICAgICBwdXNoKHRpbWVyUXVldWUsIHByaW9yaXR5TGV2ZWwpLFxuICAgICAgbnVsbCA9PT0gcGVlayh0YXNrUXVldWUpICYmXG4gICAgICAgIHByaW9yaXR5TGV2ZWwgPT09IHBlZWsodGltZXJRdWV1ZSkgJiZcbiAgICAgICAgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWRcbiAgICAgICAgICA/IChsb2NhbENsZWFyVGltZW91dCh0YXNrVGltZW91dElEKSwgKHRhc2tUaW1lb3V0SUQgPSAtMSkpXG4gICAgICAgICAgOiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIG9wdGlvbnMgLSBjdXJyZW50VGltZSkpKVxuICAgIDogKChwcmlvcml0eUxldmVsLnNvcnRJbmRleCA9IHRpbWVvdXQpLFxuICAgICAgcHVzaCh0YXNrUXVldWUsIHByaW9yaXR5TGV2ZWwpLFxuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgfHxcbiAgICAgICAgaXNQZXJmb3JtaW5nV29yayB8fFxuICAgICAgICAoKGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITApLCByZXF1ZXN0SG9zdENhbGxiYWNrKCkpKTtcbiAgcmV0dXJuIHByaW9yaXR5TGV2ZWw7XG59O1xuZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IHNob3VsZFlpZWxkVG9Ib3N0O1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgfVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIlxudmFyIE1BQ0hJTkVfSUQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAweEZGRkZGRik7XG52YXIgaW5kZXggPSBPYmplY3RJRC5pbmRleCA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAweEZGRkZGRiwgMTApO1xudmFyIHBpZCA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHByb2Nlc3MucGlkICE9PSAnbnVtYmVyJyA/IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMCkgOiBwcm9jZXNzLnBpZCkgJSAweEZGRkY7XG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL3dpbGxpYW1rYXBrZS9ic29uLW9iamVjdGlkL3B1bGwvNTE+XG4vLyBBdHRlbXB0IHRvIGZhbGxiYWNrIEJ1ZmZlciBpZiBfQnVmZmVyIGlzIHVuZGVmaW5lZCAoZS5nLiBmb3IgTm9kZS5qcykuXG4vLyBXb3JzdCBjYXNlIGZhbGxiYWNrIHRvIG51bGwgYW5kIGhhbmRsZSB3aXRoIG51bGwgY2hlY2tpbmcgYmVmb3JlIHVzaW5nLlxudmFyIEJ1ZmZlckN0ciA9ICgoKSA9PiB7IHRyeSB7IHJldHVybiBfQnVmZmVyOyB9Y2F0Y2goXyl7IHRyeXsgcmV0dXJuIEJ1ZmZlcjsgfWNhdGNoKF8peyByZXR1cm4gbnVsbDsgfSB9IH0pKCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBCdWZmZXJcbiAqXG4gKiBBdXRob3I6ICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIExpY2Vuc2U6ICBNSVRcbiAqXG4gKi9cbnZhciBpc0J1ZmZlciA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuICEhKFxuICBvYmogIT0gbnVsbCAmJlxuICBvYmouY29uc3RydWN0b3IgJiZcbiAgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxuICApXG59O1xuXG4vLyBQcmVjb21wdXRlZCBoZXggdGFibGUgZW5hYmxlcyBzcGVlZHkgaGV4IHN0cmluZyBjb252ZXJzaW9uXG52YXIgaGV4VGFibGUgPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgaGV4VGFibGVbaV0gPSAoaSA8PSAxNSA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpO1xufVxuXG4vLyBSZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBjaGVja3MgZm9yIGhleCB2YWx1ZVxudmFyIGNoZWNrRm9ySGV4UmVnRXhwID0gbmV3IFJlZ0V4cCgnXlswLTlhLWZBLUZdezI0fSQnKTtcblxuLy8gTG9va3VwIHRhYmxlc1xudmFyIGRlY29kZUxvb2t1cCA9IFtdO1xuaSA9IDA7XG53aGlsZSAoaSA8IDEwKSBkZWNvZGVMb29rdXBbMHgzMCArIGldID0gaSsrO1xud2hpbGUgKGkgPCAxNikgZGVjb2RlTG9va3VwWzB4NDEgLSAxMCArIGldID0gZGVjb2RlTG9va3VwWzB4NjEgLSAxMCArIGldID0gaSsrO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbW11dGFibGUgT2JqZWN0SUQgaW5zdGFuY2VcbiAqXG4gKiBAY2xhc3MgUmVwcmVzZW50cyB0aGUgQlNPTiBPYmplY3RJRCB0eXBlXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGlkIENhbiBiZSBhIDI0IGJ5dGUgaGV4IHN0cmluZywgMTIgYnl0ZSBiaW5hcnkgc3RyaW5nIG9yIGEgTnVtYmVyLlxuICogQHJldHVybiB7T2JqZWN0fSBpbnN0YW5jZSBvZiBPYmplY3RJRC5cbiAqL1xuZnVuY3Rpb24gT2JqZWN0SUQoaWQpIHtcbiAgaWYoISh0aGlzIGluc3RhbmNlb2YgT2JqZWN0SUQpKSByZXR1cm4gbmV3IE9iamVjdElEKGlkKTtcbiAgaWYoaWQgJiYgKChpZCBpbnN0YW5jZW9mIE9iamVjdElEKSB8fCBpZC5fYnNvbnR5cGU9PT1cIk9iamVjdElEXCIpKVxuICAgIHJldHVybiBpZDtcblxuICB0aGlzLl9ic29udHlwZSA9ICdPYmplY3RJRCc7XG5cbiAgLy8gVGhlIG1vc3QgY29tbW9uIHVzZWNhc2UgKGJsYW5rIGlkLCBuZXcgb2JqZWN0SWQgaW5zdGFuY2UpXG4gIGlmIChpZCA9PSBudWxsIHx8IHR5cGVvZiBpZCA9PT0gJ251bWJlcicpIHtcbiAgICAvLyBHZW5lcmF0ZSBhIG5ldyBpZFxuICAgIHRoaXMuaWQgPSB0aGlzLmdlbmVyYXRlKGlkKTtcbiAgICAvLyBSZXR1cm4gdGhlIG9iamVjdFxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwYXNzZWQgaW4gaWQgaXMgdmFsaWRcbiAgdmFyIHZhbGlkID0gT2JqZWN0SUQuaXNWYWxpZChpZCk7XG5cbiAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QgYSB2YWxpZCBzZXR1cFxuICBpZiAoIXZhbGlkICYmIGlkICE9IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQXJndW1lbnQgcGFzc2VkIGluIG11c3QgYmUgYSBzaW5nbGUgU3RyaW5nIG9mIDEyIGJ5dGVzIG9yIGEgc3RyaW5nIG9mIDI0IGhleCBjaGFyYWN0ZXJzJ1xuICAgICk7XG4gIH0gZWxzZSBpZiAodmFsaWQgJiYgdHlwZW9mIGlkID09PSAnc3RyaW5nJyAmJiBpZC5sZW5ndGggPT09IDI0KSB7XG4gICAgcmV0dXJuIE9iamVjdElELmNyZWF0ZUZyb21IZXhTdHJpbmcoaWQpO1xuICB9IGVsc2UgaWYgKGlkICE9IG51bGwgJiYgaWQubGVuZ3RoID09PSAxMikge1xuICAgIC8vIGFzc3VtZSAxMiBieXRlIHN0cmluZ1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgfSBlbHNlIGlmIChpZCAhPSBudWxsICYmIHR5cGVvZiBpZC50b0hleFN0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIER1Y2stdHlwaW5nIHRvIHN1cHBvcnQgT2JqZWN0SWQgZnJvbSBkaWZmZXJlbnQgbnBtIHBhY2thZ2VzXG4gICAgcmV0dXJuIGlkO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdBcmd1bWVudCBwYXNzZWQgaW4gbXVzdCBiZSBhIHNpbmdsZSBTdHJpbmcgb2YgMTIgYnl0ZXMgb3IgYSBzdHJpbmcgb2YgMjQgaGV4IGNoYXJhY3RlcnMnXG4gICAgKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3RJRDtcbk9iamVjdElELmRlZmF1bHQgPSBPYmplY3RJRDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIE9iamVjdElEIGZyb20gYSBzZWNvbmQgYmFzZWQgbnVtYmVyLCB3aXRoIHRoZSByZXN0IG9mIHRoZSBPYmplY3RJRCB6ZXJvZWQgb3V0LiBVc2VkIGZvciBjb21wYXJpc29ucyBvciBzb3J0aW5nIHRoZSBPYmplY3RJRC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gdGltZSBhbiBpbnRlZ2VyIG51bWJlciByZXByZXNlbnRpbmcgYSBudW1iZXIgb2Ygc2Vjb25kcy5cbiAqIEByZXR1cm4ge09iamVjdElEfSByZXR1cm4gdGhlIGNyZWF0ZWQgT2JqZWN0SURcbiAqIEBhcGkgcHVibGljXG4gKi9cbk9iamVjdElELmNyZWF0ZUZyb21UaW1lID0gZnVuY3Rpb24odGltZSl7XG4gIHRpbWUgPSBwYXJzZUludCh0aW1lLCAxMCkgJSAweEZGRkZGRkZGO1xuICByZXR1cm4gbmV3IE9iamVjdElEKGhleCg4LHRpbWUpK1wiMDAwMDAwMDAwMDAwMDAwMFwiKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBPYmplY3RJRCBmcm9tIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBPYmplY3RJRC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGV4U3RyaW5nIGNyZWF0ZSBhIE9iamVjdElEIGZyb20gYSBwYXNzZWQgaW4gMjQgYnl0ZSBoZXhzdHJpbmcuXG4gKiBAcmV0dXJuIHtPYmplY3RJRH0gcmV0dXJuIHRoZSBjcmVhdGVkIE9iamVjdElEXG4gKiBAYXBpIHB1YmxpY1xuICovXG5PYmplY3RJRC5jcmVhdGVGcm9tSGV4U3RyaW5nID0gZnVuY3Rpb24oaGV4U3RyaW5nKSB7XG4gIC8vIFRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90IGEgdmFsaWQgc2V0dXBcbiAgaWYgKHR5cGVvZiBoZXhTdHJpbmcgPT09ICd1bmRlZmluZWQnIHx8IChoZXhTdHJpbmcgIT0gbnVsbCAmJiBoZXhTdHJpbmcubGVuZ3RoICE9PSAyNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQXJndW1lbnQgcGFzc2VkIGluIG11c3QgYmUgYSBzaW5nbGUgU3RyaW5nIG9mIDEyIGJ5dGVzIG9yIGEgc3RyaW5nIG9mIDI0IGhleCBjaGFyYWN0ZXJzJ1xuICAgICk7XG4gIH1cblxuICAvLyBDYWxjdWxhdGUgbGVuZ3Roc1xuICB2YXIgZGF0YSA9ICcnO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCAyNCkge1xuICAgIGRhdGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoZGVjb2RlTG9va3VwW2hleFN0cmluZy5jaGFyQ29kZUF0KGkrKyldIDw8IDQpIHwgZGVjb2RlTG9va3VwW2hleFN0cmluZy5jaGFyQ29kZUF0KGkrKyldKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgT2JqZWN0SUQoZGF0YSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgYnNvbiBPYmplY3RJZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBvYmplY3RpZCBDYW4gYmUgYSAyNCBieXRlIGhleCBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgT2JqZWN0SUQuXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBic29uIE9iamVjdElELCByZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGFwaSBwdWJsaWNcbiAqXG4gKiBUSEUgTkFUSVZFIERPQ1VNRU5UQVRJT04gSVNOJ1QgQ0xFQVIgT04gVEhJUyBHVVkhXG4gKiBodHRwOi8vbW9uZ29kYi5naXRodWIuaW8vbm9kZS1tb25nb2RiLW5hdGl2ZS9hcGktYnNvbi1nZW5lcmF0ZWQvb2JqZWN0aWQuaHRtbCNvYmplY3RpZC1pc3ZhbGlkXG4gKi9cbk9iamVjdElELmlzVmFsaWQgPSBmdW5jdGlvbihpZCkge1xuICBpZiAoaWQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaWQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpZC5sZW5ndGggPT09IDEyIHx8IChpZC5sZW5ndGggPT09IDI0ICYmIGNoZWNrRm9ySGV4UmVnRXhwLnRlc3QoaWQpKTtcbiAgfVxuXG4gIGlmIChpZCBpbnN0YW5jZW9mIE9iamVjdElEKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL3dpbGxpYW1rYXBrZS9ic29uLW9iamVjdGlkL2lzc3Vlcy81Mz5cbiAgaWYgKGlzQnVmZmVyKGlkKSkge1xuICAgIHJldHVybiBPYmplY3RJRC5pc1ZhbGlkKGlkLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICAvLyBEdWNrLVR5cGluZyBkZXRlY3Rpb24gb2YgT2JqZWN0SWQgbGlrZSBvYmplY3RzXG4gIC8vIDxodHRwczovL2dpdGh1Yi5jb20vd2lsbGlhbWthcGtlL2Jzb24tb2JqZWN0aWQvcHVsbC81MT5cbiAgaWYgKHR5cGVvZiBpZC50b0hleFN0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmKFxuICAgICAgQnVmZmVyQ3RyICYmXG4gICAgICAoaWQuaWQgaW5zdGFuY2VvZiBCdWZmZXJDdHIgfHwgdHlwZW9mIGlkLmlkID09PSAnc3RyaW5nJylcbiAgICApIHtcbiAgICAgIHJldHVybiBpZC5pZC5sZW5ndGggPT09IDEyIHx8IChpZC5pZC5sZW5ndGggPT09IDI0ICYmIGNoZWNrRm9ySGV4UmVnRXhwLnRlc3QoaWQuaWQpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5PYmplY3RJRC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBPYmplY3RJRCxcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBPYmplY3RJRCBpZCBhcyBhIDI0IGJ5dGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybiB0aGUgMjQgYnl0ZSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cbiAgdG9IZXhTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5pZCB8fCAhdGhpcy5pZC5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2ludmFsaWQgT2JqZWN0SWQsIE9iamVjdElkLmlkIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgQnVmZmVyLCBidXQgaXMgWycgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuaWQpICtcbiAgICAgICAgICAnXSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWQubGVuZ3RoID09PSAyNCkge1xuICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgaWYgKGlzQnVmZmVyKHRoaXMuaWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5pZC50b1N0cmluZygnaGV4JylcbiAgICB9XG5cbiAgICB2YXIgaGV4U3RyaW5nID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmlkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoZXhTdHJpbmcgKz0gaGV4VGFibGVbdGhpcy5pZC5jaGFyQ29kZUF0KGkpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGV4U3RyaW5nO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGUgZXF1YWxpdHkgb2YgdGhpcyBPYmplY3RJRCB3aXRoIGBvdGhlcklEYC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG90aGVySWQgT2JqZWN0SUQgaW5zdGFuY2UgdG8gY29tcGFyZSBhZ2FpbnN0LlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0aGUgcmVzdWx0IG9mIGNvbXBhcmluZyB0d28gT2JqZWN0SUQnc1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cbiAgZXF1YWxzOiBmdW5jdGlvbiAob3RoZXJJZCl7XG4gICAgaWYgKG90aGVySWQgaW5zdGFuY2VvZiBPYmplY3RJRCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKSA9PT0gb3RoZXJJZC50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2Ygb3RoZXJJZCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIE9iamVjdElELmlzVmFsaWQob3RoZXJJZCkgJiZcbiAgICAgIG90aGVySWQubGVuZ3RoID09PSAxMiAmJlxuICAgICAgaXNCdWZmZXIodGhpcy5pZClcbiAgICApIHtcbiAgICAgIHJldHVybiBvdGhlcklkID09PSB0aGlzLmlkLnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvdGhlcklkID09PSAnc3RyaW5nJyAmJiBPYmplY3RJRC5pc1ZhbGlkKG90aGVySWQpICYmIG90aGVySWQubGVuZ3RoID09PSAyNCkge1xuICAgICAgcmV0dXJuIG90aGVySWQudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy50b0hleFN0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG90aGVySWQgPT09ICdzdHJpbmcnICYmIE9iamVjdElELmlzVmFsaWQob3RoZXJJZCkgJiYgb3RoZXJJZC5sZW5ndGggPT09IDEyKSB7XG4gICAgICByZXR1cm4gb3RoZXJJZCA9PT0gdGhpcy5pZDtcbiAgICB9IGVsc2UgaWYgKG90aGVySWQgIT0gbnVsbCAmJiAob3RoZXJJZCBpbnN0YW5jZW9mIE9iamVjdElEIHx8IG90aGVySWQudG9IZXhTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gb3RoZXJJZC50b0hleFN0cmluZygpID09PSB0aGlzLnRvSGV4U3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdlbmVyYXRpb24gZGF0ZSAoYWNjdXJhdGUgdXAgdG8gdGhlIHNlY29uZCkgdGhhdCB0aGlzIElEIHdhcyBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge0RhdGV9IHRoZSBnZW5lcmF0aW9uIGRhdGVcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG4gIGdldFRpbWVzdGFtcDogZnVuY3Rpb24oKXtcbiAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICB2YXIgdGltZTtcbiAgICBpZiAoaXNCdWZmZXIodGhpcy5pZCkpIHtcbiAgICAgIHRpbWUgPSB0aGlzLmlkWzNdIHwgKHRoaXMuaWRbMl0gPDwgOCkgfCAodGhpcy5pZFsxXSA8PCAxNikgfCAodGhpcy5pZFswXSA8PCAyNCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWUgPSB0aGlzLmlkLmNoYXJDb2RlQXQoMykgfCAodGhpcy5pZC5jaGFyQ29kZUF0KDIpIDw8IDgpIHwgKHRoaXMuaWQuY2hhckNvZGVBdCgxKSA8PCAxNikgfCAodGhpcy5pZC5jaGFyQ29kZUF0KDApIDw8IDI0KTtcbiAgICB9XG4gICAgdGltZXN0YW1wLnNldFRpbWUoTWF0aC5mbG9vcih0aW1lKSAqIDEwMDApO1xuICAgIHJldHVybiB0aW1lc3RhbXA7XG4gIH0sXG5cbiAgLyoqXG4gICogR2VuZXJhdGUgYSAxMiBieXRlIGlkIGJ1ZmZlciB1c2VkIGluIE9iamVjdElEJ3NcbiAgKlxuICAqIEBtZXRob2RcbiAgKiBAcGFyYW0ge251bWJlcn0gW3RpbWVdIG9wdGlvbmFsIHBhcmFtZXRlciBhbGxvd2luZyB0byBwYXNzIGluIGEgc2Vjb25kIGJhc2VkIHRpbWVzdGFtcC5cbiAgKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybiB0aGUgMTIgYnl0ZSBpZCBidWZmZXIgc3RyaW5nLlxuICAqL1xuICBnZW5lcmF0ZTogZnVuY3Rpb24gKHRpbWUpIHtcbiAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aW1lKSB7XG4gICAgICB0aW1lID0gfn4oRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgIH1cblxuICAgIC8va2VlcCBpdCBpbiB0aGUgcmluZyFcbiAgICB0aW1lID0gcGFyc2VJbnQodGltZSwgMTApICUgMHhGRkZGRkZGRjtcblxuICAgIHZhciBpbmMgPSBuZXh0KCk7XG5cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICgodGltZSA+PiAyNCkgJiAweEZGKSxcbiAgICAgICgodGltZSA+PiAxNikgJiAweEZGKSxcbiAgICAgICgodGltZSA+PiA4KSAmIDB4RkYpLFxuICAgICAgKHRpbWUgJiAweEZGKSxcbiAgICAgICgoTUFDSElORV9JRCA+PiAxNikgJiAweEZGKSxcbiAgICAgICgoTUFDSElORV9JRCA+PiA4KSAmIDB4RkYpLFxuICAgICAgKE1BQ0hJTkVfSUQgJiAweEZGKSxcbiAgICAgICgocGlkID4+IDgpICYgMHhGRiksXG4gICAgICAocGlkICYgMHhGRiksXG4gICAgICAoKGluYyA+PiAxNikgJiAweEZGKSxcbiAgICAgICgoaW5jID4+IDgpICYgMHhGRiksXG4gICAgICAoaW5jICYgMHhGRilcbiAgICApXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBuZXh0KCkge1xuICByZXR1cm4gaW5kZXggPSAoaW5kZXgrMSkgJSAweEZGRkZGRjtcbn1cblxuZnVuY3Rpb24gaGV4KGxlbmd0aCwgbikge1xuICBuID0gbi50b1N0cmluZygxNik7XG4gIHJldHVybiAobi5sZW5ndGg9PT1sZW5ndGgpPyBuIDogXCIwMDAwMDAwMFwiLnN1YnN0cmluZyhuLmxlbmd0aCwgbGVuZ3RoKSArIG47XG59XG5cbmZ1bmN0aW9uIGJ1ZmZlcihzdHIpIHtcbiAgdmFyIGk9MCxvdXQ9W107XG5cbiAgaWYoc3RyLmxlbmd0aD09PTI0KVxuICAgIGZvcig7aTwyNDsgb3V0LnB1c2gocGFyc2VJbnQoc3RyW2ldK3N0cltpKzFdLCAxNikpLGkrPTIpO1xuXG4gIGVsc2UgaWYoc3RyLmxlbmd0aD09PTEyKVxuICAgIGZvcig7aTwxMjsgb3V0LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpLGkrKyk7XG5cbiAgcmV0dXJuIG91dDtcbn1cblxudmFyIGluc3BlY3QgPSAoU3ltYm9sICYmIFN5bWJvbC5mb3IgJiYgU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSkgfHwgJ2luc3BlY3QnO1xuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSWQuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm4gdGhlIDI0IGJ5dGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5PYmplY3RJRC5wcm90b3R5cGVbaW5zcGVjdF0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIFwiT2JqZWN0SUQoXCIrdGhpcytcIilcIiB9O1xuT2JqZWN0SUQucHJvdG90eXBlLnRvSlNPTiA9IE9iamVjdElELnByb3RvdHlwZS50b0hleFN0cmluZztcbk9iamVjdElELnByb3RvdHlwZS50b1N0cmluZyA9IE9iamVjdElELnByb3RvdHlwZS50b0hleFN0cmluZztcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwiZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gT2JqZWN0KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xufVxuXG5mdW5jdGlvbiBpc0Jsb2IodmFsdWUsIGlzUmVhY3ROYXRpdmUpIHtcbiAgcmV0dXJuIGlzUmVhY3ROYXRpdmVcbiAgICA/IGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNVbmRlZmluZWQodmFsdWUudXJpKVxuICAgIDogaXNPYmplY3QodmFsdWUpICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJyAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUudHlwZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlLnNsaWNlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc0ZpbGUodmFsdWUsIGlzUmVhY3ROYXRpdmUpIHtcbiAgcmV0dXJuIChcbiAgICBpc0Jsb2IodmFsdWUsIGlzUmVhY3ROYXRpdmUpICYmXG4gICAgdHlwZW9mIHZhbHVlLm5hbWUgPT09ICdzdHJpbmcnICYmXG4gICAgKGlzT2JqZWN0KHZhbHVlLmxhc3RNb2RpZmllZERhdGUpIHx8IHR5cGVvZiB2YWx1ZS5sYXN0TW9kaWZpZWQgPT09ICdudW1iZXInKVxuICApO1xufVxuXG5mdW5jdGlvbiBpbml0Q2ZnKHZhbHVlKSB7XG4gIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgPyBmYWxzZSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUob2JqLCBjZmcsIGZkLCBwcmUpIHtcbiAgY2ZnID0gY2ZnIHx8IHt9O1xuICBmZCA9IGZkIHx8IG5ldyBGb3JtRGF0YSgpO1xuXG4gIGNmZy5pbmRpY2VzID0gaW5pdENmZyhjZmcuaW5kaWNlcyk7XG4gIGNmZy5udWxsc0FzVW5kZWZpbmVkcyA9IGluaXRDZmcoY2ZnLm51bGxzQXNVbmRlZmluZWRzKTtcbiAgY2ZnLmJvb2xlYW5zQXNJbnRlZ2VycyA9IGluaXRDZmcoY2ZnLmJvb2xlYW5zQXNJbnRlZ2Vycyk7XG4gIGNmZy5hbGxvd0VtcHR5QXJyYXlzID0gaW5pdENmZyhjZmcuYWxsb3dFbXB0eUFycmF5cyk7XG4gIGNmZy5ub0F0dHJpYnV0ZXNXaXRoQXJyYXlOb3RhdGlvbiA9IGluaXRDZmcoXG4gICAgY2ZnLm5vQXR0cmlidXRlc1dpdGhBcnJheU5vdGF0aW9uLFxuICApO1xuICBjZmcubm9GaWxlc1dpdGhBcnJheU5vdGF0aW9uID0gaW5pdENmZyhjZmcubm9GaWxlc1dpdGhBcnJheU5vdGF0aW9uKTtcbiAgY2ZnLmRvdHNGb3JPYmplY3ROb3RhdGlvbiA9IGluaXRDZmcoY2ZnLmRvdHNGb3JPYmplY3ROb3RhdGlvbik7XG5cbiAgY29uc3QgaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiBmZC5nZXRQYXJ0cyA9PT0gJ2Z1bmN0aW9uJztcblxuICBpZiAoaXNVbmRlZmluZWQob2JqKSkge1xuICAgIHJldHVybiBmZDtcbiAgfSBlbHNlIGlmIChpc051bGwob2JqKSkge1xuICAgIGlmICghY2ZnLm51bGxzQXNVbmRlZmluZWRzKSB7XG4gICAgICBmZC5hcHBlbmQocHJlLCAnJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQm9vbGVhbihvYmopKSB7XG4gICAgaWYgKGNmZy5ib29sZWFuc0FzSW50ZWdlcnMpIHtcbiAgICAgIGZkLmFwcGVuZChwcmUsIG9iaiA/IDEgOiAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmQuYXBwZW5kKHByZSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgaWYgKG9iai5sZW5ndGgpIHtcbiAgICAgIG9iai5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IHByZSArICdbJyArIChjZmcuaW5kaWNlcyA/IGluZGV4IDogJycpICsgJ10nO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjZmcubm9BdHRyaWJ1dGVzV2l0aEFycmF5Tm90YXRpb24gfHxcbiAgICAgICAgICAoY2ZnLm5vRmlsZXNXaXRoQXJyYXlOb3RhdGlvbiAmJiBpc0ZpbGUodmFsdWUsIGlzUmVhY3ROYXRpdmUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBrZXkgPSBwcmU7XG4gICAgICAgIH1cblxuICAgICAgICBzZXJpYWxpemUodmFsdWUsIGNmZywgZmQsIGtleSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGNmZy5hbGxvd0VtcHR5QXJyYXlzKSB7XG4gICAgICBmZC5hcHBlbmQoY2ZnLm5vQXR0cmlidXRlc1dpdGhBcnJheU5vdGF0aW9uID8gcHJlIDogcHJlICsgJ1tdJywgJycpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0RhdGUob2JqKSkge1xuICAgIGZkLmFwcGVuZChwcmUsIG9iai50b0lTT1N0cmluZygpKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdChvYmopICYmICFpc0Jsb2Iob2JqLCBpc1JlYWN0TmF0aXZlKSkge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcF07XG5cbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB3aGlsZSAocHJvcC5sZW5ndGggPiAyICYmIHByb3AubGFzdEluZGV4T2YoJ1tdJykgPT09IHByb3AubGVuZ3RoIC0gMikge1xuICAgICAgICAgIHByb3AgPSBwcm9wLnN1YnN0cmluZygwLCBwcm9wLmxlbmd0aCAtIDIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHByZVxuICAgICAgICA/IGNmZy5kb3RzRm9yT2JqZWN0Tm90YXRpb25cbiAgICAgICAgICA/IHByZSArICcuJyArIHByb3BcbiAgICAgICAgICA6IHByZSArICdbJyArIHByb3AgKyAnXSdcbiAgICAgICAgOiBwcm9wO1xuXG4gICAgICBzZXJpYWxpemUodmFsdWUsIGNmZywgZmQsIGtleSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZmQuYXBwZW5kKHByZSwgb2JqKTtcbiAgfVxuXG4gIHJldHVybiBmZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNlcmlhbGl6ZSxcbn07XG4iLCIoZnVuY3Rpb24oKSB7XG4gIHZhciBiYXNlNjRtYXBcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxuXG4gIGNyeXB0ID0ge1xuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcbiAgICByb3RsOiBmdW5jdGlvbihuLCBiKSB7XG4gICAgICByZXR1cm4gKG4gPDwgYikgfCAobiA+Pj4gKDMyIC0gYikpO1xuICAgIH0sXG5cbiAgICAvLyBCaXQtd2lzZSByb3RhdGlvbiByaWdodFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcbiAgICAgIHJldHVybiAobiA8PCAoMzIgLSBiKSkgfCAobiA+Pj4gYik7XG4gICAgfSxcblxuICAgIC8vIFN3YXAgYmlnLWVuZGlhbiB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhXG4gICAgZW5kaWFuOiBmdW5jdGlvbihuKSB7XG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXG4gICAgICBpZiAobi5jb25zdHJ1Y3RvciA9PSBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0LnJvdGwobiwgOCkgJiAweDAwRkYwMEZGIHwgY3J5cHQucm90bChuLCAyNCkgJiAweEZGMDBGRjAwO1xuICAgICAgfVxuXG4gICAgICAvLyBFbHNlLCBhc3N1bWUgYXJyYXkgYW5kIHN3YXAgYWxsIGl0ZW1zXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXG4gICAgICAgIG5baV0gPSBjcnlwdC5lbmRpYW4obltpXSk7XG4gICAgICByZXR1cm4gbjtcbiAgICB9LFxuXG4gICAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgYW55IGxlbmd0aCBvZiByYW5kb20gYnl0ZXNcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXTsgbiA+IDA7IG4tLSlcbiAgICAgICAgYnl0ZXMucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpKTtcbiAgICAgIHJldHVybiBieXRlcztcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcbiAgICBieXRlc1RvV29yZHM6IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBmb3IgKHZhciB3b3JkcyA9IFtdLCBpID0gMCwgYiA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKywgYiArPSA4KVxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xuICAgICAgcmV0dXJuIHdvcmRzO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGJpZy1lbmRpYW4gMzItYml0IHdvcmRzIHRvIGEgYnl0ZSBhcnJheVxuICAgIHdvcmRzVG9CeXRlczogZnVuY3Rpb24od29yZHMpIHtcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcbiAgICAgICAgYnl0ZXMucHVzaCgod29yZHNbYiA+Pj4gNV0gPj4+ICgyNCAtIGIgJSAzMikpICYgMHhGRik7XG4gICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfSxcblxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgaGV4IHN0cmluZ1xuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBmb3IgKHZhciBoZXggPSBbXSwgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBoZXgucHVzaCgoYnl0ZXNbaV0gPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoZXguam9pbignJyk7XG4gICAgfSxcblxuICAgIC8vIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgYyA9IDA7IGMgPCBoZXgubGVuZ3RoOyBjICs9IDIpXG4gICAgICAgIGJ5dGVzLnB1c2gocGFyc2VJbnQoaGV4LnN1YnN0cihjLCAyKSwgMTYpKTtcbiAgICAgIHJldHVybiBieXRlcztcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xuICAgIGJ5dGVzVG9CYXNlNjQ6IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBmb3IgKHZhciBiYXNlNjQgPSBbXSwgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgICAgICBpZiAoaSAqIDggKyBqICogNiA8PSBieXRlcy5sZW5ndGggKiA4KVxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJhc2U2NC5wdXNoKCc9Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZTY0LmpvaW4oJycpO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGEgYmFzZS02NCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XG4gICAgYmFzZTY0VG9CeXRlczogZnVuY3Rpb24oYmFzZTY0KSB7XG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xuICAgICAgYmFzZTY0ID0gYmFzZTY0LnJlcGxhY2UoL1teQS1aMC05K1xcL10vaWcsICcnKTtcblxuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgaSA9IDAsIGltb2Q0ID0gMDsgaSA8IGJhc2U2NC5sZW5ndGg7XG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XG4gICAgICAgIGlmIChpbW9kNCA9PSAwKSBjb250aW51ZTtcbiAgICAgICAgYnl0ZXMucHVzaCgoKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSAtIDEpKVxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxuICAgICAgICAgICAgfCAoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpKSkgPj4+ICg2IC0gaW1vZDQgKiAyKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH1cbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGNyeXB0O1xufSkoKTtcbiIsInZhciBjaGFyZW5jID0ge1xuICAvLyBVVEYtOCBlbmNvZGluZ1xuICB1dGY4OiB7XG4gICAgLy8gQ29udmVydCBhIHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBjaGFyZW5jLmJpbi5zdHJpbmdUb0J5dGVzKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKSk7XG4gICAgfSxcblxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXG4gICAgYnl0ZXNUb1N0cmluZzogZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEJpbmFyeSBlbmNvZGluZ1xuICBiaW46IHtcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxuICAgIHN0cmluZ1RvQnl0ZXM6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcbiAgICAgIHJldHVybiBieXRlcztcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBzdHJpbmdcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHN0ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pKTtcbiAgICAgIHJldHVybiBzdHIuam9pbignJyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNoYXJlbmM7XG4iLCIvKiFcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXJcbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbi8vIFRoZSBfaXNCdWZmZXIgY2hlY2sgaXMgZm9yIFNhZmFyaSA1LTcgc3VwcG9ydCwgYmVjYXVzZSBpdCdzIG1pc3Npbmdcbi8vIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgKGlzQnVmZmVyKG9iaikgfHwgaXNTbG93QnVmZmVyKG9iaikgfHwgISFvYmouX2lzQnVmZmVyKVxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiAhIW9iai5jb25zdHJ1Y3RvciAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXG59XG5cbi8vIEZvciBOb2RlIHYwLjEwIHN1cHBvcnQuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHkuXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iai5yZWFkRmxvYXRMRSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLnNsaWNlID09PSAnZnVuY3Rpb24nICYmIGlzQnVmZmVyKG9iai5zbGljZSgwLCAwKSlcbn1cbiIsIihmdW5jdGlvbigpe1xyXG4gIHZhciBjcnlwdCA9IHJlcXVpcmUoJ2NyeXB0JyksXHJcbiAgICAgIHV0ZjggPSByZXF1aXJlKCdjaGFyZW5jJykudXRmOCxcclxuICAgICAgaXNCdWZmZXIgPSByZXF1aXJlKCdpcy1idWZmZXInKSxcclxuICAgICAgYmluID0gcmVxdWlyZSgnY2hhcmVuYycpLmJpbixcclxuXHJcbiAgLy8gVGhlIGNvcmVcclxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xyXG4gICAgLy8gQ29udmVydCB0byBieXRlIGFycmF5XHJcbiAgICBpZiAobWVzc2FnZS5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpXHJcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxyXG4gICAgICAgIG1lc3NhZ2UgPSBiaW4uc3RyaW5nVG9CeXRlcyhtZXNzYWdlKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XHJcbiAgICBlbHNlIGlmIChpc0J1ZmZlcihtZXNzYWdlKSlcclxuICAgICAgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG1lc3NhZ2UsIDApO1xyXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkgJiYgbWVzc2FnZS5jb25zdHJ1Y3RvciAhPT0gVWludDhBcnJheSlcclxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcclxuICAgIC8vIGVsc2UsIGFzc3VtZSBieXRlIGFycmF5IGFscmVhZHlcclxuXHJcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcclxuICAgICAgICBsID0gbWVzc2FnZS5sZW5ndGggKiA4LFxyXG4gICAgICAgIGEgPSAgMTczMjU4NDE5MyxcclxuICAgICAgICBiID0gLTI3MTczMzg3OSxcclxuICAgICAgICBjID0gLTE3MzI1ODQxOTQsXHJcbiAgICAgICAgZCA9ICAyNzE3MzM4Nzg7XHJcblxyXG4gICAgLy8gU3dhcCBlbmRpYW5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XHJcbiAgICAgICAgICAgICAoKG1baV0gPDwgMjQpIHwgKG1baV0gPj4+ICA4KSkgJiAweEZGMDBGRjAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhZGRpbmdcclxuICAgIG1bbCA+Pj4gNV0gfD0gMHg4MCA8PCAobCAlIDMyKTtcclxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xyXG5cclxuICAgIC8vIE1ldGhvZCBzaG9ydGN1dHNcclxuICAgIHZhciBGRiA9IG1kNS5fZmYsXHJcbiAgICAgICAgR0cgPSBtZDUuX2dnLFxyXG4gICAgICAgIEhIID0gbWQ1Ll9oaCxcclxuICAgICAgICBJSSA9IG1kNS5faWk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSArPSAxNikge1xyXG5cclxuICAgICAgdmFyIGFhID0gYSxcclxuICAgICAgICAgIGJiID0gYixcclxuICAgICAgICAgIGNjID0gYyxcclxuICAgICAgICAgIGRkID0gZDtcclxuXHJcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XHJcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDFdLCAxMiwgLTM4OTU2NDU4Nik7XHJcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krIDJdLCAxNywgIDYwNjEwNTgxOSk7XHJcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xyXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyA0XSwgIDcsIC0xNzY0MTg4OTcpO1xyXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKyA1XSwgMTIsICAxMjAwMDgwNDI2KTtcclxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XHJcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDddLCAyMiwgLTQ1NzA1OTgzKTtcclxuICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1baSsgOF0sICA3LCAgMTc3MDAzNTQxNik7XHJcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xyXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTcsIC00MjA2Myk7XHJcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xyXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcclxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsxM10sIDEyLCAtNDAzNDExMDEpO1xyXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKzE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcclxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XHJcblxyXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKyAxXSwgIDUsIC0xNjU3OTY1MTApO1xyXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcclxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxMV0sIDE0LCAgNjQzNzE3NzEzKTtcclxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgMF0sIDIwLCAtMzczODk3MzAyKTtcclxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcclxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxMF0sICA5LCAgMzgwMTYwODMpO1xyXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzE1XSwgMTQsIC02NjA0NzgzMzUpO1xyXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xyXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKyA5XSwgIDUsICA1Njg0NDY0MzgpO1xyXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzE0XSwgIDksIC0xMDE5ODAzNjkwKTtcclxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcclxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XHJcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krMTNdLCAgNSwgLTE0NDQ2ODE0NjcpO1xyXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XHJcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xyXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKzEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcclxuXHJcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDVdLCAgNCwgLTM3ODU1OCk7XHJcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xyXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcclxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsxNF0sIDIzLCAtMzUzMDk1NTYpO1xyXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKyAxXSwgIDQsIC0xNTMwOTkyMDYwKTtcclxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XHJcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krIDddLCAxNiwgLTE1NTQ5NzYzMik7XHJcbiAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBtW2krMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xyXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xyXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyAwXSwgMTEsIC0zNTg1MzcyMjIpO1xyXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xyXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XHJcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDldLCAgNCwgLTY0MDM2NDQ4Nyk7XHJcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krMTJdLCAxMSwgLTQyMTgxNTgzNSk7XHJcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XHJcbiAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBtW2krIDJdLCAyMywgLTk5NTMzODY1MSk7XHJcblxyXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xyXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyA3XSwgMTAsICAxMTI2ODkxNDE1KTtcclxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE1LCAtMTQxNjM1NDkwNSk7XHJcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcclxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsxMl0sICA2LCAgMTcwMDQ4NTU3MSk7XHJcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xyXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcclxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsgMV0sIDIxLCAtMjA1NDkyMjc5OSk7XHJcbiAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW2krIDhdLCAgNiwgIDE4NzMzMTMzNTkpO1xyXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XHJcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krIDZdLCAxNSwgLTE1NjAxOTgzODApO1xyXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKzEzXSwgMjEsICAxMzA5MTUxNjQ5KTtcclxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcclxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XHJcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krIDJdLCAxNSwgIDcxODc4NzI1OSk7XHJcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XHJcblxyXG4gICAgICBhID0gKGEgKyBhYSkgPj4+IDA7XHJcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcclxuICAgICAgYyA9IChjICsgY2MpID4+PiAwO1xyXG4gICAgICBkID0gKGQgKyBkZCkgPj4+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNyeXB0LmVuZGlhbihbYSwgYiwgYywgZF0pO1xyXG4gIH07XHJcblxyXG4gIC8vIEF1eGlsaWFyeSBmdW5jdGlvbnNcclxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XHJcbiAgICB2YXIgbiA9IGEgKyAoYiAmIGMgfCB+YiAmIGQpICsgKHggPj4+IDApICsgdDtcclxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XHJcbiAgfTtcclxuICBtZDUuX2dnICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XHJcbiAgICB2YXIgbiA9IGEgKyAoYiAmIGQgfCBjICYgfmQpICsgKHggPj4+IDApICsgdDtcclxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XHJcbiAgfTtcclxuICBtZDUuX2hoICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XHJcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XHJcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xyXG4gIH07XHJcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgdmFyIG4gPSBhICsgKGMgXiAoYiB8IH5kKSkgKyAoeCA+Pj4gMCkgKyB0O1xyXG4gICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcclxuICB9O1xyXG5cclxuICAvLyBQYWNrYWdlIHByaXZhdGUgYmxvY2tzaXplXHJcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcclxuICBtZDUuX2RpZ2VzdHNpemUgPSAxNjtcclxuXHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKG1lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlID09PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQgJyArIG1lc3NhZ2UpO1xyXG5cclxuICAgIHZhciBkaWdlc3RieXRlcyA9IGNyeXB0LndvcmRzVG9CeXRlcyhtZDUobWVzc2FnZSwgb3B0aW9ucykpO1xyXG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5hc0J5dGVzID8gZGlnZXN0Ynl0ZXMgOlxyXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XHJcbiAgICAgICAgY3J5cHQuYnl0ZXNUb0hleChkaWdlc3RieXRlcyk7XHJcbiAgfTtcclxuXHJcbn0pKCk7XHJcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFJvd0xhYmVsUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBSb3dMYWJlbFByb3ZpZGVyIH0gZnJvbSAnLi9Db250ZXh0L2luZGV4LmpzJ1xuZXhwb3J0IHR5cGUgeyBSb3dMYWJlbFByb3BzIH1cblxuY29uc3QgYmFzZUNsYXNzID0gJ3Jvdy1sYWJlbCdcblxuZXhwb3J0IGNvbnN0IFJvd0xhYmVsOiBSZWFjdC5GQzxSb3dMYWJlbFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgQ3VzdG9tQ29tcG9uZW50LCBsYWJlbCwgcGF0aCwgcm93TnVtYmVyIH0gPSBwcm9wc1xuXG4gIHJldHVybiAoXG4gICAgPFJvd0xhYmVsUHJvdmlkZXIgcGF0aD17cGF0aH0gcm93TnVtYmVyPXtyb3dOdW1iZXJ9PlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0N1c3RvbUNvbXBvbmVudH1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgPyAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgbGFiZWxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgPC9Sb3dMYWJlbFByb3ZpZGVyPlxuICApXG59XG4iLCJ0eXBlIEFyZ3MgPSB7XG4gIEN1c3RvbUNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZVxuICBGYWxsYmFjazogUmVhY3QuUmVhY3ROb2RlXG59XG5cbi8qKlxuICogUmVuZGVycyBhIEN1c3RvbUNvbXBvbmVudCBvciBhIEZhbGxiYWNrIGNvbXBvbmVudC5cbiAqIE9ubHkgZmFsbGJhY2sgaWYgdGhlIEN1c3RvbSBDb21wb25lbnQgaXMgdW5kZWZpbmVkLlxuICpcbiAqIElmIHRoZSBDdXN0b21Db21wb25lbnQgaXMgbnVsbCwgcmVuZGVyIG51bGwuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWFjdC5SZWFjdE5vZGV9IFthcmdzLkN1c3RvbUNvbXBvbmVudF0gLSBPcHRpb25hbCBjdXN0b20gY29tcG9uZW50IHRvIHJlbmRlci5cbiAqIEBwYXJhbSB7UmVhY3QuUmVhY3ROb2RlfSBhcmdzLkZhbGxiYWNrIC0gRmFsbGJhY2sgY29tcG9uZW50IHRvIHJlbmRlciBpZiBDdXN0b21Db21wb25lbnQgaXMgdW5kZWZpbmVkLlxuICogQHJldHVybnMge1JlYWN0LlJlYWN0Tm9kZX0gUmVuZGVyZWQgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gUmVuZGVyQ3VzdG9tQ29tcG9uZW50KHsgQ3VzdG9tQ29tcG9uZW50LCBGYWxsYmFjayB9OiBBcmdzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIEN1c3RvbUNvbXBvbmVudCAhPT0gdW5kZWZpbmVkID8gQ3VzdG9tQ29tcG9uZW50IDogRmFsbGJhY2tcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVdhdGNoRm9ybSB9IGZyb20gJy4uLy4uL0Zvcm0vY29udGV4dC5qcydcblxudHlwZSBSb3dMYWJlbFR5cGU8VCA9IHVua25vd24+ID0ge1xuICByZWFkb25seSBkYXRhOiBUXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZ1xuICByZWFkb25seSByb3dOdW1iZXI/OiBudW1iZXJcbn1cblxuY29uc3QgUm93TGFiZWwgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFJvd0xhYmVsVHlwZT4oe1xuICBkYXRhOiB7fSxcbiAgcGF0aDogJycsXG4gIHJvd051bWJlcjogdW5kZWZpbmVkLFxufSlcblxudHlwZSBQcm9wczxUPiA9IHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufSAmIE9taXQ8Um93TGFiZWxUeXBlPFQ+LCAnZGF0YSc+XG5cbmV4cG9ydCBjb25zdCBSb3dMYWJlbFByb3ZpZGVyOiBSZWFjdC5GQzxQcm9wczx1bmtub3duPj4gPSAoeyBjaGlsZHJlbiwgcGF0aCwgcm93TnVtYmVyIH0pID0+IHtcbiAgY29uc3QgeyBnZXREYXRhQnlQYXRoLCBnZXRTaWJsaW5nRGF0YSB9ID0gdXNlV2F0Y2hGb3JtKClcbiAgY29uc3QgY29sbGFwc2libGVEYXRhID0gZ2V0U2libGluZ0RhdGEocGF0aClcbiAgY29uc3QgYXJyYXlEYXRhID0gZ2V0RGF0YUJ5UGF0aChwYXRoKVxuXG4gIGNvbnN0IGRhdGEgPSBhcnJheURhdGEgfHwgY29sbGFwc2libGVEYXRhXG5cbiAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoeyBkYXRhLCBwYXRoLCByb3dOdW1iZXIgfSksIFtkYXRhLCBwYXRoLCByb3dOdW1iZXJdKVxuXG4gIHJldHVybiA8Um93TGFiZWwgdmFsdWU9e2NvbnRleHRWYWx1ZX0+e2NoaWxkcmVufTwvUm93TGFiZWw+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VSb3dMYWJlbCA9IDxULD4oKSA9PiB7XG4gIHJldHVybiBSZWFjdC51c2UoUm93TGFiZWwpIGFzIFJvd0xhYmVsVHlwZTxUPlxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFJlbmRlcmVkRmllbGQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2UgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNyZWF0ZUNvbnRleHQgYXMgY3JlYXRlU2VsZWN0b3JDb250ZXh0LFxuICB1c2VDb250ZXh0U2VsZWN0b3IsXG4gIHVzZUNvbnRleHQgYXMgdXNlRnVsbENvbnRleHQsXG59IGZyb20gJ3VzZS1jb250ZXh0LXNlbGVjdG9yJ1xuXG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIEZvcm1GaWVsZHNDb250ZXh0IGFzIEZvcm1GaWVsZHNDb250ZXh0VHlwZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmNvbnN0IEZvcm1Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSBhcyBDb250ZXh0KVxuY29uc3QgRG9jdW1lbnRGb3JtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30gYXMgQ29udGV4dClcbmNvbnN0IEZvcm1XYXRjaENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9IGFzIENvbnRleHQpXG5jb25zdCBTdWJtaXR0ZWRDb250ZXh0ID0gY3JlYXRlQ29udGV4dChmYWxzZSlcbmNvbnN0IFByb2Nlc3NpbmdDb250ZXh0ID0gY3JlYXRlQ29udGV4dChmYWxzZSlcbi8qKlxuICogSWYgdGhlIGZvcm0gaGFzIHN0YXJ0ZWQgcHJvY2Vzc2luZyBpbiB0aGUgYmFja2dyb3VuZCAoZS5nLlxuICogaWYgYXV0b3NhdmUgaXMgcnVubmluZyksIHRoaXMgd2lsbCBiZSB0cnVlLlxuICovXG5jb25zdCBCYWNrZ3JvdW5kUHJvY2Vzc2luZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KGZhbHNlKVxuY29uc3QgTW9kaWZpZWRDb250ZXh0ID0gY3JlYXRlQ29udGV4dChmYWxzZSlcbmNvbnN0IEluaXRpYWxpemluZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KGZhbHNlKVxuY29uc3QgRm9ybUZpZWxkc0NvbnRleHQgPSBjcmVhdGVTZWxlY3RvckNvbnRleHQ8Rm9ybUZpZWxkc0NvbnRleHRUeXBlPihbe30sICgpID0+IG51bGxdKVxuXG5leHBvcnQgdHlwZSBSZW5kZXJlZEZpZWxkU2xvdHMgPSBNYXA8c3RyaW5nLCBSZW5kZXJlZEZpZWxkPlxuXG4vKipcbiAqIEdldCB0aGUgc3RhdGUgb2YgdGhlIGZvcm0sIGNhbiBiZSB1c2VkIHRvIHN1Ym1pdCAmIHZhbGlkYXRlIHRoZSBmb3JtLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wYXlsb2FkY21zLmNvbS9kb2NzL2FkbWluL3JlYWN0LWhvb2tzI3VzZWZvcm1cbiAqL1xuY29uc3QgdXNlRm9ybSA9ICgpOiBDb250ZXh0ID0+IHVzZShGb3JtQ29udGV4dClcbi8qKlxuICogR2V0IHRoZSBzdGF0ZSBvZiB0aGUgZG9jdW1lbnQtbGV2ZWwgZm9ybS4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBkb2N1bWVudC1sZXZlbCBGb3JtIGZyb20gd2l0aGluIGEgY2hpbGQgRm9ybS5cbiAqIFRoaXMgaXMgdGhlIGNhc2Ugd2l0aGluZyBsZXhpY2FsIEJsb2NrcywgYXMgZWFjaCBsZXhpY2FsIGJsb2NrcyByZW5kZXJzIHRoZWlyIG93biBGb3JtLlxuICovXG5jb25zdCB1c2VEb2N1bWVudEZvcm0gPSAoKTogQ29udGV4dCA9PiB1c2UoRG9jdW1lbnRGb3JtQ29udGV4dClcblxuY29uc3QgdXNlV2F0Y2hGb3JtID0gKCk6IENvbnRleHQgPT4gdXNlKEZvcm1XYXRjaENvbnRleHQpXG5jb25zdCB1c2VGb3JtU3VibWl0dGVkID0gKCk6IGJvb2xlYW4gPT4gdXNlKFN1Ym1pdHRlZENvbnRleHQpXG5jb25zdCB1c2VGb3JtUHJvY2Vzc2luZyA9ICgpOiBib29sZWFuID0+IHVzZShQcm9jZXNzaW5nQ29udGV4dClcbi8qKlxuICogSWYgdGhlIGZvcm0gaGFzIHN0YXJ0ZWQgcHJvY2Vzc2luZyBpbiB0aGUgYmFja2dyb3VuZCAoZS5nLlxuICogaWYgYXV0b3NhdmUgaXMgcnVubmluZyksIHRoaXMgd2lsbCBiZSB0cnVlLlxuICovXG5jb25zdCB1c2VGb3JtQmFja2dyb3VuZFByb2Nlc3NpbmcgPSAoKTogYm9vbGVhbiA9PiB1c2UoQmFja2dyb3VuZFByb2Nlc3NpbmdDb250ZXh0KVxuY29uc3QgdXNlRm9ybU1vZGlmaWVkID0gKCk6IGJvb2xlYW4gPT4gdXNlKE1vZGlmaWVkQ29udGV4dClcbmNvbnN0IHVzZUZvcm1Jbml0aWFsaXppbmcgPSAoKTogYm9vbGVhbiA9PiB1c2UoSW5pdGlhbGl6aW5nQ29udGV4dClcblxuLyoqXG4gKiBHZXQgYW5kIHNldCB0aGUgdmFsdWUgb2YgYSBmb3JtIGZpZWxkIGJhc2VkIG9uIGEgc2VsZWN0b3JcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcGF5bG9hZGNtcy5jb20vZG9jcy9hZG1pbi9yZWFjdC1ob29rcyN1c2Vmb3JtZmllbGRzXG4gKi9cbmNvbnN0IHVzZUZvcm1GaWVsZHMgPSA8VmFsdWUgPSB1bmtub3duPihcbiAgc2VsZWN0b3I6IChjb250ZXh0OiBGb3JtRmllbGRzQ29udGV4dFR5cGUpID0+IFZhbHVlLFxuKTogVmFsdWUgPT4gdXNlQ29udGV4dFNlbGVjdG9yKEZvcm1GaWVsZHNDb250ZXh0LCBzZWxlY3RvcilcblxuLyoqXG4gKiBHZXQgdGhlIHN0YXRlIG9mIGFsbCBmb3JtIGZpZWxkcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcGF5bG9hZGNtcy5jb20vZG9jcy9hZG1pbi9yZWFjdC1ob29rcyN1c2VhbGxmb3JtZmllbGRzXG4gKi9cbmNvbnN0IHVzZUFsbEZvcm1GaWVsZHMgPSAoKTogRm9ybUZpZWxkc0NvbnRleHRUeXBlID0+IHVzZUZ1bGxDb250ZXh0KEZvcm1GaWVsZHNDb250ZXh0KVxuXG5leHBvcnQge1xuICBCYWNrZ3JvdW5kUHJvY2Vzc2luZ0NvbnRleHQsXG4gIERvY3VtZW50Rm9ybUNvbnRleHQsXG4gIEZvcm1Db250ZXh0LFxuICBGb3JtRmllbGRzQ29udGV4dCxcbiAgRm9ybVdhdGNoQ29udGV4dCxcbiAgSW5pdGlhbGl6aW5nQ29udGV4dCxcbiAgTW9kaWZpZWRDb250ZXh0LFxuICBQcm9jZXNzaW5nQ29udGV4dCxcbiAgU3VibWl0dGVkQ29udGV4dCxcbiAgdXNlQWxsRm9ybUZpZWxkcyxcbiAgdXNlRG9jdW1lbnRGb3JtLFxuICB1c2VGb3JtLFxuICB1c2VGb3JtQmFja2dyb3VuZFByb2Nlc3NpbmcsXG4gIHVzZUZvcm1GaWVsZHMsXG4gIHVzZUZvcm1Jbml0aWFsaXppbmcsXG4gIHVzZUZvcm1Nb2RpZmllZCxcbiAgdXNlRm9ybVByb2Nlc3NpbmcsXG4gIHVzZUZvcm1TdWJtaXR0ZWQsXG4gIHVzZVdhdGNoRm9ybSxcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIGNyZWF0ZUNvbnRleHQgYXMgY3JlYXRlQ29udGV4dE9yaWcsIHVzZUNvbnRleHQgYXMgdXNlQ29udGV4dE9yaWcsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWR1Y2VyLCB1c2VSZWYsIHVzZVN0YXRlLCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVuc3RhYmxlX05vcm1hbFByaW9yaXR5IGFzIE5vcm1hbFByaW9yaXR5LCB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgYXMgcnVuV2l0aFByaW9yaXR5LCB9IGZyb20gJ3NjaGVkdWxlcic7XG5jb25zdCBDT05URVhUX1ZBTFVFID0gU3ltYm9sKCk7XG5jb25zdCBPUklHSU5BTF9QUk9WSURFUiA9IFN5bWJvbCgpO1xuY29uc3QgaXNTU1IgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgIC9TZXJ2ZXJTaWRlUmVuZGVyaW5nLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGlzU1NSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gZm9yIHByZWFjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBydW5XaXRoUHJpb3JpdHlcbmNvbnN0IHJ1bldpdGhOb3JtYWxQcmlvcml0eSA9IHJ1bldpdGhQcmlvcml0eVxuICAgID8gKGZuKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBydW5XaXRoUHJpb3JpdHkoTm9ybWFsUHJpb3JpdHksIGZuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUubWVzc2FnZSA9PT0gJ05vdCBpbXBsZW1lbnRlZC4nKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgOiAoZm4pID0+IGZuKCk7XG5jb25zdCBjcmVhdGVQcm92aWRlciA9IChQcm92aWRlck9yaWcpID0+IHtcbiAgICBjb25zdCBDb250ZXh0UHJvdmlkZXIgPSAoeyB2YWx1ZSwgY2hpbGRyZW4sIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVSZWYgPSB1c2VSZWYodmFsdWUpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uUmVmID0gdXNlUmVmKDApO1xuICAgICAgICBjb25zdCBbcmVzb2x2ZSwgc2V0UmVzb2x2ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICAgICAgaWYgKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgc2V0UmVzb2x2ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VSZWYoKTtcbiAgICAgICAgaWYgKCFjb250ZXh0VmFsdWUuY3VycmVudCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gKGZuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgdmVyc2lvblJlZi5jdXJyZW50ICs9IDE7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBuOiB2ZXJzaW9uUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnN1c3BlbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5uICo9IC0xOyAvLyB0aGlzIGlzIGludGVudGlvbmFsIHRvIG1ha2UgaXQgdGVtcG9yYXJ5IHZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnAgPSBuZXcgUHJvbWlzZSgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzb2x2ZSgoKSA9PiAodikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi52ID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWN0aW9uLnA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcih2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihhY3Rpb24pKTtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnRleHRWYWx1ZS5jdXJyZW50ID0ge1xuICAgICAgICAgICAgICAgIFtDT05URVhUX1ZBTFVFXToge1xuICAgICAgICAgICAgICAgICAgICAvKiBcInZcImFsdWUgICAgICovIHY6IHZhbHVlUmVmLFxuICAgICAgICAgICAgICAgICAgICAvKiB2ZXJzaW9cIm5cIiAgICovIG46IHZlcnNpb25SZWYsXG4gICAgICAgICAgICAgICAgICAgIC8qIFwibFwiaXN0ZW5lcnMgKi8gbDogbGlzdGVuZXJzLFxuICAgICAgICAgICAgICAgICAgICAvKiBcInVcInBkYXRlICAgICovIHU6IHVwZGF0ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHZlcnNpb25SZWYuY3VycmVudCArPSAxO1xuICAgICAgICAgICAgcnVuV2l0aE5vcm1hbFByaW9yaXR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0VmFsdWUuY3VycmVudFtDT05URVhUX1ZBTFVFXS5sLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKHsgbjogdmVyc2lvblJlZi5jdXJyZW50LCB2OiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUHJvdmlkZXJPcmlnLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUuY3VycmVudCB9LCBjaGlsZHJlbik7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dFByb3ZpZGVyO1xufTtcbmNvbnN0IGlkZW50aXR5ID0gKHgpID0+IHg7XG4vKipcbiAqIFRoaXMgY3JlYXRlcyBhIHNwZWNpYWwgY29udGV4dCBmb3IgYHVzZUNvbnRleHRTZWxlY3RvcmAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICd1c2UtY29udGV4dC1zZWxlY3Rvcic7XG4gKlxuICogY29uc3QgUGVyc29uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoeyBmaXJzdE5hbWU6ICcnLCBmYW1pbHlOYW1lOiAnJyB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUNvbnRleHRPcmlnKHtcbiAgICAgICAgW0NPTlRFWFRfVkFMVUVdOiB7XG4gICAgICAgICAgICAvKiBcInZcImFsdWUgICAgICovIHY6IHsgY3VycmVudDogZGVmYXVsdFZhbHVlIH0sXG4gICAgICAgICAgICAvKiB2ZXJzaW9cIm5cIiAgICovIG46IHsgY3VycmVudDogLTEgfSxcbiAgICAgICAgICAgIC8qIFwibFwiaXN0ZW5lcnMgKi8gbDogbmV3IFNldCgpLFxuICAgICAgICAgICAgLyogXCJ1XCJwZGF0ZSAgICAqLyB1OiAoZikgPT4gZigpLFxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnRleHRbT1JJR0lOQUxfUFJPVklERVJdID0gY29udGV4dC5Qcm92aWRlcjtcbiAgICBjb250ZXh0LlByb3ZpZGVyID0gY3JlYXRlUHJvdmlkZXIoY29udGV4dC5Qcm92aWRlcik7XG4gICAgZGVsZXRlIGNvbnRleHQuQ29uc3VtZXI7IC8vIG5vIHN1cHBvcnQgZm9yIENvbnN1bWVyXG4gICAgcmV0dXJuIGNvbnRleHQ7XG59XG4vKipcbiAqIFRoaXMgaG9vayByZXR1cm5zIGNvbnRleHQgc2VsZWN0ZWQgdmFsdWUgYnkgc2VsZWN0b3IuXG4gKlxuICogSXQgd2lsbCBvbmx5IGFjY2VwdCBjb250ZXh0IGNyZWF0ZWQgYnkgYGNyZWF0ZUNvbnRleHRgLlxuICogSXQgd2lsbCB0cmlnZ2VyIHJlLXJlbmRlciBpZiBvbmx5IHRoZSBzZWxlY3RlZCB2YWx1ZSBpcyByZWZlcmVudGlhbGx5IGNoYW5nZWQuXG4gKlxuICogVGhlIHNlbGVjdG9yIHNob3VsZCByZXR1cm4gcmVmZXJlbnRpYWxseSBlcXVhbCByZXN1bHQgZm9yIHNhbWUgaW5wdXQgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgdXNlQ29udGV4dFNlbGVjdG9yIH0gZnJvbSAndXNlLWNvbnRleHQtc2VsZWN0b3InO1xuICpcbiAqIGNvbnN0IGZpcnN0TmFtZSA9IHVzZUNvbnRleHRTZWxlY3RvcihQZXJzb25Db250ZXh0LCAoc3RhdGUpID0+IHN0YXRlLmZpcnN0TmFtZSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb250ZXh0U2VsZWN0b3IoY29udGV4dCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0T3JpZyhjb250ZXh0KVtDT05URVhUX1ZBTFVFXTtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFjb250ZXh0VmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndXNlQ29udGV4dFNlbGVjdG9yIHJlcXVpcmVzIHNwZWNpYWwgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHsgXG4gICAgLyogXCJ2XCJhbHVlICAgICAqLyB2OiB7IGN1cnJlbnQ6IHZhbHVlIH0sIFxuICAgIC8qIHZlcnNpb1wiblwiICAgKi8gbjogeyBjdXJyZW50OiB2ZXJzaW9uIH0sIFxuICAgIC8qIFwibFwiaXN0ZW5lcnMgKi8gbDogbGlzdGVuZXJzLCB9ID0gY29udGV4dFZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0b3IodmFsdWUpO1xuICAgIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcigocHJldiwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBjYXNlIGZvciBgZGlzcGF0Y2goKWAgYmVsb3dcbiAgICAgICAgICAgIHJldHVybiBbdmFsdWUsIHNlbGVjdGVkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ3AnIGluIGFjdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgYWN0aW9uLnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbi5uID09PSB2ZXJzaW9uKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzKHByZXZbMV0sIHNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OyAvLyBiYWlsIG91dFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgc2VsZWN0ZWRdO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoJ3YnIGluIGFjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuaXMocHJldlswXSwgYWN0aW9uLnYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OyAvLyBkbyBub3QgdXBkYXRlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTZWxlY3RlZCA9IHNlbGVjdG9yKGFjdGlvbi52KTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmlzKHByZXZbMV0sIG5leHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7IC8vIGRvIG5vdCB1cGRhdGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFthY3Rpb24udiwgbmV4dFNlbGVjdGVkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2UpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZWQgKHN0YWxlIHByb3BzIG9yIHNvbWUgb3RoZXIgcmVhc29uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4ucHJldl07IC8vIHNjaGVkdWxlIHVwZGF0ZVxuICAgIH0sIFt2YWx1ZSwgc2VsZWN0ZWRdKTtcbiAgICBpZiAoIU9iamVjdC5pcyhzdGF0ZVsxXSwgc2VsZWN0ZWQpKSB7XG4gICAgICAgIC8vIHNjaGVkdWxlIHJlLXJlbmRlclxuICAgICAgICAvLyB0aGlzIGlzIHNhZmUgYmVjYXVzZSBpdCdzIHNlbGYgY29udGFpbmVkXG4gICAgICAgIGRpc3BhdGNoKCk7XG4gICAgfVxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsaXN0ZW5lcnMuYWRkKGRpc3BhdGNoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUoZGlzcGF0Y2gpO1xuICAgICAgICB9O1xuICAgIH0sIFtsaXN0ZW5lcnNdKTtcbiAgICByZXR1cm4gc3RhdGVbMV07XG59XG4vKipcbiAqIFRoaXMgaG9vayByZXR1cm5zIHRoZSBlbnRpcmUgY29udGV4dCB2YWx1ZS5cbiAqIFVzZSB0aGlzIGluc3RlYWQgb2YgUmVhY3QudXNlQ29udGV4dCBmb3IgY29uc2lzdGVudCBiZWhhdmlvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3VzZS1jb250ZXh0LXNlbGVjdG9yJztcbiAqXG4gKiBjb25zdCBwZXJzb24gPSB1c2VDb250ZXh0KFBlcnNvbkNvbnRleHQpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29udGV4dChjb250ZXh0KSB7XG4gICAgcmV0dXJuIHVzZUNvbnRleHRTZWxlY3Rvcihjb250ZXh0LCBpZGVudGl0eSk7XG59XG4vKipcbiAqIFRoaXMgaG9vayByZXR1cm5zIGFuIHVwZGF0ZSBmdW5jdGlvbiB0byB3cmFwIGFuIHVwZGF0aW5nIGZ1bmN0aW9uXG4gKlxuICogVXNlIHRoaXMgZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoYW5nZSBhIHZhbHVlIGluXG4gKiBjb25jdXJyZW50IHJlbmRlcmluZyBpbiBSZWFjdCAxOC5cbiAqIE90aGVyd2lzZSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSB0aGlzIGhvb2suXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IHVzZUNvbnRleHRVcGRhdGUgfSBmcm9tICd1c2UtY29udGV4dC1zZWxlY3Rvcic7XG4gKlxuICogY29uc3QgdXBkYXRlID0gdXNlQ29udGV4dFVwZGF0ZSgpO1xuICpcbiAqIC8vIFdyYXAgc2V0IHN0YXRlIGZ1bmN0aW9uXG4gKiB1cGRhdGUoKCkgPT4gc2V0U3RhdGUoLi4uKSk7XG4gKlxuICogLy8gRXhwZXJpbWVudGFsIHN1c3BlbnNlIG1vZGVcbiAqIHVwZGF0ZSgoKSA9PiBzZXRTdGF0ZSguLi4pLCB7IHN1c3BlbnNlOiB0cnVlIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29udGV4dFVwZGF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlQ29udGV4dE9yaWcoY29udGV4dClbQ09OVEVYVF9WQUxVRV07XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghY29udGV4dFZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUNvbnRleHRVcGRhdGUgcmVxdWlyZXMgc3BlY2lhbCBjb250ZXh0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyB1OiB1cGRhdGUgfSA9IGNvbnRleHRWYWx1ZTtcbiAgICByZXR1cm4gdXBkYXRlO1xufVxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyoqXG4gKiBUaGlzIGlzIGEgUHJvdmlkZXIgY29tcG9uZW50IGZvciBicmlkZ2luZyBtdWx0aXBsZSByZWFjdCByb290c1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB2YWx1ZVRvQnJpZGdlID0gdXNlQnJpZGdlVmFsdWUoUGVyc29uQ29udGV4dCk7XG4gKiByZXR1cm4gKFxuICogICA8UmVuZGVyZXI+XG4gKiAgICAgPEJyaWRnZVByb3ZpZGVyIGNvbnRleHQ9e1BlcnNvbkNvbnRleHR9IHZhbHVlPXt2YWx1ZVRvQnJpZGdlfT5cbiAqICAgICAgIHtjaGlsZHJlbn1cbiAqICAgICA8L0JyaWRnZVByb3ZpZGVyPlxuICogICA8L1JlbmRlcmVyPlxuICogKTtcbiAqL1xuZXhwb3J0IGNvbnN0IEJyaWRnZVByb3ZpZGVyID0gKHsgY29udGV4dCwgdmFsdWUsIGNoaWxkcmVuLCB9KSA9PiB7XG4gICAgY29uc3QgeyBbT1JJR0lOQUxfUFJPVklERVJdOiBQcm92aWRlck9yaWcgfSA9IGNvbnRleHQ7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghUHJvdmlkZXJPcmlnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JyaWRnZVByb3ZpZGVyIHJlcXVpcmVzIHNwZWNpYWwgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFByb3ZpZGVyT3JpZywgeyB2YWx1ZSB9LCBjaGlsZHJlbik7XG59O1xuLyoqXG4gKiBUaGlzIGhvb2sgcmV0dXJuIGEgdmFsdWUgZm9yIEJyaWRnZVByb3ZpZGVyXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VCcmlkZ2VWYWx1ZSA9IChjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgYnJpZGdlVmFsdWUgPSB1c2VDb250ZXh0T3JpZyhjb250ZXh0KTtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFicmlkZ2VWYWx1ZVtDT05URVhUX1ZBTFVFXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1c2VCcmlkZ2VWYWx1ZSByZXF1aXJlcyBzcGVjaWFsIGNvbnRleHQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnJpZGdlVmFsdWU7XG59O1xuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7XG4gIEFycmF5RmllbGRDbGllbnRDb21wb25lbnQsXG4gIEFycmF5RmllbGRDbGllbnRQcm9wcyxcbiAgQXJyYXlGaWVsZCBhcyBBcnJheUZpZWxkVHlwZSxcbn0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNhbGxiYWNrLCB1c2VJZCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB0eXBlIHsgQ2xpcGJvYXJkUGFzdGVEYXRhIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQ2xpcGJvYXJkQWN0aW9uL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBCYW5uZXIgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CYW5uZXIvaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBjbGlwYm9hcmRDb3B5LCBjbGlwYm9hcmRQYXN0ZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0NsaXBib2FyZEFjdGlvbi9jbGlwYm9hcmRVdGlsaXRpZXMuanMnXG5pbXBvcnQgeyBDbGlwYm9hcmRBY3Rpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9DbGlwYm9hcmRBY3Rpb24vaW5kZXguanMnXG5pbXBvcnQge1xuICBtZXJnZUZvcm1TdGF0ZUZyb21DbGlwYm9hcmQsXG4gIHJlZHVjZUZvcm1TdGF0ZUJ5UGF0aCxcbn0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQ2xpcGJvYXJkQWN0aW9uL21lcmdlRm9ybVN0YXRlRnJvbUNsaXBib2FyZC5qcydcbmltcG9ydCB7IERyYWdnYWJsZVNvcnRhYmxlSXRlbSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RyYWdnYWJsZVNvcnRhYmxlL0RyYWdnYWJsZVNvcnRhYmxlSXRlbS9pbmRleC5qcydcbmltcG9ydCB7IERyYWdnYWJsZVNvcnRhYmxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRHJhZ2dhYmxlU29ydGFibGUvaW5kZXguanMnXG5pbXBvcnQgeyBFcnJvclBpbGwgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9FcnJvclBpbGwvaW5kZXguanMnXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb3JtLCB1c2VGb3JtU3VibWl0dGVkIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgZXh0cmFjdFJvd3NBbmRDb2xsYXBzZWRJRHMsIHRvZ2dsZUFsbFJvd3MgfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL3Jvd0hlbHBlcnMuanMnXG5pbXBvcnQgeyBOdWxsaWZ5TG9jYWxlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy9OdWxsaWZ5RmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgd2l0aENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL3dpdGhDb25kaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHNjcm9sbFRvSUQgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2Nyb2xsVG9JRC5qcydcbmltcG9ydCB7IG1lcmdlRmllbGRTdHlsZXMgfSBmcm9tICcuLi9tZXJnZUZpZWxkU3R5bGVzLmpzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXguanMnXG5pbXBvcnQgeyBBcnJheVJvdyB9IGZyb20gJy4vQXJyYXlSb3cuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2FycmF5LWZpZWxkJ1xuXG5leHBvcnQgY29uc3QgQXJyYXlGaWVsZENvbXBvbmVudDogQXJyYXlGaWVsZENsaWVudENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGQ6IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlLFxuICAgICAgYWRtaW46IHsgY2xhc3NOYW1lLCBkZXNjcmlwdGlvbiwgaXNTb3J0YWJsZSA9IHRydWUgfSA9IHt9LFxuICAgICAgZmllbGRzLFxuICAgICAgbGFiZWwsXG4gICAgICBsb2NhbGl6ZWQsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93czogbWluUm93c1Byb3AsXG4gICAgICByZXF1aXJlZCxcbiAgICB9LFxuICAgIGZvcmNlUmVuZGVyID0gZmFsc2UsXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICBwZXJtaXNzaW9ucyxcbiAgICByZWFkT25seSxcbiAgICBzY2hlbWFQYXRoOiBzY2hlbWFQYXRoRnJvbVByb3BzLFxuICAgIHZhbGlkYXRlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBzY2hlbWFQYXRoID0gc2NoZW1hUGF0aEZyb21Qcm9wcyA/PyBuYW1lXG5cbiAgY29uc3QgbWluUm93cyA9IG1pblJvd3NQcm9wID8/IChyZXF1aXJlZCA/IDEgOiAwKVxuXG4gIGNvbnN0IHsgc2V0RG9jRmllbGRQcmVmZXJlbmNlcyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3Qge1xuICAgIGFkZEZpZWxkUm93LFxuICAgIGRpc3BhdGNoRmllbGRzLFxuICAgIGdldEZpZWxkcyxcbiAgICBtb3ZlRmllbGRSb3csXG4gICAgcmVtb3ZlRmllbGRSb3csXG4gICAgcmVwbGFjZVN0YXRlLFxuICAgIHNldE1vZGlmaWVkLFxuICB9ID0gdXNlRm9ybSgpXG4gIGNvbnN0IHN1Ym1pdHRlZCA9IHVzZUZvcm1TdWJtaXR0ZWQoKVxuICBjb25zdCB7IGNvZGU6IGxvY2FsZSB9ID0gdXNlTG9jYWxlKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3Qge1xuICAgIGNvbmZpZzogeyBsb2NhbGl6YXRpb24gfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgZWRpdGluZ0RlZmF1bHRMb2NhbGUgPSAoKCkgPT4ge1xuICAgIGlmIChsb2NhbGl6YXRpb24gJiYgbG9jYWxpemF0aW9uLmZhbGxiYWNrKSB7XG4gICAgICBjb25zdCBkZWZhdWx0TG9jYWxlID0gbG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGVcbiAgICAgIHJldHVybiBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGVcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9KSgpXG5cbiAgLy8gSGFuZGxlIGxhYmVsaW5nIGZvciBBcnJheXMsIEdsb2JhbCBBcnJheXMsIGFuZCBCbG9ja3NcbiAgY29uc3QgZ2V0TGFiZWxzID0gKHA6IEFycmF5RmllbGRDbGllbnRQcm9wcyk6IFBhcnRpYWw8QXJyYXlGaWVsZFR5cGVbJ2xhYmVscyddPiA9PiB7XG4gICAgaWYgKCdsYWJlbHMnIGluIHAgJiYgcD8ubGFiZWxzKSB7XG4gICAgICByZXR1cm4gcC5sYWJlbHNcbiAgICB9XG5cbiAgICBpZiAoJ2xhYmVscycgaW4gcC5maWVsZCAmJiBwLmZpZWxkLmxhYmVscykge1xuICAgICAgcmV0dXJuIHsgcGx1cmFsOiBwLmZpZWxkLmxhYmVscz8ucGx1cmFsLCBzaW5ndWxhcjogcC5maWVsZC5sYWJlbHM/LnNpbmd1bGFyIH1cbiAgICB9XG5cbiAgICBpZiAoJ2xhYmVsJyBpbiBwLmZpZWxkICYmIHAuZmllbGQubGFiZWwpIHtcbiAgICAgIHJldHVybiB7IHBsdXJhbDogdW5kZWZpbmVkLCBzaW5ndWxhcjogcC5maWVsZC5sYWJlbCB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcGx1cmFsOiB0KCdnZW5lcmFsOnJvd3MnKSwgc2luZ3VsYXI6IHQoJ2dlbmVyYWw6cm93JykgfVxuICB9XG5cbiAgY29uc3QgbGFiZWxzID0gZ2V0TGFiZWxzKHByb3BzKVxuXG4gIGNvbnN0IG1lbW9pemVkVmFsaWRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIC8vIGFsdGVybmF0aXZlIGxvY2FsZXMgY2FuIGJlIG51bGxcbiAgICAgIGlmICghZWRpdGluZ0RlZmF1bHRMb2NhbGUgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodmFsdWUsIHsgLi4ub3B0aW9ucywgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFttYXhSb3dzLCBtaW5Sb3dzLCByZXF1aXJlZCwgdmFsaWRhdGUsIGVkaXRpbmdEZWZhdWx0TG9jYWxlXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvclBhdGhzLFxuICAgIHBhdGgsXG4gICAgcm93cyA9IFtdLFxuICAgIHNob3dFcnJvcixcbiAgICB2YWxpZCxcbiAgICB2YWx1ZSxcbiAgfSA9IHVzZUZpZWxkPG51bWJlcj4oe1xuICAgIGhhc1Jvd3M6IHRydWUsXG4gICAgcG90ZW50aWFsbHlTdGFsZVBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgdmFsaWRhdGU6IG1lbW9pemVkVmFsaWRhdGUsXG4gIH0pXG5cbiAgY29uc3QgY29tcG9uZW50SWQgPSB1c2VJZCgpXG4gIGNvbnN0IHNjcm9sbElkUHJlZml4ID0gdXNlTWVtbygoKSA9PiBgc2Nyb2xsLSR7Y29tcG9uZW50SWR9YCwgW2NvbXBvbmVudElkXSlcblxuICBjb25zdCBhZGRSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAocm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgYWRkRmllbGRSb3coe1xuICAgICAgICBwYXRoLFxuICAgICAgICByb3dJbmRleCxcbiAgICAgICAgc2NoZW1hUGF0aCxcbiAgICAgIH0pXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzY3JvbGxUb0lEKGAke3Njcm9sbElkUHJlZml4fS1yb3ctJHtyb3dJbmRleH1gKVxuICAgICAgfSwgMClcbiAgICB9LFxuICAgIFthZGRGaWVsZFJvdywgcGF0aCwgc2NoZW1hUGF0aCwgc2Nyb2xsSWRQcmVmaXhdLFxuICApXG5cbiAgY29uc3QgZHVwbGljYXRlUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ0RVUExJQ0FURV9ST1cnLCBwYXRoLCByb3dJbmRleCB9KVxuXG4gICAgICBzZXRNb2RpZmllZCh0cnVlKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2Nyb2xsVG9JRChgJHtzY3JvbGxJZFByZWZpeH0tcm93LSR7cm93SW5kZXh9YClcbiAgICAgIH0sIDApXG4gICAgfSxcbiAgICBbZGlzcGF0Y2hGaWVsZHMsIHBhdGgsIHNjcm9sbElkUHJlZml4LCBzZXRNb2RpZmllZF0sXG4gIClcblxuICBjb25zdCByZW1vdmVSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAocm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmVtb3ZlRmllbGRSb3coeyBwYXRoLCByb3dJbmRleCB9KVxuICAgIH0sXG4gICAgW3JlbW92ZUZpZWxkUm93LCBwYXRoXSxcbiAgKVxuXG4gIGNvbnN0IG1vdmVSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAobW92ZUZyb21JbmRleDogbnVtYmVyLCBtb3ZlVG9JbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBtb3ZlRmllbGRSb3coe1xuICAgICAgICBtb3ZlRnJvbUluZGV4LFxuICAgICAgICBtb3ZlVG9JbmRleCxcbiAgICAgICAgcGF0aCxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbcGF0aCwgbW92ZUZpZWxkUm93XSxcbiAgKVxuXG4gIGNvbnN0IHRvZ2dsZUNvbGxhcHNlQWxsID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbGxhcHNlZDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgeyBjb2xsYXBzZWRJRHMsIHVwZGF0ZWRSb3dzIH0gPSB0b2dnbGVBbGxSb3dzKHtcbiAgICAgICAgY29sbGFwc2VkLFxuICAgICAgICByb3dzLFxuICAgICAgfSlcbiAgICAgIHNldERvY0ZpZWxkUHJlZmVyZW5jZXMocGF0aCwgeyBjb2xsYXBzZWQ6IGNvbGxhcHNlZElEcyB9KVxuICAgICAgZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnU0VUX0FMTF9ST1dTX0NPTExBUFNFRCcsIHBhdGgsIHVwZGF0ZWRSb3dzIH0pXG4gICAgfSxcbiAgICBbZGlzcGF0Y2hGaWVsZHMsIHBhdGgsIHJvd3MsIHNldERvY0ZpZWxkUHJlZmVyZW5jZXNdLFxuICApXG5cbiAgY29uc3Qgc2V0Q29sbGFwc2UgPSB1c2VDYWxsYmFjayhcbiAgICAocm93SUQ6IHN0cmluZywgY29sbGFwc2VkOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbGxhcHNlZElEcywgdXBkYXRlZFJvd3MgfSA9IGV4dHJhY3RSb3dzQW5kQ29sbGFwc2VkSURzKHtcbiAgICAgICAgY29sbGFwc2VkLFxuICAgICAgICByb3dJRCxcbiAgICAgICAgcm93cyxcbiAgICAgIH0pXG5cbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1NFVF9ST1dfQ09MTEFQU0VEJywgcGF0aCwgdXBkYXRlZFJvd3MgfSlcbiAgICAgIHNldERvY0ZpZWxkUHJlZmVyZW5jZXMocGF0aCwgeyBjb2xsYXBzZWQ6IGNvbGxhcHNlZElEcyB9KVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzLCBwYXRoLCByb3dzLCBzZXREb2NGaWVsZFByZWZlcmVuY2VzXSxcbiAgKVxuXG4gIGNvbnN0IGNvcHlSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAocm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgZm9ybVN0YXRlID0geyAuLi5nZXRGaWVsZHMoKSB9XG4gICAgICBjb25zdCBjbGlwYm9hcmRSZXN1bHQgPSBjbGlwYm9hcmRDb3B5KHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBnZXREYXRhVG9Db3B5OiAoKSA9PlxuICAgICAgICAgIHJlZHVjZUZvcm1TdGF0ZUJ5UGF0aCh7XG4gICAgICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgfSksXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICB0LFxuICAgICAgfSlcblxuICAgICAgaWYgKHR5cGVvZiBjbGlwYm9hcmRSZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKGNsaXBib2FyZFJlc3VsdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3ModCgnZ2VuZXJhbDpjb3BpZWQnKSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmaWVsZHMsIGdldEZpZWxkcywgcGF0aCwgdCwgdHlwZV0sXG4gIClcblxuICBjb25zdCBwYXN0ZVJvdyA9IHVzZUNhbGxiYWNrKFxuICAgIChyb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBmb3JtU3RhdGUgPSB7IC4uLmdldEZpZWxkcygpIH1cbiAgICAgIGNvbnN0IHBhc3RlQXJncyA9IHtcbiAgICAgICAgb25QYXN0ZTogKGRhdGFGcm9tQ2xpcGJvYXJkOiBDbGlwYm9hcmRQYXN0ZURhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IG1lcmdlRm9ybVN0YXRlRnJvbUNsaXBib2FyZCh7XG4gICAgICAgICAgICBkYXRhRnJvbUNsaXBib2FyZCxcbiAgICAgICAgICAgIGZvcm1TdGF0ZSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJlcGxhY2VTdGF0ZShuZXdTdGF0ZSlcbiAgICAgICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgICAgICB9LFxuICAgICAgICBwYXRoLFxuICAgICAgICBzY2hlbWFGaWVsZHM6IGZpZWxkcyxcbiAgICAgICAgdCxcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xpcGJvYXJkUmVzdWx0ID0gY2xpcGJvYXJkUGFzdGUocGFzdGVBcmdzKVxuXG4gICAgICBpZiAodHlwZW9mIGNsaXBib2FyZFJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoY2xpcGJvYXJkUmVzdWx0KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2ZpZWxkcywgZ2V0RmllbGRzLCBwYXRoLCByZXBsYWNlU3RhdGUsIHNldE1vZGlmaWVkLCB0XSxcbiAgKVxuXG4gIGNvbnN0IHBhc3RlRmllbGQgPSB1c2VDYWxsYmFjayhcbiAgICAoZGF0YUZyb21DbGlwYm9hcmQ6IENsaXBib2FyZFBhc3RlRGF0YSkgPT4ge1xuICAgICAgY29uc3QgZm9ybVN0YXRlID0geyAuLi5nZXRGaWVsZHMoKSB9XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IG1lcmdlRm9ybVN0YXRlRnJvbUNsaXBib2FyZCh7XG4gICAgICAgIGRhdGFGcm9tQ2xpcGJvYXJkLFxuICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgIHBhdGgsXG4gICAgICB9KVxuICAgICAgcmVwbGFjZVN0YXRlKG5ld1N0YXRlKVxuICAgICAgc2V0TW9kaWZpZWQodHJ1ZSlcbiAgICB9LFxuICAgIFtnZXRGaWVsZHMsIHBhdGgsIHJlcGxhY2VTdGF0ZSwgc2V0TW9kaWZpZWRdLFxuICApXG5cbiAgY29uc3QgZ2V0RGF0YVRvQ29weSA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+XG4gICAgICByZWR1Y2VGb3JtU3RhdGVCeVBhdGgoe1xuICAgICAgICBmb3JtU3RhdGU6IHsgLi4uZ2V0RmllbGRzKCkgfSxcbiAgICAgICAgcGF0aCxcbiAgICAgIH0pLFxuICAgIFtnZXRGaWVsZHMsIHBhdGhdLFxuICApXG5cbiAgY29uc3QgaGFzTWF4Um93cyA9IG1heFJvd3MgJiYgcm93cy5sZW5ndGggPj0gbWF4Um93c1xuXG4gIGNvbnN0IGZpZWxkRXJyb3JDb3VudCA9IGVycm9yUGF0aHMubGVuZ3RoXG4gIGNvbnN0IGZpZWxkSGFzRXJyb3JzID0gc3VibWl0dGVkICYmIGVycm9yUGF0aHMubGVuZ3RoID4gMFxuXG4gIGNvbnN0IHNob3dSZXF1aXJlZCA9IChyZWFkT25seSB8fCBkaXNhYmxlZCkgJiYgcm93cy5sZW5ndGggPT09IDBcbiAgY29uc3Qgc2hvd01pblJvd3MgPSAocm93cy5sZW5ndGggJiYgcm93cy5sZW5ndGggPCBtaW5Sb3dzKSB8fCAocmVxdWlyZWQgJiYgcm93cy5sZW5ndGggPT09IDApXG5cbiAgY29uc3Qgc3R5bGVzID0gdXNlTWVtbygoKSA9PiBtZXJnZUZpZWxkU3R5bGVzKGZpZWxkKSwgW2ZpZWxkXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBmaWVsZEJhc2VDbGFzcyxcbiAgICAgICAgYmFzZUNsYXNzLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGZpZWxkSGFzRXJyb3JzID8gYCR7YmFzZUNsYXNzfS0taGFzLWVycm9yYCA6IGAke2Jhc2VDbGFzc30tLWhhcy1uby1lcnJvcmAsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIGlkPXtgZmllbGQtJHtwYXRoLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfVxuICAgICAgc3R5bGU9e3N0eWxlc31cbiAgICA+XG4gICAgICB7c2hvd0Vycm9yICYmIChcbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8aGVhZGVyIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyYH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXItd3JhcGB9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXItY29udGVudGB9PlxuICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGl0bGVgfT5cbiAgICAgICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgICAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgICAgICAgICAgPEZpZWxkTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgYXM9XCJzcGFuXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICAgICAgICBsb2NhbGl6ZWQ9e2xvY2FsaXplZH1cbiAgICAgICAgICAgICAgICAgICAgcGF0aD17cGF0aH1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAge2ZpZWxkSGFzRXJyb3JzICYmIGZpZWxkRXJyb3JDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8RXJyb3JQaWxsIGNvdW50PXtmaWVsZEVycm9yQ291bnR9IGkxOG49e2kxOG59IHdpdGhNZXNzYWdlIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlci1hY3Rpb25zYH0+XG4gICAgICAgICAgICB7cm93cz8ubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyLWFjdGlvbmB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRvZ2dsZUNvbGxhcHNlQWxsKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2ZpZWxkczpjb2xsYXBzZUFsbCcpfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyLWFjdGlvbmB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRvZ2dsZUNvbGxhcHNlQWxsKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdmaWVsZHM6c2hvd0FsbCcpfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxDbGlwYm9hcmRBY3Rpb25cbiAgICAgICAgICAgICAgICBhbGxvd0NvcHk9e3Jvd3M/Lmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgYWxsb3dQYXN0ZT17IXJlYWRPbmx5fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyLWFjdGlvbmB9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgICAgIGdldERhdGFUb0NvcHk9e2dldERhdGFUb0NvcHl9XG4gICAgICAgICAgICAgICAgb25QYXN0ZT17cGFzdGVGaWVsZH1cbiAgICAgICAgICAgICAgICBwYXRoPXtwYXRofVxuICAgICAgICAgICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgICAgLz5cbiAgICAgIDwvaGVhZGVyPlxuICAgICAgPE51bGxpZnlMb2NhbGVGaWVsZFxuICAgICAgICBmaWVsZFZhbHVlPXt2YWx1ZX1cbiAgICAgICAgbG9jYWxpemVkPXtsb2NhbGl6ZWR9XG4gICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgIC8+XG4gICAgICB7QmVmb3JlSW5wdXR9XG4gICAgICB7KHJvd3M/Lmxlbmd0aCA+IDAgfHwgKCF2YWxpZCAmJiAoc2hvd1JlcXVpcmVkIHx8IHNob3dNaW5Sb3dzKSkpICYmIChcbiAgICAgICAgPERyYWdnYWJsZVNvcnRhYmxlXG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcmFnZ2FibGUtcm93c2B9XG4gICAgICAgICAgaWRzPXtyb3dzLm1hcCgocm93KSA9PiByb3cuaWQpfVxuICAgICAgICAgIG9uRHJhZ0VuZD17KHsgbW92ZUZyb21JbmRleCwgbW92ZVRvSW5kZXggfSkgPT4gbW92ZVJvdyhtb3ZlRnJvbUluZGV4LCBtb3ZlVG9JbmRleCl9XG4gICAgICAgID5cbiAgICAgICAgICB7cm93cy5tYXAoKHJvd0RhdGEsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQ6IHJvd0lELCBpc0xvYWRpbmcgfSA9IHJvd0RhdGFcblxuICAgICAgICAgICAgY29uc3Qgcm93UGF0aCA9IGAke3BhdGh9LiR7aX1gXG5cbiAgICAgICAgICAgIGNvbnN0IHJvd0Vycm9yQ291bnQgPSBlcnJvclBhdGhzPy5maWx0ZXIoKGVycm9yUGF0aCkgPT5cbiAgICAgICAgICAgICAgZXJyb3JQYXRoLnN0YXJ0c1dpdGgocm93UGF0aCArICcuJyksXG4gICAgICAgICAgICApLmxlbmd0aFxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8RHJhZ2dhYmxlU29ydGFibGVJdGVtXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5IHx8IGRpc2FibGVkIHx8ICFpc1NvcnRhYmxlfVxuICAgICAgICAgICAgICAgIGlkPXtyb3dJRH1cbiAgICAgICAgICAgICAgICBrZXk9e3Jvd0lEfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyhkcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPEFycmF5Um93XG4gICAgICAgICAgICAgICAgICAgIHsuLi5kcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgICAgICAgYWRkUm93PXthZGRSb3d9XG4gICAgICAgICAgICAgICAgICAgIGNvcHlSb3c9e2NvcHlSb3d9XG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbVJvd0xhYmVsPXtyb3dzPy5baV0/LmN1c3RvbUNvbXBvbmVudHM/LlJvd0xhYmVsfVxuICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVSb3c9e2R1cGxpY2F0ZVJvd31cbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3VudD17cm93RXJyb3JDb3VudH1cbiAgICAgICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyPXtmb3JjZVJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgaGFzTWF4Um93cz17aGFzTWF4Um93c31cbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGlzU29ydGFibGU9e2lzU29ydGFibGV9XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17bGFiZWxzfVxuICAgICAgICAgICAgICAgICAgICBtb3ZlUm93PXttb3ZlUm93fVxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoPXtwYXRofVxuICAgICAgICAgICAgICAgICAgICBwYXN0ZVJvdz17cGFzdGVSb3d9XG4gICAgICAgICAgICAgICAgICAgIHBhdGg9e3Jvd1BhdGh9XG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zPXtwZXJtaXNzaW9uc31cbiAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5IHx8IGRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICByZW1vdmVSb3c9e3JlbW92ZVJvd31cbiAgICAgICAgICAgICAgICAgICAgcm93PXtyb3dEYXRhfVxuICAgICAgICAgICAgICAgICAgICByb3dDb3VudD17cm93cz8ubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICByb3dJbmRleD17aX1cbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hUGF0aD17c2NoZW1hUGF0aH1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsSWRQcmVmaXg9e3Njcm9sbElkUHJlZml4fVxuICAgICAgICAgICAgICAgICAgICBzZXRDb2xsYXBzZT17c2V0Q29sbGFwc2V9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvRHJhZ2dhYmxlU29ydGFibGVJdGVtPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHshdmFsaWQgJiYgKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7c2hvd1JlcXVpcmVkICYmIChcbiAgICAgICAgICAgICAgICA8QmFubmVyPlxuICAgICAgICAgICAgICAgICAge3QoJ3ZhbGlkYXRpb246ZmllbGRIYXNObycsIHsgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVscy5wbHVyYWwsIGkxOG4pIH0pfVxuICAgICAgICAgICAgICAgIDwvQmFubmVyPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7c2hvd01pblJvd3MgJiYgKFxuICAgICAgICAgICAgICAgIDxCYW5uZXIgdHlwZT1cImVycm9yXCI+XG4gICAgICAgICAgICAgICAgICB7dCgndmFsaWRhdGlvbjpyZXF1aXJlc0F0TGVhc3QnLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBtaW5Sb3dzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgICBnZXRUcmFuc2xhdGlvbihtaW5Sb3dzID4gMSA/IGxhYmVscy5wbHVyYWwgOiBsYWJlbHMuc2luZ3VsYXIsIGkxOG4pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgdChtaW5Sb3dzID4gMSA/ICdnZW5lcmFsOnJvd3MnIDogJ2dlbmVyYWw6cm93JyksXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L0Jhbm5lcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9EcmFnZ2FibGVTb3J0YWJsZT5cbiAgICAgICl9XG4gICAgICB7IWhhc01heFJvd3MgJiYgIXJlYWRPbmx5ICYmIChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGJ1dHRvblN0eWxlPVwiaWNvbi1sYWJlbFwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hZGQtcm93YH1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgaWNvbj1cInBsdXNcIlxuICAgICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgIGljb25TdHlsZT1cIndpdGgtYm9yZGVyXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIGFkZFJvdyh2YWx1ZSB8fCAwKVxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dCgnZmllbGRzOmFkZExhYmVsJywgeyBsYWJlbDogZ2V0VHJhbnNsYXRpb24obGFiZWxzLnNpbmd1bGFyLCBpMThuKSB9KX1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICApfVxuICAgICAge0FmdGVySW5wdXR9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IEFycmF5RmllbGQgPSB3aXRoQ29uZGl0aW9uKEFycmF5RmllbGRDb21wb25lbnQpXG4iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuXG5pbXBvcnQgeyBDbG9zZUljb24sIGdldEFzc2V0LCBMb2FkZXIgfSBmcm9tICcuL2Fzc2V0cyc7XG5pbXBvcnQgeyB1c2VJc0RvY3VtZW50SGlkZGVuIH0gZnJvbSAnLi9ob29rcyc7XG5pbXBvcnQgeyB0b2FzdCwgVG9hc3RTdGF0ZSB9IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0ICcuL3N0eWxlcy5jc3MnO1xuaW1wb3J0IHtcbiAgaXNBY3Rpb24sXG4gIFN3aXBlRGlyZWN0aW9uLFxuICB0eXBlIEV4dGVybmFsVG9hc3QsXG4gIHR5cGUgSGVpZ2h0VCxcbiAgdHlwZSBUb2FzdGVyUHJvcHMsXG4gIHR5cGUgVG9hc3RQcm9wcyxcbiAgdHlwZSBUb2FzdFQsXG4gIHR5cGUgVG9hc3RUb0Rpc21pc3MsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBWaXNpYmxlIHRvYXN0cyBhbW91bnRcbmNvbnN0IFZJU0lCTEVfVE9BU1RTX0FNT1VOVCA9IDM7XG5cbi8vIFZpZXdwb3J0IHBhZGRpbmdcbmNvbnN0IFZJRVdQT1JUX09GRlNFVCA9ICczMnB4JztcblxuLy8gTW9iaWxlIHZpZXdwb3J0IHBhZGRpbmdcbmNvbnN0IE1PQklMRV9WSUVXUE9SVF9PRkZTRVQgPSAnMTZweCc7XG5cbi8vIERlZmF1bHQgbGlmZXRpbWUgb2YgYSB0b2FzdHMgKGluIG1zKVxuY29uc3QgVE9BU1RfTElGRVRJTUUgPSA0MDAwO1xuXG4vLyBEZWZhdWx0IHRvYXN0IHdpZHRoXG5jb25zdCBUT0FTVF9XSURUSCA9IDM1NjtcblxuLy8gRGVmYXVsdCBnYXAgYmV0d2VlbiB0b2FzdHNcbmNvbnN0IEdBUCA9IDE0O1xuXG4vLyBUaHJlc2hvbGQgdG8gZGlzbWlzcyBhIHRvYXN0XG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSAyMDtcblxuLy8gRXF1YWwgdG8gZXhpdCBhbmltYXRpb24gZHVyYXRpb25cbmNvbnN0IFRJTUVfQkVGT1JFX1VOTU9VTlQgPSAyMDA7XG5cbmZ1bmN0aW9uIGNuKC4uLmNsYXNzZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pIHtcbiAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN3aXBlRGlyZWN0aW9ucyhwb3NpdGlvbjogc3RyaW5nKTogQXJyYXk8U3dpcGVEaXJlY3Rpb24+IHtcbiAgY29uc3QgW3ksIHhdID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgY29uc3QgZGlyZWN0aW9uczogQXJyYXk8U3dpcGVEaXJlY3Rpb24+ID0gW107XG5cbiAgaWYgKHkpIHtcbiAgICBkaXJlY3Rpb25zLnB1c2goeSBhcyBTd2lwZURpcmVjdGlvbik7XG4gIH1cblxuICBpZiAoeCkge1xuICAgIGRpcmVjdGlvbnMucHVzaCh4IGFzIFN3aXBlRGlyZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3Rpb25zO1xufVxuXG5jb25zdCBUb2FzdCA9IChwcm9wczogVG9hc3RQcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaW52ZXJ0OiBUb2FzdGVySW52ZXJ0LFxuICAgIHRvYXN0LFxuICAgIHVuc3R5bGVkLFxuICAgIGludGVyYWN0aW5nLFxuICAgIHNldEhlaWdodHMsXG4gICAgdmlzaWJsZVRvYXN0cyxcbiAgICBoZWlnaHRzLFxuICAgIGluZGV4LFxuICAgIHRvYXN0cyxcbiAgICBleHBhbmRlZCxcbiAgICByZW1vdmVUb2FzdCxcbiAgICBkZWZhdWx0UmljaENvbG9ycyxcbiAgICBjbG9zZUJ1dHRvbjogY2xvc2VCdXR0b25Gcm9tVG9hc3RlcixcbiAgICBzdHlsZSxcbiAgICBjYW5jZWxCdXR0b25TdHlsZSxcbiAgICBhY3Rpb25CdXR0b25TdHlsZSxcbiAgICBjbGFzc05hbWUgPSAnJyxcbiAgICBkZXNjcmlwdGlvbkNsYXNzTmFtZSA9ICcnLFxuICAgIGR1cmF0aW9uOiBkdXJhdGlvbkZyb21Ub2FzdGVyLFxuICAgIHBvc2l0aW9uLFxuICAgIGdhcCxcbiAgICBsb2FkaW5nSWNvbjogbG9hZGluZ0ljb25Qcm9wLFxuICAgIGV4cGFuZEJ5RGVmYXVsdCxcbiAgICBjbGFzc05hbWVzLFxuICAgIGljb25zLFxuICAgIGNsb3NlQnV0dG9uQXJpYUxhYmVsID0gJ0Nsb3NlIHRvYXN0JyxcbiAgICBwYXVzZVdoZW5QYWdlSXNIaWRkZW4sXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW3N3aXBlRGlyZWN0aW9uLCBzZXRTd2lwZURpcmVjdGlvbl0gPSBSZWFjdC51c2VTdGF0ZTwneCcgfCAneScgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3N3aXBlT3V0RGlyZWN0aW9uLCBzZXRTd2lwZU91dERpcmVjdGlvbl0gPSBSZWFjdC51c2VTdGF0ZTwnbGVmdCcgfCAncmlnaHQnIHwgJ3VwJyB8ICdkb3duJyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbbW91bnRlZCwgc2V0TW91bnRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtyZW1vdmVkLCBzZXRSZW1vdmVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N3aXBpbmcsIHNldFN3aXBpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3dpcGVPdXQsIHNldFN3aXBlT3V0XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzU3dpcGVkLCBzZXRJc1N3aXBlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtvZmZzZXRCZWZvcmVSZW1vdmUsIHNldE9mZnNldEJlZm9yZVJlbW92ZV0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2luaXRpYWxIZWlnaHQsIHNldEluaXRpYWxIZWlnaHRdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBSZWFjdC51c2VSZWYodG9hc3QuZHVyYXRpb24gfHwgZHVyYXRpb25Gcm9tVG9hc3RlciB8fCBUT0FTVF9MSUZFVElNRSk7XG4gIGNvbnN0IGRyYWdTdGFydFRpbWUgPSBSZWFjdC51c2VSZWY8RGF0ZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCB0b2FzdFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MTElFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaXNGcm9udCA9IGluZGV4ID09PSAwO1xuICBjb25zdCBpc1Zpc2libGUgPSBpbmRleCArIDEgPD0gdmlzaWJsZVRvYXN0cztcbiAgY29uc3QgdG9hc3RUeXBlID0gdG9hc3QudHlwZTtcbiAgY29uc3QgZGlzbWlzc2libGUgPSB0b2FzdC5kaXNtaXNzaWJsZSAhPT0gZmFsc2U7XG4gIGNvbnN0IHRvYXN0Q2xhc3NuYW1lID0gdG9hc3QuY2xhc3NOYW1lIHx8ICcnO1xuICBjb25zdCB0b2FzdERlc2NyaXB0aW9uQ2xhc3NuYW1lID0gdG9hc3QuZGVzY3JpcHRpb25DbGFzc05hbWUgfHwgJyc7XG4gIC8vIEhlaWdodCBpbmRleCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IGFzIGl0IGdldHMgdXBkYXRlZCBiZWZvcmUgdGhlIHRvYXN0IGFycmF5LCB3aGljaCBtZWFucyB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBuZXcgbGF5b3V0IGZhc3Rlci5cbiAgY29uc3QgaGVpZ2h0SW5kZXggPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IGhlaWdodHMuZmluZEluZGV4KChoZWlnaHQpID0+IGhlaWdodC50b2FzdElkID09PSB0b2FzdC5pZCkgfHwgMCxcbiAgICBbaGVpZ2h0cywgdG9hc3QuaWRdLFxuICApO1xuICBjb25zdCBjbG9zZUJ1dHRvbiA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gdG9hc3QuY2xvc2VCdXR0b24gPz8gY2xvc2VCdXR0b25Gcm9tVG9hc3RlcixcbiAgICBbdG9hc3QuY2xvc2VCdXR0b24sIGNsb3NlQnV0dG9uRnJvbVRvYXN0ZXJdLFxuICApO1xuICBjb25zdCBkdXJhdGlvbiA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gdG9hc3QuZHVyYXRpb24gfHwgZHVyYXRpb25Gcm9tVG9hc3RlciB8fCBUT0FTVF9MSUZFVElNRSxcbiAgICBbdG9hc3QuZHVyYXRpb24sIGR1cmF0aW9uRnJvbVRvYXN0ZXJdLFxuICApO1xuICBjb25zdCBjbG9zZVRpbWVyU3RhcnRUaW1lUmVmID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCBvZmZzZXQgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IGxhc3RDbG9zZVRpbWVyU3RhcnRUaW1lUmVmID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCBwb2ludGVyU3RhcnRSZWYgPSBSZWFjdC51c2VSZWY8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt5LCB4XSA9IHBvc2l0aW9uLnNwbGl0KCctJyk7XG4gIGNvbnN0IHRvYXN0c0hlaWdodEJlZm9yZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBoZWlnaHRzLnJlZHVjZSgocHJldiwgY3VyciwgcmVkdWNlckluZGV4KSA9PiB7XG4gICAgICAvLyBDYWxjdWxhdGUgb2Zmc2V0IHVwIHVudGlsIGN1cnJlbnQgdG9hc3RcbiAgICAgIGlmIChyZWR1Y2VySW5kZXggPj0gaGVpZ2h0SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5oZWlnaHQ7XG4gICAgfSwgMCk7XG4gIH0sIFtoZWlnaHRzLCBoZWlnaHRJbmRleF0pO1xuICBjb25zdCBpc0RvY3VtZW50SGlkZGVuID0gdXNlSXNEb2N1bWVudEhpZGRlbigpO1xuXG4gIGNvbnN0IGludmVydCA9IHRvYXN0LmludmVydCB8fCBUb2FzdGVySW52ZXJ0O1xuICBjb25zdCBkaXNhYmxlZCA9IHRvYXN0VHlwZSA9PT0gJ2xvYWRpbmcnO1xuXG4gIG9mZnNldC5jdXJyZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiBoZWlnaHRJbmRleCAqIGdhcCArIHRvYXN0c0hlaWdodEJlZm9yZSwgW2hlaWdodEluZGV4LCB0b2FzdHNIZWlnaHRCZWZvcmVdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlbWFpbmluZ1RpbWUuY3VycmVudCA9IGR1cmF0aW9uO1xuICB9LCBbZHVyYXRpb25dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRyaWdnZXIgZW50ZXIgYW5pbWF0aW9uIHdpdGhvdXQgdXNpbmcgQ1NTIGFuaW1hdGlvblxuICAgIHNldE1vdW50ZWQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRvYXN0Tm9kZSA9IHRvYXN0UmVmLmN1cnJlbnQ7XG4gICAgaWYgKHRvYXN0Tm9kZSkge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdG9hc3ROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIC8vIEFkZCB0b2FzdCBoZWlnaHQgdG8gaGVpZ2h0cyBhcnJheSBhZnRlciB0aGUgdG9hc3QgaXMgbW91bnRlZFxuICAgICAgc2V0SW5pdGlhbEhlaWdodChoZWlnaHQpO1xuICAgICAgc2V0SGVpZ2h0cygoaCkgPT4gW3sgdG9hc3RJZDogdG9hc3QuaWQsIGhlaWdodCwgcG9zaXRpb246IHRvYXN0LnBvc2l0aW9uIH0sIC4uLmhdKTtcbiAgICAgIHJldHVybiAoKSA9PiBzZXRIZWlnaHRzKChoKSA9PiBoLmZpbHRlcigoaGVpZ2h0KSA9PiBoZWlnaHQudG9hc3RJZCAhPT0gdG9hc3QuaWQpKTtcbiAgICB9XG4gIH0sIFtzZXRIZWlnaHRzLCB0b2FzdC5pZF0pO1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtb3VudGVkKSByZXR1cm47XG4gICAgY29uc3QgdG9hc3ROb2RlID0gdG9hc3RSZWYuY3VycmVudDtcbiAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9IHRvYXN0Tm9kZS5zdHlsZS5oZWlnaHQ7XG4gICAgdG9hc3ROb2RlLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICBjb25zdCBuZXdIZWlnaHQgPSB0b2FzdE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIHRvYXN0Tm9kZS5zdHlsZS5oZWlnaHQgPSBvcmlnaW5hbEhlaWdodDtcblxuICAgIHNldEluaXRpYWxIZWlnaHQobmV3SGVpZ2h0KTtcblxuICAgIHNldEhlaWdodHMoKGhlaWdodHMpID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBoZWlnaHRzLmZpbmQoKGhlaWdodCkgPT4gaGVpZ2h0LnRvYXN0SWQgPT09IHRvYXN0LmlkKTtcbiAgICAgIGlmICghYWxyZWFkeUV4aXN0cykge1xuICAgICAgICByZXR1cm4gW3sgdG9hc3RJZDogdG9hc3QuaWQsIGhlaWdodDogbmV3SGVpZ2h0LCBwb3NpdGlvbjogdG9hc3QucG9zaXRpb24gfSwgLi4uaGVpZ2h0c107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaGVpZ2h0cy5tYXAoKGhlaWdodCkgPT4gKGhlaWdodC50b2FzdElkID09PSB0b2FzdC5pZCA/IHsgLi4uaGVpZ2h0LCBoZWlnaHQ6IG5ld0hlaWdodCB9IDogaGVpZ2h0KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFttb3VudGVkLCB0b2FzdC50aXRsZSwgdG9hc3QuZGVzY3JpcHRpb24sIHNldEhlaWdodHMsIHRvYXN0LmlkXSk7XG5cbiAgY29uc3QgZGVsZXRlVG9hc3QgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gU2F2ZSB0aGUgb2Zmc2V0IGZvciB0aGUgZXhpdCBzd2lwZSBhbmltYXRpb25cbiAgICBzZXRSZW1vdmVkKHRydWUpO1xuICAgIHNldE9mZnNldEJlZm9yZVJlbW92ZShvZmZzZXQuY3VycmVudCk7XG4gICAgc2V0SGVpZ2h0cygoaCkgPT4gaC5maWx0ZXIoKGhlaWdodCkgPT4gaGVpZ2h0LnRvYXN0SWQgIT09IHRvYXN0LmlkKSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlbW92ZVRvYXN0KHRvYXN0KTtcbiAgICB9LCBUSU1FX0JFRk9SRV9VTk1PVU5UKTtcbiAgfSwgW3RvYXN0LCByZW1vdmVUb2FzdCwgc2V0SGVpZ2h0cywgb2Zmc2V0XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoKHRvYXN0LnByb21pc2UgJiYgdG9hc3RUeXBlID09PSAnbG9hZGluZycpIHx8IHRvYXN0LmR1cmF0aW9uID09PSBJbmZpbml0eSB8fCB0b2FzdC50eXBlID09PSAnbG9hZGluZycpIHJldHVybjtcbiAgICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dDtcblxuICAgIC8vIFBhdXNlIHRoZSB0aW1lciBvbiBlYWNoIGhvdmVyXG4gICAgY29uc3QgcGF1c2VUaW1lciA9ICgpID0+IHtcbiAgICAgIGlmIChsYXN0Q2xvc2VUaW1lclN0YXJ0VGltZVJlZi5jdXJyZW50IDwgY2xvc2VUaW1lclN0YXJ0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIC8vIEdldCB0aGUgZWxhcHNlZCB0aW1lIHNpbmNlIHRoZSB0aW1lciBzdGFydGVkXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBjbG9zZVRpbWVyU3RhcnRUaW1lUmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgcmVtYWluaW5nVGltZS5jdXJyZW50ID0gcmVtYWluaW5nVGltZS5jdXJyZW50IC0gZWxhcHNlZFRpbWU7XG4gICAgICB9XG5cbiAgICAgIGxhc3RDbG9zZVRpbWVyU3RhcnRUaW1lUmVmLmN1cnJlbnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lciA9ICgpID0+IHtcbiAgICAgIC8vIHNldFRpbWVvdXQoLCBJbmZpbml0eSkgYmVoYXZlcyBhcyBpZiB0aGUgZGVsYXkgaXMgMC5cbiAgICAgIC8vIEFzIGEgcmVzdWx0LCB0aGUgdG9hc3Qgd291bGQgYmUgY2xvc2VkIGltbWVkaWF0ZWx5LCBnaXZpbmcgdGhlIGFwcGVhcmFuY2UgdGhhdCBpdCB3YXMgbmV2ZXIgcmVuZGVyZWQuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW55c2Rvdmhhbi93dGZqcz90YWI9cmVhZG1lLW92LWZpbGUjYW4taW5maW5pdGUtdGltZW91dFxuICAgICAgaWYgKHJlbWFpbmluZ1RpbWUuY3VycmVudCA9PT0gSW5maW5pdHkpIHJldHVybjtcblxuICAgICAgY2xvc2VUaW1lclN0YXJ0VGltZVJlZi5jdXJyZW50ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAgIC8vIExldCB0aGUgdG9hc3Qga25vdyBpdCBoYXMgc3RhcnRlZFxuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRvYXN0Lm9uQXV0b0Nsb3NlPy4odG9hc3QpO1xuICAgICAgICBkZWxldGVUb2FzdCgpO1xuICAgICAgfSwgcmVtYWluaW5nVGltZS5jdXJyZW50KTtcbiAgICB9O1xuXG4gICAgaWYgKGV4cGFuZGVkIHx8IGludGVyYWN0aW5nIHx8IChwYXVzZVdoZW5QYWdlSXNIaWRkZW4gJiYgaXNEb2N1bWVudEhpZGRlbikpIHtcbiAgICAgIHBhdXNlVGltZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUaW1lcigpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgfSwgW2V4cGFuZGVkLCBpbnRlcmFjdGluZywgdG9hc3QsIHRvYXN0VHlwZSwgcGF1c2VXaGVuUGFnZUlzSGlkZGVuLCBpc0RvY3VtZW50SGlkZGVuLCBkZWxldGVUb2FzdF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRvYXN0LmRlbGV0ZSkge1xuICAgICAgZGVsZXRlVG9hc3QoKTtcbiAgICB9XG4gIH0sIFtkZWxldGVUb2FzdCwgdG9hc3QuZGVsZXRlXSk7XG5cbiAgZnVuY3Rpb24gZ2V0TG9hZGluZ0ljb24oKSB7XG4gICAgaWYgKGljb25zPy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihjbGFzc05hbWVzPy5sb2FkZXIsIHRvYXN0Py5jbGFzc05hbWVzPy5sb2FkZXIsICdzb25uZXItbG9hZGVyJyl9XG4gICAgICAgICAgZGF0YS12aXNpYmxlPXt0b2FzdFR5cGUgPT09ICdsb2FkaW5nJ31cbiAgICAgICAgPlxuICAgICAgICAgIHtpY29ucy5sb2FkaW5nfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRpbmdJY29uUHJvcCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lcz8ubG9hZGVyLCB0b2FzdD8uY2xhc3NOYW1lcz8ubG9hZGVyLCAnc29ubmVyLWxvYWRlcicpfVxuICAgICAgICAgIGRhdGEtdmlzaWJsZT17dG9hc3RUeXBlID09PSAnbG9hZGluZyd9XG4gICAgICAgID5cbiAgICAgICAgICB7bG9hZGluZ0ljb25Qcm9wfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8TG9hZGVyIGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lcz8ubG9hZGVyLCB0b2FzdD8uY2xhc3NOYW1lcz8ubG9hZGVyKX0gdmlzaWJsZT17dG9hc3RUeXBlID09PSAnbG9hZGluZyd9IC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIHRhYkluZGV4PXswfVxuICAgICAgcmVmPXt0b2FzdFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgdG9hc3RDbGFzc25hbWUsXG4gICAgICAgIGNsYXNzTmFtZXM/LnRvYXN0LFxuICAgICAgICB0b2FzdD8uY2xhc3NOYW1lcz8udG9hc3QsXG4gICAgICAgIGNsYXNzTmFtZXM/LmRlZmF1bHQsXG4gICAgICAgIGNsYXNzTmFtZXM/Llt0b2FzdFR5cGVdLFxuICAgICAgICB0b2FzdD8uY2xhc3NOYW1lcz8uW3RvYXN0VHlwZV0sXG4gICAgICApfVxuICAgICAgZGF0YS1zb25uZXItdG9hc3Q9XCJcIlxuICAgICAgZGF0YS1yaWNoLWNvbG9ycz17dG9hc3QucmljaENvbG9ycyA/PyBkZWZhdWx0UmljaENvbG9yc31cbiAgICAgIGRhdGEtc3R5bGVkPXshQm9vbGVhbih0b2FzdC5qc3ggfHwgdG9hc3QudW5zdHlsZWQgfHwgdW5zdHlsZWQpfVxuICAgICAgZGF0YS1tb3VudGVkPXttb3VudGVkfVxuICAgICAgZGF0YS1wcm9taXNlPXtCb29sZWFuKHRvYXN0LnByb21pc2UpfVxuICAgICAgZGF0YS1zd2lwZWQ9e2lzU3dpcGVkfVxuICAgICAgZGF0YS1yZW1vdmVkPXtyZW1vdmVkfVxuICAgICAgZGF0YS12aXNpYmxlPXtpc1Zpc2libGV9XG4gICAgICBkYXRhLXktcG9zaXRpb249e3l9XG4gICAgICBkYXRhLXgtcG9zaXRpb249e3h9XG4gICAgICBkYXRhLWluZGV4PXtpbmRleH1cbiAgICAgIGRhdGEtZnJvbnQ9e2lzRnJvbnR9XG4gICAgICBkYXRhLXN3aXBpbmc9e3N3aXBpbmd9XG4gICAgICBkYXRhLWRpc21pc3NpYmxlPXtkaXNtaXNzaWJsZX1cbiAgICAgIGRhdGEtdHlwZT17dG9hc3RUeXBlfVxuICAgICAgZGF0YS1pbnZlcnQ9e2ludmVydH1cbiAgICAgIGRhdGEtc3dpcGUtb3V0PXtzd2lwZU91dH1cbiAgICAgIGRhdGEtc3dpcGUtZGlyZWN0aW9uPXtzd2lwZU91dERpcmVjdGlvbn1cbiAgICAgIGRhdGEtZXhwYW5kZWQ9e0Jvb2xlYW4oZXhwYW5kZWQgfHwgKGV4cGFuZEJ5RGVmYXVsdCAmJiBtb3VudGVkKSl9XG4gICAgICBzdHlsZT17XG4gICAgICAgIHtcbiAgICAgICAgICAnLS1pbmRleCc6IGluZGV4LFxuICAgICAgICAgICctLXRvYXN0cy1iZWZvcmUnOiBpbmRleCxcbiAgICAgICAgICAnLS16LWluZGV4JzogdG9hc3RzLmxlbmd0aCAtIGluZGV4LFxuICAgICAgICAgICctLW9mZnNldCc6IGAke3JlbW92ZWQgPyBvZmZzZXRCZWZvcmVSZW1vdmUgOiBvZmZzZXQuY3VycmVudH1weGAsXG4gICAgICAgICAgJy0taW5pdGlhbC1oZWlnaHQnOiBleHBhbmRCeURlZmF1bHQgPyAnYXV0bycgOiBgJHtpbml0aWFsSGVpZ2h0fXB4YCxcbiAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICAuLi50b2FzdC5zdHlsZSxcbiAgICAgICAgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgICB9XG4gICAgICBvbkRyYWdFbmQ9eygpID0+IHtcbiAgICAgICAgc2V0U3dpcGluZyhmYWxzZSk7XG4gICAgICAgIHNldFN3aXBlRGlyZWN0aW9uKG51bGwpO1xuICAgICAgICBwb2ludGVyU3RhcnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9fVxuICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChkaXNhYmxlZCB8fCAhZGlzbWlzc2libGUpIHJldHVybjtcbiAgICAgICAgZHJhZ1N0YXJ0VGltZS5jdXJyZW50ID0gbmV3IERhdGUoKTtcbiAgICAgICAgc2V0T2Zmc2V0QmVmb3JlUmVtb3ZlKG9mZnNldC5jdXJyZW50KTtcbiAgICAgICAgLy8gRW5zdXJlIHdlIG1haW50YWluIGNvcnJlY3QgcG9pbnRlciBjYXB0dXJlIGV2ZW4gd2hlbiBnb2luZyBvdXRzaWRlIG9mIHRoZSB0b2FzdCAoZS5nLiB3aGVuIHN3aXBpbmcpXG4gICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lID09PSAnQlVUVE9OJykgcmV0dXJuO1xuICAgICAgICBzZXRTd2lwaW5nKHRydWUpO1xuICAgICAgICBwb2ludGVyU3RhcnRSZWYuY3VycmVudCA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9O1xuICAgICAgfX1cbiAgICAgIG9uUG9pbnRlclVwPXsoKSA9PiB7XG4gICAgICAgIGlmIChzd2lwZU91dCB8fCAhZGlzbWlzc2libGUpIHJldHVybjtcblxuICAgICAgICBwb2ludGVyU3RhcnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHN3aXBlQW1vdW50WCA9IE51bWJlcihcbiAgICAgICAgICB0b2FzdFJlZi5jdXJyZW50Py5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXN3aXBlLWFtb3VudC14JykucmVwbGFjZSgncHgnLCAnJykgfHwgMCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3dpcGVBbW91bnRZID0gTnVtYmVyKFxuICAgICAgICAgIHRvYXN0UmVmLmN1cnJlbnQ/LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tc3dpcGUtYW1vdW50LXknKS5yZXBsYWNlKCdweCcsICcnKSB8fCAwLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0aW1lVGFrZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGRyYWdTdGFydFRpbWUuY3VycmVudD8uZ2V0VGltZSgpO1xuXG4gICAgICAgIGNvbnN0IHN3aXBlQW1vdW50ID0gc3dpcGVEaXJlY3Rpb24gPT09ICd4JyA/IHN3aXBlQW1vdW50WCA6IHN3aXBlQW1vdW50WTtcbiAgICAgICAgY29uc3QgdmVsb2NpdHkgPSBNYXRoLmFicyhzd2lwZUFtb3VudCkgLyB0aW1lVGFrZW47XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHN3aXBlQW1vdW50KSA+PSBTV0lQRV9USFJFU0hPTEQgfHwgdmVsb2NpdHkgPiAwLjExKSB7XG4gICAgICAgICAgc2V0T2Zmc2V0QmVmb3JlUmVtb3ZlKG9mZnNldC5jdXJyZW50KTtcbiAgICAgICAgICB0b2FzdC5vbkRpc21pc3M/Lih0b2FzdCk7XG5cbiAgICAgICAgICBpZiAoc3dpcGVEaXJlY3Rpb24gPT09ICd4Jykge1xuICAgICAgICAgICAgc2V0U3dpcGVPdXREaXJlY3Rpb24oc3dpcGVBbW91bnRYID4gMCA/ICdyaWdodCcgOiAnbGVmdCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTd2lwZU91dERpcmVjdGlvbihzd2lwZUFtb3VudFkgPiAwID8gJ2Rvd24nIDogJ3VwJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVsZXRlVG9hc3QoKTtcbiAgICAgICAgICBzZXRTd2lwZU91dCh0cnVlKTtcbiAgICAgICAgICBzZXRJc1N3aXBlZChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0U3dpcGluZyhmYWxzZSk7XG4gICAgICAgIHNldFN3aXBlRGlyZWN0aW9uKG51bGwpO1xuICAgICAgfX1cbiAgICAgIG9uUG9pbnRlck1vdmU9eyhldmVudCkgPT4ge1xuICAgICAgICBpZiAoIXBvaW50ZXJTdGFydFJlZi5jdXJyZW50IHx8ICFkaXNtaXNzaWJsZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnRvU3RyaW5nKCkubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKGlzSGlnaGxpZ2h0ZWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB5RGVsdGEgPSBldmVudC5jbGllbnRZIC0gcG9pbnRlclN0YXJ0UmVmLmN1cnJlbnQueTtcbiAgICAgICAgY29uc3QgeERlbHRhID0gZXZlbnQuY2xpZW50WCAtIHBvaW50ZXJTdGFydFJlZi5jdXJyZW50Lng7XG5cbiAgICAgICAgY29uc3Qgc3dpcGVEaXJlY3Rpb25zID0gcHJvcHMuc3dpcGVEaXJlY3Rpb25zID8/IGdldERlZmF1bHRTd2lwZURpcmVjdGlvbnMocG9zaXRpb24pO1xuXG4gICAgICAgIC8vIERldGVybWluZSBzd2lwZSBkaXJlY3Rpb24gaWYgbm90IGFscmVhZHkgbG9ja2VkXG4gICAgICAgIGlmICghc3dpcGVEaXJlY3Rpb24gJiYgKE1hdGguYWJzKHhEZWx0YSkgPiAxIHx8IE1hdGguYWJzKHlEZWx0YSkgPiAxKSkge1xuICAgICAgICAgIHNldFN3aXBlRGlyZWN0aW9uKE1hdGguYWJzKHhEZWx0YSkgPiBNYXRoLmFicyh5RGVsdGEpID8gJ3gnIDogJ3knKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzd2lwZUFtb3VudCA9IHsgeDogMCwgeTogMCB9O1xuXG4gICAgICAgIC8vIE9ubHkgYXBwbHkgc3dpcGUgaW4gdGhlIGxvY2tlZCBkaXJlY3Rpb25cbiAgICAgICAgaWYgKHN3aXBlRGlyZWN0aW9uID09PSAneScpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgdmVydGljYWwgc3dpcGVzXG4gICAgICAgICAgaWYgKHN3aXBlRGlyZWN0aW9ucy5pbmNsdWRlcygndG9wJykgfHwgc3dpcGVEaXJlY3Rpb25zLmluY2x1ZGVzKCdib3R0b20nKSkge1xuICAgICAgICAgICAgaWYgKHN3aXBlRGlyZWN0aW9ucy5pbmNsdWRlcygndG9wJykgJiYgeURlbHRhIDwgMCkge1xuICAgICAgICAgICAgICBzd2lwZUFtb3VudC55ID0geURlbHRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzd2lwZURpcmVjdGlvbnMuaW5jbHVkZXMoJ2JvdHRvbScpICYmIHlEZWx0YSA+IDApIHtcbiAgICAgICAgICAgICAgc3dpcGVBbW91bnQueSA9IHlEZWx0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3dpcGVEaXJlY3Rpb24gPT09ICd4Jykge1xuICAgICAgICAgIC8vIEhhbmRsZSBob3Jpem9udGFsIHN3aXBlc1xuICAgICAgICAgIGlmIChzd2lwZURpcmVjdGlvbnMuaW5jbHVkZXMoJ2xlZnQnKSB8fCBzd2lwZURpcmVjdGlvbnMuaW5jbHVkZXMoJ3JpZ2h0JykpIHtcbiAgICAgICAgICAgIGlmIChzd2lwZURpcmVjdGlvbnMuaW5jbHVkZXMoJ2xlZnQnKSAmJiB4RGVsdGEgPCAwKSB7XG4gICAgICAgICAgICAgIHN3aXBlQW1vdW50LnggPSB4RGVsdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXBlRGlyZWN0aW9ucy5pbmNsdWRlcygncmlnaHQnKSAmJiB4RGVsdGEgPiAwKSB7XG4gICAgICAgICAgICAgIHN3aXBlQW1vdW50LnggPSB4RGVsdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHN3aXBlQW1vdW50LngpID4gMCB8fCBNYXRoLmFicyhzd2lwZUFtb3VudC55KSA+IDApIHtcbiAgICAgICAgICBzZXRJc1N3aXBlZCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFwcGx5IHRyYW5zZm9ybSB1c2luZyBib3RoIHggYW5kIHkgdmFsdWVzXG4gICAgICAgIHRvYXN0UmVmLmN1cnJlbnQ/LnN0eWxlLnNldFByb3BlcnR5KCctLXN3aXBlLWFtb3VudC14JywgYCR7c3dpcGVBbW91bnQueH1weGApO1xuICAgICAgICB0b2FzdFJlZi5jdXJyZW50Py5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zd2lwZS1hbW91bnQteScsIGAke3N3aXBlQW1vdW50Lnl9cHhgKTtcbiAgICAgIH19XG4gICAgPlxuICAgICAge2Nsb3NlQnV0dG9uICYmICF0b2FzdC5qc3ggPyAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPXtjbG9zZUJ1dHRvbkFyaWFMYWJlbH1cbiAgICAgICAgICBkYXRhLWRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBkYXRhLWNsb3NlLWJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e1xuICAgICAgICAgICAgZGlzYWJsZWQgfHwgIWRpc21pc3NpYmxlXG4gICAgICAgICAgICAgID8gKCkgPT4ge31cbiAgICAgICAgICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVUb2FzdCgpO1xuICAgICAgICAgICAgICAgICAgdG9hc3Qub25EaXNtaXNzPy4odG9hc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihjbGFzc05hbWVzPy5jbG9zZUJ1dHRvbiwgdG9hc3Q/LmNsYXNzTmFtZXM/LmNsb3NlQnV0dG9uKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtpY29ucz8uY2xvc2UgPz8gQ2xvc2VJY29ufVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICkgOiBudWxsfVxuICAgICAgey8qIFRPRE86IFRoaXMgY2FuIGJlIGNsZWFuZXIgKi99XG4gICAgICB7dG9hc3QuanN4IHx8IGlzVmFsaWRFbGVtZW50KHRvYXN0LnRpdGxlKSA/IChcbiAgICAgICAgdG9hc3QuanN4ID8gKFxuICAgICAgICAgIHRvYXN0LmpzeFxuICAgICAgICApIDogdHlwZW9mIHRvYXN0LnRpdGxlID09PSAnZnVuY3Rpb24nID8gKFxuICAgICAgICAgIHRvYXN0LnRpdGxlKClcbiAgICAgICAgKSA6IChcbiAgICAgICAgICB0b2FzdC50aXRsZVxuICAgICAgICApXG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHt0b2FzdFR5cGUgfHwgdG9hc3QuaWNvbiB8fCB0b2FzdC5wcm9taXNlID8gKFxuICAgICAgICAgICAgPGRpdiBkYXRhLWljb249XCJcIiBjbGFzc05hbWU9e2NuKGNsYXNzTmFtZXM/Lmljb24sIHRvYXN0Py5jbGFzc05hbWVzPy5pY29uKX0+XG4gICAgICAgICAgICAgIHt0b2FzdC5wcm9taXNlIHx8ICh0b2FzdC50eXBlID09PSAnbG9hZGluZycgJiYgIXRvYXN0Lmljb24pID8gdG9hc3QuaWNvbiB8fCBnZXRMb2FkaW5nSWNvbigpIDogbnVsbH1cbiAgICAgICAgICAgICAge3RvYXN0LnR5cGUgIT09ICdsb2FkaW5nJyA/IHRvYXN0Lmljb24gfHwgaWNvbnM/Llt0b2FzdFR5cGVdIHx8IGdldEFzc2V0KHRvYXN0VHlwZSkgOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICA8ZGl2IGRhdGEtY29udGVudD1cIlwiIGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lcz8uY29udGVudCwgdG9hc3Q/LmNsYXNzTmFtZXM/LmNvbnRlbnQpfT5cbiAgICAgICAgICAgIDxkaXYgZGF0YS10aXRsZT1cIlwiIGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lcz8udGl0bGUsIHRvYXN0Py5jbGFzc05hbWVzPy50aXRsZSl9PlxuICAgICAgICAgICAgICB7dHlwZW9mIHRvYXN0LnRpdGxlID09PSAnZnVuY3Rpb24nID8gdG9hc3QudGl0bGUoKSA6IHRvYXN0LnRpdGxlfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dG9hc3QuZGVzY3JpcHRpb24gPyAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLWRlc2NyaXB0aW9uPVwiXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25DbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICB0b2FzdERlc2NyaXB0aW9uQ2xhc3NuYW1lLFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICB0b2FzdD8uY2xhc3NOYW1lcz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0eXBlb2YgdG9hc3QuZGVzY3JpcHRpb24gPT09ICdmdW5jdGlvbicgPyB0b2FzdC5kZXNjcmlwdGlvbigpIDogdG9hc3QuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2lzVmFsaWRFbGVtZW50KHRvYXN0LmNhbmNlbCkgPyAoXG4gICAgICAgICAgICB0b2FzdC5jYW5jZWxcbiAgICAgICAgICApIDogdG9hc3QuY2FuY2VsICYmIGlzQWN0aW9uKHRvYXN0LmNhbmNlbCkgPyAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGRhdGEtYnV0dG9uXG4gICAgICAgICAgICAgIGRhdGEtY2FuY2VsXG4gICAgICAgICAgICAgIHN0eWxlPXt0b2FzdC5jYW5jZWxCdXR0b25TdHlsZSB8fCBjYW5jZWxCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0d2ljZSBiZWNhdXNlIHR5cGVzY3JpcHRcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uKHRvYXN0LmNhbmNlbCkpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIWRpc21pc3NpYmxlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdG9hc3QuY2FuY2VsLm9uQ2xpY2s/LihldmVudCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlVG9hc3QoKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihjbGFzc05hbWVzPy5jYW5jZWxCdXR0b24sIHRvYXN0Py5jbGFzc05hbWVzPy5jYW5jZWxCdXR0b24pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dG9hc3QuY2FuY2VsLmxhYmVsfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge2lzVmFsaWRFbGVtZW50KHRvYXN0LmFjdGlvbikgPyAoXG4gICAgICAgICAgICB0b2FzdC5hY3Rpb25cbiAgICAgICAgICApIDogdG9hc3QuYWN0aW9uICYmIGlzQWN0aW9uKHRvYXN0LmFjdGlvbikgPyAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGRhdGEtYnV0dG9uXG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uXG4gICAgICAgICAgICAgIHN0eWxlPXt0b2FzdC5hY3Rpb25CdXR0b25TdHlsZSB8fCBhY3Rpb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0d2ljZSBiZWNhdXNlIHR5cGVzY3JpcHRcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uKHRvYXN0LmFjdGlvbikpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0b2FzdC5hY3Rpb24ub25DbGljaz8uKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlbGV0ZVRvYXN0KCk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lcz8uYWN0aW9uQnV0dG9uLCB0b2FzdD8uY2xhc3NOYW1lcz8uYWN0aW9uQnV0dG9uKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3RvYXN0LmFjdGlvbi5sYWJlbH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgPC9saT5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGdldERvY3VtZW50RGlyZWN0aW9uKCk6IFRvYXN0ZXJQcm9wc1snZGlyJ10ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAnbHRyJztcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAnbHRyJzsgLy8gRm9yIEZyZXNoIHB1cnBvc2VcblxuICBjb25zdCBkaXJBdHRyaWJ1dGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXInKTtcblxuICBpZiAoZGlyQXR0cmlidXRlID09PSAnYXV0bycgfHwgIWRpckF0dHJpYnV0ZSkge1xuICAgIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmRpcmVjdGlvbiBhcyBUb2FzdGVyUHJvcHNbJ2RpciddO1xuICB9XG5cbiAgcmV0dXJuIGRpckF0dHJpYnV0ZSBhcyBUb2FzdGVyUHJvcHNbJ2RpciddO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25PZmZzZXQoZGVmYXVsdE9mZnNldDogVG9hc3RlclByb3BzWydvZmZzZXQnXSwgbW9iaWxlT2Zmc2V0OiBUb2FzdGVyUHJvcHNbJ21vYmlsZU9mZnNldCddKSB7XG4gIGNvbnN0IHN0eWxlcyA9IHt9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXM7XG5cbiAgW2RlZmF1bHRPZmZzZXQsIG1vYmlsZU9mZnNldF0uZm9yRWFjaCgob2Zmc2V0LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlzTW9iaWxlID0gaW5kZXggPT09IDE7XG4gICAgY29uc3QgcHJlZml4ID0gaXNNb2JpbGUgPyAnLS1tb2JpbGUtb2Zmc2V0JyA6ICctLW9mZnNldCc7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXNNb2JpbGUgPyBNT0JJTEVfVklFV1BPUlRfT0ZGU0VUIDogVklFV1BPUlRfT0ZGU0VUO1xuXG4gICAgZnVuY3Rpb24gYXNzaWduQWxsKG9mZnNldDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBzdHlsZXNbYCR7cHJlZml4fS0ke2tleX1gXSA9IHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInID8gYCR7b2Zmc2V0fXB4YCA6IG9mZnNldDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgYXNzaWduQWxsKG9mZnNldCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKG9mZnNldFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHlsZXNbYCR7cHJlZml4fS0ke2tleX1gXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZXNbYCR7cHJlZml4fS0ke2tleX1gXSA9IHR5cGVvZiBvZmZzZXRba2V5XSA9PT0gJ251bWJlcicgPyBgJHtvZmZzZXRba2V5XX1weGAgOiBvZmZzZXRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnbkFsbChkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gdXNlU29ubmVyKCkge1xuICBjb25zdCBbYWN0aXZlVG9hc3RzLCBzZXRBY3RpdmVUb2FzdHNdID0gUmVhY3QudXNlU3RhdGU8VG9hc3RUW10+KFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBUb2FzdFN0YXRlLnN1YnNjcmliZSgodG9hc3QpID0+IHtcbiAgICAgIGlmICgodG9hc3QgYXMgVG9hc3RUb0Rpc21pc3MpLmRpc21pc3MpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgUmVhY3RET00uZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVRvYXN0cygodG9hc3RzKSA9PiB0b2FzdHMuZmlsdGVyKCh0KSA9PiB0LmlkICE9PSB0b2FzdC5pZCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IGJhdGNoaW5nLCB0ZW1wIHNvbHV0aW9uLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIFJlYWN0RE9NLmZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgICAgc2V0QWN0aXZlVG9hc3RzKCh0b2FzdHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZFeGlzdGluZ1RvYXN0ID0gdG9hc3RzLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gdG9hc3QuaWQpO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRvYXN0IGlmIGl0IGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgICBpZiAoaW5kZXhPZkV4aXN0aW5nVG9hc3QgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4udG9hc3RzLnNsaWNlKDAsIGluZGV4T2ZFeGlzdGluZ1RvYXN0KSxcbiAgICAgICAgICAgICAgICB7IC4uLnRvYXN0c1tpbmRleE9mRXhpc3RpbmdUb2FzdF0sIC4uLnRvYXN0IH0sXG4gICAgICAgICAgICAgICAgLi4udG9hc3RzLnNsaWNlKGluZGV4T2ZFeGlzdGluZ1RvYXN0ICsgMSksXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBbdG9hc3QsIC4uLnRvYXN0c107XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4ge1xuICAgIHRvYXN0czogYWN0aXZlVG9hc3RzLFxuICB9O1xufVxuXG5jb25zdCBUb2FzdGVyID0gZm9yd2FyZFJlZjxIVE1MRWxlbWVudCwgVG9hc3RlclByb3BzPihmdW5jdGlvbiBUb2FzdGVyKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgIGludmVydCxcbiAgICBwb3NpdGlvbiA9ICdib3R0b20tcmlnaHQnLFxuICAgIGhvdGtleSA9IFsnYWx0S2V5JywgJ0tleVQnXSxcbiAgICBleHBhbmQsXG4gICAgY2xvc2VCdXR0b24sXG4gICAgY2xhc3NOYW1lLFxuICAgIG9mZnNldCxcbiAgICBtb2JpbGVPZmZzZXQsXG4gICAgdGhlbWUgPSAnbGlnaHQnLFxuICAgIHJpY2hDb2xvcnMsXG4gICAgZHVyYXRpb24sXG4gICAgc3R5bGUsXG4gICAgdmlzaWJsZVRvYXN0cyA9IFZJU0lCTEVfVE9BU1RTX0FNT1VOVCxcbiAgICB0b2FzdE9wdGlvbnMsXG4gICAgZGlyID0gZ2V0RG9jdW1lbnREaXJlY3Rpb24oKSxcbiAgICBnYXAgPSBHQVAsXG4gICAgbG9hZGluZ0ljb24sXG4gICAgaWNvbnMsXG4gICAgY29udGFpbmVyQXJpYUxhYmVsID0gJ05vdGlmaWNhdGlvbnMnLFxuICAgIHBhdXNlV2hlblBhZ2VJc0hpZGRlbixcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbdG9hc3RzLCBzZXRUb2FzdHNdID0gUmVhY3QudXNlU3RhdGU8VG9hc3RUW10+KFtdKTtcbiAgY29uc3QgcG9zc2libGVQb3NpdGlvbnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoW3Bvc2l0aW9uXS5jb25jYXQodG9hc3RzLmZpbHRlcigodG9hc3QpID0+IHRvYXN0LnBvc2l0aW9uKS5tYXAoKHRvYXN0KSA9PiB0b2FzdC5wb3NpdGlvbikpKSxcbiAgICApO1xuICB9LCBbdG9hc3RzLCBwb3NpdGlvbl0pO1xuICBjb25zdCBbaGVpZ2h0cywgc2V0SGVpZ2h0c10gPSBSZWFjdC51c2VTdGF0ZTxIZWlnaHRUW10+KFtdKTtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpbnRlcmFjdGluZywgc2V0SW50ZXJhY3RpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYWN0dWFsVGhlbWUsIHNldEFjdHVhbFRoZW1lXSA9IFJlYWN0LnVzZVN0YXRlKFxuICAgIHRoZW1lICE9PSAnc3lzdGVtJ1xuICAgICAgPyB0aGVtZVxuICAgICAgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgPyB3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXNcbiAgICAgICAgPyAnZGFyaydcbiAgICAgICAgOiAnbGlnaHQnXG4gICAgICA6ICdsaWdodCcsXG4gICk7XG5cbiAgY29uc3QgbGlzdFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MT0xpc3RFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaG90a2V5TGFiZWwgPSBob3RrZXkuam9pbignKycpLnJlcGxhY2UoL0tleS9nLCAnJykucmVwbGFjZSgvRGlnaXQvZywgJycpO1xuICBjb25zdCBsYXN0Rm9jdXNlZEVsZW1lbnRSZWYgPSBSZWFjdC51c2VSZWY8SFRNTEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpc0ZvY3VzV2l0aGluUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICBjb25zdCByZW1vdmVUb2FzdCA9IFJlYWN0LnVzZUNhbGxiYWNrKCh0b2FzdFRvUmVtb3ZlOiBUb2FzdFQpID0+IHtcbiAgICBzZXRUb2FzdHMoKHRvYXN0cykgPT4ge1xuICAgICAgaWYgKCF0b2FzdHMuZmluZCgodG9hc3QpID0+IHRvYXN0LmlkID09PSB0b2FzdFRvUmVtb3ZlLmlkKT8uZGVsZXRlKSB7XG4gICAgICAgIFRvYXN0U3RhdGUuZGlzbWlzcyh0b2FzdFRvUmVtb3ZlLmlkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRvYXN0cy5maWx0ZXIoKHsgaWQgfSkgPT4gaWQgIT09IHRvYXN0VG9SZW1vdmUuaWQpO1xuICAgIH0pO1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gVG9hc3RTdGF0ZS5zdWJzY3JpYmUoKHRvYXN0KSA9PiB7XG4gICAgICBpZiAoKHRvYXN0IGFzIFRvYXN0VG9EaXNtaXNzKS5kaXNtaXNzKSB7XG4gICAgICAgIHNldFRvYXN0cygodG9hc3RzKSA9PiB0b2FzdHMubWFwKCh0KSA9PiAodC5pZCA9PT0gdG9hc3QuaWQgPyB7IC4uLnQsIGRlbGV0ZTogdHJ1ZSB9IDogdCkpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IGJhdGNoaW5nLCB0ZW1wIHNvbHV0aW9uLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIFJlYWN0RE9NLmZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgICAgc2V0VG9hc3RzKCh0b2FzdHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZFeGlzdGluZ1RvYXN0ID0gdG9hc3RzLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gdG9hc3QuaWQpO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRvYXN0IGlmIGl0IGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgICBpZiAoaW5kZXhPZkV4aXN0aW5nVG9hc3QgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4udG9hc3RzLnNsaWNlKDAsIGluZGV4T2ZFeGlzdGluZ1RvYXN0KSxcbiAgICAgICAgICAgICAgICB7IC4uLnRvYXN0c1tpbmRleE9mRXhpc3RpbmdUb2FzdF0sIC4uLnRvYXN0IH0sXG4gICAgICAgICAgICAgICAgLi4udG9hc3RzLnNsaWNlKGluZGV4T2ZFeGlzdGluZ1RvYXN0ICsgMSksXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBbdG9hc3QsIC4uLnRvYXN0c107XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aGVtZSAhPT0gJ3N5c3RlbScpIHtcbiAgICAgIHNldEFjdHVhbFRoZW1lKHRoZW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhlbWUgPT09ICdzeXN0ZW0nKSB7XG4gICAgICAvLyBjaGVjayBpZiBjdXJyZW50IHByZWZlcmVuY2UgaXMgZGFya1xuICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhICYmIHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlcykge1xuICAgICAgICAvLyBpdCdzIGN1cnJlbnRseSBkYXJrXG4gICAgICAgIHNldEFjdHVhbFRoZW1lKCdkYXJrJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpdCdzIG5vdCBkYXJrXG4gICAgICAgIHNldEFjdHVhbFRoZW1lKCdsaWdodCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGNvbnN0IGRhcmtNZWRpYVF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDaHJvbWUgJiBGaXJlZm94XG4gICAgICBkYXJrTWVkaWFRdWVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoeyBtYXRjaGVzIH0pID0+IHtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICBzZXRBY3R1YWxUaGVtZSgnZGFyaycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEFjdHVhbFRoZW1lKCdsaWdodCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU2FmYXJpIDwgMTRcbiAgICAgIGRhcmtNZWRpYVF1ZXJ5LmFkZExpc3RlbmVyKCh7IG1hdGNoZXMgfSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICBzZXRBY3R1YWxUaGVtZSgnZGFyaycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRBY3R1YWxUaGVtZSgnbGlnaHQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt0aGVtZV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRW5zdXJlIGV4cGFuZGVkIGlzIGFsd2F5cyBmYWxzZSB3aGVuIG5vIHRvYXN0cyBhcmUgcHJlc2VudCAvIG9ubHkgb25lIGxlZnRcbiAgICBpZiAodG9hc3RzLmxlbmd0aCA8PSAxKSB7XG4gICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgfVxuICB9LCBbdG9hc3RzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBpc0hvdGtleVByZXNzZWQgPSBob3RrZXkuZXZlcnkoKGtleSkgPT4gKGV2ZW50IGFzIGFueSlba2V5XSB8fCBldmVudC5jb2RlID09PSBrZXkpO1xuXG4gICAgICBpZiAoaXNIb3RrZXlQcmVzc2VkKSB7XG4gICAgICAgIHNldEV4cGFuZGVkKHRydWUpO1xuICAgICAgICBsaXN0UmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgJiZcbiAgICAgICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxpc3RSZWYuY3VycmVudCB8fCBsaXN0UmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKVxuICAgICAgKSB7XG4gICAgICAgIHNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcblxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7XG4gIH0sIFtob3RrZXldKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsaXN0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGxhc3RGb2N1c2VkRWxlbWVudFJlZi5jdXJyZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICBsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgaXNGb2N1c1dpdGhpblJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LCBbbGlzdFJlZi5jdXJyZW50XSk7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBSZW1vdmUgaXRlbSBmcm9tIG5vcm1hbCBuYXZpZ2F0aW9uIGZsb3csIG9ubHkgYXZhaWxhYmxlIHZpYSBob3RrZXlcbiAgICA8c2VjdGlvblxuICAgICAgcmVmPXtyZWZ9XG4gICAgICBhcmlhLWxhYmVsPXtgJHtjb250YWluZXJBcmlhTGFiZWx9ICR7aG90a2V5TGFiZWx9YH1cbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICBhcmlhLXJlbGV2YW50PVwiYWRkaXRpb25zIHRleHRcIlxuICAgICAgYXJpYS1hdG9taWM9XCJmYWxzZVwiXG4gICAgICBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcbiAgICA+XG4gICAgICB7cG9zc2libGVQb3NpdGlvbnMubWFwKChwb3NpdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgW3ksIHhdID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcblxuICAgICAgICBpZiAoIXRvYXN0cy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPG9sXG4gICAgICAgICAgICBrZXk9e3Bvc2l0aW9ufVxuICAgICAgICAgICAgZGlyPXtkaXIgPT09ICdhdXRvJyA/IGdldERvY3VtZW50RGlyZWN0aW9uKCkgOiBkaXJ9XG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICByZWY9e2xpc3RSZWZ9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgIGRhdGEtc29ubmVyLXRvYXN0ZXJcbiAgICAgICAgICAgIGRhdGEtdGhlbWU9e2FjdHVhbFRoZW1lfVxuICAgICAgICAgICAgZGF0YS15LXBvc2l0aW9uPXt5fVxuICAgICAgICAgICAgZGF0YS1saWZ0ZWQ9e2V4cGFuZGVkICYmIHRvYXN0cy5sZW5ndGggPiAxICYmICFleHBhbmR9XG4gICAgICAgICAgICBkYXRhLXgtcG9zaXRpb249e3h9XG4gICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnLS1mcm9udC10b2FzdC1oZWlnaHQnOiBgJHtoZWlnaHRzWzBdPy5oZWlnaHQgfHwgMH1weGAsXG4gICAgICAgICAgICAgICAgJy0td2lkdGgnOiBgJHtUT0FTVF9XSURUSH1weGAsXG4gICAgICAgICAgICAgICAgJy0tZ2FwJzogYCR7Z2FwfXB4YCxcbiAgICAgICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICAgICAgICAuLi5hc3NpZ25PZmZzZXQob2Zmc2V0LCBtb2JpbGVPZmZzZXQpLFxuICAgICAgICAgICAgICB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQmx1cj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0ZvY3VzV2l0aGluUmVmLmN1cnJlbnQgJiYgIWV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBpc0ZvY3VzV2l0aGluUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdEZvY3VzZWRFbGVtZW50UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGxhc3RGb2N1c2VkRWxlbWVudFJlZi5jdXJyZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgIGxhc3RGb2N1c2VkRWxlbWVudFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkZvY3VzPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNOb3REaXNtaXNzaWJsZSA9XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGUgPT09ICdmYWxzZSc7XG5cbiAgICAgICAgICAgICAgaWYgKGlzTm90RGlzbWlzc2libGUpIHJldHVybjtcblxuICAgICAgICAgICAgICBpZiAoIWlzRm9jdXNXaXRoaW5SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlzRm9jdXNXaXRoaW5SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGFzdEZvY3VzZWRFbGVtZW50UmVmLmN1cnJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRFeHBhbmRlZCh0cnVlKX1cbiAgICAgICAgICAgIG9uTW91c2VNb3ZlPXsoKSA9PiBzZXRFeHBhbmRlZCh0cnVlKX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4ge1xuICAgICAgICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGV4cGFuZGVkIHRvIGZhbHNlIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIHRvYXN0LCBlLmcuIHN3aXBpbmdcbiAgICAgICAgICAgICAgaWYgKCFpbnRlcmFjdGluZykge1xuICAgICAgICAgICAgICAgIHNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uRHJhZ0VuZD17KCkgPT4gc2V0RXhwYW5kZWQoZmFsc2UpfVxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzTm90RGlzbWlzc2libGUgPVxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlID09PSAnZmFsc2UnO1xuXG4gICAgICAgICAgICAgIGlmIChpc05vdERpc21pc3NpYmxlKSByZXR1cm47XG4gICAgICAgICAgICAgIHNldEludGVyYWN0aW5nKHRydWUpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUG9pbnRlclVwPXsoKSA9PiBzZXRJbnRlcmFjdGluZyhmYWxzZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RvYXN0c1xuICAgICAgICAgICAgICAuZmlsdGVyKCh0b2FzdCkgPT4gKCF0b2FzdC5wb3NpdGlvbiAmJiBpbmRleCA9PT0gMCkgfHwgdG9hc3QucG9zaXRpb24gPT09IHBvc2l0aW9uKVxuICAgICAgICAgICAgICAubWFwKCh0b2FzdCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8VG9hc3RcbiAgICAgICAgICAgICAgICAgIGtleT17dG9hc3QuaWR9XG4gICAgICAgICAgICAgICAgICBpY29ucz17aWNvbnN9XG4gICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICB0b2FzdD17dG9hc3R9XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0UmljaENvbG9ycz17cmljaENvbG9yc31cbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPXt0b2FzdE9wdGlvbnM/LmR1cmF0aW9uID8/IGR1cmF0aW9ufVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0b2FzdE9wdGlvbnM/LmNsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uQ2xhc3NOYW1lPXt0b2FzdE9wdGlvbnM/LmRlc2NyaXB0aW9uQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgaW52ZXJ0PXtpbnZlcnR9XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlVG9hc3RzPXt2aXNpYmxlVG9hc3RzfVxuICAgICAgICAgICAgICAgICAgY2xvc2VCdXR0b249e3RvYXN0T3B0aW9ucz8uY2xvc2VCdXR0b24gPz8gY2xvc2VCdXR0b259XG4gICAgICAgICAgICAgICAgICBpbnRlcmFjdGluZz17aW50ZXJhY3Rpbmd9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbj17cG9zaXRpb259XG4gICAgICAgICAgICAgICAgICBzdHlsZT17dG9hc3RPcHRpb25zPy5zdHlsZX1cbiAgICAgICAgICAgICAgICAgIHVuc3R5bGVkPXt0b2FzdE9wdGlvbnM/LnVuc3R5bGVkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcz17dG9hc3RPcHRpb25zPy5jbGFzc05hbWVzfVxuICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uU3R5bGU9e3RvYXN0T3B0aW9ucz8uY2FuY2VsQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25CdXR0b25TdHlsZT17dG9hc3RPcHRpb25zPy5hY3Rpb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgIHJlbW92ZVRvYXN0PXtyZW1vdmVUb2FzdH1cbiAgICAgICAgICAgICAgICAgIHRvYXN0cz17dG9hc3RzLmZpbHRlcigodCkgPT4gdC5wb3NpdGlvbiA9PSB0b2FzdC5wb3NpdGlvbil9XG4gICAgICAgICAgICAgICAgICBoZWlnaHRzPXtoZWlnaHRzLmZpbHRlcigoaCkgPT4gaC5wb3NpdGlvbiA9PSB0b2FzdC5wb3NpdGlvbil9XG4gICAgICAgICAgICAgICAgICBzZXRIZWlnaHRzPXtzZXRIZWlnaHRzfVxuICAgICAgICAgICAgICAgICAgZXhwYW5kQnlEZWZhdWx0PXtleHBhbmR9XG4gICAgICAgICAgICAgICAgICBnYXA9e2dhcH1cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmdJY29uPXtsb2FkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgICAgICAgIHBhdXNlV2hlblBhZ2VJc0hpZGRlbj17cGF1c2VXaGVuUGFnZUlzSGlkZGVufVxuICAgICAgICAgICAgICAgICAgc3dpcGVEaXJlY3Rpb25zPXtwcm9wcy5zd2lwZURpcmVjdGlvbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9vbD5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn0pO1xuZXhwb3J0IHsgdG9hc3QsIFRvYXN0ZXIsIHR5cGUgRXh0ZXJuYWxUb2FzdCwgdHlwZSBUb2FzdFQsIHR5cGUgVG9hc3RlclByb3BzLCB1c2VTb25uZXIgfTtcbmV4cG9ydCB7IHR5cGUgVG9hc3RDbGFzc25hbWVzLCB0eXBlIFRvYXN0VG9EaXNtaXNzLCB0eXBlIEFjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuIiwiJ3VzZSBjbGllbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgVG9hc3RUeXBlcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzZXQgPSAodHlwZTogVG9hc3RUeXBlcyk6IEpTWC5FbGVtZW50IHwgbnVsbCA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgcmV0dXJuIFN1Y2Nlc3NJY29uO1xuXG4gICAgY2FzZSAnaW5mbyc6XG4gICAgICByZXR1cm4gSW5mb0ljb247XG5cbiAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgIHJldHVybiBXYXJuaW5nSWNvbjtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBFcnJvckljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGJhcnMgPSBBcnJheSgxMikuZmlsbCgwKTtcblxuZXhwb3J0IGNvbnN0IExvYWRlciA9ICh7IHZpc2libGUsIGNsYXNzTmFtZSB9OiB7IHZpc2libGU6IGJvb2xlYW4sIGNsYXNzTmFtZT86IHN0cmluZyB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e1snc29ubmVyLWxvYWRpbmctd3JhcHBlcicsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0gZGF0YS12aXNpYmxlPXt2aXNpYmxlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic29ubmVyLXNwaW5uZXJcIj5cbiAgICAgICAge2JhcnMubWFwKChfLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzb25uZXItbG9hZGluZy1iYXJcIiBrZXk9e2BzcGlubmVyLWJhci0ke2l9YH0gLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IFN1Y2Nlc3NJY29uID0gKFxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiPlxuICAgIDxwYXRoXG4gICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgZD1cIk0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjg1Ny05LjgwOWEuNzUuNzUgMCAwMC0xLjIxNC0uODgybC0zLjQ4MyA0Ljc5LTEuODgtMS44OGEuNzUuNzUgMCAxMC0xLjA2IDEuMDYxbDIuNSAyLjVhLjc1Ljc1IDAgMDAxLjEzNy0uMDg5bDQtNS41elwiXG4gICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKTtcblxuY29uc3QgV2FybmluZ0ljb24gPSAoXG4gIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCI+XG4gICAgPHBhdGhcbiAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICBkPVwiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXpcIlxuICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmNvbnN0IEluZm9JY29uID0gKFxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiPlxuICAgIDxwYXRoXG4gICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgZD1cIk0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTctNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTkgOWEuNzUuNzUgMCAwMDAgMS41aC4yNTNhLjI1LjI1IDAgMDEuMjQ0LjMwNGwtLjQ1OSAyLjA2NkExLjc1IDEuNzUgMCAwMDEwLjc0NyAxNUgxMWEuNzUuNzUgMCAwMDAtMS41aC0uMjUzYS4yNS4yNSAwIDAxLS4yNDQtLjMwNGwuNDU5LTIuMDY2QTEuNzUgMS43NSAwIDAwOS4yNTMgOUg5elwiXG4gICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKTtcblxuY29uc3QgRXJyb3JJY29uID0gKFxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiPlxuICAgIDxwYXRoXG4gICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgZD1cIk0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTgtNWEuNzUuNzUgMCAwMS43NS43NXY0LjVhLjc1Ljc1IDAgMDEtMS41IDB2LTQuNUEuNzUuNzUgMCAwMTEwIDV6bTAgMTBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5leHBvcnQgY29uc3QgQ2xvc2VJY29uID0gKFxuICA8c3ZnXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgd2lkdGg9XCIxMlwiXG4gICAgaGVpZ2h0PVwiMTJcIlxuICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgIHN0cm9rZVdpZHRoPVwiMS41XCJcbiAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICA+XG4gICAgPGxpbmUgeDE9XCIxOFwiIHkxPVwiNlwiIHgyPVwiNlwiIHkyPVwiMThcIj48L2xpbmU+XG4gICAgPGxpbmUgeDE9XCI2XCIgeTE9XCI2XCIgeDI9XCIxOFwiIHkyPVwiMThcIj48L2xpbmU+XG4gIDwvc3ZnPlxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCB1c2VJc0RvY3VtZW50SGlkZGVuID0gKCkgPT4ge1xuICBjb25zdCBbaXNEb2N1bWVudEhpZGRlbiwgc2V0SXNEb2N1bWVudEhpZGRlbl0gPSBSZWFjdC51c2VTdGF0ZShkb2N1bWVudC5oaWRkZW4pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBzZXRJc0RvY3VtZW50SGlkZGVuKGRvY3VtZW50LmhpZGRlbik7XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiBpc0RvY3VtZW50SGlkZGVuO1xufTtcbiIsImltcG9ydCB0eXBlIHsgRXh0ZXJuYWxUb2FzdCwgUHJvbWlzZURhdGEsIFByb21pc2VULCBUb2FzdFQsIFRvYXN0VG9EaXNtaXNzLCBUb2FzdFR5cGVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmxldCB0b2FzdHNDb3VudGVyID0gMTtcblxudHlwZSB0aXRsZVQgPSAoKCkgPT4gUmVhY3QuUmVhY3ROb2RlKSB8IFJlYWN0LlJlYWN0Tm9kZTtcblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBzdWJzY3JpYmVyczogQXJyYXk8KHRvYXN0OiBFeHRlcm5hbFRvYXN0IHwgVG9hc3RUb0Rpc21pc3MpID0+IHZvaWQ+O1xuICB0b2FzdHM6IEFycmF5PFRvYXN0VCB8IFRvYXN0VG9EaXNtaXNzPjtcbiAgZGlzbWlzc2VkVG9hc3RzOiBTZXQ8c3RyaW5nIHwgbnVtYmVyPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN1YnNjcmliZXJzID0gW107XG4gICAgdGhpcy50b2FzdHMgPSBbXTtcbiAgICB0aGlzLmRpc21pc3NlZFRvYXN0cyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIC8vIFdlIHVzZSBhcnJvdyBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gdGhlIGNvcnJlY3QgYHRoaXNgIHJlZmVyZW5jZVxuICBzdWJzY3JpYmUgPSAoc3Vic2NyaWJlcjogKHRvYXN0OiBUb2FzdFQgfCBUb2FzdFRvRGlzbWlzcykgPT4gdm9pZCkgPT4ge1xuICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc3Vic2NyaWJlcnMuaW5kZXhPZihzdWJzY3JpYmVyKTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9O1xuXG4gIHB1Ymxpc2ggPSAoZGF0YTogVG9hc3RUKSA9PiB7XG4gICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiBzdWJzY3JpYmVyKGRhdGEpKTtcbiAgfTtcblxuICBhZGRUb2FzdCA9IChkYXRhOiBUb2FzdFQpID0+IHtcbiAgICB0aGlzLnB1Ymxpc2goZGF0YSk7XG4gICAgdGhpcy50b2FzdHMgPSBbLi4udGhpcy50b2FzdHMsIGRhdGFdO1xuICB9O1xuXG4gIGNyZWF0ZSA9IChcbiAgICBkYXRhOiBFeHRlcm5hbFRvYXN0ICYge1xuICAgICAgbWVzc2FnZT86IHRpdGxlVDtcbiAgICAgIHR5cGU/OiBUb2FzdFR5cGVzO1xuICAgICAgcHJvbWlzZT86IFByb21pc2VUO1xuICAgICAganN4PzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgIH0sXG4gICkgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgLi4ucmVzdCB9ID0gZGF0YTtcbiAgICBjb25zdCBpZCA9IHR5cGVvZiBkYXRhPy5pZCA9PT0gJ251bWJlcicgfHwgZGF0YS5pZD8ubGVuZ3RoID4gMCA/IGRhdGEuaWQgOiB0b2FzdHNDb3VudGVyKys7XG4gICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IHRoaXMudG9hc3RzLmZpbmQoKHRvYXN0KSA9PiB7XG4gICAgICByZXR1cm4gdG9hc3QuaWQgPT09IGlkO1xuICAgIH0pO1xuICAgIGNvbnN0IGRpc21pc3NpYmxlID0gZGF0YS5kaXNtaXNzaWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRhdGEuZGlzbWlzc2libGU7XG5cbiAgICBpZiAodGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5kaXNtaXNzZWRUb2FzdHMuZGVsZXRlKGlkKTtcbiAgICB9XG5cbiAgICBpZiAoYWxyZWFkeUV4aXN0cykge1xuICAgICAgdGhpcy50b2FzdHMgPSB0aGlzLnRvYXN0cy5tYXAoKHRvYXN0KSA9PiB7XG4gICAgICAgIGlmICh0b2FzdC5pZCA9PT0gaWQpIHtcbiAgICAgICAgICB0aGlzLnB1Ymxpc2goeyAuLi50b2FzdCwgLi4uZGF0YSwgaWQsIHRpdGxlOiBtZXNzYWdlIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50b2FzdCxcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGRpc21pc3NpYmxlLFxuICAgICAgICAgICAgdGl0bGU6IG1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2FzdDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFRvYXN0KHsgdGl0bGU6IG1lc3NhZ2UsIC4uLnJlc3QsIGRpc21pc3NpYmxlLCBpZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG4gIH07XG5cbiAgZGlzbWlzcyA9IChpZD86IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgIHRoaXMuZGlzbWlzc2VkVG9hc3RzLmFkZChpZCk7XG5cbiAgICBpZiAoIWlkKSB7XG4gICAgICB0aGlzLnRvYXN0cy5mb3JFYWNoKCh0b2FzdCkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKHN1YnNjcmliZXIpID0+IHN1YnNjcmliZXIoeyBpZDogdG9hc3QuaWQsIGRpc21pc3M6IHRydWUgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoc3Vic2NyaWJlcikgPT4gc3Vic2NyaWJlcih7IGlkLCBkaXNtaXNzOiB0cnVlIH0pKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG5cbiAgbWVzc2FnZSA9IChtZXNzYWdlOiB0aXRsZVQgfCBSZWFjdC5SZWFjdE5vZGUsIGRhdGE/OiBFeHRlcm5hbFRvYXN0KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKHsgLi4uZGF0YSwgbWVzc2FnZSB9KTtcbiAgfTtcblxuICBlcnJvciA9IChtZXNzYWdlOiB0aXRsZVQgfCBSZWFjdC5SZWFjdE5vZGUsIGRhdGE/OiBFeHRlcm5hbFRvYXN0KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKHsgLi4uZGF0YSwgbWVzc2FnZSwgdHlwZTogJ2Vycm9yJyB9KTtcbiAgfTtcblxuICBzdWNjZXNzID0gKG1lc3NhZ2U6IHRpdGxlVCB8IFJlYWN0LlJlYWN0Tm9kZSwgZGF0YT86IEV4dGVybmFsVG9hc3QpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoeyAuLi5kYXRhLCB0eXBlOiAnc3VjY2VzcycsIG1lc3NhZ2UgfSk7XG4gIH07XG5cbiAgaW5mbyA9IChtZXNzYWdlOiB0aXRsZVQgfCBSZWFjdC5SZWFjdE5vZGUsIGRhdGE/OiBFeHRlcm5hbFRvYXN0KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKHsgLi4uZGF0YSwgdHlwZTogJ2luZm8nLCBtZXNzYWdlIH0pO1xuICB9O1xuXG4gIHdhcm5pbmcgPSAobWVzc2FnZTogdGl0bGVUIHwgUmVhY3QuUmVhY3ROb2RlLCBkYXRhPzogRXh0ZXJuYWxUb2FzdCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7IC4uLmRhdGEsIHR5cGU6ICd3YXJuaW5nJywgbWVzc2FnZSB9KTtcbiAgfTtcblxuICBsb2FkaW5nID0gKG1lc3NhZ2U6IHRpdGxlVCB8IFJlYWN0LlJlYWN0Tm9kZSwgZGF0YT86IEV4dGVybmFsVG9hc3QpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoeyAuLi5kYXRhLCB0eXBlOiAnbG9hZGluZycsIG1lc3NhZ2UgfSk7XG4gIH07XG5cbiAgcHJvbWlzZSA9IDxUb2FzdERhdGE+KHByb21pc2U6IFByb21pc2VUPFRvYXN0RGF0YT4sIGRhdGE/OiBQcm9taXNlRGF0YTxUb2FzdERhdGE+KSA9PiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIHNob3dcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZGF0YS5sb2FkaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkID0gdGhpcy5jcmVhdGUoe1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBwcm9taXNlLFxuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIG1lc3NhZ2U6IGRhdGEubG9hZGluZyxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiBkYXRhLmRlc2NyaXB0aW9uICE9PSAnZnVuY3Rpb24nID8gZGF0YS5kZXNjcmlwdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHAgPSBwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSA/IHByb21pc2UgOiBwcm9taXNlKCk7XG5cbiAgICBsZXQgc2hvdWxkRGlzbWlzcyA9IGlkICE9PSB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc3VsdDogWydyZXNvbHZlJywgVG9hc3REYXRhXSB8IFsncmVqZWN0JywgdW5rbm93bl07XG5cbiAgICBjb25zdCBvcmlnaW5hbFByb21pc2UgPSBwXG4gICAgICAudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmVzdWx0ID0gWydyZXNvbHZlJywgcmVzcG9uc2VdO1xuICAgICAgICBjb25zdCBpc1JlYWN0RWxlbWVudFJlc3BvbnNlID0gUmVhY3QuaXNWYWxpZEVsZW1lbnQocmVzcG9uc2UpO1xuICAgICAgICBpZiAoaXNSZWFjdEVsZW1lbnRSZXNwb25zZSkge1xuICAgICAgICAgIHNob3VsZERpc21pc3MgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZSh7IGlkLCB0eXBlOiAnZGVmYXVsdCcsIG1lc3NhZ2U6IHJlc3BvbnNlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSHR0cFJlc3BvbnNlKHJlc3BvbnNlKSAmJiAhcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBzaG91bGREaXNtaXNzID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgICB0eXBlb2YgZGF0YS5lcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGRhdGEuZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCkgOiBkYXRhLmVycm9yO1xuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgIHR5cGVvZiBkYXRhLmRlc2NyaXB0aW9uID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgID8gYXdhaXQgZGF0YS5kZXNjcmlwdGlvbihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgICAgICAgICA6IGRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgdGhpcy5jcmVhdGUoeyBpZCwgdHlwZTogJ2Vycm9yJywgbWVzc2FnZSwgZGVzY3JpcHRpb24gfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdWNjZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzaG91bGREaXNtaXNzID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiBkYXRhLnN1Y2Nlc3MgPT09ICdmdW5jdGlvbicgPyBhd2FpdCBkYXRhLnN1Y2Nlc3MocmVzcG9uc2UpIDogZGF0YS5zdWNjZXNzO1xuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgIHR5cGVvZiBkYXRhLmRlc2NyaXB0aW9uID09PSAnZnVuY3Rpb24nID8gYXdhaXQgZGF0YS5kZXNjcmlwdGlvbihyZXNwb25zZSkgOiBkYXRhLmRlc2NyaXB0aW9uO1xuICAgICAgICAgIHRoaXMuY3JlYXRlKHsgaWQsIHR5cGU6ICdzdWNjZXNzJywgbWVzc2FnZSwgZGVzY3JpcHRpb24gfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IFsncmVqZWN0JywgZXJyb3JdO1xuICAgICAgICBpZiAoZGF0YS5lcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2hvdWxkRGlzbWlzcyA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZGF0YS5lcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGRhdGEuZXJyb3IoZXJyb3IpIDogZGF0YS5lcnJvcjtcbiAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHR5cGVvZiBkYXRhLmRlc2NyaXB0aW9uID09PSAnZnVuY3Rpb24nID8gYXdhaXQgZGF0YS5kZXNjcmlwdGlvbihlcnJvcikgOiBkYXRhLmRlc2NyaXB0aW9uO1xuICAgICAgICAgIHRoaXMuY3JlYXRlKHsgaWQsIHR5cGU6ICdlcnJvcicsIG1lc3NhZ2UsIGRlc2NyaXB0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkRGlzbWlzcykge1xuICAgICAgICAgIC8vIFRvYXN0IGlzIHN0aWxsIGluIGxvYWQgc3RhdGUgKGFuZCB3aWxsIGJlIGluZGVmaW5pdGVseSDigJQgZGlzbWlzcyBpdClcbiAgICAgICAgICB0aGlzLmRpc21pc3MoaWQpO1xuICAgICAgICAgIGlkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5maW5hbGx5Py4oKTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgdW53cmFwID0gKCkgPT5cbiAgICAgIG5ldyBQcm9taXNlPFRvYXN0RGF0YT4oKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgb3JpZ2luYWxQcm9taXNlLnRoZW4oKCkgPT4gKHJlc3VsdFswXSA9PT0gJ3JlamVjdCcgPyByZWplY3QocmVzdWx0WzFdKSA6IHJlc29sdmUocmVzdWx0WzFdKSkpLmNhdGNoKHJlamVjdCksXG4gICAgICApO1xuXG4gICAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGlkICE9PSAnbnVtYmVyJykge1xuICAgICAgLy8gY2Fubm90IE9iamVjdC5hc3NpZ24gb24gdW5kZWZpbmVkXG4gICAgICByZXR1cm4geyB1bndyYXAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oaWQsIHsgdW53cmFwIH0pO1xuICAgIH1cbiAgfTtcblxuICBjdXN0b20gPSAoanN4OiAoaWQ6IG51bWJlciB8IHN0cmluZykgPT4gUmVhY3QuUmVhY3RFbGVtZW50LCBkYXRhPzogRXh0ZXJuYWxUb2FzdCkgPT4ge1xuICAgIGNvbnN0IGlkID0gZGF0YT8uaWQgfHwgdG9hc3RzQ291bnRlcisrO1xuICAgIHRoaXMuY3JlYXRlKHsganN4OiBqc3goaWQpLCBpZCwgLi4uZGF0YSB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG5cbiAgZ2V0QWN0aXZlVG9hc3RzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKHRvYXN0KSA9PiAhdGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKHRvYXN0LmlkKSk7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBUb2FzdFN0YXRlID0gbmV3IE9ic2VydmVyKCk7XG5cbi8vIGJpbmQgdGhpcyB0byB0aGUgdG9hc3QgZnVuY3Rpb25cbmNvbnN0IHRvYXN0RnVuY3Rpb24gPSAobWVzc2FnZTogdGl0bGVULCBkYXRhPzogRXh0ZXJuYWxUb2FzdCkgPT4ge1xuICBjb25zdCBpZCA9IGRhdGE/LmlkIHx8IHRvYXN0c0NvdW50ZXIrKztcblxuICBUb2FzdFN0YXRlLmFkZFRvYXN0KHtcbiAgICB0aXRsZTogbWVzc2FnZSxcbiAgICAuLi5kYXRhLFxuICAgIGlkLFxuICB9KTtcbiAgcmV0dXJuIGlkO1xufTtcblxuY29uc3QgaXNIdHRwUmVzcG9uc2UgPSAoZGF0YTogYW55KTogZGF0YSBpcyBSZXNwb25zZSA9PiB7XG4gIHJldHVybiAoXG4gICAgZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICdvaycgaW4gZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhLm9rID09PSAnYm9vbGVhbicgJiZcbiAgICAnc3RhdHVzJyBpbiBkYXRhICYmXG4gICAgdHlwZW9mIGRhdGEuc3RhdHVzID09PSAnbnVtYmVyJ1xuICApO1xufTtcblxuY29uc3QgYmFzaWNUb2FzdCA9IHRvYXN0RnVuY3Rpb247XG5cbmNvbnN0IGdldEhpc3RvcnkgPSAoKSA9PiBUb2FzdFN0YXRlLnRvYXN0cztcbmNvbnN0IGdldFRvYXN0cyA9ICgpID0+IFRvYXN0U3RhdGUuZ2V0QWN0aXZlVG9hc3RzKCk7XG5cbi8vIFdlIHVzZSBgT2JqZWN0LmFzc2lnbmAgdG8gbWFpbnRhaW4gdGhlIGNvcnJlY3QgdHlwZXMgYXMgd2Ugd291bGQgbG9zZSB0aGVtIG90aGVyd2lzZVxuZXhwb3J0IGNvbnN0IHRvYXN0ID0gT2JqZWN0LmFzc2lnbihcbiAgYmFzaWNUb2FzdCxcbiAge1xuICAgIHN1Y2Nlc3M6IFRvYXN0U3RhdGUuc3VjY2VzcyxcbiAgICBpbmZvOiBUb2FzdFN0YXRlLmluZm8sXG4gICAgd2FybmluZzogVG9hc3RTdGF0ZS53YXJuaW5nLFxuICAgIGVycm9yOiBUb2FzdFN0YXRlLmVycm9yLFxuICAgIGN1c3RvbTogVG9hc3RTdGF0ZS5jdXN0b20sXG4gICAgbWVzc2FnZTogVG9hc3RTdGF0ZS5tZXNzYWdlLFxuICAgIHByb21pc2U6IFRvYXN0U3RhdGUucHJvbWlzZSxcbiAgICBkaXNtaXNzOiBUb2FzdFN0YXRlLmRpc21pc3MsXG4gICAgbG9hZGluZzogVG9hc3RTdGF0ZS5sb2FkaW5nLFxuICB9LFxuICB7IGdldEhpc3RvcnksIGdldFRvYXN0cyB9LFxuKTtcbiIsIlxuICAgICAgICAgIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgeyBpbnNlcnRBdCB9ID0ge30pIHtcbiAgICAgICAgICAgIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVyblxuICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXVxuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gICAgICAgICAgICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJ1xuICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgICAgICAgICAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgICAgICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAiLCJpbXBvcnQgc3R5bGVJbmplY3QgZnJvbSAnI3N0eWxlLWluamVjdCc7c3R5bGVJbmplY3QoXCI6d2hlcmUoaHRtbFtkaXI9XFxcImx0clxcXCJdKSw6d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1cXFwibHRyXFxcIl0pey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6IC0zcHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6IDRweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6IC0xcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDogMHB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDogYXV0bzstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOiAwOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OiAwOy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDogdW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTM1JSwgLTM1JSl9OndoZXJlKGh0bWxbZGlyPVxcXCJydGxcXFwiXSksOndoZXJlKFtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9XFxcInJ0bFxcXCJdKXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0OiA0cHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6IC0zcHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0OiAwcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDogLTFweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6IDA7LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDogYXV0bzstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDogdW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tZW5kOiAwOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTogdHJhbnNsYXRlKDM1JSwgLTM1JSl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdGVyXSl7cG9zaXRpb246Zml4ZWQ7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxOb3RvIFNhbnMsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2wsTm90byBDb2xvciBFbW9qaTstLWdyYXkxOiBoc2woMCwgMCUsIDk5JSk7LS1ncmF5MjogaHNsKDAsIDAlLCA5Ny4zJSk7LS1ncmF5MzogaHNsKDAsIDAlLCA5NS4xJSk7LS1ncmF5NDogaHNsKDAsIDAlLCA5MyUpOy0tZ3JheTU6IGhzbCgwLCAwJSwgOTAuOSUpOy0tZ3JheTY6IGhzbCgwLCAwJSwgODguNyUpOy0tZ3JheTc6IGhzbCgwLCAwJSwgODUuOCUpOy0tZ3JheTg6IGhzbCgwLCAwJSwgNzglKTstLWdyYXk5OiBoc2woMCwgMCUsIDU2LjElKTstLWdyYXkxMDogaHNsKDAsIDAlLCA1Mi4zJSk7LS1ncmF5MTE6IGhzbCgwLCAwJSwgNDMuNSUpOy0tZ3JheTEyOiBoc2woMCwgMCUsIDklKTstLWJvcmRlci1yYWRpdXM6IDhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtvdXRsaW5lOm5vbmU7ei1pbmRleDo5OTk5OTk5OTk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2V9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLWxpZnRlZD1cXFwidHJ1ZVxcXCJdKXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTBweCl9QG1lZGlhIChob3Zlcjogbm9uZSkgYW5kIChwb2ludGVyOiBjb2Fyc2Upezp3aGVyZShbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1saWZ0ZWQ9XFxcInRydWVcXFwiXSl7dHJhbnNmb3JtOm5vbmV9fTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPVxcXCJyaWdodFxcXCJdKXtyaWdodDp2YXIoLS1vZmZzZXQtcmlnaHQpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPVxcXCJsZWZ0XFxcIl0pe2xlZnQ6dmFyKC0tb2Zmc2V0LWxlZnQpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPVxcXCJjZW50ZXJcXFwiXSl7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1cXFwidG9wXFxcIl0pe3RvcDp2YXIoLS1vZmZzZXQtdG9wKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1cXFwiYm90dG9tXFxcIl0pe2JvdHRvbTp2YXIoLS1vZmZzZXQtYm90dG9tKX06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSl7LS15OiB0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdC1hbW91bnQ6IGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKTt6LWluZGV4OnZhcigtLXotaW5kZXgpO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDt0cmFuc2Zvcm06dmFyKC0teSk7ZmlsdGVyOmJsdXIoMCk7dG91Y2gtYWN0aW9uOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzLG9wYWNpdHkgLjRzLGhlaWdodCAuNHMsYm94LXNoYWRvdyAuMnM7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtvdmVyZmxvdy13cmFwOmFueXdoZXJlfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPVxcXCJ0cnVlXFxcIl0pe3BhZGRpbmc6MTZweDtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OjAgNHB4IDEycHggIzAwMDAwMDFhO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF06Zm9jdXMtdmlzaWJsZSl7Ym94LXNoYWRvdzowIDRweCAxMnB4ICMwMDAwMDAxYSwwIDAgMCAycHggIzAwMDN9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPVxcXCJ0b3BcXFwiXSl7dG9wOjA7LS15OiB0cmFuc2xhdGVZKC0xMDAlKTstLWxpZnQ6IDE7LS1saWZ0LWFtb3VudDogY2FsYygxICogdmFyKC0tZ2FwKSl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPVxcXCJib3R0b21cXFwiXSl7Ym90dG9tOjA7LS15OiB0cmFuc2xhdGVZKDEwMCUpOy0tbGlmdDogLTE7LS1saWZ0LWFtb3VudDogY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtZGVzY3JpcHRpb25dKXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOmluaGVyaXR9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS10aXRsZV0pe2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6aW5oZXJpdH06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSkgOndoZXJlKFtkYXRhLWljb25dKXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1zaHJpbms6MDttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLWVuZCl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1wcm9taXNlPVxcXCJ0cnVlXFxcIl0pIDp3aGVyZShbZGF0YS1pY29uXSk+c3Zne29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjpzb25uZXItZmFkZS1pbiAuM3MgZWFzZSBmb3J3YXJkc306d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSkgOndoZXJlKFtkYXRhLWljb25dKT4qe2ZsZXgtc2hyaW5rOjB9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS1pY29uXSkgc3Zne21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLWVuZCl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS1jb250ZW50XSl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtYnV0dG9uXXtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLW5vcm1hbC1iZyk7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtdGV4dCk7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO3RyYW5zaXRpb246b3BhY2l0eSAuNHMsYm94LXNoYWRvdyAuMnN9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS1idXR0b25dKTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCAwIDAgMnB4ICMwMDA2fTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtYnV0dG9uXSk6Zmlyc3Qtb2YtdHlwZXttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtY2FuY2VsXSl7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDgpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdGhlbWU9XFxcImRhcmtcXFwiXSkgOndoZXJlKFtkYXRhLWNhbmNlbF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF0pIDp3aGVyZShbZGF0YS1jbG9zZS1idXR0b25dKXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydCk7cmlnaHQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZCk7dG9wOjA7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowO2NvbG9yOnZhcigtLWdyYXkxMik7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ncmF5NCk7dHJhbnNmb3JtOnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm0pO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzLGJhY2tncm91bmQgLjJzLGJvcmRlci1jb2xvciAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tZ3JheTEpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKSA6d2hlcmUoW2RhdGEtY2xvc2UtYnV0dG9uXSk6Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggIzAwMDAwMDFhLDAgMCAwIDJweCAjMDAwM306d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSkgOndoZXJlKFtkYXRhLWRpc2FibGVkPVxcXCJ0cnVlXFxcIl0pe2N1cnNvcjpub3QtYWxsb3dlZH06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XSk6aG92ZXIgOndoZXJlKFtkYXRhLWNsb3NlLWJ1dHRvbl0pOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ3JheTIpO2JvcmRlci1jb2xvcjp2YXIoLS1ncmF5NSl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPVxcXCJ0cnVlXFxcIl0pOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTUwJTtyaWdodDotNTAlO2hlaWdodDoxMDAlO3otaW5kZXg6LTF9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPVxcXCJ0b3BcXFwiXVtkYXRhLXN3aXBpbmc9XFxcInRydWVcXFwiXSk6YmVmb3Jle2JvdHRvbTo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKDUwJSl9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPVxcXCJib3R0b21cXFwiXVtkYXRhLXN3aXBpbmc9XFxcInRydWVcXFwiXSk6YmVmb3Jle3RvcDo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKC01MCUpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz1cXFwiZmFsc2VcXFwiXVtkYXRhLXJlbW92ZWQ9XFxcInRydWVcXFwiXSk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt0cmFuc2Zvcm06c2NhbGVZKDIpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKTphZnRlcntjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtoZWlnaHQ6Y2FsYyh2YXIoLS1nYXApICsgMXB4KTtib3R0b206MTAwJTt3aWR0aDoxMDAlfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD1cXFwidHJ1ZVxcXCJdKXstLXk6IHRyYW5zbGF0ZVkoMCk7b3BhY2l0eToxfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9XFxcImZhbHNlXFxcIl1bZGF0YS1mcm9udD1cXFwiZmFsc2VcXFwiXSl7LS1zY2FsZTogdmFyKC0tdG9hc3RzLWJlZm9yZSkgKiAuMDUgKyAxOy0teTogdHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQtYW1vdW50KSAqIHZhcigtLXRvYXN0cy1iZWZvcmUpKSkgc2NhbGUoY2FsYygtMSAqIHZhcigtLXNjYWxlKSkpO2hlaWdodDp2YXIoLS1mcm9udC10b2FzdC1oZWlnaHQpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdKT4qe3RyYW5zaXRpb246b3BhY2l0eSAuNHN9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD1cXFwiZmFsc2VcXFwiXVtkYXRhLWZyb250PVxcXCJmYWxzZVxcXCJdW2RhdGEtc3R5bGVkPVxcXCJ0cnVlXFxcIl0pPip7b3BhY2l0eTowfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdmlzaWJsZT1cXFwiZmFsc2VcXFwiXSl7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmV9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPVxcXCJ0cnVlXFxcIl1bZGF0YS1leHBhbmRlZD1cXFwidHJ1ZVxcXCJdKXstLXk6IHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkpKTtoZWlnaHQ6dmFyKC0taW5pdGlhbC1oZWlnaHQpfTp3aGVyZShbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD1cXFwidHJ1ZVxcXCJdW2RhdGEtZnJvbnQ9XFxcInRydWVcXFwiXVtkYXRhLXN3aXBlLW91dD1cXFwiZmFsc2VcXFwiXSl7LS15OiB0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9XFxcInRydWVcXFwiXVtkYXRhLWZyb250PVxcXCJmYWxzZVxcXCJdW2RhdGEtc3dpcGUtb3V0PVxcXCJmYWxzZVxcXCJdW2RhdGEtZXhwYW5kZWQ9XFxcInRydWVcXFwiXSl7LS15OiB0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpICsgdmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH06d2hlcmUoW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9XFxcInRydWVcXFwiXVtkYXRhLWZyb250PVxcXCJmYWxzZVxcXCJdW2RhdGEtc3dpcGUtb3V0PVxcXCJmYWxzZVxcXCJdW2RhdGEtZXhwYW5kZWQ9XFxcImZhbHNlXFxcIl0pey0teTogdHJhbnNsYXRlWSg0MCUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNXMsb3BhY2l0eSAuMnN9OndoZXJlKFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPVxcXCJ0cnVlXFxcIl1bZGF0YS1mcm9udD1cXFwiZmFsc2VcXFwiXSk6YmVmb3Jle2hlaWdodDpjYWxjKHZhcigtLWluaXRpYWwtaGVpZ2h0KSArIDIwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV17dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXksIDBweCkpIHRyYW5zbGF0ZSh2YXIoLS1zd2lwZS1hbW91bnQteCwgMHB4KSk7dHJhbnNpdGlvbjpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZWQ9dHJ1ZV17dXNlci1zZWxlY3Q6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dLFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPXRvcF17YW5pbWF0aW9uLWR1cmF0aW9uOi4yczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1sZWZ0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtbGVmdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXJpZ2h0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtcmlnaHR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj11cF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXVwfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249ZG93bl17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWRvd259QGtleWZyYW1lcyBzd2lwZS1vdXQtbGVmdHswJXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGUoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1yaWdodHswJXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGUoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgKyAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC11cHswJXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LWRvd257MCV7dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgKyAxMDAlKSk7b3BhY2l0eTowfX1AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpe1tkYXRhLXNvbm5lci10b2FzdGVyXXtwb3NpdGlvbjpmaXhlZDtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF17bGVmdDpjYWxjKHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAtMSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdIFtkYXRhLXNvbm5lci10b2FzdF17bGVmdDowO3JpZ2h0OjA7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIDIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249bGVmdF17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tbW9iaWxlLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249dG9wXXt0b3A6dmFyKC0tbW9iaWxlLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCk7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXRoZW1lPWxpZ2h0XXstLW5vcm1hbC1iZzogI2ZmZjstLW5vcm1hbC1ib3JkZXI6IHZhcigtLWdyYXk0KTstLW5vcm1hbC10ZXh0OiB2YXIoLS1ncmF5MTIpOy0tc3VjY2Vzcy1iZzogaHNsKDE0MywgODUlLCA5NiUpOy0tc3VjY2Vzcy1ib3JkZXI6IGhzbCgxNDUsIDkyJSwgOTElKTstLXN1Y2Nlc3MtdGV4dDogaHNsKDE0MCwgMTAwJSwgMjclKTstLWluZm8tYmc6IGhzbCgyMDgsIDEwMCUsIDk3JSk7LS1pbmZvLWJvcmRlcjogaHNsKDIyMSwgOTElLCA5MSUpOy0taW5mby10ZXh0OiBoc2woMjEwLCA5MiUsIDQ1JSk7LS13YXJuaW5nLWJnOiBoc2woNDksIDEwMCUsIDk3JSk7LS13YXJuaW5nLWJvcmRlcjogaHNsKDQ5LCA5MSUsIDkxJSk7LS13YXJuaW5nLXRleHQ6IGhzbCgzMSwgOTIlLCA0NSUpOy0tZXJyb3ItYmc6IGhzbCgzNTksIDEwMCUsIDk3JSk7LS1lcnJvci1ib3JkZXI6IGhzbCgzNTksIDEwMCUsIDk0JSk7LS1lcnJvci10ZXh0OiBoc2woMzYwLCAxMDAlLCA0NSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXRoZW1lPWxpZ2h0XSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiAjMDAwOy0tbm9ybWFsLWJvcmRlcjogaHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLXRleHQ6IHZhcigtLWdyYXkxKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiAjZmZmOy0tbm9ybWFsLWJvcmRlcjogdmFyKC0tZ3JheTMpOy0tbm9ybWFsLXRleHQ6IHZhcigtLWdyYXkxMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtdGhlbWU9ZGFya117LS1ub3JtYWwtYmc6ICMwMDA7LS1ub3JtYWwtYmctaG92ZXI6IGhzbCgwLCAwJSwgMTIlKTstLW5vcm1hbC1ib3JkZXI6IGhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC1ib3JkZXItaG92ZXI6IGhzbCgwLCAwJSwgMjUlKTstLW5vcm1hbC10ZXh0OiB2YXIoLS1ncmF5MSk7LS1zdWNjZXNzLWJnOiBoc2woMTUwLCAxMDAlLCA2JSk7LS1zdWNjZXNzLWJvcmRlcjogaHNsKDE0NywgMTAwJSwgMTIlKTstLXN1Y2Nlc3MtdGV4dDogaHNsKDE1MCwgODYlLCA2NSUpOy0taW5mby1iZzogaHNsKDIxNSwgMTAwJSwgNiUpOy0taW5mby1ib3JkZXI6IGhzbCgyMjMsIDEwMCUsIDEyJSk7LS1pbmZvLXRleHQ6IGhzbCgyMTYsIDg3JSwgNjUlKTstLXdhcm5pbmctYmc6IGhzbCg2NCwgMTAwJSwgNiUpOy0td2FybmluZy1ib3JkZXI6IGhzbCg2MCwgMTAwJSwgMTIlKTstLXdhcm5pbmctdGV4dDogaHNsKDQ2LCA4NyUsIDY1JSk7LS1lcnJvci1iZzogaHNsKDM1OCwgNzYlLCAxMCUpOy0tZXJyb3ItYm9yZGVyOiBoc2woMzU3LCA4OSUsIDE2JSk7LS1lcnJvci10ZXh0OiBoc2woMzU4LCAxMDAlLCA4MSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmctaG92ZXIpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyLWhvdmVyKX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3NdLFtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9dLFtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmddLFtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXSxbZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfS5zb25uZXItbG9hZGluZy13cmFwcGVyey0tc2l6ZTogMTZweDtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt6LWluZGV4OjEwfS5zb25uZXItbG9hZGluZy13cmFwcGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLW91dCAuMnMgZWFzZSBmb3J3YXJkc30uc29ubmVyLXNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7dG9wOjUwJTtsZWZ0OjUwJTtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSl9LnNvbm5lci1sb2FkaW5nLWJhcnthbmltYXRpb246c29ubmVyLXNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7YmFja2dyb3VuZDp2YXIoLS1ncmF5MTEpO2JvcmRlci1yYWRpdXM6NnB4O2hlaWdodDo4JTtsZWZ0Oi0xMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zLjklO3dpZHRoOjI0JX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxKXthbmltYXRpb24tZGVsYXk6LTEuMnM7dHJhbnNmb3JtOnJvdGF0ZSguMDAwMWRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDIpe2FuaW1hdGlvbi1kZWxheTotMS4xczt0cmFuc2Zvcm06cm90YXRlKDMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi0xczt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNCl7YW5pbWF0aW9uLWRlbGF5Oi0uOXM7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDUpe2FuaW1hdGlvbi1kZWxheTotLjhzO3RyYW5zZm9ybTpyb3RhdGUoMTIwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi0uN3M7dHJhbnNmb3JtOnJvdGF0ZSgxNTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg3KXthbmltYXRpb24tZGVsYXk6LS42czt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDgpe2FuaW1hdGlvbi1kZWxheTotLjVzO3RyYW5zZm9ybTpyb3RhdGUoMjEwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOSl7YW5pbWF0aW9uLWRlbGF5Oi0uNHM7dHJhbnNmb3JtOnJvdGF0ZSgyNDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMCl7YW5pbWF0aW9uLWRlbGF5Oi0uM3M7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMSl7YW5pbWF0aW9uLWRlbGF5Oi0uMnM7dHJhbnNmb3JtOnJvdGF0ZSgzMDBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgxMil7YW5pbWF0aW9uLWRlbGF5Oi0uMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9fUBrZXlmcmFtZXMgc29ubmVyLXNwaW57MCV7b3BhY2l0eToxfXRve29wYWNpdHk6LjE1fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pe1tkYXRhLXNvbm5lci10b2FzdF0sW2RhdGEtc29ubmVyLXRvYXN0XT4qLC5zb25uZXItbG9hZGluZy1iYXJ7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDthbmltYXRpb246bm9uZSFpbXBvcnRhbnR9fS5zb25uZXItbG9hZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMsdHJhbnNmb3JtIC4yc30uc29ubmVyLWxvYWRlcltkYXRhLXZpc2libGU9ZmFsc2Vde29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZSgtNTAlLC01MCUpfVxcblwiKSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB0eXBlIFRvYXN0VHlwZXMgPSAnbm9ybWFsJyB8ICdhY3Rpb24nIHwgJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdsb2FkaW5nJyB8ICdkZWZhdWx0JztcblxuZXhwb3J0IHR5cGUgUHJvbWlzZVQ8RGF0YSA9IGFueT4gPSBQcm9taXNlPERhdGE+IHwgKCgpID0+IFByb21pc2U8RGF0YT4pO1xuXG5leHBvcnQgdHlwZSBQcm9taXNlVFJlc3VsdDxEYXRhID0gYW55PiA9XG4gIHwgc3RyaW5nXG4gIHwgUmVhY3QuUmVhY3ROb2RlXG4gIHwgKChkYXRhOiBEYXRhKSA9PiBSZWFjdC5SZWFjdE5vZGUgfCBzdHJpbmcgfCBQcm9taXNlPFJlYWN0LlJlYWN0Tm9kZSB8IHN0cmluZz4pO1xuXG5leHBvcnQgdHlwZSBQcm9taXNlRXh0ZXJuYWxUb2FzdCA9IE9taXQ8RXh0ZXJuYWxUb2FzdCwgJ2Rlc2NyaXB0aW9uJz47XG5cbmV4cG9ydCB0eXBlIFByb21pc2VEYXRhPFRvYXN0RGF0YSA9IGFueT4gPSBQcm9taXNlRXh0ZXJuYWxUb2FzdCAmIHtcbiAgbG9hZGluZz86IHN0cmluZyB8IFJlYWN0LlJlYWN0Tm9kZTtcbiAgc3VjY2Vzcz86IFByb21pc2VUUmVzdWx0PFRvYXN0RGF0YT47XG4gIGVycm9yPzogUHJvbWlzZVRSZXN1bHQ7XG4gIGRlc2NyaXB0aW9uPzogUHJvbWlzZVRSZXN1bHQ7XG4gIGZpbmFsbHk/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9hc3RDbGFzc25hbWVzIHtcbiAgdG9hc3Q/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbG9hZGVyPzogc3RyaW5nO1xuICBjbG9zZUJ1dHRvbj86IHN0cmluZztcbiAgY2FuY2VsQnV0dG9uPzogc3RyaW5nO1xuICBhY3Rpb25CdXR0b24/OiBzdHJpbmc7XG4gIHN1Y2Nlc3M/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xuICBpbmZvPzogc3RyaW5nO1xuICB3YXJuaW5nPzogc3RyaW5nO1xuICBsb2FkaW5nPzogc3RyaW5nO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvYXN0SWNvbnMge1xuICBzdWNjZXNzPzogUmVhY3QuUmVhY3ROb2RlO1xuICBpbmZvPzogUmVhY3QuUmVhY3ROb2RlO1xuICB3YXJuaW5nPzogUmVhY3QuUmVhY3ROb2RlO1xuICBlcnJvcj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgbG9hZGluZz86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY2xvc2U/OiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uIHtcbiAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgb25DbGljazogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgYWN0aW9uQnV0dG9uU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvYXN0VCB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmc7XG4gIHRpdGxlPzogKCgpID0+IFJlYWN0LlJlYWN0Tm9kZSkgfCBSZWFjdC5SZWFjdE5vZGU7XG4gIHR5cGU/OiBUb2FzdFR5cGVzO1xuICBpY29uPzogUmVhY3QuUmVhY3ROb2RlO1xuICBqc3g/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHJpY2hDb2xvcnM/OiBib29sZWFuO1xuICBpbnZlcnQ/OiBib29sZWFuO1xuICBjbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gIGRpc21pc3NpYmxlPzogYm9vbGVhbjtcbiAgZGVzY3JpcHRpb24/OiAoKCkgPT4gUmVhY3QuUmVhY3ROb2RlKSB8IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIGRlbGV0ZT86IGJvb2xlYW47XG4gIGFjdGlvbj86IEFjdGlvbiB8IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY2FuY2VsPzogQWN0aW9uIHwgUmVhY3QuUmVhY3ROb2RlO1xuICBvbkRpc21pc3M/OiAodG9hc3Q6IFRvYXN0VCkgPT4gdm9pZDtcbiAgb25BdXRvQ2xvc2U/OiAodG9hc3Q6IFRvYXN0VCkgPT4gdm9pZDtcbiAgcHJvbWlzZT86IFByb21pc2VUO1xuICBjYW5jZWxCdXR0b25TdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIGFjdGlvbkJ1dHRvblN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICB1bnN0eWxlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2xhc3NOYW1lcz86IFRvYXN0Q2xhc3NuYW1lcztcbiAgZGVzY3JpcHRpb25DbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbihhY3Rpb246IEFjdGlvbiB8IFJlYWN0LlJlYWN0Tm9kZSk6IGFjdGlvbiBpcyBBY3Rpb24ge1xuICByZXR1cm4gKGFjdGlvbiBhcyBBY3Rpb24pLmxhYmVsICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uID0gJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnIHwgJ3RvcC1jZW50ZXInIHwgJ2JvdHRvbS1jZW50ZXInO1xuZXhwb3J0IGludGVyZmFjZSBIZWlnaHRUIHtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHRvYXN0SWQ6IG51bWJlciB8IHN0cmluZztcbiAgcG9zaXRpb246IFBvc2l0aW9uO1xufVxuXG5pbnRlcmZhY2UgVG9hc3RPcHRpb25zIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uQ2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIGNhbmNlbEJ1dHRvblN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgYWN0aW9uQnV0dG9uU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgdW5zdHlsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWVzPzogVG9hc3RDbGFzc25hbWVzO1xufVxuXG50eXBlIE9mZnNldCA9XG4gIHwge1xuICAgICAgdG9wPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgcmlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICBib3R0b20/OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICBsZWZ0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIH1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9hc3RlclByb3BzIHtcbiAgaW52ZXJ0PzogYm9vbGVhbjtcbiAgdGhlbWU/OiAnbGlnaHQnIHwgJ2RhcmsnIHwgJ3N5c3RlbSc7XG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG4gIGhvdGtleT86IHN0cmluZ1tdO1xuICByaWNoQ29sb3JzPzogYm9vbGVhbjtcbiAgZXhwYW5kPzogYm9vbGVhbjtcbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIGdhcD86IG51bWJlcjtcbiAgdmlzaWJsZVRvYXN0cz86IG51bWJlcjtcbiAgY2xvc2VCdXR0b24/OiBib29sZWFuO1xuICB0b2FzdE9wdGlvbnM/OiBUb2FzdE9wdGlvbnM7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBvZmZzZXQ/OiBPZmZzZXQ7XG4gIG1vYmlsZU9mZnNldD86IE9mZnNldDtcbiAgZGlyPzogJ3J0bCcgfCAnbHRyJyB8ICdhdXRvJztcbiAgc3dpcGVEaXJlY3Rpb25zPzogU3dpcGVEaXJlY3Rpb25bXTtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgdGhlIGBpY29uc2AgcHJvcCBpbnN0ZWFkOlxuICAgKiBgYGBqc3hcbiAgICogPFRvYXN0ZXJcbiAgICogICBpY29ucz17eyBsb2FkaW5nOiA8TG9hZGluZ0ljb24gLz4gfX1cbiAgICogLz5cbiAgICogYGBgXG4gICAqL1xuICBsb2FkaW5nSWNvbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaWNvbnM/OiBUb2FzdEljb25zO1xuICBjb250YWluZXJBcmlhTGFiZWw/OiBzdHJpbmc7XG4gIHBhdXNlV2hlblBhZ2VJc0hpZGRlbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFN3aXBlRGlyZWN0aW9uID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9hc3RQcm9wcyB7XG4gIHRvYXN0OiBUb2FzdFQ7XG4gIHRvYXN0czogVG9hc3RUW107XG4gIGluZGV4OiBudW1iZXI7XG4gIHN3aXBlRGlyZWN0aW9ucz86IFN3aXBlRGlyZWN0aW9uW107XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBpbnZlcnQ6IGJvb2xlYW47XG4gIGhlaWdodHM6IEhlaWdodFRbXTtcbiAgc2V0SGVpZ2h0czogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248SGVpZ2h0VFtdPj47XG4gIHJlbW92ZVRvYXN0OiAodG9hc3Q6IFRvYXN0VCkgPT4gdm9pZDtcbiAgZ2FwPzogbnVtYmVyO1xuICBwb3NpdGlvbjogUG9zaXRpb247XG4gIHZpc2libGVUb2FzdHM6IG51bWJlcjtcbiAgZXhwYW5kQnlEZWZhdWx0OiBib29sZWFuO1xuICBjbG9zZUJ1dHRvbjogYm9vbGVhbjtcbiAgaW50ZXJhY3Rpbmc6IGJvb2xlYW47XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgY2FuY2VsQnV0dG9uU3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBhY3Rpb25CdXR0b25TdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHVuc3R5bGVkPzogYm9vbGVhbjtcbiAgZGVzY3JpcHRpb25DbGFzc05hbWU/OiBzdHJpbmc7XG4gIGxvYWRpbmdJY29uPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWVzPzogVG9hc3RDbGFzc25hbWVzO1xuICBpY29ucz86IFRvYXN0SWNvbnM7XG4gIGNsb3NlQnV0dG9uQXJpYUxhYmVsPzogc3RyaW5nO1xuICBwYXVzZVdoZW5QYWdlSXNIaWRkZW46IGJvb2xlYW47XG4gIGRlZmF1bHRSaWNoQ29sb3JzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gU3dpcGVTdGF0ZVR5cGVzIHtcbiAgU3dpcGVkT3V0ID0gJ1N3aXBlZE91dCcsXG4gIFN3aXBlZEJhY2sgPSAnU3dpcGVkQmFjaycsXG4gIE5vdFN3aXBlZCA9ICdOb3RTd2lwZWQnLFxufVxuXG5leHBvcnQgdHlwZSBUaGVtZSA9ICdsaWdodCcgfCAnZGFyayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9hc3RUb0Rpc21pc3Mge1xuICBpZDogbnVtYmVyIHwgc3RyaW5nO1xuICBkaXNtaXNzOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBFeHRlcm5hbFRvYXN0ID0gT21pdDxUb2FzdFQsICdpZCcgfCAndHlwZScgfCAndGl0bGUnIHwgJ2pzeCcgfCAnZGVsZXRlJyB8ICdwcm9taXNlJz4gJiB7XG4gIGlkPzogbnVtYmVyIHwgc3RyaW5nO1xufTtcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBNb3VzZUV2ZW50IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnLi4vTGluay9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2Jhbm5lcidcblxudHlwZSBvbkNsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkXG5cbmV4cG9ydCB0eXBlIFByb3BzID0gUmVhZG9ubHk8e1xuICBhbGlnbkljb24/OiAnbGVmdCcgfCAncmlnaHQnXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBpY29uPzogUmVhY3QuUmVhY3ROb2RlXG4gIG9uQ2xpY2s/OiBvbkNsaWNrXG4gIHRvPzogc3RyaW5nXG4gIHR5cGU/OiAnZGVmYXVsdCcgfCAnZXJyb3InIHwgJ2luZm8nIHwgJ3N1Y2Nlc3MnXG59PlxuXG5leHBvcnQgdHlwZSBSZW5kZXJlZFR5cGVQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIG9uQ2xpY2s/OiBvbkNsaWNrXG4gIHRvOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IEJhbm5lcjogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgdHlwZSA9ICdkZWZhdWx0JyxcbiAgYWxpZ25JY29uID0gJ3JpZ2h0JyxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgaWNvbixcbiAgb25DbGljayxcbiAgdG8sXG59KSA9PiB7XG4gIGNvbnN0IGNsYXNzZXMgPSBbXG4gICAgYmFzZUNsYXNzLFxuICAgIGAke2Jhc2VDbGFzc30tLXR5cGUtJHt0eXBlfWAsXG4gICAgY2xhc3NOYW1lICYmIGNsYXNzTmFtZSxcbiAgICB0byAmJiBgJHtiYXNlQ2xhc3N9LS1oYXMtbGlua2AsXG4gICAgKHRvIHx8IG9uQ2xpY2spICYmIGAke2Jhc2VDbGFzc30tLWhhcy1hY3Rpb25gLFxuICAgIGljb24gJiYgYCR7YmFzZUNsYXNzfS0taGFzLWljb25gLFxuICAgIGljb24gJiYgYCR7YmFzZUNsYXNzfS0tYWxpZ24taWNvbi0ke2FsaWduSWNvbn1gLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICBsZXQgUmVuZGVyZWRUeXBlOiBSZWFjdC5Db21wb25lbnRUeXBlPFJlbmRlcmVkVHlwZVByb3BzPiB8IFJlYWN0LkVsZW1lbnRUeXBlID0gJ2RpdidcblxuICBpZiAob25DbGljayAmJiAhdG8pIHtcbiAgICBSZW5kZXJlZFR5cGUgPSAnYnV0dG9uJ1xuICB9XG4gIGlmICh0bykge1xuICAgIFJlbmRlcmVkVHlwZSA9IExpbmtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlbmRlcmVkVHlwZSBjbGFzc05hbWU9e2NsYXNzZXN9IGhyZWY9e3RvIHx8IG51bGx9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAge2ljb24gJiYgYWxpZ25JY29uID09PSAnbGVmdCcgJiYgPFJlYWN0LkZyYWdtZW50PntpY29ufTwvUmVhY3QuRnJhZ21lbnQ+fVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250ZW50YH0+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICAgIHtpY29uICYmIGFsaWduSWNvbiA9PT0gJ3JpZ2h0JyAmJiA8UmVhY3QuRnJhZ21lbnQ+e2ljb259PC9SZWFjdC5GcmFnbWVudD59XG4gICAgPC9SZW5kZXJlZFR5cGU+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IE5leHRMaW5rSW1wb3J0IGZyb20gJ25leHQvbGluay5qcydcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGZvcm1hdFVybCB9IGZyb20gJy4vZm9ybWF0VXJsLmpzJ1xuXG5jb25zdCBOZXh0TGluayA9ICdkZWZhdWx0JyBpbiBOZXh0TGlua0ltcG9ydCA/IE5leHRMaW5rSW1wb3J0LmRlZmF1bHQgOiBOZXh0TGlua0ltcG9ydFxuXG4vLyBDb3BpZWQgZnJvbSAgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2Jsb2IvY2FuYXJ5L3BhY2thZ2VzL25leHQvc3JjL2NsaWVudC9saW5rLnRzeCNMMTgwLUwxOTFcbmZ1bmN0aW9uIGlzTW9kaWZpZWRFdmVudChldmVudDogUmVhY3QuTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnQgfCBTVkdBRWxlbWVudFxuICBjb25zdCB0YXJnZXQgPSBldmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpXG4gIHJldHVybiAoXG4gICAgKHRhcmdldCAmJiB0YXJnZXQgIT09ICdfc2VsZicpIHx8XG4gICAgZXZlbnQubWV0YUtleSB8fFxuICAgIGV2ZW50LmN0cmxLZXkgfHxcbiAgICBldmVudC5zaGlmdEtleSB8fFxuICAgIGV2ZW50LmFsdEtleSB8fCAvLyB0cmlnZ2VycyByZXNvdXJjZSBkb3dubG9hZFxuICAgIChldmVudC5uYXRpdmVFdmVudCAmJiBldmVudC5uYXRpdmVFdmVudC53aGljaCA9PT0gMilcbiAgKVxufVxuXG50eXBlIFByb3BzID0ge1xuICAvKipcbiAgICogRGlzYWJsZSB0aGUgZS5wcmV2ZW50RGVmYXVsdCgpIGNhbGwgb24gY2xpY2sgaWYgeW91IHdhbnQgdG8gaGFuZGxlIGl0IHlvdXJzZWxmIHZpYSBvbkNsaWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHByZXZlbnREZWZhdWx0PzogYm9vbGVhblxufSAmIFBhcmFtZXRlcnM8dHlwZW9mIE5leHRMaW5rPlswXVxuXG5leHBvcnQgY29uc3QgTGluazogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGhyZWYsXG4gIG9uQ2xpY2ssXG4gIHByZXZlbnREZWZhdWx0ID0gdHJ1ZSxcbiAgcmVmLFxuICByZXBsYWNlLFxuICBzY3JvbGwsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxOZXh0TGlua1xuICAgICAgaHJlZj17aHJlZn1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGlmIChpc01vZGlmaWVkRXZlbnQoZSkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgb25DbGljayhlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgbmVlZCBhIHByZXZlbnREZWZhdWx0IGhlcmUgc28gdGhhdCBhIGNsaWNrZWQgbGluayBkb2Vzbid0IHRyaWdnZXIgdHdpY2UsXG4gICAgICAgIC8vIG9uY2UgZm9yIGRlZmF1bHQgYnJvd3NlciBuYXZpZ2F0aW9uIGFuZCBvbmNlIGZvciBzdGFydFJvdXRlVHJhbnNpdGlvblxuICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyA/IGhyZWYgOiBmb3JtYXRVcmwoaHJlZilcblxuICAgICAgICBjb25zdCBuYXZpZ2F0ZSA9ICgpID0+IHtcbiAgICAgICAgICBpZiAocmVwbGFjZSkge1xuICAgICAgICAgICAgdm9pZCByb3V0ZXIucmVwbGFjZSh1cmwsIHsgc2Nyb2xsIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZvaWQgcm91dGVyLnB1c2godXJsLCB7IHNjcm9sbCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGwgc3RhcnRSb3V0ZVRyYW5zaXRpb24gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgbmF2aWdhdGUgZGlyZWN0bHlcbiAgICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24obmF2aWdhdGUpXG4gICAgICB9fVxuICAgICAgcmVmPXtyZWZ9XG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9OZXh0TGluaz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgc3RhcnRUcmFuc2l0aW9uLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VPcHRpbWlzdGljLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuLyoqXG4gKiBSb3V0ZSB0cmFuc2l0aW9ucyBhcmUgdXNlZnVsIGluIHNob3dpbmcgaW1tZWRpYXRlIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlciB3aGVuIG5hdmlnYXRpbmcgYmV0d2VlbiBwYWdlcy4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBvbiBzbG93IG5ldHdvcmtzIHdoZW4gbmF2aWdhdGluZyB0byBkYXRhIGhlYXZ5IG9yIHByb2Nlc3MgaW50ZW5zaXZlIHBhZ2VzLlxuICogVG8gdXNlIHJvdXRlIHRyYW5zaXRpb25zLCBwbGFjZSB0aGUgYFJvdXRlVHJhbnNpdGlvblByb3ZpZGVyYCBhdCB0aGUgcm9vdCBvZiB5b3VyIGFwcGxpY2F0aW9uLCBvdXRzaWRlIG9mIHRoZSBgUHJvZ3Jlc3NCYXJgIGNvbXBvbmVudC5cbiAqIFRvIHRyaWdnZXIgYSByb3V0ZSB0cmFuc2l0aW9uLCB1c2UgdGhlIGBMaW5rYCBjb21wb25lbnQgZnJvbSBgQHBheWxvYWRjbXMvdWlgLFxuICogb3Igd3JhcCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIGBzdGFydFJvdXRlVHJhbnNpdGlvbmAgbWV0aG9kLlxuICogVG8gZ2FpbiBhY2Nlc3MgdG8gdGhlIGBSb3V0ZVRyYW5zaXRpb25Db250ZXh0YCwgY2FsbCB0aGUgYHVzZVJvdXRlVHJhbnNpdGlvbmAgaG9vayBpbiB5b3VyIGNvbXBvbmVudC5cbiAqIEByZXR1cm5zIEEgY29udGV4dCBwcm92aWRlciB3aXRoIG1ldGhvZHMgYW5kIHN0YXRlIGZvciB0cmFuc2l0aW9uaW5nIGJldHdlZW4gcm91dGVzLCBpbmNsdWRpbmcgYGlzVHJhbnNpdGlvbmluZ2AsIGBzdGFydFJvdXRlVHJhbnNpdGlvbmAsIGFuZCBgdHJhbnNpdGlvblByb2dyZXNzYC5cbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBSb3V0ZVRyYW5zaXRpb25Qcm92aWRlciwgUHJvZ3Jlc3NCYXIsIExpbmsgfSBmcm9tICdAcGF5bG9hZGNtcy91aSdcbiAqIGNvbnN0IEFwcCA9ICgpID0+IChcbiAqICA8Um91dGVUcmFuc2l0aW9uUHJvdmlkZXI+XG4gKiAgIDxQcm9ncmVzc0JhciAvPlxuICogICA8TGluayBocmVmPVwiL3NvbWV3aGVyZVwiPkdvIFNvbWV3aGVyZTwvTGluaz5cbiAqICA8L1JvdXRlVHJhbnNpdGlvblByb3ZpZGVyPlxuICogKVxuICovXG5leHBvcnQgY29uc3QgUm91dGVUcmFuc2l0aW9uUHJvdmlkZXI6IFJlYWN0LkZDPFJvdXRlVHJhbnNpdGlvblByb3BzPiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgW2lzVHJhbnNpdGlvbmluZywgc2V0SXNUcmFuc2l0aW9uaW5nXSA9IHVzZU9wdGltaXN0aWMoZmFsc2UpXG4gIGNvbnN0IFt0cmFuc2l0aW9uUHJvZ3Jlc3MsIHNldFRyYW5zaXRpb25Qcm9ncmVzc10gPSBSZWFjdC51c2VTdGF0ZTxudW1iZXI+KDApXG5cbiAgY29uc3QgdHJhbnNpdGlvblByb2dyZXNzUmVmID0gdXNlUmVmKHRyYW5zaXRpb25Qcm9ncmVzcylcblxuICBjb25zdCB0aW1lcklEID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3QgaW5pdGlhdGVQcm9ncmVzcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0aW1lcklELmN1cnJlbnQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAvLyByYW5kb21seSB1cGRhdGUgcHJvZ3Jlc3MgdXNpbmcgYW4gZXhwb25lbnRpYWwgY3VydmVcbiAgICAgIC8vIGNhcCB0aGUgcHJvZ3Jlc3MgdG8gZW5zdXJlIGl0IG5ldmVyIGZ1bGx5IHJlYWNoZXMgY29tcGxldGlvblxuICAgICAgLy8gYWNjZWxlcmF0ZSBxdWlja2x5IHRoZW4gZGVjZWxlcmF0ZSBzbG93bHlcbiAgICAgIGNvbnN0IG1heFByb2dyZXNzID0gMC45M1xuICAgICAgY29uc3QganVtcEZhY3RvciA9IDAuMiAvLyBsb3dlciB0byByZWR1Y2UganVtcHMgaW4gcHJvZ3Jlc3NcbiAgICAgIGNvbnN0IGdyb3d0aEZhY3RvciA9IDAuNzUgLy8gYWRqdXN0IHRvIGNvbnRyb2wgYWNjZWxlcmF0aW9uXG4gICAgICBjb25zdCBzbG93ZG93bkZhY3RvciA9IDAuNzUgLy8gYWRqdXN0IHRvIGNvbnRyb2wgZGVjZWxlcmF0aW9uXG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID1cbiAgICAgICAgdHJhbnNpdGlvblByb2dyZXNzUmVmLmN1cnJlbnQgK1xuICAgICAgICAobWF4UHJvZ3Jlc3MgLSB0cmFuc2l0aW9uUHJvZ3Jlc3NSZWYuY3VycmVudCkgKlxuICAgICAgICAgIE1hdGgucmFuZG9tKCkgKlxuICAgICAgICAgIGp1bXBGYWN0b3IgKlxuICAgICAgICAgIE1hdGgucG93KE1hdGgubG9nKDEgKyAoMSAtIHRyYW5zaXRpb25Qcm9ncmVzc1JlZi5jdXJyZW50KSAqIGdyb3d0aEZhY3RvciksIHNsb3dkb3duRmFjdG9yKVxuXG4gICAgICBzZXRUcmFuc2l0aW9uUHJvZ3Jlc3MobmV3UHJvZ3Jlc3MpXG4gICAgICB0cmFuc2l0aW9uUHJvZ3Jlc3NSZWYuY3VycmVudCA9IG5ld1Byb2dyZXNzXG4gICAgfSwgMjUwKSAvLyBldmVyeSBuIG1zLCB1cGRhdGUgcHJvZ3Jlc3NcbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRUcmFuc2l0aW9uUHJvZ3Jlc3MoMClcbiAgICB0cmFuc2l0aW9uUHJvZ3Jlc3NSZWYuY3VycmVudCA9IDBcblxuICAgIGlmIChpc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIGluaXRpYXRlUHJvZ3Jlc3MoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGltZXJJRC5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJRC5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzVHJhbnNpdGlvbmluZywgaW5pdGlhdGVQcm9ncmVzc10pXG5cbiAgY29uc3Qgc3RhcnRSb3V0ZVRyYW5zaXRpb246IFN0YXJ0Um91dGVUcmFuc2l0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKGNhbGxiYWNrPzogKCkgPT4gdm9pZCkgPT4ge1xuICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgICAgc2V0SXNUcmFuc2l0aW9uaW5nKHRydWUpXG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtzZXRJc1RyYW5zaXRpb25pbmddLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Um91dGVUcmFuc2l0aW9uQ29udGV4dCB2YWx1ZT17eyBpc1RyYW5zaXRpb25pbmcsIHN0YXJ0Um91dGVUcmFuc2l0aW9uLCB0cmFuc2l0aW9uUHJvZ3Jlc3MgfX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Sb3V0ZVRyYW5zaXRpb25Db250ZXh0PlxuICApXG59XG5cbnR5cGUgUm91dGVUcmFuc2l0aW9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn1cblxudHlwZSBTdGFydFJvdXRlVHJhbnNpdGlvbiA9IChjYWxsYmFjaz86ICgpID0+IHZvaWQpID0+IHZvaWRcblxudHlwZSBSb3V0ZVRyYW5zaXRpb25Db250ZXh0VmFsdWUgPSB7XG4gIGlzVHJhbnNpdGlvbmluZzogYm9vbGVhblxuICBzdGFydFJvdXRlVHJhbnNpdGlvbjogU3RhcnRSb3V0ZVRyYW5zaXRpb25cbiAgdHJhbnNpdGlvblByb2dyZXNzOiBudW1iZXJcbn1cblxuY29uc3QgUm91dGVUcmFuc2l0aW9uQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Um91dGVUcmFuc2l0aW9uQ29udGV4dFZhbHVlPih7XG4gIGlzVHJhbnNpdGlvbmluZzogZmFsc2UsXG4gIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb246IGp1c3QgY2FsbCB0aGUgY2FsbGJhY2sgZGlyZWN0bHkgKG5vIHRyYW5zaXRpb24gYW5pbWF0aW9uKVxuICBzdGFydFJvdXRlVHJhbnNpdGlvbjogKGNhbGxiYWNrKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfSxcbiAgdHJhbnNpdGlvblByb2dyZXNzOiAwLFxufSlcblxuLyoqXG4gKiBVc2UgdGhpcyBob29rIHRvIGFjY2VzcyB0aGUgYFJvdXRlVHJhbnNpdGlvbkNvbnRleHRgIHByb3ZpZGVkIGJ5IHRoZSBgUm91dGVUcmFuc2l0aW9uUHJvdmlkZXJgLlxuICogVG8gc3RhcnQgYSB0cmFuc2l0aW9uLCBmaXJlIHRoZSBgc3RhcnRSb3V0ZVRyYW5zaXRpb25gIG1ldGhvZCB3aXRoIGEgcHJvdmlkZWQgY2FsbGJhY2sgdG8gcnVuIHdoaWxlIHRoZSB0cmFuc2l0aW9uIHRha2VzIHBsYWNlLlxuICogQHJldHVybnMgVGhlIGBSb3V0ZVRyYW5zaXRpb25Db250ZXh0YCBuZWVkZWQgZm9yIHRyYW5zaXRpb25pbmcgYmV0d2VlbiByb3V0ZXMsIGluY2x1ZGluZyBgaXNUcmFuc2l0aW9uaW5nYCwgYHN0YXJ0Um91dGVUcmFuc2l0aW9uYCwgYW5kIGB0cmFuc2l0aW9uUHJvZ3Jlc3NgLlxuICogQGV4YW1wbGVcbiAqICd1c2UgY2xpZW50J1xuICogaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG4gKiBpbXBvcnQgeyB1c2VUcmFuc2l0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdWknXG4gKiBpbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG4gKlxuICogY29uc3QgTXlDb21wb25lbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICogICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICogICBjb25zdCB7IHN0YXJ0Um91dGVUcmFuc2l0aW9uIH0gPSB1c2VSb3V0ZVRyYW5zaXRpb24oKVxuICpcbiAqICAgY29uc3QgcmVkaXJlY3RTb21ld2hlcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gKiAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4gcm91dGVyLnB1c2goJy9zb21ld2hlcmUnKSlcbiAqICAgfSwgW3N0YXJ0Um91dGVUcmFuc2l0aW9uLCByb3V0ZXJdKVxuICpcbiAqICAgLy8gLi4uXG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCB1c2VSb3V0ZVRyYW5zaXRpb24gPSAoKSA9PiBSZWFjdC51c2UoUm91dGVUcmFuc2l0aW9uQ29udGV4dClcbiIsIi8vIEZvcm1hdCBmdW5jdGlvbiBtb2RpZmllZCBmcm9tIG5vZGVqc1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB0eXBlIHsgVXJsT2JqZWN0IH0gZnJvbSAndXJsJ1xuXG5jb25zdCBzbGFzaGVkUHJvdG9jb2xzID0gL2h0dHBzP3xmdHB8Z29waGVyfGZpbGUvXG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0ocGFyYW06IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoXG4gICAgdHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJyB8fFxuICAgICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInICYmICFpc05hTihwYXJhbSkpIHx8XG4gICAgdHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbidcbiAgKSB7XG4gICAgcmV0dXJuIFN0cmluZyhwYXJhbSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsUXVlcnlUb1NlYXJjaFBhcmFtcyh1cmxRdWVyeTogVXJsT2JqZWN0WydxdWVyeSddKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gIE9iamVjdC5lbnRyaWVzKHVybFF1ZXJ5KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHJlc3VsdC5hcHBlbmQoa2V5LCBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKGl0ZW0pKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnNldChrZXksIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0odmFsdWUpKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VXJsKHVybE9iajogVXJsT2JqZWN0KSB7XG4gIGxldCB7IGF1dGggfSA9IHVybE9ialxuICBjb25zdCB7IGhvc3RuYW1lIH0gPSB1cmxPYmpcbiAgbGV0IHByb3RvY29sID0gdXJsT2JqLnByb3RvY29sIHx8ICcnXG4gIGxldCBwYXRobmFtZSA9IHVybE9iai5wYXRobmFtZSB8fCAnJ1xuICBsZXQgaGFzaCA9IHVybE9iai5oYXNoIHx8ICcnXG4gIGxldCBxdWVyeSA9IHVybE9iai5xdWVyeSB8fCAnJ1xuICBsZXQgaG9zdDogZmFsc2UgfCBzdHJpbmcgPSBmYWxzZVxuXG4gIGF1dGggPSBhdXRoID8gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpLnJlcGxhY2UoLyUzQS9pLCAnOicpICsgJ0AnIDogJydcblxuICBpZiAodXJsT2JqLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHVybE9iai5ob3N0XG4gIH0gZWxzZSBpZiAoaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh+aG9zdG5hbWUuaW5kZXhPZignOicpID8gYFske2hvc3RuYW1lfV1gIDogaG9zdG5hbWUpXG4gICAgaWYgKHVybE9iai5wb3J0KSB7XG4gICAgICBob3N0ICs9ICc6JyArIHVybE9iai5wb3J0XG4gICAgfVxuICB9XG5cbiAgaWYgKHF1ZXJ5ICYmIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICBxdWVyeSA9IFN0cmluZyh1cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHF1ZXJ5KSlcbiAgfVxuXG4gIGxldCBzZWFyY2ggPSB1cmxPYmouc2VhcmNoIHx8IChxdWVyeSAmJiBgPyR7cXVlcnl9YCkgfHwgJydcblxuICBpZiAocHJvdG9jb2wgJiYgIXByb3RvY29sLmVuZHNXaXRoKCc6JykpIHtcbiAgICBwcm90b2NvbCArPSAnOidcbiAgfVxuXG4gIGlmICh1cmxPYmouc2xhc2hlcyB8fCAoKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xzLnRlc3QocHJvdG9jb2wpKSAmJiBob3N0ICE9PSBmYWxzZSkpIHtcbiAgICBob3N0ID0gJy8vJyArIChob3N0IHx8ICcnKVxuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZVswXSAhPT0gJy8nKSB7XG4gICAgICBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lXG4gICAgfVxuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnXG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoWzBdICE9PSAnIycpIHtcbiAgICBoYXNoID0gJyMnICsgaGFzaFxuICB9XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoWzBdICE9PSAnPycpIHtcbiAgICBzZWFyY2ggPSAnPycgKyBzZWFyY2hcbiAgfVxuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBlbmNvZGVVUklDb21wb25lbnQpXG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpXG5cbiAgcmV0dXJuIGAke3Byb3RvY29sfSR7aG9zdH0ke3BhdGhuYW1lfSR7c2VhcmNofSR7aGFzaH1gXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCB7IEVkaXRJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvRWRpdC9pbmRleC5qcydcbmltcG9ydCB7IExpbmtJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvTGluay9pbmRleC5qcydcbmltcG9ydCB7IFBsdXNJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvUGx1cy9pbmRleC5qcydcbmltcG9ydCB7IFN3YXBJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvU3dhcC9pbmRleC5qcydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvWC9pbmRleC5qcydcbmltcG9ydCB7IExpbmsgfSBmcm9tICcuLi9MaW5rL2luZGV4LmpzJ1xuaW1wb3J0IHsgUG9wdXAgfSBmcm9tICcuLi9Qb3B1cC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL1Rvb2x0aXAvaW5kZXguanMnXG5cbmNvbnN0IGljb25zID0ge1xuICBjaGV2cm9uOiBDaGV2cm9uSWNvbixcbiAgZWRpdDogRWRpdEljb24sXG4gIGxpbms6IExpbmtJY29uLFxuICBwbHVzOiBQbHVzSWNvbixcbiAgc3dhcDogU3dhcEljb24sXG4gIHg6IFhJY29uLFxufVxuXG5jb25zdCBiYXNlQ2xhc3MgPSAnYnRuJ1xuXG5leHBvcnQgY29uc3QgQnV0dG9uQ29udGVudHMgPSAoeyBjaGlsZHJlbiwgaWNvbiwgc2hvd1Rvb2x0aXAsIHRvb2x0aXAgfSkgPT4ge1xuICBjb25zdCBCdWlsdEluSWNvbiA9IGljb25zW2ljb25dXG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICB7dG9vbHRpcCAmJiAoXG4gICAgICAgIDxUb29sdGlwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdG9vbHRpcGB9IHNob3c9e3Nob3dUb29sdGlwfT5cbiAgICAgICAgICB7dG9vbHRpcH1cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udGVudGB9PlxuICAgICAgICB7Y2hpbGRyZW4gJiYgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9PntjaGlsZHJlbn08L3NwYW4+fVxuICAgICAgICB7aWNvbiAmJiAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pY29uYH0+XG4gICAgICAgICAgICB7aXNWYWxpZEVsZW1lbnQoaWNvbikgJiYgaWNvbn1cbiAgICAgICAgICAgIHtCdWlsdEluSWNvbiAmJiA8QnVpbHRJbkljb24gLz59XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9zcGFuPlxuICAgIDwvRnJhZ21lbnQ+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IEJ1dHRvbjogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB0eXBlID0gJ2J1dHRvbicsXG4gICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsXG4gICAgYnV0dG9uU3R5bGUgPSAncHJpbWFyeScsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVkLFxuICAgIGVsID0gJ2J1dHRvbicsXG4gICAgZW5hYmxlU3ViTWVudSxcbiAgICBleHRyYUJ1dHRvblByb3BzID0ge30sXG4gICAgaWNvbixcbiAgICBpY29uUG9zaXRpb24gPSAncmlnaHQnLFxuICAgIGljb25TdHlsZSA9ICd3aXRob3V0LWJvcmRlcicsXG4gICAgbWFyZ2luID0gdHJ1ZSxcbiAgICBuZXdUYWIsXG4gICAgb25DbGljayxcbiAgICBvbk1vdXNlRG93bixcbiAgICByZWYsXG4gICAgcm91bmQsXG4gICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgIFN1Yk1lbnVQb3B1cENvbnRlbnQsXG4gICAgdG8sXG4gICAgdG9vbHRpcCxcbiAgICB1cmwsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtzaG93VG9vbHRpcCwgc2V0U2hvd1Rvb2x0aXBdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICBiYXNlQ2xhc3MsXG4gICAgY2xhc3NOYW1lICYmIGNsYXNzTmFtZSxcbiAgICBpY29uICYmIGAke2Jhc2VDbGFzc30tLWljb25gLFxuICAgIGljb25TdHlsZSAmJiBgJHtiYXNlQ2xhc3N9LS1pY29uLXN0eWxlLSR7aWNvblN0eWxlfWAsXG4gICAgaWNvbiAmJiAhY2hpbGRyZW4gJiYgYCR7YmFzZUNsYXNzfS0taWNvbi1vbmx5YCxcbiAgICBzaXplICYmIGAke2Jhc2VDbGFzc30tLXNpemUtJHtzaXplfWAsXG4gICAgaWNvbiAmJiBpY29uUG9zaXRpb24gJiYgYCR7YmFzZUNsYXNzfS0taWNvbi1wb3NpdGlvbi0ke2ljb25Qb3NpdGlvbn1gLFxuICAgIHRvb2x0aXAgJiYgYCR7YmFzZUNsYXNzfS0taGFzLXRvb2x0aXBgLFxuICAgICFTdWJNZW51UG9wdXBDb250ZW50ICYmIGAke2Jhc2VDbGFzc30tLXdpdGhvdXRQb3B1cGAsXG4gICAgIW1hcmdpbiAmJiBgJHtiYXNlQ2xhc3N9LS1uby1tYXJnaW5gLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgIHNldFNob3dUb29sdGlwKGZhbHNlKVxuICAgIGlmICh0eXBlICE9PSAnc3VibWl0JyAmJiBvbkNsaWNrKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0eWxlQ2xhc3NlcyA9IFtcbiAgICBidXR0b25TdHlsZSAmJiBgJHtiYXNlQ2xhc3N9LS1zdHlsZS0ke2J1dHRvblN0eWxlfWAsXG4gICAgZGlzYWJsZWQgJiYgYCR7YmFzZUNsYXNzfS0tZGlzYWJsZWRgLFxuICAgIHJvdW5kICYmIGAke2Jhc2VDbGFzc30tLXJvdW5kYCxcbiAgICBTdWJNZW51UG9wdXBDb250ZW50ID8gYCR7YmFzZUNsYXNzfS0td2l0aFBvcHVwYCA6IGAke2Jhc2VDbGFzc30tLXdpdGhvdXRQb3B1cGAsXG4gIF1cbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oJyAnKVxuXG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge1xuICAgIGlkLFxuICAgIHR5cGUsXG4gICAgJ2FyaWEtZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICBjbGFzc05hbWU6ICFTdWJNZW51UG9wdXBDb250ZW50ID8gW2NsYXNzZXMsIHN0eWxlQ2xhc3Nlc10uam9pbignICcpIDogY2xhc3NlcyxcbiAgICBkaXNhYmxlZCxcbiAgICBvbkNsaWNrOiAhZGlzYWJsZWQgPyBoYW5kbGVDbGljayA6IHVuZGVmaW5lZCxcbiAgICBvbk1vdXNlRG93bjogIWRpc2FibGVkID8gb25Nb3VzZURvd24gOiB1bmRlZmluZWQsXG4gICAgb25Qb2ludGVyRW50ZXI6IHRvb2x0aXAgPyAoKSA9PiBzZXRTaG93VG9vbHRpcCh0cnVlKSA6IHVuZGVmaW5lZCxcbiAgICBvblBvaW50ZXJMZWF2ZTogdG9vbHRpcCA/ICgpID0+IHNldFNob3dUb29sdGlwKGZhbHNlKSA6IHVuZGVmaW5lZCxcbiAgICByZWw6IG5ld1RhYiA/ICdub29wZW5lciBub3JlZmVycmVyJyA6IHVuZGVmaW5lZCxcbiAgICB0YXJnZXQ6IG5ld1RhYiA/ICdfYmxhbmsnIDogdW5kZWZpbmVkLFxuICAgIHRpdGxlOiBhcmlhTGFiZWwsXG4gICAgLi4uZXh0cmFCdXR0b25Qcm9wcyxcbiAgfVxuXG4gIGxldCBidXR0b25FbGVtZW50XG5cbiAgc3dpdGNoIChlbCkge1xuICAgIGNhc2UgJ2FuY2hvcic6XG4gICAgICBidXR0b25FbGVtZW50ID0gKFxuICAgICAgICA8YVxuICAgICAgICAgIHsuLi5idXR0b25Qcm9wc31cbiAgICAgICAgICBocmVmPXshZGlzYWJsZWQgPyB1cmwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgcmVmPXtyZWYgYXMgUmVhY3QuUmVmT2JqZWN0PEhUTUxBbmNob3JFbGVtZW50Pn1cbiAgICAgICAgPlxuICAgICAgICAgIDxCdXR0b25Db250ZW50cyBpY29uPXtpY29ufSBzaG93VG9vbHRpcD17c2hvd1Rvb2x0aXB9IHRvb2x0aXA9e3Rvb2x0aXB9PlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvQnV0dG9uQ29udGVudHM+XG4gICAgICAgIDwvYT5cbiAgICAgIClcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICBidXR0b25FbGVtZW50ID0gKFxuICAgICAgICAgIDxkaXYgey4uLmJ1dHRvblByb3BzfT5cbiAgICAgICAgICAgIDxCdXR0b25Db250ZW50cyBpY29uPXtpY29ufSBzaG93VG9vbHRpcD17c2hvd1Rvb2x0aXB9IHRvb2x0aXA9e3Rvb2x0aXB9PlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L0J1dHRvbkNvbnRlbnRzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbkVsZW1lbnQgPSAoXG4gICAgICAgIDxMaW5rIHsuLi5idXR0b25Qcm9wc30gaHJlZj17dG8gfHwgdXJsfSBwcmVmZXRjaD17ZmFsc2V9PlxuICAgICAgICAgIDxCdXR0b25Db250ZW50cyBpY29uPXtpY29ufSBzaG93VG9vbHRpcD17c2hvd1Rvb2x0aXB9IHRvb2x0aXA9e3Rvb2x0aXB9PlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvQnV0dG9uQ29udGVudHM+XG4gICAgICAgIDwvTGluaz5cbiAgICAgIClcblxuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zdCBUYWcgPSBlbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG5cbiAgICAgIGJ1dHRvbkVsZW1lbnQgPSAoXG4gICAgICAgIDxUYWcgcmVmPXtyZWZ9IHsuLi5idXR0b25Qcm9wc30+XG4gICAgICAgICAgPEJ1dHRvbkNvbnRlbnRzIGljb249e2ljb259IHNob3dUb29sdGlwPXtzaG93VG9vbHRpcH0gdG9vbHRpcD17dG9vbHRpcH0+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9CdXR0b25Db250ZW50cz5cbiAgICAgICAgPC9UYWc+XG4gICAgICApXG4gICAgICBicmVha1xuICB9XG4gIGlmIChTdWJNZW51UG9wdXBDb250ZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZUNsYXNzZXN9PlxuICAgICAgICB7YnV0dG9uRWxlbWVudH1cbiAgICAgICAgPFBvcHVwXG4gICAgICAgICAgYnV0dG9uPXs8Q2hldnJvbkljb24gLz59XG4gICAgICAgICAgYnV0dG9uU2l6ZT17c2l6ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Rpc2FibGVkICYmICFlbmFibGVTdWJNZW51ID8gYCR7YmFzZUNsYXNzfS0tcG9wdXAtZGlzYWJsZWRgIDogJyd9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkICYmICFlbmFibGVTdWJNZW51fVxuICAgICAgICAgIGhvcml6b250YWxBbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgICBpZD17YCR7aWR9LXBvcHVwYH1cbiAgICAgICAgICBub0JhY2tncm91bmRcbiAgICAgICAgICByZW5kZXI9eyh7IGNsb3NlIH0pID0+IFN1Yk1lbnVQb3B1cENvbnRlbnQoeyBjbG9zZTogKCkgPT4gY2xvc2UoKSB9KX1cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIHZlcnRpY2FsQWxpZ249XCJib3R0b21cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGJ1dHRvbkVsZW1lbnRcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBDaGV2cm9uSWNvbjogUmVhY3QuRkM8e1xuICByZWFkb25seSBhcmlhTGFiZWw/OiBzdHJpbmdcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHJlYWRvbmx5IGRpcmVjdGlvbj86ICdkb3duJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndXAnXG4gIHJlYWRvbmx5IHNpemU/OiAnbGFyZ2UnIHwgJ3NtYWxsJ1xufT4gPSAoeyBhcmlhTGFiZWwsIGNsYXNzTmFtZSwgZGlyZWN0aW9uLCBzaXplIH0pID0+IChcbiAgPHN2Z1xuICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICBjbGFzc05hbWU9e1snaWNvbiBpY29uLS1jaGV2cm9uJywgY2xhc3NOYW1lLCBzaXplICYmIGBpY29uLS1zaXplLSR7c2l6ZX1gXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oJyAnKX1cbiAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICBzdHlsZT17e1xuICAgICAgdHJhbnNmb3JtOlxuICAgICAgICBkaXJlY3Rpb24gPT09ICdsZWZ0J1xuICAgICAgICAgID8gJ3JvdGF0ZSg5MGRlZyknXG4gICAgICAgICAgOiBkaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgID8gJ3JvdGF0ZSgtOTBkZWcpJ1xuICAgICAgICAgICAgOiBkaXJlY3Rpb24gPT09ICd1cCdcbiAgICAgICAgICAgICAgPyAncm90YXRlKDE4MGRlZyknXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH19XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgd2lkdGg9XCIxMDAlXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxwYXRoIGNsYXNzTmFtZT1cInN0cm9rZVwiIGQ9XCJNMTQgOEwxMCAxMkw2IDhcIiBzdHJva2VMaW5lY2FwPVwic3F1YXJlXCIgLz5cbiAgPC9zdmc+XG4pXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgY29uc3QgRWRpdEljb246IFJlYWN0LkZDPHsgY2xhc3NOYW1lPzogc3RyaW5nIH0+ID0gKHsgY2xhc3NOYW1lIH0pID0+IChcbiAgPHN2Z1xuICAgIGNsYXNzTmFtZT17W2NsYXNzTmFtZSwgJ2ljb24gaWNvbi0tZWRpdCddLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gID5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwic3Ryb2tlXCJcbiAgICAgIGQ9XCJNOS42ODUzMSA0LjYyOTM4SDUuMjYzNEM0LjkyODMzIDQuNjI5MzggNC42MDY5OCA0Ljc2MjQ4IDQuMzcwMDQgNC45OTk0MkM0LjEzMzExIDUuMjM2MzUgNCA1LjU1NzcgNCA1Ljg5Mjc4VjE0LjczNjZDNCAxNS4wNzE3IDQuMTMzMTEgMTUuMzkzIDQuMzcwMDQgMTUuNjNDNC42MDY5OCAxNS44NjY5IDQuOTI4MzMgMTYgNS4yNjM0IDE2SDE0LjEwNzJDMTQuNDQyMyAxNiAxNC43NjM2IDE1Ljg2NjkgMTUuMDAwNiAxNS42M0MxNS4yMzc1IDE1LjM5MyAxNS4zNzA2IDE1LjA3MTcgMTUuMzcwNiAxNC43MzY2VjEwLjMxNDdNMTMuNzEyNCA0LjM5MjQ5QzEzLjk2MzcgNC4xNDExOCAxNC4zMDQ2IDQgMTQuNjYgNEMxNS4wMTU0IDQgMTUuMzU2MiA0LjE0MTE4IDE1LjYwNzUgNC4zOTI0OUMxNS44NTg4IDQuNjQzOCAxNiA0Ljk4NDY0IDE2IDUuMzQwMDRDMTYgNS42OTU0NCAxNS44NTg4IDYuMDM2MjkgMTUuNjA3NSA2LjI4NzU5TDkuOTEzOTkgMTEuOTgxN0M5Ljc2Mzk5IDEyLjEzMTYgOS41Nzg2OCAxMi4yNDEzIDkuMzc1MTUgMTIuMzAwOEw3LjU2MDI3IDEyLjgzMTRDNy41MDU5MSAxMi44NDcyIDcuNDQ4MjkgMTIuODQ4MiA3LjM5MzQ0IDEyLjgzNDFDNy4zMzg1OSAxMi44MjAxIDcuMjg4NTMgMTIuNzkxNSA3LjI0ODQ5IDEyLjc1MTVDNy4yMDg0NSAxMi43MTE1IDcuMTc5OTEgMTIuNjYxNCA3LjE2NTg2IDEyLjYwNjZDNy4xNTE4MSAxMi41NTE3IDcuMTUyNzYgMTIuNDk0MSA3LjE2ODYxIDEyLjQzOTdMNy42OTkyNCAxMC42MjQ5QzcuNzU4OTYgMTAuNDIxNSA3Ljg2ODg4IDEwLjIzNjQgOC4wMTg4OCAxMC4wODY2TDEzLjcxMjQgNC4zOTI0OVpcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInNxdWFyZVwiXG4gICAgLz5cbiAgPC9zdmc+XG4pXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgY29uc3QgTGlua0ljb246IFJlYWN0LkZDID0gKCkgPT4gKFxuICA8c3ZnXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBjbGFzc05hbWU9XCJncmFwaGljIGxpbmsgaWNvbiBpY29uLS1saW5rXCJcbiAgICBmaWxsPVwibm9uZVwiXG4gICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgIGhlaWdodD1cIjIwXCJcbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICB3aWR0aD1cIjIwXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9XCJzdHJva2VcIlxuICAgICAgZD1cIk03Ljk5OTk5IDEzLjMzMzNINi42NjY2NkM1Ljc4MjYxIDEzLjMzMzMgNC45MzQ3NiAxMi45ODIxIDQuMzA5NjQgMTIuMzU3QzMuNjg0NTIgMTEuNzMxOSAzLjMzMzMzIDEwLjg4NCAzLjMzMzMzIDkuOTk5OTlDMy4zMzMzMyA5LjExNTkzIDMuNjg0NTIgOC4yNjgwOSA0LjMwOTY0IDcuNjQyOTdDNC45MzQ3NiA3LjAxNzg1IDUuNzgyNjEgNi42NjY2NiA2LjY2NjY2IDYuNjY2NjZINy45OTk5OU0xMiA2LjY2NjY2SDEzLjMzMzNDMTQuMjE3NCA2LjY2NjY2IDE1LjA2NTIgNy4wMTc4NSAxNS42OTA0IDcuNjQyOTdDMTYuMzE1NSA4LjI2ODA5IDE2LjY2NjcgOS4xMTU5MyAxNi42NjY3IDkuOTk5OTlDMTYuNjY2NyAxMC44ODQgMTYuMzE1NSAxMS43MzE5IDE1LjY5MDQgMTIuMzU3QzE1LjA2NTIgMTIuOTgyMSAxNC4yMTc0IDEzLjMzMzMgMTMuMzMzMyAxMy4zMzMzSDEyTTcuMzMzMzMgOS45OTk5OUgxMi42NjY3XCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IFBsdXNJY29uOiBSZWFjdC5GQyA9ICgpID0+IChcbiAgPHN2Z1xuICAgIGNsYXNzTmFtZT1cImljb24gaWNvbi0tcGx1c1wiXG4gICAgaGVpZ2h0PVwiMjBcIlxuICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgIHdpZHRoPVwiMjBcIlxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICA+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cInN0cm9rZVwiXG4gICAgICBkPVwiTTUuMzMzMzMgOS45OTk5OEgxNC42NjY3TTkuOTk5OTkgNS4zMzMzMVYxNC42NjY2XCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IFN3YXBJY29uOiBSZWFjdC5GQyA9ICgpID0+IChcbiAgPHN2ZyBjbGFzc05hbWU9XCJpY29uIGljb24tLXN3YXBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9XCJzdHJva2VcIlxuICAgICAgZD1cIk03LjMzMzM0IDRMNC42NjY2NyA2LjY2NjY3TTQuNjY2NjcgNi42NjY2N0w3LjMzMzM0IDkuMzMzMzNNNC42NjY2NyA2LjY2NjY3SDE1LjMzMzNNMTIuNjY2NyAxNkwxNS4zMzMzIDEzLjMzMzNNMTUuMzMzMyAxMy4zMzMzTDEyLjY2NjcgMTAuNjY2N00xNS4zMzMzIDEzLjMzMzNINC42NjY2N1wiXG4gICAgICBzdHJva2VMaW5lY2FwPVwic3F1YXJlXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBMaW5rUHJvcHMgfSBmcm9tICduZXh0L2xpbmsuanMnXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnLi4vLi4vTGluay9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncG9wdXAtYnV0dG9uLWxpc3QnXG5cbmV4cG9ydCB7IFBvcHVwTGlzdERpdmlkZXIgYXMgRGl2aWRlciB9IGZyb20gJy4uL1BvcHVwRGl2aWRlci9pbmRleC5qcydcbmV4cG9ydCB7IFBvcHVwTGlzdEdyb3VwTGFiZWwgYXMgR3JvdXBMYWJlbCB9IGZyb20gJy4uL1BvcHVwR3JvdXBMYWJlbC9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IEJ1dHRvbkdyb3VwOiBSZWFjdC5GQzx7XG4gIGJ1dHRvblNpemU/OiAnZGVmYXVsdCcgfCAnc21hbGwnXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHRleHRBbGlnbj86ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0J1xufT4gPSAoeyBidXR0b25TaXplID0gJ2RlZmF1bHQnLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB0ZXh0QWxpZ24gPSAnbGVmdCcgfSkgPT4ge1xuICBjb25zdCBjbGFzc2VzID0gW1xuICAgIGJhc2VDbGFzcyxcbiAgICBjbGFzc05hbWUsXG4gICAgYCR7YmFzZUNsYXNzfV9fdGV4dC1hbGlnbi0tJHt0ZXh0QWxpZ259YCxcbiAgICBgJHtiYXNlQ2xhc3N9X19idXR0b24tc2l6ZS0tJHtidXR0b25TaXplfWAsXG4gIF1cbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oJyAnKVxuICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzZXN9PntjaGlsZHJlbn08L2Rpdj5cbn1cblxudHlwZSBNZW51QnV0dG9uUHJvcHMgPSB7XG4gIGFjdGl2ZT86IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIGhyZWY/OiBMaW5rUHJvcHNbJ2hyZWYnXVxuICBpZD86IHN0cmluZ1xuICBvbkNsaWNrPzogKGU/OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBCdXR0b246IFJlYWN0LkZDPE1lbnVCdXR0b25Qcm9wcz4gPSAoe1xuICBpZCxcbiAgYWN0aXZlLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBkaXNhYmxlZCxcbiAgaHJlZixcbiAgb25DbGljayxcbn0pID0+IHtcbiAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICBgJHtiYXNlQ2xhc3N9X19idXR0b25gLFxuICAgIGRpc2FibGVkICYmIGAke2Jhc2VDbGFzc31fX2Rpc2FibGVkYCxcbiAgICBhY3RpdmUgJiYgYCR7YmFzZUNsYXNzfV9fYnV0dG9uLS1zZWxlY3RlZGAsXG4gICAgY2xhc3NOYW1lLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICBpZiAoIWRpc2FibGVkKSB7XG4gICAgaWYgKGhyZWYpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxMaW5rXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzfVxuICAgICAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgICAgICBvbkNsaWNrKGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBwcmVmZXRjaD17ZmFsc2V9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvTGluaz5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAob25DbGljaykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgICAgIG9uQ2xpY2soZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzfSBpZD17aWR9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncG9wdXAtZGl2aWRlcidcblxuZXhwb3J0IGNvbnN0IFBvcHVwTGlzdERpdmlkZXI6IFJlYWN0LkZDID0gKCkgPT4ge1xuICByZXR1cm4gPGhyIGNsYXNzTmFtZT17YmFzZUNsYXNzfSAvPlxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3BvcHVwLWxpc3QtZ3JvdXAtbGFiZWwnXG5cbmV4cG9ydCBjb25zdCBQb3B1cExpc3RHcm91cExhYmVsOiBSZWFjdC5GQzx7XG4gIGxhYmVsOiBzdHJpbmdcbn0+ID0gKHsgbGFiZWwgfSkgPT4ge1xuICByZXR1cm4gPHAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PntsYWJlbH08L3A+XG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgKiBhcyBQb3B1cExpc3QgZnJvbSAnLi9Qb3B1cEJ1dHRvbkxpc3QvaW5kZXguanMnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5cbmltcG9ydCB7IHVzZUVmZmVjdEV2ZW50IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRWZmZWN0RXZlbnQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IFBvcHVwVHJpZ2dlciB9IGZyb20gJy4vUG9wdXBUcmlnZ2VyL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncG9wdXAnXG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIGFsbCBlbGVtZW50cyB0aGUgYnJvd3NlciBjb25zaWRlcnMgdGFiYmFibGUuXG4gKi9cbmNvbnN0IFRBQkJBQkxFX1NFTEVDVE9SID0gW1xuICAnYVtocmVmXScsXG4gICdidXR0b246bm90KDpkaXNhYmxlZCknLFxuICAnaW5wdXQ6bm90KDpkaXNhYmxlZCk6bm90KFt0eXBlPVwiaGlkZGVuXCJdKScsXG4gICdzZWxlY3Q6bm90KDpkaXNhYmxlZCknLFxuICAndGV4dGFyZWE6bm90KDpkaXNhYmxlZCknLFxuICAnW3RhYmluZGV4XScsXG4gICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKScsXG4gICdhdWRpb1tjb250cm9sc10nLFxuICAndmlkZW9bY29udHJvbHNdJyxcbiAgJ3N1bW1hcnknLFxuXVxuICAubWFwKChzKSA9PiBgJHtzfTpub3QoW3RhYmluZGV4PVwiLTFcIl0pYClcbiAgLmpvaW4oJywgJylcblxuZXhwb3J0IHR5cGUgUG9wdXBQcm9wcyA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogQ1NTUHJvcGVydGllc1snYmFja2dyb3VuZENvbG9yJ11cbiAgYm91bmRpbmdSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTEVsZW1lbnQ+XG4gIGJ1dHRvbj86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICogVGhlIGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGJ1dHRvbiB0aGF0IHRyaWdnZXJzIHRoZSBwb3B1cC5cbiAgICovXG4gIGJ1dHRvbkNsYXNzTmFtZT86IHN0cmluZ1xuICBidXR0b25TaXplPzogJ2xhcmdlJyB8ICdtZWRpdW0nIHwgJ3NtYWxsJyB8ICd4c21hbGwnXG4gIGJ1dHRvblR5cGU/OiAnY3VzdG9tJyB8ICdkZWZhdWx0JyB8ICdub25lJ1xuICBjYXJldD86IGJvb2xlYW5cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIFRoZSBjbGFzcyBuYW1lIHRvIGFwcGx5IHRvIHRoZSBwb3B1cCBjb250YWluZXIgY29udGFpbmluZyB0aGUgdHJpZ2dlci5cbiAgICogVGhpcyBkb2VzIG5vdCB3cmFwIHRoZSBhY3R1YWwgcG9wdXAgY29udGVudCwgd2hpY2ggaXMgcmVuZGVyZWQgaW4gYSBwb3J0YWwuXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiBGb3JjZSBjb250cm9sIHRoZSBvcGVuIHN0YXRlIG9mIHRoZSBwb3B1cCwgcmVnYXJkbGVzcyBvZiB0aGUgdHJpZ2dlci5cbiAgICovXG4gIGZvcmNlT3Blbj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFByZWZlcnJlZCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgcG9wdXAsIGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdsZWZ0J1xuICAgKi9cbiAgaG9yaXpvbnRhbEFsaWduPzogJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnXG4gIGlkPzogc3RyaW5nXG4gIGluaXRBY3RpdmU/OiBib29sZWFuXG4gIG5vQmFja2dyb3VuZD86IGJvb2xlYW5cbiAgb25Ub2dnbGVDbG9zZT86ICgpID0+IHZvaWRcbiAgb25Ub2dnbGVPcGVuPzogKGFjdGl2ZTogYm9vbGVhbikgPT4gdm9pZFxuICAvKipcbiAgICogQ2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgcG9ydGFsIGNvbnRhaW5lci5cbiAgICovXG4gIHBvcnRhbENsYXNzTmFtZT86IHN0cmluZ1xuICByZW5kZXI/OiAoYXJnczogeyBjbG9zZTogKCkgPT4gdm9pZCB9KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgc2hvd09uSG92ZXI/OiBib29sZWFuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgc2Nyb2xsYmFyIGlzIGhpZGRlbi4gSWYgeW91IHdhbnQgdG8gc2hvdyBpdCwgc2V0IHRoaXMgdG8gdHJ1ZS5cbiAgICogSW4gYm90aCBjYXNlcywgdGhlIGNvbnRhaW5lciBpcyBzdGlsbCBzY3JvbGxhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2hvd1Njcm9sbGJhcj86IGJvb2xlYW5cbiAgc2l6ZT86ICdmaXQtY29udGVudCcgfCAnbGFyZ2UnIHwgJ21lZGl1bScgfCAnc21hbGwnXG4gIC8qKlxuICAgKiBQcmVmZXJyZWQgdmVydGljYWwgYWxpZ25tZW50IG9mIHRoZSBwb3B1cCAocG9zaXRpb24gYmVsb3cgb3IgYWJvdmUgdGhlIHRyaWdnZXIpLFxuICAgKiBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBJZiB0aGUgcG9wdXAgaXMgdG9vIGNsb3NlIHRvIHRoZSBlZGdlIG9mIHRoZSB2aWV3cG9ydCwgaXQgd2lsbCBmbGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlXG4gICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZWZlcnJlZCB2ZXJ0aWNhbCBhbGlnbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdib3R0b20nXG4gICAqL1xuICB2ZXJ0aWNhbEFsaWduPzogJ2JvdHRvbScgfCAndG9wJ1xufVxuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IHJlbmRlcnMgYSBwb3B1cCwgYXMgd2VsbCBhcyBhIGJ1dHRvbiB0aGF0IHRyaWdnZXJzIHRoZSBwb3B1cC5cbiAqXG4gKiBUaGUgcG9wdXAgaXMgcmVuZGVyZWQgaW4gYSBwb3J0YWwsIGFuZCBpcyBhdXRvbWF0aWNhbGx5IHBvc2l0aW9uZWQgYWJvdmUgLyBiZWxvdyB0aGUgdHJpZ2dlcixcbiAqIGRlcGVuZGluZyBvbiB0aGUgdmVydGljYWxBbGlnbiBwcm9wIGFuZCB0aGUgc3BhY2UgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgUG9wdXA6IFJlYWN0LkZDPFBvcHVwUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBidXR0b24sXG4gICAgYnV0dG9uQ2xhc3NOYW1lLFxuICAgIGJ1dHRvblNpemUsXG4gICAgYnV0dG9uVHlwZSA9ICdkZWZhdWx0JyxcbiAgICBjYXJldCA9IHRydWUsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVkLFxuICAgIGZvcmNlT3BlbixcbiAgICBob3Jpem9udGFsQWxpZ24gPSAnbGVmdCcsXG4gICAgaW5pdEFjdGl2ZSA9IGZhbHNlLFxuICAgIG5vQmFja2dyb3VuZCxcbiAgICBvblRvZ2dsZUNsb3NlLFxuICAgIG9uVG9nZ2xlT3BlbixcbiAgICBwb3J0YWxDbGFzc05hbWUsXG4gICAgcmVuZGVyLFxuICAgIHNob3dPbkhvdmVyID0gZmFsc2UsXG4gICAgc2hvd1Njcm9sbGJhciA9IGZhbHNlLFxuICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICB2ZXJ0aWNhbEFsaWduID0gJ2JvdHRvbScsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHBvcHVwUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIC8qKlxuICAgKiBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBwb3B1cCB3YXMgb3BlbmVkIHZpYSBrZXlib2FyZC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF1dG9mb2N1cyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgcG9wdXAuXG4gICAqIElmIHRoZSBwb3B1cCB3YXMgb3BlbmVkIHZpYSBtb3VzZSwgd2UgZG8gbm90IHdhbnQgdG8gYXV0b2ZvY3VzIHRoZSBmaXJzdCBlbGVtZW50LlxuICAgKi9cbiAgY29uc3Qgb3BlbmVkVmlhS2V5Ym9hcmRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3QgW21vdW50ZWQsIHNldE1vdW50ZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmUsIHNldEFjdGl2ZUludGVybmFsXSA9IHVzZVN0YXRlKGluaXRBY3RpdmUpXG4gIGNvbnN0IFtpc09uVG9wLCBzZXRJc09uVG9wXSA9IHVzZVN0YXRlKHZlcnRpY2FsQWxpZ24gPT09ICd0b3AnKVxuXG4gIC8vIFRyYWNrIHdoZW4gY29tcG9uZW50IGlzIG1vdW50ZWQgdG8gYXZvaWQgU1NSL2NsaWVudCBoeWRyYXRpb24gbWlzbWF0Y2hcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRNb3VudGVkKHRydWUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNldEFjdGl2ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChpc0FjdGl2ZTogYm9vbGVhbiwgdmlhS2V5Ym9hcmQgPSBmYWxzZSkgPT4ge1xuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIG9wZW5lZFZpYUtleWJvYXJkUmVmLmN1cnJlbnQgPSB2aWFLZXlib2FyZFxuICAgICAgICBvblRvZ2dsZU9wZW4/Lih0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25Ub2dnbGVDbG9zZT8uKClcbiAgICAgIH1cbiAgICAgIHNldEFjdGl2ZUludGVybmFsKGlzQWN0aXZlKVxuICAgIH0sXG4gICAgW29uVG9nZ2xlQ2xvc2UsIG9uVG9nZ2xlT3Blbl0sXG4gIClcblxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFBvc2l0aW9uIENhbGN1bGF0aW9uXG4gIC8vXG4gIC8vIENhbGN1bGF0ZXMgYW5kIGFwcGxpZXMgcG9wdXAgcG9zaXRpb24gcmVsYXRpdmUgdG8gdHJpZ2dlci5cbiAgLy8gQWx3YXlzIGNoZWNrcyB2aWV3cG9ydCBib3VuZHMgKGZvciBmbGlwcGluZyksIGJ1dCBvbmx5IHVwZGF0ZXNcbiAgLy8gc3R5bGVzIGlmIHRoZSBjYWxjdWxhdGVkIHBvc2l0aW9uIGRpZmZlcnMgZnJvbSBjdXJyZW50IHBvc2l0aW9uLlxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgY29uc3QgdXBkYXRlUG9zaXRpb24gPSB1c2VFZmZlY3RFdmVudCgoKSA9PiB7XG4gICAgY29uc3QgdHJpZ2dlciA9IHRyaWdnZXJSZWYuY3VycmVudFxuICAgIGNvbnN0IHBvcHVwID0gcG9wdXBSZWYuY3VycmVudFxuICAgIGlmICghdHJpZ2dlciB8fCAhcG9wdXApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRyaWdnZXJSZWN0ID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IHBvcHVwUmVjdCA9IHBvcHVwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgICAvLyBHYXAgYmV0d2VlbiB0aGUgcG9wdXAgYW5kIHRoZSB0cmlnZ2VyL3ZpZXdwb3J0IGVkZ2VzIChpbiBwaXhlbHMpXG4gICAgY29uc3Qgb2Zmc2V0ID0gMTBcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBWZXJ0aWNhbCBQb3NpdGlvbmluZ1xuICAgIC8vIENhbGN1bGF0ZXMgdGhlIGB0b3BgIHBvc2l0aW9uIGluIGFic29sdXRlIHBhZ2UgY29vcmRpbmF0ZXMuXG4gICAgLy8gVXNlcyBgdmVydGljYWxBbGlnbmAgcHJvcCBhcyB0aGUgcHJlZmVycmVkIGRpcmVjdGlvbiwgYnV0IGZsaXBzXG4gICAgLy8gdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgdGhlcmUncyBub3QgZW5vdWdoIHZpZXdwb3J0IHNwYWNlLlxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGxldCB0b3A6IG51bWJlclxuICAgIGxldCBvblRvcCA9IHZlcnRpY2FsQWxpZ24gPT09ICd0b3AnXG5cbiAgICBpZiAodmVydGljYWxBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIHRvcCA9IHRyaWdnZXJSZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZICsgb2Zmc2V0XG5cbiAgICAgIGlmICh0cmlnZ2VyUmVjdC5ib3R0b20gKyBwb3B1cFJlY3QuaGVpZ2h0ICsgb2Zmc2V0ID4gd2luZG93LmlubmVySGVpZ2h0KSB7XG4gICAgICAgIHRvcCA9IHRyaWdnZXJSZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gcG9wdXBSZWN0LmhlaWdodCAtIG9mZnNldFxuICAgICAgICBvblRvcCA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9wID0gdHJpZ2dlclJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSBwb3B1cFJlY3QuaGVpZ2h0IC0gb2Zmc2V0XG5cbiAgICAgIGlmICh0cmlnZ2VyUmVjdC50b3AgLSBwb3B1cFJlY3QuaGVpZ2h0IC0gb2Zmc2V0IDwgMCkge1xuICAgICAgICB0b3AgPSB0cmlnZ2VyUmVjdC5ib3R0b20gKyB3aW5kb3cuc2Nyb2xsWSArIG9mZnNldFxuICAgICAgICBvblRvcCA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNPblRvcChvblRvcClcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIb3Jpem9udGFsIFBvc2l0aW9uaW5nXG4gICAgLy8gQ2FsY3VsYXRlcyB0aGUgYGxlZnRgIHBvc2l0aW9uIGJhc2VkIG9uIGBob3Jpem9udGFsQWxpZ25gIHByb3A6XG4gICAgLy8gLSAnbGVmdCc6IGFsaWducyBwb3B1cCdzIGxlZnQgZWRnZSB3aXRoIHRyaWdnZXIncyBsZWZ0IGVkZ2VcbiAgICAvLyAtICdyaWdodCc6IGFsaWducyBwb3B1cCdzIHJpZ2h0IGVkZ2Ugd2l0aCB0cmlnZ2VyJ3MgcmlnaHQgZWRnZVxuICAgIC8vIC0gJ2NlbnRlcic6IGNlbnRlcnMgcG9wdXAgaG9yaXpvbnRhbGx5IHJlbGF0aXZlIHRvIHRyaWdnZXJcbiAgICAvLyBUaGVuIGNsYW1wcyB0byBrZWVwIHRoZSBwb3B1cCB3aXRoaW4gdmlld3BvcnQgYm91bmRzLlxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGxldCBsZWZ0ID1cbiAgICAgIGhvcml6b250YWxBbGlnbiA9PT0gJ3JpZ2h0J1xuICAgICAgICA/IHRyaWdnZXJSZWN0LnJpZ2h0IC0gcG9wdXBSZWN0LndpZHRoXG4gICAgICAgIDogaG9yaXpvbnRhbEFsaWduID09PSAnY2VudGVyJ1xuICAgICAgICAgID8gdHJpZ2dlclJlY3QubGVmdCArIHRyaWdnZXJSZWN0LndpZHRoIC8gMiAtIHBvcHVwUmVjdC53aWR0aCAvIDJcbiAgICAgICAgICA6IHRyaWdnZXJSZWN0LmxlZnRcblxuICAgIGxlZnQgPSBNYXRoLm1heChvZmZzZXQsIE1hdGgubWluKGxlZnQsIHdpbmRvdy5pbm5lcldpZHRoIC0gcG9wdXBSZWN0LndpZHRoIC0gb2Zmc2V0KSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDYXJldCBQb3NpdGlvbmluZ1xuICAgIC8vIFBvc2l0aW9ucyB0aGUgY2FyZXQgYXJyb3cgdG8gcG9pbnQgYXQgdGhlIHRyaWdnZXIncyBob3Jpem9udGFsIGNlbnRlci5cbiAgICAvLyBDbGFtcHMgYmV0d2VlbiAxMnB4IGZyb20gZWRnZXMgdG8gcHJldmVudCBjYXJldCBmcm9tIG92ZXJmbG93aW5nIHRoZSBwb3B1cC5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCB0cmlnZ2VyQ2VudGVyID0gdHJpZ2dlclJlY3QubGVmdCArIHRyaWdnZXJSZWN0LndpZHRoIC8gMlxuICAgIGNvbnN0IGNhcmV0TGVmdCA9IE1hdGgubWF4KDEyLCBNYXRoLm1pbih0cmlnZ2VyQ2VudGVyIC0gbGVmdCwgcG9wdXBSZWN0LndpZHRoIC0gMTIpKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFwcGx5IFN0eWxlcyAob25seSBpZiBjaGFuZ2VkKVxuICAgIC8vIENvbXBhcmVzIGNhbGN1bGF0ZWQgcG9zaXRpb24gd2l0aCBjdXJyZW50IHN0eWxlcyB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuICAgIC8vIERPTSB1cGRhdGVzIGR1cmluZyBzY3JvbGwuIFRoaXMgcHJldmVudHMgdmlzdWFsIGxhZyBieSByZWx5aW5nIG9uIHRoZSBhYnNvbHV0ZVxuICAgIC8vIHBvc2l0aW9uaW5nIHdoZXJlIHBvc3NpYmxlIChwb3B1cCBzbGlnaHRseSBsYWdzIGJlaGluZCB3aGVuIHNjcm9sbGluZyByZWFsbHkgZmFzdCksXG4gICAgLy8gd2hpbGUgc3RpbGwgYWxsb3dpbmcgcG9zaXRpb24gY2hhbmdlcyB3aGVuIG5lZWRlZCAoZS5nLiwgc3RpY2t5IHBhcmVudCwgdmlld3BvcnQgZmxpcCkuXG4gICAgLy8gVmFsdWVzIGFyZSByb3VuZGVkIHRvIG1hdGNoIGJyb3dzZXIncyBDU1MgcHJlY2lzaW9uIGFuZCBhdm9pZCBmYWxzZSB1cGRhdGVzLlxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IG5ld1RvcCA9IGAke01hdGgucm91bmQodG9wKX1weGBcbiAgICBjb25zdCBuZXdMZWZ0ID0gYCR7TWF0aC5yb3VuZChsZWZ0ICsgd2luZG93LnNjcm9sbFgpfXB4YFxuICAgIGNvbnN0IG5ld0NhcmV0TGVmdCA9IGAke01hdGgucm91bmQoY2FyZXRMZWZ0KX1weGBcblxuICAgIGlmIChwb3B1cC5zdHlsZS50b3AgIT09IG5ld1RvcCkge1xuICAgICAgcG9wdXAuc3R5bGUudG9wID0gbmV3VG9wXG4gICAgfVxuICAgIGlmIChwb3B1cC5zdHlsZS5sZWZ0ICE9PSBuZXdMZWZ0KSB7XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gbmV3TGVmdFxuICAgIH1cbiAgICBpZiAocG9wdXAuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1jYXJldC1sZWZ0JykgIT09IG5ld0NhcmV0TGVmdCkge1xuICAgICAgcG9wdXAuc3R5bGUuc2V0UHJvcGVydHkoJy0tY2FyZXQtbGVmdCcsIG5ld0NhcmV0TGVmdClcbiAgICB9XG4gIH0pXG5cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBDbGljayBPdXRzaWRlIEhhbmRsZXJcbiAgLy8gQ2xvc2VzIHBvcHVwIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBib3RoIHRoZSBwb3B1cCBhbmQgdHJpZ2dlci5cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IHVzZUVmZmVjdEV2ZW50KChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgaXNPdXRzaWRlUG9wdXAgPSAhcG9wdXBSZWYuY3VycmVudD8uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSlcbiAgICBjb25zdCBpc091dHNpZGVUcmlnZ2VyID0gIXRyaWdnZXJSZWYuY3VycmVudD8uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSlcblxuICAgIGlmIChpc091dHNpZGVQb3B1cCAmJiBpc091dHNpZGVUcmlnZ2VyKSB7XG4gICAgICBzZXRBY3RpdmUoZmFsc2UpXG4gICAgfVxuICB9KVxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gS2V5Ym9hcmQgTmF2aWdhdGlvblxuICAvLyBIYW5kbGVzIGtleWJvYXJkIGludGVyYWN0aW9ucyB3aGVuIHBvcHVwIGlzIG9wZW46XG4gIC8vIC0gRXNjYXBlOiBjbG9zZXMgcG9wdXAgYW5kIHJldHVybnMgZm9jdXMgdG8gdHJpZ2dlclxuICAvLyAtIFRhYi9TaGlmdCtUYWI6IGN5Y2xlcyB0aHJvdWdoIGZvY3VzYWJsZSBpdGVtcyB3aXRoIHdyYXBwaW5nXG4gIC8vIC0gQXJyb3dVcC9BcnJvd0Rvd246IHNhbWUgYXMgU2hpZnQrVGFiL1RhYiBmb3IgbWVudS1zdHlsZSBuYXZpZ2F0aW9uXG4gIC8vIEZvY3VzIGlzIG1hbmFnZWQgbWFudWFsbHkgdG8gc3VwcG9ydCBlbGVtZW50cyB0aGUgYnJvd3NlciBtaWdodCBza2lwLlxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUVmZmVjdEV2ZW50KChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgY29uc3QgcG9wdXAgPSBwb3B1cFJlZi5jdXJyZW50XG4gICAgaWYgKCFwb3B1cCB8fCAhYWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIHNldEFjdGl2ZShmYWxzZSlcbiAgICAgIHRyaWdnZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ2J1dHRvbiwgW3RhYmluZGV4PVwiMFwiXScpPy5mb2N1cygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZS5rZXkgPT09ICdUYWInIHx8IGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBjb25zdCBmb2N1c2FibGUgPSBBcnJheS5mcm9tKHBvcHVwLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFRBQkJBQkxFX1NFTEVDVE9SKSlcbiAgICAgIGlmIChmb2N1c2FibGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZm9jdXNhYmxlLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KVxuICAgICAgY29uc3QgZ29CYWNrd2FyZCA9IGUua2V5ID09PSAnQXJyb3dVcCcgfHwgKGUua2V5ID09PSAnVGFiJyAmJiBlLnNoaWZ0S2V5KVxuXG4gICAgICBsZXQgbmV4dEluZGV4OiBudW1iZXJcbiAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgIG5leHRJbmRleCA9IGdvQmFja3dhcmQgPyBmb2N1c2FibGUubGVuZ3RoIC0gMSA6IDBcbiAgICAgIH0gZWxzZSBpZiAoZ29CYWNrd2FyZCkge1xuICAgICAgICBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggPT09IDAgPyBmb2N1c2FibGUubGVuZ3RoIC0gMSA6IGN1cnJlbnRJbmRleCAtIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCA9PT0gZm9jdXNhYmxlLmxlbmd0aCAtIDEgPyAwIDogY3VycmVudEluZGV4ICsgMVxuICAgICAgfVxuXG4gICAgICBmb2N1c2FibGVbbmV4dEluZGV4XS5mb2N1cygpXG4gICAgfVxuICB9KVxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gQ2xpY2sgSGFuZGxlciBmb3IgQWN0aW9uYWJsZSBFbGVtZW50c1xuICAvLyBDbG9zZXMgcG9wdXAgd2hlbiBidXR0b25zL2xpbmtzIGluc2lkZSBhcmUgY2xpY2tlZCAoaW5jbHVkZXMgRW50ZXIvU3BhY2UgYWN0aXZhdGlvbikuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBjb25zdCBoYW5kbGVBY3Rpb25hYmxlQ2xpY2sgPSB1c2VFZmZlY3RFdmVudCgoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG5cbiAgICAvLyBBbGxvdyBvcHRpbmcgb3V0IHdpdGggZGF0YS1wb3B1cC1wcmV2ZW50LWNsb3NlIGF0dHJpYnV0ZSBvbiBlbGVtZW50IG9yIGFuY2VzdG9yXG4gICAgaWYgKHRhcmdldC5jbG9zZXN0KCdbZGF0YS1wb3B1cC1wcmV2ZW50LWNsb3NlXScpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY2xpY2tlZCBlbGVtZW50IG9yIGFueSBhbmNlc3RvciBpcyBhbiBhY3Rpb25hYmxlIGVsZW1lbnRcbiAgICBjb25zdCBhY3Rpb25hYmxlID0gdGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbiwgYVtocmVmXSwgW3JvbGU9XCJidXR0b25cIl0sIFtyb2xlPVwibWVudWl0ZW1cIl0nKVxuICAgIGlmIChhY3Rpb25hYmxlICYmIHBvcHVwUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGFjdGlvbmFibGUpKSB7XG4gICAgICBzZXRBY3RpdmUoZmFsc2UpXG4gICAgfVxuICB9KVxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gRWZmZWN0OiBTZXR1cC9UZWFyZG93biBwb3NpdGlvbiBhbmQgZm9jdXMgbWFuYWdlbWVudFxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcG9wdXAgPSBwb3B1cFJlZi5jdXJyZW50XG4gICAgaWYgKCFwb3B1cCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEluaXRpYWwgUG9zaXRpb25cbiAgICAvLyBDYWxjdWxhdGUgYW5kIGFwcGx5IHBvcHVwIHBvc2l0aW9uIGltbWVkaWF0ZWx5IG9uIG9wZW4uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgdXBkYXRlUG9zaXRpb24oKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEZvY3VzIE1hbmFnZW1lbnRcbiAgICAvLyBXaGVuIG9wZW5lZCB2aWEga2V5Ym9hcmQsIGF1dG9mb2N1cyB0aGUgZmlyc3QgZm9jdXNhYmxlIGJ1dHRvbi5cbiAgICAvLyBXaGVuIG9wZW5lZCB2aWEgbW91c2UsIHNraXAgYXV0b2ZvY3VzIHRvIGF2b2lkIHVud2FudGVkIGhpZ2hsaWdodHMuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaWYgKG9wZW5lZFZpYUtleWJvYXJkUmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIFVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gZW5zdXJlIERPTSBpcyByZWFkeS5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gcG9wdXAucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oVEFCQkFCTEVfU0VMRUNUT1IpXG4gICAgICAgIGZpcnN0Rm9jdXNhYmxlPy5mb2N1cygpXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFdmVudCBMaXN0ZW5lcnNcbiAgICAvLyAtIHJlc2l6ZS9zY3JvbGw6IHJlY2FsY3VsYXRlIHBvc2l0aW9uIChvbmx5IGFwcGxpZXMgc3R5bGVzIGlmIGNoYW5nZWQpXG4gICAgLy8gLSBtb3VzZWRvd246IGRldGVjdCBjbGlja3Mgb3V0c2lkZSB0byBjbG9zZVxuICAgIC8vIC0ga2V5ZG93bjogaGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlUG9zaXRpb24pXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZVBvc2l0aW9uLCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSlcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG4gICAgcG9wdXAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBY3Rpb25hYmxlQ2xpY2spXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVBvc2l0aW9uKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZVBvc2l0aW9uLCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuICAgICAgcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBY3Rpb25hYmxlQ2xpY2spXG4gICAgfVxuICB9LCBbYWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmb3JjZU9wZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0QWN0aXZlKGZvcmNlT3BlbilcbiAgICB9XG4gIH0sIFtmb3JjZU9wZW4sIHNldEFjdGl2ZV0pXG5cbiAgY29uc3QgVHJpZ2dlciA9IChcbiAgICA8UG9wdXBUcmlnZ2VyXG4gICAgICBhY3RpdmU9e2FjdGl2ZX1cbiAgICAgIGJ1dHRvbj17YnV0dG9ufVxuICAgICAgYnV0dG9uVHlwZT17YnV0dG9uVHlwZX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgbm9CYWNrZ3JvdW5kPXtub0JhY2tncm91bmR9XG4gICAgICBzZXRBY3RpdmU9e3NldEFjdGl2ZX1cbiAgICAgIHNpemU9e2J1dHRvblNpemV9XG4gICAgLz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0gaWQ9e2lkfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190cmlnZ2VyLXdyYXBgfSByZWY9e3RyaWdnZXJSZWZ9PlxuICAgICAgICB7c2hvd09uSG92ZXIgPyAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19vbi1ob3Zlci13YXRjaGB9XG4gICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEFjdGl2ZSh0cnVlKX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0QWN0aXZlKGZhbHNlKX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge1RyaWdnZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgVHJpZ2dlclxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHttb3VudGVkXG4gICAgICAgID8gLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBvcHVwIGlzIHBhcnQgb2YgdGhlIERPTSAoYWx0aG91Z2ggaW52aXNpYmxlKSwgZXZlbiBpZiBpdCdzIG5vdCBhY3RpdmUuXG4gICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgY29tcG9uZW50cyB3aXRoaW4gdGhlIHBvcHVwLCBsaWtlIG1vZGFscywgZG8gbm90IHVubW91bnQgd2hlbiB0aGUgcG9wdXAgY2xvc2VzLlxuICAgICAgICAgIC8vIE90aGVyd2lzZSwgbW9kYWxzIG9wZW5lZCBmcm9tIHRoZSBwb3B1cCB3aWxsIGNsb3NlIHVuZXhwZWN0ZWRseSB3aGVuIGNsaWNraW5nIHdpdGhpbiB0aGUgbW9kYWwsIHNpbmNlXG4gICAgICAgICAgLy8gdGhhdCBjbG9zZXMgdGhlIHBvcHVwIGR1ZSB0byB0aGUgY2xpY2sgb3V0c2lkZSBoYW5kbGVyLlxuICAgICAgICAgIGNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgIGAke2Jhc2VDbGFzc31fX2NvbnRlbnRgLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2Jhc2VDbGFzc30tLXNpemUtJHtzaXplfWAsXG4gICAgICAgICAgICAgICAgICAgICAgaXNPblRvcCA/IGAke2Jhc2VDbGFzc30tLXYtdG9wYCA6IGAke2Jhc2VDbGFzc30tLXYtYm90dG9tYCxcbiAgICAgICAgICAgICAgICAgICAgICBwb3J0YWxDbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgICAgICAgOiAvLyBEbyBub3Qgc2hhcmUgYW55IGNsYXNzIG5hbWVzIGJldHdlZW4gYWN0aXZlIGFuZCBkaXNhYmxlZCBwb3B1cHMsIHRvIG1ha2Ugc3VyZVxuICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0cyBkbyBub3QgYWNjaWRlbnRhbGx5IHRhcmdldCBpbmFjdGl2ZSBwb3B1cHMuXG4gICAgICAgICAgICAgICAgICAgIGAke2Jhc2VDbGFzc31fX2hpZGRlbi1jb250ZW50YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRhdGEtcG9wdXAtaWQ9e2lkIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgcmVmPXtwb3B1cFJlZn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2Nyb2xsLWNvbnRhaW5lciR7c2hvd1Njcm9sbGJhciA/IGAgJHtiYXNlQ2xhc3N9X19zY3JvbGwtY29udGFpbmVyLS1zaG93LXNjcm9sbGJhcmAgOiAnJ31gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3JlbmRlcj8uKHsgY2xvc2U6ICgpID0+IHNldEFjdGl2ZShmYWxzZSkgfSl9XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge2NhcmV0ICYmIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jYXJldGB9IC8+fVxuICAgICAgICAgICAgPC9kaXY+LFxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keSxcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbi8qKlxuXG5Qb2x5ZmlsbCB0YWtlbiBhbmQgbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmx1ZXNreS1zb2NpYWwvc29jaWFsLWFwcC9ibG9iL2NlMGJmODY3ZmYzYjUwYTQ5NWQ4ZGIyNDJhN2Y1NTM3MWJmZmVhZGMvc3JjL2xpYi9ob29rcy91c2VOb25SZWFjdGl2ZUNhbGxiYWNrLnRzXG5cbkNvcHlyaWdodCAyMDIz4oCTMjAyNSBCbHVlc2t5IFBCQ1xuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIOKAnFNvZnR3YXJl4oCdKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQg4oCcQVMgSVPigJ0sIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkuIEl0IGVyYXNlcyByZWFjdGl2aXR5LCBpLmUuIHdoZW4gdGhlIGlucHV0c1xuLy8gY2hhbmdlLCB0aGUgZnVuY3Rpb24gaXRzZWxmIHdpbGwgcmVtYWluIHRoZSBzYW1lLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91XG4vLyB1c2UgdGhpcyBhdCBhIGhpZ2hlciBsZXZlbCBvZiB5b3VyIHRyZWUsIGFuZCB0aGVuIHNvbWUgc3RhdGUgeW91IHJlYWQgaW4gaXRcbi8vIGNoYW5nZXMsIHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgYW55dGhpbmcgYmVsb3cgaW4gdGhlIHRyZWUgdG8gXCJyZWFjdFwiXG4vLyB0byB0aGlzIGNoYW5nZSAoZS5nLiBieSBrbm93aW5nIHRvIGNhbGwgeW91ciBmdW5jdGlvbiBhZ2FpbikuXG4vL1xuLy8gQWxzbywgeW91IHNob3VsZCBhdm9pZCBjYWxsaW5nIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBkdXJpbmcgcmVuZGVyaW5nXG4vLyBzaW5jZSB0aGUgdmFsdWVzIGNhcHR1cmVkIGJ5IGl0IGFyZSBnb2luZyB0byBsYWcgYmVoaW5kLlxuXG5leHBvcnQgY29uc3QgdXNlRWZmZWN0RXZlbnQgPVxuICAndXNlRWZmZWN0RXZlbnQnIGluIFJlYWN0ICYmIHR5cGVvZiBSZWFjdC51c2VFZmZlY3RFdmVudCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gLy8gdXNlRWZmZWN0RXZlbnQgaXMgYXZhaWxhYmxlIGluIE5leHQuanMgMTYgLyBuZXdlciB2ZXJzaW9ucyBvZiBSZWFjdFxuICAgICAgUmVhY3QudXNlRWZmZWN0RXZlbnRcbiAgICA6IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGVcbiAgICAgIDxUIGV4dGVuZHMgRnVuY3Rpb24+KGZuOiBUKTogVCA9PiB7XG4gICAgICAgIC8vIHVzZUVmZmVjdEV2ZW50IGlzIG5vdCBhdmFpbGFibGUgaW4gb2xkZXIgdmVyc2lvbnMgb2YgUmVhY3QsIHNvIHdlIG5lZWQgdG8gcG9seWZpbGwgaXRcbiAgICAgICAgY29uc3QgcmVmID0gdXNlUmVmKGZuKVxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIHJlZi5jdXJyZW50ID0gZm5cbiAgICAgICAgfSwgW2ZuXSlcbiAgICAgICAgcmV0dXJuIHVzZUNhbGxiYWNrKCguLi5hcmdzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBsYXRlc3RGbiA9IHJlZi5jdXJyZW50XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdEZuKC4uLmFyZ3MpXG4gICAgICAgIH0sIFtdKSBhcyB1bmtub3duIGFzIFRcbiAgICAgIH1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3BvcHVwLWJ1dHRvbidcblxuZXhwb3J0IHR5cGUgUG9wdXBUcmlnZ2VyUHJvcHMgPSB7XG4gIGFjdGl2ZTogYm9vbGVhblxuICBidXR0b246IFJlYWN0LlJlYWN0Tm9kZVxuICBidXR0b25UeXBlOiAnY3VzdG9tJyB8ICdkZWZhdWx0JyB8ICdub25lJ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG5vQmFja2dyb3VuZD86IGJvb2xlYW5cbiAgc2V0QWN0aXZlOiAoYWN0aXZlOiBib29sZWFuLCB2aWFLZXlib2FyZD86IGJvb2xlYW4pID0+IHZvaWRcbiAgc2l6ZT86ICdsYXJnZScgfCAnbWVkaXVtJyB8ICdzbWFsbCcgfCAneHNtYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgUG9wdXBUcmlnZ2VyOiBSZWFjdC5GQzxQb3B1cFRyaWdnZXJQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBhY3RpdmUsIGJ1dHRvbiwgYnV0dG9uVHlwZSwgY2xhc3NOYW1lLCBkaXNhYmxlZCwgbm9CYWNrZ3JvdW5kLCBzZXRBY3RpdmUsIHNpemUgfSA9IHByb3BzXG5cbiAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICBiYXNlQ2xhc3MsXG4gICAgY2xhc3NOYW1lLFxuICAgIGAke2Jhc2VDbGFzc30tLSR7YnV0dG9uVHlwZX1gLFxuICAgICFub0JhY2tncm91bmQgJiYgYCR7YmFzZUNsYXNzfS0tYmFja2dyb3VuZGAsXG4gICAgc2l6ZSAmJiBgJHtiYXNlQ2xhc3N9LS1zaXplLSR7c2l6ZX1gLFxuICAgIGRpc2FibGVkICYmIGAke2Jhc2VDbGFzc30tLWRpc2FibGVkYCxcbiAgXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0QWN0aXZlKCFhY3RpdmUsIGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgc2V0QWN0aXZlKCFhY3RpdmUsIHRydWUpXG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1dHRvblR5cGUgPT09ICdub25lJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBpZiAoYnV0dG9uVHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgID5cbiAgICAgICAge2J1dHRvbn1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICB0YWJJbmRleD17MH1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIHtidXR0b259XG4gICAgPC9idXR0b24+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VJbnRlcnNlY3QgfSBmcm9tICcuLi8uLi9ob29rcy91c2VJbnRlcnNlY3QuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIGFsaWduQ2FyZXQ/OiAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCdcbiAgYm91bmRpbmdSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBkZWxheT86IG51bWJlclxuICBwb3NpdGlvbj86ICdib3R0b20nIHwgJ3RvcCdcbiAgc2hvdz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIElmIHRoZSB0b29sdGlwIHBvc2l0aW9uIHNob3VsZCBub3QgY2hhbmdlIGRlcGVuZGluZyBvbiBpZiB0aGUgdG9vbGJhciBpcyBvdXRzaWRlIHRoZSBib3VuZGluZ1JlZi4gQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHN0YXRpY1Bvc2l0aW9uaW5nPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgVG9vbHRpcDogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbkNhcmV0ID0gJ2NlbnRlcicsXG4gICAgYm91bmRpbmdSZWYsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRlbGF5ID0gMzUwLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbkZyb21Qcm9wcyxcbiAgICBzaG93OiBzaG93RnJvbVByb3BzID0gdHJ1ZSxcbiAgICBzdGF0aWNQb3NpdGlvbmluZyA9IGZhbHNlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbc2hvdywgc2V0U2hvd10gPSBSZWFjdC51c2VTdGF0ZShzaG93RnJvbVByb3BzKVxuICBjb25zdCBbcG9zaXRpb24sIHNldFBvc2l0aW9uXSA9IFJlYWN0LnVzZVN0YXRlPCdib3R0b20nIHwgJ3RvcCc+KCd0b3AnKVxuXG4gIGNvbnN0IGdldFRpdGxlQXR0cmlidXRlID0gKGNvbnRlbnQpID0+ICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgPyBjb250ZW50IDogJycpXG5cbiAgY29uc3QgW3JlZiwgaW50ZXJzZWN0aW9uRW50cnldID0gdXNlSW50ZXJzZWN0KFxuICAgIHtcbiAgICAgIHJvb3Q6IGJvdW5kaW5nUmVmPy5jdXJyZW50IHx8IG51bGwsXG4gICAgICByb290TWFyZ2luOiAnLTE0NXB4IDBweCAwcHggMTAwcHgnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgIH0sXG4gICAgc3RhdGljUG9zaXRpb25pbmcsXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCB0aW1lcklEOiBOb2RlSlMuVGltZW91dFxuXG4gICAgLy8gZG8gbm90IHVzZSB0aGUgZGVsYXkgb24gdHJhbnNpdGlvbi1vdXRcbiAgICBpZiAoZGVsYXkgJiYgc2hvd0Zyb21Qcm9wcykge1xuICAgICAgdGltZXJJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRTaG93KHNob3dGcm9tUHJvcHMpXG4gICAgICB9LCBkZWxheSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2hvdyhzaG93RnJvbVByb3BzKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodGltZXJJRCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJRClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzaG93RnJvbVByb3BzLCBkZWxheV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RhdGljUG9zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQb3NpdGlvbihpbnRlcnNlY3Rpb25FbnRyeT8uaXNJbnRlcnNlY3RpbmcgPyAndG9wJyA6ICdib3R0b20nKVxuICB9LCBbaW50ZXJzZWN0aW9uRW50cnksIHN0YXRpY1Bvc2l0aW9uaW5nXSlcblxuICAvLyBUaGUgZmlyc3QgYXNpZGUgaXMgYWx3YXlzIG9uIHRvcC4gVGhlIHB1cnBvc2Ugb2YgdGhhdCBpcyB0aGF0IGl0IGNhbiByZWxpYWJseSBiZSB1c2VkIGZvciB0aGUgaW50ZXJhY3Rpb24gb2JzZXJ2ZXIgKGFzIGl0J3Mgbm90IG1vdmluZyBhcm91bmQpLCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBhY3R1YWwgdG9vbHRpcC5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7IXN0YXRpY1Bvc2l0aW9uaW5nICYmIChcbiAgICAgICAgPGFzaWRlXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzc05hbWU9e1sndG9vbHRpcCcsIGNsYXNzTmFtZSwgYHRvb2x0aXAtLWNhcmV0LSR7YWxpZ25DYXJldH1gLCAndG9vbHRpcC0tcG9zaXRpb24tdG9wJ11cbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgICAgc3R5bGU9e3sgb3BhY2l0eTogJzAnIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRvb2x0aXAtY29udGVudFwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgICl9XG4gICAgICA8YXNpZGVcbiAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBzaG93ICYmICd0b29sdGlwLS1zaG93JyxcbiAgICAgICAgICBgdG9vbHRpcC0tY2FyZXQtJHthbGlnbkNhcmV0fWAsXG4gICAgICAgICAgYHRvb2x0aXAtLXBvc2l0aW9uLSR7cG9zaXRpb25Gcm9tUHJvcHMgfHwgcG9zaXRpb259YCxcbiAgICAgICAgXVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICB0aXRsZT17Z2V0VGl0bGVBdHRyaWJ1dGUoY2hpbGRyZW4pfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRvb2x0aXAtY29udGVudFwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICAgIDwvYXNpZGU+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxudHlwZSBJbnRlcnNlY3QgPSBbXG4gIHNldE5vZGU6IFJlYWN0LkRpc3BhdGNoPEhUTUxFbGVtZW50PixcbiAgZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnksXG4gIG5vZGU6IEhUTUxFbGVtZW50LFxuXVxuXG5leHBvcnQgY29uc3QgdXNlSW50ZXJzZWN0ID0gKFxuICB7IHJvb3QgPSBudWxsLCByb290TWFyZ2luID0gJzBweCcsIHRocmVzaG9sZCA9IDAgfSA9IHt9LFxuICBkaXNhYmxlPzogYm9vbGVhbixcbik6IEludGVyc2VjdCA9PiB7XG4gIGNvbnN0IFtlbnRyeSwgdXBkYXRlRW50cnldID0gdXNlU3RhdGU8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeT4oKVxuICBjb25zdCBbbm9kZSwgc2V0Tm9kZV0gPSB1c2VTdGF0ZShudWxsKVxuXG4gIGNvbnN0IG9ic2VydmVyID0gdXNlUmVmKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93ICYmICFkaXNhYmxlXG4gICAgICA/IG5ldyB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKFtlbnRdKSA9PiB1cGRhdGVFbnRyeShlbnQpLCB7XG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICByb290TWFyZ2luLFxuICAgICAgICAgIHRocmVzaG9sZCxcbiAgICAgICAgfSlcbiAgICAgIDogbnVsbCxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCB7IGN1cnJlbnQ6IGN1cnJlbnRPYnNlcnZlciB9ID0gb2JzZXJ2ZXJcbiAgICBjdXJyZW50T2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgY3VycmVudE9ic2VydmVyLm9ic2VydmUobm9kZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4gY3VycmVudE9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICB9LCBbbm9kZSwgZGlzYWJsZV0pXG5cbiAgcmV0dXJuIFtzZXROb2RlLCBlbnRyeSwgbm9kZV1cbn1cbiIsImltcG9ydCB0eXBlIHsgQ2xpZW50QmxvY2ssIENsaWVudEZpZWxkIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgZmllbGRIYXNTdWJGaWVsZHMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcblxuaW1wb3J0IHR5cGUgeyBDbGlwYm9hcmRQYXN0ZUFjdGlvblZhbGlkYXRlQXJncyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbi8qKlxuICogVmFsaWRhdGVzIHdoZXRoZXIgY2xpcGJvYXJkIGRhdGEgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2NoZW1hLlxuICogRm9yIHRoaXMgdG8gYmUgdHJ1ZSwgdGhlIGNvcGllZCBmaWVsZCBhbmQgdGhlIHRhcmdldCB0byBiZSBwYXN0ZWQgbXVzdFxuICogYmUgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgKHNhbWUgc2NoZW1hKVxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNsaXBib2FyZCBkYXRhIGlzIHZhbGlkIGFuZCBjYW4gYmUgcGFzdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xpcGJvYXJkRGF0YVZhbGlkKHsgZGF0YSwgcGF0aCwgLi4uYXJncyB9OiBDbGlwYm9hcmRQYXN0ZUFjdGlvblZhbGlkYXRlQXJncykge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnIHx8ICFwYXRoIHx8ICFhcmdzLnR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChhcmdzLnR5cGUgPT09ICdibG9ja3MnKSB7XG4gICAgcmV0dXJuIGlzQ2xpcGJvYXJkQmxvY2tzVmFsaWQoe1xuICAgICAgYmxvY2tzRnJvbUNsaXBib2FyZDogYXJncy5ibG9ja3MsXG4gICAgICBibG9ja3NGcm9tQ29uZmlnOiBhcmdzLnNjaGVtYUJsb2NrcyxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBpc0NsaXBib2FyZEZpZWxkc1ZhbGlkKHtcbiAgICAgIGZpZWxkc0Zyb21DbGlwYm9hcmQ6IGFyZ3MuZmllbGRzLFxuICAgICAgZmllbGRzRnJvbUNvbmZpZzogYXJncy5zY2hlbWFGaWVsZHMsXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NsaXBib2FyZEZpZWxkc1ZhbGlkKHtcbiAgZmllbGRzRnJvbUNsaXBib2FyZCxcbiAgZmllbGRzRnJvbUNvbmZpZyxcbn06IHtcbiAgZmllbGRzRnJvbUNsaXBib2FyZDogQ2xpZW50RmllbGRbXVxuICBmaWVsZHNGcm9tQ29uZmlnPzogQ2xpZW50RmllbGRbXVxufSk6IGJvb2xlYW4ge1xuICBpZiAoIWZpZWxkc0Zyb21Db25maWcgfHwgZmllbGRzRnJvbUNsaXBib2FyZC5sZW5ndGggIT09IGZpZWxkc0Zyb21Db25maWc/Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGZpZWxkc0Zyb21DbGlwYm9hcmQuZXZlcnkoKGNsaXBib2FyZEZpZWxkLCBpKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmllbGQgPSBmaWVsZHNGcm9tQ29uZmlnW2ldXG5cbiAgICBpZiAoY2xpcGJvYXJkRmllbGQudHlwZSAhPT0gY29uZmlnRmllbGQudHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgYWZmZWN0c0RhdGEgPSBmaWVsZEFmZmVjdHNEYXRhKGNsaXBib2FyZEZpZWxkKSAmJiBmaWVsZEFmZmVjdHNEYXRhKGNvbmZpZ0ZpZWxkKVxuICAgIGlmIChhZmZlY3RzRGF0YSAmJiBjbGlwYm9hcmRGaWVsZC5uYW1lICE9PSBjb25maWdGaWVsZC5uYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBoYXNOZXN0ZWRGaWVsZHNDb25maWcgPSBmaWVsZEhhc1N1YkZpZWxkcyhjb25maWdGaWVsZClcbiAgICBjb25zdCBoYXNOZXN0ZWRGaWVsZHNDbGlwYm9hcmQgPSBmaWVsZEhhc1N1YkZpZWxkcyhjbGlwYm9hcmRGaWVsZClcbiAgICBpZiAoaGFzTmVzdGVkRmllbGRzQ2xpcGJvYXJkICE9PSBoYXNOZXN0ZWRGaWVsZHNDb25maWcpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChoYXNOZXN0ZWRGaWVsZHNDbGlwYm9hcmQgJiYgaGFzTmVzdGVkRmllbGRzQ29uZmlnKSB7XG4gICAgICByZXR1cm4gaXNDbGlwYm9hcmRGaWVsZHNWYWxpZCh7XG4gICAgICAgIGZpZWxkc0Zyb21DbGlwYm9hcmQ6IGNsaXBib2FyZEZpZWxkLmZpZWxkcyxcbiAgICAgICAgZmllbGRzRnJvbUNvbmZpZzogY29uZmlnRmllbGQuZmllbGRzLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxufVxuXG5mdW5jdGlvbiBpc0NsaXBib2FyZEJsb2Nrc1ZhbGlkKHtcbiAgYmxvY2tzRnJvbUNsaXBib2FyZCxcbiAgYmxvY2tzRnJvbUNvbmZpZyxcbn06IHtcbiAgYmxvY2tzRnJvbUNsaXBib2FyZDogQ2xpZW50QmxvY2tbXVxuICBibG9ja3NGcm9tQ29uZmlnPzogQ2xpZW50QmxvY2tbXVxufSkge1xuICBjb25zdCBjb25maWdCbG9ja01hcCA9IG5ldyBNYXAoYmxvY2tzRnJvbUNvbmZpZz8ubWFwKChibG9jaykgPT4gW2Jsb2NrLnNsdWcsIGJsb2NrXSkpXG5cbiAgaWYgKCFjb25maWdCbG9ja01hcC5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBjaGVja2VkU2x1Z3MgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gIGZvciAoY29uc3QgY3VyckJsb2NrIG9mIGJsb2Nrc0Zyb21DbGlwYm9hcmQpIHtcbiAgICBjb25zdCBjdXJyU2x1ZyA9IGN1cnJCbG9jay5zbHVnXG5cbiAgICBpZiAoIWNoZWNrZWRTbHVncy5oYXMoY3VyclNsdWcpKSB7XG4gICAgICBjb25zdCBjb25maWdCbG9jayA9IGNvbmZpZ0Jsb2NrTWFwLmdldChjdXJyU2x1ZylcbiAgICAgIGlmICghY29uZmlnQmxvY2spIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWlzQ2xpcGJvYXJkRmllbGRzVmFsaWQoe1xuICAgICAgICAgIGZpZWxkc0Zyb21DbGlwYm9hcmQ6IGN1cnJCbG9jay5maWVsZHMsXG4gICAgICAgICAgZmllbGRzRnJvbUNvbmZpZzogY29uZmlnQmxvY2suZmllbGRzLFxuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjaGVja2VkU2x1Z3MuYWRkKGN1cnJTbHVnKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuIiwiaW1wb3J0IHR5cGUge1xuICBDbGlwYm9hcmRDb3B5QWN0aW9uQXJncyxcbiAgQ2xpcGJvYXJkUGFzdGVBY3Rpb25BcmdzLFxuICBDbGlwYm9hcmRQYXN0ZUFjdGlvblZhbGlkYXRlQXJncyxcbiAgQ2xpcGJvYXJkUGFzdGVEYXRhLFxufSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBpc0NsaXBib2FyZERhdGFWYWxpZCB9IGZyb20gJy4vaXNDbGlwYm9hcmREYXRhVmFsaWQuanMnXG5cbmNvbnN0IGxvY2FsU3RvcmFnZUNsaXBib2FyZEtleSA9ICdfcGF5bG9hZENsaXBib2FyZCdcblxuLyoqXG4gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdXNlIHRoZSBDbGlwYm9hcmQgQVBJLCBidXQgbG9jYWxTdG9yYWdlLiBTZWUgcmF0aW9uYWxlIGluICMxMTUxM1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xpcGJvYXJkQ29weShhcmdzOiBDbGlwYm9hcmRDb3B5QWN0aW9uQXJncyk6IHN0cmluZyB8IHRydWUge1xuICBjb25zdCB7IGdldERhdGFUb0NvcHksIHQsIC4uLnJlc3QgfSA9IGFyZ3NcblxuICBjb25zdCBkYXRhVG9Xcml0ZSA9IHtcbiAgICBkYXRhOiBnZXREYXRhVG9Db3B5KCksXG4gICAgLi4ucmVzdCxcbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obG9jYWxTdG9yYWdlQ2xpcGJvYXJkS2V5LCBKU09OLnN0cmluZ2lmeShkYXRhVG9Xcml0ZSkpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoX2Vycikge1xuICAgIHJldHVybiB0KCdlcnJvcjp1bmFibGVUb0NvcHknKVxuICB9XG59XG5cbi8qKlxuICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHVzZSB0aGUgQ2xpcGJvYXJkIEFQSSwgYnV0IGxvY2FsU3RvcmFnZS4gU2VlIHJhdGlvbmFsZSBpbiAjMTE1MTNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsaXBib2FyZFBhc3RlKHtcbiAgb25QYXN0ZSxcbiAgcGF0aDogZmllbGRQYXRoLFxuICB0LFxuICAuLi5hcmdzXG59OiBDbGlwYm9hcmRQYXN0ZUFjdGlvbkFyZ3MpOiBzdHJpbmcgfCB0cnVlIHtcbiAgbGV0IGRhdGFUb1Bhc3RlOiBDbGlwYm9hcmRQYXN0ZURhdGFcblxuICB0cnkge1xuICAgIGNvbnN0IGpzb25Gcm9tQ2xpcGJvYXJkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obG9jYWxTdG9yYWdlQ2xpcGJvYXJkS2V5KVxuXG4gICAgaWYgKCFqc29uRnJvbUNsaXBib2FyZCkge1xuICAgICAgcmV0dXJuIHQoJ2Vycm9yOmludmFsaWRDbGlwYm9hcmREYXRhJylcbiAgICB9XG5cbiAgICBkYXRhVG9QYXN0ZSA9IEpTT04ucGFyc2UoanNvbkZyb21DbGlwYm9hcmQpXG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICByZXR1cm4gdCgnZXJyb3I6aW52YWxpZENsaXBib2FyZERhdGEnKVxuICB9XG5cbiAgY29uc3QgZGF0YVRvVmFsaWRhdGUgPSB7XG4gICAgLi4uZGF0YVRvUGFzdGUsXG4gICAgLi4uYXJncyxcbiAgICBmaWVsZFBhdGgsXG4gIH0gYXMgQ2xpcGJvYXJkUGFzdGVBY3Rpb25WYWxpZGF0ZUFyZ3NcblxuICBpZiAoIWlzQ2xpcGJvYXJkRGF0YVZhbGlkKGRhdGFUb1ZhbGlkYXRlKSkge1xuICAgIHJldHVybiB0KCdlcnJvcjppbnZhbGlkQ2xpcGJvYXJkRGF0YScpXG4gIH1cblxuICBvblBhc3RlKGRhdGFUb1Bhc3RlKVxuXG4gIHJldHVybiB0cnVlXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBGb3JtU3RhdGVXaXRob3V0Q29tcG9uZW50cyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHR5cGUgRkMsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHR5cGUgeyBDbGlwYm9hcmRDb3B5RGF0YSwgT25QYXN0ZUZuIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgTW9yZUljb24gfSBmcm9tICcuLi8uLi9pY29ucy9Nb3JlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBQb3B1cCwgUG9wdXBMaXN0IH0gZnJvbSAnLi4vUG9wdXAvaW5kZXguanMnXG5pbXBvcnQgeyBDbGlwYm9hcmRBY3Rpb25MYWJlbCB9IGZyb20gJy4vQ2xpcGJvYXJkQWN0aW9uTGFiZWwuanMnXG5pbXBvcnQgeyBjbGlwYm9hcmRDb3B5LCBjbGlwYm9hcmRQYXN0ZSB9IGZyb20gJy4vY2xpcGJvYXJkVXRpbGl0aWVzLmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY2xpcGJvYXJkLWFjdGlvbidcblxudHlwZSBQcm9wcyA9IHtcbiAgYWxsb3dDb3B5PzogYm9vbGVhblxuICBhbGxvd1Bhc3RlPzogYm9vbGVhblxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY29weUNsYXNzTmFtZT86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgZ2V0RGF0YVRvQ29weTogKCkgPT4gRm9ybVN0YXRlV2l0aG91dENvbXBvbmVudHNcbiAgaXNSb3c/OiBib29sZWFuXG4gIG9uUGFzdGU6IE9uUGFzdGVGblxuICBwYXN0ZUNsYXNzTmFtZT86IHN0cmluZ1xufSAmIENsaXBib2FyZENvcHlEYXRhXG5cbi8qKlxuICogTWVudSBhY3Rpb25zIGZvciBjb3B5aW5nIGFuZCBwYXN0aW5nIGZpZWxkcy4gQ3VycmVudGx5LCB0aGlzIGlzIG9ubHkgdXNlZCBpbiBBcnJheXMgYW5kIEJsb2Nrcy5cbiAqIEBub3RlIFRoaXMgY29tcG9uZW50IGRvZXNuJ3QgdXNlIHRoZSBDbGlwYm9hcmQgQVBJLCBidXQgbG9jYWxTdG9yYWdlLiBTZWUgcmF0aW9uYWxlIGluICMxMTUxM1xuICovXG5leHBvcnQgY29uc3QgQ2xpcGJvYXJkQWN0aW9uOiBGQzxQcm9wcz4gPSAoe1xuICBhbGxvd0NvcHksXG4gIGFsbG93UGFzdGUsXG4gIGNsYXNzTmFtZSxcbiAgY29weUNsYXNzTmFtZSxcbiAgZGlzYWJsZWQsXG4gIGlzUm93LFxuICBvblBhc3RlLFxuICBwYXN0ZUNsYXNzTmFtZSxcbiAgcGF0aCxcbiAgLi4ucmVzdFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBjbGFzc2VzID0gW2Ake2Jhc2VDbGFzc31fX3BvcHVwYCwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpXG5cbiAgY29uc3QgaGFuZGxlQ29weSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjbGlwYm9hcmRSZXN1bHQgPSBjbGlwYm9hcmRDb3B5KHtcbiAgICAgIHBhdGgsXG4gICAgICB0LFxuICAgICAgLi4ucmVzdCxcbiAgICB9KVxuXG4gICAgaWYgKHR5cGVvZiBjbGlwYm9hcmRSZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0b2FzdC5lcnJvcihjbGlwYm9hcmRSZXN1bHQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRvYXN0LnN1Y2Nlc3ModCgnZ2VuZXJhbDpjb3BpZWQnKSlcbiAgICB9XG4gIH0sIFt0LCByZXN0LCBwYXRoXSlcblxuICBjb25zdCBoYW5kbGVQYXN0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjbGlwYm9hcmRSZXN1bHQgPSBjbGlwYm9hcmRQYXN0ZShcbiAgICAgIHJlc3QudHlwZSA9PT0gJ2FycmF5J1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIG9uUGFzdGUsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgc2NoZW1hRmllbGRzOiByZXN0LmZpZWxkcyxcbiAgICAgICAgICAgIHQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG9uUGFzdGUsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgc2NoZW1hQmxvY2tzOiByZXN0LmJsb2NrcyxcbiAgICAgICAgICAgIHQsXG4gICAgICAgICAgfSxcbiAgICApXG5cbiAgICBpZiAodHlwZW9mIGNsaXBib2FyZFJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRvYXN0LmVycm9yKGNsaXBib2FyZFJlc3VsdClcbiAgICB9XG4gIH0sIFtvblBhc3RlLCByZXN0LCBwYXRoLCB0XSlcblxuICBpZiAoIWFsbG93UGFzdGUgJiYgIWFsbG93Q29weSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQb3B1cFxuICAgICAgYnV0dG9uPXs8TW9yZUljb24gLz59XG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBob3Jpem9udGFsQWxpZ249XCJjZW50ZXJcIlxuICAgICAgcmVuZGVyPXsoeyBjbG9zZSB9KSA9PiAoXG4gICAgICAgIDxQb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y29weUNsYXNzTmFtZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshYWxsb3dDb3B5fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICB2b2lkIGhhbmRsZUNvcHkoKVxuICAgICAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDbGlwYm9hcmRBY3Rpb25MYWJlbCBpc1Jvdz17aXNSb3d9IC8+XG4gICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9e3Bhc3RlQ2xhc3NOYW1lfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFhbGxvd1Bhc3RlfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICB2b2lkIGhhbmRsZVBhc3RlKClcbiAgICAgICAgICAgICAgY2xvc2UoKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2xpcGJvYXJkQWN0aW9uTGFiZWwgaXNQYXN0ZSBpc1Jvdz17aXNSb3d9IC8+XG4gICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICl9XG4gICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgdmVydGljYWxBbGlnbj1cImJvdHRvbVwiXG4gICAgLz5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IE1vcmVJY29uOiBSZWFjdC5GQzx7IGNsYXNzTmFtZT86IHN0cmluZyB9PiA9ICh7IGNsYXNzTmFtZSB9KSA9PiAoXG4gIDxzdmdcbiAgICBjbGFzc05hbWU9e1snaWNvbiBpY29uLS1tb3JlJywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICA+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cImZpbGxcIlxuICAgICAgZD1cIk0xMCAxMC42NjY2QzEwLjM2ODIgMTAuNjY2NiAxMC42NjY3IDEwLjM2ODIgMTAuNjY2NyA5Ljk5OTk4QzEwLjY2NjcgOS42MzE3OSAxMC4zNjgyIDkuMzMzMzEgMTAgOS4zMzMzMUM5LjYzMTgyIDkuMzMzMzEgOS4zMzMzNCA5LjYzMTc5IDkuMzMzMzQgOS45OTk5OEM5LjMzMzM0IDEwLjM2ODIgOS42MzE4MiAxMC42NjY2IDEwIDEwLjY2NjZaXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cImZpbGxcIlxuICAgICAgZD1cIk0xNC42NjY3IDEwLjY2NjZDMTUuMDM0OSAxMC42NjY2IDE1LjMzMzMgMTAuMzY4MiAxNS4zMzMzIDkuOTk5OThDMTUuMzMzMyA5LjYzMTc5IDE1LjAzNDkgOS4zMzMzMSAxNC42NjY3IDkuMzMzMzFDMTQuMjk4NSA5LjMzMzMxIDE0IDkuNjMxNzkgMTQgOS45OTk5OEMxNCAxMC4zNjgyIDE0LjI5ODUgMTAuNjY2NiAxNC42NjY3IDEwLjY2NjZaXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cImZpbGxcIlxuICAgICAgZD1cIk01LjMzMzM0IDEwLjY2NjZDNS43MDE1MyAxMC42NjY2IDYuMDAwMDEgMTAuMzY4MiA2LjAwMDAxIDkuOTk5OThDNi4wMDAwMSA5LjYzMTc5IDUuNzAxNTMgOS4zMzMzMSA1LjMzMzM0IDkuMzMzMzFDNC45NjUxNSA5LjMzMzMxIDQuNjY2NjcgOS42MzE3OSA0LjY2NjY3IDkuOTk5OThDNC42NjY2NyAxMC4zNjgyIDQuOTY1MTUgMTAuNjY2NiA1LjMzMzM0IDEwLjY2NjZaXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENvcHlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvQ29weS9pbmRleC5qcydcbmltcG9ydCB7IEVkaXRJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvRWRpdC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgY29uc3QgQ2xpcGJvYXJkQWN0aW9uTGFiZWwgPSAoe1xuICBpc1Bhc3RlLFxuICBpc1Jvdyxcbn06IHtcbiAgaXNQYXN0ZT86IGJvb2xlYW5cbiAgaXNSb3c/OiBib29sZWFuXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGxldCBsYWJlbCA9IHQoJ2dlbmVyYWw6Y29weUZpZWxkJylcbiAgaWYgKCFpc1JvdyAmJiBpc1Bhc3RlKSB7XG4gICAgbGFiZWwgPSB0KCdnZW5lcmFsOnBhc3RlRmllbGQnKVxuICB9IGVsc2UgaWYgKGlzUm93ICYmICFpc1Bhc3RlKSB7XG4gICAgbGFiZWwgPSB0KCdnZW5lcmFsOmNvcHlSb3cnKVxuICB9IGVsc2UgaWYgKGlzUm93ICYmIGlzUGFzdGUpIHtcbiAgICBsYWJlbCA9IHQoJ2dlbmVyYWw6cGFzdGVSb3cnKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICB7aXNQYXN0ZSA/IDxFZGl0SWNvbiAvPiA6IDxDb3B5SWNvbiAvPn0ge2xhYmVsfVxuICAgIDwvRnJhZ21lbnQ+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBDb3B5SWNvbjogUmVhY3QuRkMgPSAoKSA9PiAoXG4gIC8vIDxzdmcgY2xhc3NOYW1lPVwiaWNvbiBpY29uLS1jb3B5XCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgLy8gICA8cmVjdCBjbGFzc05hbWU9XCJzdHJva2VcIiBoZWlnaHQ9XCI4XCIgd2lkdGg9XCI4XCIgeD1cIjYuNVwiIHk9XCIxMFwiIC8+XG4gIC8vICAgPHBhdGggY2xhc3NOYW1lPVwic3Ryb2tlXCIgZD1cIk0xMCA5Ljk4NDM4VjYuNUgxOFYxNC41SDE0XCIgLz5cbiAgLy8gPC9zdmc+XG4gIDxzdmcgY2xhc3NOYW1lPVwiaWNvbiBpY29uLS1jb3B5XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwic3Ryb2tlXCJcbiAgICAgIGQ9XCJNNC42NjY2NiAxMi42NjY3QzMuOTMzMzMgMTIuNjY2NyAzLjMzMzMzIDEyLjA2NjcgMy4zMzMzMyAxMS4zMzMzVjQuNjY2NjhDMy4zMzMzMyAzLjkzMzM0IDMuOTMzMzMgMy4zMzMzNCA0LjY2NjY2IDMuMzMzMzRIMTEuMzMzM0MxMi4wNjY3IDMuMzMzMzQgMTIuNjY2NyAzLjkzMzM0IDEyLjY2NjcgNC42NjY2OE04LjY2NjY2IDcuMzMzMzRIMTUuMzMzM0MxNi4wNjk3IDcuMzMzMzQgMTYuNjY2NyA3LjkzMDMgMTYuNjY2NyA4LjY2NjY4VjE1LjMzMzNDMTYuNjY2NyAxNi4wNjk3IDE2LjA2OTcgMTYuNjY2NyAxNS4zMzMzIDE2LjY2NjdIOC42NjY2NkM3LjkzMDI4IDE2LjY2NjcgNy4zMzMzMyAxNi4wNjk3IDcuMzMzMzMgMTUuMzMzM1Y4LjY2NjY4QzcuMzMzMzMgNy45MzAzIDcuOTMwMjggNy4zMzMzNCA4LjY2NjY2IDcuMzMzMzRaXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuIiwiaW1wb3J0IHR5cGUgeyBGaWVsZFN0YXRlLCBGb3JtU3RhdGUgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgT2JqZWN0SWRJbXBvcnQgZnJvbSAnYnNvbi1vYmplY3RpZCdcblxuaW1wb3J0IHR5cGUgeyBDbGlwYm9hcmRQYXN0ZURhdGEgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5jb25zdCBPYmplY3RJZCA9ICdkZWZhdWx0JyBpbiBPYmplY3RJZEltcG9ydCA/IE9iamVjdElkSW1wb3J0LmRlZmF1bHQgOiBPYmplY3RJZEltcG9ydFxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRm9ybVN0YXRlQnlQYXRoKHtcbiAgZm9ybVN0YXRlLFxuICBwYXRoLFxuICByb3dJbmRleCxcbn06IHtcbiAgZm9ybVN0YXRlOiBGb3JtU3RhdGVcbiAgcGF0aDogc3RyaW5nXG4gIHJvd0luZGV4PzogbnVtYmVyXG59KSB7XG4gIGNvbnN0IGZpbHRlcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIEZpZWxkU3RhdGU+ID0ge31cbiAgY29uc3QgcHJlZml4ID0gdHlwZW9mIHJvd0luZGV4ICE9PSAnbnVtYmVyJyA/IHBhdGggOiBgJHtwYXRofS4ke3Jvd0luZGV4fWBcblxuICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtU3RhdGUpIHtcbiAgICBpZiAoIWtleS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgeyBjdXN0b21Db21wb25lbnRzOiBfLCB2YWxpZGF0ZTogX18sIC4uLmZpZWxkIH0gPSBmb3JtU3RhdGVba2V5XVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucm93cykpIHtcbiAgICAgIGZpZWxkLnJvd3MgPSBmaWVsZC5yb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGlmICghcm93IHx8IHR5cGVvZiByb3cgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcmV0dXJuIHJvd1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgY3VzdG9tQ29tcG9uZW50czogXywgLi4uc2VyaWFsaXphYmxlUm93IH0gPSByb3dcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6YWJsZVJvd1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBmaWx0ZXJlZFN0YXRlW2tleV0gPSBmaWVsZFxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkU3RhdGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRm9ybVN0YXRlRnJvbUNsaXBib2FyZCh7XG4gIGRhdGFGcm9tQ2xpcGJvYXJkOiBjbGlwYm9hcmREYXRhLFxuICBmb3JtU3RhdGUsXG4gIHBhdGgsXG4gIHJvd0luZGV4LFxufToge1xuICBkYXRhRnJvbUNsaXBib2FyZDogQ2xpcGJvYXJkUGFzdGVEYXRhXG4gIGZvcm1TdGF0ZTogRm9ybVN0YXRlXG4gIHBhdGg6IHN0cmluZ1xuICByb3dJbmRleD86IG51bWJlclxufSkge1xuICBjb25zdCB7XG4gICAgdHlwZTogdHlwZUZyb21DbGlwYm9hcmQsXG4gICAgZGF0YTogZGF0YUZyb21DbGlwYm9hcmQsXG4gICAgcGF0aDogcGF0aEZyb21DbGlwYm9hcmQsXG4gICAgcm93SW5kZXg6IHJvd0luZGV4RnJvbUNsaXBib2FyZCxcbiAgfSA9IGNsaXBib2FyZERhdGFcblxuICBjb25zdCBjb3B5RnJvbUZpZWxkID0gdHlwZW9mIHJvd0luZGV4RnJvbUNsaXBib2FyZCAhPT0gJ251bWJlcidcbiAgY29uc3QgcGFzdGVJbnRvRmllbGQgPSB0eXBlb2Ygcm93SW5kZXggIT09ICdudW1iZXInXG4gIGNvbnN0IGZyb21Sb3dUb0ZpZWxkID0gIWNvcHlGcm9tRmllbGQgJiYgcGFzdGVJbnRvRmllbGRcbiAgY29uc3QgaXNBcnJheSA9IHR5cGVGcm9tQ2xpcGJvYXJkID09PSAnYXJyYXknXG5cbiAgbGV0IHBhdGhUb1JlcGxhY2U6IHN0cmluZ1xuICBpZiAoY29weUZyb21GaWVsZCAmJiBwYXN0ZUludG9GaWVsZCkge1xuICAgIHBhdGhUb1JlcGxhY2UgPSBwYXRoRnJvbUNsaXBib2FyZFxuICB9IGVsc2UgaWYgKGNvcHlGcm9tRmllbGQpIHtcbiAgICBwYXRoVG9SZXBsYWNlID0gYCR7cGF0aEZyb21DbGlwYm9hcmR9LiR7cm93SW5kZXh9YFxuICB9IGVsc2Uge1xuICAgIHBhdGhUb1JlcGxhY2UgPSBgJHtwYXRoRnJvbUNsaXBib2FyZH0uJHtyb3dJbmRleEZyb21DbGlwYm9hcmR9YFxuICB9XG5cbiAgbGV0IHRhcmdldFNlZ21lbnQ6IHN0cmluZ1xuICBpZiAoIXBhc3RlSW50b0ZpZWxkKSB7XG4gICAgdGFyZ2V0U2VnbWVudCA9IGAke3BhdGh9LiR7cm93SW5kZXh9YFxuICB9IGVsc2UgaWYgKGZyb21Sb3dUb0ZpZWxkKSB7XG4gICAgdGFyZ2V0U2VnbWVudCA9IGAke3BhdGh9LjBgXG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0U2VnbWVudCA9IHBhdGhcbiAgfVxuXG4gIGlmIChmcm9tUm93VG9GaWVsZCkge1xuICAgIGNvbnN0IGxhc3RSZW5kZXJlZFBhdGggPSBgJHtwYXRofS4wYFxuICAgIGNvbnN0IHJvd0lERnJvbUNsaXBib2FyZCA9IGRhdGFGcm9tQ2xpcGJvYXJkW2Ake3BhdGhUb1JlcGxhY2V9LmlkYF0/LnZhbHVlIGFzIHN0cmluZ1xuICAgIGNvbnN0IGhhc1Jvd3MgPSBmb3JtU3RhdGVbcGF0aF0ucm93cz8ubGVuZ3RoXG5cbiAgICBmb3JtU3RhdGVbcGF0aF0ucm93cyA9IFtcbiAgICAgIHtcbiAgICAgICAgLi4uKGhhc1Jvd3MgJiYgaXNBcnJheSA/IGZvcm1TdGF0ZVtwYXRoXS5yb3dzWzBdIDoge30pLFxuICAgICAgICBpZDogcm93SURGcm9tQ2xpcGJvYXJkLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsYXN0UmVuZGVyZWRQYXRoLFxuICAgICAgfSxcbiAgICBdXG4gICAgZm9ybVN0YXRlW3BhdGhdLnZhbHVlID0gMVxuICAgIGZvcm1TdGF0ZVtwYXRoXS5pbml0aWFsVmFsdWUgPSAxXG4gICAgZm9ybVN0YXRlW3BhdGhdLmRpc2FibGVGb3JtRGF0YSA9IHRydWVcblxuICAgIGZvciAoY29uc3QgZmllbGRQYXRoIGluIGZvcm1TdGF0ZSkge1xuICAgICAgaWYgKFxuICAgICAgICBmaWVsZFBhdGggIT09IHBhdGggJiZcbiAgICAgICAgIWZpZWxkUGF0aC5zdGFydHNXaXRoKGxhc3RSZW5kZXJlZFBhdGgpICYmXG4gICAgICAgIGZpZWxkUGF0aC5zdGFydHNXaXRoKHBhdGgpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIGZvcm1TdGF0ZVtmaWVsZFBhdGhdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWFwIHRvIHRyYWNrIG9sZCBJRHMgdG8gbmV3IElEcyBmb3IgcmVnZW5lcmF0aW5nIG5lc3RlZCBJRHNcbiAgY29uc3QgaWRSZXBsYWNlbWVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IGNsaXBib2FyZFBhdGggaW4gZGF0YUZyb21DbGlwYm9hcmQpIHtcbiAgICAvLyBXaGVuIHBhc3RpbmcgaW50byBhIHNwZWNpZmljIHJvdywgc2tpcCBvbmx5IHRoZSBkaXJlY3Qgcm93IElEIHRvIGF2b2lkIG92ZXJ3cml0aW5nXG4gICAgLy8gdGhlIHRhcmdldCByb3cncyBpZGVudGl0eS4gTmVzdGVkIElEcyAoYXJyYXkgaXRlbSBJRHMgd2l0aGluIHRoZSBibG9jaykgc2hvdWxkXG4gICAgLy8gc3RpbGwgYmUgcHJvY2Vzc2VkIHNvIHRoZXkgZ2V0IHJlZ2VuZXJhdGVkIGJlbG93LCBwcmV2ZW50aW5nIHNlcnZlci1zaWRlIGR1cGxpY2F0aW9uLlxuICAgIGlmIChcbiAgICAgICghcGFzdGVJbnRvRmllbGQgJiYgY2xpcGJvYXJkUGF0aCA9PT0gYCR7cGF0aFRvUmVwbGFjZX0uaWRgKSB8fFxuICAgICAgIWNsaXBib2FyZFBhdGguc3RhcnRzV2l0aChwYXRoVG9SZXBsYWNlKVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYXRoID0gY2xpcGJvYXJkUGF0aC5yZXBsYWNlKHBhdGhUb1JlcGxhY2UsIHRhcmdldFNlZ21lbnQpXG5cbiAgICBjb25zdCBjdXN0b21Db21wb25lbnRzID0gaXNBcnJheSA/IGZvcm1TdGF0ZVtuZXdQYXRoXT8uY3VzdG9tQ29tcG9uZW50cyA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHZhbGlkYXRlID0gaXNBcnJheSA/IGZvcm1TdGF0ZVtuZXdQYXRoXT8udmFsaWRhdGUgOiB1bmRlZmluZWRcblxuICAgIC8vIElmIHRoaXMgaXMgYW4gSUQgZmllbGQsIGdlbmVyYXRlIGEgbmV3IElEIHRvIHByZXZlbnQgZHVwbGljYXRlc1xuICAgIGlmIChjbGlwYm9hcmRQYXRoLmVuZHNXaXRoKCcuaWQnKSAmJiBkYXRhRnJvbUNsaXBib2FyZFtjbGlwYm9hcmRQYXRoXT8udmFsdWUpIHtcbiAgICAgIGNvbnN0IG9sZElEID0gZGF0YUZyb21DbGlwYm9hcmRbY2xpcGJvYXJkUGF0aF0udmFsdWUgYXMgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIG9sZElEID09PSAnc3RyaW5nJyAmJiBPYmplY3RJZC5pc1ZhbGlkKG9sZElEKSkge1xuICAgICAgICBjb25zdCBuZXdJRCA9IG5ldyBPYmplY3RJZCgpLnRvSGV4U3RyaW5nKClcbiAgICAgICAgaWRSZXBsYWNlbWVudHMuc2V0KGNsaXBib2FyZFBhdGgsIG5ld0lEKVxuXG4gICAgICAgIGZvcm1TdGF0ZVtuZXdQYXRoXSA9IHtcbiAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgIHZhbGlkYXRlLFxuICAgICAgICAgIC4uLmRhdGFGcm9tQ2xpcGJvYXJkW2NsaXBib2FyZFBhdGhdLFxuICAgICAgICAgIGluaXRpYWxWYWx1ZTogbmV3SUQsXG4gICAgICAgICAgdmFsdWU6IG5ld0lELFxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybVN0YXRlW25ld1BhdGhdID0ge1xuICAgICAgY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgIHZhbGlkYXRlLFxuICAgICAgLi4uZGF0YUZyb21DbGlwYm9hcmRbY2xpcGJvYXJkUGF0aF0sXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIHBhcmVudCBmaWVsZCByb3dzIHdpdGggbmV3IElEc1xuICBmb3IgKGNvbnN0IFtjbGlwYm9hcmRQYXRoLCBuZXdJRF0gb2YgaWRSZXBsYWNlbWVudHMpIHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBjbGlwYm9hcmRQYXRoLnJlcGxhY2UoYCR7cGF0aFRvUmVwbGFjZX0uYCwgJycpXG4gICAgY29uc3Qgc2VnbWVudHMgPSByZWxhdGl2ZVBhdGguc3BsaXQoJy4nKVxuXG4gICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLCAxMClcbiAgICAgIGNvbnN0IHBhcmVudEZpZWxkUGF0aCA9IHNlZ21lbnRzLnNsaWNlKDAsIHNlZ21lbnRzLmxlbmd0aCAtIDIpLmpvaW4oJy4nKVxuICAgICAgY29uc3QgZnVsbFBhcmVudFBhdGggPSBwYXJlbnRGaWVsZFBhdGggPyBgJHt0YXJnZXRTZWdtZW50fS4ke3BhcmVudEZpZWxkUGF0aH1gIDogdGFyZ2V0U2VnbWVudFxuXG4gICAgICBpZiAoZm9ybVN0YXRlW2Z1bGxQYXJlbnRQYXRoXSAmJiBBcnJheS5pc0FycmF5KGZvcm1TdGF0ZVtmdWxsUGFyZW50UGF0aF0ucm93cykpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Um93cyA9IGZvcm1TdGF0ZVtmdWxsUGFyZW50UGF0aF0ucm93c1xuICAgICAgICBpZiAoIWlzTmFOKHJvd0luZGV4KSAmJiBwYXJlbnRSb3dzW3Jvd0luZGV4XSkge1xuICAgICAgICAgIHBhcmVudFJvd3Nbcm93SW5kZXhdLmlkID0gbmV3SURcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAxICYmIHNlZ21lbnRzWzBdID09PSAnaWQnKSB7XG4gICAgICAvLyBUb3AtbGV2ZWwgYmxvY2sgSUQgLSBleHRyYWN0IGZpZWxkIHBhdGggYW5kIHJvdyBpbmRleCBmcm9tIHRhcmdldFNlZ21lbnRcbiAgICAgIGNvbnN0IHRhcmdldFBhcnRzID0gdGFyZ2V0U2VnbWVudC5zcGxpdCgnLicpXG4gICAgICBjb25zdCBsYXN0UGFydCA9IHRhcmdldFBhcnRzW3RhcmdldFBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICBjb25zdCByb3dJbmRleEZyb21UYXJnZXQgPSAhaXNOYU4ocGFyc2VJbnQobGFzdFBhcnQsIDEwKSkgPyBwYXJzZUludChsYXN0UGFydCwgMTApIDogMFxuICAgICAgY29uc3QgZmllbGRQYXRoID0gIWlzTmFOKHBhcnNlSW50KGxhc3RQYXJ0LCAxMCkpXG4gICAgICAgID8gdGFyZ2V0UGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKVxuICAgICAgICA6IHRhcmdldFNlZ21lbnRcblxuICAgICAgaWYgKGZvcm1TdGF0ZVtmaWVsZFBhdGhdICYmIEFycmF5LmlzQXJyYXkoZm9ybVN0YXRlW2ZpZWxkUGF0aF0ucm93cykpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IGZvcm1TdGF0ZVtmaWVsZFBhdGhdLnJvd3NcbiAgICAgICAgaWYgKHJvd3Nbcm93SW5kZXhGcm9tVGFyZ2V0XSkge1xuICAgICAgICAgIHJvd3Nbcm93SW5kZXhGcm9tVGFyZ2V0XS5pZCA9IG5ld0lEXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybVN0YXRlXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgVXNlRHJhZ2dhYmxlQXJndW1lbnRzIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcblxuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZURyYWdnYWJsZVNvcnRhYmxlIH0gZnJvbSAnLi4vdXNlRHJhZ2dhYmxlU29ydGFibGUvaW5kZXguanMnXG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVTb3J0YWJsZUl0ZW06IFJlYWN0LkZDPFxuICB7XG4gICAgY2hpbGRyZW46IENoaWxkRnVuY3Rpb25cbiAgfSAmIFVzZURyYWdnYWJsZUFyZ3VtZW50c1xuPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBjaGlsZHJlbiwgZGlzYWJsZWQgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBpc0RyYWdnaW5nLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID1cbiAgICB1c2VEcmFnZ2FibGVTb3J0YWJsZSh7XG4gICAgICBpZCxcbiAgICAgIGRpc2FibGVkLFxuICAgIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICB7Y2hpbGRyZW4oe1xuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgY3Vyc29yOiBpc0RyYWdnaW5nID8gJ2dyYWJiaW5nJyA6ICdncmFiJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpc0RyYWdnaW5nLFxuICAgICAgICBsaXN0ZW5lcnMsXG4gICAgICAgIHNldE5vZGVSZWYsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdHJhbnNpdGlvbixcbiAgICAgIH0pfVxuICAgIDwvRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBVc2VEcmFnZ2FibGVBcmd1bWVudHMgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuXG5pbXBvcnQgeyB1c2VTb3J0YWJsZSB9IGZyb20gJ0BkbmQta2l0L3NvcnRhYmxlJ1xuXG5pbXBvcnQgdHlwZSB7IFVzZURyYWdnYWJsZVNvcnRhYmxlUmV0dXJuIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IHVzZURyYWdnYWJsZVNvcnRhYmxlID0gKHByb3BzOiBVc2VEcmFnZ2FibGVBcmd1bWVudHMpOiBVc2VEcmFnZ2FibGVTb3J0YWJsZVJldHVybiA9PiB7XG4gIGNvbnN0IHsgaWQsIGRpc2FibGVkIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgYXR0cmlidXRlcywgaXNEcmFnZ2luZywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgICBkaXNhYmxlZCxcbiAgICB0cmFuc2l0aW9uOiB7XG4gICAgICBkdXJhdGlvbjogMjUwLFxuICAgICAgZWFzaW5nOiAnY3ViaWMtYmV6aWVyKDAsIDAuMiwgMC4yLCAxKScsXG4gICAgfSxcbiAgfSlcblxuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICBzdHlsZToge1xuICAgICAgICBjdXJzb3I6IGlzRHJhZ2dpbmcgPyAnZ3JhYmJpbmcnIDogJ2dyYWInLFxuICAgICAgICB0cmFuc2l0aW9uLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGlzRHJhZ2dpbmcsXG4gICAgbGlzdGVuZXJzLFxuICAgIHNldE5vZGVSZWYsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0gJiYgYHRyYW5zbGF0ZTNkKCR7dHJhbnNmb3JtLnh9cHgsICR7dHJhbnNmb3JtLnl9cHgsIDApYCwgLy8gdHJhbnNsYXRlM2QgaXMgZmFzdGVyIHRoYW4gdHJhbnNsYXRlIGluIG1vc3QgYnJvd3NlcnNcbiAgICB0cmFuc2l0aW9uLFxuICB9XG59XG4iLCJpbXBvcnQge3VzZU1lbW99IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbWJpbmVkUmVmczxUPihcbiAgLi4ucmVmczogKChub2RlOiBUKSA9PiB2b2lkKVtdXG4pOiAobm9kZTogVCkgPT4gdm9pZCB7XG4gIHJldHVybiB1c2VNZW1vKFxuICAgICgpID0+IChub2RlOiBUKSA9PiB7XG4gICAgICByZWZzLmZvckVhY2goKHJlZikgPT4gcmVmKG5vZGUpKTtcbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICByZWZzXG4gICk7XG59XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYXN0ZXIvcGFja2FnZXMvc2hhcmVkL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzXG5leHBvcnQgY29uc3QgY2FuVXNlRE9NID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJztcbiIsImV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyhlbGVtZW50OiBPYmplY3QpOiBlbGVtZW50IGlzIHR5cGVvZiB3aW5kb3cge1xuICBjb25zdCBlbGVtZW50U3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVsZW1lbnQpO1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnRTdHJpbmcgPT09ICdbb2JqZWN0IFdpbmRvd10nIHx8XG4gICAgLy8gSW4gRWxlY3Ryb24gY29udGV4dCB0aGUgV2luZG93IG9iamVjdCBzZXJpYWxpemVzIHRvIFtvYmplY3QgZ2xvYmFsXVxuICAgIGVsZW1lbnRTdHJpbmcgPT09ICdbb2JqZWN0IGdsb2JhbF0nXG4gICk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNOb2RlKG5vZGU6IE9iamVjdCk6IG5vZGUgaXMgTm9kZSB7XG4gIHJldHVybiAnbm9kZVR5cGUnIGluIG5vZGU7XG59XG4iLCJpbXBvcnQge2lzV2luZG93fSBmcm9tICcuLi90eXBlLWd1YXJkcy9pc1dpbmRvdyc7XG5pbXBvcnQge2lzTm9kZX0gZnJvbSAnLi4vdHlwZS1ndWFyZHMvaXNOb2RlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdpbmRvdyh0YXJnZXQ6IEV2ZW50Wyd0YXJnZXQnXSk6IHR5cGVvZiB3aW5kb3cge1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAoaXNXaW5kb3codGFyZ2V0KSkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBpZiAoIWlzTm9kZSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXcgPz8gd2luZG93O1xufVxuIiwiaW1wb3J0IHtnZXRXaW5kb3d9IGZyb20gJy4uL2V4ZWN1dGlvbi1jb250ZXh0L2dldFdpbmRvdyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RvY3VtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIERvY3VtZW50IHtcbiAgY29uc3Qge0RvY3VtZW50fSA9IGdldFdpbmRvdyhub2RlKTtcblxuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIERvY3VtZW50O1xufVxuIiwiaW1wb3J0IHtnZXRXaW5kb3d9IGZyb20gJy4uL2V4ZWN1dGlvbi1jb250ZXh0L2dldFdpbmRvdyc7XG5cbmltcG9ydCB7aXNXaW5kb3d9IGZyb20gJy4vaXNXaW5kb3cnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlOiBOb2RlIHwgV2luZG93KTogbm9kZSBpcyBIVE1MRWxlbWVudCB7XG4gIGlmIChpc1dpbmRvdyhub2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xufVxuIiwiaW1wb3J0IHtnZXRXaW5kb3d9IGZyb20gJy4uL2V4ZWN1dGlvbi1jb250ZXh0L2dldFdpbmRvdyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NWR0VsZW1lbnQobm9kZTogTm9kZSk6IG5vZGUgaXMgU1ZHRWxlbWVudCB7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgZ2V0V2luZG93KG5vZGUpLlNWR0VsZW1lbnQ7XG59XG4iLCJpbXBvcnQge1xuICBpc1dpbmRvdyxcbiAgaXNIVE1MRWxlbWVudCxcbiAgaXNEb2N1bWVudCxcbiAgaXNOb2RlLFxuICBpc1NWR0VsZW1lbnQsXG59IGZyb20gJy4uL3R5cGUtZ3VhcmRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnQodGFyZ2V0OiBFdmVudFsndGFyZ2V0J10pOiBEb2N1bWVudCB7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50O1xuICB9XG5cbiAgaWYgKGlzV2luZG93KHRhcmdldCkpIHtcbiAgICByZXR1cm4gdGFyZ2V0LmRvY3VtZW50O1xuICB9XG5cbiAgaWYgKCFpc05vZGUodGFyZ2V0KSkge1xuICAgIHJldHVybiBkb2N1bWVudDtcbiAgfVxuXG4gIGlmIChpc0RvY3VtZW50KHRhcmdldCkpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQodGFyZ2V0KSB8fCBpc1NWR0VsZW1lbnQodGFyZ2V0KSkge1xuICAgIHJldHVybiB0YXJnZXQub3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudDtcbn1cbiIsImltcG9ydCB7dXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3R9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtjYW5Vc2VET019IGZyb20gJy4uL2V4ZWN1dGlvbi1jb250ZXh0JztcblxuLyoqXG4gKiBBIGhvb2sgdGhhdCByZXNvbHZlcyB0byB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciBhbmQgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBjbGllbnRcbiAqIEBwYXJhbSBjYWxsYmFjayB7ZnVuY3Rpb259IENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGhvb2sgY2hhbmdlXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NXG4gID8gdXNlTGF5b3V0RWZmZWN0XG4gIDogdXNlRWZmZWN0O1xuIiwiaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7dXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0gZnJvbSAnLi91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUV2ZW50PFQgZXh0ZW5kcyBGdW5jdGlvbj4oaGFuZGxlcjogVCB8IHVuZGVmaW5lZCkge1xuICBjb25zdCBoYW5kbGVyUmVmID0gdXNlUmVmPFQgfCB1bmRlZmluZWQ+KGhhbmRsZXIpO1xuXG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGhhbmRsZXJSZWYuY3VycmVudCA9IGhhbmRsZXI7XG4gIH0pO1xuXG4gIHJldHVybiB1c2VDYWxsYmFjayhmdW5jdGlvbiAoLi4uYXJnczogYW55KSB7XG4gICAgcmV0dXJuIGhhbmRsZXJSZWYuY3VycmVudD8uKC4uLmFyZ3MpO1xuICB9LCBbXSk7XG59XG4iLCJpbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVydmFsKCkge1xuICBjb25zdCBpbnRlcnZhbFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBzZXQgPSB1c2VDYWxsYmFjaygobGlzdGVuZXI6IEZ1bmN0aW9uLCBkdXJhdGlvbjogbnVtYmVyKSA9PiB7XG4gICAgaW50ZXJ2YWxSZWYuY3VycmVudCA9IHNldEludGVydmFsKGxpc3RlbmVyLCBkdXJhdGlvbik7XG4gIH0sIFtdKTtcblxuICBjb25zdCBjbGVhciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoaW50ZXJ2YWxSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFJlZi5jdXJyZW50KTtcbiAgICAgIGludGVydmFsUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIHJldHVybiBbc2V0LCBjbGVhcl0gYXMgY29uc3Q7XG59XG4iLCJpbXBvcnQge3VzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge0RlcGVuZGVuY3lMaXN0fSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7dXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0gZnJvbSAnLi91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUxhdGVzdFZhbHVlPFQgZXh0ZW5kcyBhbnk+KFxuICB2YWx1ZTogVCxcbiAgZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5TGlzdCA9IFt2YWx1ZV1cbikge1xuICBjb25zdCB2YWx1ZVJlZiA9IHVzZVJlZjxUPih2YWx1ZSk7XG5cbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlUmVmLmN1cnJlbnQgIT09IHZhbHVlKSB7XG4gICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICB9LCBkZXBlbmRlbmNpZXMpO1xuXG4gIHJldHVybiB2YWx1ZVJlZjtcbn1cbiIsImltcG9ydCB7dXNlTWVtbywgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMYXp5TWVtbzxUPihcbiAgY2FsbGJhY2s6IChwcmV2VmFsdWU6IFQgfCB1bmRlZmluZWQpID0+IFQsXG4gIGRlcGVuZGVuY2llczogYW55W11cbikge1xuICBjb25zdCB2YWx1ZVJlZiA9IHVzZVJlZjxUPigpO1xuXG4gIHJldHVybiB1c2VNZW1vKFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2FsbGJhY2sodmFsdWVSZWYuY3VycmVudCk7XG4gICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbmV3VmFsdWU7XG5cbiAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbLi4uZGVwZW5kZW5jaWVzXVxuICApO1xufVxuIiwiaW1wb3J0IHt1c2VSZWYsIHVzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7dXNlRXZlbnR9IGZyb20gJy4vdXNlRXZlbnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTm9kZVJlZihcbiAgb25DaGFuZ2U/OiAoXG4gICAgbmV3RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgIHByZXZpb3VzRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsXG4gICkgPT4gdm9pZFxuKSB7XG4gIGNvbnN0IG9uQ2hhbmdlSGFuZGxlciA9IHVzZUV2ZW50KG9uQ2hhbmdlKTtcbiAgY29uc3Qgbm9kZSA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBzZXROb2RlUmVmID0gdXNlQ2FsbGJhY2soXG4gICAgKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IG5vZGUuY3VycmVudCkge1xuICAgICAgICBvbkNoYW5nZUhhbmRsZXI/LihlbGVtZW50LCBub2RlLmN1cnJlbnQpO1xuICAgICAgfVxuXG4gICAgICBub2RlLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIH0sXG4gICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBbXVxuICApO1xuXG4gIHJldHVybiBbbm9kZSwgc2V0Tm9kZVJlZl0gYXMgY29uc3Q7XG59XG4iLCJpbXBvcnQge3VzZVJlZiwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcmV2aW91czxUPih2YWx1ZTogVCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8VD4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0sIFt2YWx1ZV0pO1xuXG4gIHJldHVybiByZWYuY3VycmVudDtcbn1cbiIsImltcG9ydCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuXG5sZXQgaWRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVbmlxdWVJZChwcmVmaXg6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gaWRzW3ByZWZpeF0gPT0gbnVsbCA/IDAgOiBpZHNbcHJlZml4XSArIDE7XG4gICAgaWRzW3ByZWZpeF0gPSBpZDtcblxuICAgIHJldHVybiBgJHtwcmVmaXh9LSR7aWR9YDtcbiAgfSwgW3ByZWZpeCwgdmFsdWVdKTtcbn1cbiIsImZ1bmN0aW9uIGNyZWF0ZUFkanVzdG1lbnRGbihtb2RpZmllcjogbnVtYmVyKSB7XG4gIHJldHVybiA8VCBleHRlbmRzIFJlY29yZDxVLCBudW1iZXI+LCBVIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFQsXG4gICAgLi4uYWRqdXN0bWVudHM6IFBhcnRpYWw8VD5bXVxuICApOiBUID0+IHtcbiAgICByZXR1cm4gYWRqdXN0bWVudHMucmVkdWNlPFQ+KFxuICAgICAgKGFjY3VtdWxhdG9yLCBhZGp1c3RtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhZGp1c3RtZW50KSBhcyBbVSwgbnVtYmVyXVtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVBZGp1c3RtZW50XSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBhY2N1bXVsYXRvcltrZXldO1xuXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFjY3VtdWxhdG9yW2tleV0gPSAodmFsdWUgKyBtb2RpZmllciAqIHZhbHVlQWRqdXN0bWVudCkgYXMgVFtVXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5vYmplY3QsXG4gICAgICB9XG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZCA9IGNyZWF0ZUFkanVzdG1lbnRGbigxKTtcbmV4cG9ydCBjb25zdCBzdWJ0cmFjdCA9IGNyZWF0ZUFkanVzdG1lbnRGbigtMSk7XG4iLCJleHBvcnQgZnVuY3Rpb24gaGFzVmlld3BvcnRSZWxhdGl2ZUNvb3JkaW5hdGVzKFxuICBldmVudDogRXZlbnRcbik6IGV2ZW50IGlzIEV2ZW50ICYgUGljazxQb2ludGVyRXZlbnQsICdjbGllbnRYJyB8ICdjbGllbnRZJz4ge1xuICByZXR1cm4gJ2NsaWVudFgnIGluIGV2ZW50ICYmICdjbGllbnRZJyBpbiBldmVudDtcbn1cbiIsImltcG9ydCB7Z2V0V2luZG93fSBmcm9tICcuLi9leGVjdXRpb24tY29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnQoXG4gIGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCB8IG51bGxcbik6IGV2ZW50IGlzIEtleWJvYXJkRXZlbnQge1xuICBpZiAoIWV2ZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qge0tleWJvYXJkRXZlbnR9ID0gZ2V0V2luZG93KGV2ZW50LnRhcmdldCk7XG5cbiAgcmV0dXJuIEtleWJvYXJkRXZlbnQgJiYgZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50O1xufVxuIiwiaW1wb3J0IHtnZXRXaW5kb3d9IGZyb20gJy4uL2V4ZWN1dGlvbi1jb250ZXh0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG91Y2hFdmVudChcbiAgZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkIHwgbnVsbFxuKTogZXZlbnQgaXMgVG91Y2hFdmVudCB7XG4gIGlmICghZXZlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7VG91Y2hFdmVudH0gPSBnZXRXaW5kb3coZXZlbnQudGFyZ2V0KTtcblxuICByZXR1cm4gVG91Y2hFdmVudCAmJiBldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7Q29vcmRpbmF0ZXN9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtpc1RvdWNoRXZlbnQsIGhhc1ZpZXdwb3J0UmVsYXRpdmVDb29yZGluYXRlc30gZnJvbSAnLi4vZXZlbnQnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgeCBhbmQgeSBjb29yZGluYXRlcyBmb3IgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50Q29vcmRpbmF0ZXMoZXZlbnQ6IEV2ZW50KTogQ29vcmRpbmF0ZXMgfCBudWxsIHtcbiAgaWYgKGlzVG91Y2hFdmVudChldmVudCkpIHtcbiAgICBpZiAoZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qge2NsaWVudFg6IHgsIGNsaWVudFk6IHl9ID0gZXZlbnQudG91Y2hlc1swXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChldmVudC5jaGFuZ2VkVG91Y2hlcyAmJiBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHtjbGllbnRYOiB4LCBjbGllbnRZOiB5fSA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFzVmlld3BvcnRSZWxhdGl2ZUNvb3JkaW5hdGVzKGV2ZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBldmVudC5jbGllbnRYLFxuICAgICAgeTogZXZlbnQuY2xpZW50WSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgdHlwZSBUcmFuc2Zvcm0gPSB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBzY2FsZVg6IG51bWJlcjtcbiAgc2NhbGVZOiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zaXRpb24ge1xuICBwcm9wZXJ0eTogc3RyaW5nO1xuICBlYXNpbmc6IHN0cmluZztcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENTUyA9IE9iamVjdC5mcmVlemUoe1xuICBUcmFuc2xhdGU6IHtcbiAgICB0b1N0cmluZyh0cmFuc2Zvcm06IFRyYW5zZm9ybSB8IG51bGwpIHtcbiAgICAgIGlmICghdHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge3gsIHl9ID0gdHJhbnNmb3JtO1xuXG4gICAgICByZXR1cm4gYHRyYW5zbGF0ZTNkKCR7eCA/IE1hdGgucm91bmQoeCkgOiAwfXB4LCAke1xuICAgICAgICB5ID8gTWF0aC5yb3VuZCh5KSA6IDBcbiAgICAgIH1weCwgMClgO1xuICAgIH0sXG4gIH0sXG4gIFNjYWxlOiB7XG4gICAgdG9TdHJpbmcodHJhbnNmb3JtOiBUcmFuc2Zvcm0gfCBudWxsKSB7XG4gICAgICBpZiAoIXRyYW5zZm9ybSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtzY2FsZVgsIHNjYWxlWX0gPSB0cmFuc2Zvcm07XG5cbiAgICAgIHJldHVybiBgc2NhbGVYKCR7c2NhbGVYfSkgc2NhbGVZKCR7c2NhbGVZfSlgO1xuICAgIH0sXG4gIH0sXG4gIFRyYW5zZm9ybToge1xuICAgIHRvU3RyaW5nKHRyYW5zZm9ybTogVHJhbnNmb3JtIHwgbnVsbCkge1xuICAgICAgaWYgKCF0cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBDU1MuVHJhbnNsYXRlLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgICAgIENTUy5TY2FsZS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgICAgXS5qb2luKCcgJyk7XG4gICAgfSxcbiAgfSxcbiAgVHJhbnNpdGlvbjoge1xuICAgIHRvU3RyaW5nKHtwcm9wZXJ0eSwgZHVyYXRpb24sIGVhc2luZ306IFRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiBgJHtwcm9wZXJ0eX0gJHtkdXJhdGlvbn1tcyAke2Vhc2luZ31gO1xuICAgIH0sXG4gIH0sXG59KTtcbiIsImNvbnN0IFNFTEVDVE9SID1cbiAgJ2EsZnJhbWUsaWZyYW1lLGlucHV0Om5vdChbdHlwZT1oaWRkZW5dKTpub3QoOmRpc2FibGVkKSxzZWxlY3Q6bm90KDpkaXNhYmxlZCksdGV4dGFyZWE6bm90KDpkaXNhYmxlZCksYnV0dG9uOm5vdCg6ZGlzYWJsZWQpLCpbdGFiaW5kZXhdJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaXJzdEZvY3VzYWJsZU5vZGUoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4pOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICBpZiAoZWxlbWVudC5tYXRjaGVzKFNFTEVDVE9SKSkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihTRUxFQ1RPUik7XG59XG4iLCIvKipcbiAqIE1vdmUgYW4gYXJyYXkgaXRlbSB0byBhIGRpZmZlcmVudCBwb3NpdGlvbi4gUmV0dXJucyBhIG5ldyBhcnJheSB3aXRoIHRoZSBpdGVtIG1vdmVkIHRvIHRoZSBuZXcgcG9zaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheU1vdmU8VD4oYXJyYXk6IFRbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogVFtdIHtcbiAgY29uc3QgbmV3QXJyYXkgPSBhcnJheS5zbGljZSgpO1xuICBuZXdBcnJheS5zcGxpY2UoXG4gICAgdG8gPCAwID8gbmV3QXJyYXkubGVuZ3RoICsgdG8gOiB0byxcbiAgICAwLFxuICAgIG5ld0FycmF5LnNwbGljZShmcm9tLCAxKVswXVxuICApO1xuXG4gIHJldHVybiBuZXdBcnJheTtcbn1cbiIsIi8qKlxuICogU3dhcCBhbiBhcnJheSBpdGVtIHRvIGEgZGlmZmVyZW50IHBvc2l0aW9uLiBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggdGhlIGl0ZW0gc3dhcHBlZCB0byB0aGUgbmV3IHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlTd2FwPFQ+KGFycmF5OiBUW10sIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IFRbXSB7XG4gIGNvbnN0IG5ld0FycmF5ID0gYXJyYXkuc2xpY2UoKTtcblxuICBuZXdBcnJheVtmcm9tXSA9IGFycmF5W3RvXTtcbiAgbmV3QXJyYXlbdG9dID0gYXJyYXlbZnJvbV07XG5cbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICBDbGllbnRSZWN0LFxuICBVbmlxdWVJZGVudGlmaWVyLFxuICBVc2VEbmRDb250ZXh0UmV0dXJuVmFsdWUsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydGVkUmVjdHMoXG4gIGl0ZW1zOiBVbmlxdWVJZGVudGlmaWVyW10sXG4gIHJlY3RzOiBVc2VEbmRDb250ZXh0UmV0dXJuVmFsdWVbJ2Ryb3BwYWJsZVJlY3RzJ11cbikge1xuICByZXR1cm4gaXRlbXMucmVkdWNlPENsaWVudFJlY3RbXT4oKGFjY3VtdWxhdG9yLCBpZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCByZWN0ID0gcmVjdHMuZ2V0KGlkKTtcblxuICAgIGlmIChyZWN0KSB7XG4gICAgICBhY2N1bXVsYXRvcltpbmRleF0gPSByZWN0O1xuICAgIH1cblxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwgQXJyYXkoaXRlbXMubGVuZ3RoKSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNWYWxpZEluZGV4KGluZGV4OiBudW1iZXIgfCBudWxsKTogaW5kZXggaXMgbnVtYmVyIHtcbiAgcmV0dXJuIGluZGV4ICE9PSBudWxsICYmIGluZGV4ID49IDA7XG59XG4iLCJpbXBvcnQgdHlwZSB7VW5pcXVlSWRlbnRpZmllcn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVtc0VxdWFsKGE6IFVuaXF1ZUlkZW50aWZpZXJbXSwgYjogVW5pcXVlSWRlbnRpZmllcltdKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsImltcG9ydCB0eXBlIHtEaXNhYmxlZH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4gfCBEaXNhYmxlZCk6IERpc2FibGVkIHtcbiAgaWYgKHR5cGVvZiBkaXNhYmxlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnYWJsZTogZGlzYWJsZWQsXG4gICAgICBkcm9wcGFibGU6IGRpc2FibGVkLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZGlzYWJsZWQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7Q2xpZW50UmVjdH0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgdHlwZSB7U29ydGluZ1N0cmF0ZWd5fSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIFRvLWRvOiBXZSBzaG91bGQgYmUgY2FsY3VsYXRpbmcgc2NhbGUgdHJhbnNmb3JtYXRpb25cbmNvbnN0IGRlZmF1bHRTY2FsZSA9IHtcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDEsXG59O1xuXG5leHBvcnQgY29uc3QgaG9yaXpvbnRhbExpc3RTb3J0aW5nU3RyYXRlZ3k6IFNvcnRpbmdTdHJhdGVneSA9ICh7XG4gIHJlY3RzLFxuICBhY3RpdmVOb2RlUmVjdDogZmFsbGJhY2tBY3RpdmVSZWN0LFxuICBhY3RpdmVJbmRleCxcbiAgb3ZlckluZGV4LFxuICBpbmRleCxcbn0pID0+IHtcbiAgY29uc3QgYWN0aXZlTm9kZVJlY3QgPSByZWN0c1thY3RpdmVJbmRleF0gPz8gZmFsbGJhY2tBY3RpdmVSZWN0O1xuXG4gIGlmICghYWN0aXZlTm9kZVJlY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGl0ZW1HYXAgPSBnZXRJdGVtR2FwKHJlY3RzLCBpbmRleCwgYWN0aXZlSW5kZXgpO1xuXG4gIGlmIChpbmRleCA9PT0gYWN0aXZlSW5kZXgpIHtcbiAgICBjb25zdCBuZXdJbmRleFJlY3QgPSByZWN0c1tvdmVySW5kZXhdO1xuXG4gICAgaWYgKCFuZXdJbmRleFJlY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB4OlxuICAgICAgICBhY3RpdmVJbmRleCA8IG92ZXJJbmRleFxuICAgICAgICAgID8gbmV3SW5kZXhSZWN0LmxlZnQgK1xuICAgICAgICAgICAgbmV3SW5kZXhSZWN0LndpZHRoIC1cbiAgICAgICAgICAgIChhY3RpdmVOb2RlUmVjdC5sZWZ0ICsgYWN0aXZlTm9kZVJlY3Qud2lkdGgpXG4gICAgICAgICAgOiBuZXdJbmRleFJlY3QubGVmdCAtIGFjdGl2ZU5vZGVSZWN0LmxlZnQsXG4gICAgICB5OiAwLFxuICAgICAgLi4uZGVmYXVsdFNjYWxlLFxuICAgIH07XG4gIH1cblxuICBpZiAoaW5kZXggPiBhY3RpdmVJbmRleCAmJiBpbmRleCA8PSBvdmVySW5kZXgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogLWFjdGl2ZU5vZGVSZWN0LndpZHRoIC0gaXRlbUdhcCxcbiAgICAgIHk6IDAsXG4gICAgICAuLi5kZWZhdWx0U2NhbGUsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbmRleCA8IGFjdGl2ZUluZGV4ICYmIGluZGV4ID49IG92ZXJJbmRleCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBhY3RpdmVOb2RlUmVjdC53aWR0aCArIGl0ZW1HYXAsXG4gICAgICB5OiAwLFxuICAgICAgLi4uZGVmYXVsdFNjYWxlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICAuLi5kZWZhdWx0U2NhbGUsXG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRJdGVtR2FwKHJlY3RzOiBDbGllbnRSZWN0W10sIGluZGV4OiBudW1iZXIsIGFjdGl2ZUluZGV4OiBudW1iZXIpIHtcbiAgY29uc3QgY3VycmVudFJlY3Q6IENsaWVudFJlY3QgfCB1bmRlZmluZWQgPSByZWN0c1tpbmRleF07XG4gIGNvbnN0IHByZXZpb3VzUmVjdDogQ2xpZW50UmVjdCB8IHVuZGVmaW5lZCA9IHJlY3RzW2luZGV4IC0gMV07XG4gIGNvbnN0IG5leHRSZWN0OiBDbGllbnRSZWN0IHwgdW5kZWZpbmVkID0gcmVjdHNbaW5kZXggKyAxXTtcblxuICBpZiAoIWN1cnJlbnRSZWN0IHx8ICghcHJldmlvdXNSZWN0ICYmICFuZXh0UmVjdCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhY3RpdmVJbmRleCA8IGluZGV4KSB7XG4gICAgcmV0dXJuIHByZXZpb3VzUmVjdFxuICAgICAgPyBjdXJyZW50UmVjdC5sZWZ0IC0gKHByZXZpb3VzUmVjdC5sZWZ0ICsgcHJldmlvdXNSZWN0LndpZHRoKVxuICAgICAgOiBuZXh0UmVjdC5sZWZ0IC0gKGN1cnJlbnRSZWN0LmxlZnQgKyBjdXJyZW50UmVjdC53aWR0aCk7XG4gIH1cblxuICByZXR1cm4gbmV4dFJlY3RcbiAgICA/IG5leHRSZWN0LmxlZnQgLSAoY3VycmVudFJlY3QubGVmdCArIGN1cnJlbnRSZWN0LndpZHRoKVxuICAgIDogY3VycmVudFJlY3QubGVmdCAtIChwcmV2aW91c1JlY3QubGVmdCArIHByZXZpb3VzUmVjdC53aWR0aCk7XG59XG4iLCJpbXBvcnQge2FycmF5TW92ZX0gZnJvbSAnLi4vdXRpbGl0aWVzJztcbmltcG9ydCB0eXBlIHtTb3J0aW5nU3RyYXRlZ3l9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IHJlY3RTb3J0aW5nU3RyYXRlZ3k6IFNvcnRpbmdTdHJhdGVneSA9ICh7XG4gIHJlY3RzLFxuICBhY3RpdmVJbmRleCxcbiAgb3ZlckluZGV4LFxuICBpbmRleCxcbn0pID0+IHtcbiAgY29uc3QgbmV3UmVjdHMgPSBhcnJheU1vdmUocmVjdHMsIG92ZXJJbmRleCwgYWN0aXZlSW5kZXgpO1xuXG4gIGNvbnN0IG9sZFJlY3QgPSByZWN0c1tpbmRleF07XG4gIGNvbnN0IG5ld1JlY3QgPSBuZXdSZWN0c1tpbmRleF07XG5cbiAgaWYgKCFuZXdSZWN0IHx8ICFvbGRSZWN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IG5ld1JlY3QubGVmdCAtIG9sZFJlY3QubGVmdCxcbiAgICB5OiBuZXdSZWN0LnRvcCAtIG9sZFJlY3QudG9wLFxuICAgIHNjYWxlWDogbmV3UmVjdC53aWR0aCAvIG9sZFJlY3Qud2lkdGgsXG4gICAgc2NhbGVZOiBuZXdSZWN0LmhlaWdodCAvIG9sZFJlY3QuaGVpZ2h0LFxuICB9O1xufTtcbiIsImltcG9ydCB0eXBlIHtTb3J0aW5nU3RyYXRlZ3l9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IHJlY3RTd2FwcGluZ1N0cmF0ZWd5OiBTb3J0aW5nU3RyYXRlZ3kgPSAoe1xuICBhY3RpdmVJbmRleCxcbiAgaW5kZXgsXG4gIHJlY3RzLFxuICBvdmVySW5kZXgsXG59KSA9PiB7XG4gIGxldCBvbGRSZWN0O1xuICBsZXQgbmV3UmVjdDtcblxuICBpZiAoaW5kZXggPT09IGFjdGl2ZUluZGV4KSB7XG4gICAgb2xkUmVjdCA9IHJlY3RzW2luZGV4XTtcbiAgICBuZXdSZWN0ID0gcmVjdHNbb3ZlckluZGV4XTtcbiAgfVxuXG4gIGlmIChpbmRleCA9PT0gb3ZlckluZGV4KSB7XG4gICAgb2xkUmVjdCA9IHJlY3RzW2luZGV4XTtcbiAgICBuZXdSZWN0ID0gcmVjdHNbYWN0aXZlSW5kZXhdO1xuICB9XG5cbiAgaWYgKCFuZXdSZWN0IHx8ICFvbGRSZWN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IG5ld1JlY3QubGVmdCAtIG9sZFJlY3QubGVmdCxcbiAgICB5OiBuZXdSZWN0LnRvcCAtIG9sZFJlY3QudG9wLFxuICAgIHNjYWxlWDogbmV3UmVjdC53aWR0aCAvIG9sZFJlY3Qud2lkdGgsXG4gICAgc2NhbGVZOiBuZXdSZWN0LmhlaWdodCAvIG9sZFJlY3QuaGVpZ2h0LFxuICB9O1xufTtcbiIsImltcG9ydCB0eXBlIHtDbGllbnRSZWN0fSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB0eXBlIHtTb3J0aW5nU3RyYXRlZ3l9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gVG8tZG86IFdlIHNob3VsZCBiZSBjYWxjdWxhdGluZyBzY2FsZSB0cmFuc2Zvcm1hdGlvblxuY29uc3QgZGVmYXVsdFNjYWxlID0ge1xuICBzY2FsZVg6IDEsXG4gIHNjYWxlWTogMSxcbn07XG5cbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbExpc3RTb3J0aW5nU3RyYXRlZ3k6IFNvcnRpbmdTdHJhdGVneSA9ICh7XG4gIGFjdGl2ZUluZGV4LFxuICBhY3RpdmVOb2RlUmVjdDogZmFsbGJhY2tBY3RpdmVSZWN0LFxuICBpbmRleCxcbiAgcmVjdHMsXG4gIG92ZXJJbmRleCxcbn0pID0+IHtcbiAgY29uc3QgYWN0aXZlTm9kZVJlY3QgPSByZWN0c1thY3RpdmVJbmRleF0gPz8gZmFsbGJhY2tBY3RpdmVSZWN0O1xuXG4gIGlmICghYWN0aXZlTm9kZVJlY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpbmRleCA9PT0gYWN0aXZlSW5kZXgpIHtcbiAgICBjb25zdCBvdmVySW5kZXhSZWN0ID0gcmVjdHNbb3ZlckluZGV4XTtcblxuICAgIGlmICghb3ZlckluZGV4UmVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OlxuICAgICAgICBhY3RpdmVJbmRleCA8IG92ZXJJbmRleFxuICAgICAgICAgID8gb3ZlckluZGV4UmVjdC50b3AgK1xuICAgICAgICAgICAgb3ZlckluZGV4UmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgKGFjdGl2ZU5vZGVSZWN0LnRvcCArIGFjdGl2ZU5vZGVSZWN0LmhlaWdodClcbiAgICAgICAgICA6IG92ZXJJbmRleFJlY3QudG9wIC0gYWN0aXZlTm9kZVJlY3QudG9wLFxuICAgICAgLi4uZGVmYXVsdFNjYWxlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBpdGVtR2FwID0gZ2V0SXRlbUdhcChyZWN0cywgaW5kZXgsIGFjdGl2ZUluZGV4KTtcblxuICBpZiAoaW5kZXggPiBhY3RpdmVJbmRleCAmJiBpbmRleCA8PSBvdmVySW5kZXgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IC1hY3RpdmVOb2RlUmVjdC5oZWlnaHQgLSBpdGVtR2FwLFxuICAgICAgLi4uZGVmYXVsdFNjYWxlLFxuICAgIH07XG4gIH1cblxuICBpZiAoaW5kZXggPCBhY3RpdmVJbmRleCAmJiBpbmRleCA+PSBvdmVySW5kZXgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IGFjdGl2ZU5vZGVSZWN0LmhlaWdodCArIGl0ZW1HYXAsXG4gICAgICAuLi5kZWZhdWx0U2NhbGUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIC4uLmRlZmF1bHRTY2FsZSxcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldEl0ZW1HYXAoXG4gIGNsaWVudFJlY3RzOiBDbGllbnRSZWN0W10sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFjdGl2ZUluZGV4OiBudW1iZXJcbikge1xuICBjb25zdCBjdXJyZW50UmVjdDogQ2xpZW50UmVjdCB8IHVuZGVmaW5lZCA9IGNsaWVudFJlY3RzW2luZGV4XTtcbiAgY29uc3QgcHJldmlvdXNSZWN0OiBDbGllbnRSZWN0IHwgdW5kZWZpbmVkID0gY2xpZW50UmVjdHNbaW5kZXggLSAxXTtcbiAgY29uc3QgbmV4dFJlY3Q6IENsaWVudFJlY3QgfCB1bmRlZmluZWQgPSBjbGllbnRSZWN0c1tpbmRleCArIDFdO1xuXG4gIGlmICghY3VycmVudFJlY3QpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhY3RpdmVJbmRleCA8IGluZGV4KSB7XG4gICAgcmV0dXJuIHByZXZpb3VzUmVjdFxuICAgICAgPyBjdXJyZW50UmVjdC50b3AgLSAocHJldmlvdXNSZWN0LnRvcCArIHByZXZpb3VzUmVjdC5oZWlnaHQpXG4gICAgICA6IG5leHRSZWN0XG4gICAgICA/IG5leHRSZWN0LnRvcCAtIChjdXJyZW50UmVjdC50b3AgKyBjdXJyZW50UmVjdC5oZWlnaHQpXG4gICAgICA6IDA7XG4gIH1cblxuICByZXR1cm4gbmV4dFJlY3RcbiAgICA/IG5leHRSZWN0LnRvcCAtIChjdXJyZW50UmVjdC50b3AgKyBjdXJyZW50UmVjdC5oZWlnaHQpXG4gICAgOiBwcmV2aW91c1JlY3RcbiAgICA/IGN1cnJlbnRSZWN0LnRvcCAtIChwcmV2aW91c1JlY3QudG9wICsgcHJldmlvdXNSZWN0LmhlaWdodClcbiAgICA6IDA7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEbmRDb250ZXh0LCBDbGllbnRSZWN0LCBVbmlxdWVJZGVudGlmaWVyfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7dXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlVW5pcXVlSWR9IGZyb20gJ0BkbmQta2l0L3V0aWxpdGllcyc7XG5cbmltcG9ydCB0eXBlIHtEaXNhYmxlZCwgU29ydGluZ1N0cmF0ZWd5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldFNvcnRlZFJlY3RzLCBpdGVtc0VxdWFsLCBub3JtYWxpemVEaXNhYmxlZH0gZnJvbSAnLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7cmVjdFNvcnRpbmdTdHJhdGVneX0gZnJvbSAnLi4vc3RyYXRlZ2llcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBpdGVtczogKFVuaXF1ZUlkZW50aWZpZXIgfCB7aWQ6IFVuaXF1ZUlkZW50aWZpZXJ9KVtdO1xuICBzdHJhdGVneT86IFNvcnRpbmdTdHJhdGVneTtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbiB8IERpc2FibGVkO1xufVxuXG5jb25zdCBJRF9QUkVGSVggPSAnU29ydGFibGUnO1xuXG5pbnRlcmZhY2UgQ29udGV4dERlc2NyaXB0b3Ige1xuICBhY3RpdmVJbmRleDogbnVtYmVyO1xuICBjb250YWluZXJJZDogc3RyaW5nO1xuICBkaXNhYmxlZDogRGlzYWJsZWQ7XG4gIGRpc2FibGVUcmFuc2Zvcm1zOiBib29sZWFuO1xuICBpdGVtczogVW5pcXVlSWRlbnRpZmllcltdO1xuICBvdmVySW5kZXg6IG51bWJlcjtcbiAgdXNlRHJhZ092ZXJsYXk6IGJvb2xlYW47XG4gIHNvcnRlZFJlY3RzOiBDbGllbnRSZWN0W107XG4gIHN0cmF0ZWd5OiBTb3J0aW5nU3RyYXRlZ3k7XG59XG5cbmV4cG9ydCBjb25zdCBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxDb250ZXh0RGVzY3JpcHRvcj4oe1xuICBhY3RpdmVJbmRleDogLTEsXG4gIGNvbnRhaW5lcklkOiBJRF9QUkVGSVgsXG4gIGRpc2FibGVUcmFuc2Zvcm1zOiBmYWxzZSxcbiAgaXRlbXM6IFtdLFxuICBvdmVySW5kZXg6IC0xLFxuICB1c2VEcmFnT3ZlcmxheTogZmFsc2UsXG4gIHNvcnRlZFJlY3RzOiBbXSxcbiAgc3RyYXRlZ3k6IHJlY3RTb3J0aW5nU3RyYXRlZ3ksXG4gIGRpc2FibGVkOiB7XG4gICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICBkcm9wcGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBTb3J0YWJsZUNvbnRleHQoe1xuICBjaGlsZHJlbixcbiAgaWQsXG4gIGl0ZW1zOiB1c2VyRGVmaW5lZEl0ZW1zLFxuICBzdHJhdGVneSA9IHJlY3RTb3J0aW5nU3RyYXRlZ3ksXG4gIGRpc2FibGVkOiBkaXNhYmxlZFByb3AgPSBmYWxzZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmUsXG4gICAgZHJhZ092ZXJsYXksXG4gICAgZHJvcHBhYmxlUmVjdHMsXG4gICAgb3ZlcixcbiAgICBtZWFzdXJlRHJvcHBhYmxlQ29udGFpbmVycyxcbiAgfSA9IHVzZURuZENvbnRleHQoKTtcbiAgY29uc3QgY29udGFpbmVySWQgPSB1c2VVbmlxdWVJZChJRF9QUkVGSVgsIGlkKTtcbiAgY29uc3QgdXNlRHJhZ092ZXJsYXkgPSBCb29sZWFuKGRyYWdPdmVybGF5LnJlY3QgIT09IG51bGwpO1xuICBjb25zdCBpdGVtcyA9IHVzZU1lbW88VW5pcXVlSWRlbnRpZmllcltdPihcbiAgICAoKSA9PlxuICAgICAgdXNlckRlZmluZWRJdGVtcy5tYXAoKGl0ZW0pID0+XG4gICAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIGl0ZW0gPyBpdGVtLmlkIDogaXRlbVxuICAgICAgKSxcbiAgICBbdXNlckRlZmluZWRJdGVtc11cbiAgKTtcbiAgY29uc3QgaXNEcmFnZ2luZyA9IGFjdGl2ZSAhPSBudWxsO1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGFjdGl2ZSA/IGl0ZW1zLmluZGV4T2YoYWN0aXZlLmlkKSA6IC0xO1xuICBjb25zdCBvdmVySW5kZXggPSBvdmVyID8gaXRlbXMuaW5kZXhPZihvdmVyLmlkKSA6IC0xO1xuICBjb25zdCBwcmV2aW91c0l0ZW1zUmVmID0gdXNlUmVmKGl0ZW1zKTtcbiAgY29uc3QgaXRlbXNIYXZlQ2hhbmdlZCA9ICFpdGVtc0VxdWFsKGl0ZW1zLCBwcmV2aW91c0l0ZW1zUmVmLmN1cnJlbnQpO1xuICBjb25zdCBkaXNhYmxlVHJhbnNmb3JtcyA9XG4gICAgKG92ZXJJbmRleCAhPT0gLTEgJiYgYWN0aXZlSW5kZXggPT09IC0xKSB8fCBpdGVtc0hhdmVDaGFuZ2VkO1xuICBjb25zdCBkaXNhYmxlZCA9IG5vcm1hbGl6ZURpc2FibGVkKGRpc2FibGVkUHJvcCk7XG5cbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGl0ZW1zSGF2ZUNoYW5nZWQgJiYgaXNEcmFnZ2luZykge1xuICAgICAgbWVhc3VyZURyb3BwYWJsZUNvbnRhaW5lcnMoaXRlbXMpO1xuICAgIH1cbiAgfSwgW2l0ZW1zSGF2ZUNoYW5nZWQsIGl0ZW1zLCBpc0RyYWdnaW5nLCBtZWFzdXJlRHJvcHBhYmxlQ29udGFpbmVyc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJldmlvdXNJdGVtc1JlZi5jdXJyZW50ID0gaXRlbXM7XG4gIH0sIFtpdGVtc10pO1xuXG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCk6IENvbnRleHREZXNjcmlwdG9yID0+ICh7XG4gICAgICBhY3RpdmVJbmRleCxcbiAgICAgIGNvbnRhaW5lcklkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlVHJhbnNmb3JtcyxcbiAgICAgIGl0ZW1zLFxuICAgICAgb3ZlckluZGV4LFxuICAgICAgdXNlRHJhZ092ZXJsYXksXG4gICAgICBzb3J0ZWRSZWN0czogZ2V0U29ydGVkUmVjdHMoaXRlbXMsIGRyb3BwYWJsZVJlY3RzKSxcbiAgICAgIHN0cmF0ZWd5LFxuICAgIH0pLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICBhY3RpdmVJbmRleCxcbiAgICAgIGNvbnRhaW5lcklkLFxuICAgICAgZGlzYWJsZWQuZHJhZ2dhYmxlLFxuICAgICAgZGlzYWJsZWQuZHJvcHBhYmxlLFxuICAgICAgZGlzYWJsZVRyYW5zZm9ybXMsXG4gICAgICBpdGVtcyxcbiAgICAgIG92ZXJJbmRleCxcbiAgICAgIGRyb3BwYWJsZVJlY3RzLFxuICAgICAgdXNlRHJhZ092ZXJsYXksXG4gICAgICBzdHJhdGVneSxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIDxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PntjaGlsZHJlbn08L0NvbnRleHQuUHJvdmlkZXI+O1xufVxuIiwiaW1wb3J0IHtDU1N9IGZyb20gJ0BkbmQta2l0L3V0aWxpdGllcyc7XG5cbmltcG9ydCB7YXJyYXlNb3ZlfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFuaW1hdGVMYXlvdXRDaGFuZ2VzLFxuICBOZXdJbmRleEdldHRlcixcbiAgU29ydGFibGVUcmFuc2l0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHROZXdJbmRleEdldHRlcjogTmV3SW5kZXhHZXR0ZXIgPSAoe1xuICBpZCxcbiAgaXRlbXMsXG4gIGFjdGl2ZUluZGV4LFxuICBvdmVySW5kZXgsXG59KSA9PiBhcnJheU1vdmUoaXRlbXMsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXgpLmluZGV4T2YoaWQpO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFuaW1hdGVMYXlvdXRDaGFuZ2VzOiBBbmltYXRlTGF5b3V0Q2hhbmdlcyA9ICh7XG4gIGNvbnRhaW5lcklkLFxuICBpc1NvcnRpbmcsXG4gIHdhc0RyYWdnaW5nLFxuICBpbmRleCxcbiAgaXRlbXMsXG4gIG5ld0luZGV4LFxuICBwcmV2aW91c0l0ZW1zLFxuICBwcmV2aW91c0NvbnRhaW5lcklkLFxuICB0cmFuc2l0aW9uLFxufSkgPT4ge1xuICBpZiAoIXRyYW5zaXRpb24gfHwgIXdhc0RyYWdnaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzSXRlbXMgIT09IGl0ZW1zICYmIGluZGV4ID09PSBuZXdJbmRleCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1NvcnRpbmcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBuZXdJbmRleCAhPT0gaW5kZXggJiYgY29udGFpbmVySWQgPT09IHByZXZpb3VzQ29udGFpbmVySWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRyYW5zaXRpb246IFNvcnRhYmxlVHJhbnNpdGlvbiA9IHtcbiAgZHVyYXRpb246IDIwMCxcbiAgZWFzaW5nOiAnZWFzZScsXG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNpdGlvblByb3BlcnR5ID0gJ3RyYW5zZm9ybSc7XG5cbmV4cG9ydCBjb25zdCBkaXNhYmxlZFRyYW5zaXRpb24gPSBDU1MuVHJhbnNpdGlvbi50b1N0cmluZyh7XG4gIHByb3BlcnR5OiB0cmFuc2l0aW9uUHJvcGVydHksXG4gIGR1cmF0aW9uOiAwLFxuICBlYXNpbmc6ICdsaW5lYXInLFxufSk7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0QXR0cmlidXRlcyA9IHtcbiAgcm9sZURlc2NyaXB0aW9uOiAnc29ydGFibGUnLFxufTtcbiIsImltcG9ydCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2dldENsaWVudFJlY3QsIENsaWVudFJlY3R9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IHtUcmFuc2Zvcm0sIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3R9IGZyb20gJ0BkbmQta2l0L3V0aWxpdGllcyc7XG5cbmludGVyZmFjZSBBcmd1bWVudHMge1xuICByZWN0OiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PENsaWVudFJlY3QgfCBudWxsPjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIGluZGV4OiBudW1iZXI7XG4gIG5vZGU6IFJlYWN0Lk11dGFibGVSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPjtcbn1cblxuLypcbiAqIFdoZW4gdGhlIGluZGV4IG9mIGFuIGl0ZW0gY2hhbmdlcyB3aGlsZSBzb3J0aW5nLFxuICogd2UgbmVlZCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZSB0cmFuc2Zvcm1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZXJpdmVkVHJhbnNmb3JtKHtkaXNhYmxlZCwgaW5kZXgsIG5vZGUsIHJlY3R9OiBBcmd1bWVudHMpIHtcbiAgY29uc3QgW2Rlcml2ZWRUcmFuc2Zvcm0sIHNldERlcml2ZWR0cmFuc2Zvcm1dID0gdXNlU3RhdGU8VHJhbnNmb3JtIHwgbnVsbD4oXG4gICAgbnVsbFxuICApO1xuICBjb25zdCBwcmV2aW91c0luZGV4ID0gdXNlUmVmKGluZGV4KTtcblxuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRpc2FibGVkICYmIGluZGV4ICE9PSBwcmV2aW91c0luZGV4LmN1cnJlbnQgJiYgbm9kZS5jdXJyZW50KSB7XG4gICAgICBjb25zdCBpbml0aWFsID0gcmVjdC5jdXJyZW50O1xuXG4gICAgICBpZiAoaW5pdGlhbCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gZ2V0Q2xpZW50UmVjdChub2RlLmN1cnJlbnQsIHtcbiAgICAgICAgICBpZ25vcmVUcmFuc2Zvcm06IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlbHRhID0ge1xuICAgICAgICAgIHg6IGluaXRpYWwubGVmdCAtIGN1cnJlbnQubGVmdCxcbiAgICAgICAgICB5OiBpbml0aWFsLnRvcCAtIGN1cnJlbnQudG9wLFxuICAgICAgICAgIHNjYWxlWDogaW5pdGlhbC53aWR0aCAvIGN1cnJlbnQud2lkdGgsXG4gICAgICAgICAgc2NhbGVZOiBpbml0aWFsLmhlaWdodCAvIGN1cnJlbnQuaGVpZ2h0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkZWx0YS54IHx8IGRlbHRhLnkpIHtcbiAgICAgICAgICBzZXREZXJpdmVkdHJhbnNmb3JtKGRlbHRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmRleCAhPT0gcHJldmlvdXNJbmRleC5jdXJyZW50KSB7XG4gICAgICBwcmV2aW91c0luZGV4LmN1cnJlbnQgPSBpbmRleDtcbiAgICB9XG4gIH0sIFtkaXNhYmxlZCwgaW5kZXgsIG5vZGUsIHJlY3RdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZXJpdmVkVHJhbnNmb3JtKSB7XG4gICAgICBzZXREZXJpdmVkdHJhbnNmb3JtKG51bGwpO1xuICAgIH1cbiAgfSwgW2Rlcml2ZWRUcmFuc2Zvcm1dKTtcblxuICByZXR1cm4gZGVyaXZlZFRyYW5zZm9ybTtcbn1cbiIsImltcG9ydCB7dXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIHVzZURyYWdnYWJsZSxcbiAgdXNlRHJvcHBhYmxlLFxuICBVc2VEcmFnZ2FibGVBcmd1bWVudHMsXG4gIFVzZURyb3BwYWJsZUFyZ3VtZW50cyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgdHlwZSB7RGF0YX0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQge0NTUywgaXNLZXlib2FyZEV2ZW50LCB1c2VDb21iaW5lZFJlZnN9IGZyb20gJ0BkbmQta2l0L3V0aWxpdGllcyc7XG5cbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgdHlwZSB7RGlzYWJsZWQsIFNvcnRhYmxlRGF0YSwgU29ydGluZ1N0cmF0ZWd5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2lzVmFsaWRJbmRleH0gZnJvbSAnLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIGRlZmF1bHRBbmltYXRlTGF5b3V0Q2hhbmdlcyxcbiAgZGVmYXVsdEF0dHJpYnV0ZXMsXG4gIGRlZmF1bHROZXdJbmRleEdldHRlcixcbiAgZGVmYXVsdFRyYW5zaXRpb24sXG4gIGRpc2FibGVkVHJhbnNpdGlvbixcbiAgdHJhbnNpdGlvblByb3BlcnR5LFxufSBmcm9tICcuL2RlZmF1bHRzJztcbmltcG9ydCB0eXBlIHtcbiAgQW5pbWF0ZUxheW91dENoYW5nZXMsXG4gIE5ld0luZGV4R2V0dGVyLFxuICBTb3J0YWJsZVRyYW5zaXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHt1c2VEZXJpdmVkVHJhbnNmb3JtfSBmcm9tICcuL3V0aWxpdGllcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJndW1lbnRzXG4gIGV4dGVuZHMgT21pdDxVc2VEcmFnZ2FibGVBcmd1bWVudHMsICdkaXNhYmxlZCc+LFxuICAgIFBpY2s8VXNlRHJvcHBhYmxlQXJndW1lbnRzLCAncmVzaXplT2JzZXJ2ZXJDb25maWcnPiB7XG4gIGFuaW1hdGVMYXlvdXRDaGFuZ2VzPzogQW5pbWF0ZUxheW91dENoYW5nZXM7XG4gIGRpc2FibGVkPzogYm9vbGVhbiB8IERpc2FibGVkO1xuICBnZXROZXdJbmRleD86IE5ld0luZGV4R2V0dGVyO1xuICBzdHJhdGVneT86IFNvcnRpbmdTdHJhdGVneTtcbiAgdHJhbnNpdGlvbj86IFNvcnRhYmxlVHJhbnNpdGlvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTb3J0YWJsZSh7XG4gIGFuaW1hdGVMYXlvdXRDaGFuZ2VzID0gZGVmYXVsdEFuaW1hdGVMYXlvdXRDaGFuZ2VzLFxuICBhdHRyaWJ1dGVzOiB1c2VyRGVmaW5lZEF0dHJpYnV0ZXMsXG4gIGRpc2FibGVkOiBsb2NhbERpc2FibGVkLFxuICBkYXRhOiBjdXN0b21EYXRhLFxuICBnZXROZXdJbmRleCA9IGRlZmF1bHROZXdJbmRleEdldHRlcixcbiAgaWQsXG4gIHN0cmF0ZWd5OiBsb2NhbFN0cmF0ZWd5LFxuICByZXNpemVPYnNlcnZlckNvbmZpZyxcbiAgdHJhbnNpdGlvbiA9IGRlZmF1bHRUcmFuc2l0aW9uLFxufTogQXJndW1lbnRzKSB7XG4gIGNvbnN0IHtcbiAgICBpdGVtcyxcbiAgICBjb250YWluZXJJZCxcbiAgICBhY3RpdmVJbmRleCxcbiAgICBkaXNhYmxlZDogZ2xvYmFsRGlzYWJsZWQsXG4gICAgZGlzYWJsZVRyYW5zZm9ybXMsXG4gICAgc29ydGVkUmVjdHMsXG4gICAgb3ZlckluZGV4LFxuICAgIHVzZURyYWdPdmVybGF5LFxuICAgIHN0cmF0ZWd5OiBnbG9iYWxTdHJhdGVneSxcbiAgfSA9IHVzZUNvbnRleHQoQ29udGV4dCk7XG4gIGNvbnN0IGRpc2FibGVkOiBEaXNhYmxlZCA9IG5vcm1hbGl6ZUxvY2FsRGlzYWJsZWQoXG4gICAgbG9jYWxEaXNhYmxlZCxcbiAgICBnbG9iYWxEaXNhYmxlZFxuICApO1xuICBjb25zdCBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaWQpO1xuICBjb25zdCBkYXRhID0gdXNlTWVtbzxTb3J0YWJsZURhdGEgJiBEYXRhPihcbiAgICAoKSA9PiAoe3NvcnRhYmxlOiB7Y29udGFpbmVySWQsIGluZGV4LCBpdGVtc30sIC4uLmN1c3RvbURhdGF9KSxcbiAgICBbY29udGFpbmVySWQsIGN1c3RvbURhdGEsIGluZGV4LCBpdGVtc11cbiAgKTtcbiAgY29uc3QgaXRlbXNBZnRlckN1cnJlbnRTb3J0YWJsZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gaXRlbXMuc2xpY2UoaXRlbXMuaW5kZXhPZihpZCkpLFxuICAgIFtpdGVtcywgaWRdXG4gICk7XG4gIGNvbnN0IHtcbiAgICByZWN0LFxuICAgIG5vZGUsXG4gICAgaXNPdmVyLFxuICAgIHNldE5vZGVSZWY6IHNldERyb3BwYWJsZU5vZGVSZWYsXG4gIH0gPSB1c2VEcm9wcGFibGUoe1xuICAgIGlkLFxuICAgIGRhdGEsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLmRyb3BwYWJsZSxcbiAgICByZXNpemVPYnNlcnZlckNvbmZpZzoge1xuICAgICAgdXBkYXRlTWVhc3VyZW1lbnRzRm9yOiBpdGVtc0FmdGVyQ3VycmVudFNvcnRhYmxlLFxuICAgICAgLi4ucmVzaXplT2JzZXJ2ZXJDb25maWcsXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmUsXG4gICAgYWN0aXZhdG9yRXZlbnQsXG4gICAgYWN0aXZlTm9kZVJlY3QsXG4gICAgYXR0cmlidXRlcyxcbiAgICBzZXROb2RlUmVmOiBzZXREcmFnZ2FibGVOb2RlUmVmLFxuICAgIGxpc3RlbmVycyxcbiAgICBpc0RyYWdnaW5nLFxuICAgIG92ZXIsXG4gICAgc2V0QWN0aXZhdG9yTm9kZVJlZixcbiAgICB0cmFuc2Zvcm0sXG4gIH0gPSB1c2VEcmFnZ2FibGUoe1xuICAgIGlkLFxuICAgIGRhdGEsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsXG4gICAgICAuLi51c2VyRGVmaW5lZEF0dHJpYnV0ZXMsXG4gICAgfSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQuZHJhZ2dhYmxlLFxuICB9KTtcbiAgY29uc3Qgc2V0Tm9kZVJlZiA9IHVzZUNvbWJpbmVkUmVmcyhzZXREcm9wcGFibGVOb2RlUmVmLCBzZXREcmFnZ2FibGVOb2RlUmVmKTtcbiAgY29uc3QgaXNTb3J0aW5nID0gQm9vbGVhbihhY3RpdmUpO1xuICBjb25zdCBkaXNwbGFjZUl0ZW0gPVxuICAgIGlzU29ydGluZyAmJlxuICAgICFkaXNhYmxlVHJhbnNmb3JtcyAmJlxuICAgIGlzVmFsaWRJbmRleChhY3RpdmVJbmRleCkgJiZcbiAgICBpc1ZhbGlkSW5kZXgob3ZlckluZGV4KTtcbiAgY29uc3Qgc2hvdWxkRGlzcGxhY2VEcmFnU291cmNlID0gIXVzZURyYWdPdmVybGF5ICYmIGlzRHJhZ2dpbmc7XG4gIGNvbnN0IGRyYWdTb3VyY2VEaXNwbGFjZW1lbnQgPVxuICAgIHNob3VsZERpc3BsYWNlRHJhZ1NvdXJjZSAmJiBkaXNwbGFjZUl0ZW0gPyB0cmFuc2Zvcm0gOiBudWxsO1xuICBjb25zdCBzdHJhdGVneSA9IGxvY2FsU3RyYXRlZ3kgPz8gZ2xvYmFsU3RyYXRlZ3k7XG4gIGNvbnN0IGZpbmFsVHJhbnNmb3JtID0gZGlzcGxhY2VJdGVtXG4gICAgPyBkcmFnU291cmNlRGlzcGxhY2VtZW50ID8/XG4gICAgICBzdHJhdGVneSh7XG4gICAgICAgIHJlY3RzOiBzb3J0ZWRSZWN0cyxcbiAgICAgICAgYWN0aXZlTm9kZVJlY3QsXG4gICAgICAgIGFjdGl2ZUluZGV4LFxuICAgICAgICBvdmVySW5kZXgsXG4gICAgICAgIGluZGV4LFxuICAgICAgfSlcbiAgICA6IG51bGw7XG4gIGNvbnN0IG5ld0luZGV4ID1cbiAgICBpc1ZhbGlkSW5kZXgoYWN0aXZlSW5kZXgpICYmIGlzVmFsaWRJbmRleChvdmVySW5kZXgpXG4gICAgICA/IGdldE5ld0luZGV4KHtpZCwgaXRlbXMsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXh9KVxuICAgICAgOiBpbmRleDtcbiAgY29uc3QgYWN0aXZlSWQgPSBhY3RpdmU/LmlkO1xuICBjb25zdCBwcmV2aW91cyA9IHVzZVJlZih7XG4gICAgYWN0aXZlSWQsXG4gICAgaXRlbXMsXG4gICAgbmV3SW5kZXgsXG4gICAgY29udGFpbmVySWQsXG4gIH0pO1xuICBjb25zdCBpdGVtc0hhdmVDaGFuZ2VkID0gaXRlbXMgIT09IHByZXZpb3VzLmN1cnJlbnQuaXRlbXM7XG4gIGNvbnN0IHNob3VsZEFuaW1hdGVMYXlvdXRDaGFuZ2VzID0gYW5pbWF0ZUxheW91dENoYW5nZXMoe1xuICAgIGFjdGl2ZSxcbiAgICBjb250YWluZXJJZCxcbiAgICBpc0RyYWdnaW5nLFxuICAgIGlzU29ydGluZyxcbiAgICBpZCxcbiAgICBpbmRleCxcbiAgICBpdGVtcyxcbiAgICBuZXdJbmRleDogcHJldmlvdXMuY3VycmVudC5uZXdJbmRleCxcbiAgICBwcmV2aW91c0l0ZW1zOiBwcmV2aW91cy5jdXJyZW50Lml0ZW1zLFxuICAgIHByZXZpb3VzQ29udGFpbmVySWQ6IHByZXZpb3VzLmN1cnJlbnQuY29udGFpbmVySWQsXG4gICAgdHJhbnNpdGlvbixcbiAgICB3YXNEcmFnZ2luZzogcHJldmlvdXMuY3VycmVudC5hY3RpdmVJZCAhPSBudWxsLFxuICB9KTtcblxuICBjb25zdCBkZXJpdmVkVHJhbnNmb3JtID0gdXNlRGVyaXZlZFRyYW5zZm9ybSh7XG4gICAgZGlzYWJsZWQ6ICFzaG91bGRBbmltYXRlTGF5b3V0Q2hhbmdlcyxcbiAgICBpbmRleCxcbiAgICBub2RlLFxuICAgIHJlY3QsXG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzU29ydGluZyAmJiBwcmV2aW91cy5jdXJyZW50Lm5ld0luZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgcHJldmlvdXMuY3VycmVudC5uZXdJbmRleCA9IG5ld0luZGV4O1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXJJZCAhPT0gcHJldmlvdXMuY3VycmVudC5jb250YWluZXJJZCkge1xuICAgICAgcHJldmlvdXMuY3VycmVudC5jb250YWluZXJJZCA9IGNvbnRhaW5lcklkO1xuICAgIH1cblxuICAgIGlmIChpdGVtcyAhPT0gcHJldmlvdXMuY3VycmVudC5pdGVtcykge1xuICAgICAgcHJldmlvdXMuY3VycmVudC5pdGVtcyA9IGl0ZW1zO1xuICAgIH1cbiAgfSwgW2lzU29ydGluZywgbmV3SW5kZXgsIGNvbnRhaW5lcklkLCBpdGVtc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFjdGl2ZUlkID09PSBwcmV2aW91cy5jdXJyZW50LmFjdGl2ZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZUlkICE9IG51bGwgJiYgcHJldmlvdXMuY3VycmVudC5hY3RpdmVJZCA9PSBudWxsKSB7XG4gICAgICBwcmV2aW91cy5jdXJyZW50LmFjdGl2ZUlkID0gYWN0aXZlSWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBwcmV2aW91cy5jdXJyZW50LmFjdGl2ZUlkID0gYWN0aXZlSWQ7XG4gICAgfSwgNTApO1xuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICB9LCBbYWN0aXZlSWRdKTtcblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZSxcbiAgICBhY3RpdmVJbmRleCxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGRhdGEsXG4gICAgcmVjdCxcbiAgICBpbmRleCxcbiAgICBuZXdJbmRleCxcbiAgICBpdGVtcyxcbiAgICBpc092ZXIsXG4gICAgaXNTb3J0aW5nLFxuICAgIGlzRHJhZ2dpbmcsXG4gICAgbGlzdGVuZXJzLFxuICAgIG5vZGUsXG4gICAgb3ZlckluZGV4LFxuICAgIG92ZXIsXG4gICAgc2V0Tm9kZVJlZixcbiAgICBzZXRBY3RpdmF0b3JOb2RlUmVmLFxuICAgIHNldERyb3BwYWJsZU5vZGVSZWYsXG4gICAgc2V0RHJhZ2dhYmxlTm9kZVJlZixcbiAgICB0cmFuc2Zvcm06IGRlcml2ZWRUcmFuc2Zvcm0gPz8gZmluYWxUcmFuc2Zvcm0sXG4gICAgdHJhbnNpdGlvbjogZ2V0VHJhbnNpdGlvbigpLFxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldFRyYW5zaXRpb24oKSB7XG4gICAgaWYgKFxuICAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSB0cmFuc2l0aW9ucyBmb3IgYSBzaW5nbGUgZnJhbWUgdG8gc2V0IHVwIGRlcml2ZWQgdHJhbnNmb3Jtc1xuICAgICAgZGVyaXZlZFRyYW5zZm9ybSB8fFxuICAgICAgLy8gT3IgdG8gcHJldmVudCBpdGVtcyBqdW1waW5nIHRvIGJhY2sgdG8gdGhlaXIgXCJuZXdcIiBwb3NpdGlvbiB3aGVuIGl0ZW1zIGNoYW5nZVxuICAgICAgKGl0ZW1zSGF2ZUNoYW5nZWQgJiYgcHJldmlvdXMuY3VycmVudC5uZXdJbmRleCA9PT0gaW5kZXgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGlzYWJsZWRUcmFuc2l0aW9uO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChzaG91bGREaXNwbGFjZURyYWdTb3VyY2UgJiYgIWlzS2V5Ym9hcmRFdmVudChhY3RpdmF0b3JFdmVudCkpIHx8XG4gICAgICAhdHJhbnNpdGlvblxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoaXNTb3J0aW5nIHx8IHNob3VsZEFuaW1hdGVMYXlvdXRDaGFuZ2VzKSB7XG4gICAgICByZXR1cm4gQ1NTLlRyYW5zaXRpb24udG9TdHJpbmcoe1xuICAgICAgICAuLi50cmFuc2l0aW9uLFxuICAgICAgICBwcm9wZXJ0eTogdHJhbnNpdGlvblByb3BlcnR5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhbERpc2FibGVkKFxuICBsb2NhbERpc2FibGVkOiBBcmd1bWVudHNbJ2Rpc2FibGVkJ10sXG4gIGdsb2JhbERpc2FibGVkOiBEaXNhYmxlZFxuKSB7XG4gIGlmICh0eXBlb2YgbG9jYWxEaXNhYmxlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnYWJsZTogbG9jYWxEaXNhYmxlZCxcbiAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICBkcm9wcGFibGU6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRyYWdnYWJsZTogbG9jYWxEaXNhYmxlZD8uZHJhZ2dhYmxlID8/IGdsb2JhbERpc2FibGVkLmRyYWdnYWJsZSxcbiAgICBkcm9wcGFibGU6IGxvY2FsRGlzYWJsZWQ/LmRyb3BwYWJsZSA/PyBnbG9iYWxEaXNhYmxlZC5kcm9wcGFibGUsXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gIEFjdGl2ZSxcbiAgRGF0YSxcbiAgRHJvcHBhYmxlQ29udGFpbmVyLFxuICBEcmFnZ2FibGVOb2RlLFxuICBPdmVyLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcblxuaW1wb3J0IHR5cGUge1NvcnRhYmxlRGF0YX0gZnJvbSAnLi9kYXRhJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1NvcnRhYmxlRGF0YTxcbiAgVCBleHRlbmRzIEFjdGl2ZSB8IE92ZXIgfCBEcmFnZ2FibGVOb2RlIHwgRHJvcHBhYmxlQ29udGFpbmVyXG4+KFxuICBlbnRyeTogVCB8IG51bGwgfCB1bmRlZmluZWRcbik6IGVudHJ5IGlzIFQgJiB7ZGF0YToge2N1cnJlbnQ6IERhdGE8U29ydGFibGVEYXRhPn19IHtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBlbnRyeS5kYXRhLmN1cnJlbnQ7XG5cbiAgaWYgKFxuICAgIGRhdGEgJiZcbiAgICAnc29ydGFibGUnIGluIGRhdGEgJiZcbiAgICB0eXBlb2YgZGF0YS5zb3J0YWJsZSA9PT0gJ29iamVjdCcgJiZcbiAgICAnY29udGFpbmVySWQnIGluIGRhdGEuc29ydGFibGUgJiZcbiAgICAnaXRlbXMnIGluIGRhdGEuc29ydGFibGUgJiZcbiAgICAnaW5kZXgnIGluIGRhdGEuc29ydGFibGVcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQge1xuICBjbG9zZXN0Q29ybmVycyxcbiAgZ2V0U2Nyb2xsYWJsZUFuY2VzdG9ycyxcbiAgZ2V0Rmlyc3RDb2xsaXNpb24sXG4gIEtleWJvYXJkQ29kZSxcbiAgRHJvcHBhYmxlQ29udGFpbmVyLFxuICBLZXlib2FyZENvb3JkaW5hdGVHZXR0ZXIsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IHtzdWJ0cmFjdH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcblxuaW1wb3J0IHtoYXNTb3J0YWJsZURhdGF9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuY29uc3QgZGlyZWN0aW9uczogc3RyaW5nW10gPSBbXG4gIEtleWJvYXJkQ29kZS5Eb3duLFxuICBLZXlib2FyZENvZGUuUmlnaHQsXG4gIEtleWJvYXJkQ29kZS5VcCxcbiAgS2V5Ym9hcmRDb2RlLkxlZnQsXG5dO1xuXG5leHBvcnQgY29uc3Qgc29ydGFibGVLZXlib2FyZENvb3JkaW5hdGVzOiBLZXlib2FyZENvb3JkaW5hdGVHZXR0ZXIgPSAoXG4gIGV2ZW50LFxuICB7XG4gICAgY29udGV4dDoge1xuICAgICAgYWN0aXZlLFxuICAgICAgY29sbGlzaW9uUmVjdCxcbiAgICAgIGRyb3BwYWJsZVJlY3RzLFxuICAgICAgZHJvcHBhYmxlQ29udGFpbmVycyxcbiAgICAgIG92ZXIsXG4gICAgICBzY3JvbGxhYmxlQW5jZXN0b3JzLFxuICAgIH0sXG4gIH1cbikgPT4ge1xuICBpZiAoZGlyZWN0aW9ucy5pbmNsdWRlcyhldmVudC5jb2RlKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIWFjdGl2ZSB8fCAhY29sbGlzaW9uUmVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkQ29udGFpbmVyczogRHJvcHBhYmxlQ29udGFpbmVyW10gPSBbXTtcblxuICAgIGRyb3BwYWJsZUNvbnRhaW5lcnMuZ2V0RW5hYmxlZCgpLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5Py5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlY3QgPSBkcm9wcGFibGVSZWN0cy5nZXQoZW50cnkuaWQpO1xuXG4gICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgY2FzZSBLZXlib2FyZENvZGUuRG93bjpcbiAgICAgICAgICBpZiAoY29sbGlzaW9uUmVjdC50b3AgPCByZWN0LnRvcCkge1xuICAgICAgICAgICAgZmlsdGVyZWRDb250YWluZXJzLnB1c2goZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlib2FyZENvZGUuVXA6XG4gICAgICAgICAgaWYgKGNvbGxpc2lvblJlY3QudG9wID4gcmVjdC50b3ApIHtcbiAgICAgICAgICAgIGZpbHRlcmVkQ29udGFpbmVycy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Ym9hcmRDb2RlLkxlZnQ6XG4gICAgICAgICAgaWYgKGNvbGxpc2lvblJlY3QubGVmdCA+IHJlY3QubGVmdCkge1xuICAgICAgICAgICAgZmlsdGVyZWRDb250YWluZXJzLnB1c2goZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlib2FyZENvZGUuUmlnaHQ6XG4gICAgICAgICAgaWYgKGNvbGxpc2lvblJlY3QubGVmdCA8IHJlY3QubGVmdCkge1xuICAgICAgICAgICAgZmlsdGVyZWRDb250YWluZXJzLnB1c2goZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBjbG9zZXN0Q29ybmVycyh7XG4gICAgICBhY3RpdmUsXG4gICAgICBjb2xsaXNpb25SZWN0OiBjb2xsaXNpb25SZWN0LFxuICAgICAgZHJvcHBhYmxlUmVjdHMsXG4gICAgICBkcm9wcGFibGVDb250YWluZXJzOiBmaWx0ZXJlZENvbnRhaW5lcnMsXG4gICAgICBwb2ludGVyQ29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSk7XG4gICAgbGV0IGNsb3Nlc3RJZCA9IGdldEZpcnN0Q29sbGlzaW9uKGNvbGxpc2lvbnMsICdpZCcpO1xuXG4gICAgaWYgKGNsb3Nlc3RJZCA9PT0gb3Zlcj8uaWQgJiYgY29sbGlzaW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICBjbG9zZXN0SWQgPSBjb2xsaXNpb25zWzFdLmlkO1xuICAgIH1cblxuICAgIGlmIChjbG9zZXN0SWQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgYWN0aXZlRHJvcHBhYmxlID0gZHJvcHBhYmxlQ29udGFpbmVycy5nZXQoYWN0aXZlLmlkKTtcbiAgICAgIGNvbnN0IG5ld0Ryb3BwYWJsZSA9IGRyb3BwYWJsZUNvbnRhaW5lcnMuZ2V0KGNsb3Nlc3RJZCk7XG4gICAgICBjb25zdCBuZXdSZWN0ID0gbmV3RHJvcHBhYmxlID8gZHJvcHBhYmxlUmVjdHMuZ2V0KG5ld0Ryb3BwYWJsZS5pZCkgOiBudWxsO1xuICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ld0Ryb3BwYWJsZT8ubm9kZS5jdXJyZW50O1xuXG4gICAgICBpZiAobmV3Tm9kZSAmJiBuZXdSZWN0ICYmIGFjdGl2ZURyb3BwYWJsZSAmJiBuZXdEcm9wcGFibGUpIHtcbiAgICAgICAgY29uc3QgbmV3U2Nyb2xsQW5jZXN0b3JzID0gZ2V0U2Nyb2xsYWJsZUFuY2VzdG9ycyhuZXdOb2RlKTtcbiAgICAgICAgY29uc3QgaGFzRGlmZmVyZW50U2Nyb2xsQW5jZXN0b3JzID0gbmV3U2Nyb2xsQW5jZXN0b3JzLnNvbWUoXG4gICAgICAgICAgKGVsZW1lbnQsIGluZGV4KSA9PiBzY3JvbGxhYmxlQW5jZXN0b3JzW2luZGV4XSAhPT0gZWxlbWVudFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBoYXNTYW1lQ29udGFpbmVyID0gaXNTYW1lQ29udGFpbmVyKGFjdGl2ZURyb3BwYWJsZSwgbmV3RHJvcHBhYmxlKTtcbiAgICAgICAgY29uc3QgaXNBZnRlckFjdGl2ZSA9IGlzQWZ0ZXIoYWN0aXZlRHJvcHBhYmxlLCBuZXdEcm9wcGFibGUpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgICAgIGhhc0RpZmZlcmVudFNjcm9sbEFuY2VzdG9ycyB8fCAhaGFzU2FtZUNvbnRhaW5lclxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB4OiBpc0FmdGVyQWN0aXZlID8gY29sbGlzaW9uUmVjdC53aWR0aCAtIG5ld1JlY3Qud2lkdGggOiAwLFxuICAgICAgICAgICAgICAgIHk6IGlzQWZ0ZXJBY3RpdmUgPyBjb2xsaXNpb25SZWN0LmhlaWdodCAtIG5ld1JlY3QuaGVpZ2h0IDogMCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVjdENvb3JkaW5hdGVzID0ge1xuICAgICAgICAgIHg6IG5ld1JlY3QubGVmdCxcbiAgICAgICAgICB5OiBuZXdSZWN0LnRvcCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBuZXdDb29yZGluYXRlcyA9XG4gICAgICAgICAgb2Zmc2V0LnggJiYgb2Zmc2V0LnlcbiAgICAgICAgICAgID8gcmVjdENvb3JkaW5hdGVzXG4gICAgICAgICAgICA6IHN1YnRyYWN0KHJlY3RDb29yZGluYXRlcywgb2Zmc2V0KTtcblxuICAgICAgICByZXR1cm4gbmV3Q29vcmRpbmF0ZXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIGlzU2FtZUNvbnRhaW5lcihhOiBEcm9wcGFibGVDb250YWluZXIsIGI6IERyb3BwYWJsZUNvbnRhaW5lcikge1xuICBpZiAoIWhhc1NvcnRhYmxlRGF0YShhKSB8fCAhaGFzU29ydGFibGVEYXRhKGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBhLmRhdGEuY3VycmVudC5zb3J0YWJsZS5jb250YWluZXJJZCA9PT0gYi5kYXRhLmN1cnJlbnQuc29ydGFibGUuY29udGFpbmVySWRcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNBZnRlcihhOiBEcm9wcGFibGVDb250YWluZXIsIGI6IERyb3BwYWJsZUNvbnRhaW5lcikge1xuICBpZiAoIWhhc1NvcnRhYmxlRGF0YShhKSB8fCAhaGFzU29ydGFibGVEYXRhKGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpc1NhbWVDb250YWluZXIoYSwgYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gYS5kYXRhLmN1cnJlbnQuc29ydGFibGUuaW5kZXggPCBiLmRhdGEuY3VycmVudC5zb3J0YWJsZS5pbmRleDtcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBEcmFnRW5kRXZlbnQsIERyYWdTdGFydEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcblxuaW1wb3J0IHtcbiAgY2xvc2VzdENlbnRlcixcbiAgRG5kQ29udGV4dCxcbiAgS2V5Ym9hcmRTZW5zb3IsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgdXNlRHJvcHBhYmxlLFxuICB1c2VTZW5zb3IsXG4gIHVzZVNlbnNvcnMsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHNvcnRhYmxlS2V5Ym9hcmRDb29yZGluYXRlcyB9IGZyb20gJ0BkbmQta2l0L3NvcnRhYmxlJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VJZCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IHsgUHJvcHMgfVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlU29ydGFibGU6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGlkcywgb25EcmFnRW5kLCBvbkRyYWdTdGFydCB9ID0gcHJvcHNcblxuICBjb25zdCBkbmRDb250ZXh0SUQgPSB1c2VJZCgpXG4gIGNvbnN0IHNvcnRhYmxlQ29udGV4dElEID0gdXNlSWQoKVxuXG4gIGNvbnN0IHsgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZDogZG5kQ29udGV4dElELFxuICB9KVxuXG4gIGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKFxuICAgIHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuICAgICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgICAgZGlzdGFuY2U6IDUsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuICAgICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgICAgZGVsYXk6IDIwMCxcbiAgICAgICAgdG9sZXJhbmNlOiA1LFxuICAgICAgfSxcbiAgICB9KSxcbiAgICB1c2VTZW5zb3IoS2V5Ym9hcmRTZW5zb3IsIHtcbiAgICAgIGNvb3JkaW5hdGVHZXR0ZXI6IHNvcnRhYmxlS2V5Ym9hcmRDb29yZGluYXRlcyxcbiAgICB9KSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cbiAgICAgIGV2ZW50LmFjdGl2YXRvckV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgIGlmICghYWN0aXZlIHx8ICFvdmVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uRHJhZ0VuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbkRyYWdFbmQoe1xuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIG1vdmVGcm9tSW5kZXg6IGlkcy5maW5kSW5kZXgoKF9pZCkgPT4gX2lkID09PSBhY3RpdmUuaWQpLFxuICAgICAgICAgIG1vdmVUb0luZGV4OiBpZHMuZmluZEluZGV4KChfaWQpID0+IF9pZCA9PT0gb3Zlci5pZCksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25EcmFnRW5kLCBpZHNdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cbiAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uRHJhZ1N0YXJ0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9uRHJhZ1N0YXJ0KHsgaWQ6IGFjdGl2ZS5pZCwgZXZlbnQgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkRyYWdTdGFydF0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxEbmRDb250ZXh0XG4gICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAvLyBQcm92aWRlIHN0YWJsZSBJRCB0byBmaXggaHlkcmF0aW9uIGlzc3VlczogaHR0cHM6Ly9naXRodWIuY29tL2NsYXVkZXJpYy9kbmQta2l0L2lzc3Vlcy85MjZcbiAgICAgIGlkPXtkbmRDb250ZXh0SUR9XG4gICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgc2Vuc29ycz17c2Vuc29yc31cbiAgICA+XG4gICAgICA8U29ydGFibGVDb250ZXh0XG4gICAgICAgIC8vIFByb3ZpZGUgc3RhYmxlIElEIHRvIGZpeCBoeWRyYXRpb24gaXNzdWVzOiBodHRwczovL2dpdGh1Yi5jb20vY2xhdWRlcmljL2RuZC1raXQvaXNzdWVzLzkyNlxuICAgICAgICBpZD17c29ydGFibGVDb250ZXh0SUR9XG4gICAgICAgIGl0ZW1zPXtpZHN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHJlZj17c2V0Tm9kZVJlZn0+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU29ydGFibGVDb250ZXh0PlxuICAgIDwvRG5kQ29udGV4dD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IEkxOG5DbGllbnQgfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdlcnJvci1waWxsJ1xuXG5leHBvcnQgdHlwZSBFcnJvclBpbGxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGNvdW50OiBudW1iZXJcbiAgaTE4bjogSTE4bkNsaWVudFxuICB3aXRoTWVzc2FnZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IEVycm9yUGlsbDogUmVhY3QuRkM8RXJyb3JQaWxsUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBjb3VudCwgaTE4biwgd2l0aE1lc3NhZ2UgfSA9IHByb3BzXG4gIGNvbnN0IGxlc3NUaGFuM0NoYXJzID0gIXdpdGhNZXNzYWdlICYmIGNvdW50IDwgOTlcblxuICBjb25zdCBjbGFzc2VzID0gW2Jhc2VDbGFzcywgbGVzc1RoYW4zQ2hhcnMgJiYgYCR7YmFzZUNsYXNzfS0tZml4ZWQtd2lkdGhgLCBjbGFzc05hbWUgJiYgY2xhc3NOYW1lXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXN9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb3VudGB9Pntjb3VudH08L3NwYW4+XG4gICAgICAgIHt3aXRoTWVzc2FnZSAmJiBgICR7Y291bnQgPiAxID8gaTE4bi50KCdnZW5lcmFsOmVycm9ycycpIDogaTE4bi50KCdnZW5lcmFsOmVycm9yJyl9YH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgR2VuZXJpY0Rlc2NyaXB0aW9uUHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZpZWxkLWRlc2NyaXB0aW9uJ1xuXG5leHBvcnQgY29uc3QgRmllbGREZXNjcmlwdGlvbjogUmVhY3QuRkM8R2VuZXJpY0Rlc2NyaXB0aW9uUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBkZXNjcmlwdGlvbiwgbWFyZ2luUGxhY2VtZW50LCBwYXRoIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgYGZpZWxkLWRlc2NyaXB0aW9uLSR7cGF0aD8ucmVwbGFjZSgvXFwuL2csICdfXycpfWAsXG4gICAgICAgICAgbWFyZ2luUGxhY2VtZW50ICYmIGAke2Jhc2VDbGFzc30tLW1hcmdpbi0ke21hcmdpblBsYWNlbWVudH1gLFxuICAgICAgICBdXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICA+XG4gICAgICAgIHtnZXRUcmFuc2xhdGlvbihkZXNjcmlwdGlvbiwgaTE4bil9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0Vycm9yUHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Ub29sdGlwL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybUZpZWxkcywgdXNlRm9ybVN1Ym1pdHRlZCB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZmllbGQtZXJyb3InXG5cbmV4cG9ydCBjb25zdCBGaWVsZEVycm9yOiBSZWFjdC5GQzxHZW5lcmljRXJyb3JQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduQ2FyZXQgPSAncmlnaHQnLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2VGcm9tUHJvcHMsXG4gICAgcGF0aCxcbiAgICBzaG93RXJyb3I6IHNob3dFcnJvckZyb21Qcm9wcyxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgaGFzU3VibWl0dGVkID0gdXNlRm9ybVN1Ym1pdHRlZCgpXG4gIGNvbnN0IGZpZWxkID0gdXNlRm9ybUZpZWxkcygoW2ZpZWxkc10pID0+IChmaWVsZHMgJiYgZmllbGRzPy5bcGF0aF0pIHx8IG51bGwpXG5cbiAgY29uc3QgeyBlcnJvck1lc3NhZ2UsIHZhbGlkIH0gPSBmaWVsZCB8fCB7fVxuXG4gIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlRnJvbVByb3BzIHx8IGVycm9yTWVzc2FnZVxuICBjb25zdCBzaG93TWVzc2FnZSA9IHNob3dFcnJvckZyb21Qcm9wcyB8fCAoaGFzU3VibWl0dGVkICYmIHZhbGlkID09PSBmYWxzZSlcblxuICBpZiAoc2hvd01lc3NhZ2UgJiYgbWVzc2FnZT8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb29sdGlwIGFsaWduQ2FyZXQ9e2FsaWduQ2FyZXR9IGNsYXNzTmFtZT17YmFzZUNsYXNzfSBkZWxheT17MH0gc3RhdGljUG9zaXRpb25pbmc+XG4gICAgICAgIHttZXNzYWdlfVxuICAgICAgPC9Ub29sdGlwPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljTGFiZWxQcm9wcyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlRWRpdERlcHRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGdlbmVyYXRlRmllbGRJRCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9nZW5lcmF0ZUZpZWxkSUQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IEZpZWxkTGFiZWw6IFJlYWN0LkZDPEdlbmVyaWNMYWJlbFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgYXM6IEVsZW1lbnRGcm9tUHJvcHMgPSAnbGFiZWwnLFxuICAgIGhpZGVMb2NhbGUgPSBmYWxzZSxcbiAgICBodG1sRm9yOiBodG1sRm9yRnJvbVByb3BzLFxuICAgIGxhYmVsLFxuICAgIGxvY2FsaXplZCA9IGZhbHNlLFxuICAgIHBhdGgsXG4gICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICB1bnN0eWxlZCA9IGZhbHNlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IHV1aWQgfSA9IHVzZUZvcm0oKVxuICBjb25zdCBlZGl0RGVwdGggPSB1c2VFZGl0RGVwdGgoKVxuXG4gIGNvbnN0IGh0bWxGb3IgPSBodG1sRm9yRnJvbVByb3BzIHx8IGdlbmVyYXRlRmllbGRJRChwYXRoLCBlZGl0RGVwdGgsIHV1aWQpXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY29kZSwgbGFiZWw6IGxvY2FsTGFiZWwgfSA9IHVzZUxvY2FsZSgpXG5cbiAgY29uc3QgRWxlbWVudCA9XG4gICAgRWxlbWVudEZyb21Qcm9wcyA9PT0gJ2xhYmVsJyA/IChodG1sRm9yID8gJ2xhYmVsJyA6ICdzcGFuJykgOiBFbGVtZW50RnJvbVByb3BzIHx8ICdzcGFuJ1xuXG4gIGlmIChsYWJlbCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RWxlbWVudCBjbGFzc05hbWU9e2BmaWVsZC1sYWJlbCR7dW5zdHlsZWQgPyAnIHVuc3R5bGVkJyA6ICcnfWB9IGh0bWxGb3I9e2h0bWxGb3J9PlxuICAgICAgICB7Z2V0VHJhbnNsYXRpb24obGFiZWwsIGkxOG4pfVxuICAgICAgICB7cmVxdWlyZWQgJiYgIXVuc3R5bGVkICYmIDxzcGFuIGNsYXNzTmFtZT1cInJlcXVpcmVkXCI+Kjwvc3Bhbj59XG4gICAgICAgIHtsb2NhbGl6ZWQgJiYgIWhpZGVMb2NhbGUgJiYgKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxvY2FsaXplZFwiPlxuICAgICAgICAgICAgJm1kYXNoOyB7dHlwZW9mIGxvY2FsTGFiZWwgPT09ICdzdHJpbmcnID8gbG9jYWxMYWJlbCA6IGNvZGV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9FbGVtZW50PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IEVkaXREZXB0aENvbnRleHQgPSBjcmVhdGVDb250ZXh0KDApXG5cbmV4cG9ydCBjb25zdCBFZGl0RGVwdGhQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCBwYXJlbnREZXB0aCA9IHVzZUVkaXREZXB0aCgpXG4gIGNvbnN0IGRlcHRoID0gcGFyZW50RGVwdGggKyAxXG5cbiAgcmV0dXJuIDxFZGl0RGVwdGhDb250ZXh0IHZhbHVlPXtkZXB0aH0+e2NoaWxkcmVufTwvRWRpdERlcHRoQ29udGV4dD5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUVkaXREZXB0aCA9ICgpOiBudW1iZXIgPT4gdXNlKEVkaXREZXB0aENvbnRleHQpXG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBMb2NhbGUgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGZpbmRMb2NhbGVGcm9tQ29kZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9maW5kTG9jYWxlRnJvbUNvZGUuanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uL0NvbmZpZy9pbmRleC5qcydcblxuY29uc3QgTG9jYWxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30gYXMgTG9jYWxlKVxuXG5leHBvcnQgY29uc3QgTG9jYWxlTG9hZGluZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgbG9jYWxlSXNMb2FkaW5nOiBmYWxzZSxcbiAgc2V0TG9jYWxlSXNMb2FkaW5nOiAoXzogYm9vbGVhbikgPT4gdW5kZWZpbmVkLFxufSlcblxuY29uc3QgZmV0Y2hQcmVmZXJlbmNlcyA9IGFzeW5jIDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmc+KFxuICBrZXk6IHN0cmluZyxcbiAgYmFzZVVSTDogc3RyaW5nLFxuKTogUHJvbWlzZTx7IGlkOiBzdHJpbmc7IHZhbHVlOiBUIH0+ID0+XG4gIGF3YWl0IGZldGNoKGAke2Jhc2VVUkx9L3BheWxvYWQtcHJlZmVyZW5jZXMvJHtrZXl9YCwge1xuICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9LFxuICAgIG1ldGhvZDogJ0dFVCcsXG4gIH0pPy50aGVuKChyZXMpID0+IHJlcy5qc29uKCkgYXMgUHJvbWlzZTx7IGlkOiBzdHJpbmc7IHZhbHVlOiBUIH0+KVxuXG5leHBvcnQgY29uc3QgTG9jYWxlUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7IGxvY2FsZT86IExvY2FsZVsnY29kZSddIH0+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIC8qKlxuICAgIFRoZSBgbG9jYWxlYCBwcm9wIG9yaWdpbmF0ZXMgZnJvbSB0aGUgcm9vdCBsYXlvdXQsIHdoaWNoIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHNlYXJjaCBwYXJhbXNcbiAgICBUaGlzIGNvbXBvbmVudCB1c2VzIHRoZSBgdXNlU2VhcmNoUGFyYW1zYCBob29rIHRvIGdldCB0aGUgbG9jYWxlIGZyb20gdGhlIFVSTCBhcyBwcmVjZWRlbmNlIG92ZXIgdGhpcyBwcm9wXG4gICAgVGhpcyBwcm9wIGRvZXMgbm90IHVwZGF0ZSBhcyB0aGUgdXNlciBuYXZpZ2F0ZXMgdGhlIHNpdGUsIGJlY2F1c2UgdGhlIHJvb3QgbGF5b3V0IGRvZXMgbm90IHJlLXJlbmRlclxuICAqL1xuICBsb2NhbGU6IGluaXRpYWxMb2NhbGVGcm9tUHJlZnMsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIGxvY2FsaXphdGlvbiA9IGZhbHNlLFxuICAgICAgcm91dGVzOiB7IGFwaTogYXBpUm91dGUgfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IHVzZXIgfSA9IHVzZUF1dGgoKVxuXG4gIGNvbnN0IGRlZmF1bHRMb2NhbGUgPSBsb2NhbGl6YXRpb24gPyBsb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZSA6ICdlbidcblxuICBjb25zdCBsb2NhbGVGcm9tUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCkuZ2V0KCdsb2NhbGUnKVxuXG4gIGNvbnN0IFtsb2NhbGUsIHNldExvY2FsZV0gPSBSZWFjdC51c2VTdGF0ZTxMb2NhbGU+KCgpID0+IHtcbiAgICBpZiAoIWxvY2FsaXphdGlvbiB8fCAobG9jYWxpemF0aW9uICYmICFsb2NhbGl6YXRpb24ubG9jYWxlcy5sZW5ndGgpKSB7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gbnVsbCBWNFxuICAgICAgcmV0dXJuIHt9IGFzIExvY2FsZVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBmaW5kTG9jYWxlRnJvbUNvZGUobG9jYWxpemF0aW9uLCBsb2NhbGVGcm9tUGFyYW1zKSB8fFxuICAgICAgZmluZExvY2FsZUZyb21Db2RlKGxvY2FsaXphdGlvbiwgaW5pdGlhbExvY2FsZUZyb21QcmVmcykgfHxcbiAgICAgIGZpbmRMb2NhbGVGcm9tQ29kZShsb2NhbGl6YXRpb24sIGRlZmF1bHRMb2NhbGUpIHx8XG4gICAgICBmaW5kTG9jYWxlRnJvbUNvZGUobG9jYWxpemF0aW9uLCBsb2NhbGl6YXRpb24ubG9jYWxlc1swXS5jb2RlKVxuICAgIClcbiAgfSlcblxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRMb2NhbGVJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgcHJldkxvY2FsZSA9IHVzZVJlZjxMb2NhbGU+KGxvY2FsZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIFdlIG5lZWQgdG8gc2V0IGBpc0xvYWRpbmdgIGJhY2sgdG8gZmFsc2Ugb25jZSB0aGUgbG9jYWxlIGlzIGRldGVjdGVkIHRvIGJlIGRpZmZlcmVudFxuICAgICAqIFRoaXMgaGFwcGVucyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhbiBhbmNob3IgbGluayB3aGljaCBhcHBlbmRzIHRoZSBgP2xvY2FsZT1gIHF1ZXJ5IHBhcmFtXG4gICAgICogVGhpcyB0cmlnZ2VycyBhIGNsaWVudC1zaWRlIG5hdmlnYXRpb24sIHdoaWNoIHJlLXJlbmRlcnMgdGhlIHBhZ2Ugd2l0aCB0aGUgbmV3IGxvY2FsZVxuICAgICAqIEluIE5leHQuanMsIGxvY2FsIHN0YXRlIGlzIHBlcnNpc3RlZCBkdXJpbmcgdGhpcyB0eXBlIG9mIG5hdmlnYXRpb24gYmVjYXVzZSBjb21wb25lbnRzIGFyZSBub3QgdW5tb3VudGVkXG4gICAgICovXG4gICAgaWYgKGxvY2FsZS5jb2RlICE9PSBwcmV2TG9jYWxlLmN1cnJlbnQuY29kZSkge1xuICAgICAgc2V0TG9jYWxlSXNMb2FkaW5nKGZhbHNlKVxuICAgIH1cblxuICAgIHByZXZMb2NhbGUuY3VycmVudCA9IGxvY2FsZVxuICB9LCBbbG9jYWxlXSlcblxuICBjb25zdCBmZXRjaFVSTCA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICBhcGlSb3V0ZSxcbiAgICBwYXRoOiAnJyxcbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIFRoaXMgZWZmZWN0IHNob3VsZCBvbmx5IHJ1biB3aGVuIGBsb2NhbGVGcm9tUGFyYW1zYCBjaGFuZ2VzLCBpLmUuIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGFuIGFuY2hvciBsaW5rXG4gICAgICogVGhlIHJvb3QgbGF5b3V0LCB3aGljaCBzZW5kcyB0aGUgaW5pdGlhbCBsb2NhbGUgZnJvbSBwcmVmcywgd2lsbCBub3QgcmUtcmVuZGVyIGFzIHRoZSB1c2VyIG5hdmlnYXRlcyB0aGUgc2l0ZVxuICAgICAqIEZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBmZXRjaCB0aGUgbG9jYWxlIGZyb20gcHJlZnMgaWYgdGhlIHNlYXJjaCBwYXJhbXMgY2xlYXJzIHRoZSBgbG9jYWxlYCBxdWVyeSBwYXJhbVxuICAgICAqL1xuICAgIGFzeW5jIGZ1bmN0aW9uIHJlc2V0TG9jYWxlKCkge1xuICAgICAgaWYgKGxvY2FsaXphdGlvbiAmJiB1c2VyPy5pZCkge1xuICAgICAgICBjb25zdCBsb2NhbGVUb1VzZSA9XG4gICAgICAgICAgbG9jYWxlRnJvbVBhcmFtcyB8fFxuICAgICAgICAgIChhd2FpdCBmZXRjaFByZWZlcmVuY2VzPExvY2FsZVsnY29kZSddPignbG9jYWxlJywgZmV0Y2hVUkwpPy50aGVuKChyZXMpID0+IHJlcy52YWx1ZSkpXG5cbiAgICAgICAgY29uc3QgbmV3TG9jYWxlID1cbiAgICAgICAgICBmaW5kTG9jYWxlRnJvbUNvZGUobG9jYWxpemF0aW9uLCBsb2NhbGVUb1VzZSkgfHxcbiAgICAgICAgICBmaW5kTG9jYWxlRnJvbUNvZGUobG9jYWxpemF0aW9uLCBkZWZhdWx0TG9jYWxlKSB8fFxuICAgICAgICAgIGZpbmRMb2NhbGVGcm9tQ29kZShsb2NhbGl6YXRpb24sIGxvY2FsaXphdGlvbj8ubG9jYWxlcz8uWzBdPy5jb2RlKVxuXG4gICAgICAgIGlmIChuZXdMb2NhbGUpIHtcbiAgICAgICAgICBzZXRMb2NhbGUobmV3TG9jYWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdm9pZCByZXNldExvY2FsZSgpXG4gIH0sIFtkZWZhdWx0TG9jYWxlLCBsb2NhbGl6YXRpb24sIGZldGNoVVJMLCBsb2NhbGVGcm9tUGFyYW1zLCB1c2VyPy5pZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8TG9jYWxlQ29udGV4dCB2YWx1ZT17bG9jYWxlfT5cbiAgICAgIDxMb2NhbGVMb2FkaW5nQ29udGV4dCB2YWx1ZT17eyBsb2NhbGVJc0xvYWRpbmc6IGlzTG9hZGluZywgc2V0TG9jYWxlSXNMb2FkaW5nIH19PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0xvY2FsZUxvYWRpbmdDb250ZXh0PlxuICAgIDwvTG9jYWxlQ29udGV4dD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlTG9jYWxlTG9hZGluZyA9ICgpID0+IHVzZShMb2NhbGVMb2FkaW5nQ29udGV4dClcblxuLyoqXG4gKiBUT0RPOiBWNFxuICogVGhlIHJldHVybiB0eXBlIG9mIHRoZSBgdXNlTG9jYWxlYCBob29rIHdpbGwgY2hhbmdlIGluIHY0LiBJdCB3aWxsIHJldHVybiBgbnVsbCB8IExvY2FsZWAgaW5zdGVhZCBvZiBgZmFsc2UgfCB7fSB8IExvY2FsZWAuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VMb2NhbGUgPSAoKTogTG9jYWxlID0+IHVzZShMb2NhbGVDb250ZXh0KVxuIiwiaW1wb3J0IHR5cGUgeyBMb2NhbGUsIFNhbml0aXplZExvY2FsaXphdGlvbkNvbmZpZyB9IGZyb20gJ3BheWxvYWQnXG4vKlxuIHJldHVybiB0aGUgTG9jYWxlIGZvciBnaXZlbiBsb2NhbGUgY29kZSwgZWxzZSByZXR1cm4gbnVsbFxuKi9cbmV4cG9ydCBjb25zdCBmaW5kTG9jYWxlRnJvbUNvZGUgPSAoXG4gIGxvY2FsaXphdGlvbkNvbmZpZzogU2FuaXRpemVkTG9jYWxpemF0aW9uQ29uZmlnLFxuICBsb2NhbGU6IHN0cmluZyxcbik6IExvY2FsZSB8IG51bGwgPT4ge1xuICBpZiAoIWxvY2FsaXphdGlvbkNvbmZpZz8ubG9jYWxlcyB8fCBsb2NhbGl6YXRpb25Db25maWcubG9jYWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGxvY2FsaXphdGlvbkNvbmZpZy5sb2NhbGVzLmZpbmQoKGVsKSA9PiBlbD8uY29kZSA9PT0gbG9jYWxlKVxufVxuIixudWxsLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHtcbiAgICBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykge1xuICAgICAgdmFyIHQgPSBhcmd1bWVudHNbZV07XG4gICAgICBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbmV4cG9ydCB7IF9leHRlbmRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHQsIG8pIHtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCBzZXRQcm90b3R5cGVPZih0LCBvKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0c0xvb3NlIGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGVsZW1lbnQgaGFzIGEgQ1NTIGNsYXNzLlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXCIgXCIgKyAoZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCBlbGVtZW50LmNsYXNzTmFtZSkgKyBcIiBcIikuaW5kZXhPZihcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiKSAhPT0gLTE7XG59IiwiaW1wb3J0IGhhc0NsYXNzIGZyb20gJy4vaGFzQ2xhc3MnO1xuLyoqXG4gKiBBZGRzIGEgQ1NTIGNsYXNzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoIWhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgXCIgXCIgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyBcIiBcIiArIGNsYXNzTmFtZSk7XG59IiwiZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzVG9SZW1vdmUgKyBcIig/OlxcXFxzfCQpXCIsICdnJyksICckMScpLnJlcGxhY2UoL1xccysvZywgJyAnKS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG4vKipcbiAqIFJlbW92ZXMgYSBDU1MgY2xhc3MgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnLCBjbGFzc05hbWUpKTtcbiAgfVxufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5cbnZhciBfYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYWRkT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcblxudmFyIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIHJlbW92ZU9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIGV4Y2VsbGVudFxuICogW25nLWFuaW1hdGVdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZ0FuaW1hdGUpIGxpYnJhcnksIHlvdSBzaG91bGRcbiAqIHVzZSBpdCBpZiB5b3UncmUgdXNpbmcgQ1NTIHRyYW5zaXRpb25zIG9yIGFuaW1hdGlvbnMuIEl0J3MgYnVpbHQgdXBvbiB0aGVcbiAqIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbilcbiAqIGNvbXBvbmVudCwgc28gaXQgaW5oZXJpdHMgYWxsIG9mIGl0cyBwcm9wcy5cbiAqXG4gKiBgQ1NTVHJhbnNpdGlvbmAgYXBwbGllcyBhIHBhaXIgb2YgY2xhc3MgbmFtZXMgZHVyaW5nIHRoZSBgYXBwZWFyYCwgYGVudGVyYCxcbiAqIGFuZCBgZXhpdGAgc3RhdGVzIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgZmlyc3QgY2xhc3MgaXMgYXBwbGllZCBhbmQgdGhlbiBhXG4gKiBzZWNvbmQgYCotYWN0aXZlYCBjbGFzcyBpbiBvcmRlciB0byBhY3RpdmF0ZSB0aGUgQ1NTIHRyYW5zaXRpb24uIEFmdGVyIHRoZVxuICogdHJhbnNpdGlvbiwgbWF0Y2hpbmcgYCotZG9uZWAgY2xhc3MgbmFtZXMgYXJlIGFwcGxpZWQgdG8gcGVyc2lzdCB0aGVcbiAqIHRyYW5zaXRpb24gc3RhdGUuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxDU1NUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezIwMH0gY2xhc3NOYW1lcz1cIm15LW5vZGVcIj5cbiAqICAgICAgICAgPGRpdj5cbiAqICAgICAgICAgICB7XCJJJ2xsIHJlY2VpdmUgbXktbm9kZS0qIGNsYXNzZXNcIn1cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBgaW5gIHByb3AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNoaWxkIGNvbXBvbmVudCB3aWxsIGZpcnN0IHJlY2VpdmVcbiAqIHRoZSBjbGFzcyBgZXhhbXBsZS1lbnRlcmAsIHRoZW4gdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgd2lsbCBiZSBhZGRlZCBpblxuICogdGhlIG5leHQgdGljay4gYENTU1RyYW5zaXRpb25gIFtmb3JjZXMgYVxuICogcmVmbG93XShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvNTAwNzMwM2U3MjlhNzRiZTY2YTIxYzNlMjIwNWU0OTE2ODIxNTI0Yi9zcmMvQ1NTVHJhbnNpdGlvbi5qcyNMMjA4LUwyMTUpXG4gKiBiZXR3ZWVuIGJlZm9yZSBhZGRpbmcgdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHRyaWNrXG4gKiBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byB0cmFuc2l0aW9uIGJldHdlZW4gYGV4YW1wbGUtZW50ZXJgIGFuZFxuICogYGV4YW1wbGUtZW50ZXItYWN0aXZlYCBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWRkZWQgaW1tZWRpYXRlbHkgb25lIGFmdGVyXG4gKiBhbm90aGVyLiBNb3N0IG5vdGFibHksIHRoaXMgaXMgd2hhdCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXMgdG8gYW5pbWF0ZVxuICogX2FwcGVhcmFuY2VfLlxuICpcbiAqIGBgYGNzc1xuICogLm15LW5vZGUtZW50ZXIge1xuICogICBvcGFjaXR5OiAwO1xuICogfVxuICogLm15LW5vZGUtZW50ZXItYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMTtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQge1xuICogICBvcGFjaXR5OiAxO1xuICogfVxuICogLm15LW5vZGUtZXhpdC1hY3RpdmUge1xuICogICBvcGFjaXR5OiAwO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogYGBgXG4gKlxuICogYCotYWN0aXZlYCBjbGFzc2VzIHJlcHJlc2VudCB3aGljaCBzdHlsZXMgeW91IHdhbnQgdG8gYW5pbWF0ZSAqKnRvKiosIHNvIGl0J3NcbiAqIGltcG9ydGFudCB0byBhZGQgYHRyYW5zaXRpb25gIGRlY2xhcmF0aW9uIG9ubHkgdG8gdGhlbSwgb3RoZXJ3aXNlIHRyYW5zaXRpb25zXG4gKiBtaWdodCBub3QgYmVoYXZlIGFzIGludGVuZGVkISBUaGlzIG1pZ2h0IG5vdCBiZSBvYnZpb3VzIHdoZW4gdGhlIHRyYW5zaXRpb25zXG4gKiBhcmUgc3ltbWV0cmljYWwsIGkuZS4gd2hlbiBgKi1lbnRlci1hY3RpdmVgIGlzIHRoZSBzYW1lIGFzIGAqLWV4aXRgLCBsaWtlIGluXG4gKiB0aGUgZXhhbXBsZSBhYm92ZSAobWludXMgYHRyYW5zaXRpb25gKSwgYnV0IGl0IGJlY29tZXMgYXBwYXJlbnQgaW4gbW9yZVxuICogY29tcGxleCB0cmFuc2l0aW9ucy5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91J3JlIHVzaW5nIHRoZVxuICogW2BhcHBlYXJgXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbiNUcmFuc2l0aW9uLXByb3AtYXBwZWFyKVxuICogcHJvcCwgbWFrZSBzdXJlIHRvIGRlZmluZSBzdHlsZXMgZm9yIGAuYXBwZWFyLSpgIGNsYXNzZXMgYXMgd2VsbC5cbiAqL1xuXG5cbnZhciBDU1NUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKENTU1RyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENTU1RyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuYXBwbGllZENsYXNzZXMgPSB7XG4gICAgICBhcHBlYXI6IHt9LFxuICAgICAgZW50ZXI6IHt9LFxuICAgICAgZXhpdDoge31cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlciA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudFsxXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDIgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1sxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NFswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnYXBwZWFyJyk7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2VudGVyJyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDUgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDVbMF07XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnJlc29sdmVBcmd1bWVudHMgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm5vZGVSZWYgPyBbX3RoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50LCBtYXliZU5vZGVdIC8vIGhlcmUgYG1heWJlTm9kZWAgaXMgYWN0dWFsbHkgYGFwcGVhcmluZ2BcbiAgICAgIDogW21heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmddO1xuICAgIH07XG5cbiAgICBfdGhpcy5nZXRDbGFzc05hbWVzID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gX3RoaXMucHJvcHMuY2xhc3NOYW1lcztcbiAgICAgIHZhciBpc1N0cmluZ0NsYXNzTmFtZXMgPSB0eXBlb2YgY2xhc3NOYW1lcyA9PT0gJ3N0cmluZyc7XG4gICAgICB2YXIgcHJlZml4ID0gaXNTdHJpbmdDbGFzc05hbWVzICYmIGNsYXNzTmFtZXMgPyBjbGFzc05hbWVzICsgXCItXCIgOiAnJztcbiAgICAgIHZhciBiYXNlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gXCJcIiArIHByZWZpeCArIHR5cGUgOiBjbGFzc05hbWVzW3R5cGVdO1xuICAgICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1hY3RpdmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiQWN0aXZlXCJdO1xuICAgICAgdmFyIGRvbmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItZG9uZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJEb25lXCJdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogYmFzZUNsYXNzTmFtZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lOiBhY3RpdmVDbGFzc05hbWUsXG4gICAgICAgIGRvbmVDbGFzc05hbWU6IGRvbmVDbGFzc05hbWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDU1NUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCB0eXBlLCBwaGFzZSkge1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmdldENsYXNzTmFtZXModHlwZSlbcGhhc2UgKyBcIkNsYXNzTmFtZVwiXTtcblxuICAgIHZhciBfdGhpcyRnZXRDbGFzc05hbWVzID0gdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkZ2V0Q2xhc3NOYW1lcy5kb25lQ2xhc3NOYW1lO1xuXG4gICAgaWYgKHR5cGUgPT09ICdhcHBlYXInICYmIHBoYXNlID09PSAnZG9uZScgJiYgZG9uZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgZG9uZUNsYXNzTmFtZTtcbiAgICB9IC8vIFRoaXMgaXMgdG8gZm9yY2UgYSByZXBhaW50LFxuICAgIC8vIHdoaWNoIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byB0cmFuc2l0aW9uIHN0eWxlcyB3aGVuIGFkZGluZyBhIGNsYXNzIG5hbWUuXG5cblxuICAgIGlmIChwaGFzZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdW3BoYXNlXSA9IGNsYXNzTmFtZTtcblxuICAgICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKSB7XG4gICAgdmFyIF90aGlzJGFwcGxpZWRDbGFzc2VzJCA9IHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0sXG4gICAgICAgIGJhc2VDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYmFzZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmFjdGl2ZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5kb25lO1xuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0gPSB7fTtcblxuICAgIGlmIChiYXNlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBiYXNlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChkb25lQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBkb25lQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lcyxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lc1wiXSk7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBvbkVudGVyOiB0aGlzLm9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMub25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5vbkVudGVyaW5nLFxuICAgICAgb25FeGl0OiB0aGlzLm9uRXhpdCxcbiAgICAgIG9uRXhpdGluZzogdGhpcy5vbkV4aXRpbmcsXG4gICAgICBvbkV4aXRlZDogdGhpcy5vbkV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gQ1NTVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuQ1NTVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZXM6ICcnXG59O1xuQ1NTVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBfZXh0ZW5kcyh7fSwgVHJhbnNpdGlvbi5wcm9wVHlwZXMsIHtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRpb24gY2xhc3NOYW1lcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQgYXMgaXQgYXBwZWFycywgZW50ZXJzLFxuICAgKiBleGl0cyBvciBoYXMgZmluaXNoZWQgdGhlIHRyYW5zaXRpb24uIEEgc2luZ2xlIG5hbWUgY2FuIGJlIHByb3ZpZGVkLCB3aGljaFxuICAgKiB3aWxsIGJlIHN1ZmZpeGVkIGZvciBlYWNoIHN0YWdlLCBlLmcuIGBjbGFzc05hbWVzPVwiZmFkZVwiYCBhcHBsaWVzOlxuICAgKlxuICAgKiAtIGBmYWRlLWFwcGVhcmAsIGBmYWRlLWFwcGVhci1hY3RpdmVgLCBgZmFkZS1hcHBlYXItZG9uZWBcbiAgICogLSBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsIGBmYWRlLWVudGVyLWRvbmVgXG4gICAqIC0gYGZhZGUtZXhpdGAsIGBmYWRlLWV4aXQtYWN0aXZlYCwgYGZhZGUtZXhpdC1kb25lYFxuICAgKlxuICAgKiBBIGZldyBkZXRhaWxzIHRvIG5vdGUgYWJvdXQgaG93IHRoZXNlIGNsYXNzZXMgYXJlIGFwcGxpZWQ6XG4gICAqXG4gICAqIDEuIFRoZXkgYXJlIF9qb2luZWRfIHdpdGggdGhlIG9uZXMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZSBjaGlsZFxuICAgKiAgICBjb21wb25lbnQsIHNvIGlmIHlvdSB3YW50IHRvIGFkZCBzb21lIGJhc2Ugc3R5bGVzLCB5b3UgY2FuIHVzZVxuICAgKiAgICBgY2xhc3NOYW1lYCB3aXRob3V0IHdvcnJ5aW5nIHRoYXQgaXQgd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiAyLiBJZiB0aGUgdHJhbnNpdGlvbiBjb21wb25lbnQgbW91bnRzIHdpdGggYGluPXtmYWxzZX1gLCBubyBjbGFzc2VzIGFyZVxuICAgKiAgICBhcHBsaWVkIHlldC4gWW91IG1pZ2h0IGJlIGV4cGVjdGluZyBgKi1leGl0LWRvbmVgLCBidXQgaWYgeW91IHRoaW5rXG4gICAqICAgIGFib3V0IGl0LCBhIGNvbXBvbmVudCBjYW5ub3QgZmluaXNoIGV4aXRpbmcgaWYgaXQgaGFzbid0IGVudGVyZWQgeWV0LlxuICAgKlxuICAgKiAyLiBgZmFkZS1hcHBlYXItZG9uZWAgYW5kIGBmYWRlLWVudGVyLWRvbmVgIHdpbGwgX2JvdGhfIGJlIGFwcGxpZWQuIFRoaXNcbiAgICogICAgYWxsb3dzIHlvdSB0byBkZWZpbmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciB3aGVuIGFwcGVhcmluZyBpcyBkb25lIGFuZFxuICAgKiAgICB3aGVuIHJlZ3VsYXIgZW50ZXJpbmcgaXMgZG9uZSwgdXNpbmcgc2VsZWN0b3JzIGxpa2VcbiAgICogICAgYC5mYWRlLWVudGVyLWRvbmU6bm90KC5mYWRlLWFwcGVhci1kb25lKWAuIEZvciBleGFtcGxlLCB5b3UgY291bGQgYXBwbHlcbiAgICogICAgYW4gZXBpYyBlbnRyYW5jZSBhbmltYXRpb24gd2hlbiBlbGVtZW50IGZpcnN0IGFwcGVhcnMgaW4gdGhlIERPTSB1c2luZ1xuICAgKiAgICBbQW5pbWF0ZS5jc3NdKGh0dHBzOi8vZGFuZWRlbi5naXRodWIuaW8vYW5pbWF0ZS5jc3MvKS4gT3RoZXJ3aXNlIHlvdSBjYW5cbiAgICogICAgc2ltcGx5IHVzZSBgZmFkZS1lbnRlci1kb25lYCBmb3IgZGVmaW5pbmcgYm90aCBjYXNlcy5cbiAgICpcbiAgICogRWFjaCBpbmRpdmlkdWFsIGNsYXNzTmFtZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluZGVwZW5kZW50bHkgbGlrZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17e1xuICAgKiAgYXBwZWFyOiAnbXktYXBwZWFyJyxcbiAgICogIGFwcGVhckFjdGl2ZTogJ215LWFjdGl2ZS1hcHBlYXInLFxuICAgKiAgYXBwZWFyRG9uZTogJ215LWRvbmUtYXBwZWFyJyxcbiAgICogIGVudGVyOiAnbXktZW50ZXInLFxuICAgKiAgZW50ZXJBY3RpdmU6ICdteS1hY3RpdmUtZW50ZXInLFxuICAgKiAgZW50ZXJEb25lOiAnbXktZG9uZS1lbnRlcicsXG4gICAqICBleGl0OiAnbXktZXhpdCcsXG4gICAqICBleGl0QWN0aXZlOiAnbXktYWN0aXZlLWV4aXQnLFxuICAgKiAgZXhpdERvbmU6ICdteS1kb25lLWV4aXQnLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gc2V0IHRoZXNlIGNsYXNzZXMgdXNpbmcgQ1NTIE1vZHVsZXM6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcbiAgICogYGBgXG4gICAqXG4gICAqIHlvdSBtaWdodCB3YW50IHRvIHVzZSBjYW1lbENhc2UgaW4geW91ciBDU1MgZmlsZSwgdGhhdCB3YXkgY291bGQgc2ltcGx5XG4gICAqIHNwcmVhZCB0aGVtIGluc3RlYWQgb2YgbGlzdGluZyB0aGVtIG9uZSBieSBvbmU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3sgLi4uc3R5bGVzIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwge1xuICAgKiAgYXBwZWFyPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyRG9uZT86IHN0cmluZyxcbiAgICogIGVudGVyPzogc3RyaW5nLFxuICAgKiAgZW50ZXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBlbnRlckRvbmU/OiBzdHJpbmcsXG4gICAqICBleGl0Pzogc3RyaW5nLFxuICAgKiAgZXhpdEFjdGl2ZT86IHN0cmluZyxcbiAgICogIGV4aXREb25lPzogc3RyaW5nLFxuICAgKiB9fVxuICAgKi9cbiAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1NoYXBlLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yICdhcHBlYXInIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXItYWN0aXZlJyBvclxuICAgKiAnYXBwZWFyLWFjdGl2ZScgY2xhc3MgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3JcbiAgICogJ2FwcGVhcicgY2xhc3NlcyBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzc2VzXG4gICAqIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBleGl0LWRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSkgOiB7fTtcbmV4cG9ydCBkZWZhdWx0IENTU1RyYW5zaXRpb247IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5leHBvcnQgdmFyIFVOTU9VTlRFRCA9ICd1bm1vdW50ZWQnO1xuZXhwb3J0IHZhciBFWElURUQgPSAnZXhpdGVkJztcbmV4cG9ydCB2YXIgRU5URVJJTkcgPSAnZW50ZXJpbmcnO1xuZXhwb3J0IHZhciBFTlRFUkVEID0gJ2VudGVyZWQnO1xuZXhwb3J0IHZhciBFWElUSU5HID0gJ2V4aXRpbmcnO1xuLyoqXG4gKiBUaGUgVHJhbnNpdGlvbiBjb21wb25lbnQgbGV0cyB5b3UgZGVzY3JpYmUgYSB0cmFuc2l0aW9uIGZyb20gb25lIGNvbXBvbmVudFxuICogc3RhdGUgdG8gYW5vdGhlciBfb3ZlciB0aW1lXyB3aXRoIGEgc2ltcGxlIGRlY2xhcmF0aXZlIEFQSS4gTW9zdCBjb21tb25seVxuICogaXQncyB1c2VkIHRvIGFuaW1hdGUgdGhlIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIG9mIGEgY29tcG9uZW50LCBidXQgY2FuIGFsc29cbiAqIGJlIHVzZWQgdG8gZGVzY3JpYmUgaW4tcGxhY2UgdHJhbnNpdGlvbiBzdGF0ZXMgYXMgd2VsbC5cbiAqXG4gKiAtLS1cbiAqXG4gKiAqKk5vdGUqKjogYFRyYW5zaXRpb25gIGlzIGEgcGxhdGZvcm0tYWdub3N0aWMgYmFzZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZ1xuICogdHJhbnNpdGlvbnMgaW4gQ1NTLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byB1c2VcbiAqIFtgQ1NTVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvY3NzLXRyYW5zaXRpb24pXG4gKiBpbnN0ZWFkLiBJdCBpbmhlcml0cyBhbGwgdGhlIGZlYXR1cmVzIG9mIGBUcmFuc2l0aW9uYCwgYnV0IGNvbnRhaW5zXG4gKiBhZGRpdGlvbmFsIGZlYXR1cmVzIG5lY2Vzc2FyeSB0byBwbGF5IG5pY2Ugd2l0aCBDU1MgdHJhbnNpdGlvbnMgKGhlbmNlIHRoZVxuICogbmFtZSBvZiB0aGUgY29tcG9uZW50KS5cbiAqXG4gKiAtLS1cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBgVHJhbnNpdGlvbmAgY29tcG9uZW50IGRvZXMgbm90IGFsdGVyIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAqIGNvbXBvbmVudCBpdCByZW5kZXJzLCBpdCBvbmx5IHRyYWNrcyBcImVudGVyXCIgYW5kIFwiZXhpdFwiIHN0YXRlcyBmb3IgdGhlXG4gKiBjb21wb25lbnRzLiBJdCdzIHVwIHRvIHlvdSB0byBnaXZlIG1lYW5pbmcgYW5kIGVmZmVjdCB0byB0aG9zZSBzdGF0ZXMuIEZvclxuICogZXhhbXBsZSB3ZSBjYW4gYWRkIHN0eWxlcyB0byBhIGNvbXBvbmVudCB3aGVuIGl0IGVudGVycyBvciBleGl0czpcbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbiAqXG4gKiBjb25zdCBkdXJhdGlvbiA9IDMwMDtcbiAqXG4gKiBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gKiAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7ZHVyYXRpb259bXMgZWFzZS1pbi1vdXRgLFxuICogICBvcGFjaXR5OiAwLFxuICogfVxuICpcbiAqIGNvbnN0IHRyYW5zaXRpb25TdHlsZXMgPSB7XG4gKiAgIGVudGVyaW5nOiB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZW50ZXJlZDogIHsgb3BhY2l0eTogMSB9LFxuICogICBleGl0aW5nOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiAgIGV4aXRlZDogIHsgb3BhY2l0eTogMCB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBGYWRlID0gKHsgaW46IGluUHJvcCB9KSA9PiAoXG4gKiAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9e2R1cmF0aW9ufT5cbiAqICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgPGRpdiBzdHlsZT17e1xuICogICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gKiAgICAgICAgIC4uLnRyYW5zaXRpb25TdHlsZXNbc3RhdGVdXG4gKiAgICAgICB9fT5cbiAqICAgICAgICAgSSdtIGEgZmFkZSBUcmFuc2l0aW9uIVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgKX1cbiAqICAgPC9UcmFuc2l0aW9uPlxuICogKTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSA0IG1haW4gc3RhdGVzIGEgVHJhbnNpdGlvbiBjYW4gYmUgaW46XG4gKiAgLSBgJ2VudGVyaW5nJ2BcbiAqICAtIGAnZW50ZXJlZCdgXG4gKiAgLSBgJ2V4aXRpbmcnYFxuICogIC0gYCdleGl0ZWQnYFxuICpcbiAqIFRyYW5zaXRpb24gc3RhdGUgaXMgdG9nZ2xlZCB2aWEgdGhlIGBpbmAgcHJvcC4gV2hlbiBgdHJ1ZWAgdGhlIGNvbXBvbmVudFxuICogYmVnaW5zIHRoZSBcIkVudGVyXCIgc3RhZ2UuIER1cmluZyB0aGlzIHN0YWdlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgZnJvbVxuICogaXRzIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0ZSwgdG8gYCdlbnRlcmluZydgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gKiB0cmFuc2l0aW9uIGFuZCB0aGVuIHRvIHRoZSBgJ2VudGVyZWQnYCBzdGFnZSBvbmNlIGl0J3MgY29tcGxldGUuIExldCdzIHRha2VcbiAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAod2UnbGwgdXNlIHRoZVxuICogW3VzZVN0YXRlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlc3RhdGUpIGhvb2spOlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXs1MDB9PlxuICogICAgICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgICAgIC8vIC4uLlxuICogICAgICAgICApfVxuICogICAgICAgPC9UcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgdG8gdGhlIGAnZW50ZXJpbmcnYCBzdGF0ZVxuICogYW5kIHN0YXkgdGhlcmUgZm9yIDUwMG1zICh0aGUgdmFsdWUgb2YgYHRpbWVvdXRgKSBiZWZvcmUgaXQgZmluYWxseSBzd2l0Y2hlc1xuICogdG8gYCdlbnRlcmVkJ2AuXG4gKlxuICogV2hlbiBgaW5gIGlzIGBmYWxzZWAgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyBleGNlcHQgdGhlIHN0YXRlIG1vdmVzIGZyb21cbiAqIGAnZXhpdGluZydgIHRvIGAnZXhpdGVkJ2AuXG4gKi9cblxudmFyIFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuICAgIHZhciBwYXJlbnRHcm91cCA9IGNvbnRleHQ7IC8vIEluIHRoZSBjb250ZXh0IG9mIGEgVHJhbnNpdGlvbkdyb3VwIGFsbCBlbnRlcnMgYXJlIHJlYWxseSBhcHBlYXJzXG5cbiAgICB2YXIgYXBwZWFyID0gcGFyZW50R3JvdXAgJiYgIXBhcmVudEdyb3VwLmlzTW91bnRpbmcgPyBwcm9wcy5lbnRlciA6IHByb3BzLmFwcGVhcjtcbiAgICB2YXIgaW5pdGlhbFN0YXR1cztcbiAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmluKSB7XG4gICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVOVEVSRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy51bm1vdW50T25FeGl0IHx8IHByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gVU5NT1VOVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogaW5pdGlhbFN0YXR1c1xuICAgIH07XG4gICAgX3RoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmLCBwcmV2U3RhdGUpIHtcbiAgICB2YXIgbmV4dEluID0gX3JlZi5pbjtcblxuICAgIGlmIChuZXh0SW4gJiYgcHJldlN0YXRlLnN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgLy8gICBsZXQgbmV4dFN0YXR1cyA9IG51bGxcbiAgLy8gICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gIC8vICAgICBjb25zdCB7IHN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAvLyAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHsgbmV4dFN0YXR1cyB9XG4gIC8vIH1cbiAgO1xuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyh0cnVlLCB0aGlzLmFwcGVhclN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgbmV4dFN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gICAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklORztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyhmYWxzZSwgbmV4dFN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0VGltZW91dHMgPSBmdW5jdGlvbiBnZXRUaW1lb3V0cygpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dDtcbiAgICB2YXIgZXhpdCwgZW50ZXIsIGFwcGVhcjtcbiAgICBleGl0ID0gZW50ZXIgPSBhcHBlYXIgPSB0aW1lb3V0O1xuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCAmJiB0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGV4aXQgPSB0aW1lb3V0LmV4aXQ7XG4gICAgICBlbnRlciA9IHRpbWVvdXQuZW50ZXI7IC8vIFRPRE86IHJlbW92ZSBmYWxsYmFjayBmb3IgbmV4dCBtYWpvclxuXG4gICAgICBhcHBlYXIgPSB0aW1lb3V0LmFwcGVhciAhPT0gdW5kZWZpbmVkID8gdGltZW91dC5hcHBlYXIgOiBlbnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhpdDogZXhpdCxcbiAgICAgIGVudGVyOiBlbnRlcixcbiAgICAgIGFwcGVhcjogYXBwZWFyXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhdHVzID0gZnVuY3Rpb24gdXBkYXRlU3RhdHVzKG1vdW50aW5nLCBuZXh0U3RhdHVzKSB7XG4gICAgaWYgKG1vdW50aW5nID09PSB2b2lkIDApIHtcbiAgICAgIG1vdW50aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5leHRTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIC8vIG5leHRTdGF0dXMgd2lsbCBhbHdheXMgYmUgRU5URVJJTkcgb3IgRVhJVElORy5cbiAgICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0IHx8IHRoaXMucHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3B1bGwvNzQ5XG4gICAgICAgICAgLy8gV2l0aCB1bm1vdW50T25FeGl0IG9yIG1vdW50T25FbnRlciwgdGhlIGVudGVyIGFuaW1hdGlvbiBzaG91bGQgaGFwcGVuIGF0IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gYGV4aXRlZGAgYW5kIGBlbnRlcmluZ2AuXG4gICAgICAgICAgLy8gVG8gbWFrZSB0aGUgYW5pbWF0aW9uIGhhcHBlbiwgIHdlIGhhdmUgdG8gc2VwYXJhdGUgZWFjaCByZW5kZXJpbmcgYW5kIGF2b2lkIGJlaW5nIHByb2Nlc3NlZCBhcyBiYXRjaGVkLlxuXG4gICAgICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtRW50ZXIobW91bnRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG5cbiAgICB2YXIgX3JlZjIgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbYXBwZWFyaW5nXSA6IFtSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSwgYXBwZWFyaW5nXSxcbiAgICAgICAgbWF5YmVOb2RlID0gX3JlZjJbMF0sXG4gICAgICAgIG1heWJlQXBwZWFyaW5nID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIGVudGVyVGltZW91dCA9IGFwcGVhcmluZyA/IHRpbWVvdXRzLmFwcGVhciA6IHRpbWVvdXRzLmVudGVyOyAvLyBubyBlbnRlciBhbmltYXRpb24gc2tpcCByaWdodCB0byBFTlRFUkVEXG4gICAgLy8gaWYgd2UgYXJlIG1vdW50aW5nIGFuZCBydW5uaW5nIHRoaXMgaXQgbWVhbnMgYXBwZWFyIF9tdXN0XyBiZSBzZXRcblxuICAgIGlmICghbW91bnRpbmcgJiYgIWVudGVyIHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRXhpdCA9IGZ1bmN0aW9uIHBlcmZvcm1FeGl0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBtYXliZU5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gbm8gZXhpdCBhbmltYXRpb24gc2tpcCByaWdodCB0byBFWElURURcblxuICAgIGlmICghZXhpdCB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRVhJVElOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcblxuICAgICAgX3RoaXMzLm9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0cy5leGl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIgPSB0aW1lb3V0ID09IG51bGwgJiYgIXRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXI7XG5cbiAgICBpZiAoIW5vZGUgfHwgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lcikge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIHZhciBfcmVmMyA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFt0aGlzLm5leHRDYWxsYmFja10gOiBbbm9kZSwgdGhpcy5uZXh0Q2FsbGJhY2tdLFxuICAgICAgICAgIG1heWJlTm9kZSA9IF9yZWYzWzBdLFxuICAgICAgICAgIG1heWJlTmV4dENhbGxiYWNrID0gX3JlZjNbMV07XG5cbiAgICAgIHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIobWF5YmVOb2RlLCBtYXliZU5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBfaW4gPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgX21vdW50T25FbnRlciA9IF90aGlzJHByb3BzLm1vdW50T25FbnRlcixcbiAgICAgICAgX3VubW91bnRPbkV4aXQgPSBfdGhpcyRwcm9wcy51bm1vdW50T25FeGl0LFxuICAgICAgICBfYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICBfZW50ZXIgPSBfdGhpcyRwcm9wcy5lbnRlcixcbiAgICAgICAgX2V4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICBfdGltZW91dCA9IF90aGlzJHByb3BzLnRpbWVvdXQsXG4gICAgICAgIF9hZGRFbmRMaXN0ZW5lciA9IF90aGlzJHByb3BzLmFkZEVuZExpc3RlbmVyLFxuICAgICAgICBfb25FbnRlciA9IF90aGlzJHByb3BzLm9uRW50ZXIsXG4gICAgICAgIF9vbkVudGVyaW5nID0gX3RoaXMkcHJvcHMub25FbnRlcmluZyxcbiAgICAgICAgX29uRW50ZXJlZCA9IF90aGlzJHByb3BzLm9uRW50ZXJlZCxcbiAgICAgICAgX29uRXhpdCA9IF90aGlzJHByb3BzLm9uRXhpdCxcbiAgICAgICAgX29uRXhpdGluZyA9IF90aGlzJHByb3BzLm9uRXhpdGluZyxcbiAgICAgICAgX29uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgIF9ub2RlUmVmID0gX3RoaXMkcHJvcHMubm9kZVJlZixcbiAgICAgICAgY2hpbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCIsIFwibW91bnRPbkVudGVyXCIsIFwidW5tb3VudE9uRXhpdFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcInRpbWVvdXRcIiwgXCJhZGRFbmRMaXN0ZW5lclwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FbnRlcmVkXCIsIFwib25FeGl0XCIsIFwib25FeGl0aW5nXCIsIFwib25FeGl0ZWRcIiwgXCJub2RlUmVmXCJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAvLyBhbGxvd3MgZm9yIG5lc3RlZCBUcmFuc2l0aW9uc1xuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpIDogUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBjaGlsZFByb3BzKSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uLmNvbnRleHRUeXBlID0gVHJhbnNpdGlvbkdyb3VwQ29udGV4dDtcblRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogQSBSZWFjdCByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnQgdGhhdCBuZWVkIHRvIHRyYW5zaXRpb246XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTEyNzEzMC80NjcxOTMyXG4gICAqXG4gICAqICAgLSBXaGVuIGBub2RlUmVmYCBwcm9wIGlzIHVzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgKiAgICAgIChlLmcuIGBvbkVudGVyYCkgYmVjYXVzZSB1c2VyIGFscmVhZHkgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5vZGUuXG4gICAqICAgLSBXaGVuIGNoYW5naW5nIGBrZXlgIHByb3Agb2YgYFRyYW5zaXRpb25gIGluIGEgYFRyYW5zaXRpb25Hcm91cGAgYSBuZXdcbiAgICogICAgIGBub2RlUmVmYCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGBUcmFuc2l0aW9uYCB3aXRoIGNoYW5nZWQgYGtleWAgcHJvcFxuICAgKiAgICAgKHNlZVxuICAgKiAgICAgW3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvMTM0MzVmODk3YjNhYjcxZjZlMTlkNzI0ZjE0NTU5NmY1OTEwNTgxYy90ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qcyNMMzYyLUw0MzcpKS5cbiAgICovXG4gIG5vZGVSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gUHJvcFR5cGVzLmFueSA6IGZ1bmN0aW9uIChwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwcm9wVmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBQcm9wVHlwZXMuaW5zdGFuY2VPZih2YWx1ZSAmJiAnb3duZXJEb2N1bWVudCcgaW4gdmFsdWUgPyB2YWx1ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkVsZW1lbnQgOiBFbGVtZW50KShwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KTtcbiAgICB9XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIGBmdW5jdGlvbmAgY2hpbGQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIFJlYWN0IGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXNcbiAgICogY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0dXMgKGAnZW50ZXJpbmcnYCwgYCdlbnRlcmVkJ2AsXG4gICAqIGAnZXhpdGluZydgLCBgJ2V4aXRlZCdgKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXBwbHkgY29udGV4dFxuICAgKiBzcGVjaWZpYyBwcm9wcyB0byBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIDxUcmFuc2l0aW9uIGluPXt0aGlzLnN0YXRlLmlufSB0aW1lb3V0PXsxNTB9PlxuICAgKiAgIHtzdGF0ZSA9PiAoXG4gICAqICAgICA8TXlDb21wb25lbnQgY2xhc3NOYW1lPXtgZmFkZSBmYWRlLSR7c3RhdGV9YH0gLz5cbiAgICogICApfVxuICAgKiA8L1RyYW5zaXRpb24+XG4gICAqIGBgYFxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb21wb25lbnQ7IHRyaWdnZXJzIHRoZSBlbnRlciBvciBleGl0IHN0YXRlc1xuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgaXMgbW91bnRlZCBpbW1lZGlhdGVseSBhbG9uZyB3aXRoXG4gICAqIHRoZSBwYXJlbnQgYFRyYW5zaXRpb25gIGNvbXBvbmVudC4gSWYgeW91IHdhbnQgdG8gXCJsYXp5IG1vdW50XCIgdGhlIGNvbXBvbmVudCBvbiB0aGVcbiAgICogZmlyc3QgYGluPXt0cnVlfWAgeW91IGNhbiBzZXQgYG1vdW50T25FbnRlcmAuIEFmdGVyIHRoZSBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIHRoZSBjb21wb25lbnQgd2lsbCBzdGF5XG4gICAqIG1vdW50ZWQsIGV2ZW4gb24gXCJleGl0ZWRcIiwgdW5sZXNzIHlvdSBhbHNvIHNwZWNpZnkgYHVubW91bnRPbkV4aXRgLlxuICAgKi9cbiAgbW91bnRPbkVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IHN0YXlzIG1vdW50ZWQgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgYCdleGl0ZWQnYCBzdGF0ZS5cbiAgICogU2V0IGB1bm1vdW50T25FeGl0YCBpZiB5b3UnZCBwcmVmZXIgdG8gdW5tb3VudCB0aGUgY29tcG9uZW50IGFmdGVyIGl0IGZpbmlzaGVzIGV4aXRpbmcuXG4gICAqL1xuICB1bm1vdW50T25FeGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGRvZXMgbm90IHBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlblxuICAgKiBpdCBmaXJzdCBtb3VudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpbmAuIElmIHlvdSB3YW50IHRoaXNcbiAgICogYmVoYXZpb3IsIHNldCBib3RoIGBhcHBlYXJgIGFuZCBgaW5gIHRvIGB0cnVlYC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogdGhlcmUgYXJlIG5vIHNwZWNpYWwgYXBwZWFyIHN0YXRlcyBsaWtlIGBhcHBlYXJpbmdgL2BhcHBlYXJlZGAsIHRoaXMgcHJvcFxuICAgKiA+IG9ubHkgYWRkcyBhbiBhZGRpdGlvbmFsIGVudGVyIHRyYW5zaXRpb24uIEhvd2V2ZXIsIGluIHRoZVxuICAgKiA+IGA8Q1NTVHJhbnNpdGlvbj5gIGNvbXBvbmVudCB0aGF0IGZpcnN0IGVudGVyIHRyYW5zaXRpb24gZG9lcyByZXN1bHQgaW5cbiAgICogPiBhZGRpdGlvbmFsIGAuYXBwZWFyLSpgIGNsYXNzZXMsIHRoYXQgd2F5IHlvdSBjYW4gY2hvb3NlIHRvIHN0eWxlIGl0XG4gICAqID4gZGlmZmVyZW50bHkuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4ge1xuICAgKiAgIC8vIHVzZSB0aGUgY3NzIHRyYW5zaXRpb25lbmQgZXZlbnQgdG8gbWFyayB0aGUgZmluaXNoIG9mIGEgdHJhbnNpdGlvblxuICAgKiAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGRvbmUsIGZhbHNlKTtcbiAgICogfX1cbiAgICogYGBgXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyZWRcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0ZWRcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59IDoge307IC8vIE5hbWUgdGhlIGZ1bmN0aW9uIHNvIGl0IGlzIGNsZWFyZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cblRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBpbjogZmFsc2UsXG4gIG1vdW50T25FbnRlcjogZmFsc2UsXG4gIHVubW91bnRPbkV4aXQ6IGZhbHNlLFxuICBhcHBlYXI6IGZhbHNlLFxuICBlbnRlcjogdHJ1ZSxcbiAgZXhpdDogdHJ1ZSxcbiAgb25FbnRlcjogbm9vcCxcbiAgb25FbnRlcmluZzogbm9vcCxcbiAgb25FbnRlcmVkOiBub29wLFxuICBvbkV4aXQ6IG5vb3AsXG4gIG9uRXhpdGluZzogbm9vcCxcbiAgb25FeGl0ZWQ6IG5vb3Bcbn07XG5UcmFuc2l0aW9uLlVOTU9VTlRFRCA9IFVOTU9VTlRFRDtcblRyYW5zaXRpb24uRVhJVEVEID0gRVhJVEVEO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IEVOVEVSSU5HO1xuVHJhbnNpdGlvbi5FTlRFUkVEID0gRU5URVJFRDtcblRyYW5zaXRpb24uRVhJVElORyA9IEVYSVRJTkc7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uOyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZGlzYWJsZWQ6IGZhbHNlXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImV4cG9ydCB2YXIgZm9yY2VSZWZsb3cgPSBmdW5jdGlvbiBmb3JjZVJlZmxvdyhub2RlKSB7XG4gIHJldHVybiBub2RlLnNjcm9sbFRvcDtcbn07IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLG51bGwsbnVsbCxudWxsLCJpbXBvcnQge1xuICB0YWJiYWJsZSxcbiAgZm9jdXNhYmxlLFxuICBpc0ZvY3VzYWJsZSxcbiAgaXNUYWJiYWJsZSxcbiAgZ2V0VGFiSW5kZXgsXG59IGZyb20gJ3RhYmJhYmxlJztcblxuY29uc3QgYWN0aXZlRm9jdXNUcmFwcyA9IHtcbiAgYWN0aXZhdGVUcmFwKHRyYXBTdGFjaywgdHJhcCkge1xuICAgIGlmICh0cmFwU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWN0aXZlVHJhcCA9IHRyYXBTdGFja1t0cmFwU3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBpZiAoYWN0aXZlVHJhcCAhPT0gdHJhcCkge1xuICAgICAgICBhY3RpdmVUcmFwLnBhdXNlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHJhcEluZGV4ID0gdHJhcFN0YWNrLmluZGV4T2YodHJhcCk7XG4gICAgaWYgKHRyYXBJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRyYXBTdGFjay5wdXNoKHRyYXApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtb3ZlIHRoaXMgZXhpc3RpbmcgdHJhcCB0byB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG4gICAgICB0cmFwU3RhY2suc3BsaWNlKHRyYXBJbmRleCwgMSk7XG4gICAgICB0cmFwU3RhY2sucHVzaCh0cmFwKTtcbiAgICB9XG4gIH0sXG5cbiAgZGVhY3RpdmF0ZVRyYXAodHJhcFN0YWNrLCB0cmFwKSB7XG4gICAgY29uc3QgdHJhcEluZGV4ID0gdHJhcFN0YWNrLmluZGV4T2YodHJhcCk7XG4gICAgaWYgKHRyYXBJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRyYXBTdGFjay5zcGxpY2UodHJhcEluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBpZiAodHJhcFN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyYXBTdGFja1t0cmFwU3RhY2subGVuZ3RoIC0gMV0udW5wYXVzZSgpO1xuICAgIH1cbiAgfSxcbn07XG5cbmNvbnN0IGlzU2VsZWN0YWJsZUlucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIChcbiAgICBub2RlLnRhZ05hbWUgJiZcbiAgICBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJlxuICAgIHR5cGVvZiBub2RlLnNlbGVjdCA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufTtcblxuY29uc3QgaXNFc2NhcGVFdmVudCA9IGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBlPy5rZXkgPT09ICdFc2NhcGUnIHx8IGU/LmtleSA9PT0gJ0VzYycgfHwgZT8ua2V5Q29kZSA9PT0gMjc7XG59O1xuXG5jb25zdCBpc1RhYkV2ZW50ID0gZnVuY3Rpb24gKGUpIHtcbiAgcmV0dXJuIGU/LmtleSA9PT0gJ1RhYicgfHwgZT8ua2V5Q29kZSA9PT0gOTtcbn07XG5cbi8vIGNoZWNrcyBmb3IgVEFCIGJ5IGRlZmF1bHRcbmNvbnN0IGlzS2V5Rm9yd2FyZCA9IGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBpc1RhYkV2ZW50KGUpICYmICFlLnNoaWZ0S2V5O1xufTtcblxuLy8gY2hlY2tzIGZvciBTSElGVCtUQUIgYnkgZGVmYXVsdFxuY29uc3QgaXNLZXlCYWNrd2FyZCA9IGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBpc1RhYkV2ZW50KGUpICYmIGUuc2hpZnRLZXk7XG59O1xuXG5jb25zdCBkZWxheSA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gc2V0VGltZW91dChmbiwgMCk7XG59O1xuXG4vLyBBcnJheS5maW5kL2ZpbmRJbmRleCgpIGFyZSBub3Qgc3VwcG9ydGVkIG9uIElFOyB0aGlzIHJlcGxpY2F0ZXMgZW5vdWdoXG4vLyAgb2YgQXJyYXkuZmluZEluZGV4KCkgZm9yIG91ciBuZWVkc1xuY29uc3QgZmluZEluZGV4ID0gZnVuY3Rpb24gKGFyciwgZm4pIHtcbiAgbGV0IGlkeCA9IC0xO1xuXG4gIGFyci5ldmVyeShmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICBpZiAoZm4odmFsdWUpKSB7XG4gICAgICBpZHggPSBpO1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBicmVha1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlOyAvLyBuZXh0XG4gIH0pO1xuXG4gIHJldHVybiBpZHg7XG59O1xuXG4vKipcbiAqIEdldCBhbiBvcHRpb24ncyB2YWx1ZSB3aGVuIGl0IGNvdWxkIGJlIGEgcGxhaW4gdmFsdWUsIG9yIGEgaGFuZGxlciB0aGF0IHByb3ZpZGVzXG4gKiAgdGhlIHZhbHVlLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb24ncyB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcmFtc10gQW55IHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgaGFuZGxlciwgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLlxuICogQHJldHVybnMgeyp9IFRoZSBgdmFsdWVgLCBvciB0aGUgaGFuZGxlcidzIHJldHVybmVkIHZhbHVlLlxuICovXG5jb25zdCB2YWx1ZU9ySGFuZGxlciA9IGZ1bmN0aW9uICh2YWx1ZSwgLi4ucGFyYW1zKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZSguLi5wYXJhbXMpIDogdmFsdWU7XG59O1xuXG5jb25zdCBnZXRBY3R1YWxUYXJnZXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gTk9URTogSWYgdGhlIHRyYXAgaXMgX2luc2lkZV8gYSBzaGFkb3cgRE9NLCBldmVudC50YXJnZXQgd2lsbCBhbHdheXMgYmUgdGhlXG4gIC8vICBzaGFkb3cgaG9zdC4gSG93ZXZlciwgZXZlbnQudGFyZ2V0LmNvbXBvc2VkUGF0aCgpIHdpbGwgYmUgYW4gYXJyYXkgb2ZcbiAgLy8gIG5vZGVzIFwiY2xpY2tlZFwiIGZyb20gaW5uZXItbW9zdCAodGhlIGFjdHVhbCBlbGVtZW50IGluc2lkZSB0aGUgc2hhZG93KSB0b1xuICAvLyAgb3V0ZXItbW9zdCAodGhlIGhvc3QgSFRNTCBkb2N1bWVudCkuIElmIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2VkUGF0aCgpLFxuICAvLyAgdGhlbiB1c2UgaXRzIGZpcnN0IGVsZW1lbnQ7IG90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIGV2ZW50LnRhcmdldCAoYW5kXG4gIC8vICB0aGlzIG9ubHkgd29ya3MgZm9yIGFuIF9vcGVuXyBzaGFkb3cgRE9NOyBvdGhlcndpc2UsXG4gIC8vICBjb21wb3NlZFBhdGgoKVswXSA9PT0gZXZlbnQudGFyZ2V0IGFsd2F5cykuXG4gIHJldHVybiBldmVudC50YXJnZXQuc2hhZG93Um9vdCAmJiB0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoID09PSAnZnVuY3Rpb24nXG4gICAgPyBldmVudC5jb21wb3NlZFBhdGgoKVswXVxuICAgIDogZXZlbnQudGFyZ2V0O1xufTtcblxuLy8gTk9URTogdGhpcyBtdXN0IGJlIF9vdXRzaWRlXyBgY3JlYXRlRm9jdXNUcmFwKClgIHRvIG1ha2Ugc3VyZSBhbGwgdHJhcHMgaW4gdGhpc1xuLy8gIGN1cnJlbnQgaW5zdGFuY2UgdXNlIHRoZSBzYW1lIHN0YWNrIGlmIGB1c2VyT3B0aW9ucy50cmFwU3RhY2tgIGlzbid0IHNwZWNpZmllZFxuY29uc3QgaW50ZXJuYWxUcmFwU3RhY2sgPSBbXTtcblxuY29uc3QgY3JlYXRlRm9jdXNUcmFwID0gZnVuY3Rpb24gKGVsZW1lbnRzLCB1c2VyT3B0aW9ucykge1xuICAvLyBTU1I6IGEgbGl2ZSB0cmFwIHNob3VsZG4ndCBiZSBjcmVhdGVkIGluIHRoaXMgdHlwZSBvZiBlbnZpcm9ubWVudCBzbyB0aGlzXG4gIC8vICBzaG91bGQgYmUgc2FmZSBjb2RlIHRvIGV4ZWN1dGUgaWYgdGhlIGBkb2N1bWVudGAgb3B0aW9uIGlzbid0IHNwZWNpZmllZFxuICBjb25zdCBkb2MgPSB1c2VyT3B0aW9ucz8uZG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG5cbiAgY29uc3QgdHJhcFN0YWNrID0gdXNlck9wdGlvbnM/LnRyYXBTdGFjayB8fCBpbnRlcm5hbFRyYXBTdGFjaztcblxuICBjb25zdCBjb25maWcgPSB7XG4gICAgcmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6IHRydWUsXG4gICAgZXNjYXBlRGVhY3RpdmF0ZXM6IHRydWUsXG4gICAgZGVsYXlJbml0aWFsRm9jdXM6IHRydWUsXG4gICAgaXNLZXlGb3J3YXJkLFxuICAgIGlzS2V5QmFja3dhcmQsXG4gICAgLi4udXNlck9wdGlvbnMsXG4gIH07XG5cbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgLy8gY29udGFpbmVycyBnaXZlbiB0byBjcmVhdGVGb2N1c1RyYXAoKVxuICAgIC8vIEB0eXBlIHtBcnJheTxIVE1MRWxlbWVudD59XG4gICAgY29udGFpbmVyczogW10sXG5cbiAgICAvLyBsaXN0IG9mIG9iamVjdHMgaWRlbnRpZnlpbmcgdGFiYmFibGUgbm9kZXMgaW4gYGNvbnRhaW5lcnNgIGluIHRoZSB0cmFwXG4gICAgLy8gTk9URTogaXQncyBwb3NzaWJsZSB0aGF0IGEgZ3JvdXAgaGFzIG5vIHRhYmJhYmxlIG5vZGVzIGlmIG5vZGVzIGdldCByZW1vdmVkIHdoaWxlIHRoZSB0cmFwXG4gICAgLy8gIGlzIGFjdGl2ZSwgYnV0IHRoZSB0cmFwIHNob3VsZCBuZXZlciBnZXQgdG8gYSBzdGF0ZSB3aGVyZSB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZ3JvdXBcbiAgICAvLyAgd2l0aCBhdCBsZWFzdCBvbmUgdGFiYmFibGUgbm9kZSBpbiBpdCAodGhhdCB3b3VsZCBsZWFkIHRvIGFuIGVycm9yIGNvbmRpdGlvbiB0aGF0IHdvdWxkXG4gICAgLy8gIHJlc3VsdCBpbiBhbiBlcnJvciBiZWluZyB0aHJvd24pXG4gICAgLy8gQHR5cGUge0FycmF5PHtcbiAgICAvLyAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgLy8gICB0YWJiYWJsZU5vZGVzOiBBcnJheTxIVE1MRWxlbWVudD4sIC8vIGVtcHR5IGlmIG5vbmVcbiAgICAvLyAgIGZvY3VzYWJsZU5vZGVzOiBBcnJheTxIVE1MRWxlbWVudD4sIC8vIGVtcHR5IGlmIG5vbmVcbiAgICAvLyAgIHBvc1RhYkluZGV4ZXNGb3VuZDogYm9vbGVhbixcbiAgICAvLyAgIGZpcnN0VGFiYmFibGVOb2RlOiBIVE1MRWxlbWVudHx1bmRlZmluZWQsXG4gICAgLy8gICBsYXN0VGFiYmFibGVOb2RlOiBIVE1MRWxlbWVudHx1bmRlZmluZWQsXG4gICAgLy8gICBmaXJzdERvbVRhYmJhYmxlTm9kZTogSFRNTEVsZW1lbnR8dW5kZWZpbmVkLFxuICAgIC8vICAgbGFzdERvbVRhYmJhYmxlTm9kZTogSFRNTEVsZW1lbnR8dW5kZWZpbmVkLFxuICAgIC8vICAgbmV4dFRhYmJhYmxlTm9kZTogKG5vZGU6IEhUTUxFbGVtZW50LCBmb3J3YXJkOiBib29sZWFuKSA9PiBIVE1MRWxlbWVudHx1bmRlZmluZWRcbiAgICAvLyB9Pn1cbiAgICBjb250YWluZXJHcm91cHM6IFtdLCAvLyBzYW1lIG9yZGVyL2xlbmd0aCBhcyBgY29udGFpbmVyc2AgbGlzdFxuXG4gICAgLy8gcmVmZXJlbmNlcyB0byBvYmplY3RzIGluIGBjb250YWluZXJHcm91cHNgLCBidXQgb25seSB0aG9zZSB0aGF0IGFjdHVhbGx5IGhhdmVcbiAgICAvLyAgdGFiYmFibGUgbm9kZXMgaW4gdGhlbVxuICAgIC8vIE5PVEU6IHNhbWUgb3JkZXIgYXMgYGNvbnRhaW5lcnNgIGFuZCBgY29udGFpbmVyR3JvdXBzYCwgYnV0IF9fbm90IG5lY2Vzc2FyaWx5X19cbiAgICAvLyAgdGhlIHNhbWUgbGVuZ3RoXG4gICAgdGFiYmFibGVHcm91cHM6IFtdLFxuXG4gICAgbm9kZUZvY3VzZWRCZWZvcmVBY3RpdmF0aW9uOiBudWxsLFxuICAgIG1vc3RSZWNlbnRseUZvY3VzZWROb2RlOiBudWxsLFxuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgcGF1c2VkOiBmYWxzZSxcblxuICAgIC8vIHRpbWVyIElEIGZvciB3aGVuIGRlbGF5SW5pdGlhbEZvY3VzIGlzIHRydWUgYW5kIGluaXRpYWwgZm9jdXMgaW4gdGhpcyB0cmFwXG4gICAgLy8gIGhhcyBiZWVuIGRlbGF5ZWQgZHVyaW5nIGFjdGl2YXRpb25cbiAgICBkZWxheUluaXRpYWxGb2N1c1RpbWVyOiB1bmRlZmluZWQsXG5cbiAgICAvLyB0aGUgbW9zdCByZWNlbnQgS2V5Ym9hcmRFdmVudCBmb3IgdGhlIGNvbmZpZ3VyZWQgbmF2IGtleSAodHlwaWNhbGx5IFtTSElGVCtdVEFCKSwgaWYgYW55XG4gICAgcmVjZW50TmF2RXZlbnQ6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBsZXQgdHJhcDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3QgLS0gc29tZSBwcml2YXRlIGZ1bmN0aW9ucyByZWZlcmVuY2UgaXQsIGFuZCBpdHMgbWV0aG9kcyByZWZlcmVuY2UgcHJpdmF0ZSBmdW5jdGlvbnMsIHNvIHdlIG11c3QgZGVjbGFyZSBoZXJlIGFuZCBkZWZpbmUgbGF0ZXJcblxuICAvKipcbiAgICogR2V0cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHZhbHVlLlxuICAgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IGNvbmZpZ092ZXJyaWRlT3B0aW9ucyBJZiB0cnVlLCBhbmQgb3B0aW9uIGlzIGRlZmluZWQgaW4gdGhpcyBzZXQsXG4gICAqICB2YWx1ZSB3aWxsIGJlIHRha2VuIGZyb20gdGhpcyBvYmplY3QuIE90aGVyd2lzZSwgdmFsdWUgd2lsbCBiZSB0YWtlbiBmcm9tIGJhc2UgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbk5hbWUgTmFtZSBvZiB0aGUgb3B0aW9uIHdob3NlIHZhbHVlIGlzIHNvdWdodC5cbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBbY29uZmlnT3B0aW9uTmFtZV0gTmFtZSBvZiBvcHRpb24gdG8gdXNlIF9faW5zdGVhZCBvZl9fIGBvcHRpb25OYW1lYFxuICAgKiAgSUlGIGBjb25maWdPdmVycmlkZU9wdGlvbnNgIGlzIG5vdCBkZWZpbmVkLiBPdGhlcndpc2UsIGBvcHRpb25OYW1lYCBpcyB1c2VkLlxuICAgKi9cbiAgY29uc3QgZ2V0T3B0aW9uID0gKGNvbmZpZ092ZXJyaWRlT3B0aW9ucywgb3B0aW9uTmFtZSwgY29uZmlnT3B0aW9uTmFtZSkgPT4ge1xuICAgIHJldHVybiBjb25maWdPdmVycmlkZU9wdGlvbnMgJiZcbiAgICAgIGNvbmZpZ092ZXJyaWRlT3B0aW9uc1tvcHRpb25OYW1lXSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGNvbmZpZ092ZXJyaWRlT3B0aW9uc1tvcHRpb25OYW1lXVxuICAgICAgOiBjb25maWdbY29uZmlnT3B0aW9uTmFtZSB8fCBvcHRpb25OYW1lXTtcbiAgfTtcblxuICAvKipcbiAgICogRmluZHMgdGhlIGluZGV4IG9mIHRoZSBjb250YWluZXIgdGhhdCBjb250YWlucyB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge0V2ZW50fSBbZXZlbnRdIElmIGF2YWlsYWJsZSwgYW5kIGBlbGVtZW50YCBpc24ndCBkaXJlY3RseSBmb3VuZCBpbiBhbnkgY29udGFpbmVyLFxuICAgKiAgdGhlIGV2ZW50J3MgY29tcG9zZWQgcGF0aCBpcyB1c2VkIHRvIHNlZSBpZiBpbmNsdWRlcyBhbnkga25vd24gdHJhcCBjb250YWluZXJzIGluIHRoZVxuICAgKiAgY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBpcyBpbnNpZGUgYSBTaGFkb3cgRE9NLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgY29udGFpbmVyIGluIGVpdGhlciBgc3RhdGUuY29udGFpbmVyc2Agb3JcbiAgICogIGBzdGF0ZS5jb250YWluZXJHcm91cHNgICh0aGUgb3JkZXIvbGVuZ3RoIG9mIHRoZXNlIGxpc3RzIGFyZSB0aGUgc2FtZSk7IC0xXG4gICAqICBpZiB0aGUgZWxlbWVudCBpc24ndCBmb3VuZC5cbiAgICovXG4gIGNvbnN0IGZpbmRDb250YWluZXJJbmRleCA9IGZ1bmN0aW9uIChlbGVtZW50LCBldmVudCkge1xuICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9XG4gICAgICB0eXBlb2YgZXZlbnQ/LmNvbXBvc2VkUGF0aCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGV2ZW50LmNvbXBvc2VkUGF0aCgpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIC8vIE5PVEU6IHNlYXJjaCBgY29udGFpbmVyR3JvdXBzYCBiZWNhdXNlIGl0J3MgcG9zc2libGUgYSBncm91cCBjb250YWlucyBubyB0YWJiYWJsZVxuICAgIC8vICBub2RlcywgYnV0IHN0aWxsIGNvbnRhaW5zIGZvY3VzYWJsZSBub2RlcyAoZS5nLiBpZiB0aGV5IGFsbCBoYXZlIGB0YWJpbmRleD0tMWApXG4gICAgLy8gIGFuZCB3ZSBzdGlsbCBuZWVkIHRvIGZpbmQgdGhlIGVsZW1lbnQgaW4gdGhlcmVcbiAgICByZXR1cm4gc3RhdGUuY29udGFpbmVyR3JvdXBzLmZpbmRJbmRleChcbiAgICAgICh7IGNvbnRhaW5lciwgdGFiYmFibGVOb2RlcyB9KSA9PlxuICAgICAgICBjb250YWluZXIuY29udGFpbnMoZWxlbWVudCkgfHxcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGV4cGxpY2l0IHRhYmJhYmxlIHNlYXJjaCB3aGljaCB3aWxsIHRha2UgaW50byBjb25zaWRlcmF0aW9uIGFueVxuICAgICAgICAvLyAgd2ViIGNvbXBvbmVudHMgaWYgdGhlIGB0YWJiYWJsZU9wdGlvbnMuZ2V0U2hhZG93Um9vdGAgb3B0aW9uIHdhcyB1c2VkIGZvclxuICAgICAgICAvLyAgdGhlIHRyYXAsIGVuYWJsaW5nIHNoYWRvdyBET00gc3VwcG9ydCBpbiB0YWJiYWJsZSAoYE5vZGUuY29udGFpbnMoKWAgZG9lc24ndFxuICAgICAgICAvLyAgbG9vayBpbnNpZGUgd2ViIGNvbXBvbmVudHMgZXZlbiBpZiBvcGVuKVxuICAgICAgICBjb21wb3NlZFBhdGg/LmluY2x1ZGVzKGNvbnRhaW5lcikgfHxcbiAgICAgICAgdGFiYmFibGVOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlID09PSBlbGVtZW50KVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG5vZGUgZm9yIHRoZSBnaXZlbiBvcHRpb24sIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIGFuIG9wdGlvbiB0aGF0XG4gICAqICBjYW4gYmUgZWl0aGVyIGEgRE9NIG5vZGUsIGEgc3RyaW5nIHRoYXQgaXMgYSBzZWxlY3RvciB0byBnZXQgYSBub2RlLCBgZmFsc2VgXG4gICAqICAoaWYgYSBub2RlIGlzIGV4cGxpY2l0bHkgTk9UIGdpdmVuKSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW55IG9mIHRoZXNlXG4gICAqICB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25OYW1lXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWQgfCBmYWxzZSB8IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudH0gUmV0dXJuc1xuICAgKiAgYHVuZGVmaW5lZGAgaWYgdGhlIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkOyBgZmFsc2VgIGlmIHRoZSBvcHRpb25cbiAgICogIHJlc29sdmVkIHRvIGBmYWxzZWAgKG5vZGUgZXhwbGljaXRseSBub3QgZ2l2ZW4pOyBvdGhlcndpc2UsIHRoZSByZXNvbHZlZFxuICAgKiAgRE9NIG5vZGUuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgb3B0aW9uIGlzIHNldCwgbm90IGBmYWxzZWAsIGFuZCBpcyBub3QsIG9yIGRvZXMgbm90XG4gICAqICByZXNvbHZlIHRvIGEgbm9kZS5cbiAgICovXG4gIGNvbnN0IGdldE5vZGVGb3JPcHRpb24gPSBmdW5jdGlvbiAob3B0aW9uTmFtZSwgLi4ucGFyYW1zKSB7XG4gICAgbGV0IG9wdGlvblZhbHVlID0gY29uZmlnW29wdGlvbk5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25WYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb25WYWx1ZSguLi5wYXJhbXMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25WYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9uVmFsdWUgPSB1bmRlZmluZWQ7IC8vIHVzZSBkZWZhdWx0IHZhbHVlXG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25WYWx1ZSkge1xuICAgICAgaWYgKG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQgfHwgb3B0aW9uVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25WYWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UsIGVtcHR5IHN0cmluZyAoaW52YWxpZCksIG51bGwgKGludmFsaWQpLCAwIChpbnZhbGlkKVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBcXGAke29wdGlvbk5hbWV9XFxgIHdhcyBzcGVjaWZpZWQgYnV0IHdhcyBub3QgYSBub2RlLCBvciBkaWQgbm90IHJldHVybiBhIG5vZGVgXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBub2RlID0gb3B0aW9uVmFsdWU7IC8vIGNvdWxkIGJlIEhUTUxFbGVtZW50LCBTVkdFbGVtZW50LCBvciBub24tZW1wdHkgc3RyaW5nIGF0IHRoaXMgcG9pbnRcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBub2RlID0gZG9jLnF1ZXJ5U2VsZWN0b3Iob3B0aW9uVmFsdWUpOyAvLyByZXNvbHZlIHRvIG5vZGUsIG9yIG51bGwgaWYgZmFpbHNcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFxcYCR7b3B0aW9uTmFtZX1cXGAgYXMgc2VsZWN0b3IgcmVmZXJzIHRvIG5vIGtub3duIG5vZGVgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG5cbiAgY29uc3QgZ2V0SW5pdGlhbEZvY3VzTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgbm9kZSA9IGdldE5vZGVGb3JPcHRpb24oJ2luaXRpYWxGb2N1cycpO1xuXG4gICAgLy8gZmFsc2UgZXhwbGljaXRseSBpbmRpY2F0ZXMgd2Ugd2FudCBubyBpbml0aWFsRm9jdXMgYXQgYWxsXG4gICAgaWYgKG5vZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCB8fCAhaXNGb2N1c2FibGUobm9kZSwgY29uZmlnLnRhYmJhYmxlT3B0aW9ucykpIHtcbiAgICAgIC8vIG9wdGlvbiBub3Qgc3BlY2lmaWVkIG5vciBmb2N1c2FibGU6IHVzZSBmYWxsYmFjayBvcHRpb25zXG4gICAgICBpZiAoZmluZENvbnRhaW5lckluZGV4KGRvYy5hY3RpdmVFbGVtZW50KSA+PSAwKSB7XG4gICAgICAgIG5vZGUgPSBkb2MuYWN0aXZlRWxlbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VGFiYmFibGVHcm91cCA9IHN0YXRlLnRhYmJhYmxlR3JvdXBzWzBdO1xuICAgICAgICBjb25zdCBmaXJzdFRhYmJhYmxlTm9kZSA9XG4gICAgICAgICAgZmlyc3RUYWJiYWJsZUdyb3VwICYmIGZpcnN0VGFiYmFibGVHcm91cC5maXJzdFRhYmJhYmxlTm9kZTtcblxuICAgICAgICAvLyBOT1RFOiBgZmFsbGJhY2tGb2N1c2Agb3B0aW9uIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYGZhbHNlYCAobm90IHN1cHBvcnRlZClcbiAgICAgICAgbm9kZSA9IGZpcnN0VGFiYmFibGVOb2RlIHx8IGdldE5vZGVGb3JPcHRpb24oJ2ZhbGxiYWNrRm9jdXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdXIgZm9jdXMtdHJhcCBuZWVkcyB0byBoYXZlIGF0IGxlYXN0IG9uZSBmb2N1c2FibGUgZWxlbWVudCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlVGFiYmFibGVOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzdGF0ZS5jb250YWluZXJHcm91cHMgPSBzdGF0ZS5jb250YWluZXJzLm1hcCgoY29udGFpbmVyKSA9PiB7XG4gICAgICBjb25zdCB0YWJiYWJsZU5vZGVzID0gdGFiYmFibGUoY29udGFpbmVyLCBjb25maWcudGFiYmFibGVPcHRpb25zKTtcblxuICAgICAgLy8gTk9URTogaWYgd2UgaGF2ZSB0YWJiYWJsZSBub2Rlcywgd2UgbXVzdCBoYXZlIGZvY3VzYWJsZSBub2RlczsgZm9jdXNhYmxlIG5vZGVzXG4gICAgICAvLyAgYXJlIGEgc3VwZXJzZXQgb2YgdGFiYmFibGUgbm9kZXMgc2luY2Ugbm9kZXMgd2l0aCBuZWdhdGl2ZSBgdGFiaW5kZXhgIGF0dHJpYnV0ZXNcbiAgICAgIC8vICBhcmUgZm9jdXNhYmxlIGJ1dCBub3QgdGFiYmFibGVcbiAgICAgIGNvbnN0IGZvY3VzYWJsZU5vZGVzID0gZm9jdXNhYmxlKGNvbnRhaW5lciwgY29uZmlnLnRhYmJhYmxlT3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGZpcnN0VGFiYmFibGVOb2RlID1cbiAgICAgICAgdGFiYmFibGVOb2Rlcy5sZW5ndGggPiAwID8gdGFiYmFibGVOb2Rlc1swXSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGxhc3RUYWJiYWJsZU5vZGUgPVxuICAgICAgICB0YWJiYWJsZU5vZGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRhYmJhYmxlTm9kZXNbdGFiYmFibGVOb2Rlcy5sZW5ndGggLSAxXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBmaXJzdERvbVRhYmJhYmxlTm9kZSA9IGZvY3VzYWJsZU5vZGVzLmZpbmQoKG5vZGUpID0+XG4gICAgICAgIGlzVGFiYmFibGUobm9kZSlcbiAgICAgICk7XG4gICAgICBjb25zdCBsYXN0RG9tVGFiYmFibGVOb2RlID0gZm9jdXNhYmxlTm9kZXNcbiAgICAgICAgLnNsaWNlKClcbiAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAuZmluZCgobm9kZSkgPT4gaXNUYWJiYWJsZShub2RlKSk7XG5cbiAgICAgIGNvbnN0IHBvc1RhYkluZGV4ZXNGb3VuZCA9ICEhdGFiYmFibGVOb2Rlcy5maW5kKFxuICAgICAgICAobm9kZSkgPT4gZ2V0VGFiSW5kZXgobm9kZSkgPiAwXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIHRhYmJhYmxlTm9kZXMsXG4gICAgICAgIGZvY3VzYWJsZU5vZGVzLFxuXG4gICAgICAgIC8qKiBUcnVlIGlmIGF0IGxlYXN0IG9uZSBub2RlIHdpdGggcG9zaXRpdmUgYHRhYmluZGV4YCB3YXMgZm91bmQgaW4gdGhpcyBjb250YWluZXIuICovXG4gICAgICAgIHBvc1RhYkluZGV4ZXNGb3VuZCxcblxuICAgICAgICAvKiogRmlyc3QgdGFiYmFibGUgbm9kZSBpbiBjb250YWluZXIsIF9fdGFiaW5kZXhfXyBvcmRlcjsgYHVuZGVmaW5lZGAgaWYgbm9uZS4gKi9cbiAgICAgICAgZmlyc3RUYWJiYWJsZU5vZGUsXG4gICAgICAgIC8qKiBMYXN0IHRhYmJhYmxlIG5vZGUgaW4gY29udGFpbmVyLCBfX3RhYmluZGV4X18gb3JkZXI7IGB1bmRlZmluZWRgIGlmIG5vbmUuICovXG4gICAgICAgIGxhc3RUYWJiYWJsZU5vZGUsXG5cbiAgICAgICAgLy8gTk9URTogRE9NIG9yZGVyIGlzIE5PVCBORUNFU1NBUklMWSBcImRvY3VtZW50IHBvc2l0aW9uXCIgb3JkZXIsIGJ1dCBmaWd1cmluZyB0aGF0IG91dFxuICAgICAgICAvLyAgd291bGQgcmVxdWlyZSBtb3JlIHRoYW4ganVzdCBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS9jb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuICAgICAgICAvLyAgYmVjYXVzZSB0aGF0IEFQSSBkb2Vzbid0IHdvcmsgd2l0aCBTaGFkb3cgRE9NIGFzIHdlbGwgYXMgaXQgc2hvdWxkIChAc2VlXG4gICAgICAgIC8vICBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2RvbS9pc3N1ZXMvMzIwKSBhbmQgc2luY2UgdGhpcyBmaXJzdC9sYXN0IGlzIG9ubHkgbmVlZGVkLCBzbyBmYXIsXG4gICAgICAgIC8vICB0byBhZGRyZXNzIGFuIGVkZ2UgY2FzZSByZWxhdGVkIHRvIHBvc2l0aXZlIHRhYmluZGV4IHN1cHBvcnQsIHRoaXMgc2VlbXMgbGlrZSBhIG11Y2ggZWFzaWVyLFxuICAgICAgICAvLyAgXCJjbG9zZSBlbm91Z2ggbW9zdCBvZiB0aGUgdGltZVwiIGFsdGVybmF0aXZlIGZvciBwb3NpdGl2ZSB0YWJpbmRleGVzIHdoaWNoIHNob3VsZCBnZW5lcmFsbHlcbiAgICAgICAgLy8gIGJlIGF2b2lkZWQgYW55d2F5Li4uXG4gICAgICAgIC8qKiBGaXJzdCB0YWJiYWJsZSBub2RlIGluIGNvbnRhaW5lciwgX19ET01fXyBvcmRlcjsgYHVuZGVmaW5lZGAgaWYgbm9uZS4gKi9cbiAgICAgICAgZmlyc3REb21UYWJiYWJsZU5vZGUsXG4gICAgICAgIC8qKiBMYXN0IHRhYmJhYmxlIG5vZGUgaW4gY29udGFpbmVyLCBfX0RPTV9fIG9yZGVyOyBgdW5kZWZpbmVkYCBpZiBub25lLiAqL1xuICAgICAgICBsYXN0RG9tVGFiYmFibGVOb2RlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kcyB0aGUgX190YWJiYWJsZV9fIG5vZGUgdGhhdCBmb2xsb3dzIHRoZSBnaXZlbiBub2RlIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uLFxuICAgICAgICAgKiAgaW4gdGhpcyBjb250YWluZXIsIGlmIGFueS5cbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3J3YXJkXSBUcnVlIGlmIGdvaW5nIGluIGZvcndhcmQgdGFiIG9yZGVyOyBmYWxzZSBpZiBnb2luZ1xuICAgICAgICAgKiAgaW4gcmV2ZXJzZS5cbiAgICAgICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fHVuZGVmaW5lZH0gVGhlIG5leHQgdGFiYmFibGUgbm9kZSwgaWYgYW55LlxuICAgICAgICAgKi9cbiAgICAgICAgbmV4dFRhYmJhYmxlTm9kZShub2RlLCBmb3J3YXJkID0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGVJZHggPSB0YWJiYWJsZU5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgICAgICAgaWYgKG5vZGVJZHggPCAwKSB7XG4gICAgICAgICAgICAvLyBlaXRoZXIgbm90IHRhYmJhYmxlIG5vciBmb2N1c2FibGUsIG9yIHdhcyBmb2N1c2VkIGJ1dCBub3QgdGFiYmFibGUgKG5lZ2F0aXZlIHRhYmluZGV4KTpcbiAgICAgICAgICAgIC8vICBzaW5jZSBgbm9kZWAgc2hvdWxkIGF0IGxlYXN0IGhhdmUgYmVlbiBmb2N1c2FibGUsIHdlIGFzc3VtZSB0aGF0J3MgdGhlIGNhc2UgYW5kIG1pbWljXG4gICAgICAgICAgICAvLyAgd2hhdCBicm93c2VycyBkbywgd2hpY2ggaXMgc2V0IGZvY3VzIHRvIHRoZSBuZXh0IG5vZGUgaW4gX19kb2N1bWVudCBwb3NpdGlvbiBvcmRlcl9fLFxuICAgICAgICAgICAgLy8gIHJlZ2FyZGxlc3Mgb2YgcG9zaXRpdmUgdGFiaW5kZXhlcywgaWYgYW55IC0tIGFuZCBmb3IgcmVhc29ucyBleHBsYWluZWQgaW4gdGhlIE5PVEVcbiAgICAgICAgICAgIC8vICBhYm92ZSByZWxhdGVkIHRvIGBmaXJzdERvbVRhYmJhYmxlYCBhbmQgYGxhc3REb21UYWJiYWJsZWAgcHJvcGVydGllcywgd2UgZmFsbCBiYWNrIHRvXG4gICAgICAgICAgICAvLyAgYmFzaWMgRE9NIG9yZGVyXG4gICAgICAgICAgICBpZiAoZm9yd2FyZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlTm9kZXNcbiAgICAgICAgICAgICAgICAuc2xpY2UoZm9jdXNhYmxlTm9kZXMuaW5kZXhPZihub2RlKSArIDEpXG4gICAgICAgICAgICAgICAgLmZpbmQoKGVsKSA9PiBpc1RhYmJhYmxlKGVsKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVOb2Rlc1xuICAgICAgICAgICAgICAuc2xpY2UoMCwgZm9jdXNhYmxlTm9kZXMuaW5kZXhPZihub2RlKSlcbiAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAuZmluZCgoZWwpID0+IGlzVGFiYmFibGUoZWwpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGFiYmFibGVOb2Rlc1tub2RlSWR4ICsgKGZvcndhcmQgPyAxIDogLTEpXTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBzdGF0ZS50YWJiYWJsZUdyb3VwcyA9IHN0YXRlLmNvbnRhaW5lckdyb3Vwcy5maWx0ZXIoXG4gICAgICAoZ3JvdXApID0+IGdyb3VwLnRhYmJhYmxlTm9kZXMubGVuZ3RoID4gMFxuICAgICk7XG5cbiAgICAvLyB0aHJvdyBpZiBubyBncm91cHMgaGF2ZSB0YWJiYWJsZSBub2RlcyBhbmQgd2UgZG9uJ3QgaGF2ZSBhIGZhbGxiYWNrIGZvY3VzIG5vZGUgZWl0aGVyXG4gICAgaWYgKFxuICAgICAgc3RhdGUudGFiYmFibGVHcm91cHMubGVuZ3RoIDw9IDAgJiZcbiAgICAgICFnZXROb2RlRm9yT3B0aW9uKCdmYWxsYmFja0ZvY3VzJykgLy8gcmV0dXJuaW5nIGZhbHNlIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgb3B0aW9uXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdZb3VyIGZvY3VzLXRyYXAgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjb250YWluZXIgd2l0aCBhdCBsZWFzdCBvbmUgdGFiYmFibGUgbm9kZSBpbiBpdCBhdCBhbGwgdGltZXMnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IFBvc2l0aXZlIHRhYmluZGV4ZXMgYXJlIG9ubHkgcHJvcGVybHkgc3VwcG9ydGVkIGluIHNpbmdsZS1jb250YWluZXIgdHJhcHMgYmVjYXVzZVxuICAgIC8vICBkb2luZyBpdCBhY3Jvc3MgbXVsdGlwbGUgY29udGFpbmVycyB3aGVyZSB0YWJpbmRleGVzIGNvdWxkIGJlIGFsbCBvdmVyIHRoZSBwbGFjZVxuICAgIC8vICB3b3VsZCByZXF1aXJlIFRhYmJhYmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGFpbmVycywgd291bGQgcmVxdWlyZSBhZGRpdGlvbmFsXG4gICAgLy8gIHNwZWNpYWxpemVkIFNoYWRvdyBET00gc3VwcG9ydCwgYW5kIHdvdWxkIHJlcXVpcmUgVGFiYmFibGUncyBtdWx0aS1jb250YWluZXIgc3VwcG9ydFxuICAgIC8vICB0byBsb29rIGF0IHRob3NlIGNvbnRhaW5lcnMgaW4gZG9jdW1lbnQgcG9zaXRpb24gb3JkZXIgcmF0aGVyIHRoYW4gdXNlci1wcm92aWRlZFxuICAgIC8vICBvcmRlciAoYXMgdGhleSBhcmUgdHJlYXRlZCBpbiBGb2N1cy10cmFwLCBmb3IgbGVnYWN5IHJlYXNvbnMpLiBTZWUgZGlzY3Vzc2lvbiBvblxuICAgIC8vICBodHRwczovL2dpdGh1Yi5jb20vZm9jdXMtdHJhcC9mb2N1cy10cmFwL2lzc3Vlcy8zNzUgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5jb250YWluZXJHcm91cHMuZmluZCgoZykgPT4gZy5wb3NUYWJJbmRleGVzRm91bmQpICYmXG4gICAgICBzdGF0ZS5jb250YWluZXJHcm91cHMubGVuZ3RoID4gMVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF0IGxlYXN0IG9uZSBub2RlIHdpdGggYSBwb3NpdGl2ZSB0YWJpbmRleCB3YXMgZm91bmQgaW4gb25lIG9mIHlvdXIgZm9jdXMtdHJhcCdzIG11bHRpcGxlIGNvbnRhaW5lcnMuIFBvc2l0aXZlIHRhYmluZGV4ZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHNpbmdsZS1jb250YWluZXIgZm9jdXMtdHJhcHMuXCJcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGFjdGl2ZUVsZW1lbnQuIElmIGl0J3MgYSB3ZWItY29tcG9uZW50IGFuZCBoYXMgb3BlbiBzaGFkb3ctcm9vdFxuICAgKiBpdCB3aWxsIHJlY3Vyc2l2ZWx5IHNlYXJjaCBpbnNpZGUgc2hhZG93IHJvb3RzIGZvciB0aGUgXCJ0cnVlXCIgYWN0aXZlRWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtEb2N1bWVudCB8IFNoYWRvd1Jvb3R9IGVsXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIGVsZW1lbnQgdGhhdCBjdXJyZW50bHkgaGFzIHRoZSBmb2N1c1xuICAgKiovXG4gIGNvbnN0IGdldEFjdGl2ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZWwuYWN0aXZlRWxlbWVudDtcblxuICAgIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCAmJlxuICAgICAgYWN0aXZlRWxlbWVudC5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQgIT09IG51bGxcbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnQ7XG4gIH07XG5cbiAgY29uc3QgdHJ5Rm9jdXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBnZXRBY3RpdmVFbGVtZW50KGRvY3VtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghbm9kZSB8fCAhbm9kZS5mb2N1cykge1xuICAgICAgdHJ5Rm9jdXMoZ2V0SW5pdGlhbEZvY3VzTm9kZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLmZvY3VzKHsgcHJldmVudFNjcm9sbDogISFjb25maWcucHJldmVudFNjcm9sbCB9KTtcbiAgICAvLyBOT1RFOiBmb2N1cygpIEFQSSBkb2VzIG5vdCB0cmlnZ2VyIGZvY3VzSW4gZXZlbnQgc28gc2V0IE1SVSBub2RlIG1hbnVhbGx5XG4gICAgc3RhdGUubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGUgPSBub2RlO1xuXG4gICAgaWYgKGlzU2VsZWN0YWJsZUlucHV0KG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdCgpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRSZXR1cm5Gb2N1c05vZGUgPSBmdW5jdGlvbiAocHJldmlvdXNBY3RpdmVFbGVtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IGdldE5vZGVGb3JPcHRpb24oJ3NldFJldHVybkZvY3VzJywgcHJldmlvdXNBY3RpdmVFbGVtZW50KTtcbiAgICByZXR1cm4gbm9kZSA/IG5vZGUgOiBub2RlID09PSBmYWxzZSA/IGZhbHNlIDogcHJldmlvdXNBY3RpdmVFbGVtZW50O1xuICB9O1xuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgbmV4dCBub2RlIChpbiBlaXRoZXIgZGlyZWN0aW9uKSB3aGVyZSBmb2N1cyBzaG91bGQgbW92ZSBhY2NvcmRpbmcgdG8gYVxuICAgKiAga2V5Ym9hcmQgZm9jdXMtaW4gZXZlbnQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtOb2RlfSBbcGFyYW1zLnRhcmdldF0gS25vd24gdGFyZ2V0IF9fZnJvbSB3aGljaF9fIHRvIG5hdmlnYXRlLCBpZiBhbnkuXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudHxGb2N1c0V2ZW50fSBbcGFyYW1zLmV2ZW50XSBFdmVudCB0byB1c2UgaWYgYHRhcmdldGAgaXNuJ3Qga25vd24gKGV2ZW50XG4gICAqICB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBgdGFyZ2V0YCkuIElnbm9yZWQgaWYgYHRhcmdldGAgaXMgc3BlY2lmaWVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXJhbXMuaXNCYWNrd2FyZF0gVHJ1ZSBpZiBmb2N1cyBzaG91bGQgbW92ZSBiYWNrd2FyZC5cbiAgICogQHJldHVybnMge05vZGV8dW5kZWZpbmVkfSBUaGUgbmV4dCBub2RlLCBvciBgdW5kZWZpbmVkYCBpZiBhIG5leHQgbm9kZSBjb3VsZG4ndCBiZVxuICAgKiAgZGV0ZXJtaW5lZCBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdHJhcC5cbiAgICovXG4gIGNvbnN0IGZpbmROZXh0TmF2Tm9kZSA9IGZ1bmN0aW9uICh7IHRhcmdldCwgZXZlbnQsIGlzQmFja3dhcmQgPSBmYWxzZSB9KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IGdldEFjdHVhbFRhcmdldChldmVudCk7XG4gICAgdXBkYXRlVGFiYmFibGVOb2RlcygpO1xuXG4gICAgbGV0IGRlc3RpbmF0aW9uTm9kZSA9IG51bGw7XG5cbiAgICBpZiAoc3RhdGUudGFiYmFibGVHcm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gbWFrZSBzdXJlIHRoZSB0YXJnZXQgaXMgYWN0dWFsbHkgY29udGFpbmVkIGluIGEgZ3JvdXBcbiAgICAgIC8vIE5PVEU6IHRoZSB0YXJnZXQgbWF5IGFsc28gYmUgdGhlIGNvbnRhaW5lciBpdHNlbGYgaWYgaXQncyBmb2N1c2FibGVcbiAgICAgIC8vICB3aXRoIHRhYkluZGV4PSctMScgYW5kIHdhcyBnaXZlbiBpbml0aWFsIGZvY3VzXG4gICAgICBjb25zdCBjb250YWluZXJJbmRleCA9IGZpbmRDb250YWluZXJJbmRleCh0YXJnZXQsIGV2ZW50KTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckdyb3VwID1cbiAgICAgICAgY29udGFpbmVySW5kZXggPj0gMCA/IHN0YXRlLmNvbnRhaW5lckdyb3Vwc1tjb250YWluZXJJbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChjb250YWluZXJJbmRleCA8IDApIHtcbiAgICAgICAgLy8gdGFyZ2V0IG5vdCBmb3VuZCBpbiBhbnkgZ3JvdXA6IHF1aXRlIHBvc3NpYmxlIGZvY3VzIGhhcyBlc2NhcGVkIHRoZSB0cmFwLFxuICAgICAgICAvLyAgc28gYnJpbmcgaXQgYmFjayBpbnRvLi4uXG4gICAgICAgIGlmIChpc0JhY2t3YXJkKSB7XG4gICAgICAgICAgLy8gLi4udGhlIGxhc3Qgbm9kZSBpbiB0aGUgbGFzdCBncm91cFxuICAgICAgICAgIGRlc3RpbmF0aW9uTm9kZSA9XG4gICAgICAgICAgICBzdGF0ZS50YWJiYWJsZUdyb3Vwc1tzdGF0ZS50YWJiYWJsZUdyb3Vwcy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAubGFzdFRhYmJhYmxlTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAuLi50aGUgZmlyc3Qgbm9kZSBpbiB0aGUgZmlyc3QgZ3JvdXBcbiAgICAgICAgICBkZXN0aW5hdGlvbk5vZGUgPSBzdGF0ZS50YWJiYWJsZUdyb3Vwc1swXS5maXJzdFRhYmJhYmxlTm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0JhY2t3YXJkKSB7XG4gICAgICAgIC8vIFJFVkVSU0VcblxuICAgICAgICAvLyBpcyB0aGUgdGFyZ2V0IHRoZSBmaXJzdCB0YWJiYWJsZSBub2RlIGluIGEgZ3JvdXA/XG4gICAgICAgIGxldCBzdGFydE9mR3JvdXBJbmRleCA9IGZpbmRJbmRleChcbiAgICAgICAgICBzdGF0ZS50YWJiYWJsZUdyb3VwcyxcbiAgICAgICAgICAoeyBmaXJzdFRhYmJhYmxlTm9kZSB9KSA9PiB0YXJnZXQgPT09IGZpcnN0VGFiYmFibGVOb2RlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXJ0T2ZHcm91cEluZGV4IDwgMCAmJlxuICAgICAgICAgIChjb250YWluZXJHcm91cC5jb250YWluZXIgPT09IHRhcmdldCB8fFxuICAgICAgICAgICAgKGlzRm9jdXNhYmxlKHRhcmdldCwgY29uZmlnLnRhYmJhYmxlT3B0aW9ucykgJiZcbiAgICAgICAgICAgICAgIWlzVGFiYmFibGUodGFyZ2V0LCBjb25maWcudGFiYmFibGVPcHRpb25zKSAmJlxuICAgICAgICAgICAgICAhY29udGFpbmVyR3JvdXAubmV4dFRhYmJhYmxlTm9kZSh0YXJnZXQsIGZhbHNlKSkpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGFuIGV4Y2VwdGlvbiBjYXNlIHdoZXJlIHRoZSB0YXJnZXQgaXMgZWl0aGVyIHRoZSBjb250YWluZXIgaXRzZWxmLCBvclxuICAgICAgICAgIC8vICBhIG5vbi10YWJiYWJsZSBub2RlIHRoYXQgd2FzIGdpdmVuIGZvY3VzIChpLmUuIHRhYmluZGV4IGlzIG5lZ2F0aXZlXG4gICAgICAgICAgLy8gIGFuZCB1c2VyIGNsaWNrZWQgb24gaXQgb3Igbm9kZSB3YXMgcHJvZ3JhbW1hdGljYWxseSBnaXZlbiBmb2N1cylcbiAgICAgICAgICAvLyAgYW5kIGlzIG5vdCBmb2xsb3dlZCBieSBhbnkgb3RoZXIgdGFiYmFibGUgbm9kZSwgaW4gd2hpY2hcbiAgICAgICAgICAvLyAgY2FzZSwgd2Ugc2hvdWxkIGhhbmRsZSBzaGlmdCt0YWIgYXMgaWYgZm9jdXMgd2VyZSBvbiB0aGUgY29udGFpbmVyJ3NcbiAgICAgICAgICAvLyAgZmlyc3QgdGFiYmFibGUgbm9kZSwgYW5kIGdvIHRvIHRoZSBsYXN0IHRhYmJhYmxlIG5vZGUgb2YgdGhlIExBU1QgZ3JvdXBcbiAgICAgICAgICBzdGFydE9mR3JvdXBJbmRleCA9IGNvbnRhaW5lckluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0T2ZHcm91cEluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyBZRVM6IHRoZW4gc2hpZnQrdGFiIHNob3VsZCBnbyB0byB0aGUgbGFzdCB0YWJiYWJsZSBub2RlIGluIHRoZVxuICAgICAgICAgIC8vICBwcmV2aW91cyBncm91cCAoYW5kIHdyYXAgYXJvdW5kIHRvIHRoZSBsYXN0IHRhYmJhYmxlIG5vZGUgb2ZcbiAgICAgICAgICAvLyAgdGhlIExBU1QgZ3JvdXAgaWYgaXQncyB0aGUgZmlyc3QgdGFiYmFibGUgbm9kZSBvZiB0aGUgRklSU1QgZ3JvdXApXG4gICAgICAgICAgY29uc3QgZGVzdGluYXRpb25Hcm91cEluZGV4ID1cbiAgICAgICAgICAgIHN0YXJ0T2ZHcm91cEluZGV4ID09PSAwXG4gICAgICAgICAgICAgID8gc3RhdGUudGFiYmFibGVHcm91cHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICA6IHN0YXJ0T2ZHcm91cEluZGV4IC0gMTtcblxuICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uR3JvdXAgPSBzdGF0ZS50YWJiYWJsZUdyb3Vwc1tkZXN0aW5hdGlvbkdyb3VwSW5kZXhdO1xuXG4gICAgICAgICAgZGVzdGluYXRpb25Ob2RlID1cbiAgICAgICAgICAgIGdldFRhYkluZGV4KHRhcmdldCkgPj0gMFxuICAgICAgICAgICAgICA/IGRlc3RpbmF0aW9uR3JvdXAubGFzdFRhYmJhYmxlTm9kZVxuICAgICAgICAgICAgICA6IGRlc3RpbmF0aW9uR3JvdXAubGFzdERvbVRhYmJhYmxlTm9kZTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNUYWJFdmVudChldmVudCkpIHtcbiAgICAgICAgICAvLyB1c2VyIG11c3QgaGF2ZSBjdXN0b21pemVkIHRoZSBuYXYga2V5cyBzbyB3ZSBoYXZlIHRvIG1vdmUgZm9jdXMgbWFudWFsbHkgX3dpdGhpbl9cbiAgICAgICAgICAvLyAgdGhlIGFjdGl2ZSBncm91cDogZG8gdGhpcyBiYXNlZCBvbiB0aGUgb3JkZXIgZGV0ZXJtaW5lZCBieSB0YWJiYWJsZSgpXG4gICAgICAgICAgZGVzdGluYXRpb25Ob2RlID0gY29udGFpbmVyR3JvdXAubmV4dFRhYmJhYmxlTm9kZSh0YXJnZXQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRk9SV0FSRFxuXG4gICAgICAgIC8vIGlzIHRoZSB0YXJnZXQgdGhlIGxhc3QgdGFiYmFibGUgbm9kZSBpbiBhIGdyb3VwP1xuICAgICAgICBsZXQgbGFzdE9mR3JvdXBJbmRleCA9IGZpbmRJbmRleChcbiAgICAgICAgICBzdGF0ZS50YWJiYWJsZUdyb3VwcyxcbiAgICAgICAgICAoeyBsYXN0VGFiYmFibGVOb2RlIH0pID0+IHRhcmdldCA9PT0gbGFzdFRhYmJhYmxlTm9kZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBsYXN0T2ZHcm91cEluZGV4IDwgMCAmJlxuICAgICAgICAgIChjb250YWluZXJHcm91cC5jb250YWluZXIgPT09IHRhcmdldCB8fFxuICAgICAgICAgICAgKGlzRm9jdXNhYmxlKHRhcmdldCwgY29uZmlnLnRhYmJhYmxlT3B0aW9ucykgJiZcbiAgICAgICAgICAgICAgIWlzVGFiYmFibGUodGFyZ2V0LCBjb25maWcudGFiYmFibGVPcHRpb25zKSAmJlxuICAgICAgICAgICAgICAhY29udGFpbmVyR3JvdXAubmV4dFRhYmJhYmxlTm9kZSh0YXJnZXQpKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gYW4gZXhjZXB0aW9uIGNhc2Ugd2hlcmUgdGhlIHRhcmdldCBpcyB0aGUgY29udGFpbmVyIGl0c2VsZiwgb3JcbiAgICAgICAgICAvLyAgYSBub24tdGFiYmFibGUgbm9kZSB0aGF0IHdhcyBnaXZlbiBmb2N1cyAoaS5lLiB0YWJpbmRleCBpcyBuZWdhdGl2ZVxuICAgICAgICAgIC8vICBhbmQgdXNlciBjbGlja2VkIG9uIGl0IG9yIG5vZGUgd2FzIHByb2dyYW1tYXRpY2FsbHkgZ2l2ZW4gZm9jdXMpXG4gICAgICAgICAgLy8gIGFuZCBpcyBub3QgZm9sbG93ZWQgYnkgYW55IG90aGVyIHRhYmJhYmxlIG5vZGUsIGluIHdoaWNoXG4gICAgICAgICAgLy8gIGNhc2UsIHdlIHNob3VsZCBoYW5kbGUgdGFiIGFzIGlmIGZvY3VzIHdlcmUgb24gdGhlIGNvbnRhaW5lcidzXG4gICAgICAgICAgLy8gIGxhc3QgdGFiYmFibGUgbm9kZSwgYW5kIGdvIHRvIHRoZSBmaXJzdCB0YWJiYWJsZSBub2RlIG9mIHRoZSBGSVJTVCBncm91cFxuICAgICAgICAgIGxhc3RPZkdyb3VwSW5kZXggPSBjb250YWluZXJJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0T2ZHcm91cEluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyBZRVM6IHRoZW4gdGFiIHNob3VsZCBnbyB0byB0aGUgZmlyc3QgdGFiYmFibGUgbm9kZSBpbiB0aGUgbmV4dFxuICAgICAgICAgIC8vICBncm91cCAoYW5kIHdyYXAgYXJvdW5kIHRvIHRoZSBmaXJzdCB0YWJiYWJsZSBub2RlIG9mIHRoZSBGSVJTVFxuICAgICAgICAgIC8vICBncm91cCBpZiBpdCdzIHRoZSBsYXN0IHRhYmJhYmxlIG5vZGUgb2YgdGhlIExBU1QgZ3JvdXApXG4gICAgICAgICAgY29uc3QgZGVzdGluYXRpb25Hcm91cEluZGV4ID1cbiAgICAgICAgICAgIGxhc3RPZkdyb3VwSW5kZXggPT09IHN0YXRlLnRhYmJhYmxlR3JvdXBzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgIDogbGFzdE9mR3JvdXBJbmRleCArIDE7XG5cbiAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvbkdyb3VwID0gc3RhdGUudGFiYmFibGVHcm91cHNbZGVzdGluYXRpb25Hcm91cEluZGV4XTtcblxuICAgICAgICAgIGRlc3RpbmF0aW9uTm9kZSA9XG4gICAgICAgICAgICBnZXRUYWJJbmRleCh0YXJnZXQpID49IDBcbiAgICAgICAgICAgICAgPyBkZXN0aW5hdGlvbkdyb3VwLmZpcnN0VGFiYmFibGVOb2RlXG4gICAgICAgICAgICAgIDogZGVzdGluYXRpb25Hcm91cC5maXJzdERvbVRhYmJhYmxlTm9kZTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNUYWJFdmVudChldmVudCkpIHtcbiAgICAgICAgICAvLyB1c2VyIG11c3QgaGF2ZSBjdXN0b21pemVkIHRoZSBuYXYga2V5cyBzbyB3ZSBoYXZlIHRvIG1vdmUgZm9jdXMgbWFudWFsbHkgX3dpdGhpbl9cbiAgICAgICAgICAvLyAgdGhlIGFjdGl2ZSBncm91cDogZG8gdGhpcyBiYXNlZCBvbiB0aGUgb3JkZXIgZGV0ZXJtaW5lZCBieSB0YWJiYWJsZSgpXG4gICAgICAgICAgZGVzdGluYXRpb25Ob2RlID0gY29udGFpbmVyR3JvdXAubmV4dFRhYmJhYmxlTm9kZSh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIGdyb3VwcyBhdmFpbGFibGVcbiAgICAgIC8vIE5PVEU6IHRoZSBmYWxsYmFja0ZvY3VzIG9wdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHJldHVybmluZyBmYWxzZSB0byBvcHQtb3V0XG4gICAgICBkZXN0aW5hdGlvbk5vZGUgPSBnZXROb2RlRm9yT3B0aW9uKCdmYWxsYmFja0ZvY3VzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uTm9kZTtcbiAgfTtcblxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgb24gbW91c2Vkb3duIGFuZCB0b3VjaHN0YXJ0IGluc3RlYWQgb2YgY2xpY2tcbiAgLy8gc28gdGhhdCBpdCBwcmVjZWRlcyB0aGUgZm9jdXMgZXZlbnQuXG4gIGNvbnN0IGNoZWNrUG9pbnRlckRvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEFjdHVhbFRhcmdldChlKTtcblxuICAgIGlmIChmaW5kQ29udGFpbmVySW5kZXgodGFyZ2V0LCBlKSA+PSAwKSB7XG4gICAgICAvLyBhbGxvdyB0aGUgY2xpY2sgc2luY2UgaXQgb2N1cnJlZCBpbnNpZGUgdGhlIHRyYXBcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVPckhhbmRsZXIoY29uZmlnLmNsaWNrT3V0c2lkZURlYWN0aXZhdGVzLCBlKSkge1xuICAgICAgLy8gaW1tZWRpYXRlbHkgZGVhY3RpdmF0ZSB0aGUgdHJhcFxuICAgICAgdHJhcC5kZWFjdGl2YXRlKHtcbiAgICAgICAgLy8gTk9URTogYnkgc2V0dGluZyBgcmV0dXJuRm9jdXM6IGZhbHNlYCwgZGVhY3RpdmF0ZSgpIHdpbGwgZG8gbm90aGluZyxcbiAgICAgICAgLy8gIHdoaWNoIHdpbGwgcmVzdWx0IGluIHRoZSBvdXRzaWRlIGNsaWNrIHNldHRpbmcgZm9jdXMgdG8gdGhlIG5vZGVcbiAgICAgICAgLy8gIHRoYXQgd2FzIGNsaWNrZWQgKGFuZCBpZiBub3QgZm9jdXNhYmxlLCB0byBcIm5vdGhpbmdcIik7IGJ5IHNldHRpbmdcbiAgICAgICAgLy8gIGByZXR1cm5Gb2N1czogdHJ1ZWAsIHdlJ2xsIGF0dGVtcHQgdG8gcmUtZm9jdXMgdGhlIG5vZGUgb3JpZ2luYWxseS1mb2N1c2VkXG4gICAgICAgIC8vICBvbiBhY3RpdmF0aW9uIChvciB0aGUgY29uZmlndXJlZCBgc2V0UmV0dXJuRm9jdXNgIG5vZGUpLCB3aGV0aGVyIHRoZVxuICAgICAgICAvLyAgb3V0c2lkZSBjbGljayB3YXMgb24gYSBmb2N1c2FibGUgbm9kZSBvciBub3RcbiAgICAgICAgcmV0dXJuRm9jdXM6IGNvbmZpZy5yZXR1cm5Gb2N1c09uRGVhY3RpdmF0ZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBtb2JpbGUgZGV2aWNlcy5cbiAgICAvLyAoSWYgd2UnbGwgb25seSBsZXQgYGNsaWNrYCBldmVudHMgdGhyb3VnaCxcbiAgICAvLyB0aGVuIG9uIG1vYmlsZSB0aGV5IHdpbGwgYmUgYmxvY2tlZCBhbnl3YXlzIGlmIGB0b3VjaHN0YXJ0YCBpcyBibG9ja2VkLilcbiAgICBpZiAodmFsdWVPckhhbmRsZXIoY29uZmlnLmFsbG93T3V0c2lkZUNsaWNrLCBlKSkge1xuICAgICAgLy8gYWxsb3cgdGhlIGNsaWNrIG91dHNpZGUgdGhlIHRyYXAgdG8gdGFrZSBwbGFjZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSwgcHJldmVudCB0aGUgY2xpY2tcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgLy8gSW4gY2FzZSBmb2N1cyBlc2NhcGVzIHRoZSB0cmFwIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uLCBwdWxsIGl0IGJhY2sgaW4uXG4gIC8vIE5PVEU6IHRoZSBmb2N1c0luIGV2ZW50IGlzIE5PVCBjYW5jZWxhYmxlLCBzbyBpZiBmb2N1cyBlc2NhcGVzLCBpdCBtYXkgY2F1c2UgdW5leHBlY3RlZFxuICAvLyAgc2Nyb2xsaW5nIGlmIHRoZSBub2RlIHRoYXQgZ290IGZvY3VzZWQgd2FzIG91dCBvZiB2aWV3OyB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIHRvXG4gIC8vICBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYnkgdGhlIHRpbWUgd2UgZGlzY292ZXIgdGhhdCBmb2N1cyBlc2NhcGVkXG4gIGNvbnN0IGNoZWNrRm9jdXNJbiA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEFjdHVhbFRhcmdldChldmVudCk7XG4gICAgY29uc3QgdGFyZ2V0Q29udGFpbmVkID0gZmluZENvbnRhaW5lckluZGV4KHRhcmdldCwgZXZlbnQpID49IDA7XG5cbiAgICAvLyBJbiBGaXJlZm94IHdoZW4geW91IFRhYiBvdXQgb2YgYW4gaWZyYW1lIHRoZSBEb2N1bWVudCBpcyBicmllZmx5IGZvY3VzZWQuXG4gICAgaWYgKHRhcmdldENvbnRhaW5lZCB8fCB0YXJnZXQgaW5zdGFuY2VvZiBEb2N1bWVudCkge1xuICAgICAgaWYgKHRhcmdldENvbnRhaW5lZCkge1xuICAgICAgICBzdGF0ZS5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZSA9IHRhcmdldDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNjYXBlZCEgcHVsbCBpdCBiYWNrIGluIHRvIHdoZXJlIGl0IGp1c3QgbGVmdFxuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIC8vIGZvY3VzIHdpbGwgZXNjYXBlIGlmIHRoZSBNUlUgbm9kZSBoYWQgYSBwb3NpdGl2ZSB0YWIgaW5kZXggYW5kIHVzZXIgdHJpZWQgdG8gbmF2IGZvcndhcmQ7XG4gICAgICAvLyAgaXQgd2lsbCBhbHNvIGVzY2FwZSBpZiB0aGUgTVJVIG5vZGUgaGFkIGEgMCB0YWIgaW5kZXggYW5kIHVzZXIgdHJpZWQgdG8gbmF2IGJhY2t3YXJkXG4gICAgICAvLyAgdG93YXJkIGEgbm9kZSB3aXRoIGEgcG9zaXRpdmUgdGFiIGluZGV4XG4gICAgICBsZXQgbmV4dE5vZGU7IC8vIG5leHQgbm9kZSB0byBmb2N1cywgaWYgd2UgZmluZCBvbmVcbiAgICAgIGxldCBuYXZBY3Jvc3NDb250YWluZXJzID0gdHJ1ZTtcbiAgICAgIGlmIChzdGF0ZS5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZSkge1xuICAgICAgICBpZiAoZ2V0VGFiSW5kZXgoc3RhdGUubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGUpID4gMCkge1xuICAgICAgICAgIC8vIE1SVSBjb250YWluZXIgaW5kZXggbXVzdCBiZSA+PTAgb3RoZXJ3aXNlIHdlIHdvdWxkbid0IGhhdmUgaXQgYXMgYW4gTVJVIG5vZGUuLi5cbiAgICAgICAgICBjb25zdCBtcnVDb250YWluZXJJZHggPSBmaW5kQ29udGFpbmVySW5kZXgoXG4gICAgICAgICAgICBzdGF0ZS5tb3N0UmVjZW50bHlGb2N1c2VkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gdGhlcmUgTUFZIG5vdCBiZSBhbnkgdGFiYmFibGUgbm9kZXMgaW4gdGhlIGNvbnRhaW5lciBpZiB0aGVyZSBhcmUgYXQgbGVhc3QgMiBjb250YWluZXJzXG4gICAgICAgICAgLy8gIGFuZCB0aGUgTVJVIG5vZGUgaXMgZm9jdXNhYmxlIGJ1dCBub3QgdGFiYmFibGUgKGZvY3VzLXRyYXAgcmVxdWlyZXMgYXQgbGVhc3QgMSBjb250YWluZXJcbiAgICAgICAgICAvLyAgd2l0aCBhdCBsZWFzdCBvbmUgdGFiYmFibGUgbm9kZSBpbiBvcmRlciB0byBmdW5jdGlvbiwgc28gdGhpcyBjb3VsZCBiZSB0aGUgb3RoZXIgY29udGFpbmVyXG4gICAgICAgICAgLy8gIHdpdGggbm90aGluZyB0YWJiYWJsZSBpbiBpdClcbiAgICAgICAgICBjb25zdCB7IHRhYmJhYmxlTm9kZXMgfSA9IHN0YXRlLmNvbnRhaW5lckdyb3Vwc1ttcnVDb250YWluZXJJZHhdO1xuICAgICAgICAgIGlmICh0YWJiYWJsZU5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIE1SVSB0YWIgaW5kZXggTUFZIG5vdCBiZSBmb3VuZCBpZiB0aGUgTVJVIG5vZGUgaXMgZm9jdXNhYmxlIGJ1dCBub3QgdGFiYmFibGVcbiAgICAgICAgICAgIGNvbnN0IG1ydVRhYklkeCA9IHRhYmJhYmxlTm9kZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAobm9kZSkgPT4gbm9kZSA9PT0gc3RhdGUubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobXJ1VGFiSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pc0tleUZvcndhcmQoc3RhdGUucmVjZW50TmF2RXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1ydVRhYklkeCArIDEgPCB0YWJiYWJsZU5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSB0YWJiYWJsZU5vZGVzW21ydVRhYklkeCArIDFdO1xuICAgICAgICAgICAgICAgICAgbmF2QWNyb3NzQ29udGFpbmVycyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbHNlLCBkb24ndCB3cmFwIHdpdGhpbiB0aGUgY29udGFpbmVyIGFzIGZvY3VzIHNob3VsZCBtb3ZlIHRvIG5leHQvcHJldmlvdXNcbiAgICAgICAgICAgICAgICAvLyAgY29udGFpbmVyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1ydVRhYklkeCAtIDEgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSB0YWJiYWJsZU5vZGVzW21ydVRhYklkeCAtIDFdO1xuICAgICAgICAgICAgICAgICAgbmF2QWNyb3NzQ29udGFpbmVycyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbHNlLCBkb24ndCB3cmFwIHdpdGhpbiB0aGUgY29udGFpbmVyIGFzIGZvY3VzIHNob3VsZCBtb3ZlIHRvIG5leHQvcHJldmlvdXNcbiAgICAgICAgICAgICAgICAvLyAgY29udGFpbmVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZWxzZSwgZG9uJ3QgZmluZCBpbiBjb250YWluZXIgb3JkZXIgd2l0aG91dCBjb25zaWRlcmluZyBkaXJlY3Rpb24gdG9vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVsc2UsIG5vIHRhYmJhYmxlIG5vZGVzIGluIHRoYXQgY29udGFpbmVyICh3aGljaCBtZWFucyB3ZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG90aGVyXG4gICAgICAgICAgLy8gIGNvbnRhaW5lciB3aXRoIGF0IGxlYXN0IG9uZSB0YWJiYWJsZSBub2RlIGluIGl0LCBvdGhlcndpc2UgZm9jdXMtdHJhcCB3b3VsZCd2ZSB0aHJvd25cbiAgICAgICAgICAvLyAgYW4gZXJyb3IgdGhlIGxhc3QgdGltZSB1cGRhdGVUYWJiYWJsZU5vZGVzKCkgd2FzIHJ1bik6IGZpbmQgbmV4dCBub2RlIGFtb25nIGFsbCBrbm93blxuICAgICAgICAgIC8vICBjb250YWluZXJzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIHRhYmJhYmxlIG5vZGUgd2l0aCBhIHBvc2l0aXZlIHRhYiBpbmRleCBpbnNpZGVcbiAgICAgICAgICAvLyAgdGhlIHRyYXAgYmVjYXVzZSBmb2N1cyBzZWVtcyB0byBlc2NhcGUgd2hlbiBuYXZpZ2F0aW5nIGJhY2t3YXJkIGZyb20gYSB0YWJiYWJsZSBub2RlXG4gICAgICAgICAgLy8gIHdpdGggdGFiaW5kZXg9MCB3aGVuIHRoaXMgaXMgdGhlIGNhc2UgKGluc3RlYWQgb2Ygd3JhcHBpbmcgdG8gdGhlIHRhYmJhYmxlIG5vZGUgd2l0aFxuICAgICAgICAgIC8vICB0aGUgZ3JlYXRlc3QgcG9zaXRpdmUgdGFiIGluZGV4IGxpa2UgaXQgc2hvdWxkKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFzdGF0ZS5jb250YWluZXJHcm91cHMuc29tZSgoZykgPT5cbiAgICAgICAgICAgICAgZy50YWJiYWJsZU5vZGVzLnNvbWUoKG4pID0+IGdldFRhYkluZGV4KG4pID4gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIG5vIGNvbnRhaW5lcnMgd2l0aCB0YWJiYWJsZSBub2RlcyB3aXRoIHBvc2l0aXZlIHRhYiBpbmRleGVzIHdoaWNoIG1lYW5zIHRoZSBmb2N1c1xuICAgICAgICAgICAgLy8gIGVzY2FwZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uIGFuZCB3ZSBzaG91bGQganVzdCBleGVjdXRlIHRoZSBmYWxsYmFjayB0byB0aGVcbiAgICAgICAgICAgIC8vICBNUlUgbm9kZSBvciBpbml0aWFsIGZvY3VzIG5vZGUsIGlmIGFueVxuICAgICAgICAgICAgbmF2QWNyb3NzQ29udGFpbmVycyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm8gTVJVIG5vZGUgbWVhbnMgd2UncmUgbGlrZWx5IGluIHNvbWUgaW5pdGlhbCBjb25kaXRpb24gd2hlbiB0aGUgdHJhcCBoYXMganVzdFxuICAgICAgICAvLyAgYmVlbiBhY3RpdmF0ZWQgYW5kIGluaXRpYWwgZm9jdXMgaGFzbid0IGJlZW4gZ2l2ZW4geWV0LCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZFxuICAgICAgICAvLyAgZmFsbCB0aHJvdWdoIHRvIHRyeWluZyB0byBmb2N1cyB0aGUgaW5pdGlhbCBmb2N1cyBub2RlLCB3aGljaCBpcyB3aGF0IHNob3VsZFxuICAgICAgICAvLyAgaGFwcGVuIGJlbG93IGF0IHRoaXMgcG9pbnQgaW4gdGhlIGxvZ2ljXG4gICAgICAgIG5hdkFjcm9zc0NvbnRhaW5lcnMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdkFjcm9zc0NvbnRhaW5lcnMpIHtcbiAgICAgICAgbmV4dE5vZGUgPSBmaW5kTmV4dE5hdk5vZGUoe1xuICAgICAgICAgIC8vIG1vdmUgRlJPTSB0aGUgTVJVIG5vZGUsIG5vdCBldmVudC1yZWxhdGVkIG5vZGUgKHdoaWNoIHdpbGwgYmUgdGhlIG5vZGUgdGhhdCBpc1xuICAgICAgICAgIC8vICBvdXRzaWRlIHRoZSB0cmFwIGNhdXNpbmcgdGhlIGZvY3VzIGVzY2FwZSB3ZSdyZSB0cnlpbmcgdG8gZml4KVxuICAgICAgICAgIHRhcmdldDogc3RhdGUubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGUsXG4gICAgICAgICAgaXNCYWNrd2FyZDogY29uZmlnLmlzS2V5QmFja3dhcmQoc3RhdGUucmVjZW50TmF2RXZlbnQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHROb2RlKSB7XG4gICAgICAgIHRyeUZvY3VzKG5leHROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeUZvY3VzKHN0YXRlLm1vc3RSZWNlbnRseUZvY3VzZWROb2RlIHx8IGdldEluaXRpYWxGb2N1c05vZGUoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUucmVjZW50TmF2RXZlbnQgPSB1bmRlZmluZWQ7IC8vIGNsZWFyXG4gIH07XG5cbiAgLy8gSGlqYWNrIGtleSBuYXYgZXZlbnRzIG9uIHRoZSBmaXJzdCBhbmQgbGFzdCBmb2N1c2FibGUgbm9kZXMgb2YgdGhlIHRyYXAsXG4gIC8vIGluIG9yZGVyIHRvIHByZXZlbnQgZm9jdXMgZnJvbSBlc2NhcGluZy4gSWYgaXQgZXNjYXBlcyBmb3IgZXZlbiBhXG4gIC8vIG1vbWVudCBpdCBjYW4gZW5kIHVwIHNjcm9sbGluZyB0aGUgcGFnZSBhbmQgY2F1c2luZyBjb25mdXNpb24gc28gd2VcbiAgLy8ga2luZCBvZiBuZWVkIHRvIGNhcHR1cmUgdGhlIGFjdGlvbiBhdCB0aGUga2V5ZG93biBwaGFzZS5cbiAgY29uc3QgY2hlY2tLZXlOYXYgPSBmdW5jdGlvbiAoZXZlbnQsIGlzQmFja3dhcmQgPSBmYWxzZSkge1xuICAgIHN0YXRlLnJlY2VudE5hdkV2ZW50ID0gZXZlbnQ7XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbk5vZGUgPSBmaW5kTmV4dE5hdk5vZGUoeyBldmVudCwgaXNCYWNrd2FyZCB9KTtcbiAgICBpZiAoZGVzdGluYXRpb25Ob2RlKSB7XG4gICAgICBpZiAoaXNUYWJFdmVudChldmVudCkpIHtcbiAgICAgICAgLy8gc2luY2UgdGFiIG5hdGl2ZWx5IG1vdmVzIGZvY3VzLCB3ZSB3b3VsZG4ndCBoYXZlIGEgZGVzdGluYXRpb24gbm9kZSB1bmxlc3Mgd2VcbiAgICAgICAgLy8gIHdlcmUgb24gdGhlIGVkZ2Ugb2YgYSBjb250YWluZXIgYW5kIGhhZCB0byBtb3ZlIHRvIHRoZSBuZXh0L3ByZXZpb3VzIGVkZ2UsIGluXG4gICAgICAgIC8vICB3aGljaCBjYXNlIHdlIHdhbnQgdG8gcHJldmVudCBkZWZhdWx0IHRvIGtlZXAgdGhlIGJyb3dzZXIgZnJvbSBtb3ZpbmcgZm9jdXNcbiAgICAgICAgLy8gIHRvIHdoZXJlIGl0IG5vcm1hbGx5IHdvdWxkXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICB0cnlGb2N1cyhkZXN0aW5hdGlvbk5vZGUpO1xuICAgIH1cbiAgICAvLyBlbHNlLCBsZXQgdGhlIGJyb3dzZXIgdGFrZSBjYXJlIG9mIFtzaGlmdCtddGFiIGFuZCBtb3ZlIHRoZSBmb2N1c1xuICB9O1xuXG4gIGNvbnN0IGNoZWNrS2V5ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKFxuICAgICAgaXNFc2NhcGVFdmVudChldmVudCkgJiZcbiAgICAgIHZhbHVlT3JIYW5kbGVyKGNvbmZpZy5lc2NhcGVEZWFjdGl2YXRlcywgZXZlbnQpICE9PSBmYWxzZVxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuaXNLZXlGb3J3YXJkKGV2ZW50KSB8fCBjb25maWcuaXNLZXlCYWNrd2FyZChldmVudCkpIHtcbiAgICAgIGNoZWNrS2V5TmF2KGV2ZW50LCBjb25maWcuaXNLZXlCYWNrd2FyZChldmVudCkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja0NsaWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRBY3R1YWxUYXJnZXQoZSk7XG5cbiAgICBpZiAoZmluZENvbnRhaW5lckluZGV4KHRhcmdldCwgZSkgPj0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZU9ySGFuZGxlcihjb25maWcuY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMsIGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlT3JIYW5kbGVyKGNvbmZpZy5hbGxvd091dHNpZGVDbGljaywgZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfTtcblxuICAvL1xuICAvLyBFVkVOVCBMSVNURU5FUlNcbiAgLy9cblxuICBjb25zdCBhZGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGF0ZS5hY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBjYW4gYmUgb25seSBvbmUgbGlzdGVuaW5nIGZvY3VzIHRyYXAgYXQgYSB0aW1lXG4gICAgYWN0aXZlRm9jdXNUcmFwcy5hY3RpdmF0ZVRyYXAodHJhcFN0YWNrLCB0cmFwKTtcblxuICAgIC8vIERlbGF5IGVuc3VyZXMgdGhhdCB0aGUgZm9jdXNlZCBlbGVtZW50IGRvZXNuJ3QgY2FwdHVyZSB0aGUgZXZlbnRcbiAgICAvLyB0aGF0IGNhdXNlZCB0aGUgZm9jdXMgdHJhcCBhY3RpdmF0aW9uLlxuICAgIHN0YXRlLmRlbGF5SW5pdGlhbEZvY3VzVGltZXIgPSBjb25maWcuZGVsYXlJbml0aWFsRm9jdXNcbiAgICAgID8gZGVsYXkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRyeUZvY3VzKGdldEluaXRpYWxGb2N1c05vZGUoKSk7XG4gICAgICAgIH0pXG4gICAgICA6IHRyeUZvY3VzKGdldEluaXRpYWxGb2N1c05vZGUoKSk7XG5cbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGNoZWNrRm9jdXNJbiwgdHJ1ZSk7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGNoZWNrUG9pbnRlckRvd24sIHtcbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGNoZWNrUG9pbnRlckRvd24sIHtcbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjaGVja0NsaWNrLCB7XG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgfSk7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBjaGVja0tleSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyYXA7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3RhdGUuYWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjaGVja0ZvY3VzSW4sIHRydWUpO1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBjaGVja1BvaW50ZXJEb3duLCB0cnVlKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGNoZWNrUG9pbnRlckRvd24sIHRydWUpO1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGNoZWNrQ2xpY2ssIHRydWUpO1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgY2hlY2tLZXksIHRydWUpO1xuXG4gICAgcmV0dXJuIHRyYXA7XG4gIH07XG5cbiAgLy9cbiAgLy8gTVVUQVRJT04gT0JTRVJWRVJcbiAgLy9cblxuICBjb25zdCBjaGVja0RvbVJlbW92YWwgPSBmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgY29uc3QgaXNGb2N1c2VkTm9kZVJlbW92ZWQgPSBtdXRhdGlvbnMuc29tZShmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIGNvbnN0IHJlbW92ZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcbiAgICAgIHJldHVybiByZW1vdmVkTm9kZXMuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gc3RhdGUubW9zdFJlY2VudGx5Rm9jdXNlZE5vZGU7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIElmIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBpcyByZW1vdmVkIHRoZW4gYnJvd3NlcnMgd2lsbCBtb3ZlIGZvY3VzIHRvIHRoZVxuICAgIC8vIDxib2R5PiBlbGVtZW50LiBJZiB0aGlzIGhhcHBlbnMsIHRyeSB0byBtb3ZlIGZvY3VzIGJhY2sgaW50byB0aGUgdHJhcC5cbiAgICBpZiAoaXNGb2N1c2VkTm9kZVJlbW92ZWQpIHtcbiAgICAgIHRyeUZvY3VzKGdldEluaXRpYWxGb2N1c05vZGUoKSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFVzZSBNdXRhdGlvbk9ic2VydmVyIC0gaWYgc3VwcG9ydGVkIC0gdG8gZGV0ZWN0IGlmIGZvY3VzZWQgbm9kZSBpcyByZW1vdmVkXG4gIC8vIGZyb20gdGhlIERPTS5cbiAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ011dGF0aW9uT2JzZXJ2ZXInIGluIHdpbmRvd1xuICAgICAgPyBuZXcgTXV0YXRpb25PYnNlcnZlcihjaGVja0RvbVJlbW92YWwpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCB1cGRhdGVPYnNlcnZlZE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghbXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIGlmIChzdGF0ZS5hY3RpdmUgJiYgIXN0YXRlLnBhdXNlZCkge1xuICAgICAgc3RhdGUuY29udGFpbmVycy5tYXAoZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgICAgICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyLCB7XG4gICAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vXG4gIC8vIFRSQVAgREVGSU5JVElPTlxuICAvL1xuXG4gIHRyYXAgPSB7XG4gICAgZ2V0IGFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5hY3RpdmU7XG4gICAgfSxcblxuICAgIGdldCBwYXVzZWQoKSB7XG4gICAgICByZXR1cm4gc3RhdGUucGF1c2VkO1xuICAgIH0sXG5cbiAgICBhY3RpdmF0ZShhY3RpdmF0ZU9wdGlvbnMpIHtcbiAgICAgIGlmIChzdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9uQWN0aXZhdGUgPSBnZXRPcHRpb24oYWN0aXZhdGVPcHRpb25zLCAnb25BY3RpdmF0ZScpO1xuICAgICAgY29uc3Qgb25Qb3N0QWN0aXZhdGUgPSBnZXRPcHRpb24oYWN0aXZhdGVPcHRpb25zLCAnb25Qb3N0QWN0aXZhdGUnKTtcbiAgICAgIGNvbnN0IGNoZWNrQ2FuRm9jdXNUcmFwID0gZ2V0T3B0aW9uKGFjdGl2YXRlT3B0aW9ucywgJ2NoZWNrQ2FuRm9jdXNUcmFwJyk7XG5cbiAgICAgIGlmICghY2hlY2tDYW5Gb2N1c1RyYXApIHtcbiAgICAgICAgdXBkYXRlVGFiYmFibGVOb2RlcygpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gICAgICBzdGF0ZS5ub2RlRm9jdXNlZEJlZm9yZUFjdGl2YXRpb24gPSBkb2MuYWN0aXZlRWxlbWVudDtcblxuICAgICAgb25BY3RpdmF0ZT8uKCk7XG5cbiAgICAgIGNvbnN0IGZpbmlzaEFjdGl2YXRpb24gPSAoKSA9PiB7XG4gICAgICAgIGlmIChjaGVja0NhbkZvY3VzVHJhcCkge1xuICAgICAgICAgIHVwZGF0ZVRhYmJhYmxlTm9kZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRMaXN0ZW5lcnMoKTtcbiAgICAgICAgdXBkYXRlT2JzZXJ2ZWROb2RlcygpO1xuICAgICAgICBvblBvc3RBY3RpdmF0ZT8uKCk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoY2hlY2tDYW5Gb2N1c1RyYXApIHtcbiAgICAgICAgY2hlY2tDYW5Gb2N1c1RyYXAoc3RhdGUuY29udGFpbmVycy5jb25jYXQoKSkudGhlbihcbiAgICAgICAgICBmaW5pc2hBY3RpdmF0aW9uLFxuICAgICAgICAgIGZpbmlzaEFjdGl2YXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGZpbmlzaEFjdGl2YXRpb24oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBkZWFjdGl2YXRlKGRlYWN0aXZhdGVPcHRpb25zKSB7XG4gICAgICBpZiAoIXN0YXRlLmFjdGl2ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgb25EZWFjdGl2YXRlOiBjb25maWcub25EZWFjdGl2YXRlLFxuICAgICAgICBvblBvc3REZWFjdGl2YXRlOiBjb25maWcub25Qb3N0RGVhY3RpdmF0ZSxcbiAgICAgICAgY2hlY2tDYW5SZXR1cm5Gb2N1czogY29uZmlnLmNoZWNrQ2FuUmV0dXJuRm9jdXMsXG4gICAgICAgIC4uLmRlYWN0aXZhdGVPcHRpb25zLFxuICAgICAgfTtcblxuICAgICAgY2xlYXJUaW1lb3V0KHN0YXRlLmRlbGF5SW5pdGlhbEZvY3VzVGltZXIpOyAvLyBub29wIGlmIHVuZGVmaW5lZFxuICAgICAgc3RhdGUuZGVsYXlJbml0aWFsRm9jdXNUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICBzdGF0ZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgdXBkYXRlT2JzZXJ2ZWROb2RlcygpO1xuXG4gICAgICBhY3RpdmVGb2N1c1RyYXBzLmRlYWN0aXZhdGVUcmFwKHRyYXBTdGFjaywgdHJhcCk7XG5cbiAgICAgIGNvbnN0IG9uRGVhY3RpdmF0ZSA9IGdldE9wdGlvbihvcHRpb25zLCAnb25EZWFjdGl2YXRlJyk7XG4gICAgICBjb25zdCBvblBvc3REZWFjdGl2YXRlID0gZ2V0T3B0aW9uKG9wdGlvbnMsICdvblBvc3REZWFjdGl2YXRlJyk7XG4gICAgICBjb25zdCBjaGVja0NhblJldHVybkZvY3VzID0gZ2V0T3B0aW9uKG9wdGlvbnMsICdjaGVja0NhblJldHVybkZvY3VzJyk7XG4gICAgICBjb25zdCByZXR1cm5Gb2N1cyA9IGdldE9wdGlvbihcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgJ3JldHVybkZvY3VzJyxcbiAgICAgICAgJ3JldHVybkZvY3VzT25EZWFjdGl2YXRlJ1xuICAgICAgKTtcblxuICAgICAgb25EZWFjdGl2YXRlPy4oKTtcblxuICAgICAgY29uc3QgZmluaXNoRGVhY3RpdmF0aW9uID0gKCkgPT4ge1xuICAgICAgICBkZWxheSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHJldHVybkZvY3VzKSB7XG4gICAgICAgICAgICB0cnlGb2N1cyhnZXRSZXR1cm5Gb2N1c05vZGUoc3RhdGUubm9kZUZvY3VzZWRCZWZvcmVBY3RpdmF0aW9uKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uUG9zdERlYWN0aXZhdGU/LigpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZXR1cm5Gb2N1cyAmJiBjaGVja0NhblJldHVybkZvY3VzKSB7XG4gICAgICAgIGNoZWNrQ2FuUmV0dXJuRm9jdXMoXG4gICAgICAgICAgZ2V0UmV0dXJuRm9jdXNOb2RlKHN0YXRlLm5vZGVGb2N1c2VkQmVmb3JlQWN0aXZhdGlvbilcbiAgICAgICAgKS50aGVuKGZpbmlzaERlYWN0aXZhdGlvbiwgZmluaXNoRGVhY3RpdmF0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGZpbmlzaERlYWN0aXZhdGlvbigpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHBhdXNlKHBhdXNlT3B0aW9ucykge1xuICAgICAgaWYgKHN0YXRlLnBhdXNlZCB8fCAhc3RhdGUuYWN0aXZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvblBhdXNlID0gZ2V0T3B0aW9uKHBhdXNlT3B0aW9ucywgJ29uUGF1c2UnKTtcbiAgICAgIGNvbnN0IG9uUG9zdFBhdXNlID0gZ2V0T3B0aW9uKHBhdXNlT3B0aW9ucywgJ29uUG9zdFBhdXNlJyk7XG5cbiAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICBvblBhdXNlPy4oKTtcblxuICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICB1cGRhdGVPYnNlcnZlZE5vZGVzKCk7XG5cbiAgICAgIG9uUG9zdFBhdXNlPy4oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB1bnBhdXNlKHVucGF1c2VPcHRpb25zKSB7XG4gICAgICBpZiAoIXN0YXRlLnBhdXNlZCB8fCAhc3RhdGUuYWN0aXZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvblVucGF1c2UgPSBnZXRPcHRpb24odW5wYXVzZU9wdGlvbnMsICdvblVucGF1c2UnKTtcbiAgICAgIGNvbnN0IG9uUG9zdFVucGF1c2UgPSBnZXRPcHRpb24odW5wYXVzZU9wdGlvbnMsICdvblBvc3RVbnBhdXNlJyk7XG5cbiAgICAgIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgb25VbnBhdXNlPy4oKTtcblxuICAgICAgdXBkYXRlVGFiYmFibGVOb2RlcygpO1xuICAgICAgYWRkTGlzdGVuZXJzKCk7XG4gICAgICB1cGRhdGVPYnNlcnZlZE5vZGVzKCk7XG5cbiAgICAgIG9uUG9zdFVucGF1c2U/LigpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHVwZGF0ZUNvbnRhaW5lckVsZW1lbnRzKGNvbnRhaW5lckVsZW1lbnRzKSB7XG4gICAgICBjb25zdCBlbGVtZW50c0FzQXJyYXkgPSBbXS5jb25jYXQoY29udGFpbmVyRWxlbWVudHMpLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgc3RhdGUuY29udGFpbmVycyA9IGVsZW1lbnRzQXNBcnJheS5tYXAoKGVsZW1lbnQpID0+XG4gICAgICAgIHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGRvYy5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpIDogZWxlbWVudFxuICAgICAgKTtcblxuICAgICAgaWYgKHN0YXRlLmFjdGl2ZSkge1xuICAgICAgICB1cGRhdGVUYWJiYWJsZU5vZGVzKCk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZU9ic2VydmVkTm9kZXMoKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgfTtcblxuICAvLyBpbml0aWFsaXplIGNvbnRhaW5lciBlbGVtZW50c1xuICB0cmFwLnVwZGF0ZUNvbnRhaW5lckVsZW1lbnRzKGVsZW1lbnRzKTtcblxuICByZXR1cm4gdHJhcDtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUZvY3VzVHJhcCB9O1xuIixudWxsLG51bGwsbnVsbCwiZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbi8vIE9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgZXZlbnQgb3B0aW9ucywgZmVhdHVyZSBkZXRlY3QgaXQuXG5cbi8vIEFkb3B0ZWQgYW5kIG1vZGlmaWVkIHNvbHV0aW9uIGZyb20gQm9oZGFuIERpZHVraCAoMjAxNylcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQxNTk0OTk3L2lvcy0xMC1zYWZhcmktcHJldmVudC1zY3JvbGxpbmctYmVoaW5kLWEtZml4ZWQtb3ZlcmxheS1hbmQtbWFpbnRhaW4tc2Nyb2xsLXBvc2lcblxudmFyIGhhc1Bhc3NpdmVFdmVudHMgPSBmYWxzZTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgcGFzc2l2ZVRlc3RPcHRpb25zID0ge1xuICAgIGdldCBwYXNzaXZlKCkge1xuICAgICAgaGFzUGFzc2l2ZUV2ZW50cyA9IHRydWU7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlJywgbnVsbCwgcGFzc2l2ZVRlc3RPcHRpb25zKTtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlJywgbnVsbCwgcGFzc2l2ZVRlc3RPcHRpb25zKTtcbn1cblxudmFyIGlzSW9zRGV2aWNlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtICYmICgvaVAoYWR8aG9uZXxvZCkvLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkgfHwgd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ01hY0ludGVsJyAmJiB3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMSk7XG5cblxudmFyIGxvY2tzID0gW107XG52YXIgZG9jdW1lbnRMaXN0ZW5lckFkZGVkID0gZmFsc2U7XG52YXIgaW5pdGlhbENsaWVudFkgPSAtMTtcbnZhciBwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmcgPSB2b2lkIDA7XG52YXIgcHJldmlvdXNCb2R5UG9zaXRpb24gPSB2b2lkIDA7XG52YXIgcHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0ID0gdm9pZCAwO1xuXG4vLyByZXR1cm5zIHRydWUgaWYgYGVsYCBzaG91bGQgYmUgYWxsb3dlZCB0byByZWNlaXZlIHRvdWNobW92ZSBldmVudHMuXG52YXIgYWxsb3dUb3VjaE1vdmUgPSBmdW5jdGlvbiBhbGxvd1RvdWNoTW92ZShlbCkge1xuICByZXR1cm4gbG9ja3Muc29tZShmdW5jdGlvbiAobG9jaykge1xuICAgIGlmIChsb2NrLm9wdGlvbnMuYWxsb3dUb3VjaE1vdmUgJiYgbG9jay5vcHRpb25zLmFsbG93VG91Y2hNb3ZlKGVsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn07XG5cbnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KHJhd0V2ZW50KSB7XG4gIHZhciBlID0gcmF3RXZlbnQgfHwgd2luZG93LmV2ZW50O1xuXG4gIC8vIEZvciB0aGUgY2FzZSB3aGVyZWJ5IGNvbnN1bWVycyBhZGRzIGEgdG91Y2htb3ZlIGV2ZW50IGxpc3RlbmVyIHRvIGRvY3VtZW50LlxuICAvLyBSZWNhbGwgdGhhdCB3ZSBkbyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50RGVmYXVsdCwgeyBwYXNzaXZlOiBmYWxzZSB9KVxuICAvLyBpbiBkaXNhYmxlQm9keVNjcm9sbCAtIHNvIGlmIHdlIHByb3ZpZGUgdGhpcyBvcHBvcnR1bml0eSB0byBhbGxvd1RvdWNoTW92ZSwgdGhlblxuICAvLyB0aGUgdG91Y2htb3ZlIGV2ZW50IG9uIGRvY3VtZW50IHdpbGwgYnJlYWsuXG4gIGlmIChhbGxvd1RvdWNoTW92ZShlLnRhcmdldCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIERvIG5vdCBwcmV2ZW50IGlmIHRoZSBldmVudCBoYXMgbW9yZSB0aGFuIG9uZSB0b3VjaCAodXN1YWxseSBtZWFuaW5nIHRoaXMgaXMgYSBtdWx0aSB0b3VjaCBnZXN0dXJlIGxpa2UgcGluY2ggdG8gem9vbSkuXG4gIGlmIChlLnRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuIHRydWU7XG5cbiAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtcblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgc2V0T3ZlcmZsb3dIaWRkZW4gPSBmdW5jdGlvbiBzZXRPdmVyZmxvd0hpZGRlbihvcHRpb25zKSB7XG4gIC8vIElmIHByZXZpb3VzQm9keVBhZGRpbmdSaWdodCBpcyBhbHJlYWR5IHNldCwgZG9uJ3Qgc2V0IGl0IGFnYWluLlxuICBpZiAocHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgX3Jlc2VydmVTY3JvbGxCYXJHYXAgPSAhIW9wdGlvbnMgJiYgb3B0aW9ucy5yZXNlcnZlU2Nyb2xsQmFyR2FwID09PSB0cnVlO1xuICAgIHZhciBzY3JvbGxCYXJHYXAgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcblxuICAgIGlmIChfcmVzZXJ2ZVNjcm9sbEJhckdhcCAmJiBzY3JvbGxCYXJHYXAgPiAwKSB7XG4gICAgICB2YXIgY29tcHV0ZWRCb2R5UGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1yaWdodCcpLCAxMCk7XG4gICAgICBwcmV2aW91c0JvZHlQYWRkaW5nUmlnaHQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gY29tcHV0ZWRCb2R5UGFkZGluZ1JpZ2h0ICsgc2Nyb2xsQmFyR2FwICsgJ3B4JztcbiAgICB9XG4gIH1cblxuICAvLyBJZiBwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmcgaXMgYWxyZWFkeSBzZXQsIGRvbid0IHNldCBpdCBhZ2Fpbi5cbiAgaWYgKHByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcHJldmlvdXNCb2R5T3ZlcmZsb3dTZXR0aW5nID0gZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdztcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cbn07XG5cbnZhciByZXN0b3JlT3ZlcmZsb3dTZXR0aW5nID0gZnVuY3Rpb24gcmVzdG9yZU92ZXJmbG93U2V0dGluZygpIHtcbiAgaWYgKHByZXZpb3VzQm9keVBhZGRpbmdSaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwcmV2aW91c0JvZHlQYWRkaW5nUmlnaHQ7XG5cbiAgICAvLyBSZXN0b3JlIHByZXZpb3VzQm9keVBhZGRpbmdSaWdodCB0byB1bmRlZmluZWQgc28gc2V0T3ZlcmZsb3dIaWRkZW4ga25vd3MgaXRcbiAgICAvLyBjYW4gYmUgc2V0IGFnYWluLlxuICAgIHByZXZpb3VzQm9keVBhZGRpbmdSaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmc7XG5cbiAgICAvLyBSZXN0b3JlIHByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZyB0byB1bmRlZmluZWRcbiAgICAvLyBzbyBzZXRPdmVyZmxvd0hpZGRlbiBrbm93cyBpdCBjYW4gYmUgc2V0IGFnYWluLlxuICAgIHByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZyA9IHVuZGVmaW5lZDtcbiAgfVxufTtcblxudmFyIHNldFBvc2l0aW9uRml4ZWQgPSBmdW5jdGlvbiBzZXRQb3NpdGlvbkZpeGVkKCkge1xuICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgLy8gSWYgcHJldmlvdXNCb2R5UG9zaXRpb24gaXMgYWxyZWFkeSBzZXQsIGRvbid0IHNldCBpdCBhZ2Fpbi5cbiAgICBpZiAocHJldmlvdXNCb2R5UG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJldmlvdXNCb2R5UG9zaXRpb24gPSB7XG4gICAgICAgIHBvc2l0aW9uOiBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uLFxuICAgICAgICB0b3A6IGRvY3VtZW50LmJvZHkuc3R5bGUudG9wLFxuICAgICAgICBsZWZ0OiBkb2N1bWVudC5ib2R5LnN0eWxlLmxlZnRcbiAgICAgIH07XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZG9tIGluc2lkZSBhbiBhbmltYXRpb24gZnJhbWUgXG4gICAgICB2YXIgX3dpbmRvdyA9IHdpbmRvdyxcbiAgICAgICAgICBzY3JvbGxZID0gX3dpbmRvdy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbFggPSBfd2luZG93LnNjcm9sbFgsXG4gICAgICAgICAgaW5uZXJIZWlnaHQgPSBfd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gLXNjcm9sbFk7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmxlZnQgPSAtc2Nyb2xsWDtcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNoZWNrIGlmIHRoZSBib3R0b20gYmFyIGFwcGVhcmVkIGR1ZSB0byB0aGUgcG9zaXRpb24gY2hhbmdlXG4gICAgICAgICAgdmFyIGJvdHRvbUJhckhlaWdodCA9IGlubmVySGVpZ2h0IC0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICAgIGlmIChib3R0b21CYXJIZWlnaHQgJiYgc2Nyb2xsWSA+PSBpbm5lckhlaWdodCkge1xuICAgICAgICAgICAgLy8gTW92ZSB0aGUgY29udGVudCBmdXJ0aGVyIHVwIHNvIHRoYXQgdGhlIGJvdHRvbSBiYXIgZG9lc24ndCBoaWRlIGl0XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCA9IC0oc2Nyb2xsWSArIGJvdHRvbUJhckhlaWdodCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciByZXN0b3JlUG9zaXRpb25TZXR0aW5nID0gZnVuY3Rpb24gcmVzdG9yZVBvc2l0aW9uU2V0dGluZygpIHtcbiAgaWYgKHByZXZpb3VzQm9keVBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBwb3NpdGlvbiBmcm9tIFwicHhcIiB0byBJbnRcbiAgICB2YXIgeSA9IC1wYXJzZUludChkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCwgMTApO1xuICAgIHZhciB4ID0gLXBhcnNlSW50KGRvY3VtZW50LmJvZHkuc3R5bGUubGVmdCwgMTApO1xuXG4gICAgLy8gUmVzdG9yZSBzdHlsZXNcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gcHJldmlvdXNCb2R5UG9zaXRpb24ucG9zaXRpb247XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS50b3AgPSBwcmV2aW91c0JvZHlQb3NpdGlvbi50b3A7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5sZWZ0ID0gcHJldmlvdXNCb2R5UG9zaXRpb24ubGVmdDtcblxuICAgIC8vIFJlc3RvcmUgc2Nyb2xsXG4gICAgd2luZG93LnNjcm9sbFRvKHgsIHkpO1xuXG4gICAgcHJldmlvdXNCb2R5UG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3Njcm9sbEhlaWdodCNQcm9ibGVtc19hbmRfc29sdXRpb25zXG52YXIgaXNUYXJnZXRFbGVtZW50VG90YWxseVNjcm9sbGVkID0gZnVuY3Rpb24gaXNUYXJnZXRFbGVtZW50VG90YWxseVNjcm9sbGVkKHRhcmdldEVsZW1lbnQpIHtcbiAgcmV0dXJuIHRhcmdldEVsZW1lbnQgPyB0YXJnZXRFbGVtZW50LnNjcm9sbEhlaWdodCAtIHRhcmdldEVsZW1lbnQuc2Nyb2xsVG9wIDw9IHRhcmdldEVsZW1lbnQuY2xpZW50SGVpZ2h0IDogZmFsc2U7XG59O1xuXG52YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKGV2ZW50LCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBjbGllbnRZID0gZXZlbnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZIC0gaW5pdGlhbENsaWVudFk7XG5cbiAgaWYgKGFsbG93VG91Y2hNb3ZlKGV2ZW50LnRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGFyZ2V0RWxlbWVudCAmJiB0YXJnZXRFbGVtZW50LnNjcm9sbFRvcCA9PT0gMCAmJiBjbGllbnRZID4gMCkge1xuICAgIC8vIGVsZW1lbnQgaXMgYXQgdGhlIHRvcCBvZiBpdHMgc2Nyb2xsLlxuICAgIHJldHVybiBwcmV2ZW50RGVmYXVsdChldmVudCk7XG4gIH1cblxuICBpZiAoaXNUYXJnZXRFbGVtZW50VG90YWxseVNjcm9sbGVkKHRhcmdldEVsZW1lbnQpICYmIGNsaWVudFkgPCAwKSB7XG4gICAgLy8gZWxlbWVudCBpcyBhdCB0aGUgYm90dG9tIG9mIGl0cyBzY3JvbGwuXG4gICAgcmV0dXJuIHByZXZlbnREZWZhdWx0KGV2ZW50KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCB2YXIgZGlzYWJsZUJvZHlTY3JvbGwgPSBmdW5jdGlvbiBkaXNhYmxlQm9keVNjcm9sbCh0YXJnZXRFbGVtZW50LCBvcHRpb25zKSB7XG4gIC8vIHRhcmdldEVsZW1lbnQgbXVzdCBiZSBwcm92aWRlZFxuICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ2Rpc2FibGVCb2R5U2Nyb2xsIHVuc3VjY2Vzc2Z1bCAtIHRhcmdldEVsZW1lbnQgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGNhbGxpbmcgZGlzYWJsZUJvZHlTY3JvbGwgb24gSU9TIGRldmljZXMuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZGlzYWJsZUJvZHlTY3JvbGwgbXVzdCBub3QgaGF2ZSBiZWVuIGNhbGxlZCBvbiB0aGlzIHRhcmdldEVsZW1lbnQgYmVmb3JlXG4gIGlmIChsb2Nrcy5zb21lKGZ1bmN0aW9uIChsb2NrKSB7XG4gICAgcmV0dXJuIGxvY2sudGFyZ2V0RWxlbWVudCA9PT0gdGFyZ2V0RWxlbWVudDtcbiAgfSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbG9jayA9IHtcbiAgICB0YXJnZXRFbGVtZW50OiB0YXJnZXRFbGVtZW50LFxuICAgIG9wdGlvbnM6IG9wdGlvbnMgfHwge31cbiAgfTtcblxuICBsb2NrcyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkobG9ja3MpLCBbbG9ja10pO1xuXG4gIGlmIChpc0lvc0RldmljZSkge1xuICAgIHNldFBvc2l0aW9uRml4ZWQoKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPdmVyZmxvd0hpZGRlbihvcHRpb25zKTtcbiAgfVxuXG4gIGlmIChpc0lvc0RldmljZSkge1xuICAgIHRhcmdldEVsZW1lbnQub250b3VjaHN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gZGV0ZWN0IHNpbmdsZSB0b3VjaC5cbiAgICAgICAgaW5pdGlhbENsaWVudFkgPSBldmVudC50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0YXJnZXRFbGVtZW50Lm9udG91Y2htb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gZGV0ZWN0IHNpbmdsZSB0b3VjaC5cbiAgICAgICAgaGFuZGxlU2Nyb2xsKGV2ZW50LCB0YXJnZXRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFkb2N1bWVudExpc3RlbmVyQWRkZWQpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHByZXZlbnREZWZhdWx0LCBoYXNQYXNzaXZlRXZlbnRzID8geyBwYXNzaXZlOiBmYWxzZSB9IDogdW5kZWZpbmVkKTtcbiAgICAgIGRvY3VtZW50TGlzdGVuZXJBZGRlZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgdmFyIGNsZWFyQWxsQm9keVNjcm9sbExvY2tzID0gZnVuY3Rpb24gY2xlYXJBbGxCb2R5U2Nyb2xsTG9ja3MoKSB7XG4gIGlmIChpc0lvc0RldmljZSkge1xuICAgIC8vIENsZWFyIGFsbCBsb2NrcyBvbnRvdWNoc3RhcnQvb250b3VjaG1vdmUgaGFuZGxlcnMsIGFuZCB0aGUgcmVmZXJlbmNlcy5cbiAgICBsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChsb2NrKSB7XG4gICAgICBsb2NrLnRhcmdldEVsZW1lbnQub250b3VjaHN0YXJ0ID0gbnVsbDtcbiAgICAgIGxvY2sudGFyZ2V0RWxlbWVudC5vbnRvdWNobW92ZSA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBpZiAoZG9jdW1lbnRMaXN0ZW5lckFkZGVkKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50RGVmYXVsdCwgaGFzUGFzc2l2ZUV2ZW50cyA/IHsgcGFzc2l2ZTogZmFsc2UgfSA6IHVuZGVmaW5lZCk7XG4gICAgICBkb2N1bWVudExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBpbml0aWFsIGNsaWVudFkuXG4gICAgaW5pdGlhbENsaWVudFkgPSAtMTtcbiAgfVxuXG4gIGlmIChpc0lvc0RldmljZSkge1xuICAgIHJlc3RvcmVQb3NpdGlvblNldHRpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlT3ZlcmZsb3dTZXR0aW5nKCk7XG4gIH1cblxuICBsb2NrcyA9IFtdO1xufTtcblxuZXhwb3J0IHZhciBlbmFibGVCb2R5U2Nyb2xsID0gZnVuY3Rpb24gZW5hYmxlQm9keVNjcm9sbCh0YXJnZXRFbGVtZW50KSB7XG4gIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcignZW5hYmxlQm9keVNjcm9sbCB1bnN1Y2Nlc3NmdWwgLSB0YXJnZXRFbGVtZW50IG11c3QgYmUgcHJvdmlkZWQgd2hlbiBjYWxsaW5nIGVuYWJsZUJvZHlTY3JvbGwgb24gSU9TIGRldmljZXMuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9ja3MgPSBsb2Nrcy5maWx0ZXIoZnVuY3Rpb24gKGxvY2spIHtcbiAgICByZXR1cm4gbG9jay50YXJnZXRFbGVtZW50ICE9PSB0YXJnZXRFbGVtZW50O1xuICB9KTtcblxuICBpZiAoaXNJb3NEZXZpY2UpIHtcbiAgICB0YXJnZXRFbGVtZW50Lm9udG91Y2hzdGFydCA9IG51bGw7XG4gICAgdGFyZ2V0RWxlbWVudC5vbnRvdWNobW92ZSA9IG51bGw7XG5cbiAgICBpZiAoZG9jdW1lbnRMaXN0ZW5lckFkZGVkICYmIGxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgcHJldmVudERlZmF1bHQsIGhhc1Bhc3NpdmVFdmVudHMgPyB7IHBhc3NpdmU6IGZhbHNlIH0gOiB1bmRlZmluZWQpO1xuICAgICAgZG9jdW1lbnRMaXN0ZW5lckFkZGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzSW9zRGV2aWNlKSB7XG4gICAgcmVzdG9yZVBvc2l0aW9uU2V0dGluZygpO1xuICB9IGVsc2Uge1xuICAgIHJlc3RvcmVPdmVyZmxvd1NldHRpbmcoKTtcbiAgfVxufTtcblxuIixudWxsLG51bGwsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRVc2VyLCBTYW5pdGl6ZWRQZXJtaXNzaW9ucywgVHlwZWRVc2VyIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyB1c2VQYXRobmFtZSwgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHsgc3RheUxvZ2dlZEluTW9kYWxTbHVnIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvU3RheUxvZ2dlZEluL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWZmZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VFZmZlY3RFdmVudC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVxdWVzdHMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvYXBpLmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vUm91dGVUcmFuc2l0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgdHlwZSBVc2VyV2l0aFRva2VuPFQgPSBDbGllbnRVc2VyPiA9IHtcbiAgLyoqIHNlY29uZHMgdW50aWwgZXhwaXJhdGlvbiAqL1xuICBleHA6IG51bWJlclxuICByZWZyZXNoZWRUb2tlbj86IHN0cmluZ1xuICB0b2tlbj86IHN0cmluZ1xuICB1c2VyOiBUXG59XG5cbmV4cG9ydCB0eXBlIEF1dGhDb250ZXh0PFQgPSBDbGllbnRVc2VyPiA9IHtcbiAgZmV0Y2hGdWxsVXNlcjogKCkgPT4gUHJvbWlzZTxudWxsIHwgVHlwZWRVc2VyPlxuICBsb2dPdXQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj5cbiAgLyoqXG4gICAqIFRoZXNlIGFyZSB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBjdXJyZW50IHVzZXIgZnJvbSBhIGdsb2JhbCBzY29wZS5cbiAgICpcbiAgICogV2hlbiBjaGVja2luZyBmb3IgcGVybWlzc2lvbnMgb24gZG9jdW1lbnQgc3BlY2lmaWMgbGV2ZWwsIHVzZSB0aGUgYHVzZURvY3VtZW50SW5mb2AgaG9vayBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGB0c3hcbiAgICogaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJ3BheWxvYWQvdWknXG4gICAqXG4gICAqIGNvbnN0IE15Q29tcG9uZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgICogICBjb25zdCB7IHBlcm1pc3Npb25zIH0gPSB1c2VBdXRoKClcbiAgICpcbiAgICogICBpZiAocGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5teUNvbGxlY3Rpb24/LmNyZWF0ZSkge1xuICAgKiAgICAgLy8gdXNlciBjYW4gY3JlYXRlIGRvY3VtZW50cyBpbiAnbXlDb2xsZWN0aW9uJ1xuICAgKiAgIH1cbiAgICpcbiAgICogICByZXR1cm4gbnVsbFxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiB3aXRoIHVzZURvY3VtZW50SW5mbzpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJ3BheWxvYWQvdWknXG4gICAqXG4gICAqIGNvbnN0IE15Q29tcG9uZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgICogIGNvbnN0IHsgZG9jUGVybWlzc2lvbnMgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gICAqICBpZiAoZG9jUGVybWlzc2lvbnM/LmNyZWF0ZSkge1xuICAgKiAgIC8vIHVzZXIgY2FuIGNyZWF0ZSB0aGlzIGRvY3VtZW50XG4gICAqICB9XG4gICAqICByZXR1cm4gbnVsbFxuICAgKiB9IGBgYFxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiBTYW5pdGl6ZWRQZXJtaXNzaW9uc1xuICByZWZyZXNoQ29va2llOiAoZm9yY2VSZWZyZXNoPzogYm9vbGVhbikgPT4gdm9pZFxuICByZWZyZXNoQ29va2llQXN5bmM6ICgpID0+IFByb21pc2U8Q2xpZW50VXNlcj5cbiAgcmVmcmVzaFBlcm1pc3Npb25zOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIHNldFBlcm1pc3Npb25zOiAocGVybWlzc2lvbnM6IFNhbml0aXplZFBlcm1pc3Npb25zKSA9PiB2b2lkXG4gIHNldFVzZXI6ICh1c2VyOiBudWxsIHwgVXNlcldpdGhUb2tlbjxUPikgPT4gdm9pZFxuICBzdHJhdGVneT86IHN0cmluZ1xuICB0b2tlbj86IHN0cmluZ1xuICB0b2tlbkV4cGlyYXRpb25Ncz86IG51bWJlclxuICB1c2VyPzogbnVsbCB8IFRcbn1cblxuY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30gYXMgQXV0aENvbnRleHQpXG5cbmNvbnN0IG1heFRpbWVvdXRNcyA9IDIxNDc0ODM2NDdcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBwZXJtaXNzaW9ucz86IFNhbml0aXplZFBlcm1pc3Npb25zXG4gIHVzZXI/OiBDbGllbnRVc2VyIHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQXV0aFByb3ZpZGVyKHtcbiAgY2hpbGRyZW4sXG4gIHBlcm1pc3Npb25zOiBpbml0aWFsUGVybWlzc2lvbnMsXG4gIHVzZXI6IGluaXRpYWxVc2VyLFxufTogUHJvcHMpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VQYXRobmFtZSgpXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG5cbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3Qge1xuICAgIGFkbWluOiB7XG4gICAgICBhdXRvTG9naW4sXG4gICAgICBhdXRvUmVmcmVzaCxcbiAgICAgIHJvdXRlczogeyBpbmFjdGl2aXR5OiBsb2dvdXRJbmFjdGl2aXR5Um91dGUgfSxcbiAgICAgIHVzZXI6IHVzZXJTbHVnLFxuICAgIH0sXG4gICAgcm91dGVzOiB7IGFkbWluOiBhZG1pblJvdXRlLCBhcGk6IGFwaVJvdXRlIH0sXG4gIH0gPSBjb25maWdcblxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjbG9zZUFsbE1vZGFscywgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgc3RhcnRSb3V0ZVRyYW5zaXRpb24gfSA9IHVzZVJvdXRlVHJhbnNpdGlvbigpXG5cbiAgY29uc3QgW3VzZXIsIHNldFVzZXJJbk1lbW9yeV0gPSB1c2VTdGF0ZTxDbGllbnRVc2VyIHwgbnVsbD4oaW5pdGlhbFVzZXIpXG4gIGNvbnN0IFt0b2tlbkluTWVtb3J5LCBzZXRUb2tlbkluTWVtb3J5XSA9IHVzZVN0YXRlPHN0cmluZz4oKVxuICBjb25zdCBbdG9rZW5FeHBpcmF0aW9uTXMsIHNldFRva2VuRXhwaXJhdGlvbk1zXSA9IHVzZVN0YXRlPG51bWJlcj4oKVxuICBjb25zdCBbcGVybWlzc2lvbnMsIHNldFBlcm1pc3Npb25zXSA9IHVzZVN0YXRlPFNhbml0aXplZFBlcm1pc3Npb25zPihpbml0aWFsUGVybWlzc2lvbnMpXG4gIGNvbnN0IFtmb3JjZUxvZ291dEJ1ZmZlck1zLCBzZXRGb3JjZUxvZ291dEJ1ZmZlck1zXSA9IHVzZVN0YXRlPG51bWJlcj4oMTIwXzAwMClcbiAgY29uc3QgW2ZldGNoZWRVc2VyT25Nb3VudCwgc2V0RmV0Y2hlZFVzZXJPbk1vdW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IHJlZnJlc2hUb2tlblRpbWVvdXRSZWYgPSBSZWFjdC51c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+KG51bGwpXG4gIGNvbnN0IHJlbWluZGVyVGltZW91dFJlZiA9IFJlYWN0LnVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4obnVsbClcbiAgY29uc3QgZm9yY2VMb2dPdXRUaW1lb3V0UmVmID0gUmVhY3QudXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PihudWxsKVxuXG4gIGNvbnN0IGlkID0gdXNlcj8uaWRcblxuICBjb25zdCByZWRpcmVjdFRvSW5hY3Rpdml0eVJvdXRlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VBZG1pblJvdXRlID0gZm9ybWF0QWRtaW5VUkwoeyBhZG1pblJvdXRlLCBwYXRoOiAnJyB9KVxuICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+XG4gICAgICByb3V0ZXIucmVwbGFjZShcbiAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgIGFkbWluUm91dGUsXG4gICAgICAgICAgcGF0aDogYCR7bG9nb3V0SW5hY3Rpdml0eVJvdXRlfSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoYmFzZUFkbWluUm91dGUpID8gYD9yZWRpcmVjdD0ke2VuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpfWAgOiAnJ31gLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKVxuXG4gICAgY2xvc2VBbGxNb2RhbHMoKVxuICB9LCBbcm91dGVyLCBhZG1pblJvdXRlLCBsb2dvdXRJbmFjdGl2aXR5Um91dGUsIGNsb3NlQWxsTW9kYWxzLCBzdGFydFJvdXRlVHJhbnNpdGlvbl0pXG5cbiAgY29uc3QgcmV2b2tlVG9rZW5BbmRFeHBpcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VXNlckluTWVtb3J5KG51bGwpXG4gICAgc2V0VG9rZW5Jbk1lbW9yeSh1bmRlZmluZWQpXG4gICAgc2V0VG9rZW5FeHBpcmF0aW9uTXModW5kZWZpbmVkKVxuICAgIGNsZWFyVGltZW91dChyZWZyZXNoVG9rZW5UaW1lb3V0UmVmLmN1cnJlbnQpXG4gIH0sIFtdKVxuXG4gIC8vIEhhbmRsZXIgZm9yIHJlbWluZGVyIHRpbWVvdXQgLSB1c2VzIHVzZUVmZmVjdEV2ZW50IHRvIGNhcHR1cmUgbGF0ZXN0IGF1dG9SZWZyZXNoIHZhbHVlXG4gIGNvbnN0IGhhbmRsZVJlbWluZGVyVGltZW91dCA9IHVzZUVmZmVjdEV2ZW50KCgpID0+IHtcbiAgICBpZiAoYXV0b1JlZnJlc2gpIHtcbiAgICAgIHJlZnJlc2hDb29raWVFdmVudCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZW5Nb2RhbChzdGF5TG9nZ2VkSW5Nb2RhbFNsdWcpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHNldE5ld1VzZXIgPSB1c2VDYWxsYmFjayhcbiAgICAodXNlclJlc3BvbnNlOiBudWxsIHwgVXNlcldpdGhUb2tlbikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHJlbWluZGVyVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlTG9nT3V0VGltZW91dFJlZi5jdXJyZW50KVxuXG4gICAgICBpZiAodXNlclJlc3BvbnNlPy51c2VyKSB7XG4gICAgICAgIHNldFVzZXJJbk1lbW9yeSh1c2VyUmVzcG9uc2UudXNlcilcbiAgICAgICAgc2V0VG9rZW5Jbk1lbW9yeSh1c2VyUmVzcG9uc2UudG9rZW4gPz8gdXNlclJlc3BvbnNlLnJlZnJlc2hlZFRva2VuKVxuICAgICAgICBzZXRUb2tlbkV4cGlyYXRpb25Ncyh1c2VyUmVzcG9uc2UuZXhwICogMTAwMClcblxuICAgICAgICBjb25zdCBleHBpcmVzSW5NcyA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oKHVzZXJSZXNwb25zZS5leHAgPz8gMCkgKiAxMDAwIC0gRGF0ZS5ub3coKSwgbWF4VGltZW91dE1zKSxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChleHBpcmVzSW5Ncykge1xuICAgICAgICAgIGNvbnN0IG5leHRGb3JjZUxvZ291dEJ1ZmZlck1zID0gTWF0aC5taW4oNjBfMDAwLCBleHBpcmVzSW5NcyAvIDIpXG4gICAgICAgICAgc2V0Rm9yY2VMb2dvdXRCdWZmZXJNcyhuZXh0Rm9yY2VMb2dvdXRCdWZmZXJNcylcblxuICAgICAgICAgIHJlbWluZGVyVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dChcbiAgICAgICAgICAgIGhhbmRsZVJlbWluZGVyVGltZW91dCxcbiAgICAgICAgICAgIE1hdGgubWF4KGV4cGlyZXNJbk1zIC0gbmV4dEZvcmNlTG9nb3V0QnVmZmVyTXMsIDApLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGZvcmNlTG9nT3V0VGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXZva2VUb2tlbkFuZEV4cGlyZSgpXG4gICAgICAgICAgICByZWRpcmVjdFRvSW5hY3Rpdml0eVJvdXRlKClcbiAgICAgICAgICB9LCBleHBpcmVzSW5NcylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV2b2tlVG9rZW5BbmRFeHBpcmUoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUsIHJldm9rZVRva2VuQW5kRXhwaXJlXSxcbiAgKVxuXG4gIGNvbnN0IHJlZnJlc2hDb29raWUgPSB1c2VDYWxsYmFjayhcbiAgICAoZm9yY2VSZWZyZXNoPzogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKCFpZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwaXJlc0luTXMgPSBNYXRoLm1heCgwLCAodG9rZW5FeHBpcmF0aW9uTXMgPz8gMCkgLSBEYXRlLm5vdygpKVxuXG4gICAgICBpZiAoZm9yY2VSZWZyZXNoIHx8ICh0b2tlbkV4cGlyYXRpb25NcyAmJiBleHBpcmVzSW5NcyA8IGZvcmNlTG9nb3V0QnVmZmVyTXMgKiAyKSkge1xuICAgICAgICBjbGVhclRpbWVvdXQocmVmcmVzaFRva2VuVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgICByZWZyZXNoVG9rZW5UaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlcXVlc3RzLnBvc3QoXG4gICAgICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBgLyR7dXNlclNsdWd9L3JlZnJlc2gtdG9rZW4/cmVmcmVzaGAsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgY29uc3QganNvbjogVXNlcldpdGhUb2tlbiA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgICAgICAgIHNldE5ld1VzZXIoanNvbilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldE5ld1VzZXIobnVsbClcbiAgICAgICAgICAgICAgcmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdG9hc3QuZXJyb3IoZS5tZXNzYWdlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFwaVJvdXRlLFxuICAgICAgaTE4bi5sYW5ndWFnZSxcbiAgICAgIHJlZGlyZWN0VG9JbmFjdGl2aXR5Um91dGUsXG4gICAgICBzZXROZXdVc2VyLFxuICAgICAgdG9rZW5FeHBpcmF0aW9uTXMsXG4gICAgICB1c2VyU2x1ZyxcbiAgICAgIGZvcmNlTG9nb3V0QnVmZmVyTXMsXG4gICAgICBpZCxcbiAgICBdLFxuICApXG5cbiAgY29uc3QgcmVmcmVzaENvb2tpZUFzeW5jID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNraXBTZXRVc2VyPzogYm9vbGVhbik6IFByb21pc2U8Q2xpZW50VXNlcj4gPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlcXVlc3RzLnBvc3QoXG4gICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICBwYXRoOiBgLyR7dXNlclNsdWd9L3JlZnJlc2gtdG9rZW5gLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIClcblxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgIGNvbnN0IGpzb246IFVzZXJXaXRoVG9rZW4gPSBhd2FpdCByZXF1ZXN0Lmpzb24oKVxuICAgICAgICAgIGlmICghc2tpcFNldFVzZXIpIHtcbiAgICAgICAgICAgIHNldE5ld1VzZXIoanNvbilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGpzb24udXNlclxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICBzZXROZXdVc2VyKG51bGwpXG4gICAgICAgICAgcmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoYFJlZnJlc2hpbmcgdG9rZW4gZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuICAgIFthcGlSb3V0ZSwgaTE4bi5sYW5ndWFnZSwgcmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSwgc2V0TmV3VXNlciwgdXNlclNsdWcsIHVzZXJdLFxuICApXG5cbiAgY29uc3QgbG9nT3V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodXNlciAmJiB1c2VyLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgc2V0TmV3VXNlcihudWxsKVxuICAgICAgICBhd2FpdCByZXF1ZXN0cy5wb3N0KFxuICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgICAgcGF0aDogYC8ke3VzZXIuY29sbGVjdGlvbn0vbG9nb3V0YCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIC8vIGZhaWwgc2lsZW50bHkgYW5kIGxvZyB0aGUgdXNlciBvdXQgaW4gc3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbYXBpUm91dGUsIHNldE5ld1VzZXIsIHVzZXJdKVxuXG4gIGNvbnN0IHJlZnJlc2hQZXJtaXNzaW9ucyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGxvY2FsZSB9OiB7IGxvY2FsZT86IHN0cmluZyB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHFzLnN0cmluZ2lmeShcbiAgICAgICAge1xuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFkZFF1ZXJ5UHJlZml4OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVxdWVzdHMuZ2V0KFxuICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgICAgcGF0aDogYC9hY2Nlc3Mke3BhcmFtc31gLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIClcblxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgIGNvbnN0IGpzb246IFNhbml0aXplZFBlcm1pc3Npb25zID0gYXdhaXQgcmVxdWVzdC5qc29uKClcbiAgICAgICAgICBzZXRQZXJtaXNzaW9ucyhqc29uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmV0Y2hpbmcgcGVybWlzc2lvbnMgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXF1ZXN0LnN0YXR1c31gKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKGBSZWZyZXNoaW5nIHBlcm1pc3Npb25zIGZhaWxlZDogJHtlLm1lc3NhZ2V9YClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthcGlSb3V0ZSwgaTE4bl0sXG4gIClcblxuICBjb25zdCBmZXRjaEZ1bGxVc2VyID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVxdWVzdHMuZ2V0KFxuICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgcGF0aDogYC8ke3VzZXJTbHVnfS9tZWAsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBjb25zdCBqc29uOiBVc2VyV2l0aFRva2VuID0gYXdhaXQgcmVxdWVzdC5qc29uKClcbiAgICAgICAgc2V0TmV3VXNlcihqc29uKVxuICAgICAgICByZXR1cm4ganNvbj8udXNlciB8fCBudWxsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdG9hc3QuZXJyb3IoYEZldGNoaW5nIHVzZXIgZmFpbGVkOiAke2UubWVzc2FnZX1gKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sIFthcGlSb3V0ZSwgdXNlclNsdWcsIGkxOG4ubGFuZ3VhZ2UsIHNldE5ld1VzZXJdKVxuXG4gIGNvbnN0IHJlZnJlc2hDb29raWVFdmVudCA9IHVzZUVmZmVjdEV2ZW50KHJlZnJlc2hDb29raWUpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gd2hlbiBsb2NhdGlvbiBjaGFuZ2VzLCByZWZyZXNoIGNvb2tpZVxuICAgIHJlZnJlc2hDb29raWVFdmVudCgpXG4gIH0sIFtwYXRobmFtZV0pXG5cbiAgY29uc3QgZmV0Y2hGdWxsVXNlckV2ZW50ID0gdXNlRWZmZWN0RXZlbnQoZmV0Y2hGdWxsVXNlcilcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFVzZXJPbk1vdW50KCkge1xuICAgICAgYXdhaXQgZmV0Y2hGdWxsVXNlckV2ZW50KClcbiAgICAgIHNldEZldGNoZWRVc2VyT25Nb3VudCh0cnVlKVxuICAgIH1cblxuICAgIHZvaWQgZmV0Y2hVc2VyT25Nb3VudCgpXG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF1c2VyICYmIGF1dG9Mb2dpbiAmJiAhYXV0b0xvZ2luLnByZWZpbGxPbmx5KSB7XG4gICAgICB2b2lkIGZldGNoRnVsbFVzZXJFdmVudCgpXG4gICAgfVxuICB9LCBbdXNlciwgYXV0b0xvZ2luXSlcblxuICB1c2VFZmZlY3QoXG4gICAgKCkgPT4gKCkgPT4ge1xuICAgICAgLy8gcmVtb3ZlIGFsbCB0aW1lb3V0cyBvbiB1bm1vdW50XG4gICAgICBjbGVhclRpbWVvdXQocmVmcmVzaFRva2VuVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgY2xlYXJUaW1lb3V0KHJlbWluZGVyVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlTG9nT3V0VGltZW91dFJlZi5jdXJyZW50KVxuICAgIH0sXG4gICAgW10sXG4gIClcblxuICBpZiAoIXVzZXIgJiYgIWZldGNoZWRVc2VyT25Nb3VudCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb250ZXh0XG4gICAgICB2YWx1ZT17e1xuICAgICAgICBmZXRjaEZ1bGxVc2VyLFxuICAgICAgICBsb2dPdXQsXG4gICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICByZWZyZXNoQ29va2llLFxuICAgICAgICByZWZyZXNoQ29va2llQXN5bmMsXG4gICAgICAgIHJlZnJlc2hQZXJtaXNzaW9ucyxcbiAgICAgICAgc2V0UGVybWlzc2lvbnMsXG4gICAgICAgIHNldFVzZXI6IHNldE5ld1VzZXIsXG4gICAgICAgIHRva2VuOiB0b2tlbkluTWVtb3J5LFxuICAgICAgICB0b2tlbkV4cGlyYXRpb25NcyxcbiAgICAgICAgdXNlcixcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29udGV4dD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlQXV0aCA9IDxUID0gQ2xpZW50VXNlciw+KCk6IEF1dGhDb250ZXh0PFQ+ID0+IHVzZShDb250ZXh0KSBhcyBBdXRoQ29udGV4dDxUPlxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgT25DYW5jZWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcblxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9BdXRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZVRyYW5zaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSAnLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5cbmV4cG9ydCBjb25zdCBzdGF5TG9nZ2VkSW5Nb2RhbFNsdWcgPSAnc3RheS1sb2dnZWQtaW4nXG5cbmV4cG9ydCBjb25zdCBTdGF5TG9nZ2VkSW5Nb2RhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgcmVmcmVzaENvb2tpZSB9ID0gdXNlQXV0aCgpXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3Qge1xuICAgIGFkbWluOiB7XG4gICAgICByb3V0ZXM6IHsgbG9nb3V0OiBsb2dvdXRSb3V0ZSB9LFxuICAgIH0sXG4gICAgcm91dGVzOiB7IGFkbWluOiBhZG1pblJvdXRlIH0sXG4gIH0gPSBjb25maWdcblxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcblxuICBjb25zdCBvbkNvbmZpcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+XG4gICAgICByb3V0ZXIucHVzaChcbiAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgIGFkbWluUm91dGUsXG4gICAgICAgICAgcGF0aDogbG9nb3V0Um91dGUsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApXG4gIH0sIFtyb3V0ZXIsIHN0YXJ0Um91dGVUcmFuc2l0aW9uLCBhZG1pblJvdXRlLCBsb2dvdXRSb3V0ZV0pXG5cbiAgY29uc3Qgb25DYW5jZWw6IE9uQ2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJlZnJlc2hDb29raWUoKVxuICB9LCBbcmVmcmVzaENvb2tpZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8Q29uZmlybWF0aW9uTW9kYWxcbiAgICAgIGJvZHk9e3QoJ2F1dGhlbnRpY2F0aW9uOnlvdUFyZUluYWN0aXZlJyl9XG4gICAgICBjYW5jZWxMYWJlbD17dCgnYXV0aGVudGljYXRpb246c3RheUxvZ2dlZEluJyl9XG4gICAgICBjb25maXJtTGFiZWw9e3QoJ2F1dGhlbnRpY2F0aW9uOmxvZ091dCcpfVxuICAgICAgaGVhZGluZz17dCgnYXV0aGVudGljYXRpb246c3RheUxvZ2dlZEluJyl9XG4gICAgICBtb2RhbFNsdWc9e3N0YXlMb2dnZWRJbk1vZGFsU2x1Z31cbiAgICAgIG9uQ2FuY2VsPXtvbkNhbmNlbH1cbiAgICAgIG9uQ29uZmlybT17b25Db25maXJtfVxuICAgIC8+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgTW9kYWwsIHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgZHJhd2VyWkJhc2UsIHVzZURyYXdlckRlcHRoIH0gZnJvbSAnLi4vRHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdjb25maXJtYXRpb24tbW9kYWwnXG5cbmV4cG9ydCB0eXBlIE9uQ2FuY2VsID0gKCkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xuICBib2R5OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmdcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGNvbmZpcm1pbmdMYWJlbD86IHN0cmluZ1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmdcbiAgaGVhZGluZzogUmVhY3QuUmVhY3ROb2RlXG4gIG1vZGFsU2x1Zzogc3RyaW5nXG4gIG9uQ2FuY2VsPzogT25DYW5jZWxcbiAgb25Db25maXJtOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwocHJvcHM6IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGJvZHksXG4gICAgY2FuY2VsTGFiZWwsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbmZpcm1pbmdMYWJlbCxcbiAgICBjb25maXJtTGFiZWwsXG4gICAgaGVhZGluZyxcbiAgICBtb2RhbFNsdWcsXG4gICAgb25DYW5jZWw6IG9uQ2FuY2VsRnJvbVByb3BzLFxuICAgIG9uQ29uZmlybTogb25Db25maXJtRnJvbVByb3BzLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBlZGl0RGVwdGggPSB1c2VEcmF3ZXJEZXB0aCgpXG5cbiAgY29uc3QgW2NvbmZpcm1pbmcsIHNldENvbmZpcm1pbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgeyBjbG9zZU1vZGFsLCBpc01vZGFsT3BlbiB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBvbkNvbmZpcm0gPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFjb25maXJtaW5nKSB7XG4gICAgICBzZXRDb25maXJtaW5nKHRydWUpXG5cbiAgICAgIGlmICh0eXBlb2Ygb25Db25maXJtRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGF3YWl0IG9uQ29uZmlybUZyb21Qcm9wcygpXG4gICAgICB9XG5cbiAgICAgIHNldENvbmZpcm1pbmcoZmFsc2UpXG4gICAgICBjbG9zZU1vZGFsKG1vZGFsU2x1ZylcbiAgICB9XG4gIH0sIFtjb25maXJtaW5nLCBvbkNvbmZpcm1Gcm9tUHJvcHMsIGNsb3NlTW9kYWwsIG1vZGFsU2x1Z10pXG5cbiAgY29uc3Qgb25DYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFjb25maXJtaW5nKSB7XG4gICAgICBjbG9zZU1vZGFsKG1vZGFsU2x1ZylcblxuICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbEZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbkNhbmNlbEZyb21Qcm9wcygpXG4gICAgICB9XG4gICAgfVxuICB9LCBbY29uZmlybWluZywgb25DYW5jZWxGcm9tUHJvcHMsIGNsb3NlTW9kYWwsIG1vZGFsU2x1Z10pXG5cbiAgaWYgKCFpc01vZGFsT3Blbihtb2RhbFNsdWcpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvaXNzdWVzLzEzNzc4XG4gICAgICBjbG9zZU9uQmx1cj17ZmFsc2V9XG4gICAgICBzbHVnPXttb2RhbFNsdWd9XG4gICAgICBzdHlsZT17e1xuICAgICAgICB6SW5kZXg6IGRyYXdlclpCYXNlICsgZWRpdERlcHRoLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcHBlcmB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udGVudGB9PlxuICAgICAgICAgIHt0eXBlb2YgaGVhZGluZyA9PT0gJ3N0cmluZycgPyA8aDE+e2hlYWRpbmd9PC9oMT4gOiBoZWFkaW5nfVxuICAgICAgICAgIHt0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyA8cD57Ym9keX08L3A+IDogYm9keX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250cm9sc2B9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGRpc2FibGVkPXtjb25maXJtaW5nfVxuICAgICAgICAgICAgaWQ9XCJjb25maXJtLWNhbmNlbFwiXG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNhbmNlbH1cbiAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2FuY2VsTGFiZWwgfHwgdCgnZ2VuZXJhbDpjYW5jZWwnKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIGlkPVwiY29uZmlybS1hY3Rpb25cIiBvbkNsaWNrPXtvbkNvbmZpcm19IHNpemU9XCJsYXJnZVwiPlxuICAgICAgICAgICAge2NvbmZpcm1pbmdcbiAgICAgICAgICAgICAgPyBjb25maXJtaW5nTGFiZWwgfHwgYCR7dCgnZ2VuZXJhbDpsb2FkaW5nJyl9Li4uYFxuICAgICAgICAgICAgICA6IGNvbmZpcm1MYWJlbCB8fCB0KCdnZW5lcmFsOmNvbmZpcm0nKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IE1vZGFsLCB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFRvZ2dsZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvWC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgR3V0dGVyIH0gZnJvbSAnLi4vR3V0dGVyL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdkcmF3ZXInXG5cbmV4cG9ydCBjb25zdCBkcmF3ZXJaQmFzZSA9IDEwMFxuXG5leHBvcnQgY29uc3QgZm9ybWF0RHJhd2VyU2x1ZyA9ICh7IHNsdWcsIGRlcHRoIH06IHsgZGVwdGg6IG51bWJlcjsgc2x1Zzogc3RyaW5nIH0pOiBzdHJpbmcgPT5cbiAgYGRyYXdlcl8ke2RlcHRofV8ke3NsdWd9YFxuXG5leHBvcnQgeyB1c2VEcmF3ZXJTbHVnIH0gZnJvbSAnLi91c2VEcmF3ZXJTbHVnLmpzJ1xuXG5leHBvcnQgY29uc3QgRHJhd2VyVG9nZ2xlcjogUmVhY3QuRkM8VG9nZ2xlclByb3BzPiA9ICh7XG4gIHNsdWcsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBvbkNsaWNrLFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHsgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZSkgPT4ge1xuICAgICAgb3Blbk1vZGFsKHNsdWcpXG4gICAgICBpZiAodHlwZW9mIG9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25DbGljayhlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29wZW5Nb2RhbCwgc2x1Zywgb25DbGlja10sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxidXR0b24gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGRpc2FibGVkPXtkaXNhYmxlZH0gb25DbGljaz17aGFuZGxlQ2xpY2t9IHR5cGU9XCJidXR0b25cIiB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IERyYXdlcjogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgc2x1ZyxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZ3V0dGVyID0gdHJ1ZSxcbiAgSGVhZGVyLFxuICBob3ZlclRpdGxlLFxuICB0aXRsZSxcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgbW9kYWxTdGF0ZSB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCBkcmF3ZXJEZXB0aCA9IHVzZURyYXdlckRlcHRoKClcblxuICBjb25zdCBpc09wZW4gPSAhIW1vZGFsU3RhdGVbc2x1Z10/LmlzT3BlblxuXG4gIGNvbnN0IFthbmltYXRlSW4sIHNldEFuaW1hdGVJbl0gPSB1c2VTdGF0ZShpc09wZW4pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBzZXRBbmltYXRlSW4oaXNPcGVuKVxuICB9LCBbaXNPcGVuXSlcblxuICBpZiAoaXNPcGVuKSB7XG4gICAgLy8gSU1QT1JUQU5UOiBkbyBub3QgcmVuZGVyIHRoZSBkcmF3ZXIgdW50aWwgaXQgaXMgZXhwbGljaXRseSBvcGVuLCB0aGlzIGlzIHRvIGF2b2lkIGxhcmdlIGh0bWwgdHJlZXMgZXNwZWNpYWxseSB3aGVuIG5lc3RpbmcgZHJhd2Vyc1xuICAgIHJldHVybiAoXG4gICAgICA8RHJhd2VyRGVwdGhQcm92aWRlcj5cbiAgICAgICAgPE1vZGFsXG4gICAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgICAgICBhbmltYXRlSW4gJiYgYCR7YmFzZUNsYXNzfS0taXMtb3BlbmAsXG4gICAgICAgICAgICBkcmF3ZXJEZXB0aCA+IDEgJiYgYCR7YmFzZUNsYXNzfS0tbmVzdGVkYCxcbiAgICAgICAgICBdXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvaXNzdWVzLzEzNzc4XG4gICAgICAgICAgY2xvc2VPbkJsdXI9e2ZhbHNlfVxuICAgICAgICAgIHNsdWc9e3NsdWd9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHpJbmRleDogZHJhd2VyWkJhc2UgKyBkcmF3ZXJEZXB0aCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgeyghZHJhd2VyRGVwdGggfHwgZHJhd2VyRGVwdGggPT09IDEpICYmIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ibHVyLWJnYH0gLz59XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpjbG9zZScpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jbG9zZWB9XG4gICAgICAgICAgICBpZD17YGNsb3NlLWRyYXdlcl9fJHtzbHVnfWB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZU1vZGFsKHNsdWcpfVxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKDEwMCUgLSAoJHtkcmF3ZXJEZXB0aH0gKiB2YXIoLS1ndXR0ZXItaCkpKWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ibHVyLWJnLWNvbnRlbnRgfSAvPlxuICAgICAgICAgICAgPEd1dHRlciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnQtY2hpbGRyZW5gfSBsZWZ0PXtndXR0ZXJ9IHJpZ2h0PXtndXR0ZXJ9PlxuICAgICAgICAgICAgICB7SGVhZGVyfVxuICAgICAgICAgICAgICB7SGVhZGVyID09PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJgfT5cbiAgICAgICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcl9fdGl0bGVgfSB0aXRsZT17aG92ZXJUaXRsZSA/IHRpdGxlIDogbnVsbH0+XG4gICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICB7LyogVE9ETzogdGhlIGBidXR0b25gIEhUTUwgZWxlbWVudCBicmVha3MgQ1NTIHRyYW5zaXRpb25zIG9uIHRoZSBkcmF3ZXIgZm9yIHNvbWUgcmVhc29uLi4uXG4gICAgICAgICAgICAgICAgICAgIGkuZS4gY2hhbmdpbmcgdG8gYSBgZGl2YCBlbGVtZW50IHdpbGwgZml4IHRoZSBhbmltYXRpb24gaXNzdWUgYnV0IHdpbGwgYnJlYWsgYWNjZXNzaWJpbGl0eVxuICAgICAgICAgICAgICAgICAgKi99XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6Y2xvc2UnKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJfX2Nsb3NlYH1cbiAgICAgICAgICAgICAgICAgICAgaWQ9e2BjbG9zZS1kcmF3ZXJfXyR7c2x1Z31gfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZU1vZGFsKHNsdWcpfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC9HdXR0ZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvTW9kYWw+XG4gICAgICA8L0RyYXdlckRlcHRoUHJvdmlkZXI+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IERyYXdlckRlcHRoQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoMSlcblxuZXhwb3J0IGNvbnN0IERyYXdlckRlcHRoUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgcGFyZW50RGVwdGggPSB1c2VEcmF3ZXJEZXB0aCgpXG4gIGNvbnN0IGRlcHRoID0gcGFyZW50RGVwdGggKyAxXG5cbiAgcmV0dXJuIDxEcmF3ZXJEZXB0aENvbnRleHQgdmFsdWU9e2RlcHRofT57Y2hpbGRyZW59PC9EcmF3ZXJEZXB0aENvbnRleHQ+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VEcmF3ZXJEZXB0aCA9ICgpOiBudW1iZXIgPT4gdXNlKERyYXdlckRlcHRoQ29udGV4dClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHR5cGUgR3V0dGVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGxlZnQ/OiBib29sZWFuXG4gIG5lZ2F0aXZlTGVmdD86IGJvb2xlYW5cbiAgbmVnYXRpdmVSaWdodD86IGJvb2xlYW5cbiAgcmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxuICByaWdodD86IGJvb2xlYW5cbn1cblxuY29uc3QgYmFzZUNsYXNzID0gJ2d1dHRlcidcblxuZXhwb3J0IGNvbnN0IEd1dHRlcjogUmVhY3QuRkM8R3V0dGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgbGVmdCA9IHRydWUsXG4gICAgbmVnYXRpdmVMZWZ0ID0gZmFsc2UsXG4gICAgbmVnYXRpdmVSaWdodCA9IGZhbHNlLFxuICAgIHJlZixcbiAgICByaWdodCA9IHRydWUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHNob3VsZFBhZExlZnQgPSBsZWZ0ICYmICFuZWdhdGl2ZUxlZnRcbiAgY29uc3Qgc2hvdWxkUGFkUmlnaHQgPSByaWdodCAmJiAhbmVnYXRpdmVSaWdodFxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgc2hvdWxkUGFkTGVmdCAmJiBgJHtiYXNlQ2xhc3N9LS1sZWZ0YCxcbiAgICAgICAgc2hvdWxkUGFkUmlnaHQgJiYgYCR7YmFzZUNsYXNzfS0tcmlnaHRgLFxuICAgICAgICBuZWdhdGl2ZUxlZnQgJiYgYCR7YmFzZUNsYXNzfS0tbmVnYXRpdmUtbGVmdGAsXG4gICAgICAgIG5lZ2F0aXZlUmlnaHQgJiYgYCR7YmFzZUNsYXNzfS0tbmVnYXRpdmUtcmlnaHRgLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VFZGl0RGVwdGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRWRpdERlcHRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgZm9ybWF0RHJhd2VyU2x1ZyB9IGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCBjb25zdCB1c2VEcmF3ZXJTbHVnID0gKHNsdWc6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHV1aWQgPSB1c2VJZCgpXG4gIGNvbnN0IGVkaXREZXB0aCA9IHVzZUVkaXREZXB0aCgpXG4gIHJldHVybiBmb3JtYXREcmF3ZXJTbHVnKHtcbiAgICBzbHVnOiBgJHtzbHVnfS0ke3V1aWR9YCxcbiAgICBkZXB0aDogZWRpdERlcHRoLFxuICB9KVxufVxuIiwiaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuXG50eXBlIEdldE9wdGlvbnMgPSB7XG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59ICYgUmVxdWVzdEluaXRcblxuZXhwb3J0IGNvbnN0IHJlcXVlc3RzID0ge1xuICBkZWxldGU6ICh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7IGhlYWRlcnM6IHt9IH0pOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5oZWFkZXJzID8geyAuLi5vcHRpb25zLmhlYWRlcnMgfSA6IHt9XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgfVxuXG4gICAgcmV0dXJuIGZldGNoKHVybCwgZm9ybWF0dGVkT3B0aW9ucylcbiAgfSxcblxuICBnZXQ6ICh1cmw6IHN0cmluZywgb3B0aW9uczogR2V0T3B0aW9ucyA9IHsgaGVhZGVyczoge30gfSk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgICBsZXQgcXVlcnkgPSAnJ1xuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgcXVlcnkgPSBxcy5zdHJpbmdpZnkob3B0aW9ucy5wYXJhbXMsIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSlcbiAgICB9XG4gICAgcmV0dXJuIGZldGNoKGAke3VybH0ke3F1ZXJ5fWAsIHtcbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pXG4gIH0sXG5cbiAgcGF0Y2g6ICh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7IGhlYWRlcnM6IHt9IH0pOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5oZWFkZXJzID8geyAuLi5vcHRpb25zLmhlYWRlcnMgfSA6IHt9XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICB9XG5cbiAgICByZXR1cm4gZmV0Y2godXJsLCBmb3JtYXR0ZWRPcHRpb25zKVxuICB9LFxuXG4gIHBvc3Q6ICh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7IGhlYWRlcnM6IHt9IH0pOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5oZWFkZXJzID8geyAuLi5vcHRpb25zLmhlYWRlcnMgfSA6IHt9XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIH1cblxuICAgIHJldHVybiBmZXRjaChgJHt1cmx9YCwgZm9ybWF0dGVkT3B0aW9ucylcbiAgfSxcblxuICBwdXQ6ICh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7IGhlYWRlcnM6IHt9IH0pOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5oZWFkZXJzID8geyAuLi5vcHRpb25zLmhlYWRlcnMgfSA6IHt9XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgfVxuXG4gICAgcmV0dXJuIGZldGNoKHVybCwgZm9ybWF0dGVkT3B0aW9ucylcbiAgfSxcbn1cbiIsImV4cG9ydCBjb25zdCBnZW5lcmF0ZUZpZWxkSUQgPSAocGF0aDogc3RyaW5nLCBlZGl0RGVwdGg6IG51bWJlciwgdXVpZDogc3RyaW5nKSA9PiB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICByZXR1cm4gYGZpZWxkLSR7cGF0aC5yZXBsYWNlKC9cXC4vZywgJ19fJyl9JHtlZGl0RGVwdGggPiAxID8gYC0ke2VkaXREZXB0aH1gIDogJyd9JHt1dWlkID8gYC0ke3V1aWR9YCA6ICcnfWBcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBSb3cgfSBmcm9tICdwYXlsb2FkJ1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFJvd3NBbmRDb2xsYXBzZWRJRHMgPSAoe1xuICBjb2xsYXBzZWQsXG4gIHJvd0lELFxuICByb3dzLFxufToge1xuICBjb2xsYXBzZWQ6IGJvb2xlYW5cbiAgcm93SUQ6IHN0cmluZ1xuICByb3dzOiBSb3dbXVxufSk6IHtcbiAgY29sbGFwc2VkSURzOiBzdHJpbmdbXVxuICB1cGRhdGVkUm93czogUm93W11cbn0gPT4ge1xuICByZXR1cm4gcm93cy5yZWR1Y2UoXG4gICAgKGFjYywgcm93KSA9PiB7XG4gICAgICBpZiAocm93SUQgPT09IHJvdy5pZCkge1xuICAgICAgICByb3cuY29sbGFwc2VkID0gY29sbGFwc2VkXG4gICAgICB9XG4gICAgICBpZiAocm93LmNvbGxhcHNlZCkge1xuICAgICAgICBhY2MuY29sbGFwc2VkSURzLnB1c2gocm93LmlkKVxuICAgICAgfVxuICAgICAgYWNjLnVwZGF0ZWRSb3dzLnB1c2gocm93KVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sXG4gICAge1xuICAgICAgY29sbGFwc2VkSURzOiBbXSxcbiAgICAgIHVwZGF0ZWRSb3dzOiBbXSxcbiAgICB9LFxuICApXG59XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBbGxSb3dzID0gKHtcbiAgY29sbGFwc2VkLFxuICByb3dzLFxufSk6IHtcbiAgY29sbGFwc2VkSURzOiBzdHJpbmdbXVxuICB1cGRhdGVkUm93czogUm93W11cbn0gPT4ge1xuICByZXR1cm4gcm93cy5yZWR1Y2UoXG4gICAgKGFjYywgcm93KSA9PiB7XG4gICAgICByb3cuY29sbGFwc2VkID0gY29sbGFwc2VkXG4gICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgIGFjYy5jb2xsYXBzZWRJRHMucHVzaChyb3cuaWQpXG4gICAgICB9XG4gICAgICBhY2MudXBkYXRlZFJvd3MucHVzaChyb3cpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2xsYXBzZWRJRHM6IFtdLFxuICAgICAgdXBkYXRlZFJvd3M6IFtdLFxuICAgIH0sXG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQmFubmVyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQmFubmVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ2hlY2tib3hGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9DaGVja2JveC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnLi4vRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdudWxsaWZ5LWxvY2FsZS1maWVsZCdcblxudHlwZSBOdWxsaWZ5TG9jYWxlRmllbGRQcm9wcyA9IHtcbiAgcmVhZG9ubHkgZmllbGRWYWx1ZT86IFtdIHwgbnVsbCB8IG51bWJlclxuICByZWFkb25seSBsb2NhbGl6ZWQ6IGJvb2xlYW5cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgTnVsbGlmeUxvY2FsZUZpZWxkOiBSZWFjdC5GQzxOdWxsaWZ5TG9jYWxlRmllbGRQcm9wcz4gPSAoe1xuICBmaWVsZFZhbHVlLFxuICBsb2NhbGl6ZWQsXG4gIHBhdGgsXG4gIHJlYWRPbmx5ID0gZmFsc2UsXG59KSA9PiB7XG4gIGNvbnN0IHsgY29kZTogY3VycmVudExvY2FsZSB9ID0gdXNlTG9jYWxlKClcbiAgY29uc3Qge1xuICAgIGNvbmZpZzogeyBsb2NhbGl6YXRpb24gfSxcbiAgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkXSA9IFJlYWN0LnVzZVN0YXRlPGJvb2xlYW4+KHR5cGVvZiBmaWVsZFZhbHVlICE9PSAnbnVtYmVyJylcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgZGlzcGF0Y2hGaWVsZHMsIHNldE1vZGlmaWVkIH0gPSB1c2VGb3JtKClcblxuICBpZiAoIWxvY2FsaXplZCB8fCAhbG9jYWxpemF0aW9uKSB7XG4gICAgLy8gaGlkZSB3aGVuIGZpZWxkIGlzIG5vdCBsb2NhbGl6ZWQgb3IgbG9jYWxpemF0aW9uIGlzIG5vdCBlbmFibGVkXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlmIChsb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZSA9PT0gY3VycmVudExvY2FsZSB8fCAhbG9jYWxpemF0aW9uLmZhbGxiYWNrKSB7XG4gICAgLy8gaWYgZWRpdGluZyBkZWZhdWx0IGxvY2FsZSBvciB3aGVuIGZhbGxiYWNrIGlzIGRpc2FibGVkXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHVzZUZhbGxiYWNrID0gIWNoZWNrZWRcblxuICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgIHR5cGU6ICdVUERBVEUnLFxuICAgICAgcGF0aCxcbiAgICAgIHZhbHVlOiB1c2VGYWxsYmFjayA/IG51bGwgOiBmaWVsZFZhbHVlIHx8IDAsXG4gICAgfSlcbiAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgIHNldENoZWNrZWQodXNlRmFsbGJhY2spXG4gIH1cblxuICBpZiAoZmllbGRWYWx1ZSkge1xuICAgIGxldCBoaWRlQ2hlY2tib3ggPSBmYWxzZVxuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ251bWJlcicgJiYgZmllbGRWYWx1ZSA+IDApIHtcbiAgICAgIGhpZGVDaGVja2JveCA9IHRydWVcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSkgJiYgZmllbGRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBoaWRlQ2hlY2tib3ggPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKGhpZGVDaGVja2JveCkge1xuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgc2V0Q2hlY2tlZChmYWxzZSlcbiAgICAgIH0gLy8gdW5jaGVjayB3aGVuIGZpZWxkIGhhcyB2YWx1ZVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCYW5uZXIgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgeyFmaWVsZFZhbHVlICYmIHJlYWRPbmx5ID8gKFxuICAgICAgICB0KCdnZW5lcmFsOmZhbGxiYWNrVG9EZWZhdWx0TG9jYWxlJylcbiAgICAgICkgOiAoXG4gICAgICAgIDxDaGVja2JveEZpZWxkXG4gICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICBmaWVsZD17e1xuICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDpmYWxsYmFja1RvRGVmYXVsdExvY2FsZScpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgaWQ9e2BmaWVsZC0ke3BhdGgucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgICAgc2NoZW1hUGF0aD1cIlwiXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvQmFubmVyPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHtcbiAgQ2hlY2tib3hGaWVsZENsaWVudENvbXBvbmVudCxcbiAgQ2hlY2tib3hGaWVsZENsaWVudFByb3BzLFxuICBDaGVja2JveEZpZWxkVmFsaWRhdGlvbixcbn0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgcnRsTGFuZ3VhZ2VzIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgQ2hlY2tib3hJbnB1dFByb3BzIH0gZnJvbSAnLi9JbnB1dC5qcydcblxuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZEVycm9yL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB3aXRoQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvd2l0aENvbmRpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUVkaXREZXB0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9FZGl0RGVwdGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGdlbmVyYXRlRmllbGRJRCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9nZW5lcmF0ZUZpZWxkSUQuanMnXG5pbXBvcnQgeyBtZXJnZUZpZWxkU3R5bGVzIH0gZnJvbSAnLi4vbWVyZ2VGaWVsZFN0eWxlcy5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4vSW5wdXQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2NoZWNrYm94J1xuXG5leHBvcnQgeyBDaGVja2JveEZpZWxkQ2xpZW50UHJvcHMsIENoZWNrYm94SW5wdXQsIHR5cGUgQ2hlY2tib3hJbnB1dFByb3BzIH1cblxuY29uc3QgQ2hlY2tib3hGaWVsZENvbXBvbmVudDogQ2hlY2tib3hGaWVsZENsaWVudENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgY2hlY2tlZDogY2hlY2tlZEZyb21Qcm9wcyxcbiAgICBkaXNhYmxlRm9ybURhdGEsXG4gICAgZmllbGQsXG4gICAgZmllbGQ6IHtcbiAgICAgIGFkbWluOiB7IGNsYXNzTmFtZSwgZGVzY3JpcHRpb24gfSA9IHt9IGFzIENoZWNrYm94RmllbGRDbGllbnRQcm9wc1snZmllbGQnXVsnYWRtaW4nXSxcbiAgICAgIGxhYmVsLFxuICAgICAgcmVxdWlyZWQsXG4gICAgfSA9IHt9IGFzIENoZWNrYm94RmllbGRDbGllbnRQcm9wc1snZmllbGQnXSxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2VGcm9tUHJvcHMsXG4gICAgcGFydGlhbENoZWNrZWQsXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyB1dWlkIH0gPSB1c2VGb3JtKClcblxuICBjb25zdCBlZGl0RGVwdGggPSB1c2VFZGl0RGVwdGgoKVxuXG4gIGNvbnN0IHtcbiAgICBpMThuOiB7IGxhbmd1YWdlIH0sXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IGlzUlRMID0gKHJ0bExhbmd1YWdlcyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMobGFuZ3VhZ2UpXG5cbiAgY29uc3QgbWVtb2l6ZWRWYWxpZGF0ZTogQ2hlY2tib3hGaWVsZFZhbGlkYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBwYXRoLFxuICAgIHNldFZhbHVlLFxuICAgIHNob3dFcnJvcixcbiAgICB2YWx1ZSxcbiAgfSA9IHVzZUZpZWxkKHtcbiAgICBkaXNhYmxlRm9ybURhdGEsXG4gICAgcG90ZW50aWFsbHlTdGFsZVBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgdmFsaWRhdGU6IG1lbW9pemVkVmFsaWRhdGUsXG4gIH0pXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFyZWFkT25seSkge1xuICAgICAgc2V0VmFsdWUoIXZhbHVlKVxuICAgICAgaWYgKHR5cGVvZiBvbkNoYW5nZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbkNoYW5nZUZyb21Qcm9wcyghdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbb25DaGFuZ2VGcm9tUHJvcHMsIHJlYWRPbmx5LCBzZXRWYWx1ZSwgdmFsdWVdKVxuXG4gIGNvbnN0IGNoZWNrZWQgPSBjaGVja2VkRnJvbVByb3BzIHx8IEJvb2xlYW4odmFsdWUpXG5cbiAgY29uc3QgZmllbGRJRCA9IGlkIHx8IGdlbmVyYXRlRmllbGRJRChwYXRoLCBlZGl0RGVwdGgsIHV1aWQpXG5cbiAgY29uc3Qgc3R5bGVzID0gdXNlTWVtbygoKSA9PiBtZXJnZUZpZWxkU3R5bGVzKGZpZWxkKSwgW2ZpZWxkXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBmaWVsZEJhc2VDbGFzcyxcbiAgICAgICAgYmFzZUNsYXNzLFxuICAgICAgICBzaG93RXJyb3IgJiYgJ2Vycm9yJyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB2YWx1ZSAmJiBgJHtiYXNlQ2xhc3N9LS1jaGVja2VkYCxcbiAgICAgICAgKHJlYWRPbmx5IHx8IGRpc2FibGVkKSAmJiBgJHtiYXNlQ2xhc3N9LS1yZWFkLW9ubHlgLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBzdHlsZT17c3R5bGVzfVxuICAgID5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtFcnJvcn1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIDxGaWVsZEVycm9yIGFsaWduQ2FyZXQ9e2lzUlRMID8gJ3JpZ2h0JyA6ICdsZWZ0J30gcGF0aD17cGF0aH0gc2hvd0Vycm9yPXtzaG93RXJyb3J9IC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8Q2hlY2tib3hJbnB1dFxuICAgICAgICBBZnRlcklucHV0PXtBZnRlcklucHV0fVxuICAgICAgICBCZWZvcmVJbnB1dD17QmVmb3JlSW5wdXR9XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGlkPXtmaWVsZElEfVxuICAgICAgICBpbnB1dFJlZj17bnVsbH1cbiAgICAgICAgTGFiZWw9e0xhYmVsfVxuICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgIG5hbWU9e3BhdGh9XG4gICAgICAgIG9uVG9nZ2xlPXtvblRvZ2dsZX1cbiAgICAgICAgcGFydGlhbENoZWNrZWQ9e3BhcnRpYWxDaGVja2VkfVxuICAgICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgIC8+XG4gICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudD17RGVzY3JpcHRpb259XG4gICAgICAgIEZhbGxiYWNrPXs8RmllbGREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259IHBhdGg9e3BhdGh9IC8+fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hlY2tib3hGaWVsZCA9IHdpdGhDb25kaXRpb24oQ2hlY2tib3hGaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgVVBEQVRFIH0gZnJvbSAnLi4vRm9ybS90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgRmllbGRUeXBlLCBPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IHR5cGUgeyBGaWVsZFR5cGUsIE9wdGlvbnMgfVxuXG5pbXBvcnQgeyB1c2VUaHJvdHRsZWRFZmZlY3QgfSBmcm9tICcuLi8uLi9ob29rcy91c2VUaHJvdHRsZWRFZmZlY3QuanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZU9wZXJhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9PcGVyYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7XG4gIHVzZURvY3VtZW50Rm9ybSxcbiAgdXNlRm9ybSxcbiAgdXNlRm9ybUZpZWxkcyxcbiAgdXNlRm9ybUluaXRpYWxpemluZyxcbiAgdXNlRm9ybVByb2Nlc3NpbmcsXG4gIHVzZUZvcm1TdWJtaXR0ZWQsXG59IGZyb20gJy4uL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IHVzZUZpZWxkUGF0aCB9IGZyb20gJy4uL1JlbmRlckZpZWxkcy9jb250ZXh0LmpzJ1xuXG5jb25zdCB1c2VGaWVsZEluRm9ybSA9IDxUVmFsdWUsPihvcHRpb25zPzogT3B0aW9ucyk6IEZpZWxkVHlwZTxUVmFsdWU+ID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVGb3JtRGF0YSA9IGZhbHNlLFxuICAgIGhhc1Jvd3MsXG4gICAgcGF0aDogcGF0aEZyb21PcHRpb25zLFxuICAgIHBvdGVudGlhbGx5U3RhbGVQYXRoLFxuICAgIHZhbGlkYXRlLFxuICB9ID0gb3B0aW9ucyB8fCB7fVxuXG4gIGNvbnN0IHBhdGhGcm9tQ29udGV4dCA9IHVzZUZpZWxkUGF0aCgpXG5cbiAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHN0YWxlIHByb3BzIGdpdmVuIHRvIHNlcnZlciByZW5kZXJlZCBjb21wb25lbnRzLlxuICAvLyBTZWUgdGhlIG5vdGVzIGluIHRoZSBgcG90ZW50aWFsbHlTdGFsZVBhdGhgIHR5cGUgZGVmaW5pdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxuICBjb25zdCBwYXRoID0gcGF0aEZyb21PcHRpb25zIHx8IHBhdGhGcm9tQ29udGV4dCB8fCBwb3RlbnRpYWxseVN0YWxlUGF0aFxuXG4gIGNvbnN0IHN1Ym1pdHRlZCA9IHVzZUZvcm1TdWJtaXR0ZWQoKVxuICBjb25zdCBwcm9jZXNzaW5nID0gdXNlRm9ybVByb2Nlc3NpbmcoKVxuICBjb25zdCBpbml0aWFsaXppbmcgPSB1c2VGb3JtSW5pdGlhbGl6aW5nKClcbiAgY29uc3QgeyB1c2VyIH0gPSB1c2VBdXRoKClcbiAgY29uc3QgeyBpZCwgY29sbGVjdGlvblNsdWcgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHVzZU9wZXJhdGlvbigpXG5cbiAgY29uc3QgZGlzcGF0Y2hGaWVsZCA9IHVzZUZvcm1GaWVsZHMoKFtfLCBkaXNwYXRjaF0pID0+IGRpc3BhdGNoKVxuICBjb25zdCBmaWVsZCA9IHVzZUZvcm1GaWVsZHMoKFtmaWVsZHNdKSA9PiAoZmllbGRzICYmIGZpZWxkcz8uW3BhdGhdKSB8fCBudWxsKVxuXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IGdldERhdGEsIGdldERhdGFCeVBhdGgsIGdldFNpYmxpbmdEYXRhLCBzZXRNb2RpZmllZCB9ID0gdXNlRm9ybSgpXG4gIGNvbnN0IGRvY3VtZW50Rm9ybSA9IHVzZURvY3VtZW50Rm9ybSgpXG5cbiAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IGZpZWxkPy5maWx0ZXJPcHRpb25zXG4gIGNvbnN0IHZhbHVlID0gZmllbGQ/LnZhbHVlIGFzIFRWYWx1ZVxuICBjb25zdCBpbml0aWFsVmFsdWUgPSBmaWVsZD8uaW5pdGlhbFZhbHVlIGFzIFRWYWx1ZVxuICBjb25zdCB2YWxpZCA9IHR5cGVvZiBmaWVsZD8udmFsaWQgPT09ICdib29sZWFuJyA/IGZpZWxkLnZhbGlkIDogdHJ1ZVxuICBjb25zdCBzaG93RXJyb3IgPSB2YWxpZCA9PT0gZmFsc2UgJiYgc3VibWl0dGVkXG5cbiAgY29uc3QgcHJldlZhbGlkID0gdXNlUmVmKHZhbGlkKVxuICBjb25zdCBwcmV2RXJyb3JNZXNzYWdlID0gdXNlUmVmKGZpZWxkPy5lcnJvck1lc3NhZ2UpXG5cbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aCA/IHBhdGguc3BsaXQoJy4nKSA6IFtdXG5cbiAgLy8gTWV0aG9kIHRvIHJldHVybiBmcm9tIGB1c2VGaWVsZGAsIHVzZWQgdG9cbiAgLy8gdXBkYXRlIGZpZWxkIHZhbHVlcyBmcm9tIGZpZWxkIGNvbXBvbmVudChzKVxuICBjb25zdCBzZXRWYWx1ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlLCBkaXNhYmxlTW9kaWZ5aW5nRm9ybSA9IGZhbHNlKSA9PiB7XG4gICAgICAvLyBUT0RPOlxuICAgICAgLy8gVGhlcmUgYXJlIG5vIGJ1aWx0LWluIGZpZWxkcyB0aGF0IHBhc3MgZXZlbnRzIGludG8gYGVgLlxuICAgICAgLy8gUmVtb3ZlIHRoaXMgY2hlY2sgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICAgIGNvbnN0IGlzRXZlbnQgPVxuICAgICAgICBlICYmXG4gICAgICAgIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgZS5wcmV2ZW50RGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgZS5zdG9wUHJvcGFnYXRpb24gPT09ICdmdW5jdGlvbidcblxuICAgICAgY29uc3QgdmFsID0gaXNFdmVudCA/IGUudGFyZ2V0LnZhbHVlIDogZVxuXG4gICAgICBkaXNwYXRjaEZpZWxkKHtcbiAgICAgICAgdHlwZTogJ1VQREFURScsXG4gICAgICAgIGRpc2FibGVGb3JtRGF0YTogZGlzYWJsZUZvcm1EYXRhIHx8IChoYXNSb3dzICYmIHZhbCA+IDApLFxuICAgICAgICBwYXRoLFxuICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgfSlcblxuICAgICAgaWYgKCFkaXNhYmxlTW9kaWZ5aW5nRm9ybSkge1xuICAgICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NldE1vZGlmaWVkLCBwYXRoLCBkaXNwYXRjaEZpZWxkLCBkaXNhYmxlRm9ybURhdGEsIGhhc1Jvd3NdLFxuICApXG5cbiAgLy8gU3RvcmUgcmVzdWx0IGZyb20gaG9vayBhcyByZWZcbiAgLy8gdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZXJlbmRlcnNcbiAgY29uc3QgcmVzdWx0OiBGaWVsZFR5cGU8VFZhbHVlPiA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGJsb2Nrc0ZpbHRlck9wdGlvbnM6IGZpZWxkPy5ibG9ja3NGaWx0ZXJPcHRpb25zLFxuICAgICAgY3VzdG9tQ29tcG9uZW50czogZmllbGQ/LmN1c3RvbUNvbXBvbmVudHMsXG4gICAgICBkaXNhYmxlZDogcHJvY2Vzc2luZyB8fCBpbml0aWFsaXppbmcsXG4gICAgICBlcnJvck1lc3NhZ2U6IGZpZWxkPy5lcnJvck1lc3NhZ2UsXG4gICAgICBlcnJvclBhdGhzOiBmaWVsZD8uZXJyb3JQYXRocyB8fCBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnMsXG4gICAgICBmb3JtSW5pdGlhbGl6aW5nOiBpbml0aWFsaXppbmcsXG4gICAgICBmb3JtUHJvY2Vzc2luZzogcHJvY2Vzc2luZyxcbiAgICAgIGZvcm1TdWJtaXR0ZWQ6IHN1Ym1pdHRlZCxcbiAgICAgIGluaXRpYWxWYWx1ZSxcbiAgICAgIHBhdGgsXG4gICAgICByb3dzOiBmaWVsZD8ucm93cyxcbiAgICAgIHNlbGVjdEZpbHRlck9wdGlvbnM6IGZpZWxkPy5zZWxlY3RGaWx0ZXJPcHRpb25zLFxuICAgICAgc2V0VmFsdWUsXG4gICAgICBzaG93RXJyb3IsXG4gICAgICB2YWxpZDogZmllbGQ/LnZhbGlkLFxuICAgICAgdmFsdWUsXG4gICAgfSksXG4gICAgW1xuICAgICAgZmllbGQsXG4gICAgICBwcm9jZXNzaW5nLFxuICAgICAgc2V0VmFsdWUsXG4gICAgICBzaG93RXJyb3IsXG4gICAgICBzdWJtaXR0ZWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGluaXRpYWxWYWx1ZSxcbiAgICAgIHBhdGgsXG4gICAgICBmaWx0ZXJPcHRpb25zLFxuICAgICAgaW5pdGlhbGl6aW5nLFxuICAgIF0sXG4gIClcblxuICAvLyBUaHJvdHRsZSB0aGUgdmFsaWRhdGUgZnVuY3Rpb25cbiAgdXNlVGhyb3R0bGVkRWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZVRvVmFsaWRhdGUgPSB2YWx1ZVxuXG4gICAgICAgIGlmIChmaWVsZD8ucm93cyAmJiBBcnJheS5pc0FycmF5KGZpZWxkLnJvd3MpKSB7XG4gICAgICAgICAgdmFsdWVUb1ZhbGlkYXRlID0gZ2V0RGF0YUJ5UGF0aChwYXRoKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcHJldkVycm9yTWVzc2FnZS5jdXJyZW50XG4gICAgICAgIGxldCB2YWxpZDogYm9vbGVhbiB8IHN0cmluZyA9IHByZXZWYWxpZC5jdXJyZW50XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGdldERhdGEoKVxuICAgICAgICBjb25zdCBpc1ZhbGlkID1cbiAgICAgICAgICB0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gYXdhaXQgdmFsaWRhdGUodmFsdWVUb1ZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgYmxvY2tEYXRhOiB1bmRlZmluZWQsIC8vIFdpbGwgYmUgZXhwZW5zaXZlIHRvIGdldCAtIG5vdCB3b3J0aCB0byBwYXNzIHRvIGNsaWVudC1zaWRlIHZhbGlkYXRpb24sIGFzIHRoaXMgY2FuIGJlIG9idGFpbmVkIGJ5IHRoZSB1c2VyIHVzaW5nIGB1c2VGb3JtRmllbGRzKClgXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgZGF0YTogZG9jdW1lbnRGb3JtPy5nZXREYXRhID8gZG9jdW1lbnRGb3JtLmdldERhdGEoKSA6IGRhdGEsXG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdvbkNoYW5nZScsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGhTZWdtZW50cyxcbiAgICAgICAgICAgICAgICBwcmVmZXJlbmNlczoge30gYXMgYW55LFxuICAgICAgICAgICAgICAgIHJlcToge1xuICAgICAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgfSBhcyB1bmtub3duIGFzIFBheWxvYWRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHNpYmxpbmdEYXRhOiBnZXRTaWJsaW5nRGF0YShwYXRoKSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogdHlwZW9mIHByZXZFcnJvck1lc3NhZ2UuY3VycmVudCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgPyBwcmV2RXJyb3JNZXNzYWdlLmN1cnJlbnRcbiAgICAgICAgICAgICAgOiBwcmV2VmFsaWQuY3VycmVudFxuXG4gICAgICAgIGlmICh0eXBlb2YgaXNWYWxpZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWxpZCA9IGZhbHNlXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gaXNWYWxpZFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpc1ZhbGlkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB2YWxpZCA9IGlzVmFsaWRcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgZGlzcGF0Y2ggaWYgdGhlIHZhbGlkYXRpb24gcmVzdWx0IGhhcyBjaGFuZ2VkXG4gICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlcmVuZGVyc1xuICAgICAgICBpZiAodmFsaWQgIT09IHByZXZWYWxpZC5jdXJyZW50IHx8IGVycm9yTWVzc2FnZSAhPT0gcHJldkVycm9yTWVzc2FnZS5jdXJyZW50KSB7XG4gICAgICAgICAgcHJldlZhbGlkLmN1cnJlbnQgPSB2YWxpZFxuICAgICAgICAgIHByZXZFcnJvck1lc3NhZ2UuY3VycmVudCA9IGVycm9yTWVzc2FnZVxuXG4gICAgICAgICAgY29uc3QgdXBkYXRlOiBVUERBVEUgPSB7XG4gICAgICAgICAgICB0eXBlOiAnVVBEQVRFJyxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICByb3dzOiBmaWVsZD8ucm93cyxcbiAgICAgICAgICAgIHZhbGlkLFxuICAgICAgICAgICAgdmFsaWRhdGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGlzYWJsZUZvcm1EYXRhIHx8IChoYXNSb3dzID8gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IDAgOiBmYWxzZSkpIHtcbiAgICAgICAgICAgIHVwZGF0ZS5kaXNhYmxlRm9ybURhdGEgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBkaXNwYXRjaEZpZWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBkaXNwYXRjaEZpZWxkKHVwZGF0ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm9pZCB2YWxpZGF0ZUZpZWxkKClcbiAgICB9LFxuICAgIDE1MCxcbiAgICBbXG4gICAgICB2YWx1ZSxcbiAgICAgIGRpc2FibGVGb3JtRGF0YSxcbiAgICAgIGRpc3BhdGNoRmllbGQsXG4gICAgICBnZXREYXRhLFxuICAgICAgZ2V0U2libGluZ0RhdGEsXG4gICAgICBnZXREYXRhQnlQYXRoLFxuICAgICAgaWQsXG4gICAgICBvcGVyYXRpb24sXG4gICAgICBwYXRoLFxuICAgICAgdXNlcixcbiAgICAgIHZhbGlkYXRlLFxuICAgICAgZmllbGQ/LnJvd3MsXG4gICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBdLFxuICApXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIENvbnRleHQgdG8gYWxsb3cgcHJvdmlkaW5nIHVzZUZpZWxkIHZhbHVlIGZvciBmaWVsZHMgZGlyZWN0bHksIGlmIG1hbmFnZWQgb3V0c2lkZSB0aGUgRm9ybVxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZpZWxkQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8RmllbGRUeXBlPHVua25vd24+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbi8qKlxuICogR2V0IGFuZCBzZXQgdGhlIHZhbHVlIG9mIGEgZm9ybSBmaWVsZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcGF5bG9hZGNtcy5jb20vZG9jcy9hZG1pbi9yZWFjdC1ob29rcyN1c2VmaWVsZFxuICovXG5leHBvcnQgY29uc3QgdXNlRmllbGQgPSA8VFZhbHVlLD4ob3B0aW9ucz86IE9wdGlvbnMpOiBGaWVsZFR5cGU8VFZhbHVlPiA9PiB7XG4gIGNvbnN0IHBhdGhGcm9tQ29udGV4dCA9IHVzZUZpZWxkUGF0aCgpXG5cbiAgY29uc3QgZmllbGRDb250ZXh0ID0gUmVhY3QudXNlKEZpZWxkQ29udGV4dCkgYXMgRmllbGRUeXBlPFRWYWx1ZT4gfCB1bmRlZmluZWRcblxuICAvLyBMb2NrIHRoZSBtb2RlIG9uIGZpcnN0IHJlbmRlciBzbyBob29rIG9yZGVyIGlzIHN0YWJsZSBmb3JldmVyLiBUaGlzIGVuc3VyZXNcbiAgLy8gdGhhdCBob29rcyBhcmUgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyIGVhY2ggdGltZSBhIGNvbXBvbmVudCByZW5kZXJzID0+IHNob3VsZFxuICAvLyBub3QgYnJlYWsgdGhlIHJ1bGUgb2YgaG9va3MuXG4gIGNvbnN0IGhhc0ZpZWxkQ29udGV4dCA9IFJlYWN0LnVzZVJlZjxmYWxzZSB8IG51bGwgfCB0cnVlPihudWxsKVxuICBpZiAoaGFzRmllbGRDb250ZXh0LmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBVc2UgZmllbGQgY29udGV4dCwgaWYgYSBmaWVsZCBjb250ZXh0IGV4aXN0cyAqKmFuZCoqIHRoZSBwYXRoIG1hdGNoZXMuIElmIHRoZSBwYXRoXG4gICAgLy8gZG9lcyBub3QgbWF0Y2gsIHRoaXMgY291bGQgYmUgdGhlIGZpZWxkIGNvbnRleHQgb2YgYSBwYXJlbnQgZmllbGQgPT4gdGhlcmUgbGlrZWx5IGlzXG4gICAgLy8gYSBuZXN0ZWQgPEZvcm0gLz4gd2Ugc2hvdWxkIHVzZSBpbnN0ZWFkID0+ICdmb3JtJ1xuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gb3B0aW9ucz8ucGF0aCB8fCBwYXRoRnJvbUNvbnRleHQgfHwgb3B0aW9ucz8ucG90ZW50aWFsbHlTdGFsZVBhdGhcblxuICAgIGhhc0ZpZWxkQ29udGV4dC5jdXJyZW50ID1cbiAgICAgIGZpZWxkQ29udGV4dCAmJiBjdXJyZW50UGF0aCAmJiBmaWVsZENvbnRleHQucGF0aCA9PT0gY3VycmVudFBhdGggPyB0cnVlIDogZmFsc2VcbiAgfVxuXG4gIGlmIChoYXNGaWVsZENvbnRleHQuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgIGlmICghZmllbGRDb250ZXh0KSB7XG4gICAgICAvLyBQcm92aWRlciB3YXMgcmVtb3ZlZCBhZnRlciBtb3VudC4gVGhhdCB2aW9sYXRlcyBob29rIGd1YXJhbnRlZXMuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkQ29udGV4dCB3YXMgcmVtb3ZlZCBhZnRlciBtb3VudC4gVGhpcyBicmVha3MgaG9vayBvcmRlcmluZy4nKVxuICAgIH1cbiAgICByZXR1cm4gZmllbGRDb250ZXh0XG4gIH1cblxuICAvLyBXZSBpbnRlbnRpb25hbGx5IGd1YXJkIHRoaXMgaG9vayBjYWxsIHdpdGggYSBtb2RlIHRoYXQgaXMgZml4ZWQgb24gZmlyc3QgcmVuZGVyLlxuICAvLyBUaGUgb3JkZXIgaXMgY29uc2lzdGVudCBhY3Jvc3MgcmVuZGVycy4gU2lsZW5jZSB0aGUgbGludGVy4oCZcyBmYWxzZSBwb3NpdGl2ZS5cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtY29tcGlsZXIvcmVhY3QtY29tcGlsZXJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gIHJldHVybiB1c2VGaWVsZEluRm9ybTxUVmFsdWU+KG9wdGlvbnMpXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG50eXBlIHVzZVRocm90dGxlZEVmZmVjdCA9IChcbiAgY2FsbGJhY2s6IFJlYWN0LkVmZmVjdENhbGxiYWNrLFxuICBkZWxheTogbnVtYmVyLFxuICBkZXBzOiBSZWFjdC5EZXBlbmRlbmN5TGlzdCxcbikgPT4gdm9pZFxuXG4vKipcbiAqIEEgaG9vayB0aGF0IHdpbGwgdGhyb3R0bGUgdGhlIGV4ZWN1dGlvbiBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGluc2lkZSBhIHVzZUVmZmVjdC5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciB0aGluZ3MgbGlrZSB0aHJvdHRsaW5nIGxvYWRpbmcgc3RhdGVzIG9yIG90aGVyIFVJIHVwZGF0ZXMuXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkLlxuICogQHBhcmFtIGRlbGF5IFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgdGhlIGNhbGxiYWNrLlxuICogQHBhcmFtIGRlcHMgVGhlIGRlcGVuZGVuY2llcyB0byB3YXRjaCBmb3IgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVRocm90dGxlZEVmZmVjdDogdXNlVGhyb3R0bGVkRWZmZWN0ID0gKGNhbGxiYWNrLCBkZWxheSwgZGVwcyA9IFtdKSA9PiB7XG4gIGNvbnN0IGxhc3RSYW4gPSB1c2VSZWYoRGF0ZS5ub3coKSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGxhc3RSYW4uY3VycmVudCA+PSBkZWxheSkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICBsYXN0UmFuLmN1cnJlbnQgPSBEYXRlLm5vdygpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZWxheSAtIChEYXRlLm5vdygpIC0gbGFzdFJhbi5jdXJyZW50KSxcbiAgICApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGhhbmRsZXIpXG4gICAgfVxuICB9LCBbZGVsYXksIC4uLmRlcHNdKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudFVzZXIsIERvY3VtZW50UHJlZmVyZW5jZXMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50SW5mb0NvbnRleHQsIERvY3VtZW50SW5mb1Byb3BzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VDb250cm9sbGFibGVTdGF0ZS5qcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaS5qcydcbmltcG9ydCB7IGZvcm1hdERvY1RpdGxlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2Zvcm1hdERvY1RpdGxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgRG9jdW1lbnRUaXRsZVByb3ZpZGVyIH0gZnJvbSAnLi4vRG9jdW1lbnRUaXRsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSwgdXNlTG9jYWxlTG9hZGluZyB9IGZyb20gJy4uL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVByZWZlcmVuY2VzIH0gZnJvbSAnLi4vUHJlZmVyZW5jZXMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgVXBsb2FkRWRpdHNQcm92aWRlciwgdXNlVXBsb2FkRWRpdHMgfSBmcm9tICcuLi9VcGxvYWRFZGl0cy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUdldERvY1Blcm1pc3Npb25zIH0gZnJvbSAnLi91c2VHZXREb2NQZXJtaXNzaW9ucy5qcydcblxuY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30gYXMgRG9jdW1lbnRJbmZvQ29udGV4dClcblxuZXhwb3J0IHR5cGUgKiBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgdXNlRG9jdW1lbnRJbmZvID0gKCk6IERvY3VtZW50SW5mb0NvbnRleHQgPT4gdXNlKENvbnRleHQpXG5cbmNvbnN0IERvY3VtZW50SW5mbzogUmVhY3QuRkM8XG4gIHtcbiAgICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIH0gJiBEb2N1bWVudEluZm9Qcm9wc1xuPiA9ICh7IGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBjdXJyZW50RWRpdG9yOiBjdXJyZW50RWRpdG9yRnJvbVByb3BzLFxuICAgIGRvY1Blcm1pc3Npb25zOiBkb2NQZXJtaXNzaW9uc0Zyb21Qcm9wcyxcbiAgICBnbG9iYWxTbHVnLFxuICAgIGhhc1B1Ymxpc2hlZERvYzogaGFzUHVibGlzaGVkRG9jRnJvbVByb3BzLFxuICAgIGhhc1B1Ymxpc2hQZXJtaXNzaW9uOiBoYXNQdWJsaXNoUGVybWlzc2lvbkZyb21Qcm9wcyxcbiAgICBoYXNTYXZlUGVybWlzc2lvbjogaGFzU2F2ZVBlcm1pc3Npb25Gcm9tUHJvcHMsXG4gICAgaW5pdGlhbERhdGEsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIGlzTG9ja2VkOiBpc0xvY2tlZEZyb21Qcm9wcyxcbiAgICBsYXN0VXBkYXRlVGltZTogbGFzdFVwZGF0ZVRpbWVGcm9tUHJvcHMsXG4gICAgbW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZDogbW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZEZyb21Qcm9wcyxcbiAgICB1bnB1Ymxpc2hlZFZlcnNpb25Db3VudDogdW5wdWJsaXNoZWRWZXJzaW9uQ291bnRGcm9tUHJvcHMsXG4gICAgdmVyc2lvbkNvdW50OiB2ZXJzaW9uQ291bnRGcm9tUHJvcHMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtkb2NQZXJtaXNzaW9ucywgc2V0RG9jUGVybWlzc2lvbnNdID0gdXNlQ29udHJvbGxhYmxlU3RhdGUoZG9jUGVybWlzc2lvbnNGcm9tUHJvcHMpXG5cbiAgY29uc3QgW2hhc1NhdmVQZXJtaXNzaW9uLCBzZXRIYXNTYXZlUGVybWlzc2lvbl0gPSB1c2VDb250cm9sbGFibGVTdGF0ZShoYXNTYXZlUGVybWlzc2lvbkZyb21Qcm9wcylcblxuICBjb25zdCBbaGFzUHVibGlzaFBlcm1pc3Npb24sIHNldEhhc1B1Ymxpc2hQZXJtaXNzaW9uXSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKFxuICAgIGhhc1B1Ymxpc2hQZXJtaXNzaW9uRnJvbVByb3BzLFxuICApXG5cbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG5cbiAgY29uc3Qge1xuICAgIGNvbmZpZzoge1xuICAgICAgYWRtaW46IHsgZGF0ZUZvcm1hdCB9LFxuICAgICAgY29sbGVjdGlvbnMsXG4gICAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgfSxcbiAgICBnZXRFbnRpdHlDb25maWcsXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBnbG9iYWxTbHVnIH0pXG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGxvY2tlZC1kb2N1bWVudHMgY29sbGVjdGlvbiBleGlzdHMgaW4gdGhlIGNvbmZpZ1xuICBjb25zdCBoYXNMb2NrZWREb2N1bWVudHNDb2xsZWN0aW9uID0gY29sbGVjdGlvbnMuc29tZShcbiAgICAoY29sbGVjdGlvbikgPT4gY29sbGVjdGlvbi5zbHVnID09PSAncGF5bG9hZC1sb2NrZWQtZG9jdW1lbnRzJyxcbiAgKVxuXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlclJlZiA9IHVzZVJlZihuZXcgQWJvcnRDb250cm9sbGVyKCkpXG4gIGNvbnN0IGRvY0NvbmZpZyA9IGNvbGxlY3Rpb25Db25maWcgfHwgZ2xvYmFsQ29uZmlnXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgeyB1cGxvYWRFZGl0cyB9ID0gdXNlVXBsb2FkRWRpdHMoKVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIHN0YXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiB2NC5cbiAgICogVGhpcyBpcyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVXNlIHRoZSBgRG9jdW1lbnRUaXRsZUNvbnRleHRgIGluc3RlYWQuXG4gICAqL1xuICBjb25zdCBbdGl0bGUsIHNldERvY3VtZW50VGl0bGVdID0gdXNlU3RhdGUoKCkgPT5cbiAgICBmb3JtYXREb2NUaXRsZSh7XG4gICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgZGF0YTogeyAuLi4oaW5pdGlhbERhdGEgfHwge30pLCBpZCB9LFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgIGZhbGxiYWNrOiBpZD8udG9TdHJpbmcoKSxcbiAgICAgIGdsb2JhbENvbmZpZyxcbiAgICAgIGkxOG4sXG4gICAgfSksXG4gIClcblxuICBjb25zdCBbbW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZCwgc2V0TW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZF0gPSB1c2VTdGF0ZShcbiAgICBtb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkRnJvbVByb3BzLFxuICApXG5cbiAgY29uc3QgW3ZlcnNpb25Db3VudCwgc2V0VmVyc2lvbkNvdW50XSA9IHVzZVN0YXRlKHZlcnNpb25Db3VudEZyb21Qcm9wcylcblxuICBjb25zdCBbaGFzUHVibGlzaGVkRG9jLCBzZXRIYXNQdWJsaXNoZWREb2NdID0gdXNlU3RhdGUoaGFzUHVibGlzaGVkRG9jRnJvbVByb3BzKVxuXG4gIGNvbnN0IFt1bnB1Ymxpc2hlZFZlcnNpb25Db3VudCwgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnRdID0gdXNlU3RhdGUoXG4gICAgdW5wdWJsaXNoZWRWZXJzaW9uQ291bnRGcm9tUHJvcHMsXG4gIClcblxuICBjb25zdCBbZG9jdW1lbnRJc0xvY2tlZCwgc2V0RG9jdW1lbnRJc0xvY2tlZF0gPSB1c2VDb250cm9sbGFibGVTdGF0ZTxib29sZWFuIHwgdW5kZWZpbmVkPihcbiAgICBpc0xvY2tlZEZyb21Qcm9wcyxcbiAgKVxuXG4gIGNvbnN0IFtjdXJyZW50RWRpdG9yLCBzZXRDdXJyZW50RWRpdG9yXSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlPENsaWVudFVzZXIgfCBudWxsPihcbiAgICBjdXJyZW50RWRpdG9yRnJvbVByb3BzLFxuICApXG4gIGNvbnN0IFtsYXN0VXBkYXRlVGltZSwgc2V0TGFzdFVwZGF0ZVRpbWVdID0gdXNlQ29udHJvbGxhYmxlU3RhdGU8bnVtYmVyPihsYXN0VXBkYXRlVGltZUZyb21Qcm9wcylcblxuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSB1c2VDb250cm9sbGFibGVTdGF0ZShpbml0aWFsRGF0YSlcblxuICBjb25zdCBbdXBsb2FkU3RhdHVzLCBzZXRVcGxvYWRTdGF0dXNdID0gdXNlQ29udHJvbGxhYmxlU3RhdGU8J2ZhaWxlZCcgfCAnaWRsZScgfCAndXBsb2FkaW5nJz4oXG4gICAgJ2lkbGUnLFxuICApXG5cbiAgY29uc3QgZG9jdW1lbnRMb2NrU3RhdGUgPSB1c2VSZWY8e1xuICAgIGhhc1Nob3duTG9ja2VkTW9kYWw6IGJvb2xlYW5cbiAgICBpc0xvY2tlZDogYm9vbGVhblxuICAgIHVzZXI6IENsaWVudFVzZXIgfCBudW1iZXIgfCBzdHJpbmdcbiAgfSB8IG51bGw+KHtcbiAgICBoYXNTaG93bkxvY2tlZE1vZGFsOiBmYWxzZSxcbiAgICBpc0xvY2tlZDogZmFsc2UsXG4gICAgdXNlcjogbnVsbCxcbiAgfSlcblxuICBjb25zdCB1cGRhdGVVcGxvYWRTdGF0dXMgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhdHVzOiAnZmFpbGVkJyB8ICdpZGxlJyB8ICd1cGxvYWRpbmcnKSA9PiB7XG4gICAgICBzZXRVcGxvYWRTdGF0dXMoc3RhdHVzKVxuICAgIH0sXG4gICAgW3NldFVwbG9hZFN0YXR1c10sXG4gIClcblxuICBjb25zdCB7IGdldFByZWZlcmVuY2UsIHNldFByZWZlcmVuY2UgfSA9IHVzZVByZWZlcmVuY2VzKClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgbG9jYWxlSXNMb2FkaW5nIH0gPSB1c2VMb2NhbGVMb2FkaW5nKClcblxuICBjb25zdCBpc0luaXRpYWxpemluZyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQgfHwgaW5pdGlhbERhdGEgPT09IHVuZGVmaW5lZCB8fCBsb2NhbGVJc0xvYWRpbmcsXG4gICAgW2luaXRpYWxEYXRhLCBpbml0aWFsU3RhdGUsIGxvY2FsZUlzTG9hZGluZ10sXG4gIClcblxuICBjb25zdCBiYXNlQVBJUGF0aCA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICBhcGlSb3V0ZTogYXBpLFxuICAgIHBhdGg6ICcnLFxuICB9KVxuXG4gIGxldCBzbHVnOiBzdHJpbmdcbiAgbGV0IHBsdXJhbFR5cGU6ICdjb2xsZWN0aW9ucycgfCAnZ2xvYmFscydcbiAgbGV0IHByZWZlcmVuY2VzS2V5OiBzdHJpbmdcblxuICBpZiAoZ2xvYmFsU2x1Zykge1xuICAgIHNsdWcgPSBnbG9iYWxTbHVnXG4gICAgcGx1cmFsVHlwZSA9ICdnbG9iYWxzJ1xuICAgIHByZWZlcmVuY2VzS2V5ID0gYGdsb2JhbC0ke3NsdWd9YFxuICB9XG5cbiAgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgc2x1ZyA9IGNvbGxlY3Rpb25TbHVnXG4gICAgcGx1cmFsVHlwZSA9ICdjb2xsZWN0aW9ucydcblxuICAgIGlmIChpZCkge1xuICAgICAgcHJlZmVyZW5jZXNLZXkgPSBgY29sbGVjdGlvbi0ke3NsdWd9LSR7aWR9YFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVubG9ja0RvY3VtZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGRvY0lEOiBudW1iZXIgfCBzdHJpbmcsIHNsdWc6IHN0cmluZykgPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxvY2tlZC1kb2N1bWVudHMgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIG1ha2luZyBBUEkgY2FsbHNcbiAgICAgIGlmICghaGFzTG9ja2VkRG9jdW1lbnRzQ29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNHbG9iYWwgPSBzbHVnID09PSBnbG9iYWxTbHVnXG5cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlcXVlc3RzLmdldChgJHtiYXNlQVBJUGF0aH0vcGF5bG9hZC1sb2NrZWQtZG9jdW1lbnRzYCwge1xuICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgcGFyYW1zOiBpc0dsb2JhbFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgJ3doZXJlW2dsb2JhbFNsdWddW2VxdWFsc10nOiBzbHVnLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAnd2hlcmVbZG9jdW1lbnQucmVsYXRpb25Ub11bZXF1YWxzXSc6IHNsdWcsXG4gICAgICAgICAgICAgICAgJ3doZXJlW2RvY3VtZW50LnZhbHVlXVtlcXVhbHNdJzogZG9jSUQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgeyBkb2NzIH0gPSBhd2FpdCByZXF1ZXN0Lmpzb24oKVxuXG4gICAgICAgIGlmIChkb2NzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbG9ja0lEID0gZG9jc1swXS5pZFxuICAgICAgICAgIGF3YWl0IHJlcXVlc3RzLmRlbGV0ZShgJHtiYXNlQVBJUGF0aH0vcGF5bG9hZC1sb2NrZWQtZG9jdW1lbnRzLyR7bG9ja0lEfWAsIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0RG9jdW1lbnRJc0xvY2tlZChmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVubG9jayB0aGUgZG9jdW1lbnQnLCBlcnJvcilcbiAgICAgIH1cbiAgICB9LFxuICAgIFtiYXNlQVBJUGF0aCwgZ2xvYmFsU2x1Zywgc2V0RG9jdW1lbnRJc0xvY2tlZCwgaGFzTG9ja2VkRG9jdW1lbnRzQ29sbGVjdGlvbl0sXG4gIClcblxuICBjb25zdCB1cGRhdGVEb2N1bWVudEVkaXRvciA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChkb2NJRDogbnVtYmVyIHwgc3RyaW5nLCBzbHVnOiBzdHJpbmcsIHVzZXI6IENsaWVudFVzZXIgfCBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBsb2NrZWQtZG9jdW1lbnRzIGNvbGxlY3Rpb24gZXhpc3RzIGJlZm9yZSBtYWtpbmcgQVBJIGNhbGxzXG4gICAgICBpZiAoIWhhc0xvY2tlZERvY3VtZW50c0NvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzR2xvYmFsID0gc2x1ZyA9PT0gZ2xvYmFsU2x1Z1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBkb2N1bWVudCBpcyBhbHJlYWR5IGxvY2tlZFxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVxdWVzdHMuZ2V0KGAke2Jhc2VBUElQYXRofS9wYXlsb2FkLWxvY2tlZC1kb2N1bWVudHNgLCB7XG4gICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICBwYXJhbXM6IGlzR2xvYmFsXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAnd2hlcmVbZ2xvYmFsU2x1Z11bZXF1YWxzXSc6IHNsdWcsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICd3aGVyZVtkb2N1bWVudC5yZWxhdGlvblRvXVtlcXVhbHNdJzogc2x1ZyxcbiAgICAgICAgICAgICAgICAnd2hlcmVbZG9jdW1lbnQudmFsdWVdW2VxdWFsc10nOiBkb2NJRCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB7IGRvY3MgfSA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG5cbiAgICAgICAgaWYgKGRvY3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBsb2NrSUQgPSBkb2NzWzBdLmlkXG5cbiAgICAgICAgICBjb25zdCB1c2VyRGF0YSA9XG4gICAgICAgICAgICB0eXBlb2YgdXNlciA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyB7IHJlbGF0aW9uVG86IHVzZXIuY29sbGVjdGlvbiwgdmFsdWU6IHVzZXIuaWQgfVxuICAgICAgICAgICAgICA6IHsgcmVsYXRpb25UbzogJ3VzZXJzJywgdmFsdWU6IHVzZXIgfVxuXG4gICAgICAgICAgLy8gU2VuZCBhIHBhdGNoIHJlcXVlc3QgdG8gdXBkYXRlIHRoZSBfbGFzdEVkaXRlZCBpbmZvXG4gICAgICAgICAgYXdhaXQgcmVxdWVzdHMucGF0Y2goYCR7YmFzZUFQSVBhdGh9L3BheWxvYWQtbG9ja2VkLWRvY3VtZW50cy8ke2xvY2tJRH1gLCB7XG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHVzZXI6IHVzZXJEYXRhLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHRoZSBkb2N1bWVudCBlZGl0b3InLCBlcnJvcilcbiAgICAgIH1cbiAgICB9LFxuICAgIFtiYXNlQVBJUGF0aCwgZ2xvYmFsU2x1ZywgaGFzTG9ja2VkRG9jdW1lbnRzQ29sbGVjdGlvbl0sXG4gIClcblxuICBjb25zdCBnZXREb2NQZXJtaXNzaW9ucyA9IHVzZUdldERvY1Blcm1pc3Npb25zKHtcbiAgICBpZDogaWQgYXMgc3RyaW5nLFxuICAgIGFwaSxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBnbG9iYWxTbHVnLFxuICAgIGkxOG4sXG4gICAgbG9jYWxlLFxuICAgIHBlcm1pc3Npb25zLFxuICAgIHNldERvY1Blcm1pc3Npb25zLFxuICAgIHNldEhhc1B1Ymxpc2hQZXJtaXNzaW9uLFxuICAgIHNldEhhc1NhdmVQZXJtaXNzaW9uLFxuICB9KVxuXG4gIGNvbnN0IGdldERvY1ByZWZlcmVuY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJldHVybiBnZXRQcmVmZXJlbmNlPERvY3VtZW50UHJlZmVyZW5jZXM+KHByZWZlcmVuY2VzS2V5KVxuICB9LCBbZ2V0UHJlZmVyZW5jZSwgcHJlZmVyZW5jZXNLZXldKVxuXG4gIGNvbnN0IHNldERvY0ZpZWxkUHJlZmVyZW5jZXMgPSB1c2VDYWxsYmFjazxEb2N1bWVudEluZm9Db250ZXh0WydzZXREb2NGaWVsZFByZWZlcmVuY2VzJ10+KFxuICAgIGFzeW5jIChwYXRoLCBmaWVsZFByZWZlcmVuY2VzKSA9PiB7XG4gICAgICBjb25zdCBhbGxQcmVmZXJlbmNlcyA9IGF3YWl0IGdldERvY1ByZWZlcmVuY2VzKClcblxuICAgICAgaWYgKHByZWZlcmVuY2VzS2V5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2V0UHJlZmVyZW5jZShwcmVmZXJlbmNlc0tleSwge1xuICAgICAgICAgICAgLi4uYWxsUHJlZmVyZW5jZXMsXG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgLi4uKGFsbFByZWZlcmVuY2VzPy5maWVsZHMgfHwge30pLFxuICAgICAgICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICAgICAgICAuLi5hbGxQcmVmZXJlbmNlcz8uZmllbGRzPy5bcGF0aF0sXG4gICAgICAgICAgICAgICAgLi4uZmllbGRQcmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRQcmVmZXJlbmNlLCBwcmVmZXJlbmNlc0tleSwgZ2V0RG9jUHJlZmVyZW5jZXNdLFxuICApXG5cbiAgY29uc3QgaW5jcmVtZW50VmVyc2lvbkNvdW50ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5ld0NvdW50ID0gdmVyc2lvbkNvdW50ICsgMVxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnICYmIGNvbGxlY3Rpb25Db25maWcudmVyc2lvbnMpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLnZlcnNpb25zLm1heFBlckRvYyA+IDApIHtcbiAgICAgICAgc2V0VmVyc2lvbkNvdW50KE1hdGgubWluKG5ld0NvdW50LCBjb2xsZWN0aW9uQ29uZmlnLnZlcnNpb25zLm1heFBlckRvYykpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWZXJzaW9uQ291bnQobmV3Q291bnQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChnbG9iYWxDb25maWcgJiYgZ2xvYmFsQ29uZmlnLnZlcnNpb25zKSB7XG4gICAgICBpZiAoZ2xvYmFsQ29uZmlnLnZlcnNpb25zLm1heCA+IDApIHtcbiAgICAgICAgc2V0VmVyc2lvbkNvdW50KE1hdGgubWluKG5ld0NvdW50LCBnbG9iYWxDb25maWcudmVyc2lvbnMubWF4KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZlcnNpb25Db3VudChuZXdDb3VudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtjb2xsZWN0aW9uQ29uZmlnLCBnbG9iYWxDb25maWcsIHZlcnNpb25Db3VudF0pXG5cbiAgLyoqXG4gICAqIEB0b2RvOiBSZW1vdmUgdGhpcyBpbiB2NFxuICAgKiBVc2VycyBzaG91bGQgdXNlIHRoZSBgRG9jdW1lbnRUaXRsZUNvbnRleHRgIGluc3RlYWQuXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldERvY3VtZW50VGl0bGUoXG4gICAgICBmb3JtYXREb2NUaXRsZSh7XG4gICAgICAgIGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgIGRhdGE6IHsgLi4uZGF0YSwgaWQgfSxcbiAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgZmFsbGJhY2s6IGlkPy50b1N0cmluZygpLFxuICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgIGkxOG4sXG4gICAgICB9KSxcbiAgICApXG4gIH0sIFtjb2xsZWN0aW9uQ29uZmlnLCBnbG9iYWxDb25maWcsIGRhdGEsIGRhdGVGb3JtYXQsIGkxOG4sIGlkXSlcblxuICAvLyBjbGVhbiBvbiB1bm1vdW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmUxID0gYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnRcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmUxKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmUxLmFib3J0KClcbiAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgIC8vIHN3YWxsb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkb2NQYXRoID0gYCR7cGx1cmFsVHlwZSA9PT0gJ2dsb2JhbHMnID8gYC9nbG9iYWxzYCA6ICcnfS8ke3NsdWd9JHtpZCA/IGAvJHtpZH1gIDogJyd9YFxuXG4gICAgcmV0dXJuIGAke2Jhc2VBUElQYXRofSR7ZG9jUGF0aH0ke3FzLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICdmYWxsYmFjay1sb2NhbGUnOiAnbnVsbCcsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdXBsb2FkRWRpdHM6IHVwbG9hZEVkaXRzIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFkZFF1ZXJ5UHJlZml4OiB0cnVlLFxuICAgICAgfSxcbiAgICApfWBcbiAgfSwgW2Jhc2VBUElQYXRoLCBsb2NhbGUsIHBsdXJhbFR5cGUsIGlkLCBzbHVnLCB1cGxvYWRFZGl0c10pXG5cbiAgY29uc3QgdmFsdWU6IERvY3VtZW50SW5mb0NvbnRleHQgPSB7XG4gICAgLi4ucHJvcHMsXG4gICAgYWN0aW9uLFxuICAgIGN1cnJlbnRFZGl0b3IsXG4gICAgZGF0YSxcbiAgICBkb2NDb25maWcsXG4gICAgZG9jUGVybWlzc2lvbnMsXG4gICAgZG9jdW1lbnRJc0xvY2tlZCxcbiAgICBkb2N1bWVudExvY2tTdGF0ZSxcbiAgICBnZXREb2NQZXJtaXNzaW9ucyxcbiAgICBnZXREb2NQcmVmZXJlbmNlcyxcbiAgICBoYXNQdWJsaXNoZWREb2MsXG4gICAgaGFzUHVibGlzaFBlcm1pc3Npb24sXG4gICAgaGFzU2F2ZVBlcm1pc3Npb24sXG4gICAgaW5jcmVtZW50VmVyc2lvbkNvdW50LFxuICAgIGluaXRpYWxEYXRhLFxuICAgIGluaXRpYWxTdGF0ZSxcbiAgICBpc0luaXRpYWxpemluZyxcbiAgICBsYXN0VXBkYXRlVGltZSxcbiAgICBtb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkLFxuICAgIHByZWZlcmVuY2VzS2V5LFxuICAgIHNhdmVkRG9jdW1lbnREYXRhOiBkYXRhLFxuICAgIHNldEN1cnJlbnRFZGl0b3IsXG4gICAgc2V0RGF0YSxcbiAgICBzZXREb2NGaWVsZFByZWZlcmVuY2VzLFxuICAgIHNldERvY3VtZW50SXNMb2NrZWQsXG4gICAgc2V0RG9jdW1lbnRUaXRsZSxcbiAgICBzZXRIYXNQdWJsaXNoZWREb2MsXG4gICAgc2V0TGFzdFVwZGF0ZVRpbWUsXG4gICAgc2V0TW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZCxcbiAgICBzZXRVbnB1Ymxpc2hlZFZlcnNpb25Db3VudCxcbiAgICBzZXRVcGxvYWRTdGF0dXM6IHVwZGF0ZVVwbG9hZFN0YXR1cyxcbiAgICB0aXRsZSxcbiAgICB1bmxvY2tEb2N1bWVudCxcbiAgICB1bnB1Ymxpc2hlZFZlcnNpb25Db3VudCxcbiAgICB1cGRhdGVEb2N1bWVudEVkaXRvcixcbiAgICB1cGRhdGVTYXZlZERvY3VtZW50RGF0YTogc2V0RGF0YSxcbiAgICB1cGxvYWRTdGF0dXMsXG4gICAgdmVyc2lvbkNvdW50LFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dCB2YWx1ZT17dmFsdWV9PlxuICAgICAgPERvY3VtZW50VGl0bGVQcm92aWRlcj57Y2hpbGRyZW59PC9Eb2N1bWVudFRpdGxlUHJvdmlkZXI+XG4gICAgPC9Db250ZXh0PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBEb2N1bWVudEluZm9Qcm92aWRlcjogUmVhY3QuRkM8XG4gIHtcbiAgICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIH0gJiBEb2N1bWVudEluZm9Qcm9wc1xuPiA9IChwcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxVcGxvYWRFZGl0c1Byb3ZpZGVyPlxuICAgICAgPERvY3VtZW50SW5mbyB7Li4ucHJvcHN9IC8+XG4gICAgPC9VcGxvYWRFZGl0c1Byb3ZpZGVyPlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IEkxOG4gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgdHlwZSB7XG4gIENsaWVudENvbGxlY3Rpb25Db25maWcsXG4gIENsaWVudEdsb2JhbENvbmZpZyxcbiAgU2FuaXRpemVkQ29uZmlnLFxuICBUeXBlV2l0aElELFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcblxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4vZm9ybWF0RGF0ZVRpdGxlLmpzJ1xuaW1wb3J0IHsgZm9ybWF0TGV4aWNhbERvY1RpdGxlLCBpc1NlcmlhbGl6ZWRMZXhpY2FsRWRpdG9yIH0gZnJvbSAnLi9mb3JtYXRMZXhpY2FsRG9jVGl0bGUuanMnXG5pbXBvcnQgeyBmb3JtYXRSZWxhdGlvbnNoaXBUaXRsZSB9IGZyb20gJy4vZm9ybWF0UmVsYXRpb25zaGlwVGl0bGUuanMnXG5cbmV4cG9ydCBjb25zdCBmb3JtYXREb2NUaXRsZSA9ICh7XG4gIGNvbGxlY3Rpb25Db25maWcsXG4gIGRhdGEsXG4gIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRGcm9tQ29uZmlnLFxuICBmYWxsYmFjayxcbiAgZ2xvYmFsQ29uZmlnLFxuICBpMThuLFxufToge1xuICBjb2xsZWN0aW9uQ29uZmlnPzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICBkYXRhOiBUeXBlV2l0aElEXG4gIGRhdGVGb3JtYXQ6IFNhbml0aXplZENvbmZpZ1snYWRtaW4nXVsnZGF0ZUZvcm1hdCddXG4gIGZhbGxiYWNrPzogb2JqZWN0IHwgc3RyaW5nXG4gIGdsb2JhbENvbmZpZz86IENsaWVudEdsb2JhbENvbmZpZ1xuICBpMThuOiBJMThuPGFueSwgYW55PlxufSk6IHN0cmluZyA9PiB7XG4gIGxldCB0aXRsZTogc3RyaW5nXG5cbiAgaWYgKGNvbGxlY3Rpb25Db25maWcpIHtcbiAgICBjb25zdCB1c2VBc1RpdGxlID0gY29sbGVjdGlvbkNvbmZpZz8uYWRtaW4/LnVzZUFzVGl0bGVcblxuICAgIGlmICh1c2VBc1RpdGxlKSB7XG4gICAgICB0aXRsZSA9IGRhdGE/Llt1c2VBc1RpdGxlXSBhcyBzdHJpbmdcblxuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gY29sbGVjdGlvbkNvbmZpZy5maWVsZHMuZmluZChcbiAgICAgICAgICAoZikgPT4gJ25hbWUnIGluIGYgJiYgZi5uYW1lID09PSB1c2VBc1RpdGxlLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgaXNEYXRlID0gZmllbGRDb25maWc/LnR5cGUgPT09ICdkYXRlJ1xuICAgICAgICBjb25zdCBpc1JlbGF0aW9uc2hpcCA9IGZpZWxkQ29uZmlnPy50eXBlID09PSAncmVsYXRpb25zaGlwJ1xuXG4gICAgICAgIGlmIChpc0RhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID1cbiAgICAgICAgICAgICgnZGF0ZScgaW4gZmllbGRDb25maWcuYWRtaW4gJiYgZmllbGRDb25maWc/LmFkbWluPy5kYXRlPy5kaXNwbGF5Rm9ybWF0KSB8fFxuICAgICAgICAgICAgZGF0ZUZvcm1hdEZyb21Db25maWdcblxuICAgICAgICAgIHRpdGxlID0gZm9ybWF0RGF0ZSh7IGRhdGU6IHRpdGxlLCBpMThuLCBwYXR0ZXJuOiBkYXRlRm9ybWF0IH0pIHx8IHRpdGxlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNSZWxhdGlvbnNoaXApIHtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRSZWxhdGlvbnNoaXBUaXRsZSA9IGZvcm1hdFJlbGF0aW9uc2hpcFRpdGxlKGRhdGFbdXNlQXNUaXRsZV0pXG4gICAgICAgICAgdGl0bGUgPSBmb3JtYXR0ZWRSZWxhdGlvbnNoaXBUaXRsZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGdsb2JhbENvbmZpZykge1xuICAgIHRpdGxlID0gZ2V0VHJhbnNsYXRpb24oZ2xvYmFsQ29uZmlnPy5sYWJlbCwgaTE4bikgfHwgZ2xvYmFsQ29uZmlnPy5zbHVnXG4gIH1cblxuICAvLyByaWNodGV4dCBsZXhpY2FsIGNhc2UuIFdlIGNvbnZlcnQgdGhlIGZpcnN0IGNoaWxkIG9mIHJvb3QgdG8gcGxhaW4gdGV4dFxuICBpZiAodGl0bGUgJiYgaXNTZXJpYWxpemVkTGV4aWNhbEVkaXRvcih0aXRsZSkpIHtcbiAgICB0aXRsZSA9IGZvcm1hdExleGljYWxEb2NUaXRsZSh0aXRsZS5yb290LmNoaWxkcmVuPy5bMF0/LmNoaWxkcmVuIHx8IFtdLCAnJylcbiAgfVxuXG4gIGlmICghdGl0bGUgJiYgaXNTZXJpYWxpemVkTGV4aWNhbEVkaXRvcihmYWxsYmFjaykpIHtcbiAgICB0aXRsZSA9IGZvcm1hdExleGljYWxEb2NUaXRsZShmYWxsYmFjay5yb290LmNoaWxkcmVuPy5bMF0/LmNoaWxkcmVuIHx8IFtdLCAnJylcbiAgfVxuXG4gIGlmICghdGl0bGUpIHtcbiAgICB0aXRsZSA9IHR5cGVvZiBmYWxsYmFjayA9PT0gJ3N0cmluZycgPyBmYWxsYmFjayA6IGBbJHtpMThuLnQoJ2dlbmVyYWw6dW50aXRsZWQnKX1dYFxuICB9XG5cbiAgcmV0dXJuIHRpdGxlXG59XG4iLCJjb25zdCBvZmZzZXRGb3JtYXRDYWNoZSA9IHt9O1xuY29uc3Qgb2Zmc2V0Q2FjaGUgPSB7fTtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gZXh0cmFjdHMgVVRDIG9mZnNldCBpbiBtaW51dGVzIGZyb20gdGhlIGdpdmVuIGRhdGUgaW4gc3BlY2lmaWVkXG4gKiB0aW1lIHpvbmUuXG4gKlxuICogVW5saWtlIGBEYXRlLnByb3RvdHlwZS5nZXRUaW1lem9uZU9mZnNldGAsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWVcbiAqIG1pcnJvcmVkIHRvIHRoZSBzaWduIG9mIHRoZSBvZmZzZXQgaW4gdGhlIHRpbWUgem9uZS4gRm9yIEFzaWEvU2luZ2Fwb3JlXG4gKiAoVVRDKzgpLCBgdHpPZmZzZXRgIHJldHVybnMgNDgwLCB3aGlsZSBgZ2V0VGltZXpvbmVPZmZzZXRgIHJldHVybnMgLTQ4MC5cbiAqXG4gKiBAcGFyYW0gdGltZVpvbmUgLSBUaW1lIHpvbmUgbmFtZSAoSUFOQSBvciBVVEMgb2Zmc2V0KVxuICogQHBhcmFtIGRhdGUgLSBEYXRlIHRvIGNoZWNrIHRoZSBvZmZzZXQgZm9yXG4gKlxuICogQHJldHVybnMgVVRDIG9mZnNldCBpbiBtaW51dGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ek9mZnNldCh0aW1lWm9uZSwgZGF0ZSkge1xuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdCA9IG9mZnNldEZvcm1hdENhY2hlW3RpbWVab25lXSB8fD0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1HQlwiLCB7XG4gICAgICB0aW1lWm9uZSxcbiAgICAgIGhvdXI6IFwibnVtZXJpY1wiLFxuICAgICAgdGltZVpvbmVOYW1lOiBcImxvbmdPZmZzZXRcIlxuICAgIH0pLmZvcm1hdDtcbiAgICBjb25zdCBvZmZzZXRTdHIgPSBmb3JtYXQoZGF0ZSkuc3BsaXQoJ0dNVCcpWzFdIHx8ICcnO1xuICAgIGlmIChvZmZzZXRTdHIgaW4gb2Zmc2V0Q2FjaGUpIHJldHVybiBvZmZzZXRDYWNoZVtvZmZzZXRTdHJdO1xuICAgIHJldHVybiBjYWxjT2Zmc2V0KG9mZnNldFN0ciwgb2Zmc2V0U3RyLnNwbGl0KFwiOlwiKSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZhbGxiYWNrIHRvIG1hbnVhbCBwYXJzaW5nIGlmIHRoZSBydW50aW1lIGRvZXNuJ3Qgc3VwcG9ydCDCsUhIOk1NL8KxSEhNTS/CsUhIXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzUzNDE5XG4gICAgaWYgKHRpbWVab25lIGluIG9mZnNldENhY2hlKSByZXR1cm4gb2Zmc2V0Q2FjaGVbdGltZVpvbmVdO1xuICAgIGNvbnN0IGNhcHR1cmVzID0gdGltZVpvbmU/Lm1hdGNoKG9mZnNldFJlKTtcbiAgICBpZiAoY2FwdHVyZXMpIHJldHVybiBjYWxjT2Zmc2V0KHRpbWVab25lLCBjYXB0dXJlcy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxufVxuY29uc3Qgb2Zmc2V0UmUgPSAvKFsrLV1cXGRcXGQpOj8oXFxkXFxkKT8vO1xuZnVuY3Rpb24gY2FsY09mZnNldChjYWNoZVN0ciwgdmFsdWVzKSB7XG4gIGNvbnN0IGhvdXJzID0gK3ZhbHVlc1swXTtcbiAgY29uc3QgbWludXRlcyA9ICsodmFsdWVzWzFdIHx8IDApO1xuICByZXR1cm4gb2Zmc2V0Q2FjaGVbY2FjaGVTdHJdID0gaG91cnMgPiAwID8gaG91cnMgKiA2MCArIG1pbnV0ZXMgOiBob3VycyAqIDYwIC0gbWludXRlcztcbn0iLCJpbXBvcnQgeyB0ek9mZnNldCB9IGZyb20gXCIuLi90ek9mZnNldC9pbmRleC5qc1wiO1xuZXhwb3J0IGNsYXNzIFRaRGF0ZU1pbmkgZXh0ZW5kcyBEYXRlIHtcbiAgLy8jcmVnaW9uIHN0YXRpY1xuXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy50aW1lWm9uZSA9IGFyZ3MucG9wKCk7XG4gICAgfVxuICAgIHRoaXMuaW50ZXJuYWwgPSBuZXcgRGF0ZSgpO1xuICAgIGlmIChpc05hTih0ek9mZnNldCh0aGlzLnRpbWVab25lLCB0aGlzKSkpIHtcbiAgICAgIHRoaXMuc2V0VGltZShOYU4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZShEYXRlLm5vdygpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09IFwibnVtYmVyXCIgJiYgKGFyZ3MubGVuZ3RoID09PSAxIHx8IGFyZ3MubGVuZ3RoID09PSAyICYmIHR5cGVvZiBhcmdzWzFdICE9PSBcIm51bWJlclwiKSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoYXJnc1swXSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSgrbmV3IERhdGUoYXJnc1swXSkpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzWzBdIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoK2FyZ3NbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKCtuZXcgRGF0ZSguLi5hcmdzKSk7XG4gICAgICAgIGFkanVzdFRvU3lzdGVtVFoodGhpcywgTmFOKTtcbiAgICAgICAgc3luY1RvSW50ZXJuYWwodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHN0YXRpYyB0eih0eiwgLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLmxlbmd0aCA/IG5ldyBUWkRhdGVNaW5pKC4uLmFyZ3MsIHR6KSA6IG5ldyBUWkRhdGVNaW5pKERhdGUubm93KCksIHR6KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiB0aW1lIHpvbmVcblxuICB3aXRoVGltZVpvbmUodGltZVpvbmUpIHtcbiAgICByZXR1cm4gbmV3IFRaRGF0ZU1pbmkoK3RoaXMsIHRpbWVab25lKTtcbiAgfVxuICBnZXRUaW1lem9uZU9mZnNldCgpIHtcbiAgICByZXR1cm4gLXR6T2Zmc2V0KHRoaXMudGltZVpvbmUsIHRoaXMpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIHRpbWVcblxuICBzZXRUaW1lKHRpbWUpIHtcbiAgICBEYXRlLnByb3RvdHlwZS5zZXRUaW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgc3luY1RvSW50ZXJuYWwodGhpcyk7XG4gICAgcmV0dXJuICt0aGlzO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIGRhdGUtZm5zIGludGVncmF0aW9uXG5cbiAgW1N5bWJvbC5mb3IoXCJjb25zdHJ1Y3REYXRlRnJvbVwiKV0oZGF0ZSkge1xuICAgIHJldHVybiBuZXcgVFpEYXRlTWluaSgrbmV3IERhdGUoZGF0ZSksIHRoaXMudGltZVpvbmUpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cbi8vIEFzc2lnbiBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG5jb25zdCByZSA9IC9eKGdldHxzZXQpKD8hVVRDKS87XG5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhEYXRlLnByb3RvdHlwZSkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBpZiAoIXJlLnRlc3QobWV0aG9kKSkgcmV0dXJuO1xuICBjb25zdCB1dGNNZXRob2QgPSBtZXRob2QucmVwbGFjZShyZSwgXCIkMVVUQ1wiKTtcbiAgLy8gRmlsdGVyIG91dCBtZXRob2RzIHdpdGhvdXQgVVRDIGNvdW50ZXJwYXJ0c1xuICBpZiAoIVRaRGF0ZU1pbmkucHJvdG90eXBlW3V0Y01ldGhvZF0pIHJldHVybjtcbiAgaWYgKG1ldGhvZC5zdGFydHNXaXRoKFwiZ2V0XCIpKSB7XG4gICAgLy8gRGVsZWdhdGUgdG8gaW50ZXJuYWwgZGF0ZSdzIFVUQyBtZXRob2RcbiAgICBUWkRhdGVNaW5pLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxbdXRjTWV0aG9kXSgpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQXNzaWduIHJlZ3VsYXIgc2V0dGVyXG4gICAgVFpEYXRlTWluaS5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIERhdGUucHJvdG90eXBlW3V0Y01ldGhvZF0uYXBwbHkodGhpcy5pbnRlcm5hbCwgYXJndW1lbnRzKTtcbiAgICAgIHN5bmNGcm9tSW50ZXJuYWwodGhpcyk7XG4gICAgICByZXR1cm4gK3RoaXM7XG4gICAgfTtcblxuICAgIC8vIEFzc2lnbiBVVEMgc2V0dGVyXG4gICAgVFpEYXRlTWluaS5wcm90b3R5cGVbdXRjTWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIERhdGUucHJvdG90eXBlW3V0Y01ldGhvZF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHN5bmNUb0ludGVybmFsKHRoaXMpO1xuICAgICAgcmV0dXJuICt0aGlzO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHN5bmNzIHRpbWUgdG8gaW50ZXJuYWwgZGF0ZSwgYXBwbHlpbmcgdGhlIHRpbWUgem9uZSBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZSB0byBzeW5jXG4gKi9cbmZ1bmN0aW9uIHN5bmNUb0ludGVybmFsKGRhdGUpIHtcbiAgZGF0ZS5pbnRlcm5hbC5zZXRUaW1lKCtkYXRlKTtcbiAgZGF0ZS5pbnRlcm5hbC5zZXRVVENNaW51dGVzKGRhdGUuaW50ZXJuYWwuZ2V0VVRDTWludXRlcygpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBzeW5jcyB0aGUgaW50ZXJuYWwgZGF0ZSBVVEMgdmFsdWVzIHRvIHRoZSBkYXRlLiBJdCBhbGxvd3MgdG8gZ2V0XG4gKiBhY2N1cmF0ZSB0aW1lc3RhbXAgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gVGhlIGRhdGUgdG8gc3luY1xuICovXG5mdW5jdGlvbiBzeW5jRnJvbUludGVybmFsKGRhdGUpIHtcbiAgLy8gRmlyc3Qgd2UgdHJhbnNwb3NlIHRoZSBpbnRlcm5hbCB2YWx1ZXNcbiAgRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXIuY2FsbChkYXRlLCBkYXRlLmludGVybmFsLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuaW50ZXJuYWwuZ2V0VVRDTW9udGgoKSwgZGF0ZS5pbnRlcm5hbC5nZXRVVENEYXRlKCkpO1xuICBEYXRlLnByb3RvdHlwZS5zZXRIb3Vycy5jYWxsKGRhdGUsIGRhdGUuaW50ZXJuYWwuZ2V0VVRDSG91cnMoKSwgZGF0ZS5pbnRlcm5hbC5nZXRVVENNaW51dGVzKCksIGRhdGUuaW50ZXJuYWwuZ2V0VVRDU2Vjb25kcygpLCBkYXRlLmludGVybmFsLmdldFVUQ01pbGxpc2Vjb25kcygpKTtcblxuICAvLyBOb3cgd2UgaGF2ZSB0byBhZGp1c3QgdGhlIGRhdGUgdG8gdGhlIHN5c3RlbSB0aW1lIHpvbmVcbiAgYWRqdXN0VG9TeXN0ZW1UWihkYXRlKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBhZGp1c3RzIHRoZSBkYXRlIHRvIHRoZSBzeXN0ZW0gdGltZSB6b25lLiBJdCB1c2VzIHRoZSB0aW1lIHpvbmVcbiAqIGRpZmZlcmVuY2VzIHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IGFuZCBhZGp1c3QgdGhlIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZSB0byBhZGp1c3RcbiAqL1xuZnVuY3Rpb24gYWRqdXN0VG9TeXN0ZW1UWihkYXRlKSB7XG4gIC8vIFNhdmUgdGhlIHRpbWUgem9uZSBvZmZzZXQgYmVmb3JlIGFsbCB0aGUgYWRqdXN0bWVudHNcbiAgY29uc3Qgb2Zmc2V0ID0gdHpPZmZzZXQoZGF0ZS50aW1lWm9uZSwgZGF0ZSk7XG5cbiAgLy8jcmVnaW9uIFN5c3RlbSBEU1QgYWRqdXN0bWVudFxuXG4gIC8vIFRoZSBiaWdnZXN0IHByb2JsZW0gd2l0aCB1c2luZyB0aGUgc3lzdGVtIHRpbWUgem9uZSBpcyB0aGF0IHdoZW4gd2UgY3JlYXRlXG4gIC8vIGEgZGF0ZSBmcm9tIGludGVybmFsIHZhbHVlcyBzdG9yZWQgaW4gVVRDLCB0aGUgc3lzdGVtIHRpbWUgem9uZSBtaWdodCBlbmRcbiAgLy8gdXAgb24gdGhlIERTVCBob3VyOlxuICAvL1xuICAvLyAgICQgVFo9QW1lcmljYS9OZXdfWW9yayBub2RlXG4gIC8vICAgPiBuZXcgRGF0ZSgyMDIwLCAyLCA4LCAxKS50b1N0cmluZygpXG4gIC8vICAgJ1N1biBNYXIgMDggMjAyMCAwMTowMDowMCBHTVQtMDUwMCAoRWFzdGVybiBTdGFuZGFyZCBUaW1lKSdcbiAgLy8gICA+IG5ldyBEYXRlKDIwMjAsIDIsIDgsIDIpLnRvU3RyaW5nKClcbiAgLy8gICAnU3VuIE1hciAwOCAyMDIwIDAzOjAwOjAwIEdNVC0wNDAwIChFYXN0ZXJuIERheWxpZ2h0IFRpbWUpJ1xuICAvLyAgID4gbmV3IERhdGUoMjAyMCwgMiwgOCwgMykudG9TdHJpbmcoKVxuICAvLyAgICdTdW4gTWFyIDA4IDIwMjAgMDM6MDA6MDAgR01ULTA0MDAgKEVhc3Rlcm4gRGF5bGlnaHQgVGltZSknXG4gIC8vICAgPiBuZXcgRGF0ZSgyMDIwLCAyLCA4LCA0KS50b1N0cmluZygpXG4gIC8vICAgJ1N1biBNYXIgMDggMjAyMCAwNDowMDowMCBHTVQtMDQwMCAoRWFzdGVybiBEYXlsaWdodCBUaW1lKSdcbiAgLy9cbiAgLy8gSGVyZSB3ZSBnZXQgdGhlIHNhbWUgaG91ciBmb3IgYm90aCAyIGFuZCAzLCBiZWNhdXNlIHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIC8vIGhhcyBEU1QgYmVnaW5uaW5nIGF0IDggTWFyY2ggMjAyMCwgMiBhLm0uIGFuZCBqdW1wcyB0byAzIGEubS4gU28gd2UgaGF2ZVxuICAvLyB0byBhZGp1c3QgdGhlIGludGVybmFsIGRhdGUgdG8gcmVmbGVjdCB0aGF0LlxuICAvL1xuICAvLyBIb3dldmVyIHdlIHdhbnQgdG8gYWRqdXN0IG9ubHkgaWYgdGhhdCdzIHRoZSBEU1QgaG91ciB0aGUgY2hhbmdlIGhhcHBlbmVzLFxuICAvLyBub3QgdGhlIGhvdXIgd2hlcmUgRFNUIG1vdmVzIHRvLlxuXG4gIC8vIFdlIGNhbGN1bGF0ZSB0aGUgcHJldmlvdXMgaG91ciB0byBzZWUgaWYgdGhlIHRpbWUgem9uZSBvZmZzZXQgaGFzIGNoYW5nZWRcbiAgLy8gYW5kIHdlIGhhdmUgbGFuZGVkIG9uIHRoZSBEU1QgaG91ci5cbiAgY29uc3QgcHJldkhvdXIgPSBuZXcgRGF0ZSgrZGF0ZSk7XG4gIC8vIFdlIHVzZSBVVEMgbWV0aG9kcyBoZXJlIGFzIHdlIGRvbid0IHdhbnQgdG8gbGFuZCBvbiB0aGUgc2FtZSBob3VyIGFnYWluXG4gIC8vIGluIGNhc2Ugb2YgRFNULlxuICBwcmV2SG91ci5zZXRVVENIb3VycyhwcmV2SG91ci5nZXRVVENIb3VycygpIC0gMSk7XG5cbiAgLy8gQ2FsY3VsYXRlIGlmIHdlIGFyZSBvbiB0aGUgc3lzdGVtIERTVCBob3VyLlxuICBjb25zdCBzeXN0ZW1PZmZzZXQgPSAtbmV3IERhdGUoK2RhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIGNvbnN0IHByZXZIb3VyU3lzdGVtT2Zmc2V0ID0gLW5ldyBEYXRlKCtwcmV2SG91cikuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgY29uc3Qgc3lzdGVtRFNUQ2hhbmdlID0gc3lzdGVtT2Zmc2V0IC0gcHJldkhvdXJTeXN0ZW1PZmZzZXQ7XG4gIC8vIERldGVjdCB0aGUgRFNUIHNoaWZ0LiBTeXN0ZW0gRFNUIGNoYW5nZSB3aWxsIG9jY3VyIGJvdGggb25cbiAgY29uc3QgZHN0U2hpZnQgPSBEYXRlLnByb3RvdHlwZS5nZXRIb3Vycy5hcHBseShkYXRlKSAhPT0gZGF0ZS5pbnRlcm5hbC5nZXRVVENIb3VycygpO1xuXG4gIC8vIE1vdmUgdGhlIGludGVybmFsIGRhdGUgd2hlbiB3ZSBhcmUgb24gdGhlIHN5c3RlbSBEU1QgaG91ci5cbiAgaWYgKHN5c3RlbURTVENoYW5nZSAmJiBkc3RTaGlmdCkgZGF0ZS5pbnRlcm5hbC5zZXRVVENNaW51dGVzKGRhdGUuaW50ZXJuYWwuZ2V0VVRDTWludXRlcygpICsgc3lzdGVtRFNUQ2hhbmdlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gU3lzdGVtIGRpZmYgYWRqdXN0bWVudFxuXG4gIC8vIE5vdyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgZGF0ZSwgc2luY2Ugd2UganVzdCBhcHBsaWVkIGludGVybmFsIHZhbHVlcy5cbiAgLy8gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3lzdGVtIGFuZCBkYXRlIHRpbWUgem9uZXNcbiAgLy8gYW5kIGFwcGx5IGl0IHRvIHRoZSBkYXRlLlxuXG4gIGNvbnN0IG9mZnNldERpZmYgPSBzeXN0ZW1PZmZzZXQgLSBvZmZzZXQ7XG4gIGlmIChvZmZzZXREaWZmKSBEYXRlLnByb3RvdHlwZS5zZXRVVENNaW51dGVzLmNhbGwoZGF0ZSwgRGF0ZS5wcm90b3R5cGUuZ2V0VVRDTWludXRlcy5jYWxsKGRhdGUpICsgb2Zmc2V0RGlmZik7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFBvc3QtYWRqdXN0bWVudCBEU1QgZml4XG5cbiAgY29uc3QgcG9zdE9mZnNldCA9IHR6T2Zmc2V0KGRhdGUudGltZVpvbmUsIGRhdGUpO1xuICBjb25zdCBwb3N0U3lzdGVtT2Zmc2V0ID0gLW5ldyBEYXRlKCtkYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICBjb25zdCBwb3N0T2Zmc2V0RGlmZiA9IHBvc3RTeXN0ZW1PZmZzZXQgLSBwb3N0T2Zmc2V0O1xuICBjb25zdCBvZmZzZXRDaGFuZ2VkID0gcG9zdE9mZnNldCAhPT0gb2Zmc2V0O1xuICBjb25zdCBwb3N0RGlmZiA9IHBvc3RPZmZzZXREaWZmIC0gb2Zmc2V0RGlmZjtcbiAgaWYgKG9mZnNldENoYW5nZWQgJiYgcG9zdERpZmYpIHtcbiAgICBEYXRlLnByb3RvdHlwZS5zZXRVVENNaW51dGVzLmNhbGwoZGF0ZSwgRGF0ZS5wcm90b3R5cGUuZ2V0VVRDTWludXRlcy5jYWxsKGRhdGUpICsgcG9zdERpZmYpO1xuXG4gICAgLy8gTm93IHdlIG5lZWQgdG8gY2hlY2sgaWYgZ290IG9mZnNldCBjaGFuZ2UgZHVyaW5nIHRoZSBwb3N0LWFkanVzdG1lbnQuXG4gICAgLy8gSWYgc28sIHdlIGFsc28gbmVlZCBib3RoIGRhdGVzIHRvIHJlZmxlY3QgdGhhdC5cblxuICAgIGNvbnN0IG5ld09mZnNldCA9IHR6T2Zmc2V0KGRhdGUudGltZVpvbmUsIGRhdGUpO1xuICAgIGNvbnN0IG9mZnNldENoYW5nZSA9IHBvc3RPZmZzZXQgLSBuZXdPZmZzZXQ7XG4gICAgaWYgKG9mZnNldENoYW5nZSkge1xuICAgICAgZGF0ZS5pbnRlcm5hbC5zZXRVVENNaW51dGVzKGRhdGUuaW50ZXJuYWwuZ2V0VVRDTWludXRlcygpICsgb2Zmc2V0Q2hhbmdlKTtcbiAgICAgIERhdGUucHJvdG90eXBlLnNldFVUQ01pbnV0ZXMuY2FsbChkYXRlLCBEYXRlLnByb3RvdHlwZS5nZXRVVENNaW51dGVzLmNhbGwoZGF0ZSkgKyBvZmZzZXRDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufSIsIi8qKlxuICogQG1vZHVsZSBjb25zdGFudHNcbiAqIEBzdW1tYXJ5IFVzZWZ1bCBjb25zdGFudHNcbiAqIEBkZXNjcmlwdGlvblxuICogQ29sbGVjdGlvbiBvZiB1c2VmdWwgZGF0ZSBjb25zdGFudHMuXG4gKlxuICogVGhlIGNvbnN0YW50cyBjb3VsZCBiZSBpbXBvcnRlZCBmcm9tIGBkYXRlLWZucy9jb25zdGFudHNgOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBtYXhUaW1lLCBtaW5UaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGZ1bmN0aW9uIGlzQWxsb3dlZFRpbWUodGltZSkge1xuICogICByZXR1cm4gdGltZSA8PSBtYXhUaW1lICYmIHRpbWUgPj0gbWluVGltZTtcbiAqIH1cbiAqIGBgYFxuICovXG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBkYXlzSW5XZWVrXG4gKiBAc3VtbWFyeSBEYXlzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IGRheXNJbldlZWsgPSA3O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgZGF5c0luWWVhclxuICogQHN1bW1hcnkgRGF5cyBpbiAxIHllYXIuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBIb3cgbWFueSBkYXlzIGluIGEgeWVhci5cbiAqXG4gKiBPbmUgeWVhcnMgZXF1YWxzIDM2NS4yNDI1IGRheXMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOlxuICpcbiAqID4gTGVhcCB5ZWFyIG9jY3VycyBldmVyeSA0IHllYXJzLCBleGNlcHQgZm9yIHllYXJzIHRoYXQgYXJlIGRpdmlzaWJsZSBieSAxMDAgYW5kIG5vdCBkaXZpc2libGUgYnkgNDAwLlxuICogPiAxIG1lYW4geWVhciA9ICgzNjUrMS80LTEvMTAwKzEvNDAwKSBkYXlzID0gMzY1LjI0MjUgZGF5c1xuICovXG5leHBvcnQgY29uc3QgZGF5c0luWWVhciA9IDM2NS4yNDI1O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWF4VGltZVxuICogQHN1bW1hcnkgTWF4aW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IG1heFRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogY29uc3QgaXNWYWxpZCA9IDg2NDAwMDAwMDAwMDAwMDEgPD0gbWF4VGltZTtcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBuZXcgRGF0ZSg4NjQwMDAwMDAwMDAwMDAxKTtcbiAqIC8vPT4gSW52YWxpZCBEYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pblRpbWVcbiAqIEBzdW1tYXJ5IE1pbmltdW0gYWxsb3dlZCB0aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBtaW5UaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGNvbnN0IGlzVmFsaWQgPSAtODY0MDAwMDAwMDAwMDAwMSA+PSBtaW5UaW1lO1xuICogLy89PiBmYWxzZVxuICpcbiAqIG5ldyBEYXRlKC04NjQwMDAwMDAwMDAwMDAxKVxuICogLy89PiBJbnZhbGlkIERhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1pblRpbWUgPSAtbWF4VGltZTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luV2Vla1xuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luV2VlayA9IDYwNDgwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luRGF5XG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbkRheSA9IDg2NDAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5NaW51dGVcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIG1pbnV0ZVxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5NaW51dGUgPSA2MDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luSG91clxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgaG91clxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5Ib3VyID0gMzYwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luU2Vjb25kXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBzZWNvbmRcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMTAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJblllYXJcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luWWVhciA9IDUyNTYwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbk1vbnRoXG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgbW9udGguXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5Nb250aCA9IDQzMjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luRGF5XG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luRGF5ID0gMTQ0MDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbkhvdXJcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBob3VyLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luSG91ciA9IDYwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbW9udGhzSW5RdWFydGVyXG4gKiBAc3VtbWFyeSBNb250aHMgaW4gMSBxdWFydGVyLlxuICovXG5leHBvcnQgY29uc3QgbW9udGhzSW5RdWFydGVyID0gMztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1vbnRoc0luWWVhclxuICogQHN1bW1hcnkgTW9udGhzIGluIDEgeWVhci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vbnRoc0luWWVhciA9IDEyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgcXVhcnRlcnNJblllYXJcbiAqIEBzdW1tYXJ5IFF1YXJ0ZXJzIGluIDEgeWVhclxuICovXG5leHBvcnQgY29uc3QgcXVhcnRlcnNJblllYXIgPSA0O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luSG91clxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5Ib3VyID0gMzYwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbk1pbnV0ZVxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIG1pbnV0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbk1pbnV0ZSA9IDYwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luRGF5XG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luRGF5ID0gc2Vjb25kc0luSG91ciAqIDI0O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luV2Vla1xuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5XZWVrID0gc2Vjb25kc0luRGF5ICogNztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJblllYXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luWWVhciA9IHNlY29uZHNJbkRheSAqIGRheXNJblllYXI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5Nb250aFxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIG1vbnRoXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJblllYXIgLyAxMjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJblF1YXJ0ZXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBxdWFydGVyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luUXVhcnRlciA9IHNlY29uZHNJbk1vbnRoICogMztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGNvbnN0cnVjdEZyb21TeW1ib2xcbiAqIEBzdW1tYXJ5IFN5bWJvbCBlbmFibGluZyBEYXRlIGV4dGVuc2lvbnMgdG8gaW5oZXJpdCBwcm9wZXJ0aWVzIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlLlxuICpcbiAqIFRoZSBzeW1ib2wgaXMgdXNlZCB0byBlbmFibGUgdGhlIGBjb25zdHJ1Y3RGcm9tYCBmdW5jdGlvbiB0byBjb25zdHJ1Y3QgYSBkYXRlXG4gKiB1c2luZyBhIHJlZmVyZW5jZSBkYXRlIGFuZCBhIHZhbHVlLiBJdCBhbGxvd3MgdG8gdHJhbnNmZXIgZXh0cmEgcHJvcGVydGllc1xuICogZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLiBJdCdzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9ucyBsaWtlXG4gKiBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eikgdGhhdCBhY2NlcHQgYSB0aW1lIHpvbmUgYXNcbiAqIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RGcm9tU3ltYm9sID0gU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpO1xuIiwiaW1wb3J0IHsgY29uc3RydWN0RnJvbVN5bWJvbCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGNvbnN0cnVjdEZyb21cbiAqIEBjYXRlZ29yeSBHZW5lcmljIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnN0cnVjdHMgYSBkYXRlIHVzaW5nIHRoZSByZWZlcmVuY2UgZGF0ZSBhbmQgdGhlIHZhbHVlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZnVuY3Rpb24gY29uc3RydWN0cyBhIG5ldyBkYXRlIHVzaW5nIHRoZSBjb25zdHJ1Y3RvciBmcm9tIHRoZSByZWZlcmVuY2VcbiAqIGRhdGUgYW5kIHRoZSBnaXZlbiB2YWx1ZS4gSXQgaGVscHMgdG8gYnVpbGQgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBhY2NlcHRcbiAqIGRhdGUgZXh0ZW5zaW9ucy5cbiAqXG4gKiBJdCBkZWZhdWx0cyB0byBgRGF0ZWAgaWYgdGhlIHBhc3NlZCByZWZlcmVuY2UgZGF0ZSBpcyBhIG51bWJlciBvciBhIHN0cmluZy5cbiAqXG4gKiBTdGFydGluZyBmcm9tIHYzLjcuMCwgaXQgYWxsb3dzIHRvIGNvbnN0cnVjdCBhIGRhdGUgdXNpbmcgYFtTeW1ib2wuZm9yKFwiY29uc3RydWN0RGF0ZUZyb21cIildYFxuICogZW5hYmxpbmcgdG8gdHJhbnNmZXIgZXh0cmEgcHJvcGVydGllcyBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZSB0byB0aGUgbmV3IGRhdGUuXG4gKiBJdCdzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9ucyBsaWtlIFtgVFpEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3R6KVxuICogdGhhdCBhY2NlcHQgYSB0aW1lIHpvbmUgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSB0byB0YWtlIGNvbnN0cnVjdG9yIGZyb21cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjcmVhdGUgdGhlIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBEYXRlIGluaXRpYWxpemVkIHVzaW5nIHRoZSBnaXZlbiBkYXRlIGFuZCB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS9kYXRlLWZuc1wiO1xuICpcbiAqIC8vIEEgZnVuY3Rpb24gdGhhdCBjbG9uZXMgYSBkYXRlIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHR5cGVcbiAqIGZ1bmN0aW9uIGNsb25lRGF0ZTxEYXRlVHlwZSBleHRlbmRzIERhdGU+KGRhdGU6IERhdGVUeXBlKTogRGF0ZVR5cGUge1xuICogICByZXR1cm4gY29uc3RydWN0RnJvbShcbiAqICAgICBkYXRlLCAvLyBVc2UgY29uc3RydWN0b3IgZnJvbSB0aGUgZ2l2ZW4gZGF0ZVxuICogICAgIGRhdGUuZ2V0VGltZSgpIC8vIFVzZSB0aGUgZGF0ZSB2YWx1ZSB0byBjcmVhdGUgYSBuZXcgZGF0ZVxuICogICApO1xuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGRhdGUodmFsdWUpO1xuXG4gIGlmIChkYXRlICYmIHR5cGVvZiBkYXRlID09PSBcIm9iamVjdFwiICYmIGNvbnN0cnVjdEZyb21TeW1ib2wgaW4gZGF0ZSlcbiAgICByZXR1cm4gZGF0ZVtjb25zdHJ1Y3RGcm9tU3ltYm9sXSh2YWx1ZSk7XG5cbiAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gbmV3IGRhdGUuY29uc3RydWN0b3IodmFsdWUpO1xuXG4gIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgY29uc3RydWN0RnJvbTtcbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIFN0YXJ0aW5nIGZyb20gdjMuNy4wLCBpdCBjbG9uZXMgYSBkYXRlIHVzaW5nIGBbU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpXWBcbiAqIGVuYWJsaW5nIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLlxuICogSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZSBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eilcbiAqIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGNvbnRleHQpIHtcbiAgLy8gW1RPRE9dIEdldCByaWQgb2YgYHRvRGF0ZWAgb3IgYGNvbnN0cnVjdEZyb21gP1xuICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0IHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgdG9EYXRlO1xuIiwibGV0IGRlZmF1bHRPcHRpb25zID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59XG4iLCJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZldlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksIHRoZSBzdGFydCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCksIHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZldlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTtcbiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG5cbiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgLSBkaWZmKTtcbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mV2VlaztcbiIsImltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIHsgLi4ub3B0aW9ucywgd2Vla1N0YXJ0c09uOiAxIH0pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZJU09XZWVrO1xuIiwiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0SVNPV2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRJU09XZWVrWWVhclxuICogQGNhdGVnb3J5IElTTyBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLFxuICogd2hpY2ggYWx3YXlzIHN0YXJ0cyAzIGRheXMgYmVmb3JlIHRoZSB5ZWFyJ3MgZmlyc3QgVGh1cnNkYXkuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggSVNPLXdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDU/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRJU09XZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gMjAwNFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKF9kYXRlLCAwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuXG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIgPSBjb25zdHJ1Y3RGcm9tKF9kYXRlLCAwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG5cbiAgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0SVNPV2Vla1llYXI7XG4iLCJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTtcbiAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKFxuICAgIERhdGUuVVRDKFxuICAgICAgX2RhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIF9kYXRlLmdldE1vbnRoKCksXG4gICAgICBfZGF0ZS5nZXREYXRlKCksXG4gICAgICBfZGF0ZS5nZXRIb3VycygpLFxuICAgICAgX2RhdGUuZ2V0TWludXRlcygpLFxuICAgICAgX2RhdGUuZ2V0U2Vjb25kcygpLFxuICAgICAgX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCksXG4gICAgKSxcbiAgKTtcbiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuICtkYXRlIC0gK3V0Y0RhdGU7XG59XG4iLCJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4uL2NvbnN0cnVjdEZyb20uanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQsIC4uLmRhdGVzKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZSA9IGNvbnN0cnVjdEZyb20uYmluZChcbiAgICBudWxsLFxuICAgIGNvbnRleHQgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09IFwib2JqZWN0XCIpLFxuICApO1xuICByZXR1cm4gZGF0ZXMubWFwKG5vcm1hbGl6ZSk7XG59XG4iLCJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZEYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mRGF5XG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIGRheSBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mRGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZEYXk7XG4iLCJpbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luRGF5IH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mRGF5IH0gZnJvbSBcIi4vc3RhcnRPZkRheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHRpbWVzIGFyZSByZW1vdmVkXG4gKiBmcm9tIHRoZSBkYXRlcyBhbmQgdGhlbiB0aGUgZGlmZmVyZW5jZSBpbiBkYXlzIGlzIGNhbGN1bGF0ZWQuXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzowMDowMCBhbmQgMiBKdWx5IDIwMTIgMDA6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY2XG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzo1OTowMCBhbmQgMyBKdWx5IDIwMTEgMDA6MDE6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDMsIDAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgNTkpXG4gKiApXG4gKiAvLz0+IDFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGNvbnN0IGxhdGVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkobGF0ZXJEYXRlXyk7XG4gIGNvbnN0IGVhcmxpZXJTdGFydE9mRGF5ID0gc3RhcnRPZkRheShlYXJsaWVyRGF0ZV8pO1xuXG4gIGNvbnN0IGxhdGVyVGltZXN0YW1wID1cbiAgICArbGF0ZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZEYXkpO1xuICBjb25zdCBlYXJsaWVyVGltZXN0YW1wID1cbiAgICArZWFybGllclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJTdGFydE9mRGF5KTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgZGF5IGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luRGF5KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXM7XG4iLCJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWsgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZklTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLFxuICogd2hpY2ggYWx3YXlzIHN0YXJ0cyAzIGRheXMgYmVmb3JlIHRoZSB5ZWFyJ3MgZmlyc3QgVGh1cnNkYXkuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDU6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgNiwgMikpXG4gKiAvLz0+IE1vbiBKYW4gMDMgMjAwNSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZklTT1dlZWtZZWFyO1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29tcGFyZUFzY1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb21wYXJlIHRoZSB0d28gZGF0ZXMgYW5kIHJldHVybiAtMSwgMCBvciAxLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29tcGFyZSB0aGUgdHdvIGRhdGVzIGFuZCByZXR1cm4gMSBpZiB0aGUgZmlyc3QgZGF0ZSBpcyBhZnRlciB0aGUgc2Vjb25kLFxuICogLTEgaWYgdGhlIGZpcnN0IGRhdGUgaXMgYmVmb3JlIHRoZSBzZWNvbmQgb3IgMCBpZiBkYXRlcyBhcmUgZXF1YWwuXG4gKlxuICogQHBhcmFtIGRhdGVMZWZ0IC0gVGhlIGZpcnN0IGRhdGUgdG8gY29tcGFyZVxuICogQHBhcmFtIGRhdGVSaWdodCAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjb21wYXJlXG4gKlxuICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvblxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb21wYXJlIDExIEZlYnJ1YXJ5IDE5ODcgYW5kIDEwIEp1bHkgMTk4OTpcbiAqIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVBc2MobmV3IERhdGUoMTk4NywgMSwgMTEpLCBuZXcgRGF0ZSgxOTg5LCA2LCAxMCkpXG4gKiAvLz0+IC0xXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNvcnQgdGhlIGFycmF5IG9mIGRhdGVzOlxuICogY29uc3QgcmVzdWx0ID0gW1xuICogICBuZXcgRGF0ZSgxOTk1LCA2LCAyKSxcbiAqICAgbmV3IERhdGUoMTk4NywgMSwgMTEpLFxuICogICBuZXcgRGF0ZSgxOTg5LCA2LCAxMClcbiAqIF0uc29ydChjb21wYXJlQXNjKVxuICogLy89PiBbXG4gKiAvLyAgIFdlZCBGZWIgMTEgMTk4NyAwMDowMDowMCxcbiAqIC8vICAgTW9uIEp1bCAxMCAxOTg5IDAwOjAwOjAwLFxuICogLy8gICBTdW4gSnVsIDAyIDE5OTUgMDA6MDA6MDBcbiAqIC8vIF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVBc2MoZGF0ZUxlZnQsIGRhdGVSaWdodCkge1xuICBjb25zdCBkaWZmID0gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7XG5cbiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7XG4gIGVsc2UgaWYgKGRpZmYgPiAwKSByZXR1cm4gMTtcblxuICAvLyBSZXR1cm4gMCBpZiBkaWZmIGlzIDA7IHJldHVybiBOYU4gaWYgZGlmZiBpcyBOYU5cbiAgcmV0dXJuIGRpZmY7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgY29tcGFyZUFzYztcbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29uc3RydWN0Tm93XG4gKiBAY2F0ZWdvcnkgR2VuZXJpYyBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgbmV3IGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgcGFzc2VkIHZhbHVlIGNvbnN0cnVjdG9yLlxuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgbmV3IGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgY29uc3RydWN0b3IgZnJvbVxuICogdGhlIHJlZmVyZW5jZSBkYXRlLiBJdCBoZWxwcyB0byBidWlsZCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBkYXRlXG4gKiBleHRlbnNpb25zIGFuZCB1c2UgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBJdCBkZWZhdWx0cyB0byBgRGF0ZWAgaWYgdGhlIHBhc3NlZCByZWZlcmVuY2UgZGF0ZSBpcyBhIG51bWJlciBvciBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSB0byB0YWtlIGNvbnN0cnVjdG9yIGZyb21cbiAqXG4gKiBAcmV0dXJucyBDdXJyZW50IGRhdGUgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGdpdmVuIGRhdGUgY29uc3RydWN0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgY29uc3RydWN0Tm93LCBpc1NhbWVEYXkgfSBmcm9tICdkYXRlLWZucydcbiAqXG4gKiBmdW5jdGlvbiBpc1RvZGF5PERhdGVUeXBlIGV4dGVuZHMgRGF0ZT4oXG4gKiAgIGRhdGU6IERhdGVBcmc8RGF0ZVR5cGU+LFxuICogKTogYm9vbGVhbiB7XG4gKiAgIC8vIElmIHdlIHdlcmUgdG8gdXNlIGBuZXcgRGF0ZSgpYCBkaXJlY3RseSwgdGhlIGZ1bmN0aW9uIHdvdWxkICBiZWhhdmVcbiAqICAgLy8gZGlmZmVyZW50bHkgaW4gZGlmZmVyZW50IHRpbWV6b25lcyBhbmQgcmV0dXJuIGZhbHNlIGZvciB0aGUgc2FtZSBkYXRlLlxuICogICByZXR1cm4gaXNTYW1lRGF5KGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3ROb3coZGF0ZSkge1xuICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBEYXRlLm5vdygpKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBjb25zdHJ1Y3ROb3c7XG4iLCJpbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZEYXkgfSBmcm9tIFwiLi9zdGFydE9mRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1NhbWVEYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBpc1NhbWVEYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSBkYXkgKGFuZCB5ZWFyIGFuZCBtb250aCk/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBcmUgdGhlIGdpdmVuIGRhdGVzIGluIHRoZSBzYW1lIGRheSAoYW5kIHllYXIgYW5kIG1vbnRoKT9cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGZpcnN0IGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSBkYXkgKGFuZCB5ZWFyIGFuZCBtb250aClcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDQgU2VwdGVtYmVyIDA2OjAwOjAwIGFuZCA0IFNlcHRlbWJlciAxODowMDowMCBpbiB0aGUgc2FtZSBkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVEYXkobmV3IERhdGUoMjAxNCwgOCwgNCwgNiwgMCksIG5ldyBEYXRlKDIwMTQsIDgsIDQsIDE4LCAwKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgNCBTZXB0ZW1iZXIgYW5kIDQgT2N0b2JlciBpbiB0aGUgc2FtZSBkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVEYXkobmV3IERhdGUoMjAxNCwgOCwgNCksIG5ldyBEYXRlKDIwMTQsIDksIDQpKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBcmUgNCBTZXB0ZW1iZXIsIDIwMTQgYW5kIDQgU2VwdGVtYmVyLCAyMDE1IGluIHRoZSBzYW1lIGRheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZURheShuZXcgRGF0ZSgyMDE0LCA4LCA0KSwgbmV3IERhdGUoMjAxNSwgOCwgNCkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVEYXkobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcbiAgcmV0dXJuICtzdGFydE9mRGF5KGRhdGVMZWZ0XykgPT09ICtzdGFydE9mRGF5KGRhdGVSaWdodF8pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzU2FtZURheTtcbiIsIi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IERhdGVdXCIpXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNEYXRlO1xuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSBcIi4vaXNEYXRlLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZSlcbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyB2YWxpZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0aWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZChkYXRlKSB7XG4gIHJldHVybiAhKCghaXNEYXRlKGRhdGUpICYmIHR5cGVvZiBkYXRlICE9PSBcIm51bWJlclwiKSB8fCBpc05hTigrdG9EYXRlKGRhdGUpKSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNWYWxpZDtcbiIsImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgbW9udGhzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIG1vbnRocyBhcmUgYmV0d2VlbiAzMSBKYW51YXJ5IDIwMTQgYW5kIDEgU2VwdGVtYmVyIDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDAsIDMxKVxuICogKVxuICogLy89PiA4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aHNEaWZmID0gbGF0ZXJEYXRlXy5nZXRNb250aCgpIC0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7XG5cbiAgcmV0dXJuIHllYXJzRGlmZiAqIDEyICsgbW9udGhzRGlmZjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocztcbiIsImV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ01ldGhvZChtZXRob2QpIHtcbiAgcmV0dXJuIChudW1iZXIpID0+IHtcbiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7XG4gICAgY29uc3QgcmVzdWx0ID0gcm91bmQobnVtYmVyKTtcbiAgICAvLyBQcmV2ZW50IG5lZ2F0aXZlIHplcm9cbiAgICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbiAgfTtcbn1cbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBtaWxsaXNlY29uZHMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDE0IDEyOjMwOjIwLjYwMCBhbmQgMiBKdWx5IDIwMTQgMTI6MzA6MjEuNzAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMzAsIDIxLCA3MDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMzAsIDIwLCA2MDApXG4gKiApXG4gKiAvLz0+IDExMDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7XG4gIHJldHVybiArdG9EYXRlKGxhdGVyRGF0ZSkgLSArdG9EYXRlKGVhcmxpZXJEYXRlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHM7XG4iLCJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGVuZE9mRGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZEYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBlbmQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGVuZCBvZiBhIGRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgZW5kIG9mIGEgZGF5IGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZEYXkobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDIzOjU5OjU5Ljk5OVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kT2ZEYXkoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZkRheTtcbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZNb250aH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVuZE9mTW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIG1vbnRoIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZW5kIG9mIGEgbW9udGggZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGVuZCBvZiBhIG1vbnRoXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBtb250aCBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGVuZE9mTW9udGgobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAzMCAyMDE0IDIzOjU5OjU5Ljk5OVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpO1xuICBfZGF0ZS5zZXRGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCArIDEsIDApO1xuICBfZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5kT2ZNb250aDtcbiIsImltcG9ydCB7IGVuZE9mRGF5IH0gZnJvbSBcIi4vZW5kT2ZEYXkuanNcIjtcbmltcG9ydCB7IGVuZE9mTW9udGggfSBmcm9tIFwiLi9lbmRPZk1vbnRoLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc0xhc3REYXlPZk1vbnRoXG4gKiBAY2F0ZWdvcnkgTW9udGggSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdGhlIGxhc3QgZGF5IG9mIGEgbW9udGg/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0ZSB0aGUgbGFzdCBkYXkgb2YgYSBtb250aD9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyB0aGUgbGFzdCBkYXkgb2YgYSBtb250aFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAyOCBGZWJydWFyeSAyMDE0IHRoZSBsYXN0IGRheSBvZiBhIG1vbnRoP1xuICogY29uc3QgcmVzdWx0ID0gaXNMYXN0RGF5T2ZNb250aChuZXcgRGF0ZSgyMDE0LCAxLCAyOCkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGFzdERheU9mTW9udGgoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIHJldHVybiArZW5kT2ZEYXkoX2RhdGUsIG9wdGlvbnMpID09PSArZW5kT2ZNb250aChfZGF0ZSwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNMYXN0RGF5T2ZNb250aDtcbiIsImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgY29tcGFyZUFzYyB9IGZyb20gXCIuL2NvbXBhcmVBc2MuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanNcIjtcbmltcG9ydCB7IGlzTGFzdERheU9mTW9udGggfSBmcm9tIFwiLi9pc0xhc3REYXlPZk1vbnRoLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5Nb250aHN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5Nb250aHNcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBmdWxsIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZnVsbCBtb250aHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCBtb250aHMgYXJlIGJldHdlZW4gMzEgSmFudWFyeSAyMDE0IGFuZCAxIFNlcHRlbWJlciAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluTW9udGhzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCBuZXcgRGF0ZSgyMDE0LCAwLCAzMSkpXG4gKiAvLz0+IDdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCB3b3JraW5nTGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBjb25zdCBzaWduID0gY29tcGFyZUFzYyh3b3JraW5nTGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV8pO1xuICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoXG4gICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKSxcbiAgKTtcblxuICBpZiAoZGlmZmVyZW5jZSA8IDEpIHJldHVybiAwO1xuXG4gIGlmICh3b3JraW5nTGF0ZXJEYXRlLmdldE1vbnRoKCkgPT09IDEgJiYgd29ya2luZ0xhdGVyRGF0ZS5nZXREYXRlKCkgPiAyNylcbiAgICB3b3JraW5nTGF0ZXJEYXRlLnNldERhdGUoMzApO1xuXG4gIHdvcmtpbmdMYXRlckRhdGUuc2V0TW9udGgod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpO1xuXG4gIGxldCBpc0xhc3RNb250aE5vdEZ1bGwgPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXykgPT09IC1zaWduO1xuXG4gIGlmIChcbiAgICBpc0xhc3REYXlPZk1vbnRoKGxhdGVyRGF0ZV8pICYmXG4gICAgZGlmZmVyZW5jZSA9PT0gMSAmJlxuICAgIGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gMVxuICApIHtcbiAgICBpc0xhc3RNb250aE5vdEZ1bGwgPSBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNpZ24gKiAoZGlmZmVyZW5jZSAtICtpc0xhc3RNb250aE5vdEZ1bGwpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5Nb250aHM7XG4iLCJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluU2Vjb25kc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJblNlY29uZHNcbiAqIEBjYXRlZ29yeSBTZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBzZWNvbmRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IHNlY29uZHMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDE0IDEyOjMwOjA3Ljk5OSBhbmQgMiBKdWx5IDIwMTQgMTI6MzA6MjAuMDAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluU2Vjb25kcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCAzMCwgNywgOTk5KVxuICogKVxuICogLy89PiAxMlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgLyAxMDAwO1xuICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJblNlY29uZHM7XG4iLCJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHllYXIgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mWWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDAwKSlcbiAqIC8vPT4gV2VkIEphbiAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgZGF0ZV8uc2V0RnVsbFllYXIoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZV87XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZlllYXI7XG4iLCJpbXBvcnQgeyBlbmRPZkRheSB9IGZyb20gXCIuL2VuZE9mRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlbmRPZlRvZGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZUb2RheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiB0b2RheS5cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGVuZCBvZiB0b2RheS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBlbmQgb2YgdG9kYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgNiBPY3RvYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZlRvZGF5KClcbiAqIC8vPT4gTW9uIE9jdCA2IDIwMTQgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZlRvZGF5KG9wdGlvbnMpIHtcbiAgcmV0dXJuIGVuZE9mRGF5KERhdGUubm93KCksIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVuZE9mVG9kYXk7XG4iLCJpbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZlllYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0RGF5T2ZZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0RGF5T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgZGF5IG9mIHRoZSB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBkYXkgb2YgdGhlIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXkgb2YgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBkYXkgb2YgdGhlIHllYXIgaXMgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBnZXREYXlPZlllYXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDE4M1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKF9kYXRlLCBzdGFydE9mWWVhcihfZGF0ZSkpO1xuICBjb25zdCBkYXlPZlllYXIgPSBkaWZmICsgMTtcbiAgcmV0dXJuIGRheU9mWWVhcjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXREYXlPZlllYXI7XG4iLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbldlZWsgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrWWVhciB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0SVNPV2Vla1xuICogQGNhdGVnb3J5IElTTyBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgSVNPIHdlZWsgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIElTTyB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIElTTyB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgb2YgdGhlIElTTy13ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPV2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gNTNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElTT1dlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSArc3RhcnRPZklTT1dlZWsoX2RhdGUpIC0gK3N0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKSArIDE7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0SVNPV2VlaztcbiIsImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRXZWVrWWVhclxuICogQGNhdGVnb3J5IFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncz9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNikpXG4gKiAvLz0+IDIwMDVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IGlmIHdlZWsgc3RhcnRzIG9uIFNhdHVyZGF5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSwgeyB3ZWVrU3RhcnRzT246IDYgfSlcbiAqIC8vPT4gMjAwNFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgaWYgdGhlIGZpcnN0IHdlZWsgY29udGFpbnMgNCBKYW51YXJ5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSwgeyBmaXJzdFdlZWtDb250YWluc0RhdGU6IDQgfSlcbiAqIC8vPT4gMjAwNFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG5cbiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG5cbiAgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZk5leHRZZWFyKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZlRoaXNZZWFyKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0V2Vla1llYXI7XG4iLCJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrWWVhciB9IGZyb20gXCIuL2dldFdlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mV2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1IHdpdGggZGVmYXVsdCBzZXR0aW5nczpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gU3VuIERlYyAyNiAyMDA0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1XG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB3ZWVrXG4gKiAvLyBhbmQgNCBKYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhcjpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gTW9uIEphbiAwMyAyMDA1IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9XG4gICAgb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIDE7XG5cbiAgY29uc3QgeWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmaXJzdFdlZWsuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mV2Vla1llYXI7XG4iLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbldlZWsgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrWWVhciB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0V2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBsb2NhbCB3ZWVrIGluZGV4IG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBsb2NhbCB3ZWVrIGluZGV4IG9mIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgb2YgdGhlIGxvY2FsIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDUgd2l0aCBkZWZhdWx0IG9wdGlvbnM/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrKG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgb2YgdGhlIGxvY2FsIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDUsXG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayxcbiAqIC8vIGFuZCB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciBhbHdheXMgY29udGFpbnMgNCBKYW51YXJ5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gNTNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSArc3RhcnRPZldlZWsoX2RhdGUsIG9wdGlvbnMpIC0gK3N0YXJ0T2ZXZWVrWWVhcihfZGF0ZSwgb3B0aW9ucyk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKSArIDE7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0V2VlaztcbiIsImV4cG9ydCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgY29uc3Qgc2lnbiA9IG51bWJlciA8IDAgPyBcIi1cIiA6IFwiXCI7XG4gIGNvbnN0IG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKS5wYWRTdGFydCh0YXJnZXRMZW5ndGgsIFwiMFwiKTtcbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59XG4iLCJpbXBvcnQgeyBhZGRMZWFkaW5nWmVyb3MgfSBmcm9tIFwiLi4vYWRkTGVhZGluZ1plcm9zLmpzXCI7XG5cbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG5cbmV4cG9ydCBjb25zdCBsaWdodEZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSBcInl5XCIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNb250aFxuICBNKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSBcIk1cIiA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBBTSBvciBQTVxuICBhKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRIb3VycygpIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlIFwiYWFhYVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gXCJhbVwiID8gXCJhLm0uXCIgOiBcInAubS5cIjtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0xMl1cbiAgaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0yM11cbiAgSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbnV0ZVxuICBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBTZWNvbmRcbiAgcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYyhcbiAgICAgIG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpLFxuICAgICk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBnZXREYXlPZlllYXIgfSBmcm9tIFwiLi4vLi4vZ2V0RGF5T2ZZZWFyLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09XZWVrIH0gZnJvbSBcIi4uLy4uL2dldElTT1dlZWsuanNcIjtcbmltcG9ydCB7IGdldElTT1dlZWtZZWFyIH0gZnJvbSBcIi4uLy4uL2dldElTT1dlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrIH0gZnJvbSBcIi4uLy4uL2dldFdlZWsuanNcIjtcbmltcG9ydCB7IGdldFdlZWtZZWFyIH0gZnJvbSBcIi4uLy4uL2dldFdlZWtZZWFyLmpzXCI7XG5cbmltcG9ydCB7IGFkZExlYWRpbmdaZXJvcyB9IGZyb20gXCIuLi9hZGRMZWFkaW5nWmVyb3MuanNcIjtcbmltcG9ydCB7IGxpZ2h0Rm9ybWF0dGVycyB9IGZyb20gXCIuL2xpZ2h0Rm9ybWF0dGVycy5qc1wiO1xuXG5jb25zdCBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogXCJhbVwiLFxuICBwbTogXCJwbVwiLFxuICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICBub29uOiBcIm5vb25cIixcbiAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgZXZlbmluZzogXCJldmVuaW5nXCIsXG4gIG5pZ2h0OiBcIm5pZ2h0XCIsXG59O1xuXG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZXJhID0gZGF0ZS5nZXRGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSBcIkdcIjpcbiAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgY2FzZSBcIkdHR1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwgeyB3aWR0aDogXCJhYmJyZXZpYXRlZFwiIH0pO1xuICAgICAgLy8gQSwgQlxuICAgICAgY2FzZSBcIkdHR0dHXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7IHdpZHRoOiBcIm5hcnJvd1wiIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgXCJHR0dHXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwgeyB3aWR0aDogXCJ3aWRlXCIgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSBcInlvXCIpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwgeyB1bml0OiBcInllYXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNpZ25lZFdlZWtZZWFyID0gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICBjb25zdCB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09IFwiWVlcIikge1xuICAgICAgY29uc3QgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09IFwiWW9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHsgdW5pdDogXCJ5ZWFyXCIgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgaXNvV2Vla1llYXIgPSBnZXRJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSBcIlFcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlIFwiUVFcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSBcIlFvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogXCJxdWFydGVyXCIgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSBcIlFRUVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgXCJRUVFRUVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgXCJRUVFRXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlIFwicVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlIFwicW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwgeyB1bml0OiBcInF1YXJ0ZXJcIiB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlIFwicXFxXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSBcInFxcXFxXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSBcInFxcXFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgIGNhc2UgXCJNTVwiOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSBcIk1vXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwgeyB1bml0OiBcIm1vbnRoXCIgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgXCJNTU1cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgXCJNTU1NTVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwgeyB3aWR0aDogXCJ3aWRlXCIsIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlIFwiTExcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSBcIkxvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwgeyB1bml0OiBcIm1vbnRoXCIgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgXCJMTExMTFwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSBcIkxMTExcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwgeyB3aWR0aDogXCJ3aWRlXCIsIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBMb2NhbCB3ZWVrIG9mIHllYXJcbiAgdzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHdlZWsgPSBnZXRXZWVrKGRhdGUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRva2VuID09PSBcIndvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHsgdW5pdDogXCJ3ZWVrXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGlzb1dlZWsgPSBnZXRJU09XZWVrKGRhdGUpO1xuXG4gICAgaWYgKHRva2VuID09PSBcIklvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb1dlZWssIHsgdW5pdDogXCJ3ZWVrXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJkb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldERhdGUoKSwgeyB1bml0OiBcImRhdGVcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZlllYXIgPSBnZXREYXlPZlllYXIoZGF0ZSk7XG5cbiAgICBpZiAodG9rZW4gPT09IFwiRG9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7IHVuaXQ6IFwiZGF5T2ZZZWFyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcIkVFXCI6XG4gICAgICBjYXNlIFwiRUVFXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcIkVFRUVFRVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSBcImVlXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlIFwiZW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHsgdW5pdDogXCJkYXlcIiB9KTtcbiAgICAgIGNhc2UgXCJlZWVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJlZWVlZVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiZWVlZWVlXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiZWVlZVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBjb25zdCBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlIFwiY1wiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgXCJjY1wiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlIFwiY29cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHsgdW5pdDogXCJkYXlcIiB9KTtcbiAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJjY2NjY1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiY2NjY2NjXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiY2NjY1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgY29uc3QgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlIFwiaVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSBcImlpXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlIFwiaW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgXCJpaWlcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJpaWlpaVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiaWlpaWlpXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiaWlpaVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImFcIjpcbiAgICAgIGNhc2UgXCJhYVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemVcbiAgICAgICAgICAuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlIFwiYWFhYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYWFhYVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyBcInBtXCIgOiBcImFtXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImJcIjpcbiAgICAgIGNhc2UgXCJiYlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImJiYlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemVcbiAgICAgICAgICAuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlIFwiYmJiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYmJiYlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJCXCI6XG4gICAgICBjYXNlIFwiQkJcIjpcbiAgICAgIGNhc2UgXCJCQkJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJCQkJCQlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJCQkJCXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwiaG9cIikge1xuICAgICAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3VycywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwiSG9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRIb3VycygpLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpICUgMTI7XG5cbiAgICBpZiAodG9rZW4gPT09IFwiS29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJrb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3VycywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcIm1vXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0TWludXRlcygpLCB7IHVuaXQ6IFwibWludXRlXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJzb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFNlY29uZHMoKSwgeyB1bml0OiBcInNlY29uZFwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiWlwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlIFwiWFwiOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlIFwiWFhYWFwiOlxuICAgICAgY2FzZSBcIlhYXCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWFhgXG4gICAgICBjYXNlIFwiWFhYWFhcIjpcbiAgICAgIGNhc2UgXCJYWFhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlIFwieFwiOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlIFwieHh4eFwiOlxuICAgICAgY2FzZSBcInh4XCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlIFwieHh4eHhcIjpcbiAgICAgIGNhc2UgXCJ4eHhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlIFwiT1wiOlxuICAgICAgY2FzZSBcIk9PXCI6XG4gICAgICBjYXNlIFwiT09PXCI6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSBcIk9PT09cIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlIFwielwiOlxuICAgICAgY2FzZSBcInp6XCI6XG4gICAgICBjYXNlIFwienp6XCI6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSBcInp6enpcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLnRydW5jKCtkYXRlIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoK2RhdGUsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGVsaW1pdGVyID0gXCJcIikge1xuICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCI7XG4gIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC50cnVuYyhhYnNPZmZzZXQgLyA2MCk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIgPSBcIlwiKSB7XG4gIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIjtcbiAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgY29uc3QgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNPZmZzZXQgLyA2MCksIDIpO1xuICBjb25zdCBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG4iLCJjb25zdCBkYXRlTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nKSA9PiB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgXCJQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICBjYXNlIFwiUFBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwibG9uZ1wiIH0pO1xuICAgIGNhc2UgXCJQUFBQXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gIH1cbn07XG5cbmNvbnN0IHRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSBcInBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgIGNhc2UgXCJwcFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgIGNhc2UgXCJwcHBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgY2FzZSBcInBwcHBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgfVxufTtcblxuY29uc3QgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgY29uc3QgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgY29uc3QgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgY29uc3QgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcblxuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG5cbiAgbGV0IGRhdGVUaW1lRm9ybWF0O1xuXG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlIFwiUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQUFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkYXRlVGltZUZvcm1hdFxuICAgIC5yZXBsYWNlKFwie3tkYXRlfX1cIiwgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKVxuICAgIC5yZXBsYWNlKFwie3t0aW1lfX1cIiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcixcbn07XG4iLCJjb25zdCBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvO1xuY29uc3Qgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvO1xuXG5jb25zdCB0aHJvd1Rva2VucyA9IFtcIkRcIiwgXCJERFwiLCBcIllZXCIsIFwiWVlZWVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIGRheU9mWWVhclRva2VuUkUudGVzdCh0b2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHdlZWtZZWFyVG9rZW5SRS50ZXN0KHRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgY29uc3QgX21lc3NhZ2UgPSBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KTtcbiAgY29uc29sZS53YXJuKF9tZXNzYWdlKTtcbiAgaWYgKHRocm93VG9rZW5zLmluY2x1ZGVzKHRva2VuKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoX21lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gXCJZXCIgPyBcInllYXJzXCIgOiBcImRheXMgb2YgdGhlIG1vbnRoXCI7XG4gIHJldHVybiBgVXNlIFxcYCR7dG9rZW4udG9Mb3dlckNhc2UoKX1cXGAgaW5zdGVhZCBvZiBcXGAke3Rva2VufVxcYCAoaW4gXFxgJHtmb3JtYXR9XFxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcXGAke2lucHV0fVxcYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kYDtcbn1cbiIsImltcG9ydCB7IGRlZmF1bHRMb2NhbGUgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRMb2NhbGUuanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0dGVycyB9IGZyb20gXCIuL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMuanNcIjtcbmltcG9ydCB7IGxvbmdGb3JtYXR0ZXJzIH0gZnJvbSBcIi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMuanNcIjtcbmltcG9ydCB7XG4gIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sXG4gIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbixcbiAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcixcbn0gZnJvbSBcIi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanNcIjtcbmltcG9ydCB7IGlzVmFsaWQgfSBmcm9tIFwiLi9pc1ZhbGlkLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLy8gUmV4cG9ydHMgb2YgaW50ZXJuYWwgZm9yIGxpYnJhcmllcyB0byB1c2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzYzOCNpc3N1ZWNvbW1lbnQtMTg3NzA4Mjg3NFxuZXhwb3J0IHsgZm9ybWF0dGVycywgbG9uZ0Zvcm1hdHRlcnMgfTtcblxuLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG5jb25zdCBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID1cbiAgL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG5jb25zdCBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG5jb25zdCBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG5jb25zdCBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xuY29uc3QgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG5leHBvcnQgeyBmb3JtYXQgYXMgZm9ybWF0RGF0ZSB9O1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZm9ybWF0fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAYWxpYXMgZm9ybWF0RGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IOKaoO+4jyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyKVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcikpLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gZm9ybWF0IC0gVGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3MgdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgbG9jYWxlID0gb3B0aW9ucz8ubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zLmxvY2FsZSA/PyBkZWZhdWx0TG9jYWxlO1xuXG4gIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9XG4gICAgb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIDE7XG5cbiAgY29uc3Qgd2Vla1N0YXJ0c09uID1cbiAgICBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgMDtcblxuICBjb25zdCBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuXG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7XG4gIH1cblxuICBsZXQgcGFydHMgPSBmb3JtYXRTdHJcbiAgICAubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApXG4gICAgLm1hcCgoc3Vic3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCJwXCIgfHwgZmlyc3RDaGFyYWN0ZXIgPT09IFwiUFwiKSB7XG4gICAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1YnN0cmluZztcbiAgICB9KVxuICAgIC5qb2luKFwiXCIpXG4gICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApXG4gICAgLm1hcCgoc3Vic3RyaW5nKSA9PiB7XG4gICAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBcIidcIiB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl0pIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogdHJ1ZSwgdmFsdWU6IHN1YnN0cmluZyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgIFwiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGBcIiArXG4gICAgICAgICAgICBmaXJzdENoYXJhY3RlciArXG4gICAgICAgICAgICBcImBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBzdWJzdHJpbmcgfTtcbiAgICB9KTtcblxuICAvLyBpbnZva2UgbG9jYWxpemUgcHJlcHJvY2Vzc29yIChvbmx5IGZvciBmcmVuY2ggbG9jYWxlcyBhdCB0aGUgbW9tZW50KVxuICBpZiAobG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3Nvcikge1xuICAgIHBhcnRzID0gbG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcihvcmlnaW5hbERhdGUsIHBhcnRzKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGUsXG4gIH07XG5cbiAgcmV0dXJuIHBhcnRzXG4gICAgLm1hcCgocGFydCkgPT4ge1xuICAgICAgaWYgKCFwYXJ0LmlzVG9rZW4pIHJldHVybiBwYXJ0LnZhbHVlO1xuXG4gICAgICBjb25zdCB0b2tlbiA9IHBhcnQudmFsdWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiZcbiAgICAgICAgICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pKSB8fFxuICAgICAgICAoIW9wdGlvbnM/LnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMgJiZcbiAgICAgICAgICBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSlcbiAgICAgICkge1xuICAgICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIFN0cmluZyhkYXRlKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbdG9rZW5bMF1dO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlcihvcmlnaW5hbERhdGUsIHRva2VuLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICBjb25zdCBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG5cbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdDtcbiIsImltcG9ydCB7IGRlZmF1bHRMb2NhbGUgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRMb2NhbGUuanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBjb21wYXJlQXNjIH0gZnJvbSBcIi4vY29tcGFyZUFzYy5qc1wiO1xuaW1wb3J0IHsgbWludXRlc0luRGF5LCBtaW51dGVzSW5Nb250aCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluTW9udGhzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluTW9udGhzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5TZWNvbmRzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluU2Vjb25kcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZm9ybWF0RGlzdGFuY2V9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBmb3JtYXREaXN0YW5jZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzIGluIHdvcmRzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcyBpbiB3b3Jkcy5cbiAqXG4gKiB8IERpc3RhbmNlIGJldHdlZW4gZGF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IDAgLi4uIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbGVzcyB0aGFuIGEgbWludXRlICB8XG4gKiB8IDMwIHNlY3MgLi4uIDEgbWluIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSBtaW51dGUgICAgICAgICAgICB8XG4gKiB8IDEgbWluIDMwIHNlY3MgLi4uIDQ0IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWzIuLjQ0XSBtaW51dGVzICAgICB8XG4gKiB8IDQ0IG1pbnMgLi4uIDMwIHNlY3MgLi4uIDg5IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgMSBob3VyICAgICAgICB8XG4gKiB8IDg5IG1pbnMgMzAgc2VjcyAuLi4gMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgWzIuLjI0XSBob3VycyB8XG4gKiB8IDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDQxIGhycyA1OSBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgIHwgMSBkYXkgICAgICAgICAgICAgICB8XG4gKiB8IDQxIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDI5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAgICAgICAgIHwgWzIuLjMwXSBkYXlzICAgICAgICB8XG4gKiB8IDI5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gNDQgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIHwgYWJvdXQgMSBtb250aCAgICAgICB8XG4gKiB8IDQ0IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gNTkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIHwgYWJvdXQgMiBtb250aHMgICAgICB8XG4gKiB8IDU5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gMSB5ciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWzIuLjEyXSBtb250aHMgICAgICB8XG4gKiB8IDEgeXIgLi4uIDEgeXIgMyBtb250aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgMSB5ZWFyICAgICAgICB8XG4gKiB8IDEgeXIgMyBtb250aHMgLi4uIDEgeXIgOSBtb250aCBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlciAxIHllYXIgICAgICAgICB8XG4gKiB8IDEgeXIgOSBtb250aHMgLi4uIDIgeXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxtb3N0IDIgeWVhcnMgICAgICB8XG4gKiB8IE4geXJzIC4uLiBOIHlycyAzIG1vbnRocyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgTiB5ZWFycyAgICAgICB8XG4gKiB8IE4geXJzIDMgbW9udGhzIC4uLiBOIHlycyA5IG1vbnRocyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlciBOIHllYXJzICAgICAgICB8XG4gKiB8IE4geXJzIDkgbW9udGhzIC4uLiBOKzEgeXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxtb3N0IE4rMSB5ZWFycyAgICB8XG4gKlxuICogV2l0aCBgb3B0aW9ucy5pbmNsdWRlU2Vjb25kcyA9PSB0cnVlYDpcbiAqIHwgRGlzdGFuY2UgYmV0d2VlbiBkYXRlcyB8IFJlc3VsdCAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgMCBzZWNzIC4uLiA1IHNlY3MgICAgICB8IGxlc3MgdGhhbiA1IHNlY29uZHMgIHxcbiAqIHwgNSBzZWNzIC4uLiAxMCBzZWNzICAgICB8IGxlc3MgdGhhbiAxMCBzZWNvbmRzIHxcbiAqIHwgMTAgc2VjcyAuLi4gMjAgc2VjcyAgICB8IGxlc3MgdGhhbiAyMCBzZWNvbmRzIHxcbiAqIHwgMjAgc2VjcyAuLi4gNDAgc2VjcyAgICB8IGhhbGYgYSBtaW51dGUgICAgICAgIHxcbiAqIHwgNDAgc2VjcyAuLi4gNjAgc2VjcyAgICB8IGxlc3MgdGhhbiBhIG1pbnV0ZSAgIHxcbiAqIHwgNjAgc2VjcyAuLi4gOTAgc2VjcyAgICB8IDEgbWludXRlICAgICAgICAgICAgIHxcbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGluIHdvcmRzXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBiYXNlRGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXREaXN0YW5jZWAgcHJvcGVydHlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hhdCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiAyIEp1bHkgMjAxNCBhbmQgMSBKYW51YXJ5IDIwMTU/XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZShuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgbmV3IERhdGUoMjAxNSwgMCwgMSkpXG4gKiAvLz0+ICc2IG1vbnRocydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hhdCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiAxIEphbnVhcnkgMjAxNSAwMDowMDoxNVxuICogLy8gYW5kIDEgSmFudWFyeSAyMDE1IDAwOjAwOjAwLCBpbmNsdWRpbmcgc2Vjb25kcz9cbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlKFxuICogICBuZXcgRGF0ZSgyMDE1LCAwLCAxLCAwLCAwLCAxNSksXG4gKiAgIG5ldyBEYXRlKDIwMTUsIDAsIDEsIDAsIDAsIDApLFxuICogICB7IGluY2x1ZGVTZWNvbmRzOiB0cnVlIH1cbiAqIClcbiAqIC8vPT4gJ2xlc3MgdGhhbiAyMCBzZWNvbmRzJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGF0IGlzIHRoZSBkaXN0YW5jZSBmcm9tIDEgSmFudWFyeSAyMDE2XG4gKiAvLyB0byAxIEphbnVhcnkgMjAxNSwgd2l0aCBhIHN1ZmZpeD9cbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlKG5ldyBEYXRlKDIwMTUsIDAsIDEpLCBuZXcgRGF0ZSgyMDE2LCAwLCAxKSwge1xuICogICBhZGRTdWZmaXg6IHRydWVcbiAqIH0pXG4gKiAvLz0+ICdhYm91dCAxIHllYXIgYWdvJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIDEgQXVndXN0IDIwMTYgYW5kIDEgSmFudWFyeSAyMDE1IGluIEVzcGVyYW50bz9cbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2UobmV3IERhdGUoMjAxNiwgNywgMSksIG5ldyBEYXRlKDIwMTUsIDAsIDEpLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICdwbGkgb2wgMSBqYXJvJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9ucy5sb2NhbGUgPz8gZGVmYXVsdExvY2FsZTtcbiAgY29uc3QgbWludXRlc0luQWxtb3N0VHdvRGF5cyA9IDI1MjA7XG5cbiAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSk7XG5cbiAgaWYgKGlzTmFOKGNvbXBhcmlzb24pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTtcblxuICBjb25zdCBsb2NhbGl6ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgYWRkU3VmZml4OiBvcHRpb25zPy5hZGRTdWZmaXgsXG4gICAgY29tcGFyaXNvbjogY29tcGFyaXNvbixcbiAgfSk7XG5cbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICAuLi4oY29tcGFyaXNvbiA+IDAgPyBbZWFybGllckRhdGUsIGxhdGVyRGF0ZV0gOiBbbGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV0pLFxuICApO1xuXG4gIGNvbnN0IHNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7XG4gIGNvbnN0IG9mZnNldEluU2Vjb25kcyA9XG4gICAgKGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllckRhdGVfKSAtXG4gICAgICBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyRGF0ZV8pKSAvXG4gICAgMTAwMDtcbiAgY29uc3QgbWludXRlcyA9IE1hdGgucm91bmQoKHNlY29uZHMgLSBvZmZzZXRJblNlY29uZHMpIC8gNjApO1xuICBsZXQgbW9udGhzO1xuXG4gIC8vIDAgdXAgdG8gMiBtaW5zXG4gIGlmIChtaW51dGVzIDwgMikge1xuICAgIGlmIChvcHRpb25zPy5pbmNsdWRlU2Vjb25kcykge1xuICAgICAgaWYgKHNlY29uZHMgPCA1KSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhTZWNvbmRzXCIsIDUsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCAxMCkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwibGVzc1RoYW5YU2Vjb25kc1wiLCAxMCwgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDIwKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhTZWNvbmRzXCIsIDIwLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNDApIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImhhbGZBTWludXRlXCIsIDAsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA2MCkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwibGVzc1RoYW5YTWludXRlc1wiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhNaW51dGVzXCIsIDEsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhNaW51dGVzXCIsIDEsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieE1pbnV0ZXNcIiwgbWludXRlcywgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyIG1pbnMgdXAgdG8gMC43NSBocnNcbiAgfSBlbHNlIGlmIChtaW51dGVzIDwgNDUpIHtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieE1pbnV0ZXNcIiwgbWludXRlcywgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDAuNzUgaHJzIHVwIHRvIDEuNSBocnNcbiAgfSBlbHNlIGlmIChtaW51dGVzIDwgOTApIHtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwiYWJvdXRYSG91cnNcIiwgMSwgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDEuNSBocnMgdXAgdG8gMjQgaHJzXG4gIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkge1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5yb3VuZChtaW51dGVzIC8gNjApO1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJhYm91dFhIb3Vyc1wiLCBob3VycywgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDEgZGF5IHVwIHRvIDEuNzUgZGF5c1xuICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5BbG1vc3RUd29EYXlzKSB7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhEYXlzXCIsIDEsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAxLjc1IGRheXMgdXAgdG8gMzAgZGF5c1xuICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCkge1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5EYXkpO1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJ4RGF5c1wiLCBkYXlzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgLy8gMSBtb250aCB1cCB0byAyIG1vbnRoc1xuICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCAqIDIpIHtcbiAgICBtb250aHMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImFib3V0WE1vbnRoc1wiLCBtb250aHMsIGxvY2FsaXplT3B0aW9ucyk7XG4gIH1cblxuICBtb250aHMgPSBkaWZmZXJlbmNlSW5Nb250aHMoZWFybGllckRhdGVfLCBsYXRlckRhdGVfKTtcblxuICAvLyAyIG1vbnRocyB1cCB0byAxMiBtb250aHNcbiAgaWYgKG1vbnRocyA8IDEyKSB7XG4gICAgY29uc3QgbmVhcmVzdE1vbnRoID0gTWF0aC5yb3VuZChtaW51dGVzIC8gbWludXRlc0luTW9udGgpO1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJ4TW9udGhzXCIsIG5lYXJlc3RNb250aCwgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDEgeWVhciB1cCB0byBtYXggRGF0ZVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPSBtb250aHMgJSAxMjtcbiAgICBjb25zdCB5ZWFycyA9IE1hdGgudHJ1bmMobW9udGhzIC8gMTIpO1xuXG4gICAgLy8gTiB5ZWFycyB1cCB0byAxIHllYXJzIDMgbW9udGhzXG4gICAgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCAzKSB7XG4gICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwiYWJvdXRYWWVhcnNcIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAgIC8vIE4geWVhcnMgMyBtb250aHMgdXAgdG8gTiB5ZWFycyA5IG1vbnRoc1xuICAgIH0gZWxzZSBpZiAobW9udGhzU2luY2VTdGFydE9mWWVhciA8IDkpIHtcbiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJvdmVyWFllYXJzXCIsIHllYXJzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgICAvLyBOIHllYXJzIDkgbW9udGhzIHVwIHRvIE4geWVhciAxMiBtb250aHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImFsbW9zdFhZZWFyc1wiLCB5ZWFycyArIDEsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgfVxuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7XG4iLCJpbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcblxuaW1wb3J0IHsgZm9ybWF0RGlzdGFuY2UgfSBmcm9tIFwiLi9mb3JtYXREaXN0YW5jZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZm9ybWF0RGlzdGFuY2VUb05vd30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdERpc3RhbmNlVG9Ob3dcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlIGFuZCBub3cgaW4gd29yZHMuXG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlIGFuZCBub3cgaW4gd29yZHMuXG4gKlxuICogfCBEaXN0YW5jZSB0byBub3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAwIC4uLiAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxlc3MgdGhhbiBhIG1pbnV0ZSAgfFxuICogfCAzMCBzZWNzIC4uLiAxIG1pbiAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEgbWludXRlICAgICAgICAgICAgfFxuICogfCAxIG1pbiAzMCBzZWNzIC4uLiA0NCBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsyLi40NF0gbWludXRlcyAgICAgfFxuICogfCA0NCBtaW5zIC4uLiAzMCBzZWNzIC4uLiA4OSBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IDEgaG91ciAgICAgICAgfFxuICogfCA4OSBtaW5zIDMwIHNlY3MgLi4uIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IFsyLi4yNF0gaG91cnMgfFxuICogfCAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiA0MSBocnMgNTkgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICB8IDEgZGF5ICAgICAgICAgICAgICAgfFxuICogfCA0MSBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiAyOSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgICAgICAgICB8IFsyLi4zMF0gZGF5cyAgICAgICAgfFxuICogfCAyOSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDQ0IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyB8IGFib3V0IDEgbW9udGggICAgICAgfFxuICogfCA0NCBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDU5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyB8IGFib3V0IDIgbW9udGhzICAgICAgfFxuICogfCA1OSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDEgeXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsyLi4xMl0gbW9udGhzICAgICAgfFxuICogfCAxIHlyIC4uLiAxIHlyIDMgbW9udGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IDEgeWVhciAgICAgICAgfFxuICogfCAxIHlyIDMgbW9udGhzIC4uLiAxIHlyIDkgbW9udGggcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXIgMSB5ZWFyICAgICAgICAgfFxuICogfCAxIHlyIDkgbW9udGhzIC4uLiAyIHlycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbW9zdCAyIHllYXJzICAgICAgfFxuICogfCBOIHlycyAuLi4gTiB5cnMgMyBtb250aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IE4geWVhcnMgICAgICAgfFxuICogfCBOIHlycyAzIG1vbnRocyAuLi4gTiB5cnMgOSBtb250aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXIgTiB5ZWFycyAgICAgICAgfFxuICogfCBOIHlycyA5IG1vbnRocyAuLi4gTisxIHlycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbW9zdCBOKzEgeWVhcnMgICAgfFxuICpcbiAqIFdpdGggYG9wdGlvbnMuaW5jbHVkZVNlY29uZHMgPT0gdHJ1ZWA6XG4gKiB8IERpc3RhbmNlIHRvIG5vdyAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IDAgc2VjcyAuLi4gNSBzZWNzICAgfCBsZXNzIHRoYW4gNSBzZWNvbmRzICB8XG4gKiB8IDUgc2VjcyAuLi4gMTAgc2VjcyAgfCBsZXNzIHRoYW4gMTAgc2Vjb25kcyB8XG4gKiB8IDEwIHNlY3MgLi4uIDIwIHNlY3MgfCBsZXNzIHRoYW4gMjAgc2Vjb25kcyB8XG4gKiB8IDIwIHNlY3MgLi4uIDQwIHNlY3MgfCBoYWxmIGEgbWludXRlICAgICAgICB8XG4gKiB8IDQwIHNlY3MgLi4uIDYwIHNlY3MgfCBsZXNzIHRoYW4gYSBtaW51dGUgICB8XG4gKiB8IDYwIHNlY3MgLi4uIDkwIHNlY3MgfCAxIG1pbnV0ZSAgICAgICAgICAgICB8XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBpbiB3b3Jkc1xuICpcbiAqIEB0aHJvd3MgYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0RGlzdGFuY2VgIHByb3BlcnR5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDEgSmFudWFyeSAyMDE1LCB3aGF0IGlzIHRoZSBkaXN0YW5jZSB0byAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3coXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIpXG4gKiApXG4gKiAvLz0+ICc2IG1vbnRocydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgbm93IGlzIDEgSmFudWFyeSAyMDE1IDAwOjAwOjAwLFxuICogLy8gd2hhdCBpcyB0aGUgZGlzdGFuY2UgdG8gMSBKYW51YXJ5IDIwMTUgMDA6MDA6MTUsIGluY2x1ZGluZyBzZWNvbmRzP1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vdyhcbiAqICAgbmV3IERhdGUoMjAxNSwgMCwgMSwgMCwgMCwgMTUpLFxuICogICB7aW5jbHVkZVNlY29uZHM6IHRydWV9XG4gKiApXG4gKiAvLz0+ICdsZXNzIHRoYW4gMjAgc2Vjb25kcydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMSBKYW51YXJ5IDIwMTUsXG4gKiAvLyB3aGF0IGlzIHRoZSBkaXN0YW5jZSB0byAxIEphbnVhcnkgMjAxNiwgd2l0aCBhIHN1ZmZpeD9cbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3coXG4gKiAgIG5ldyBEYXRlKDIwMTYsIDAsIDEpLFxuICogICB7YWRkU3VmZml4OiB0cnVlfVxuICogKVxuICogLy89PiAnaW4gYWJvdXQgMSB5ZWFyJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAxIEphbnVhcnkgMjAxNSxcbiAqIC8vIHdoYXQgaXMgdGhlIGRpc3RhbmNlIHRvIDEgQXVndXN0IDIwMTYgaW4gRXNwZXJhbnRvP1xuICogY29uc3QgZW9Mb2NhbGUgPSByZXF1aXJlKCdkYXRlLWZucy9sb2NhbGUvZW8nKVxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vdyhcbiAqICAgbmV3IERhdGUoMjAxNiwgNywgMSksXG4gKiAgIHtsb2NhbGU6IGVvTG9jYWxlfVxuICogKVxuICogLy89PiAncGxpIG9sIDEgamFybydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlVG9Ob3coZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0RGlzdGFuY2UoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZVRvTm93O1xuIiwiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcblxuLyoqXG4gKiBAbmFtZSB0cmFuc3Bvc2VcbiAqIEBjYXRlZ29yeSBHZW5lcmljIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFRyYW5zcG9zZSB0aGUgZGF0ZSB0byB0aGUgZ2l2ZW4gY29uc3RydWN0b3IuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZnVuY3Rpb24gdHJhbnNwb3NlcyB0aGUgZGF0ZSB0byB0aGUgZ2l2ZW4gY29uc3RydWN0b3IuIEl0IGhlbHBzIHlvdVxuICogdG8gdHJhbnNwb3NlIHRoZSBkYXRlIGluIHRoZSBzeXN0ZW0gdGltZSB6b25lIHRvIHNheSBgVVRDRGF0ZWAgb3IgYW55IG90aGVyXG4gKiBkYXRlIGV4dGVuc2lvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIElucHV0RGF0ZSAtIFRoZSBpbnB1dCBgRGF0ZWAgdHlwZSBkZXJpdmVkIGZyb20gdGhlIHBhc3NlZCBhcmd1bWVudC5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUgZGVyaXZlZCBmcm9tIHRoZSBwYXNzZWQgY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byB1c2UgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBjb25zdHJ1Y3RvciAtIFRoZSBkYXRlIGNvbnN0cnVjdG9yIHRvIHVzZVxuICpcbiAqIEByZXR1cm5zIERhdGUgdHJhbnNwb3NlZCB0byB0aGUgZ2l2ZW4gY29uc3RydWN0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIEp1bHkgMTAsIDIwMjIgMDA6MDAgaW4gbG9jYWxlIHRpbWUgem9uZVxuICogY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDIwMjIsIDYsIDEwKVxuICogLy89PiAnU3VuIEp1bCAxMCAyMDIyIDAwOjAwOjAwIEdNVCswODAwIChTaW5nYXBvcmUgU3RhbmRhcmQgVGltZSknXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRyYW5zcG9zZSB0aGUgZGF0ZSB0byBKdWx5IDEwLCAyMDIyIDAwOjAwIGluIFVUQ1xuICogdHJhbnNwb3NlKGRhdGUsIFVUQ0RhdGUpXG4gKiAvLz0+ICdTdW4gSnVsIDEwIDIwMjIgMDA6MDA6MDAgR01UKzAwMDAgKENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lKSdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZShkYXRlLCBjb25zdHJ1Y3Rvcikge1xuICBjb25zdCBkYXRlXyA9IGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpXG4gICAgPyBuZXcgY29uc3RydWN0b3IoMClcbiAgICA6IGNvbnN0cnVjdEZyb20oY29uc3RydWN0b3IsIDApO1xuICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuICBkYXRlXy5zZXRIb3VycyhcbiAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG5mdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGU/LmNvbnN0cnVjdG9yID09PSBjb25zdHJ1Y3RvclxuICApO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHRyYW5zcG9zZTtcbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3ROb3cgfSBmcm9tIFwiLi9jb25zdHJ1Y3ROb3cuanNcIjtcbmltcG9ydCB7IGlzU2FtZURheSB9IGZyb20gXCIuL2lzU2FtZURheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgaXNUb2RheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGlzVG9kYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdG9kYXk/XG4gKiBAcHVyZSBmYWxzZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGdpdmVuIGRhdGUgdG9kYXk/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgdG9kYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgNiBPY3RvYmVyIDIwMTQsIGlzIDYgT2N0b2JlciAxNDowMDowMCB0b2RheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzVG9kYXkobmV3IERhdGUoMjAxNCwgOSwgNiwgMTQsIDApKVxuICogLy89PiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvZGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGlzU2FtZURheShcbiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLFxuICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKSxcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1RvZGF5O1xuIiwiaW1wb3J0IHR5cGUgeyBJMThuLCBJMThuQ2xpZW50IH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuXG5pbXBvcnQgeyBUWkRhdGVNaW5pIGFzIFRaRGF0ZSB9IGZyb20gJ0BkYXRlLWZucy90ei9kYXRlL21pbmknXG5pbXBvcnQgeyBmb3JtYXQsIGZvcm1hdERpc3RhbmNlVG9Ob3csIHRyYW5zcG9zZSB9IGZyb20gJ2RhdGUtZm5zJ1xuXG5leHBvcnQgdHlwZSBGb3JtYXREYXRlQXJncyA9IHtcbiAgZGF0ZTogRGF0ZSB8IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZFxuICBpMThuOiBJMThuPHVua25vd24sIHVua25vd24+IHwgSTE4bkNsaWVudDx1bmtub3duPlxuICBwYXR0ZXJuOiBzdHJpbmdcbiAgdGltZXpvbmU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGUgPSAoeyBkYXRlLCBpMThuLCBwYXR0ZXJuLCB0aW1lem9uZSB9OiBGb3JtYXREYXRlQXJncyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRoZURhdGUgPSBuZXcgVFpEYXRlKG5ldyBEYXRlKGRhdGUpKVxuXG4gIGlmICh0aW1lem9uZSkge1xuICAgIGNvbnN0IERhdGVXaXRoT3JpZ2luYWxUeiA9IFRaRGF0ZS50eih0aW1lem9uZSlcblxuICAgIGNvbnN0IG1vZGlmaWVkRGF0ZSA9IHRoZURhdGUud2l0aFRpbWVab25lKHRpbWV6b25lKVxuXG4gICAgLy8gVHJhbnNwb3NlIHRoZSBkYXRlIHRvIHRoZSBzZWxlY3RlZCB0aW1lem9uZVxuICAgIGNvbnN0IGRhdGVXaXRoVGltZXpvbmUgPSB0cmFuc3Bvc2UobW9kaWZpZWREYXRlLCBEYXRlV2l0aE9yaWdpbmFsVHopXG5cbiAgICAvLyBUcmFuc3Bvc2UgdGhlIGRhdGUgdG8gdGhlIHVzZXIncyB0aW1lem9uZSAtIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHJlYWN0LWRhdGVwaWNrZXIgY29tcG9uZW50IGluc2lzdHMgb24gZGlzcGxheWluZyB0aGUgZGF0ZSBpbiB0aGUgdXNlcidzIHRpbWV6b25lXG4gICAgcmV0dXJuIGkxOG4uZGF0ZUZOU1xuICAgICAgPyBmb3JtYXQoZGF0ZVdpdGhUaW1lem9uZSwgcGF0dGVybiwgeyBsb2NhbGU6IGkxOG4uZGF0ZUZOUyB9KVxuICAgICAgOiBgJHtpMThuLnQoJ2dlbmVyYWw6bG9hZGluZycpfS4uLmBcbiAgfVxuXG4gIHJldHVybiBpMThuLmRhdGVGTlNcbiAgICA/IGZvcm1hdCh0aGVEYXRlLCBwYXR0ZXJuLCB7IGxvY2FsZTogaTE4bi5kYXRlRk5TIH0pXG4gICAgOiBgJHtpMThuLnQoJ2dlbmVyYWw6bG9hZGluZycpfS4uLmBcbn1cblxudHlwZSBGb3JtYXRUaW1lVG9Ob3dBcmdzID0ge1xuICBkYXRlOiBEYXRlIHwgbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGkxOG46IEkxOG48dW5rbm93biwgdW5rbm93bj4gfCBJMThuQ2xpZW50PHVua25vd24+XG59XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRUaW1lVG9Ob3cgPSAoeyBkYXRlLCBpMThuIH06IEZvcm1hdFRpbWVUb05vd0FyZ3MpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0aGVEYXRlID0gdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlXG4gIHJldHVybiBpMThuPy5kYXRlRk5TXG4gICAgPyBmb3JtYXREaXN0YW5jZVRvTm93KHRoZURhdGUsIHsgbG9jYWxlOiBpMThuLmRhdGVGTlMgfSlcbiAgICA6IGAke2kxOG4udCgnZ2VuZXJhbDpsb2FkaW5nJyl9Li4uYFxufVxuIiwidHlwZSBTZXJpYWxpemVkTGV4aWNhbEVkaXRvciA9IHtcbiAgcm9vdDoge1xuICAgIGNoaWxkcmVuOiBBcnJheTx7IGNoaWxkcmVuPzogQXJyYXk8eyB0eXBlOiBzdHJpbmcgfT47IHR5cGU6IHN0cmluZyB9PlxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcmlhbGl6ZWRMZXhpY2FsRWRpdG9yKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2VyaWFsaXplZExleGljYWxFZGl0b3Ige1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAncm9vdCcgaW4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdExleGljYWxEb2NUaXRsZShcbiAgZWRpdG9yU3RhdGU6IEFycmF5PHsgY2hpbGRyZW4/OiBBcnJheTx7IHR5cGU6IHN0cmluZyB9PjsgdHlwZTogc3RyaW5nIH0+LFxuICB0ZXh0Q29udGVudDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgZm9yIChjb25zdCBub2RlIG9mIGVkaXRvclN0YXRlKSB7XG4gICAgaWYgKCd0ZXh0JyBpbiBub2RlICYmIG5vZGUudGV4dCkge1xuICAgICAgdGV4dENvbnRlbnQgKz0gbm9kZS50ZXh0IGFzIHN0cmluZ1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISgnY2hpbGRyZW4nIGluIG5vZGUpKSB7XG4gICAgICAgIHRleHRDb250ZW50ICs9IGBbJHtub2RlLnR5cGV9XWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCdjaGlsZHJlbicgaW4gbm9kZSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICB0ZXh0Q29udGVudCArPSBmb3JtYXRMZXhpY2FsRG9jVGl0bGUobm9kZS5jaGlsZHJlbiBhcyBBcnJheTx7IHR5cGU6IHN0cmluZyB9PiwgdGV4dENvbnRlbnQpXG4gICAgfVxuICB9XG4gIHJldHVybiB0ZXh0Q29udGVudFxufVxuIiwiZXhwb3J0IGNvbnN0IGZvcm1hdFJlbGF0aW9uc2hpcFRpdGxlID0gKGRhdGEpOiBzdHJpbmcgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLmlkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKCcsICcpXG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZGF0YS5pZCB8fCAnJ1xuICB9XG5cbiAgcmV0dXJuIFN0cmluZyhkYXRhKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBDbGllbnRHbG9iYWxDb25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgZm9ybWF0RG9jVGl0bGUgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG50eXBlIElEb2N1bWVudFRpdGxlQ29udGV4dCA9IHtcbiAgc2V0RG9jdW1lbnRUaXRsZTogKHRpdGxlOiBzdHJpbmcpID0+IHZvaWRcbiAgdGl0bGU6IHN0cmluZ1xufVxuXG5jb25zdCBEb2N1bWVudFRpdGxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30gYXMgSURvY3VtZW50VGl0bGVDb250ZXh0KVxuXG5leHBvcnQgY29uc3QgdXNlRG9jdW1lbnRUaXRsZSA9ICgpOiBJRG9jdW1lbnRUaXRsZUNvbnRleHQgPT4gdXNlKERvY3VtZW50VGl0bGVDb250ZXh0KVxuXG5leHBvcnQgY29uc3QgRG9jdW1lbnRUaXRsZVByb3ZpZGVyOiBSZWFjdC5GQzx7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn0+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCB7IGlkLCBjb2xsZWN0aW9uU2x1ZywgZGF0YSwgZG9jQ29uZmlnLCBnbG9iYWxTbHVnLCBpbml0aWFsRGF0YSB9ID0gdXNlRG9jdW1lbnRJbmZvKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICBhZG1pbjogeyBkYXRlRm9ybWF0IH0sXG4gICAgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgW3RpdGxlLCBzZXREb2N1bWVudFRpdGxlXSA9IHVzZVN0YXRlKCgpID0+XG4gICAgZm9ybWF0RG9jVGl0bGUoe1xuICAgICAgY29sbGVjdGlvbkNvbmZpZzogY29sbGVjdGlvblNsdWcgPyAoZG9jQ29uZmlnIGFzIENsaWVudENvbGxlY3Rpb25Db25maWcpIDogdW5kZWZpbmVkLFxuICAgICAgZGF0YTogeyAuLi4oaW5pdGlhbERhdGEgfHwge30pLCBpZCB9LFxuICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgIGZhbGxiYWNrOiBpZD8udG9TdHJpbmcoKSxcbiAgICAgIGdsb2JhbENvbmZpZzogZ2xvYmFsU2x1ZyA/IChkb2NDb25maWcgYXMgQ2xpZW50R2xvYmFsQ29uZmlnKSA6IHVuZGVmaW5lZCxcbiAgICAgIGkxOG4sXG4gICAgfSksXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldERvY3VtZW50VGl0bGUoXG4gICAgICBmb3JtYXREb2NUaXRsZSh7XG4gICAgICAgIGNvbGxlY3Rpb25Db25maWc6IGNvbGxlY3Rpb25TbHVnID8gKGRvY0NvbmZpZyBhcyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0YTogeyAuLi5kYXRhLCBpZCB9LFxuICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICBmYWxsYmFjazogaWQ/LnRvU3RyaW5nKCksXG4gICAgICAgIGdsb2JhbENvbmZpZzogZ2xvYmFsU2x1ZyA/IChkb2NDb25maWcgYXMgQ2xpZW50R2xvYmFsQ29uZmlnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaTE4bixcbiAgICAgIH0pLFxuICAgIClcbiAgfSwgW2RhdGEsIGRhdGVGb3JtYXQsIGkxOG4sIGlkLCBjb2xsZWN0aW9uU2x1ZywgZG9jQ29uZmlnLCBnbG9iYWxTbHVnXSlcblxuICByZXR1cm4gPERvY3VtZW50VGl0bGVDb250ZXh0IHZhbHVlPXt7IHNldERvY3VtZW50VGl0bGUsIHRpdGxlIH19PntjaGlsZHJlbn08L0RvY3VtZW50VGl0bGVDb250ZXh0PlxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyBkZXF1YWwgfSBmcm9tICdkZXF1YWwvbGl0ZScgLy8gbGl0ZTogbm8gbmVlZCBmb3IgTWFwIGFuZCBTZXQgc3VwcG9ydFxuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFByZWZlcmVuY2VzIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcGkuanMnXG5pbXBvcnQgeyBkZWVwTWVyZ2VTaW1wbGUgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvZGVlcE1lcmdlLmpzJ1xuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi9Db25maWcvaW5kZXguanMnXG5cbnR5cGUgUHJlZmVyZW5jZXNDb250ZXh0ID0ge1xuICBnZXRQcmVmZXJlbmNlOiA8VCA9IFByZWZlcmVuY2VzPihrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxUPlxuICAvKipcbiAgICogQHBhcmFtIGtleSAtIGEgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBwcm9wZXJ0eSBiZWluZyBzZXRcbiAgICogQHBhcmFtIHZhbHVlIC0gcHJlZmVyZW5jZSBkYXRhIHRvIHN0b3JlXG4gICAqIEBwYXJhbSBtZXJnZSAtIHdoZW4gdHJ1ZSB3aWxsIGNvbWJpbmUgdGhlIGV4aXN0aW5nIHByZWZlcmVuY2Ugb2JqZWN0IGJhdGNoIHRoZSBjaGFuZ2UgaW50byBvbmUgcmVxdWVzdCBmb3Igb2JqZWN0cywgZGVmYXVsdCA9IGZhbHNlXG4gICAqL1xuICBzZXRQcmVmZXJlbmNlOiA8VCA9IFByZWZlcmVuY2VzPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIG1lcmdlPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPlxufVxuXG5jb25zdCBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSBhcyBQcmVmZXJlbmNlc0NvbnRleHQpXG5cbmNvbnN0IHJlcXVlc3RPcHRpb25zID0gKHZhbHVlLCBsYW5ndWFnZSkgPT4gKHtcbiAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZSB9KSxcbiAgaGVhZGVyczoge1xuICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBsYW5ndWFnZSxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB9LFxufSlcblxuZXhwb3J0IGNvbnN0IFByZWZlcmVuY2VzUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VSZWYoe30gYXMgUHJlZmVyZW5jZXNDb250ZXh0KVxuICBjb25zdCBwcmVmZXJlbmNlc1JlZiA9IHVzZVJlZih7fSlcbiAgY29uc3QgcGVuZGluZ1VwZGF0ZSA9IHVzZVJlZih7fSlcbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgdXNlciB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHtcbiAgICByb3V0ZXM6IHsgYXBpIH0sXG4gIH0gPSBjb25maWdcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghdXNlcikge1xuICAgICAgLy8gY2xlYXIgcHJlZmVyZW5jZXMgYmV0d2VlbiB1c2Vyc1xuICAgICAgcHJlZmVyZW5jZXNSZWYuY3VycmVudCA9IHt9XG4gICAgfVxuICB9LCBbdXNlcl0pXG5cbiAgY29uc3QgZ2V0UHJlZmVyZW5jZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIDxUID0gdW5rbm93biw+KGtleTogc3RyaW5nKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICBjb25zdCBwcmVmcyA9IHByZWZlcmVuY2VzUmVmLmN1cnJlbnRcblxuICAgICAgaWYgKHR5cGVvZiBwcmVmc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gcHJlZnNba2V5XVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmU6ICh2YWx1ZTogVCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlcXVlc3RzLmdldChcbiAgICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgICAgICAgcGF0aDogYC9wYXlsb2FkLXByZWZlcmVuY2VzLyR7a2V5fWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApXG5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsXG5cbiAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgY29uc3QgcHJlZmVyZW5jZSA9IGF3YWl0IHJlcXVlc3QuanNvbigpXG4gICAgICAgICAgICB2YWx1ZSA9IHByZWZlcmVuY2UudmFsdWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVmZXJlbmNlc1JlZi5jdXJyZW50W2tleV0gPSB2YWx1ZVxuXG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSlcbiAgICAgICAgfSkoKVxuICAgICAgfSlcblxuICAgICAgcHJlZnNba2V5XSA9IHByb21pc2VcblxuICAgICAgcmV0dXJuIHByb21pc2VcbiAgICB9LFxuICAgIFtpMThuLmxhbmd1YWdlLCBhcGksIHByZWZlcmVuY2VzUmVmXSxcbiAgKVxuXG4gIGNvbnN0IHNldFByZWZlcmVuY2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXJnZSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAobWVyZ2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHByZWZlcmVuY2VzUmVmLmN1cnJlbnRba2V5XSA9IHZhbHVlXG5cbiAgICAgICAgYXdhaXQgcmVxdWVzdHMucG9zdChcbiAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICAgICAgcGF0aDogYC9wYXlsb2FkLXByZWZlcmVuY2VzLyR7a2V5fWAsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVxdWVzdE9wdGlvbnModmFsdWUsIGkxOG4ubGFuZ3VhZ2UpLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlXG4gICAgICBjb25zdCBjdXJyZW50UHJlZmVyZW5jZSA9IGF3YWl0IGdldFByZWZlcmVuY2Uoa2V5KVxuXG4gICAgICAvLyBoYW5kbGUgdmFsdWUgb2JqZWN0cyB3aGVyZSBtdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIHNldCB1bmRlciBvbmUga2V5XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIGN1cnJlbnRQcmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgLy8gbWVyZ2UgdGhlIHZhbHVlIHdpdGggYW55IGV4aXN0aW5nIHByZWZlcmVuY2UgZm9yIHRoZSBrZXlcbiAgICAgICAgaWYgKGN1cnJlbnRQcmVmZXJlbmNlKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBkZWVwTWVyZ2VTaW1wbGUoY3VycmVudFByZWZlcmVuY2UsIG5ld1ZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlcXVhbChuZXdWYWx1ZSwgY3VycmVudFByZWZlcmVuY2UpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgdGhlIHJlcXVlc3RlZCBjaGFuZ2VzIHRvIGEgcGVuZGluZ1VwZGF0ZSBiYXRjaCBmb3IgdGhlIGtleVxuICAgICAgICBwZW5kaW5nVXBkYXRlLmN1cnJlbnRba2V5XSA9IHtcbiAgICAgICAgICAuLi5wZW5kaW5nVXBkYXRlLmN1cnJlbnRba2V5XSxcbiAgICAgICAgICAuLi4obmV3VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3VmFsdWUgPT09IGN1cnJlbnRQcmVmZXJlbmNlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBwZW5kaW5nVXBkYXRlLmN1cnJlbnRba2V5XSA9IG5ld1ZhbHVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZVByZWZlcmVuY2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGNvbXBhcmUgdGhlIHZhbHVlIHN0b3JlZCBpbiBjb250ZXh0IGJlZm9yZSBzZW5kaW5nIHRvIGVsaW1pbmF0ZSBkdXBsaWNhdGUgcmVxdWVzdHNcbiAgICAgICAgaWYgKGRlcXVhbChwZW5kaW5nVXBkYXRlLmN1cnJlbnRba2V5XSwgcHJlZmVyZW5jZXNSZWYuY3VycmVudFtrZXldKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJlZmVyZW5jZSBzZXQgaW4gY29udGV4dCBoZXJlIHRvIHByZXZlbnQgb3RoZXIgdXBkYXRlUHJlZmVyZW5jZSBhdCB0aGUgc2FtZSB0aW1lXG4gICAgICAgIHByZWZlcmVuY2VzUmVmLmN1cnJlbnRba2V5XSA9IHBlbmRpbmdVcGRhdGUuY3VycmVudFtrZXldXG5cbiAgICAgICAgYXdhaXQgcmVxdWVzdHMucG9zdChcbiAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICAgICAgcGF0aDogYC9wYXlsb2FkLXByZWZlcmVuY2VzLyR7a2V5fWAsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmVxdWVzdE9wdGlvbnMocHJlZmVyZW5jZXNSZWYuY3VycmVudFtrZXldLCBpMThuLmxhbmd1YWdlKSxcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIHJlc2V0IGFueSBjaGFuZ2VzIGZvciB0aGlzIGtleSBhZnRlciBzZW5kaW5nIHRoZSByZXF1ZXN0XG4gICAgICAgIGRlbGV0ZSBwZW5kaW5nVXBkYXRlLmN1cnJlbnRba2V5XVxuICAgICAgfVxuXG4gICAgICAvLyB1c2UgdGltZW91dCB0byBhbGxvdyBtdWx0aXBsZSBjaGFuZ2VzIG9mIGRpZmZlcmVudCB2YWx1ZXMgdXNpbmcgdGhlIHNhbWUga2V5IGluIG9uZSByZXF1ZXN0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdm9pZCB1cGRhdGVQcmVmZXJlbmNlKClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYXBpLCBnZXRQcmVmZXJlbmNlLCBpMThuLmxhbmd1YWdlLCBwZW5kaW5nVXBkYXRlXSxcbiAgKVxuXG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXRQcmVmZXJlbmNlID0gZ2V0UHJlZmVyZW5jZVxuICBjb250ZXh0UmVmLmN1cnJlbnQuc2V0UHJlZmVyZW5jZSA9IHNldFByZWZlcmVuY2VcbiAgcmV0dXJuIDxDb250ZXh0IHZhbHVlPXtjb250ZXh0UmVmLmN1cnJlbnR9PntjaGlsZHJlbn08L0NvbnRleHQ+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcmVmZXJlbmNlcyA9ICgpOiBQcmVmZXJlbmNlc0NvbnRleHQgPT4gdXNlKENvbnRleHQpXG4iLCIvKipcbiAqIFZlcnkgc2ltcGxlLCBidXQgZmFzdCBkZWVwTWVyZ2UgaW1wbGVtZW50YXRpb24uIE9ubHkgZGVlcE1lcmdlcyBvYmplY3RzLCBub3QgYXJyYXlzIGFuZCBjbG9uZXMgZXZlcnl0aGluZy5cbiAqIERvIG5vdCB1c2UgdGhpcyBpZiB5b3VyIG9iamVjdCBjb250YWlucyBhbnkgY29tcGxleCBvYmplY3RzIGxpa2UgUmVhY3QgQ29tcG9uZW50cywgb3IgaWYgeW91IHdvdWxkIGxpa2UgdG8gY29tYmluZSBBcnJheXMuXG4gKiBJZiB5b3Ugb25seSBoYXZlIHNpbXBsZSBvYmplY3RzIGFuZCBuZWVkIGEgZmFzdCBkZWVwTWVyZ2UsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIGZvciB5b3UuXG4gKlxuICogb2JqMiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgb2JqMSAtIHRodXMgaWYgb2JqMiBoYXMgYSBrZXkgdGhhdCBvYmoxIGFsc28gaGFzLCBvYmoyJ3MgdmFsdWUgd2lsbCBiZSB1c2VkLlxuICpcbiAqIEBwYXJhbSBvYmoxIGJhc2Ugb2JqZWN0XG4gKiBAcGFyYW0gb2JqMiBvYmplY3QgdG8gbWVyZ2UgXCJpbnRvXCIgb2JqMVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcE1lcmdlU2ltcGxlPFQgPSBvYmplY3Q+KG9iajE6IG9iamVjdCwgb2JqMjogb2JqZWN0KTogVCB7XG4gIGNvbnN0IG91dHB1dCA9IHsgLi4ub2JqMSB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqMikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqMiwga2V5KSkge1xuICAgICAgaWYgKHR5cGVvZiBvYmoyW2tleV0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iajJba2V5XSkgJiYgb2JqMVtrZXldKSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcE1lcmdlU2ltcGxlKG9iajFba2V5XSwgb2JqMltrZXldKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBvYmoyW2tleV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0IGFzIFRcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBVcGxvYWRFZGl0cyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHR5cGUgVXBsb2FkRWRpdHNQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIGluaXRpYWxVcGxvYWRFZGl0cz86IFVwbG9hZEVkaXRzXG59XG5leHBvcnQgdHlwZSBVcGxvYWRFZGl0c0NvbnRleHQgPSB7XG4gIGdldFVwbG9hZEVkaXRzOiAoKSA9PiBVcGxvYWRFZGl0c1xuICByZXNldFVwbG9hZEVkaXRzOiAoKSA9PiB2b2lkXG4gIHVwZGF0ZVVwbG9hZEVkaXRzOiAoZWRpdHM6IFVwbG9hZEVkaXRzKSA9PiB2b2lkXG4gIHVwbG9hZEVkaXRzOiBVcGxvYWRFZGl0c1xufVxuXG5jb25zdCBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxVcGxvYWRFZGl0c0NvbnRleHQ+KHtcbiAgZ2V0VXBsb2FkRWRpdHM6ICgpID0+IHVuZGVmaW5lZCxcbiAgcmVzZXRVcGxvYWRFZGl0czogdW5kZWZpbmVkLFxuICB1cGRhdGVVcGxvYWRFZGl0czogdW5kZWZpbmVkLFxuICB1cGxvYWRFZGl0czogdW5kZWZpbmVkLFxufSlcblxuZXhwb3J0IGNvbnN0IFVwbG9hZEVkaXRzUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiwgaW5pdGlhbFVwbG9hZEVkaXRzIH06IFVwbG9hZEVkaXRzUHJvdmlkZXJQcm9wcykgPT4ge1xuICBjb25zdCBbdXBsb2FkRWRpdHMsIHNldFVwbG9hZEVkaXRzXSA9IFJlYWN0LnVzZVN0YXRlPFVwbG9hZEVkaXRzPihpbml0aWFsVXBsb2FkRWRpdHMgfHwge30pXG5cbiAgY29uc3QgcmVzZXRVcGxvYWRFZGl0cyA9ICgpID0+IHtcbiAgICBzZXRVcGxvYWRFZGl0cyh7fSlcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZVVwbG9hZEVkaXRzID0gKGVkaXRzOiBVcGxvYWRFZGl0cykgPT4ge1xuICAgIHNldFVwbG9hZEVkaXRzKChwcmV2RWRpdHMpID0+ICh7XG4gICAgICAuLi4ocHJldkVkaXRzIHx8IHt9KSxcbiAgICAgIC4uLihlZGl0cyB8fCB7fSksXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCBnZXRVcGxvYWRFZGl0cyA9ICgpID0+IHVwbG9hZEVkaXRzXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dCB2YWx1ZT17eyBnZXRVcGxvYWRFZGl0cywgcmVzZXRVcGxvYWRFZGl0cywgdXBkYXRlVXBsb2FkRWRpdHMsIHVwbG9hZEVkaXRzIH19PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29udGV4dD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlVXBsb2FkRWRpdHMgPSAoKTogVXBsb2FkRWRpdHNDb250ZXh0ID0+IFJlYWN0LnVzZShDb250ZXh0KVxuIiwiaW1wb3J0IHR5cGUgeyBEYXRhLCBTYW5pdGl6ZWREb2N1bWVudFBlcm1pc3Npb25zLCBTYW5pdGl6ZWRQZXJtaXNzaW9ucyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGhhc1NhdmVQZXJtaXNzaW9uIGFzIGdldEhhc1NhdmVQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2hhc1NhdmVQZXJtaXNzaW9uLmpzJ1xuaW1wb3J0IHsgaXNFZGl0aW5nIGFzIGdldElzRWRpdGluZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9pc0VkaXRpbmcuanMnXG5cbmV4cG9ydCB0eXBlIEdldERvY1Blcm1pc3Npb25zID0gKGRhdGE/OiBEYXRhKSA9PiBQcm9taXNlPHZvaWQ+XG5cbmV4cG9ydCBjb25zdCB1c2VHZXREb2NQZXJtaXNzaW9ucyA9ICh7XG4gIGlkLFxuICBhcGksXG4gIGNvbGxlY3Rpb25TbHVnLFxuICBnbG9iYWxTbHVnLFxuICBpMThuLFxuICBsb2NhbGUsXG4gIHBlcm1pc3Npb25zLFxuICBzZXREb2NQZXJtaXNzaW9ucyxcbiAgc2V0SGFzUHVibGlzaFBlcm1pc3Npb24sXG4gIHNldEhhc1NhdmVQZXJtaXNzaW9uLFxufToge1xuICBhcGk6IHN0cmluZ1xuICBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gIGdsb2JhbFNsdWc6IHN0cmluZ1xuICBpMThuOiBhbnlcbiAgaWQ6IHN0cmluZ1xuICBsb2NhbGU6IHN0cmluZ1xuICBwZXJtaXNzaW9uczogU2FuaXRpemVkUGVybWlzc2lvbnNcbiAgc2V0RG9jUGVybWlzc2lvbnM6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPFNhbml0aXplZERvY3VtZW50UGVybWlzc2lvbnM+PlxuICBzZXRIYXNQdWJsaXNoUGVybWlzc2lvbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG4gIHNldEhhc1NhdmVQZXJtaXNzaW9uOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cbn0pOiBHZXREb2NQZXJtaXNzaW9ucyA9PlxuICBSZWFjdC51c2VDYWxsYmFjayhcbiAgICBhc3luYyAoZGF0YTogRGF0YSkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsb2NhbGU6IGxvY2FsZSB8fCB1bmRlZmluZWQsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlkVG9Vc2UgPSBkYXRhPy5pZCB8fCBpZFxuICAgICAgY29uc3QgbmV3SXNFZGl0aW5nID0gZ2V0SXNFZGl0aW5nKHsgaWQ6IGlkVG9Vc2UsIGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnIH0pXG5cbiAgICAgIGlmIChuZXdJc0VkaXRpbmcpIHtcbiAgICAgICAgY29uc3QgZG9jQWNjZXNzUGF0aDogYC8ke3N0cmluZ31gID0gY29sbGVjdGlvblNsdWdcbiAgICAgICAgICA/IGAvJHtjb2xsZWN0aW9uU2x1Z30vYWNjZXNzLyR7aWRUb1VzZX1gXG4gICAgICAgICAgOiBnbG9iYWxTbHVnXG4gICAgICAgICAgICA/IGAvZ2xvYmFscy8ke2dsb2JhbFNsdWd9L2FjY2Vzc2BcbiAgICAgICAgICAgIDogbnVsbFxuXG4gICAgICAgIGlmIChkb2NBY2Nlc3NQYXRoKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICAgIGFwaVJvdXRlOiBhcGksXG4gICAgICAgICAgICAgIHBhdGg6IGAke2RvY0FjY2Vzc1BhdGh9JHtxcy5zdHJpbmdpZnkocGFyYW1zLCB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0pfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIC4uLihkYXRhPy5kb2MgfHwgZGF0YSB8fCB7fSksXG4gICAgICAgICAgICAgICAgX3N0YXR1czogJ2RyYWZ0JyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgY29uc3QganNvbjogU2FuaXRpemVkRG9jdW1lbnRQZXJtaXNzaW9ucyA9IGF3YWl0IHJlcy5qc29uKClcblxuICAgICAgICAgIGNvbnN0IHB1Ymxpc2hlZEFjY2Vzc0pTT04gPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgICAgICAgcGF0aDogYCR7ZG9jQWNjZXNzUGF0aH0ke3FzLnN0cmluZ2lmeShwYXJhbXMsIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSl9YCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgLi4uKGRhdGE/LmRvYyB8fCBkYXRhIHx8IHt9KSxcbiAgICAgICAgICAgICAgICBfc3RhdHVzOiAncHVibGlzaGVkJyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKS50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG5cbiAgICAgICAgICBzZXREb2NQZXJtaXNzaW9ucyhqc29uKVxuXG4gICAgICAgICAgc2V0SGFzU2F2ZVBlcm1pc3Npb24oXG4gICAgICAgICAgICBnZXRIYXNTYXZlUGVybWlzc2lvbih7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICBkb2NQZXJtaXNzaW9uczoganNvbixcbiAgICAgICAgICAgICAgZ2xvYmFsU2x1ZyxcbiAgICAgICAgICAgICAgaXNFZGl0aW5nOiBuZXdJc0VkaXRpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG5cbiAgICAgICAgICBzZXRIYXNQdWJsaXNoUGVybWlzc2lvbihwdWJsaXNoZWRBY2Nlc3NKU09OPy51cGRhdGUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdoZW4gY3JlYXRpbmcgbmV3IGRvY3VtZW50cywgdGhlcmUgaXMgbm8gcGVybWlzc2lvbnMgc2F2ZWQgZm9yIHRoaXMgZG9jdW1lbnQgeWV0XG4gICAgICAgIC8vIHVzZSB0aGUgZ2VuZXJpYyBlbnRpdHkgcGVybWlzc2lvbnMgaW5zdGVhZFxuICAgICAgICBjb25zdCBuZXdEb2NQZXJtaXNzaW9ucyA9IGNvbGxlY3Rpb25TbHVnXG4gICAgICAgICAgPyBwZXJtaXNzaW9ucz8uY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uU2x1Z11cbiAgICAgICAgICA6IHBlcm1pc3Npb25zPy5nbG9iYWxzPy5bZ2xvYmFsU2x1Z11cblxuICAgICAgICBzZXREb2NQZXJtaXNzaW9ucyhuZXdEb2NQZXJtaXNzaW9ucylcblxuICAgICAgICBzZXRIYXNTYXZlUGVybWlzc2lvbihcbiAgICAgICAgICBnZXRIYXNTYXZlUGVybWlzc2lvbih7XG4gICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIGRvY1Blcm1pc3Npb25zOiBuZXdEb2NQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgICAgICBpc0VkaXRpbmc6IG5ld0lzRWRpdGluZyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgbG9jYWxlLFxuICAgICAgaWQsXG4gICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgIGdsb2JhbFNsdWcsXG4gICAgICBhcGksXG4gICAgICBpMThuLmxhbmd1YWdlLFxuICAgICAgc2V0RG9jUGVybWlzc2lvbnMsXG4gICAgICBzZXRIYXNTYXZlUGVybWlzc2lvbixcbiAgICAgIHNldEhhc1B1Ymxpc2hQZXJtaXNzaW9uLFxuICAgICAgcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zLFxuICAgICAgcGVybWlzc2lvbnM/Lmdsb2JhbHMsXG4gICAgXSxcbiAgKVxuIiwiaW1wb3J0IHR5cGUge1xuICBTYW5pdGl6ZWRDb2xsZWN0aW9uUGVybWlzc2lvbixcbiAgU2FuaXRpemVkRG9jdW1lbnRQZXJtaXNzaW9ucyxcbiAgU2FuaXRpemVkR2xvYmFsUGVybWlzc2lvbixcbn0gZnJvbSAncGF5bG9hZCdcblxuZXhwb3J0IGNvbnN0IGhhc1NhdmVQZXJtaXNzaW9uID0gKGFyZ3M6IHtcbiAgLypcbiAgICogUGFzcyBlaXRoZXIgYGNvbGxlY3Rpb25TbHVnYCBvciBgZ2xvYmFsU2x1Z2BcbiAgICovXG4gIGNvbGxlY3Rpb25TbHVnPzogc3RyaW5nXG4gIGRvY1Blcm1pc3Npb25zOiBTYW5pdGl6ZWREb2N1bWVudFBlcm1pc3Npb25zXG4gIC8qXG4gICAqIFBhc3MgZWl0aGVyIGBjb2xsZWN0aW9uU2x1Z2Agb3IgYGdsb2JhbFNsdWdgXG4gICAqL1xuICBnbG9iYWxTbHVnPzogc3RyaW5nXG4gIGlzRWRpdGluZzogYm9vbGVhblxufSkgPT4ge1xuICBjb25zdCB7IGNvbGxlY3Rpb25TbHVnLCBkb2NQZXJtaXNzaW9ucywgZ2xvYmFsU2x1ZywgaXNFZGl0aW5nIH0gPSBhcmdzXG5cbiAgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICAoaXNFZGl0aW5nICYmIGRvY1Blcm1pc3Npb25zPy51cGRhdGUpIHx8XG4gICAgICAgICghaXNFZGl0aW5nICYmIChkb2NQZXJtaXNzaW9ucyBhcyBTYW5pdGl6ZWRDb2xsZWN0aW9uUGVybWlzc2lvbik/LmNyZWF0ZSksXG4gICAgKVxuICB9XG5cbiAgaWYgKGdsb2JhbFNsdWcpIHtcbiAgICByZXR1cm4gQm9vbGVhbigoZG9jUGVybWlzc2lvbnMgYXMgU2FuaXRpemVkR2xvYmFsUGVybWlzc2lvbik/LnVwZGF0ZSlcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIiwiZXhwb3J0IGNvbnN0IGlzRWRpdGluZyA9ICh7XG4gIGlkLFxuICBjb2xsZWN0aW9uU2x1ZyxcbiAgZ2xvYmFsU2x1Zyxcbn06IHtcbiAgY29sbGVjdGlvblNsdWc/OiBzdHJpbmdcbiAgZ2xvYmFsU2x1Zz86IHN0cmluZ1xuICBpZD86IG51bWJlciB8IHN0cmluZ1xufSk6IGJvb2xlYW4gPT4gQm9vbGVhbihnbG9iYWxTbHVnIHx8IChjb2xsZWN0aW9uU2x1ZyAmJiAhIWlkKSlcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgT3BlcmF0aW9uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoJycgYXMgT3BlcmF0aW9uKVxuXG5leHBvcnQgY29uc3QgT3BlcmF0aW9uUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTsgb3BlcmF0aW9uOiBPcGVyYXRpb24gfT4gPSAoe1xuICBjaGlsZHJlbixcbiAgb3BlcmF0aW9uLFxufSkgPT4gPE9wZXJhdGlvbkNvbnRleHQgdmFsdWU9e29wZXJhdGlvbn0+e2NoaWxkcmVufTwvT3BlcmF0aW9uQ29udGV4dD5cblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uID0gJ2NyZWF0ZScgfCAndXBkYXRlJ1xuXG5leHBvcnQgY29uc3QgdXNlT3BlcmF0aW9uID0gKCk6IE9wZXJhdGlvbiB8IHVuZGVmaW5lZCA9PiB1c2UoT3BlcmF0aW9uQ29udGV4dClcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuLyoqXG4gKiBBbGwgZmllbGRzIGFyZSB3cmFwcGVkIGluIGEgYEZpZWxkUGF0aENvbnRleHRgIHByb3ZpZGVyIGJ5IGRlZmF1bHQuXG4gKiBUaGUgYHVzZUZpZWxkUGF0aGAgaG9vayB3aWxsIHJldHVybiB0aGlzIHZhbHVlIGlmIGl0IGV4aXN0cywgbm90IHRoZSBwYXRoIHRoZSBmaWVsZCB3YXMgZXhwbGljaXRseSBnaXZlbi5cbiAqIFRoaXMgbWVhbnMgaWYgeW91IHJlbmRlciBhIGZpZWxkIGRpcmVjdGx5LCB5b3Ugd2lsbCBuZWVkIHRvIHdyYXAgaXQgd2l0aCBhIG5ldyBgRmllbGRQYXRoQ29udGV4dGAgcHJvdmlkZXIuXG4gKiBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBwYXJlbnQncyBwYXRoLCBub3QgdGhlIHBhdGggaXQgd2FzIGV4cGxpY2l0bHkgZ2l2ZW4uXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiAndXNlIGNsaWVudCdcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbiAqIGltcG9ydCB7IFRleHRGaWVsZCwgRmllbGRQYXRoQ29udGV4dCB9IGZyb20gJ0BwYXlsb2FkY21zL3VpJ1xuICogaW1wb3J0IHR5cGUgeyBUZXh0RmllbGRDbGllbnRDb21wb25lbnQgfSBmcm9tICdwYXlsb2FkJ1xuICpcbiAqIGV4cG9ydCBjb25zdCBNeUN1c3RvbUZpZWxkOiBUZXh0RmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8RmllbGRQYXRoQ29udGV4dCB2YWx1ZT1cInBhdGgudG8uc29tZS5vdGhlci5maWVsZFwiPlxuICogICAgICAgPFRleHRGaWVsZCB7Li4ucHJvcHN9IC8+XG4gKiAgICAgPC9GaWVsZFBhdGhDb250ZXh0PlxuICogICApXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIEFQSSBhbmQgbWF5IGNoYW5nZSBhdCBhbnkgdGltZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gKi9cbmV4cG9ydCBjb25zdCBGaWVsZFBhdGhDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxzdHJpbmc+KHVuZGVmaW5lZClcblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IGZpZWxkIHBhdGggZnJvbSB0aGUgbmVhcmVzdCBgRmllbGRQYXRoQ29udGV4dGAgcHJvdmlkZXIuXG4gKiBBbGwgZmllbGRzIGFyZSB3cmFwcGVkIGluIHRoaXMgY29udGV4dCBieSBkZWZhdWx0LlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgQVBJIGFuZCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUZpZWxkUGF0aCA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoRmllbGRQYXRoQ29udGV4dClcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICAvLyBzd2FsbG93IHRoZSBlcnJvciwgbm90IGFsbCBmaWVsZHMgYXJlIHdyYXBwZWQgaW4gYSBGaWVsZFBhdGhDb250ZXh0XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgcmV0dXJuIGNvbnRleHRcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBGaWVsZFBhdGhzIH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB0eXBlIHsgTWFya09wdGlvbmFsIH0gZnJvbSAndHMtZXNzZW50aWFscydcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBXYXRjaENvbmRpdGlvbiB9IGZyb20gJy4vV2F0Y2hDb25kaXRpb24uanMnXG5cbmV4cG9ydCBjb25zdCB3aXRoQ29uZGl0aW9uID0gPFAgZXh0ZW5kcyBNYXJrT3B0aW9uYWw8RmllbGRQYXRocywgJ2luZGV4UGF0aCcgfCAncGF0aCc+PihcbiAgRmllbGQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8UD4sXG4pOiBSZWFjdC5GQzxQPiA9PiB7XG4gIGNvbnN0IENoZWNrRm9yQ29uZGl0aW9uOiBSZWFjdC5GQzxQPiA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgcGF0aCB9ID0gcHJvcHNcblxuICAgIHJldHVybiAoXG4gICAgICA8V2F0Y2hDb25kaXRpb24gcGF0aD17cGF0aH0+XG4gICAgICAgIDxGaWVsZCB7Li4ucHJvcHN9IC8+XG4gICAgICA8L1dhdGNoQ29uZGl0aW9uPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBDaGVja0ZvckNvbmRpdGlvblxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VGb3JtRmllbGRzIH0gZnJvbSAnLi4vRm9ybS9jb250ZXh0LmpzJ1xuXG5leHBvcnQgY29uc3QgV2F0Y2hDb25kaXRpb246IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBwYXRoOiBzdHJpbmdcbn0+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHBhdGggfSA9IHByb3BzXG5cbiAgY29uc3QgZmllbGQgPSB1c2VGb3JtRmllbGRzKChbZmllbGRzXSkgPT4gKGZpZWxkcyAmJiBmaWVsZHM/LltwYXRoXSkgfHwgbnVsbClcblxuICBjb25zdCB7IHBhc3Nlc0NvbmRpdGlvbiB9ID0gZmllbGQgfHwge31cblxuICBpZiAocGFzc2VzQ29uZGl0aW9uID09PSBmYWxzZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW5cbn1cbiIsImltcG9ydCB0eXBlIHsgQ2xpZW50RmllbGQgfSBmcm9tICdwYXlsb2FkJ1xuXG5leHBvcnQgY29uc3QgbWVyZ2VGaWVsZFN0eWxlcyA9IChcbiAgZmllbGQ6IENsaWVudEZpZWxkIHwgT21pdDxDbGllbnRGaWVsZCwgJ3R5cGUnPixcbik6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4gKHtcbiAgLi4uKGZpZWxkPy5hZG1pbj8uc3R5bGUgfHwge30pLFxuICAuLi4oZmllbGQ/LmFkbWluPy53aWR0aFxuICAgID8ge1xuICAgICAgICAnLS1maWVsZC13aWR0aCc6IGZpZWxkLmFkbWluLndpZHRoLFxuICAgICAgfVxuICAgIDoge1xuICAgICAgICBmbGV4OiAnMSAxIGF1dG8nLFxuICAgICAgfSksXG4gIC8vIGFsbG93IGZsZXggb3ZlcnJpZGVzIHRvIHN0aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBmYWxsYmFja1xuICAuLi4oZmllbGQ/LmFkbWluPy5zdHlsZT8uZmxleFxuICAgID8ge1xuICAgICAgICBmbGV4OiBmaWVsZC5hZG1pbi5zdHlsZS5mbGV4LFxuICAgICAgfVxuICAgIDoge30pLFxufSlcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBMb2NhbGUsIFNhbml0aXplZExvY2FsaXphdGlvbkNvbmZpZyB9IGZyb20gJ3BheWxvYWQnXG5cbmV4cG9ydCBjb25zdCBmaWVsZEJhc2VDbGFzcyA9ICdmaWVsZC10eXBlJ1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGZpZWxkIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgcmlnaHQtdG8tbGVmdCAoUlRMKSBiYXNlZCBvbiBpdHMgY29uZmlndXJhdGlvbiwgcGF5bG9hZCdzIGxvY2FsaXphdGlvbiBjb25maWd1cmF0aW9uIGFuZCB0aGUgYWRtaW5nIHVzZXIncyBjdXJyZW50bHkgZW5hYmxlZCBsb2NhbGUuXG5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgUlRMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaWVsZFJUTCh7XG4gIGZpZWxkTG9jYWxpemVkLFxuICBmaWVsZFJUTCxcbiAgbG9jYWxlLFxuICBsb2NhbGl6YXRpb25Db25maWcsXG59OiB7XG4gIGZpZWxkTG9jYWxpemVkPzogYm9vbGVhblxuICBmaWVsZFJUTD86IGJvb2xlYW5cbiAgbG9jYWxlOiBMb2NhbGVcbiAgbG9jYWxpemF0aW9uQ29uZmlnPzogU2FuaXRpemVkTG9jYWxpemF0aW9uQ29uZmlnXG59KSB7XG4gIGNvbnN0IGhhc011bHRpcGxlTG9jYWxlcyA9XG4gICAgbG9jYWxlICYmXG4gICAgbG9jYWxpemF0aW9uQ29uZmlnICYmXG4gICAgbG9jYWxpemF0aW9uQ29uZmlnLmxvY2FsZXMgJiZcbiAgICBsb2NhbGl6YXRpb25Db25maWcubG9jYWxlcy5sZW5ndGggPiAxXG5cbiAgY29uc3QgaXNDdXJyZW50TG9jYWxlRGVmYXVsdExvY2FsZSA9IGxvY2FsZT8uY29kZSA9PT0gbG9jYWxpemF0aW9uQ29uZmlnPy5kZWZhdWx0TG9jYWxlXG5cbiAgcmV0dXJuIChcbiAgICAoZmllbGRSVEwgIT09IGZhbHNlICYmXG4gICAgICBsb2NhbGU/LnJ0bCA9PT0gdHJ1ZSAmJlxuICAgICAgKGZpZWxkTG9jYWxpemVkIHx8XG4gICAgICAgICghZmllbGRMb2NhbGl6ZWQgJiYgIWhhc011bHRpcGxlTG9jYWxlcykgfHwgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgbG9jYWxlIHdoaWNoIGlzIGFsc28gcnRsLCB0aGF0IGZpZWxkIGlzIHJ0bCB0b29cbiAgICAgICAgKCFmaWVsZExvY2FsaXplZCAmJiBpc0N1cnJlbnRMb2NhbGVEZWZhdWx0TG9jYWxlKSkpIHx8IC8vIElmIHRoZSBjdXJyZW50IGxvY2FsZSBpcyB0aGUgZGVmYXVsdCBsb2NhbGUsIGJ1dCB0aGUgZmllbGQgaXMgbm90IGxvY2FsaXplZCwgdGhhdCBmaWVsZCBpcyBydGwgdG9vXG4gICAgZmllbGRSVEwgPT09IHRydWVcbiAgKSAvLyBJZiBmaWVsZFJUTCBpcyB0cnVlLiBUaGlzIHNob3VsZCBiZSB1c2VmdWwgZm9yIHdoZW4gbm8gbG9jYWxpemF0aW9uIGlzIHNldCBhdCBhbGwgaW4gdGhlIHBheWxvYWQgY29uZmlnLCBidXQgeW91IHN0aWxsIHdhbnQgZmllbGRzIHRvIGJlIHJ0bC5cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBTdGF0aWNMYWJlbCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUlkLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICcuLi8uLi9pY29ucy9DaGVjay9pbmRleC5qcydcbmltcG9ydCB7IExpbmVJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvTGluZS9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgQ2hlY2tib3hJbnB1dFByb3BzID0ge1xuICByZWFkb25seSBBZnRlcklucHV0PzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IEJlZm9yZUlucHV0PzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGNoZWNrZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBpZD86IHN0cmluZ1xuICByZWFkb25seSBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50IHwgbnVsbD5cbiAgcmVhZG9ubHkgTGFiZWw/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgbGFiZWw/OiBTdGF0aWNMYWJlbFxuICByZWFkb25seSBsb2NhbGl6ZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgb25Ub2dnbGU6IChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWRcbiAgcmVhZG9ubHkgcGFydGlhbENoZWNrZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhblxuICByZWFkb25seSByZXF1aXJlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGlucHV0QmFzZUNsYXNzID0gJ2NoZWNrYm94LWlucHV0J1xuXG5leHBvcnQgY29uc3QgQ2hlY2tib3hJbnB1dDogUmVhY3QuRkM8Q2hlY2tib3hJbnB1dFByb3BzPiA9ICh7XG4gIGlkOiBpZEZyb21Qcm9wcyxcbiAgbmFtZSxcbiAgQWZ0ZXJJbnB1dCxcbiAgQmVmb3JlSW5wdXQsXG4gIGNoZWNrZWQsXG4gIGNsYXNzTmFtZSxcbiAgaW5wdXRSZWYsXG4gIExhYmVsLFxuICBsYWJlbCxcbiAgbG9jYWxpemVkLFxuICBvblRvZ2dsZSxcbiAgcGFydGlhbENoZWNrZWQsXG4gIHJlYWRPbmx5OiByZWFkT25seUZyb21Qcm9wcyxcbiAgcmVxdWlyZWQsXG59KSA9PiB7XG4gIGNvbnN0IFtpc0h5ZHJhdGVkLCBzZXRJc0h5ZHJhdGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBmYWxsYmFja0lEID0gdXNlSWQoKVxuICBjb25zdCBpZCA9IGlkRnJvbVByb3BzIHx8IGZhbGxiYWNrSURcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldElzSHlkcmF0ZWQodHJ1ZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgcmVhZE9ubHkgPSByZWFkT25seUZyb21Qcm9wcyB8fCAhaXNIeWRyYXRlZFxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgaW5wdXRCYXNlQ2xhc3MsXG4gICAgICAgIGNoZWNrZWQgJiYgYCR7aW5wdXRCYXNlQ2xhc3N9LS1jaGVja2VkYCxcbiAgICAgICAgcmVhZE9ubHkgJiYgYCR7aW5wdXRCYXNlQ2xhc3N9LS1yZWFkLW9ubHlgLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2lucHV0QmFzZUNsYXNzfV9faW5wdXRgfT5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiXCJcbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e25hbWV9XG4gICAgICAgICAgY2hlY2tlZD17Qm9vbGVhbihjaGVja2VkKX1cbiAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHl9XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVG9nZ2xlfVxuICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIHRpdGxlPXtuYW1lfVxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtbYCR7aW5wdXRCYXNlQ2xhc3N9X19pY29uYCwgIWNoZWNrZWQgJiYgcGFydGlhbENoZWNrZWQgPyAncGFydGlhbCcgOiAnY2hlY2snXVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGVja2VkICYmIDxDaGVja0ljb24gLz59XG4gICAgICAgICAgeyFjaGVja2VkICYmIHBhcnRpYWxDaGVja2VkICYmIDxMaW5lSWNvbiAvPn1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7QWZ0ZXJJbnB1dH1cbiAgICAgIDwvZGl2PlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0xhYmVsfVxuICAgICAgICBGYWxsYmFjaz17XG4gICAgICAgICAgPEZpZWxkTGFiZWwgaHRtbEZvcj17aWR9IGxhYmVsPXtsYWJlbH0gbG9jYWxpemVkPXtsb2NhbGl6ZWR9IHJlcXVpcmVkPXtyZXF1aXJlZH0gLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IENoZWNrSWNvbjogUmVhY3QuRkMgPSAoKSA9PiAoXG4gIDxzdmcgY2xhc3NOYW1lPVwiaWNvbiBpY29uLS1jaGVja1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cInN0cm9rZVwiXG4gICAgICBkPVwiTTE1LjMzMzMgNi4wMDAwMUw4LjAwMDAxIDEzLjMzMzNMNC42NjY2NyAxMFwiXG4gICAgICBzdHJva2VMaW5lY2FwPVwic3F1YXJlXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBMaW5lSWNvbjogUmVhY3QuRkMgPSAoKSA9PiAoXG4gIDxzdmdcbiAgICBjbGFzc05hbWU9XCJpY29uIGljb24tLWxpbmVcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICBoZWlnaHQ9XCIyMFwiXG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgd2lkdGg9XCIyMFwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gID5cbiAgICA8cGF0aCBjbGFzc05hbWU9XCJzdHJva2VcIiBkPVwiTTUuMzMzMzMgMTBIMTQuNjY2N1wiIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIiAvPlxuICA8L3N2Zz5cbilcbiIsImV4cG9ydCBjb25zdCBzY3JvbGxUb0lEID0gKGlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxuXG4gIGlmIChlbGVtZW50KSB7XG4gICAgY29uc3QgYm91bmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIHdpbmRvdy5zY3JvbGxCeSh7XG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB0b3A6IGJvdW5kcy50b3AgLSAxMDAsXG4gICAgfSlcbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7XG4gIEFycmF5RmllbGQsXG4gIENsaWVudENvbXBvbmVudFByb3BzLFxuICBDbGllbnRGaWVsZCxcbiAgUm93LFxuICBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zLFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBVc2VEcmFnZ2FibGVTb3J0YWJsZVJldHVybiB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RyYWdnYWJsZVNvcnRhYmxlL3VzZURyYWdnYWJsZVNvcnRhYmxlL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBBcnJheUFjdGlvbiB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0FycmF5QWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29sbGFwc2libGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Db2xsYXBzaWJsZS9pbmRleC5qcydcbmltcG9ydCB7IEVycm9yUGlsbCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0Vycm9yUGlsbC9pbmRleC5qcydcbmltcG9ydCB7IFNoaW1tZXJFZmZlY3QgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9TaGltbWVyRWZmZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybVN1Ym1pdHRlZCB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IFJlbmRlckZpZWxkcyB9IGZyb20gJy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9pbmRleC5qcydcbmltcG9ydCB7IFJvd0xhYmVsIH0gZnJvbSAnLi4vLi4vZm9ybXMvUm93TGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUaHJvdHRsZWRWYWx1ZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRocm90dGxlZFZhbHVlLmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2FycmF5LWZpZWxkJ1xuXG50eXBlIEFycmF5Um93UHJvcHMgPSB7XG4gIHJlYWRvbmx5IGFkZFJvdzogKHJvd0luZGV4OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkXG4gIHJlYWRvbmx5IGNvcHlSb3c6IChyb3dJbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gIHJlYWRvbmx5IEN1c3RvbVJvd0xhYmVsPzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGR1cGxpY2F0ZVJvdzogKHJvd0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgZXJyb3JDb3VudDogbnVtYmVyXG4gIHJlYWRvbmx5IGZpZWxkczogQ2xpZW50RmllbGRbXVxuICByZWFkb25seSBoYXNNYXhSb3dzPzogYm9vbGVhblxuICByZWFkb25seSBpc0xvYWRpbmc/OiBib29sZWFuXG4gIHJlYWRvbmx5IGlzU29ydGFibGU/OiBib29sZWFuXG4gIHJlYWRvbmx5IGxhYmVsczogUGFydGlhbDxBcnJheUZpZWxkWydsYWJlbHMnXT5cbiAgcmVhZG9ubHkgbW92ZVJvdzogKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgcGFyZW50UGF0aDogc3RyaW5nXG4gIHJlYWRvbmx5IHBhc3RlUm93OiAocm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICByZWFkb25seSBwYXRoOiBzdHJpbmdcbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM6IFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnNcbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuXG4gIHJlYWRvbmx5IHJlbW92ZVJvdzogKHJvd0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgcm93OiBSb3dcbiAgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlclxuICByZWFkb25seSByb3dJbmRleDogbnVtYmVyXG4gIHJlYWRvbmx5IHNjaGVtYVBhdGg6IHN0cmluZ1xuICByZWFkb25seSBzY3JvbGxJZFByZWZpeDogc3RyaW5nXG4gIHJlYWRvbmx5IHNldENvbGxhcHNlOiAocm93SUQ6IHN0cmluZywgY29sbGFwc2VkOiBib29sZWFuKSA9PiB2b2lkXG59ICYgUGljazxDbGllbnRDb21wb25lbnRQcm9wcywgJ2ZvcmNlUmVuZGVyJz4gJlxuICBVc2VEcmFnZ2FibGVTb3J0YWJsZVJldHVyblxuXG5leHBvcnQgY29uc3QgQXJyYXlSb3c6IFJlYWN0LkZDPEFycmF5Um93UHJvcHM+ID0gKHtcbiAgYWRkUm93LFxuICBhdHRyaWJ1dGVzLFxuICBjb3B5Um93LFxuICBDdXN0b21Sb3dMYWJlbCxcbiAgZHVwbGljYXRlUm93LFxuICBlcnJvckNvdW50LFxuICBmaWVsZHMsXG4gIGZvcmNlUmVuZGVyID0gZmFsc2UsXG4gIGhhc01heFJvd3MsXG4gIGlzRHJhZ2dpbmcsXG4gIGlzTG9hZGluZzogaXNMb2FkaW5nRnJvbVByb3BzLFxuICBpc1NvcnRhYmxlLFxuICBsYWJlbHMsXG4gIGxpc3RlbmVycyxcbiAgbW92ZVJvdyxcbiAgcGFyZW50UGF0aCxcbiAgcGFzdGVSb3csXG4gIHBhdGgsXG4gIHBlcm1pc3Npb25zLFxuICByZWFkT25seSxcbiAgcmVtb3ZlUm93LFxuICByb3csXG4gIHJvd0NvdW50LFxuICByb3dJbmRleCxcbiAgc2NoZW1hUGF0aCxcbiAgc2Nyb2xsSWRQcmVmaXgsXG4gIHNldENvbGxhcHNlLFxuICBzZXROb2RlUmVmLFxuICB0cmFuc2Zvcm0sXG4gIHRyYW5zaXRpb24sXG59KSA9PiB7XG4gIGNvbnN0IGlzTG9hZGluZyA9IHVzZVRocm90dGxlZFZhbHVlKGlzTG9hZGluZ0Zyb21Qcm9wcywgNTAwKVxuXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBoYXNTdWJtaXR0ZWQgPSB1c2VGb3JtU3VibWl0dGVkKClcblxuICBjb25zdCBmYWxsYmFja0xhYmVsID0gYCR7Z2V0VHJhbnNsYXRpb24obGFiZWxzLnNpbmd1bGFyLCBpMThuKX0gJHtTdHJpbmcocm93SW5kZXggKyAxKS5wYWRTdGFydChcbiAgICAyLFxuICAgICcwJyxcbiAgKX1gXG5cbiAgY29uc3QgZmllbGRIYXNFcnJvcnMgPSBlcnJvckNvdW50ID4gMCAmJiBoYXNTdWJtaXR0ZWRcblxuICBjb25zdCBjbGFzc05hbWVzID0gW1xuICAgIGAke2Jhc2VDbGFzc31fX3Jvd2AsXG4gICAgZmllbGRIYXNFcnJvcnMgPyBgJHtiYXNlQ2xhc3N9X19yb3ctLWhhcy1lcnJvcnNgIDogYCR7YmFzZUNsYXNzfV9fcm93LS1uby1lcnJvcnNgLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGlkPXtgJHtwYXJlbnRQYXRoLnNwbGl0KCcuJykuam9pbignLScpfS1yb3ctJHtyb3dJbmRleH1gfVxuICAgICAga2V5PXtgJHtwYXJlbnRQYXRofS1yb3ctJHtyb3cuaWR9YH1cbiAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdHJhbnNpdGlvbixcbiAgICAgICAgekluZGV4OiBpc0RyYWdnaW5nID8gMSA6IHVuZGVmaW5lZCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgIGFjdGlvbnM9e1xuICAgICAgICAgICFyZWFkT25seSA/IChcbiAgICAgICAgICAgIDxBcnJheUFjdGlvblxuICAgICAgICAgICAgICBhZGRSb3c9e2FkZFJvd31cbiAgICAgICAgICAgICAgY29weVJvdz17Y29weVJvd31cbiAgICAgICAgICAgICAgZHVwbGljYXRlUm93PXtkdXBsaWNhdGVSb3d9XG4gICAgICAgICAgICAgIGhhc01heFJvd3M9e2hhc01heFJvd3N9XG4gICAgICAgICAgICAgIGluZGV4PXtyb3dJbmRleH1cbiAgICAgICAgICAgICAgaXNTb3J0YWJsZT17aXNTb3J0YWJsZX1cbiAgICAgICAgICAgICAgbW92ZVJvdz17bW92ZVJvd31cbiAgICAgICAgICAgICAgcGFzdGVSb3c9e3Bhc3RlUm93fVxuICAgICAgICAgICAgICByZW1vdmVSb3c9e3JlbW92ZVJvd31cbiAgICAgICAgICAgICAgcm93Q291bnQ9e3Jvd0NvdW50fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzfVxuICAgICAgICBjb2xsYXBzaWJsZVN0eWxlPXtmaWVsZEhhc0Vycm9ycyA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgIGRyYWdIYW5kbGVQcm9wcz17XG4gICAgICAgICAgaXNTb3J0YWJsZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgaWQ6IHJvdy5pZCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVycyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXI9e1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcm93LWhlYWRlcmB9XG4gICAgICAgICAgICBpZD17YCR7c2Nyb2xsSWRQcmVmaXh9LXJvdy0ke3Jvd0luZGV4fWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICAgICAgPFNoaW1tZXJFZmZlY3QgaGVpZ2h0PVwiMXJlbVwiIHdpZHRoPVwiOHJlbVwiIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8Um93TGFiZWxcbiAgICAgICAgICAgICAgICBDdXN0b21Db21wb25lbnQ9e0N1c3RvbVJvd0xhYmVsfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxsYmFja0xhYmVsfVxuICAgICAgICAgICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgICAgICAgICAgcm93TnVtYmVyPXtyb3dJbmRleH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZmllbGRIYXNFcnJvcnMgJiYgPEVycm9yUGlsbCBjb3VudD17ZXJyb3JDb3VudH0gaTE4bj17aTE4bn0gd2l0aE1lc3NhZ2UgLz59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgaXNDb2xsYXBzZWQ9e3Jvdy5jb2xsYXBzZWR9XG4gICAgICAgIG9uVG9nZ2xlPXsoY29sbGFwc2VkKSA9PiBzZXRDb2xsYXBzZShyb3cuaWQsIGNvbGxhcHNlZCl9XG4gICAgICA+XG4gICAgICAgIHtpc0xvYWRpbmcgPyAoXG4gICAgICAgICAgPFNoaW1tZXJFZmZlY3QgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UmVuZGVyRmllbGRzXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZpZWxkc2B9XG4gICAgICAgICAgICBmaWVsZHM9e2ZpZWxkc31cbiAgICAgICAgICAgIGZvcmNlUmVuZGVyPXtmb3JjZVJlbmRlcn1cbiAgICAgICAgICAgIG1hcmdpbnM9XCJzbWFsbFwiXG4gICAgICAgICAgICBwYXJlbnRJbmRleFBhdGg9XCJcIlxuICAgICAgICAgICAgcGFyZW50UGF0aD17cGF0aH1cbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9e3NjaGVtYVBhdGh9XG4gICAgICAgICAgICBwZXJtaXNzaW9ucz17cGVybWlzc2lvbnMgPT09IHRydWUgPyBwZXJtaXNzaW9ucyA6IHBlcm1pc3Npb25zPy5maWVsZHN9XG4gICAgICAgICAgICByZWFkT25seT17cmVhZE9ubHl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBDaGV2cm9uSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL0NoZXZyb24vaW5kZXguanMnXG5pbXBvcnQgeyBDb3B5SWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL0NvcHkvaW5kZXguanMnXG5pbXBvcnQgeyBNb3JlSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL01vcmUvaW5kZXguanMnXG5pbXBvcnQgeyBQbHVzSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1BsdXMvaW5kZXguanMnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IENsaXBib2FyZEFjdGlvbkxhYmVsIH0gZnJvbSAnLi4vQ2xpcGJvYXJkQWN0aW9uL0NsaXBib2FyZEFjdGlvbkxhYmVsLmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBQb3B1cCwgUG9wdXBMaXN0IH0gZnJvbSAnLi4vUG9wdXAvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdhcnJheS1hY3Rpb25zJ1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgYWRkUm93OiAoY3VycmVudDogbnVtYmVyLCBibG9ja1R5cGU/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkXG4gIGNvcHlSb3c6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gIGR1cGxpY2F0ZVJvdzogKGN1cnJlbnQ6IG51bWJlcikgPT4gdm9pZFxuICBoYXNNYXhSb3dzOiBib29sZWFuXG4gIGluZGV4OiBudW1iZXJcbiAgaXNTb3J0YWJsZT86IGJvb2xlYW5cbiAgbW92ZVJvdzogKGZyb206IG51bWJlciwgdG86IG51bWJlcikgPT4gdm9pZFxuICBwYXN0ZVJvdzogKGluZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgcmVtb3ZlUm93OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICByb3dDb3VudDogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBBcnJheUFjdGlvbjogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgYWRkUm93LFxuICBjb3B5Um93LFxuICBkdXBsaWNhdGVSb3csXG4gIGhhc01heFJvd3MsXG4gIGluZGV4LFxuICBpc1NvcnRhYmxlLFxuICBtb3ZlUm93LFxuICBwYXN0ZVJvdyxcbiAgcmVtb3ZlUm93LFxuICByb3dDb3VudCxcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgcmV0dXJuIChcbiAgICA8UG9wdXBcbiAgICAgIGJ1dHRvbj17PE1vcmVJY29uIC8+fVxuICAgICAgYnV0dG9uQ2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19idXR0b25gfVxuICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICBob3Jpem9udGFsQWxpZ249XCJjZW50ZXJcIlxuICAgICAgcmVuZGVyPXsoeyBjbG9zZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cCBidXR0b25TaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgIHtpc1NvcnRhYmxlICYmIGluZGV4ICE9PSAwICYmIChcbiAgICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjdGlvbiAke2Jhc2VDbGFzc31fX21vdmUtdXBgfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIG1vdmVSb3coaW5kZXgsIGluZGV4IC0gMSlcbiAgICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjdGlvbi1jaGV2cm9uYH0+XG4gICAgICAgICAgICAgICAgICA8Q2hldnJvbkljb24gZGlyZWN0aW9uPVwidXBcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHt0KCdnZW5lcmFsOm1vdmVVcCcpfVxuICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzU29ydGFibGUgJiYgaW5kZXggPCByb3dDb3VudCAtIDEgJiYgKFxuICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uYH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBtb3ZlUm93KGluZGV4LCBpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb24tY2hldnJvbmB9PlxuICAgICAgICAgICAgICAgICAgPENoZXZyb25JY29uIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge3QoJ2dlbmVyYWw6bW92ZURvd24nKX1cbiAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshaGFzTWF4Um93cyAmJiAoXG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb24gJHtiYXNlQ2xhc3N9X19hZGRgfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIGFkZFJvdyhpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFBsdXNJY29uIC8+XG4gICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDphZGRCZWxvdycpfVxuICAgICAgICAgICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb24gJHtiYXNlQ2xhc3N9X19kdXBsaWNhdGVgfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVSb3coaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPENvcHlJY29uIC8+XG4gICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpkdXBsaWNhdGUnKX1cbiAgICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb24gJHtiYXNlQ2xhc3N9X19jb3B5YH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvcHlSb3coaW5kZXgpXG4gICAgICAgICAgICAgICAgY2xvc2UoKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Q2xpcGJvYXJkQWN0aW9uTGFiZWwgaXNSb3cgLz5cbiAgICAgICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uICR7YmFzZUNsYXNzfV9fcGFzdGVgfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFzdGVSb3coaW5kZXgpXG4gICAgICAgICAgICAgICAgY2xvc2UoKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Q2xpcGJvYXJkQWN0aW9uTGFiZWwgaXNQYXN0ZSBpc1JvdyAvPlxuICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb24gJHtiYXNlQ2xhc3N9X19yZW1vdmVgfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlUm93KGluZGV4KVxuICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgICAgIHt0KCdnZW5lcmFsOnJlbW92ZScpfVxuICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbkdyb3VwPlxuICAgICAgICApXG4gICAgICB9fVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBEcmFnSGFuZGxlUHJvcHMgfSBmcm9tICcuLi9EcmFnZ2FibGVTb3J0YWJsZS9EcmFnZ2FibGVTb3J0YWJsZUl0ZW0vdHlwZXMuanMnXG5cbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCB7IERyYWdIYW5kbGVJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvRHJhZ0hhbmRsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBBbmltYXRlSGVpZ2h0IH0gZnJvbSAnLi4vQW5pbWF0ZUhlaWdodC9pbmRleC5qcydcbmltcG9ydCB7IENvbGxhcHNpYmxlUHJvdmlkZXIsIHVzZUNvbGxhcHNpYmxlIH0gZnJvbSAnLi9wcm92aWRlci5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2NvbGxhcHNpYmxlJ1xuXG5leHBvcnQgeyBDb2xsYXBzaWJsZVByb3ZpZGVyLCB1c2VDb2xsYXBzaWJsZSB9XG5cbmV4cG9ydCB0eXBlIENvbGxhcHNpYmxlUHJvcHMgPSB7XG4gIGFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIENvbXBvbmVudHMgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIHdpdGhpbiB0aGUgY29sbGFwc2libGUgcHJvdmlkZXIgYnV0IGFmdGVyIHRoZSB3cmFwcGVyLlxuICAgKi9cbiAgQWZ0ZXJDb2xsYXBzaWJsZT86IFJlYWN0LlJlYWN0Tm9kZVxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjb2xsYXBzaWJsZVN0eWxlPzogJ2RlZmF1bHQnIHwgJ2Vycm9yJ1xuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIGNsaWNraW5nIG9uIHRoZSBjb2xsYXBzaWJsZSBoZWFkZXIgd2lsbCBub3QgdG9nZ2xlIHRoZSBjb2xsYXBzaWJsZSBzdGF0ZS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgdGhlIGNvbGxhcHNpYmxlIHN0YXRlIGlzIGNvbnRyb2xsZWQgZXh0ZXJuYWxseSAoZS5nLiBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCBvciBjdXN0b20gYnV0dG9uKS5cbiAgICovXG4gIGRpc2FibGVIZWFkZXJUb2dnbGU/OiBib29sZWFuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHRvZ2dsZSBpbmRpY2F0b3IgKGNoZXZyb24pIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBoZWFkZXIgd2lsbCBiZSBoaWRkZW4uXG4gICAqL1xuICBkaXNhYmxlVG9nZ2xlSW5kaWNhdG9yPzogYm9vbGVhblxuICBkcmFnSGFuZGxlUHJvcHM/OiBEcmFnSGFuZGxlUHJvcHNcbiAgaGVhZGVyPzogUmVhY3QuUmVhY3ROb2RlXG4gIGluaXRDb2xsYXBzZWQ/OiBib29sZWFuXG4gIGlzQ29sbGFwc2VkPzogYm9vbGVhblxuICBvblRvZ2dsZT86IChjb2xsYXBzZWQ6IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBDb2xsYXBzaWJsZTogUmVhY3QuRkM8Q29sbGFwc2libGVQcm9wcz4gPSAoe1xuICBhY3Rpb25zLFxuICBBZnRlckNvbGxhcHNpYmxlLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb2xsYXBzaWJsZVN0eWxlID0gJ2RlZmF1bHQnLFxuICBkaXNhYmxlSGVhZGVyVG9nZ2xlID0gZmFsc2UsXG4gIGRpc2FibGVUb2dnbGVJbmRpY2F0b3IgPSBmYWxzZSxcbiAgZHJhZ0hhbmRsZVByb3BzLFxuICBoZWFkZXIsXG4gIGluaXRDb2xsYXBzZWQsXG4gIGlzQ29sbGFwc2VkOiBjb2xsYXBzZWRGcm9tUHJvcHMsXG4gIG9uVG9nZ2xlLFxufSkgPT4ge1xuICBjb25zdCBbY29sbGFwc2VkTG9jYWwsIHNldENvbGxhcHNlZExvY2FsXSA9IHVzZVN0YXRlKEJvb2xlYW4oaW5pdENvbGxhcHNlZCkpXG4gIGNvbnN0IFtob3ZlcmluZ1RvZ2dsZSwgc2V0SG92ZXJpbmdUb2dnbGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHsgaXNXaXRoaW5Db2xsYXBzaWJsZSB9ID0gdXNlQ29sbGFwc2libGUoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBpc0NvbGxhcHNlZCA9IHR5cGVvZiBjb2xsYXBzZWRGcm9tUHJvcHMgPT09ICdib29sZWFuJyA/IGNvbGxhcHNlZEZyb21Qcm9wcyA6IGNvbGxhcHNlZExvY2FsXG5cbiAgY29uc3QgdG9nZ2xlQ29sbGFwc2libGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvblRvZ2dsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdm9pZCBvblRvZ2dsZSghaXNDb2xsYXBzZWQpXG4gICAgfVxuICAgIHNldENvbGxhcHNlZExvY2FsKCFpc0NvbGxhcHNlZClcbiAgfSwgW29uVG9nZ2xlLCBpc0NvbGxhcHNlZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgYmFzZUNsYXNzLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGRyYWdIYW5kbGVQcm9wcyAmJiBgJHtiYXNlQ2xhc3N9LS1oYXMtZHJhZy1oYW5kbGVgLFxuICAgICAgICBpc0NvbGxhcHNlZCAmJiBgJHtiYXNlQ2xhc3N9LS1jb2xsYXBzZWRgLFxuICAgICAgICBpc1dpdGhpbkNvbGxhcHNpYmxlICYmIGAke2Jhc2VDbGFzc30tLW5lc3RlZGAsXG4gICAgICAgIGhvdmVyaW5nVG9nZ2xlICYmICFkaXNhYmxlSGVhZGVyVG9nZ2xlICYmIGAke2Jhc2VDbGFzc30tLWhvdmVyZWRgLFxuICAgICAgICBgJHtiYXNlQ2xhc3N9LS1zdHlsZS0ke2NvbGxhcHNpYmxlU3R5bGV9YCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgID5cbiAgICAgIDxDb2xsYXBzaWJsZVByb3ZpZGVyIGlzQ29sbGFwc2VkPXtpc0NvbGxhcHNlZH0gdG9nZ2xlPXt0b2dnbGVDb2xsYXBzaWJsZX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RvZ2dsZS13cmFwJHtkaXNhYmxlSGVhZGVyVG9nZ2xlID8gJyB0b2dnbGUtZGlzYWJsZWQnIDogJyd9YH1cbiAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyaW5nVG9nZ2xlKHRydWUpfVxuICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0SG92ZXJpbmdUb2dnbGUoZmFsc2UpfVxuICAgICAgICA+XG4gICAgICAgICAgeyFkaXNhYmxlSGVhZGVyVG9nZ2xlICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fdG9nZ2xlYCxcbiAgICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X190b2dnbGUtLSR7aXNDb2xsYXBzZWQgPyAnY29sbGFwc2VkJyA6ICdvcGVuJ31gLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUNvbGxhcHNpYmxlfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+e3QoJ2ZpZWxkczp0b2dnbGVCbG9jaycpfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7ZHJhZ0hhbmRsZVByb3BzICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcmFnYH1cbiAgICAgICAgICAgICAgey4uLmRyYWdIYW5kbGVQcm9wcy5hdHRyaWJ1dGVzfVxuICAgICAgICAgICAgICB7Li4uZHJhZ0hhbmRsZVByb3BzLmxpc3RlbmVyc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERyYWdIYW5kbGVJY29uIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoZWFkZXIgPyAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgICAgIGAke2Jhc2VDbGFzc31fX2hlYWRlci13cmFwYCxcbiAgICAgICAgICAgICAgICBkcmFnSGFuZGxlUHJvcHMgJiYgYCR7YmFzZUNsYXNzfV9faGVhZGVyLXdyYXAtLWhhcy1kcmFnLWhhbmRsZWAsXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb25zLXdyYXBgfT5cbiAgICAgICAgICAgIHthY3Rpb25zID8gPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjdGlvbnNgfT57YWN0aW9uc308L2Rpdj4gOiBudWxsfVxuICAgICAgICAgICAgeyFkaXNhYmxlVG9nZ2xlSW5kaWNhdG9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2luZGljYXRvcmB9PlxuICAgICAgICAgICAgICAgIDxDaGV2cm9uSWNvbiBkaXJlY3Rpb249eyFpc0NvbGxhcHNlZCA/ICd1cCcgOiB1bmRlZmluZWR9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxBbmltYXRlSGVpZ2h0IGhlaWdodD17aXNDb2xsYXBzZWQgPyAwIDogJ2F1dG8nfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udGVudGB9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9BbmltYXRlSGVpZ2h0PlxuICAgICAgICB7QWZ0ZXJDb2xsYXBzaWJsZX1cbiAgICAgIDwvQ29sbGFwc2libGVQcm92aWRlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IERyYWdIYW5kbGVJY29uOiBSZWFjdC5GQzx7IGNsYXNzTmFtZT86IHN0cmluZyB9PiA9ICh7IGNsYXNzTmFtZSB9KSA9PiAoXG4gIDxzdmdcbiAgICBjbGFzc05hbWU9e1snaWNvbiBpY29uLS1kcmFnLWhhbmRsZScsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9XCJmaWxsXCJcbiAgICAgIGQ9XCJNNy45OTk5OSAxMC42NjY3QzguMzY4MTggMTAuNjY2NyA4LjY2NjY2IDEwLjM2ODIgOC42NjY2NiA5Ljk5OTk5QzguNjY2NjYgOS42MzE4IDguMzY4MTggOS4zMzMzMiA3Ljk5OTk5IDkuMzMzMzJDNy42MzE4MSA5LjMzMzMyIDcuMzMzMzMgOS42MzE4IDcuMzMzMzMgOS45OTk5OUM3LjMzMzMzIDEwLjM2ODIgNy42MzE4MSAxMC42NjY3IDcuOTk5OTkgMTAuNjY2N1pcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInNxdWFyZVwiXG4gICAgLz5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwiZmlsbFwiXG4gICAgICBkPVwiTTcuOTk5OTkgNS45OTk5OUM4LjM2ODE4IDUuOTk5OTkgOC42NjY2NiA1LjcwMTUxIDguNjY2NjYgNS4zMzMzMkM4LjY2NjY2IDQuOTY1MTMgOC4zNjgxOCA0LjY2NjY2IDcuOTk5OTkgNC42NjY2NkM3LjYzMTgxIDQuNjY2NjYgNy4zMzMzMyA0Ljk2NTEzIDcuMzMzMzMgNS4zMzMzMkM3LjMzMzMzIDUuNzAxNTEgNy42MzE4MSA1Ljk5OTk5IDcuOTk5OTkgNS45OTk5OVpcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInNxdWFyZVwiXG4gICAgLz5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwiZmlsbFwiXG4gICAgICBkPVwiTTcuOTk5OTkgMTUuMzMzM0M4LjM2ODE4IDE1LjMzMzMgOC42NjY2NiAxNS4wMzQ4IDguNjY2NjYgMTQuNjY2N0M4LjY2NjY2IDE0LjI5ODUgOC4zNjgxOCAxNCA3Ljk5OTk5IDE0QzcuNjMxODEgMTQgNy4zMzMzMyAxNC4yOTg1IDcuMzMzMzMgMTQuNjY2N0M3LjMzMzMzIDE1LjAzNDggNy42MzE4MSAxNS4zMzMzIDcuOTk5OTkgMTUuMzMzM1pcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInNxdWFyZVwiXG4gICAgLz5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwiZmlsbFwiXG4gICAgICBkPVwiTTEyIDEwLjY2NjdDMTIuMzY4MiAxMC42NjY3IDEyLjY2NjcgMTAuMzY4MiAxMi42NjY3IDkuOTk5OTlDMTIuNjY2NyA5LjYzMTggMTIuMzY4MiA5LjMzMzMyIDEyIDkuMzMzMzJDMTEuNjMxOCA5LjMzMzMyIDExLjMzMzMgOS42MzE4IDExLjMzMzMgOS45OTk5OUMxMS4zMzMzIDEwLjM2ODIgMTEuNjMxOCAxMC42NjY3IDEyIDEwLjY2NjdaXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cImZpbGxcIlxuICAgICAgZD1cIk0xMiA1Ljk5OTk5QzEyLjM2ODIgNS45OTk5OSAxMi42NjY3IDUuNzAxNTEgMTIuNjY2NyA1LjMzMzMyQzEyLjY2NjcgNC45NjUxMyAxMi4zNjgyIDQuNjY2NjYgMTIgNC42NjY2NkMxMS42MzE4IDQuNjY2NjYgMTEuMzMzMyA0Ljk2NTEzIDExLjMzMzMgNS4zMzMzMkMxMS4zMzMzIDUuNzAxNTEgMTEuNjMxOCA1Ljk5OTk5IDEyIDUuOTk5OTlaXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cImZpbGxcIlxuICAgICAgZD1cIk0xMiAxNS4zMzMzQzEyLjM2ODIgMTUuMzMzMyAxMi42NjY3IDE1LjAzNDggMTIuNjY2NyAxNC42NjY3QzEyLjY2NjcgMTQuMjk4NSAxMi4zNjgyIDE0IDEyIDE0QzExLjYzMTggMTQgMTEuMzMzMyAxNC4yOTg1IDExLjMzMzMgMTQuNjY2N0MxMS4zMzMzIDE1LjAzNDggMTEuNjMxOCAxNS4zMzMzIDEyIDE1LjMzMzNaXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlUGF0Y2hBbmltYXRlSGVpZ2h0IH0gZnJvbSAnLi91c2VQYXRjaEFuaW1hdGVIZWlnaHQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IEFuaW1hdGVIZWlnaHQ6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZHVyYXRpb24/OiBudW1iZXJcbiAgaGVpZ2h0PzogJ2F1dG8nIHwgbnVtYmVyXG4gIGlkPzogc3RyaW5nXG59PiA9ICh7IGlkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBkdXJhdGlvbiA9IDMwMCwgaGVpZ2h0IH0pID0+IHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gQm9vbGVhbihoZWlnaHQpKVxuXG4gIGNvbnN0IHByZXZJc09wZW4gPSB1c2VSZWYob3BlbilcblxuICBjb25zdCBbY2hpbGRyZW5EaXNwbGF5LCBzZXRDaGlsZHJlbkRpc3BsYXldID0gUmVhY3QudXNlU3RhdGU8Q1NTU3R5bGVEZWNsYXJhdGlvblsnZGlzcGxheSddPihcbiAgICAoKSA9PiAob3BlbiA/ICcnIDogJ25vbmUnKSxcbiAgKVxuXG4gIGNvbnN0IFtwYXJlbnRPdmVyZmxvdywgc2V0UGFyZW50T3ZlcmZsb3ddID0gUmVhY3QudXNlU3RhdGU8Q1NTU3R5bGVEZWNsYXJhdGlvblsnb3ZlcmZsb3cnXT4oKCkgPT5cbiAgICBvcGVuID8gJycgOiAnaGlkZGVuJyxcbiAgKVxuXG4gIGNvbnN0IFtpc0FuaW1hdGluZywgc2V0SXNBbmltYXRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjb250ZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGRpc3BsYXlUaW1lcjogbnVtYmVyXG4gICAgbGV0IG92ZXJmbG93VGltZXI6IG51bWJlclxuXG4gICAgY29uc3QgbmV3SXNPcGVuID0gQm9vbGVhbihoZWlnaHQpXG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IHByZXZJc09wZW4uY3VycmVudCAhPT0gbmV3SXNPcGVuXG4gICAgcHJldklzT3Blbi5jdXJyZW50ID0gbmV3SXNPcGVuXG5cbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgc2V0SXNBbmltYXRpbmcodHJ1ZSlcbiAgICAgIHNldFBhcmVudE92ZXJmbG93KCdoaWRkZW4nKVxuXG4gICAgICBpZiAobmV3SXNPcGVuKSB7XG4gICAgICAgIHNldENoaWxkcmVuRGlzcGxheSgnJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGBkaXNwbGF5OiBub25lYCBvbmNlIGNsb3NlZFxuICAgICAgICBkaXNwbGF5VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0Q2hpbGRyZW5EaXNwbGF5KCdub25lJylcbiAgICAgICAgfSwgZHVyYXRpb24pXG4gICAgICB9XG5cbiAgICAgIHNldE9wZW4obmV3SXNPcGVuKVxuXG4gICAgICAvLyByZXNldCBvdmVyZmxvdyBvbmNlIG9wZW5cbiAgICAgIG92ZXJmbG93VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldFBhcmVudE92ZXJmbG93KCcnKVxuICAgICAgICBzZXRJc0FuaW1hdGluZyhmYWxzZSlcbiAgICAgIH0sIGR1cmF0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoZGlzcGxheVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChkaXNwbGF5VGltZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVyZmxvd1RpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChvdmVyZmxvd1RpbWVyKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hlaWdodCwgZHVyYXRpb25dKVxuXG4gIHVzZVBhdGNoQW5pbWF0ZUhlaWdodCh7XG4gICAgY29udGFpbmVyUmVmLFxuICAgIGNvbnRlbnRSZWYsXG4gICAgZHVyYXRpb24sXG4gICAgb3BlbixcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGFyaWEtaGlkZGVuPXshb3Blbn1cbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICdyYWgtc3RhdGljJyxcbiAgICAgICAgb3BlbiAmJiBoZWlnaHQgPT09ICdhdXRvJyAmJiAncmFoLXN0YXRpYy0taGVpZ2h0LWF1dG8nLFxuICAgICAgICBpc0FuaW1hdGluZyAmJiBgcmFoLWFuaW1hdGluZy0tJHtvcGVuID8gJ2Rvd24nIDogJ3VwJ31gLFxuICAgICAgICBpc0FuaW1hdGluZyAmJiBoZWlnaHQgPT09ICdhdXRvJyAmJiBgcmFoLWFuaW1hdGluZy0tdG8taGVpZ2h0LWF1dG9gLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBpZD17aWR9XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIG92ZXJmbG93OiBwYXJlbnRPdmVyZmxvdyxcbiAgICAgICAgdHJhbnNpdGlvbjogYGhlaWdodCAke2R1cmF0aW9ufW1zIGVhc2VgLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2IHJlZj17Y29udGVudFJlZn0gey4uLihjaGlsZHJlbkRpc3BsYXkgPyB7IHN0eWxlOiB7IGRpc3BsYXk6IGNoaWxkcmVuRGlzcGxheSB9IH0gOiB7fSl9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjb25zdCB1c2VQYXRjaEFuaW1hdGVIZWlnaHQgPSAoe1xuICBjb250YWluZXJSZWYsXG4gIGNvbnRlbnRSZWYsXG4gIGR1cmF0aW9uLFxuICBvcGVuLFxufToge1xuICBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD5cbiAgY29udGVudFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxuICBkdXJhdGlvbjogbnVtYmVyXG4gIG9wZW46IGJvb2xlYW5cbn0pOiB7IGJyb3dzZXJTdXBwb3J0c0tleXdvcmRBbmltYXRpb246IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IGJyb3dzZXJTdXBwb3J0c0tleXdvcmRBbmltYXRpb24gPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB0eXBlb2YgQ1NTICE9PSAndW5kZWZpbmVkJyAmJiBDU1MgJiYgQ1NTLnN1cHBvcnRzXG4gICAgICAgID8gQ1NTLnN1cHBvcnRzKCdpbnRlcnBvbGF0ZS1zaXplJywgJ2FsbG93LWtleXdvcmRzJylcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbXSxcbiAgKVxuXG4gIGNvbnN0IGhhc0luaXRpYWxpemVkID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBwcmV2aW91c09wZW5TdGF0ZSA9IHVzZVJlZihvcGVuKVxuICBjb25zdCBbaXNBbmltYXRpbmcsIHNldElzQW5pbWF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCByZXNpemVPYnNlcnZlclJlZiA9IHVzZVJlZjxudWxsIHwgUmVzaXplT2JzZXJ2ZXI+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJSZWYuY3VycmVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZW50UmVmLmN1cnJlbnRcblxuICAgIGlmICghY29udGFpbmVyIHx8ICFjb250ZW50IHx8IGJyb3dzZXJTdXBwb3J0c0tleXdvcmRBbmltYXRpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNldENvbnRhaW5lckhlaWdodCA9IChoZWlnaHQ6IHN0cmluZykgPT4ge1xuICAgICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGhlaWdodFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zaXRpb25FbmQgPSAoKSA9PiB7XG4gICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2l0aW9uID0gJydcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IG9wZW4gPyAnYXV0bycgOiAnMHB4J1xuICAgICAgICBzZXRJc0FuaW1hdGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgICAgaWYgKCFoYXNJbml0aWFsaXplZC5jdXJyZW50ICYmIG9wZW4pIHtcbiAgICAgICAgLy8gU2tpcCBhbmltYXRpb24gb24gZmlyc3QgcmVuZGVyXG4gICAgICAgIHNldENvbnRhaW5lckhlaWdodCgnYXV0bycpXG4gICAgICAgIHNldElzQW5pbWF0aW5nKGZhbHNlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaGFzSW5pdGlhbGl6ZWQuY3VycmVudCA9IHRydWVcblxuICAgICAgaWYgKHByZXZpb3VzT3BlblN0YXRlLmN1cnJlbnQgIT09IG9wZW4pIHtcbiAgICAgICAgc2V0Q29udGFpbmVySGVpZ2h0KG9wZW4gPyAnMHB4JyA6IGAke2NvbnRlbnQuc2Nyb2xsSGVpZ2h0fXB4YClcbiAgICAgIH1cblxuICAgICAgLy8gVHJpZ2dlciByZWZsb3dcbiAgICAgIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICAgIHNldElzQW5pbWF0aW5nKHRydWUpXG4gICAgICBjb250YWluZXIuc3R5bGUudHJhbnNpdGlvbiA9IGBoZWlnaHQgJHtkdXJhdGlvbn1tcyBlYXNlYFxuICAgICAgc2V0Q29udGFpbmVySGVpZ2h0KG9wZW4gPyBgJHtjb250ZW50LnNjcm9sbEhlaWdodH1weGAgOiAnMHB4JylcblxuICAgICAgY29uc3Qgb25UcmFuc2l0aW9uRW5kID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGVUcmFuc2l0aW9uRW5kKClcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBvblRyYW5zaXRpb25FbmQpXG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgb25UcmFuc2l0aW9uRW5kKVxuICAgIH1cblxuICAgIGFuaW1hdGUoKVxuICAgIHByZXZpb3VzT3BlblN0YXRlLmN1cnJlbnQgPSBvcGVuXG5cbiAgICAvLyBTZXR1cCBSZXNpemVPYnNlcnZlclxuICAgIHJlc2l6ZU9ic2VydmVyUmVmLmN1cnJlbnQgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKGlzQW5pbWF0aW5nKSB7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBvcGVuID8gYCR7Y29udGVudC5zY3JvbGxIZWlnaHR9cHhgIDogJzBweCdcbiAgICAgIH1cbiAgICB9KVxuICAgIHJlc2l6ZU9ic2VydmVyUmVmLmN1cnJlbnQub2JzZXJ2ZShjb250ZW50KVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnRyYW5zaXRpb24gPSAnJ1xuICAgICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJydcbiAgICAgIH1cbiAgICAgIHJlc2l6ZU9ic2VydmVyUmVmLmN1cnJlbnQ/LmRpc2Nvbm5lY3QoKVxuICAgIH1cbiAgfSwgW29wZW4sIGR1cmF0aW9uLCBjb250YWluZXJSZWYsIGNvbnRlbnRSZWYsIGJyb3dzZXJTdXBwb3J0c0tleXdvcmRBbmltYXRpb25dKVxuXG4gIHJldHVybiB7IGJyb3dzZXJTdXBwb3J0c0tleXdvcmRBbmltYXRpb24gfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlIH0gZnJvbSAncmVhY3QnXG5cbnR5cGUgQ29udGV4dFR5cGUgPSB7XG4gIGlzQ29sbGFwc2VkOiBib29sZWFuXG4gIGlzVmlzaWJsZTogYm9vbGVhblxuICBpc1dpdGhpbkNvbGxhcHNpYmxlOiBib29sZWFuXG4gIHRvZ2dsZTogKCkgPT4gdm9pZFxufVxuXG5jb25zdCBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGlzQ29sbGFwc2VkOiB1bmRlZmluZWQsXG4gIGlzVmlzaWJsZTogdW5kZWZpbmVkLFxuICBpc1dpdGhpbkNvbGxhcHNpYmxlOiB1bmRlZmluZWQsXG4gIHRvZ2dsZTogKCkgPT4ge30sXG59IGFzIENvbnRleHRUeXBlKVxuXG5leHBvcnQgY29uc3QgQ29sbGFwc2libGVQcm92aWRlcjogUmVhY3QuRkM8e1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuICBpc0NvbGxhcHNlZD86IGJvb2xlYW5cbiAgaXNXaXRoaW5Db2xsYXBzaWJsZT86IGJvb2xlYW5cbiAgdG9nZ2xlOiAoKSA9PiB2b2lkXG59PiA9ICh7IGNoaWxkcmVuLCBpc0NvbGxhcHNlZCwgaXNXaXRoaW5Db2xsYXBzaWJsZSA9IHRydWUsIHRvZ2dsZSB9KSA9PiB7XG4gIGNvbnN0IHsgaXNDb2xsYXBzZWQ6IHBhcmVudElzQ29sbGFwc2VkLCBpc1Zpc2libGUgfSA9IHVzZUNvbGxhcHNpYmxlKClcblxuICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpOiBDb250ZXh0VHlwZSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQ29sbGFwc2VkLFxuICAgICAgaXNWaXNpYmxlOiBpc1Zpc2libGUgJiYgIXBhcmVudElzQ29sbGFwc2VkLFxuICAgICAgaXNXaXRoaW5Db2xsYXBzaWJsZSxcbiAgICAgIHRvZ2dsZSxcbiAgICB9XG4gIH0sIFtpc0NvbGxhcHNlZCwgaXNXaXRoaW5Db2xsYXBzaWJsZSwgdG9nZ2xlLCBwYXJlbnRJc0NvbGxhcHNlZCwgaXNWaXNpYmxlXSlcblxuICByZXR1cm4gPENvbnRleHQgdmFsdWU9e2NvbnRleHRWYWx1ZX0+e2NoaWxkcmVufTwvQ29udGV4dD5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbGxhcHNpYmxlID0gKCk6IENvbnRleHRUeXBlID0+IHVzZShDb250ZXh0KVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9ucyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGZpZWxkSXNIaWRkZW5PckRpc2FibGVkLCBnZXRGaWVsZFBhdGhzLCBnZXRGaWVsZFBlcm1pc3Npb25zIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgUmVuZGVyRmllbGRzUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBSZW5kZXJJZkluVmlld3BvcnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJJZkluVmlld3BvcnQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvT3BlcmF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBGaWVsZFBhdGhDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgUmVuZGVyRmllbGQgfSBmcm9tICcuL1JlbmRlckZpZWxkLmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmVuZGVyLWZpZWxkcydcblxuZXhwb3J0IHsgUmVuZGVyRmllbGRzUHJvcHMgYXMgUHJvcHMgfVxuXG5leHBvcnQgY29uc3QgUmVuZGVyRmllbGRzOiBSZWFjdC5GQzxSZW5kZXJGaWVsZHNQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBmaWVsZHMsXG4gICAgZm9yY2VSZW5kZXIsXG4gICAgbWFyZ2lucyxcbiAgICBwYXJlbnRJbmRleFBhdGgsXG4gICAgcGFyZW50UGF0aCxcbiAgICBwYXJlbnRTY2hlbWFQYXRoLFxuICAgIHBlcm1pc3Npb25zLFxuICAgIHJlYWRPbmx5OiByZWFkT25seUZyb21QYXJlbnQsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHVzZU9wZXJhdGlvbigpXG5cbiAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVuZGVySWZJblZpZXdwb3J0XG4gICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgbWFyZ2lucyAmJiBgJHtiYXNlQ2xhc3N9LS1tYXJnaW5zLSR7bWFyZ2luc31gLFxuICAgICAgICAgIG1hcmdpbnMgPT09IGZhbHNlICYmIGAke2Jhc2VDbGFzc30tLW1hcmdpbnMtbm9uZWAsXG4gICAgICAgIF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgZm9yY2VSZW5kZXI9e2ZvcmNlUmVuZGVyfVxuICAgICAgPlxuICAgICAgICB7ZmllbGRzLm1hcCgoZmllbGQsIGkpID0+IHtcbiAgICAgICAgICAvLyBGb3Igc2lkZWJhciBmaWVsZHMgaW4gdGhlIG1haW4gZmllbGRzIGFycmF5LCBgZmllbGRgIHdpbGwgYmUgYG51bGxgLCBhbmQgdmlzYSB2ZXJzYVxuICAgICAgICAgIC8vIFRoaXMgaXMgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIGZpZWxkcyBjb25zaXN0ZW50IGFuZCBtYWludGFpbiB0aGUgY29ycmVjdCBpbmRleCBwYXRocyBmb3IgdGhlIG1haW4gZmllbGRzIChpKVxuICAgICAgICAgIGlmICghZmllbGQgfHwgZmllbGRJc0hpZGRlbk9yRGlzYWJsZWQoZmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogaGFzT3BlcmF0aW9uUGVybWlzc2lvbixcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiBmaWVsZFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgcmVhZDogaGFzUmVhZFBlcm1pc3Npb24sXG4gICAgICAgICAgfSA9IGdldEZpZWxkUGVybWlzc2lvbnMoe1xuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBwYXJlbnRQYXRoPy5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgID8gcGFyZW50UGF0aC5zcGxpdCgnLicpW3BhcmVudFBhdGguc3BsaXQoJy4nKS5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICA6IHBhcmVudFBhdGgsXG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2Fubm90IHJlYWQgdGhlIGZpZWxkLCB0aGVuIGZpbHRlciBpdCBvdXRcbiAgICAgICAgICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGBhZG1pbi5yZWFkT25seWAgd2hpY2ggaXMgZXhlY3V0ZWQgYmFzZWQgb24gYG9wZXJhdGlvbmBcbiAgICAgICAgICBpZiAoJ25hbWUnIGluIGZpZWxkICYmICFoYXNSZWFkUGVybWlzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBgYWRtaW4ucmVhZE9ubHlgIGRpc3BsYXlzIHRoZSB2YWx1ZSBidXQgcHJldmVudHMgdGhlIGZpZWxkIGZyb20gYmVpbmcgZWRpdGVkXG4gICAgICAgICAgbGV0IGlzUmVhZE9ubHkgPSByZWFkT25seUZyb21QYXJlbnQgfHwgZmllbGQ/LmFkbWluPy5yZWFkT25seVxuXG4gICAgICAgICAgLy8gSWYgcGFyZW50IGZpZWxkIGlzIGByZWFkT25seTogdHJ1ZWAsIGJ1dCB0aGlzIGZpZWxkIGlzIGByZWFkT25seTogZmFsc2VgLCB0aGUgZmllbGQgc2hvdWxkIHN0aWxsIGJlIGVkaXRhYmxlXG4gICAgICAgICAgaWYgKGlzUmVhZE9ubHkgJiYgZmllbGQuYWRtaW4/LnJlYWRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaXNSZWFkT25seSA9IGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWYgdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgYXQgdGhlIG9wZXJhdGlvbiBsZXZlbCwgdG8gYmVnaW4gd2l0aCwgZm9yY2UgaXQgdG8gYmUgcmVhZC1vbmx5XG4gICAgICAgICAgaWYgKCduYW1lJyBpbiBmaWVsZCAmJiAhaGFzT3BlcmF0aW9uUGVybWlzc2lvbikge1xuICAgICAgICAgICAgaXNSZWFkT25seSA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGluZGV4UGF0aCwgcGF0aCwgc2NoZW1hUGF0aCB9ID0gZ2V0RmllbGRQYXRocyh7XG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgcGFyZW50SW5kZXhQYXRoLFxuICAgICAgICAgICAgcGFyZW50UGF0aCxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGgsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RmllbGRQYXRoQ29udGV4dCBrZXk9e2Ake3BhdGh9LSR7aX1gfSB2YWx1ZT17cGF0aH0+XG4gICAgICAgICAgICAgIDxSZW5kZXJGaWVsZFxuICAgICAgICAgICAgICAgIGNsaWVudEZpZWxkQ29uZmlnPXtmaWVsZH1cbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcj17Zm9yY2VSZW5kZXJ9XG4gICAgICAgICAgICAgICAgaW5kZXhQYXRoPXtpbmRleFBhdGh9XG4gICAgICAgICAgICAgICAgcGFyZW50UGF0aD17cGFyZW50UGF0aH1cbiAgICAgICAgICAgICAgICBwYXJlbnRTY2hlbWFQYXRoPXtwYXJlbnRTY2hlbWFQYXRofVxuICAgICAgICAgICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnM9e2ZpZWxkUGVybWlzc2lvbnMgYXMgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9uc31cbiAgICAgICAgICAgICAgICByZWFkT25seT17aXNSZWFkT25seX1cbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoPXtzY2hlbWFQYXRofVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9GaWVsZFBhdGhDb250ZXh0PlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8L1JlbmRlcklmSW5WaWV3cG9ydD5cbiAgICApXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbXBvbmVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VJbnRlcnNlY3QgfSBmcm9tICcuLi8uLi9ob29rcy91c2VJbnRlcnNlY3QuanMnXG5cbmV4cG9ydCBjb25zdCBSZW5kZXJJZkluVmlld3BvcnQ6IFJlYWN0LkZDPFxuICB7XG4gICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICB9ICYgUGljazxDbGllbnRDb21wb25lbnRQcm9wcywgJ2ZvcmNlUmVuZGVyJz5cbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBmb3JjZVJlbmRlciB9KSA9PiB7XG4gIGNvbnN0IFtoYXNSZW5kZXJlZCwgc2V0SGFzUmVuZGVyZWRdID0gUmVhY3QudXNlU3RhdGUoQm9vbGVhbihmb3JjZVJlbmRlcikpXG4gIGNvbnN0IFtpbnRlcnNlY3Rpb25SZWYsIGVudHJ5XSA9IHVzZUludGVyc2VjdChcbiAgICB7XG4gICAgICByb290TWFyZ2luOiAnMTAwMHB4JyxcbiAgICB9LFxuICAgIEJvb2xlYW4oZm9yY2VSZW5kZXIpLFxuICApXG5cbiAgY29uc3QgaXNJbnRlcnNlY3RpbmcgPSBCb29sZWFuKGVudHJ5Py5pc0ludGVyc2VjdGluZylcbiAgY29uc3QgaXNBYm92ZVZpZXdwb3J0ID0gZW50cnk/LmJvdW5kaW5nQ2xpZW50UmVjdD8udG9wIDwgMFxuICBjb25zdCBzaG91bGRSZW5kZXIgPSBmb3JjZVJlbmRlciB8fCBpc0ludGVyc2VjdGluZyB8fCBpc0Fib3ZlVmlld3BvcnRcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRSZW5kZXIgJiYgIWhhc1JlbmRlcmVkKSB7XG4gICAgICBzZXRIYXNSZW5kZXJlZCh0cnVlKVxuICAgIH1cbiAgfSwgW3Nob3VsZFJlbmRlciwgaGFzUmVuZGVyZWRdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gcmVmPXtpbnRlcnNlY3Rpb25SZWZ9PlxuICAgICAge2hhc1JlbmRlcmVkID8gY2hpbGRyZW4gOiBudWxsfVxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUge1xuICBDbGllbnRDb21wb25lbnRQcm9wcyxcbiAgQ2xpZW50RmllbGQsXG4gIEZpZWxkUGF0aHMsXG4gIFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnMsXG59IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQXJyYXlGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9BcnJheS9pbmRleC5qcydcbmltcG9ydCB7IEJsb2Nrc0ZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL0Jsb2Nrcy9pbmRleC5qcydcbmltcG9ydCB7IENoZWNrYm94RmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvQ2hlY2tib3gvaW5kZXguanMnXG5pbXBvcnQgeyBDb2RlRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvQ29kZS9pbmRleC5qcydcbmltcG9ydCB7IENvbGxhcHNpYmxlRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvQ29sbGFwc2libGUvaW5kZXguanMnXG5pbXBvcnQgeyBEYXRlVGltZUZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL0RhdGVUaW1lL2luZGV4LmpzJ1xuaW1wb3J0IHsgRW1haWxGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9FbWFpbC9pbmRleC5qcydcbmltcG9ydCB7IEdyb3VwRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvR3JvdXAvaW5kZXguanMnXG5pbXBvcnQgeyBIaWRkZW5GaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9IaWRkZW4vaW5kZXguanMnXG5pbXBvcnQgeyBKb2luRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvSm9pbi9pbmRleC5qcydcbmltcG9ydCB7IEpTT05GaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9KU09OL2luZGV4LmpzJ1xuaW1wb3J0IHsgTnVtYmVyRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvTnVtYmVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgUG9pbnRGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9Qb2ludC9pbmRleC5qcydcbmltcG9ydCB7IFJhZGlvR3JvdXBGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9SYWRpb0dyb3VwL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvUmVsYXRpb25zaGlwL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmljaFRleHRGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9SaWNoVGV4dC9pbmRleC5qcydcbmltcG9ydCB7IFJvd0ZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL1Jvdy9pbmRleC5qcydcbmltcG9ydCB7IFNlbGVjdEZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL1NlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IFRhYnNGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9UYWJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGV4dEZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL1RleHQvaW5kZXguanMnXG5pbXBvcnQgeyBUZXh0YXJlYUZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL1RleHRhcmVhL2luZGV4LmpzJ1xuaW1wb3J0IHsgVUlGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9VSS9pbmRleC5qcydcbmltcG9ydCB7IFVwbG9hZEZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL1VwbG9hZC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm1GaWVsZHMgfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2luZGV4LmpzJ1xuXG50eXBlIFJlbmRlckZpZWxkUHJvcHMgPSB7XG4gIGNsaWVudEZpZWxkQ29uZmlnOiBDbGllbnRGaWVsZFxuICBwZXJtaXNzaW9uczogU2FuaXRpemVkRmllbGRQZXJtaXNzaW9uc1xufSAmIEZpZWxkUGF0aHMgJlxuICBQaWNrPENsaWVudENvbXBvbmVudFByb3BzLCAnZm9yY2VSZW5kZXInIHwgJ3JlYWRPbmx5JyB8ICdzY2hlbWFQYXRoJz5cblxuZXhwb3J0IGZ1bmN0aW9uIFJlbmRlckZpZWxkKHtcbiAgY2xpZW50RmllbGRDb25maWcsXG4gIGZvcmNlUmVuZGVyLFxuICBpbmRleFBhdGgsXG4gIHBhcmVudFBhdGgsXG4gIHBhcmVudFNjaGVtYVBhdGgsXG4gIHBhdGgsXG4gIHBlcm1pc3Npb25zLFxuICByZWFkT25seSxcbiAgc2NoZW1hUGF0aCxcbn06IFJlbmRlckZpZWxkUHJvcHMpIHtcbiAgY29uc3QgQ3VzdG9tRmllbGQgPSB1c2VGb3JtRmllbGRzKChbZmllbGRzXSkgPT4gZmllbGRzICYmIGZpZWxkcz8uW3BhdGhdPy5jdXN0b21Db21wb25lbnRzPy5GaWVsZClcblxuICBjb25zdCBiYXNlRmllbGRQcm9wczogUGljazxcbiAgICBDbGllbnRDb21wb25lbnRQcm9wcyxcbiAgICAnZm9yY2VSZW5kZXInIHwgJ3Blcm1pc3Npb25zJyB8ICdyZWFkT25seScgfCAnc2NoZW1hUGF0aCdcbiAgPiA9IHtcbiAgICBmb3JjZVJlbmRlcixcbiAgICBwZXJtaXNzaW9ucyxcbiAgICByZWFkT25seSxcbiAgICBzY2hlbWFQYXRoLFxuICB9XG5cbiAgaWYgKGNsaWVudEZpZWxkQ29uZmlnLmFkbWluPy5oaWRkZW4pIHtcbiAgICByZXR1cm4gPEhpZGRlbkZpZWxkIHsuLi5iYXNlRmllbGRQcm9wc30gcGF0aD17cGF0aH0gLz5cbiAgfVxuXG4gIGlmIChDdXN0b21GaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIEN1c3RvbUZpZWxkIHx8IG51bGxcbiAgfVxuXG4gIGNvbnN0IGl0ZXJhYmxlRmllbGRQcm9wcyA9IHtcbiAgICAuLi5iYXNlRmllbGRQcm9wcyxcbiAgICBpbmRleFBhdGgsXG4gICAgcGFyZW50UGF0aCxcbiAgICBwYXJlbnRTY2hlbWFQYXRoLFxuICB9XG5cbiAgc3dpdGNoIChjbGllbnRGaWVsZENvbmZpZy50eXBlKSB7XG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIDxBcnJheUZpZWxkIHsuLi5pdGVyYWJsZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ2Jsb2Nrcyc6XG4gICAgICByZXR1cm4gPEJsb2Nrc0ZpZWxkIHsuLi5pdGVyYWJsZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgIHJldHVybiA8Q2hlY2tib3hGaWVsZCB7Li4uYmFzZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgcmV0dXJuIDxDb2RlRmllbGQgey4uLmJhc2VGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IHBhdGg9e3BhdGh9IC8+XG5cbiAgICBjYXNlICdjb2xsYXBzaWJsZSc6XG4gICAgICByZXR1cm4gPENvbGxhcHNpYmxlRmllbGQgey4uLml0ZXJhYmxlRmllbGRQcm9wc30gZmllbGQ9e2NsaWVudEZpZWxkQ29uZmlnfSBwYXRoPXtwYXRofSAvPlxuXG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgICByZXR1cm4gPERhdGVUaW1lRmllbGQgey4uLmJhc2VGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IHBhdGg9e3BhdGh9IC8+XG5cbiAgICBjYXNlICdlbWFpbCc6XG4gICAgICByZXR1cm4gPEVtYWlsRmllbGQgey4uLmJhc2VGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IHBhdGg9e3BhdGh9IC8+XG5cbiAgICBjYXNlICdncm91cCc6XG4gICAgICByZXR1cm4gPEdyb3VwRmllbGQgey4uLml0ZXJhYmxlRmllbGRQcm9wc30gZmllbGQ9e2NsaWVudEZpZWxkQ29uZmlnfSBwYXRoPXtwYXRofSAvPlxuXG4gICAgY2FzZSAnam9pbic6XG4gICAgICByZXR1cm4gPEpvaW5GaWVsZCB7Li4uYmFzZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ2pzb24nOlxuICAgICAgcmV0dXJuIDxKU09ORmllbGQgey4uLmJhc2VGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IHBhdGg9e3BhdGh9IC8+XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIDxOdW1iZXJGaWVsZCB7Li4uYmFzZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgIHJldHVybiA8UG9pbnRGaWVsZCB7Li4uYmFzZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgIHJldHVybiA8UmFkaW9Hcm91cEZpZWxkIHsuLi5iYXNlRmllbGRQcm9wc30gZmllbGQ9e2NsaWVudEZpZWxkQ29uZmlnfSBwYXRoPXtwYXRofSAvPlxuXG4gICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIHJldHVybiA8UmVsYXRpb25zaGlwRmllbGQgey4uLmJhc2VGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IHBhdGg9e3BhdGh9IC8+XG5cbiAgICBjYXNlICdyaWNoVGV4dCc6XG4gICAgICByZXR1cm4gPFJpY2hUZXh0RmllbGQgey4uLmJhc2VGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IHBhdGg9e3BhdGh9IC8+XG5cbiAgICBjYXNlICdyb3cnOlxuICAgICAgcmV0dXJuIDxSb3dGaWVsZCB7Li4uaXRlcmFibGVGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IC8+XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcmV0dXJuIDxTZWxlY3RGaWVsZCB7Li4uYmFzZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ3RhYnMnOlxuICAgICAgcmV0dXJuIDxUYWJzRmllbGQgey4uLml0ZXJhYmxlRmllbGRQcm9wc30gZmllbGQ9e2NsaWVudEZpZWxkQ29uZmlnfSBwYXRoPXtwYXRofSAvPlxuXG4gICAgY2FzZSAndGV4dCc6XG4gICAgICByZXR1cm4gPFRleHRGaWVsZCB7Li4uYmFzZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiA8VGV4dGFyZWFGaWVsZCB7Li4uYmFzZUZpZWxkUHJvcHN9IGZpZWxkPXtjbGllbnRGaWVsZENvbmZpZ30gcGF0aD17cGF0aH0gLz5cblxuICAgIGNhc2UgJ3VpJzpcbiAgICAgIHJldHVybiA8VUlGaWVsZCAvPlxuXG4gICAgY2FzZSAndXBsb2FkJzpcbiAgICAgIHJldHVybiA8VXBsb2FkRmllbGQgey4uLmJhc2VGaWVsZFByb3BzfSBmaWVsZD17Y2xpZW50RmllbGRDb25maWd9IHBhdGg9e3BhdGh9IC8+XG4gIH1cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBCbG9ja3NGaWVsZENsaWVudENvbXBvbmVudCwgQ2xpZW50QmxvY2sgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgdHlwZSB7IENsaXBib2FyZFBhc3RlRGF0YSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0NsaXBib2FyZEFjdGlvbi90eXBlcy5qcydcblxuaW1wb3J0IHsgQmFubmVyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQmFubmVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgY2xpcGJvYXJkQ29weSwgY2xpcGJvYXJkUGFzdGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9DbGlwYm9hcmRBY3Rpb24vY2xpcGJvYXJkVXRpbGl0aWVzLmpzJ1xuaW1wb3J0IHsgQ2xpcGJvYXJkQWN0aW9uIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQ2xpcGJvYXJkQWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHtcbiAgbWVyZ2VGb3JtU3RhdGVGcm9tQ2xpcGJvYXJkLFxuICByZWR1Y2VGb3JtU3RhdGVCeVBhdGgsXG59IGZyb20gJy4uLy4uL2VsZW1lbnRzL0NsaXBib2FyZEFjdGlvbi9tZXJnZUZvcm1TdGF0ZUZyb21DbGlwYm9hcmQuanMnXG5pbXBvcnQgeyBEcmFnZ2FibGVTb3J0YWJsZUl0ZW0gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9EcmFnZ2FibGVTb3J0YWJsZS9EcmFnZ2FibGVTb3J0YWJsZUl0ZW0vaW5kZXguanMnXG5pbXBvcnQgeyBEcmFnZ2FibGVTb3J0YWJsZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RyYWdnYWJsZVNvcnRhYmxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyVG9nZ2xlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RyYXdlci9pbmRleC5qcydcbmltcG9ydCB7IHVzZURyYXdlclNsdWcgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9EcmF3ZXIvdXNlRHJhd2VyU2x1Zy5qcydcbmltcG9ydCB7IEVycm9yUGlsbCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0Vycm9yUGlsbC9pbmRleC5qcydcbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm0sIHVzZUZvcm1TdWJtaXR0ZWQgfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyBleHRyYWN0Um93c0FuZENvbGxhcHNlZElEcywgdG9nZ2xlQWxsUm93cyB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vcm93SGVscGVycy5qcydcbmltcG9ydCB7IE51bGxpZnlMb2NhbGVGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL051bGxpZnlGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB3aXRoQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvd2l0aENvbmRpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgc2Nyb2xsVG9JRCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zY3JvbGxUb0lELmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vRmllbGREZXNjcmlwdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkRXJyb3IgfSBmcm9tICcuLi9GaWVsZEVycm9yL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyBtZXJnZUZpZWxkU3R5bGVzIH0gZnJvbSAnLi4vbWVyZ2VGaWVsZFN0eWxlcy5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0IHsgQmxvY2tSb3cgfSBmcm9tICcuL0Jsb2NrUm93LmpzJ1xuaW1wb3J0IHsgQmxvY2tzRHJhd2VyIH0gZnJvbSAnLi9CbG9ja3NEcmF3ZXIvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdibG9ja3MtZmllbGQnXG5cbmNvbnN0IEJsb2Nrc0ZpZWxkQ29tcG9uZW50OiBCbG9ja3NGaWVsZENsaWVudENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGQ6IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlLFxuICAgICAgYWRtaW46IHsgY2xhc3NOYW1lLCBkZXNjcmlwdGlvbiwgaXNTb3J0YWJsZSA9IHRydWUgfSA9IHt9LFxuICAgICAgYmxvY2tSZWZlcmVuY2VzLFxuICAgICAgYmxvY2tzLFxuICAgICAgbGFiZWwsXG4gICAgICBsYWJlbHM6IGxhYmVsc0Zyb21Qcm9wcyxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIG1heFJvd3MsXG4gICAgICBtaW5Sb3dzOiBtaW5Sb3dzUHJvcCxcbiAgICAgIHJlcXVpcmVkLFxuICAgIH0sXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICBwZXJtaXNzaW9ucyxcbiAgICByZWFkT25seSxcbiAgICBzY2hlbWFQYXRoOiBzY2hlbWFQYXRoRnJvbVByb3BzLFxuICAgIHZhbGlkYXRlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBzY2hlbWFQYXRoID0gc2NoZW1hUGF0aEZyb21Qcm9wcyA/PyBuYW1lXG5cbiAgY29uc3QgbWluUm93cyA9IChtaW5Sb3dzUHJvcCA/PyByZXF1aXJlZCkgPyAxIDogMFxuXG4gIGNvbnN0IHsgc2V0RG9jRmllbGRQcmVmZXJlbmNlcyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3Qge1xuICAgIGFkZEZpZWxkUm93LFxuICAgIGRpc3BhdGNoRmllbGRzLFxuICAgIGdldEZpZWxkcyxcbiAgICBtb3ZlRmllbGRSb3csXG4gICAgcmVtb3ZlRmllbGRSb3csXG4gICAgcmVwbGFjZVN0YXRlLFxuICAgIHNldE1vZGlmaWVkLFxuICB9ID0gdXNlRm9ybSgpXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7IGxvY2FsaXphdGlvbiB9LFxuICAgIGNvbmZpZyxcbiAgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IGRyYXdlclNsdWcgPSB1c2VEcmF3ZXJTbHVnKCdibG9ja3MtZHJhd2VyJylcbiAgY29uc3Qgc3VibWl0dGVkID0gdXNlRm9ybVN1Ym1pdHRlZCgpXG5cbiAgY29uc3QgbGFiZWxzID0ge1xuICAgIHBsdXJhbDogdCgnZmllbGRzOmJsb2NrcycpLFxuICAgIHNpbmd1bGFyOiB0KCdmaWVsZHM6YmxvY2snKSxcbiAgICAuLi5sYWJlbHNGcm9tUHJvcHMsXG4gIH1cblxuICBjb25zdCBlZGl0aW5nRGVmYXVsdExvY2FsZSA9ICgoKSA9PiB7XG4gICAgaWYgKGxvY2FsaXphdGlvbiAmJiBsb2NhbGl6YXRpb24uZmFsbGJhY2spIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRMb2NhbGUgPSBsb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZVxuICAgICAgcmV0dXJuIGxvY2FsZSA9PT0gZGVmYXVsdExvY2FsZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH0pKClcblxuICBjb25zdCBtZW1vaXplZFZhbGlkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICAvLyBhbHRlcm5hdGl2ZSBsb2NhbGVzIGNhbiBiZSBudWxsXG4gICAgICBpZiAoIWVkaXRpbmdEZWZhdWx0TG9jYWxlICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh2YWx1ZSwgeyAuLi5vcHRpb25zLCBtYXhSb3dzLCBtaW5Sb3dzLCByZXF1aXJlZCB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW21heFJvd3MsIG1pblJvd3MsIHJlcXVpcmVkLCB2YWxpZGF0ZSwgZWRpdGluZ0RlZmF1bHRMb2NhbGVdLFxuICApXG5cbiAgY29uc3Qge1xuICAgIGJsb2Nrc0ZpbHRlck9wdGlvbnMsXG4gICAgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIEVycm9yLCBMYWJlbCB9ID0ge30sXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3JQYXRocyxcbiAgICBwYXRoLFxuICAgIHJvd3MgPSBbXSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsaWQsXG4gICAgdmFsdWUsXG4gIH0gPSB1c2VGaWVsZDxudW1iZXI+KHtcbiAgICBoYXNSb3dzOiB0cnVlLFxuICAgIHBvdGVudGlhbGx5U3RhbGVQYXRoOiBwYXRoRnJvbVByb3BzLFxuICAgIHZhbGlkYXRlOiBtZW1vaXplZFZhbGlkYXRlLFxuICB9KVxuXG4gIGNvbnN0IHsgY2xpZW50QmxvY2tzLCBjbGllbnRCbG9ja3NBZnRlckZpbHRlciB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHJlc29sdmVkQmxvY2tzOiBDbGllbnRCbG9ja1tdID0gW11cblxuICAgIGlmICghYmxvY2tSZWZlcmVuY2VzKSB7XG4gICAgICByZXNvbHZlZEJsb2NrcyA9IGJsb2Nrc1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGJsb2NrUmVmZXJlbmNlIG9mIGJsb2NrUmVmZXJlbmNlcykge1xuICAgICAgICBjb25zdCBibG9jayA9XG4gICAgICAgICAgdHlwZW9mIGJsb2NrUmVmZXJlbmNlID09PSAnc3RyaW5nJyA/IGNvbmZpZy5ibG9ja3NNYXBbYmxvY2tSZWZlcmVuY2VdIDogYmxvY2tSZWZlcmVuY2VcbiAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgcmVzb2x2ZWRCbG9ja3MucHVzaChibG9jaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGJsb2Nrc0ZpbHRlck9wdGlvbnMpKSB7XG4gICAgICBjb25zdCBjbGllbnRCbG9ja3NBZnRlckZpbHRlciA9IHJlc29sdmVkQmxvY2tzLmZpbHRlcigoYmxvY2spID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2tTbHVnID0gdHlwZW9mIGJsb2NrID09PSAnc3RyaW5nJyA/IGJsb2NrIDogYmxvY2suc2x1Z1xuICAgICAgICByZXR1cm4gYmxvY2tzRmlsdGVyT3B0aW9ucy5pbmNsdWRlcyhibG9ja1NsdWcpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGllbnRCbG9ja3M6IHJlc29sdmVkQmxvY2tzLFxuICAgICAgICBjbGllbnRCbG9ja3NBZnRlckZpbHRlcixcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudEJsb2NrczogcmVzb2x2ZWRCbG9ja3MsXG4gICAgICBjbGllbnRCbG9ja3NBZnRlckZpbHRlcjogcmVzb2x2ZWRCbG9ja3MsXG4gICAgfVxuICB9LCBbYmxvY2tSZWZlcmVuY2VzLCBibG9ja3MsIGJsb2Nrc0ZpbHRlck9wdGlvbnMsIGNvbmZpZy5ibG9ja3NNYXBdKVxuXG4gIGNvbnN0IGFkZFJvdyA9IHVzZUNhbGxiYWNrKFxuICAgIChyb3dJbmRleDogbnVtYmVyLCBibG9ja1R5cGU6IHN0cmluZykgPT4ge1xuICAgICAgYWRkRmllbGRSb3coe1xuICAgICAgICBibG9ja1R5cGUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBzY2hlbWFQYXRoLFxuICAgICAgfSlcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFRvSUQoYCR7cGF0aH0tcm93LSR7cm93SW5kZXggKyAxfWApXG4gICAgICB9LCAwKVxuICAgIH0sXG4gICAgW2FkZEZpZWxkUm93LCBwYXRoLCBzY2hlbWFQYXRoXSxcbiAgKVxuXG4gIGNvbnN0IGR1cGxpY2F0ZVJvdyA9IHVzZUNhbGxiYWNrKFxuICAgIChyb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdEVVBMSUNBVEVfUk9XJywgcGF0aCwgcm93SW5kZXggfSlcbiAgICAgIHNldE1vZGlmaWVkKHRydWUpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzY3JvbGxUb0lEKGAke3BhdGh9LXJvdy0ke3Jvd0luZGV4ICsgMX1gKVxuICAgICAgfSwgMClcbiAgICB9LFxuICAgIFtkaXNwYXRjaEZpZWxkcywgcGF0aCwgc2V0TW9kaWZpZWRdLFxuICApXG5cbiAgY29uc3QgcmVtb3ZlUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHJlbW92ZUZpZWxkUm93KHtcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW3BhdGgsIHJlbW92ZUZpZWxkUm93XSxcbiAgKVxuXG4gIGNvbnN0IG1vdmVSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAobW92ZUZyb21JbmRleDogbnVtYmVyLCBtb3ZlVG9JbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBtb3ZlRmllbGRSb3coeyBtb3ZlRnJvbUluZGV4LCBtb3ZlVG9JbmRleCwgcGF0aCB9KVxuICAgIH0sXG4gICAgW21vdmVGaWVsZFJvdywgcGF0aF0sXG4gIClcblxuICBjb25zdCB0b2dnbGVDb2xsYXBzZUFsbCA9IHVzZUNhbGxiYWNrKFxuICAgIChjb2xsYXBzZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHsgY29sbGFwc2VkSURzLCB1cGRhdGVkUm93cyB9ID0gdG9nZ2xlQWxsUm93cyh7XG4gICAgICAgIGNvbGxhcHNlZCxcbiAgICAgICAgcm93cyxcbiAgICAgIH0pXG5cbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1NFVF9BTExfUk9XU19DT0xMQVBTRUQnLCBwYXRoLCB1cGRhdGVkUm93cyB9KVxuICAgICAgc2V0RG9jRmllbGRQcmVmZXJlbmNlcyhwYXRoLCB7IGNvbGxhcHNlZDogY29sbGFwc2VkSURzIH0pXG4gICAgfSxcbiAgICBbZGlzcGF0Y2hGaWVsZHMsIHBhdGgsIHJvd3MsIHNldERvY0ZpZWxkUHJlZmVyZW5jZXNdLFxuICApXG5cbiAgY29uc3Qgc2V0Q29sbGFwc2UgPSB1c2VDYWxsYmFjayhcbiAgICAocm93SUQ6IHN0cmluZywgY29sbGFwc2VkOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbGxhcHNlZElEcywgdXBkYXRlZFJvd3MgfSA9IGV4dHJhY3RSb3dzQW5kQ29sbGFwc2VkSURzKHtcbiAgICAgICAgY29sbGFwc2VkLFxuICAgICAgICByb3dJRCxcbiAgICAgICAgcm93cyxcbiAgICAgIH0pXG5cbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1NFVF9ST1dfQ09MTEFQU0VEJywgcGF0aCwgdXBkYXRlZFJvd3MgfSlcbiAgICAgIHNldERvY0ZpZWxkUHJlZmVyZW5jZXMocGF0aCwgeyBjb2xsYXBzZWQ6IGNvbGxhcHNlZElEcyB9KVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzLCBwYXRoLCByb3dzLCBzZXREb2NGaWVsZFByZWZlcmVuY2VzXSxcbiAgKVxuXG4gIGNvbnN0IGNvcHlSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAocm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY2xpcGJvYXJkUmVzdWx0ID0gY2xpcGJvYXJkQ29weSh7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGJsb2NrczogY2xpZW50QmxvY2tzLFxuICAgICAgICBnZXREYXRhVG9Db3B5OiAoKSA9PlxuICAgICAgICAgIHJlZHVjZUZvcm1TdGF0ZUJ5UGF0aCh7XG4gICAgICAgICAgICBmb3JtU3RhdGU6IHsgLi4uZ2V0RmllbGRzKCkgfSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICAgIHQsXG4gICAgICB9KVxuXG4gICAgICBpZiAodHlwZW9mIGNsaXBib2FyZFJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoY2xpcGJvYXJkUmVzdWx0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3Quc3VjY2Vzcyh0KCdnZW5lcmFsOmNvcGllZCcpKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NsaWVudEJsb2NrcywgcGF0aCwgdCwgdHlwZSwgZ2V0RmllbGRzXSxcbiAgKVxuXG4gIGNvbnN0IHBhc3RlUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHBhc3RlQXJncyA9IHtcbiAgICAgICAgb25QYXN0ZTogKGRhdGFGcm9tQ2xpcGJvYXJkOiBDbGlwYm9hcmRQYXN0ZURhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7IC4uLmdldEZpZWxkcygpIH1cbiAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IG1lcmdlRm9ybVN0YXRlRnJvbUNsaXBib2FyZCh7XG4gICAgICAgICAgICBkYXRhRnJvbUNsaXBib2FyZCxcbiAgICAgICAgICAgIGZvcm1TdGF0ZSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJlcGxhY2VTdGF0ZShuZXdTdGF0ZSlcbiAgICAgICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgICAgICB9LFxuICAgICAgICBwYXRoLFxuICAgICAgICBzY2hlbWFCbG9ja3M6IGNsaWVudEJsb2NrcyxcbiAgICAgICAgdCxcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xpcGJvYXJkUmVzdWx0ID0gY2xpcGJvYXJkUGFzdGUocGFzdGVBcmdzKVxuXG4gICAgICBpZiAodHlwZW9mIGNsaXBib2FyZFJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoY2xpcGJvYXJkUmVzdWx0KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NsaWVudEJsb2NrcywgZ2V0RmllbGRzLCBwYXRoLCByZXBsYWNlU3RhdGUsIHNldE1vZGlmaWVkLCB0XSxcbiAgKVxuXG4gIGNvbnN0IHBhc3RlQmxvY2tzID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGFGcm9tQ2xpcGJvYXJkOiBDbGlwYm9hcmRQYXN0ZURhdGEpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1TdGF0ZSA9IHsgLi4uZ2V0RmllbGRzKCkgfVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSBtZXJnZUZvcm1TdGF0ZUZyb21DbGlwYm9hcmQoe1xuICAgICAgICBkYXRhRnJvbUNsaXBib2FyZCxcbiAgICAgICAgZm9ybVN0YXRlLFxuICAgICAgICBwYXRoLFxuICAgICAgfSlcbiAgICAgIHJlcGxhY2VTdGF0ZShuZXdTdGF0ZSlcbiAgICAgIHNldE1vZGlmaWVkKHRydWUpXG4gICAgfSxcbiAgICBbZ2V0RmllbGRzLCBwYXRoLCByZXBsYWNlU3RhdGUsIHNldE1vZGlmaWVkXSxcbiAgKVxuXG4gIGNvbnN0IGhhc01heFJvd3MgPSBtYXhSb3dzICYmIHJvd3MubGVuZ3RoID49IG1heFJvd3NcblxuICBjb25zdCBmaWVsZEVycm9yQ291bnQgPSBlcnJvclBhdGhzLmxlbmd0aFxuICBjb25zdCBmaWVsZEhhc0Vycm9ycyA9IHN1Ym1pdHRlZCAmJiBmaWVsZEVycm9yQ291bnQgKyAodmFsaWQgPyAwIDogMSkgPiAwXG5cbiAgY29uc3Qgc2hvd01pblJvd3MgPSByb3dzLmxlbmd0aCA8IG1pblJvd3MgfHwgKHJlcXVpcmVkICYmIHJvd3MubGVuZ3RoID09PSAwKVxuICBjb25zdCBzaG93UmVxdWlyZWQgPSByZWFkT25seSAmJiByb3dzLmxlbmd0aCA9PT0gMFxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgZmllbGRCYXNlQ2xhc3MsXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBmaWVsZEhhc0Vycm9ycyA/IGAke2Jhc2VDbGFzc30tLWhhcy1lcnJvcmAgOiBgJHtiYXNlQ2xhc3N9LS1oYXMtbm8tZXJyb3JgLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBpZD17YGZpZWxkLSR7cGF0aD8ucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICBzdHlsZT17c3R5bGVzfVxuICAgID5cbiAgICAgIHtzaG93RXJyb3IgJiYgKFxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtFcnJvcn1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRXJyb3IgcGF0aD17cGF0aH0gc2hvd0Vycm9yPXtzaG93RXJyb3J9IC8+fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlci13cmFwYH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRpbmctd2l0aC1lcnJvcmB9PlxuICAgICAgICAgICAgPGgzPlxuICAgICAgICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtMYWJlbH1cbiAgICAgICAgICAgICAgICBGYWxsYmFjaz17XG4gICAgICAgICAgICAgICAgICA8RmllbGRMYWJlbFxuICAgICAgICAgICAgICAgICAgICBhcz1cInNwYW5cIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZD17bG9jYWxpemVkfVxuICAgICAgICAgICAgICAgICAgICBwYXRoPXtwYXRofVxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICB7ZmllbGRIYXNFcnJvcnMgJiYgZmllbGRFcnJvckNvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxFcnJvclBpbGwgY291bnQ9e2ZpZWxkRXJyb3JDb3VudH0gaTE4bj17aTE4bn0gd2l0aE1lc3NhZ2UgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyLWFjdGlvbnNgfT5cbiAgICAgICAgICAgIHtyb3dzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlci1hY3Rpb25gfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0b2dnbGVDb2xsYXBzZUFsbCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdmaWVsZHM6Y29sbGFwc2VBbGwnKX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlci1hY3Rpb25gfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0b2dnbGVDb2xsYXBzZUFsbChmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dCgnZmllbGRzOnNob3dBbGwnKX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8Q2xpcGJvYXJkQWN0aW9uXG4gICAgICAgICAgICAgICAgYWxsb3dDb3B5PXtyb3dzPy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICAgIGFsbG93UGFzdGU9eyFyZWFkT25seX1cbiAgICAgICAgICAgICAgICBibG9ja3M9e2NsaWVudEJsb2Nrc31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlci1hY3Rpb25gfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBnZXREYXRhVG9Db3B5PXsoKSA9PlxuICAgICAgICAgICAgICAgICAgcmVkdWNlRm9ybVN0YXRlQnlQYXRoKHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybVN0YXRlOiB7IC4uLmdldEZpZWxkcygpIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvblBhc3RlPXtwYXN0ZUJsb2Nrc31cbiAgICAgICAgICAgICAgICBwYXRoPXtwYXRofVxuICAgICAgICAgICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgICAgLz5cbiAgICAgIDwvaGVhZGVyPlxuICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgPE51bGxpZnlMb2NhbGVGaWVsZFxuICAgICAgICBmaWVsZFZhbHVlPXt2YWx1ZX1cbiAgICAgICAgbG9jYWxpemVkPXtsb2NhbGl6ZWR9XG4gICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgIC8+XG4gICAgICB7KHJvd3MubGVuZ3RoID4gMCB8fCAoIXZhbGlkICYmIChzaG93UmVxdWlyZWQgfHwgc2hvd01pblJvd3MpKSkgJiYgKFxuICAgICAgICA8RHJhZ2dhYmxlU29ydGFibGVcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3Jvd3NgfVxuICAgICAgICAgIGlkcz17cm93cy5tYXAoKHJvdykgPT4gcm93LmlkKX1cbiAgICAgICAgICBvbkRyYWdFbmQ9eyh7IG1vdmVGcm9tSW5kZXgsIG1vdmVUb0luZGV4IH0pID0+IG1vdmVSb3cobW92ZUZyb21JbmRleCwgbW92ZVRvSW5kZXgpfVxuICAgICAgICA+XG4gICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYmxvY2tUeXBlLCBpc0xvYWRpbmcgfSA9IHJvd1xuXG4gICAgICAgICAgICBjb25zdCBibG9ja0NvbmZpZzogQ2xpZW50QmxvY2sgPVxuICAgICAgICAgICAgICBjb25maWcuYmxvY2tzTWFwW2Jsb2NrVHlwZV0gPz8gY2xpZW50QmxvY2tzLmZpbmQoKGJsb2NrKSA9PiBibG9jay5zbHVnID09PSBibG9ja1R5cGUpXG5cbiAgICAgICAgICAgIGlmIChibG9ja0NvbmZpZykge1xuICAgICAgICAgICAgICBjb25zdCByb3dQYXRoID0gYCR7cGF0aH0uJHtpfWBcblxuICAgICAgICAgICAgICBjb25zdCByb3dFcnJvckNvdW50ID0gZXJyb3JQYXRocy5maWx0ZXIoKGVycm9yUGF0aCkgPT5cbiAgICAgICAgICAgICAgICBlcnJvclBhdGguc3RhcnRzV2l0aChyb3dQYXRoICsgJy4nKSxcbiAgICAgICAgICAgICAgKS5sZW5ndGhcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVTb3J0YWJsZUl0ZW1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyZWFkT25seSB8fCBkaXNhYmxlZCB8fCAhaXNTb3J0YWJsZX1cbiAgICAgICAgICAgICAgICAgIGlkPXtyb3cuaWR9XG4gICAgICAgICAgICAgICAgICBrZXk9e3Jvdy5pZH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGRyYWdnYWJsZVNvcnRhYmxlSXRlbVByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxCbG9ja1Jvd1xuICAgICAgICAgICAgICAgICAgICAgIHsuLi5kcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICBhZGRSb3c9e2FkZFJvd31cbiAgICAgICAgICAgICAgICAgICAgICBibG9jaz17YmxvY2tDb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyBhbGwgYmxvY2tzLCBub3QganVzdCBjbGllbnRCbG9ja3NBZnRlckZpbHRlciwgYXMgZXhpc3RpbmcgYmxvY2tzIHNob3VsZCBzdGlsbCBiZSBkaXNwbGF5ZWQgZXZlbiBpZiB0aGV5IGRvbid0IG1hdGNoIHRoZSBuZXcgZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgYmxvY2tzPXtjbGllbnRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgY29weVJvdz17Y29weVJvd31cbiAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVSb3c9e2R1cGxpY2F0ZVJvd31cbiAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvdW50PXtyb3dFcnJvckNvdW50fVxuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcz17YmxvY2tDb25maWcuZmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgIGhhc01heFJvd3M9e2hhc01heFJvd3N9XG4gICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgaXNTb3J0YWJsZT17aXNTb3J0YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICBMYWJlbD17cm93cz8uW2ldPy5jdXN0b21Db21wb25lbnRzPy5Sb3dMYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9e2xhYmVsc31cbiAgICAgICAgICAgICAgICAgICAgICBtb3ZlUm93PXttb3ZlUm93fVxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg9e3BhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgcGFzdGVSb3c9e3Bhc3RlUm93fVxuICAgICAgICAgICAgICAgICAgICAgIHBhdGg9e3Jvd1BhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM9e3Blcm1pc3Npb25zfVxuICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXtyZWFkT25seSB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSb3c9e3JlbW92ZVJvd31cbiAgICAgICAgICAgICAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudD17cm93cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgc2NoZW1hUGF0aD17c2NoZW1hUGF0aCArIGJsb2NrQ29uZmlnLnNsdWd9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q29sbGFwc2U9e3NldENvbGxhcHNlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0RyYWdnYWJsZVNvcnRhYmxlSXRlbT5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHshZWRpdGluZ0RlZmF1bHRMb2NhbGUgJiYgKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7c2hvd01pblJvd3MgJiYgKFxuICAgICAgICAgICAgICAgIDxCYW5uZXIgdHlwZT1cImVycm9yXCI+XG4gICAgICAgICAgICAgICAgICB7dCgndmFsaWRhdGlvbjpyZXF1aXJlc0F0TGVhc3QnLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBtaW5Sb3dzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgICBnZXRUcmFuc2xhdGlvbihtaW5Sb3dzID4gMSA/IGxhYmVscy5wbHVyYWwgOiBsYWJlbHMuc2luZ3VsYXIsIGkxOG4pIHx8XG4gICAgICAgICAgICAgICAgICAgICAgdChtaW5Sb3dzID4gMSA/ICdnZW5lcmFsOnJvdycgOiAnZ2VuZXJhbDpyb3dzJyksXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L0Jhbm5lcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3Nob3dSZXF1aXJlZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJhbm5lcj5cbiAgICAgICAgICAgICAgICAgIHt0KCd2YWxpZGF0aW9uOmZpZWxkSGFzTm8nLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihsYWJlbHMucGx1cmFsLCBpMThuKSB9KX1cbiAgICAgICAgICAgICAgICA8L0Jhbm5lcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9EcmFnZ2FibGVTb3J0YWJsZT5cbiAgICAgICl9XG4gICAgICB7IWhhc01heFJvd3MgJiYgKFxuICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgPERyYXdlclRvZ2dsZXJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJhd2VyLXRvZ2dsZXJgfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5IHx8IGRpc2FibGVkfVxuICAgICAgICAgICAgc2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwiaWNvbi1sYWJlbFwiXG4gICAgICAgICAgICAgIGRpc2FibGVkPXtyZWFkT25seSB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgZWw9XCJzcGFuXCJcbiAgICAgICAgICAgICAgaWNvbj1cInBsdXNcIlxuICAgICAgICAgICAgICBpY29uUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgaWNvblN0eWxlPVwid2l0aC1ib3JkZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnZmllbGRzOmFkZExhYmVsJywgeyBsYWJlbDogZ2V0VHJhbnNsYXRpb24obGFiZWxzLnNpbmd1bGFyLCBpMThuKSB9KX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRHJhd2VyVG9nZ2xlcj5cbiAgICAgICAgICA8QmxvY2tzRHJhd2VyXG4gICAgICAgICAgICBhZGRSb3c9e2FkZFJvd31cbiAgICAgICAgICAgIGFkZFJvd0luZGV4PXtyb3dzPy5sZW5ndGggfHwgMH1cbiAgICAgICAgICAgIC8vIE9ubHkgYWxsb3cgY2hvb3NpbmcgZmlsdGVyZWQgYmxvY2tzXG4gICAgICAgICAgICBibG9ja3M9e2NsaWVudEJsb2Nrc0FmdGVyRmlsdGVyfVxuICAgICAgICAgICAgZHJhd2VyU2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgICAgIGxhYmVscz17bGFiZWxzfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApfVxuICAgICAge0FmdGVySW5wdXR9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IEJsb2Nrc0ZpZWxkID0gd2l0aENvbmRpdGlvbihCbG9ja3NGaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRCbG9jaywgQ2xpZW50RmllbGQsIExhYmVscywgUm93LCBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgVXNlRHJhZ2dhYmxlU29ydGFibGVSZXR1cm4gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9EcmFnZ2FibGVTb3J0YWJsZS91c2VEcmFnZ2FibGVTb3J0YWJsZS90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgUmVuZGVyRmllbGRzUHJvcHMgfSBmcm9tICcuLi8uLi9mb3Jtcy9SZW5kZXJGaWVsZHMvdHlwZXMuanMnXG5cbmltcG9ydCB7IENvbGxhcHNpYmxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQ29sbGFwc2libGUvaW5kZXguanMnXG5pbXBvcnQgeyBFcnJvclBpbGwgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9FcnJvclBpbGwvaW5kZXguanMnXG5pbXBvcnQgeyBQaWxsIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUGlsbC9pbmRleC5qcydcbmltcG9ydCB7IFNoaW1tZXJFZmZlY3QgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9TaGltbWVyRWZmZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybVN1Ym1pdHRlZCB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IFJlbmRlckZpZWxkcyB9IGZyb20gJy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9pbmRleC5qcydcbmltcG9ydCB7IFJvd0xhYmVsIH0gZnJvbSAnLi4vLi4vZm9ybXMvUm93TGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUaHJvdHRsZWRWYWx1ZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRocm90dGxlZFZhbHVlLmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBSb3dBY3Rpb25zIH0gZnJvbSAnLi9Sb3dBY3Rpb25zLmpzJ1xuaW1wb3J0IHsgU2VjdGlvblRpdGxlIH0gZnJvbSAnLi9TZWN0aW9uVGl0bGUvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdibG9ja3MtZmllbGQnXG5cbnR5cGUgQmxvY2tzRmllbGRQcm9wcyA9IHtcbiAgYWRkUm93OiAocm93SW5kZXg6IG51bWJlciwgYmxvY2tUeXBlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkXG4gIGJsb2NrOiBDbGllbnRCbG9ja1xuICBibG9ja3M6IChDbGllbnRCbG9jayB8IHN0cmluZylbXSB8IENsaWVudEJsb2NrW11cbiAgY29weVJvdzogKHJvd0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgZHVwbGljYXRlUm93OiAocm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICBlcnJvckNvdW50OiBudW1iZXJcbiAgZmllbGRzOiBDbGllbnRGaWVsZFtdXG4gIGhhc01heFJvd3M/OiBib29sZWFuXG4gIGlzTG9hZGluZz86IGJvb2xlYW5cbiAgaXNTb3J0YWJsZT86IGJvb2xlYW5cbiAgTGFiZWw/OiBSZWFjdC5SZWFjdE5vZGVcbiAgbGFiZWxzOiBMYWJlbHNcbiAgbW92ZVJvdzogKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgcGFyZW50UGF0aDogc3RyaW5nXG4gIHBhc3RlUm93OiAocm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICBwYXRoOiBzdHJpbmdcbiAgcGVybWlzc2lvbnM6IFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnNcbiAgcmVhZE9ubHk6IGJvb2xlYW5cbiAgcmVtb3ZlUm93OiAocm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICByb3c6IFJvd1xuICByb3dDb3VudDogbnVtYmVyXG4gIHJvd0luZGV4OiBudW1iZXJcbiAgc2NoZW1hUGF0aDogc3RyaW5nXG4gIHNldENvbGxhcHNlOiAoaWQ6IHN0cmluZywgY29sbGFwc2VkOiBib29sZWFuKSA9PiB2b2lkXG59ICYgVXNlRHJhZ2dhYmxlU29ydGFibGVSZXR1cm5cblxuZXhwb3J0IGNvbnN0IEJsb2NrUm93OiBSZWFjdC5GQzxCbG9ja3NGaWVsZFByb3BzPiA9ICh7XG4gIGFkZFJvdyxcbiAgYXR0cmlidXRlcyxcbiAgYmxvY2ssXG4gIGJsb2NrcyxcbiAgY29weVJvdyxcbiAgZHVwbGljYXRlUm93LFxuICBlcnJvckNvdW50LFxuICBmaWVsZHMsXG4gIGhhc01heFJvd3MsXG4gIGlzTG9hZGluZzogaXNMb2FkaW5nRnJvbVByb3BzLFxuICBpc1NvcnRhYmxlLFxuICBMYWJlbCxcbiAgbGFiZWxzLFxuICBsaXN0ZW5lcnMsXG4gIG1vdmVSb3csXG4gIHBhcmVudFBhdGgsXG4gIHBhc3RlUm93LFxuICBwYXRoLFxuICBwZXJtaXNzaW9ucyxcbiAgcmVhZE9ubHksXG4gIHJlbW92ZVJvdyxcbiAgcm93LFxuICByb3dDb3VudCxcbiAgcm93SW5kZXgsXG4gIHNjaGVtYVBhdGgsXG4gIHNldENvbGxhcHNlLFxuICBzZXROb2RlUmVmLFxuICB0cmFuc2Zvcm0sXG59KSA9PiB7XG4gIGNvbnN0IGlzTG9hZGluZyA9IHVzZVRocm90dGxlZFZhbHVlKGlzTG9hZGluZ0Zyb21Qcm9wcywgNTAwKVxuXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBoYXNTdWJtaXR0ZWQgPSB1c2VGb3JtU3VibWl0dGVkKClcblxuICBjb25zdCBmaWVsZEhhc0Vycm9ycyA9IGhhc1N1Ym1pdHRlZCAmJiBlcnJvckNvdW50ID4gMFxuXG4gIGNvbnN0IHNob3dCbG9ja05hbWUgPSAhYmxvY2suYWRtaW4/LmRpc2FibGVCbG9ja05hbWVcblxuICBjb25zdCBjbGFzc05hbWVzID0gW1xuICAgIGAke2Jhc2VDbGFzc31fX3Jvd2AsXG4gICAgZmllbGRIYXNFcnJvcnMgPyBgJHtiYXNlQ2xhc3N9X19yb3ctLWhhcy1lcnJvcnNgIDogYCR7YmFzZUNsYXNzfV9fcm93LS1uby1lcnJvcnNgLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICBsZXQgYmxvY2tQZXJtaXNzaW9uczogUmVuZGVyRmllbGRzUHJvcHNbJ3Blcm1pc3Npb25zJ10gPSB0cnVlXG5cbiAgaWYgKHBlcm1pc3Npb25zID09PSB0cnVlKSB7XG4gICAgYmxvY2tQZXJtaXNzaW9ucyA9IHRydWVcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uc0Jsb2NrU3BlY2lmaWMgPSBwZXJtaXNzaW9ucz8uYmxvY2tzPy5bYmxvY2suc2x1Z10gfHwgcGVybWlzc2lvbnM/LmJsb2Nrc1xuICAgIGlmIChwZXJtaXNzaW9uc0Jsb2NrU3BlY2lmaWMgPT09IHRydWUpIHtcbiAgICAgIGJsb2NrUGVybWlzc2lvbnMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uc0Jsb2NrU3BlY2lmaWM/LmZpZWxkcykge1xuICAgICAgYmxvY2tQZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zQmxvY2tTcGVjaWZpYy5maWVsZHNcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGZhbGwgYmFjayB0byByZWFkLW9ubHkgbW9kZSBiYXNlZCBvbiBwZXJtaXNzaW9uIHN0cnVjdHVyZVxuICAgICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGZpZWxkLWxldmVsIGFjY2VzcyBjb250cm9sIGV4aXN0cyBidXQgYmxvY2sgcGVybWlzc2lvbnMgd2VyZSBzYW5pdGl6ZWRcbiAgICAgIGlmICh0eXBlb2YgcGVybWlzc2lvbnMgPT09ICdvYmplY3QnICYmIHBlcm1pc3Npb25zICYmICFwZXJtaXNzaW9uc0Jsb2NrU3BlY2lmaWMpIHtcbiAgICAgICAgLy8gSWYgcGVybWlzc2lvbnMgb2JqZWN0IGV4aXN0cyBidXQgaGFzIG5vIGJsb2NrLXNwZWNpZmljIHBlcm1pc3Npb25zLFxuICAgICAgICAvLyBjaGVjayBpZiBpdCBoYXMgYW55IHJlc3RyaWN0aXZlIGNoYXJhY3RlcmlzdGljc1xuICAgICAgICBjb25zdCBoYXNSZWFkUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLnJlYWQgPT09IHRydWVcbiAgICAgICAgY29uc3QgbWlzc2luZ0NyZWF0ZU9yVXBkYXRlID0gIXBlcm1pc3Npb25zLmNyZWF0ZSB8fCAhcGVybWlzc2lvbnMudXBkYXRlXG4gICAgICAgIGNvbnN0IGhhc1Jlc3RyaWN0aXZlU3RydWN0dXJlID1cbiAgICAgICAgICBoYXNSZWFkUGVybWlzc2lvbiAmJlxuICAgICAgICAgIChtaXNzaW5nQ3JlYXRlT3JVcGRhdGUgfHxcbiAgICAgICAgICAgICh0eXBlb2YgcGVybWlzc2lvbnMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBlcm1pc3Npb25zKS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMucmVhZCkpXG5cbiAgICAgICAgaWYgKGhhc1Jlc3RyaWN0aXZlU3RydWN0dXJlKSB7XG4gICAgICAgICAgYmxvY2tQZXJtaXNzaW9ucyA9IHsgcmVhZDogdHJ1ZSB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmxvY2tQZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zQmxvY2tTcGVjaWZpYz8uZmllbGRzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJsb2NrUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc0Jsb2NrU3BlY2lmaWM/LmZpZWxkc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgaWQ9e2Ake3BhcmVudFBhdGg/LnNwbGl0KCcuJykuam9pbignLScpfS1yb3ctJHtyb3dJbmRleH1gfVxuICAgICAga2V5PXtgJHtwYXJlbnRQYXRofS1yb3ctJHtyb3dJbmRleH1gfVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgYWN0aW9ucz17XG4gICAgICAgICAgIXJlYWRPbmx5ID8gKFxuICAgICAgICAgICAgPFJvd0FjdGlvbnNcbiAgICAgICAgICAgICAgYWRkUm93PXthZGRSb3d9XG4gICAgICAgICAgICAgIGJsb2Nrcz17YmxvY2tzfVxuICAgICAgICAgICAgICBibG9ja1R5cGU9e3Jvdy5ibG9ja1R5cGV9XG4gICAgICAgICAgICAgIGNvcHlSb3c9e2NvcHlSb3d9XG4gICAgICAgICAgICAgIGR1cGxpY2F0ZVJvdz17ZHVwbGljYXRlUm93fVxuICAgICAgICAgICAgICBmaWVsZHM9e2Jsb2NrLmZpZWxkc31cbiAgICAgICAgICAgICAgaGFzTWF4Um93cz17aGFzTWF4Um93c31cbiAgICAgICAgICAgICAgaXNTb3J0YWJsZT17aXNTb3J0YWJsZX1cbiAgICAgICAgICAgICAgbGFiZWxzPXtsYWJlbHN9XG4gICAgICAgICAgICAgIG1vdmVSb3c9e21vdmVSb3d9XG4gICAgICAgICAgICAgIHBhc3RlUm93PXtwYXN0ZVJvd31cbiAgICAgICAgICAgICAgcmVtb3ZlUm93PXtyZW1vdmVSb3d9XG4gICAgICAgICAgICAgIHJvd0NvdW50PXtyb3dDb3VudH1cbiAgICAgICAgICAgICAgcm93SW5kZXg9e3Jvd0luZGV4fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzfVxuICAgICAgICBjb2xsYXBzaWJsZVN0eWxlPXtmaWVsZEhhc0Vycm9ycyA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgIGRyYWdIYW5kbGVQcm9wcz17XG4gICAgICAgICAgaXNTb3J0YWJsZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgaWQ6IHJvdy5pZCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVycyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXI9e1xuICAgICAgICAgIGlzTG9hZGluZyA/IChcbiAgICAgICAgICAgIDxTaGltbWVyRWZmZWN0IGhlaWdodD1cIjFyZW1cIiB3aWR0aD1cIjhyZW1cIiAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmxvY2staGVhZGVyYH0+XG4gICAgICAgICAgICAgIDxSb3dMYWJlbFxuICAgICAgICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ibG9jay1udW1iZXJgfT5cbiAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKHJvd0luZGV4ICsgMSkucGFkU3RhcnQoMiwgJzAnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8UGlsbFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmxvY2stcGlsbCAke2Jhc2VDbGFzc31fX2Jsb2NrLXBpbGwtJHtyb3cuYmxvY2tUeXBlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgcGlsbFN0eWxlPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7Z2V0VHJhbnNsYXRpb24oYmxvY2subGFiZWxzLnNpbmd1bGFyLCBpMThuKX1cbiAgICAgICAgICAgICAgICAgICAgPC9QaWxsPlxuICAgICAgICAgICAgICAgICAgICB7c2hvd0Jsb2NrTmFtZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb25UaXRsZSBwYXRoPXtgJHtwYXRofS5ibG9ja05hbWVgfSByZWFkT25seT17cmVhZE9ubHl9IC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGF0aD17cGF0aH1cbiAgICAgICAgICAgICAgICByb3dOdW1iZXI9e3Jvd0luZGV4fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7ZmllbGRIYXNFcnJvcnMgJiYgPEVycm9yUGlsbCBjb3VudD17ZXJyb3JDb3VudH0gaTE4bj17aTE4bn0gd2l0aE1lc3NhZ2UgLz59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaXNDb2xsYXBzZWQ9e3Jvdy5jb2xsYXBzZWR9XG4gICAgICAgIGtleT17cm93LmlkfVxuICAgICAgICBvblRvZ2dsZT17KGNvbGxhcHNlZCkgPT4gc2V0Q29sbGFwc2Uocm93LmlkLCBjb2xsYXBzZWQpfVxuICAgICAgPlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxTaGltbWVyRWZmZWN0IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFJlbmRlckZpZWxkc1xuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWVsZHNgfVxuICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICBtYXJnaW5zPVwic21hbGxcIlxuICAgICAgICAgICAgcGFyZW50SW5kZXhQYXRoPVwiXCJcbiAgICAgICAgICAgIHBhcmVudFBhdGg9e3BhdGh9XG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFQYXRoPXtzY2hlbWFQYXRofVxuICAgICAgICAgICAgcGVybWlzc2lvbnM9e2Jsb2NrUGVybWlzc2lvbnN9XG4gICAgICAgICAgICByZWFkT25seT17cmVhZE9ubHl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50VHlwZSwgSFRNTEF0dHJpYnV0ZXMgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCcgLy8gVE9ETzogYWJzdHJhY3QgdGhpcyBvdXQgdG8gc3VwcG9ydCBhbGwgcm91dGVyc1xuXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnLi4vTGluay9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgUGlsbFN0eWxlID1cbiAgfCAnYWx3YXlzLXdoaXRlJ1xuICB8ICdkYXJrJ1xuICB8ICdlcnJvcidcbiAgfCAnbGlnaHQnXG4gIHwgJ2xpZ2h0LWdyYXknXG4gIHwgJ3N1Y2Nlc3MnXG4gIHwgJ3dhcm5pbmcnXG4gIHwgJ3doaXRlJ1xuXG5leHBvcnQgdHlwZSBQaWxsUHJvcHMgPSB7XG4gIGFsaWduSWNvbj86ICdsZWZ0JyB8ICdyaWdodCdcbiAgJ2FyaWEtY2hlY2tlZCc/OiBib29sZWFuXG4gICdhcmlhLWNvbnRyb2xzJz86IHN0cmluZ1xuICAnYXJpYS1leHBhbmRlZCc/OiBib29sZWFuXG4gICdhcmlhLWxhYmVsJz86IHN0cmluZ1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZHJhZ2dhYmxlPzogYm9vbGVhblxuICBlbGVtZW50UHJvcHM/OiB7XG4gICAgcmVmOiBSZWFjdC5SZWZDYWxsYmFjazxIVE1MRWxlbWVudD5cbiAgfSAmIEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PlxuICBpY29uPzogUmVhY3QuUmVhY3ROb2RlXG4gIGlkPzogc3RyaW5nXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAnbGlnaHQnXG4gICAqL1xuICBwaWxsU3R5bGU/OiBQaWxsU3R5bGVcbiAgcm91bmRlZD86IGJvb2xlYW5cbiAgc2l6ZT86ICdtZWRpdW0nIHwgJ3NtYWxsJ1xuICB0bz86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBSZW5kZXJlZFR5cGVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgb25DbGljaz86ICgpID0+IHZvaWRcbiAgdG86IHN0cmluZ1xuICB0eXBlPzogJ2J1dHRvbidcbn1cblxuaW1wb3J0IHsgdXNlRHJhZ2dhYmxlU29ydGFibGUgfSBmcm9tICcuLi9EcmFnZ2FibGVTb3J0YWJsZS91c2VEcmFnZ2FibGVTb3J0YWJsZS9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncGlsbCdcblxuY29uc3QgRHJhZ2dhYmxlUGlsbDogUmVhY3QuRkM8UGlsbFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBjbGFzc05hbWUgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBpc0RyYWdnaW5nLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIHRyYW5zZm9ybSB9ID0gdXNlRHJhZ2dhYmxlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFN0YXRpY1BpbGxcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGNsYXNzTmFtZT17W2lzRHJhZ2dpbmcgJiYgYCR7YmFzZUNsYXNzfS0taXMtZHJhZ2dpbmdgLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICBlbGVtZW50UHJvcHM9e3tcbiAgICAgICAgLi4ubGlzdGVuZXJzLFxuICAgICAgICAuLi5hdHRyaWJ1dGVzLFxuICAgICAgICByZWY6IHNldE5vZGVSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICApXG59XG5cbmNvbnN0IFN0YXRpY1BpbGw6IFJlYWN0LkZDPFBpbGxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGFsaWduSWNvbiA9ICdyaWdodCcsXG4gICAgJ2FyaWEtY2hlY2tlZCc6IGFyaWFDaGVja2VkLFxuICAgICdhcmlhLWNvbnRyb2xzJzogYXJpYUNvbnRyb2xzLFxuICAgICdhcmlhLWV4cGFuZGVkJzogYXJpYUV4cGFuZGVkLFxuICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICBkcmFnZ2FibGUsXG4gICAgZWxlbWVudFByb3BzLFxuICAgIGljb24sXG4gICAgb25DbGljayxcbiAgICBwaWxsU3R5bGUgPSAnbGlnaHQnLFxuICAgIHJvdW5kZWQsXG4gICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgIHRvLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbaXNIeWRyYXRlZCwgc2V0SXNIeWRyYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldElzSHlkcmF0ZWQodHJ1ZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaXNCdXR0b24gPSBvbkNsaWNrICYmICF0b1xuXG4gIGNvbnN0IGNsYXNzZXMgPSBbXG4gICAgYmFzZUNsYXNzLFxuICAgIGAke2Jhc2VDbGFzc30tLXN0eWxlLSR7cGlsbFN0eWxlfWAsXG4gICAgYCR7YmFzZUNsYXNzfS0tc2l6ZS0ke3NpemV9YCxcbiAgICBjbGFzc05hbWUgJiYgY2xhc3NOYW1lLFxuICAgIHRvICYmIGAke2Jhc2VDbGFzc30tLWhhcy1saW5rYCxcbiAgICAodG8gfHwgb25DbGljaykgJiYgYCR7YmFzZUNsYXNzfS0taGFzLWFjdGlvbmAsXG4gICAgaWNvbiAmJiBgJHtiYXNlQ2xhc3N9LS1oYXMtaWNvbmAsXG4gICAgaWNvbiAmJiBgJHtiYXNlQ2xhc3N9LS1hbGlnbi1pY29uLSR7YWxpZ25JY29ufWAsXG4gICAgZHJhZ2dhYmxlICYmIGAke2Jhc2VDbGFzc30tLWRyYWdnYWJsZWAsXG4gICAgcm91bmRlZCAmJiBgJHtiYXNlQ2xhc3N9LS1yb3VuZGVkYCxcbiAgXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgbGV0IEVsZW1lbnQ6IEVsZW1lbnRUeXBlIHwgUmVhY3QuRkM8UmVuZGVyZWRUeXBlUHJvcHM+ID0gJ2RpdidcblxuICBpZiAoaXNCdXR0b24pIHtcbiAgICBFbGVtZW50ID0gJ2J1dHRvbidcbiAgfVxuXG4gIGlmICh0bykge1xuICAgIEVsZW1lbnQgPSBMaW5rXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFbGVtZW50XG4gICAgICB7Li4uZWxlbWVudFByb3BzfVxuICAgICAgYXJpYS1jaGVja2VkPXthcmlhQ2hlY2tlZH1cbiAgICAgIGFyaWEtY29udHJvbHM9e2FyaWFDb250cm9sc31cbiAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgIGRpc2FibGVkPXtpc0J1dHRvbiA/ICFpc0h5ZHJhdGVkIDogdW5kZWZpbmVkfVxuICAgICAgaHJlZj17dG8gfHwgbnVsbH1cbiAgICAgIGlkPXtpZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXtpc0J1dHRvbiA/ICdidXR0b24nIDogdW5kZWZpbmVkfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWxgfT57Y2hpbGRyZW59PC9zcGFuPlxuICAgICAge0Jvb2xlYW4oaWNvbikgJiYgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pY29uYH0+e2ljb259PC9zcGFuPn1cbiAgICA8L0VsZW1lbnQ+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFBpbGw6IFJlYWN0LkZDPFBpbGxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkcmFnZ2FibGUgfSA9IHByb3BzXG5cbiAgaWYgKGRyYWdnYWJsZSkge1xuICAgIHJldHVybiA8RHJhZ2dhYmxlUGlsbCB7Li4ucHJvcHN9IC8+XG4gIH1cbiAgcmV0dXJuIDxTdGF0aWNQaWxsIHsuLi5wcm9wc30gLz5cbn1cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuLyoqXG4gKiBBIGN1c3RvbSBSZWFjdCBob29rIHRvIHRocm90dGxlIGEgdmFsdWUgc28gdGhhdCBpdCB1cGRhdGVzIG5vIG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IGBkZWxheWAgbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHRocm90dGxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheSAtIFRoZSBtaW5pbXVtIGRlbGF5IChpbiBtaWxsaXNlY29uZHMpIGJldHdlZW4gdXBkYXRlcy5cbiAqIEByZXR1cm5zIHthbnl9IC0gVGhlIHRocm90dGxlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRocm90dGxlZFZhbHVlKHZhbHVlLCBkZWxheSkge1xuICBjb25zdCBbdGhyb3R0bGVkVmFsdWUsIHNldFRocm90dGxlZFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0VGhyb3R0bGVkVmFsdWUodmFsdWUpXG4gICAgfSwgZGVsYXkpXG5cbiAgICAvLyBDbGVhbnVwIHRoZSB0aW1lb3V0IGlmIHRoZSB2YWx1ZSBjaGFuZ2VzIGJlZm9yZSB0aGUgZGVsYXkgaXMgY29tcGxldGVkXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3ZhbHVlLCBkZWxheV0pXG5cbiAgcmV0dXJuIHRocm90dGxlZFZhbHVlXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xpZW50QmxvY2ssIENsaWVudEZpZWxkLCBMYWJlbHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQXJyYXlBY3Rpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9BcnJheUFjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZURyYXdlclNsdWcgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9EcmF3ZXIvdXNlRHJhd2VyU2x1Zy5qcydcbmltcG9ydCB7IEJsb2Nrc0RyYXdlciB9IGZyb20gJy4vQmxvY2tzRHJhd2VyL2luZGV4LmpzJ1xuXG5leHBvcnQgY29uc3QgUm93QWN0aW9uczogUmVhY3QuRkM8e1xuICByZWFkb25seSBhZGRSb3c6IChyb3dJbmRleDogbnVtYmVyLCBibG9ja1R5cGU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWRcbiAgcmVhZG9ubHkgYmxvY2tzOiAoQ2xpZW50QmxvY2sgfCBzdHJpbmcpW11cbiAgcmVhZG9ubHkgYmxvY2tUeXBlOiBzdHJpbmdcbiAgcmVhZG9ubHkgY29weVJvdzogKHJvd0luZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgZHVwbGljYXRlUm93OiAocm93SW5kZXg6IG51bWJlciwgYmxvY2tUeXBlOiBzdHJpbmcpID0+IHZvaWRcbiAgcmVhZG9ubHkgZmllbGRzOiBDbGllbnRGaWVsZFtdXG4gIHJlYWRvbmx5IGhhc01heFJvd3M/OiBib29sZWFuXG4gIHJlYWRvbmx5IGlzU29ydGFibGU/OiBib29sZWFuXG4gIHJlYWRvbmx5IGxhYmVsczogTGFiZWxzXG4gIHJlYWRvbmx5IG1vdmVSb3c6IChmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHBhc3RlUm93OiAocm93SW5kZXg6IG51bWJlcikgPT4gdm9pZFxuICByZWFkb25seSByZW1vdmVSb3c6IChyb3dJbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHJvd0NvdW50OiBudW1iZXJcbiAgcmVhZG9ubHkgcm93SW5kZXg6IG51bWJlclxufT4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGFkZFJvdyxcbiAgICBibG9ja3MsXG4gICAgYmxvY2tUeXBlLFxuICAgIGNvcHlSb3csXG4gICAgZHVwbGljYXRlUm93LFxuICAgIGhhc01heFJvd3MsXG4gICAgaXNTb3J0YWJsZSxcbiAgICBsYWJlbHMsXG4gICAgbW92ZVJvdyxcbiAgICBwYXN0ZVJvdyxcbiAgICByZW1vdmVSb3csXG4gICAgcm93Q291bnQsXG4gICAgcm93SW5kZXgsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IGRyYXdlclNsdWcgPSB1c2VEcmF3ZXJTbHVnKCdibG9ja3MtZHJhd2VyJylcblxuICBjb25zdCBbaW5kZXhUb0FkZCwgc2V0SW5kZXhUb0FkZF0gPSBSZWFjdC51c2VTdGF0ZTxudWxsIHwgbnVtYmVyPihudWxsKVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPEJsb2Nrc0RyYXdlclxuICAgICAgICBhZGRSb3c9eyhfLCByb3dCbG9ja1R5cGUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGFkZFJvdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdm9pZCBhZGRSb3coaW5kZXhUb0FkZCwgcm93QmxvY2tUeXBlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjbG9zZU1vZGFsKGRyYXdlclNsdWcpXG4gICAgICAgIH19XG4gICAgICAgIGFkZFJvd0luZGV4PXtyb3dJbmRleH1cbiAgICAgICAgYmxvY2tzPXtibG9ja3N9XG4gICAgICAgIGRyYXdlclNsdWc9e2RyYXdlclNsdWd9XG4gICAgICAgIGxhYmVscz17bGFiZWxzfVxuICAgICAgLz5cbiAgICAgIDxBcnJheUFjdGlvblxuICAgICAgICBhZGRSb3c9eyhpbmRleCkgPT4ge1xuICAgICAgICAgIHNldEluZGV4VG9BZGQoaW5kZXgpXG4gICAgICAgICAgb3Blbk1vZGFsKGRyYXdlclNsdWcpXG4gICAgICAgIH19XG4gICAgICAgIGNvcHlSb3c9e2NvcHlSb3d9XG4gICAgICAgIGR1cGxpY2F0ZVJvdz17KCkgPT4gZHVwbGljYXRlUm93KHJvd0luZGV4LCBibG9ja1R5cGUpfVxuICAgICAgICBoYXNNYXhSb3dzPXtoYXNNYXhSb3dzfVxuICAgICAgICBpbmRleD17cm93SW5kZXh9XG4gICAgICAgIGlzU29ydGFibGU9e2lzU29ydGFibGV9XG4gICAgICAgIG1vdmVSb3c9e21vdmVSb3d9XG4gICAgICAgIHBhc3RlUm93PXtwYXN0ZVJvd31cbiAgICAgICAgcmVtb3ZlUm93PXtyZW1vdmVSb3d9XG4gICAgICAgIHJvd0NvdW50PXtyb3dDb3VudH1cbiAgICAgIC8+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudEJsb2NrLCBMYWJlbHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBEcmF3ZXIgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9EcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEJsb2NrU2VsZWN0b3IgfSBmcm9tICcuLi9CbG9ja1NlbGVjdG9yL2luZGV4LmpzJ1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgYWRkUm93OiAoaW5kZXg6IG51bWJlciwgYmxvY2tUeXBlPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICByZWFkb25seSBhZGRSb3dJbmRleDogbnVtYmVyXG4gIHJlYWRvbmx5IGJsb2NrczogKENsaWVudEJsb2NrIHwgc3RyaW5nKVtdXG4gIHJlYWRvbmx5IGRyYXdlclNsdWc6IHN0cmluZ1xuICByZWFkb25seSBsYWJlbHM6IExhYmVsc1xufVxuXG5leHBvcnQgY29uc3QgQmxvY2tzRHJhd2VyOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBhZGRSb3csIGFkZFJvd0luZGV4LCBibG9ja3MsIGRyYXdlclNsdWcsIGxhYmVscyB9ID0gcHJvcHNcblxuICBjb25zdCB7IGNsb3NlTW9kYWwsIGlzTW9kYWxPcGVuIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBbc2VhcmNoVGVybU92ZXJyaWRlLCBzZXRTZWFyY2hUZXJtT3ZlcnJpZGVdID0gUmVhY3QudXNlU3RhdGUoJycpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTW9kYWxPcGVuKGRyYXdlclNsdWcpKSB7XG4gICAgICBzZXRTZWFyY2hUZXJtT3ZlcnJpZGUoJycpXG4gICAgfVxuICB9LCBbaXNNb2RhbE9wZW4sIGRyYXdlclNsdWddKVxuXG4gIHJldHVybiAoXG4gICAgPERyYXdlclxuICAgICAgc2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgIHRpdGxlPXt0KCdmaWVsZHM6YWRkTGFiZWwnLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihsYWJlbHMuc2luZ3VsYXIsIGkxOG4pIH0pfVxuICAgID5cbiAgICAgIDxCbG9ja1NlbGVjdG9yXG4gICAgICAgIGJsb2Nrcz17YmxvY2tzfVxuICAgICAgICBvblNlbGVjdD17KHNsdWcpID0+IHtcbiAgICAgICAgICB2b2lkIGFkZFJvdyhhZGRSb3dJbmRleCwgc2x1ZylcbiAgICAgICAgICBjbG9zZU1vZGFsKGRyYXdlclNsdWcpXG4gICAgICAgIH19XG4gICAgICAgIHNlYXJjaFRlcm09e3NlYXJjaFRlcm1PdmVycmlkZX1cbiAgICAgIC8+XG4gICAgPC9EcmF3ZXI+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBJMThuQ2xpZW50IH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHR5cGUgeyBDbGllbnRCbG9jayB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFRodW1ibmFpbENhcmQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9UaHVtYm5haWxDYXJkL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVmYXVsdEJsb2NrSW1hZ2UgfSBmcm9tICcuLi8uLi8uLi9ncmFwaGljcy9EZWZhdWx0QmxvY2tJbWFnZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbnRyb2xsYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ29udHJvbGxhYmxlU3RhdGUuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBCbG9ja1NlYXJjaCB9IGZyb20gJy4vQmxvY2tTZWFyY2gvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGJsb2NrczogKENsaWVudEJsb2NrIHwgc3RyaW5nKVtdXG4gIHJlYWRvbmx5IG9uU2VsZWN0PzogKGJsb2NrVHlwZTogc3RyaW5nKSA9PiB2b2lkXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBzZWFyY2ggdGVybSBzdGF0ZSBleHRlcm5hbGx5XG4gICAqL1xuICBzZWFyY2hUZXJtPzogc3RyaW5nXG59XG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdibG9ja3MtZHJhd2VyJ1xuXG5jb25zdCBnZXRCbG9ja0xhYmVsID0gKGJsb2NrOiBDbGllbnRCbG9jaywgaTE4bjogSTE4bkNsaWVudCkgPT4ge1xuICBpZiAodHlwZW9mIGJsb2NrLmxhYmVscy5zaW5ndWxhciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYmxvY2subGFiZWxzLnNpbmd1bGFyLnRvTG93ZXJDYXNlKClcbiAgfVxuICBpZiAodHlwZW9mIGJsb2NrLmxhYmVscy5zaW5ndWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb24oYmxvY2subGFiZWxzLnNpbmd1bGFyLCBpMThuKS50b0xvd2VyQ2FzZSgpXG4gIH1cbiAgcmV0dXJuICcnXG59XG5cbmV4cG9ydCBjb25zdCBCbG9ja1NlbGVjdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBibG9ja3MsIG9uU2VsZWN0LCBzZWFyY2hUZXJtOiBzZWFyY2hUZXJtRnJvbVByb3BzIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtzZWFyY2hUZXJtLCBzZXRTZWFyY2hUZXJtXSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKHNlYXJjaFRlcm1Gcm9tUHJvcHMgPz8gJycpXG5cbiAgY29uc3QgW2ZpbHRlcmVkQmxvY2tzLCBzZXRGaWx0ZXJlZEJsb2Nrc10gPSB1c2VTdGF0ZShibG9ja3MpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBibG9ja0dyb3VwcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwczogUmVjb3JkPHN0cmluZywgKENsaWVudEJsb2NrIHwgc3RyaW5nKVtdPiA9IHtcbiAgICAgIF9ub25lOiBbXSxcbiAgICB9XG5cbiAgICBmaWx0ZXJlZEJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBibG9jayA9PT0gJ29iamVjdCcgJiYgYmxvY2suYWRtaW4/Lmdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gYmxvY2suYWRtaW4uZ3JvdXBcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0eXBlb2YgZ3JvdXAgPT09ICdzdHJpbmcnID8gZ3JvdXAgOiBnZXRUcmFuc2xhdGlvbihncm91cCwgaTE4bilcblxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihncm91cHMsIGxhYmVsKSkge1xuICAgICAgICAgIGdyb3Vwc1tsYWJlbF0ucHVzaChibG9jaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cHNbbGFiZWxdID0gW2Jsb2NrXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cHMuX25vbmUucHVzaChibG9jaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGdyb3Vwc1xuICB9LCBbZmlsdGVyZWRCbG9ja3MsIGkxOG5dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoVGVybVRvVXNlID0gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpXG5cbiAgICBjb25zdCBtYXRjaGluZ0Jsb2NrcyA9IGJsb2Nrcz8ucmVkdWNlKChtYXRjaGVkQmxvY2tzLCBfYmxvY2spID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrID0gdHlwZW9mIF9ibG9jayA9PT0gJ3N0cmluZycgPyBjb25maWcuYmxvY2tzTWFwW19ibG9ja10gOiBfYmxvY2tcbiAgICAgIGNvbnN0IGJsb2NrTGFiZWwgPSBnZXRCbG9ja0xhYmVsKGJsb2NrLCBpMThuKVxuICAgICAgaWYgKGJsb2NrTGFiZWwuaW5jbHVkZXMoc2VhcmNoVGVybVRvVXNlKSkge1xuICAgICAgICBtYXRjaGVkQmxvY2tzLnB1c2goYmxvY2spXG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2hlZEJsb2Nrc1xuICAgIH0sIFtdKVxuXG4gICAgc2V0RmlsdGVyZWRCbG9ja3MobWF0Y2hpbmdCbG9ja3MpXG4gIH0sIFtzZWFyY2hUZXJtLCBibG9ja3MsIGkxOG4sIGNvbmZpZy5ibG9ja3NNYXBdKVxuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgPEJsb2NrU2VhcmNoIHNldFNlYXJjaFRlcm09e3NldFNlYXJjaFRlcm19IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmxvY2tzLXdyYXBwZXJgfT5cbiAgICAgICAgPHVsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmxvY2stZ3JvdXBzYH0+XG4gICAgICAgICAge09iamVjdC5lbnRyaWVzKGJsb2NrR3JvdXBzKS5tYXAoKFtncm91cExhYmVsLCBncm91cEJsb2Nrc10pID0+XG4gICAgICAgICAgICAhZ3JvdXBCbG9ja3MubGVuZ3RoID8gbnVsbCA6IChcbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19ibG9jay1ncm91cGAsXG4gICAgICAgICAgICAgICAgICBncm91cExhYmVsID09PSAnX25vbmUnICYmIGAke2Jhc2VDbGFzc31fX2Jsb2NrLWdyb3VwLW5vbmVgLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgICAgICAga2V5PXtncm91cExhYmVsfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2dyb3VwTGFiZWwgIT09ICdfbm9uZScgJiYgKFxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmxvY2stZ3JvdXAtbGFiZWxgfT57Z3JvdXBMYWJlbH08L2gzPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmxvY2tzYH0+XG4gICAgICAgICAgICAgICAgICB7Z3JvdXBCbG9ja3MubWFwKChfYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gdHlwZW9mIF9ibG9jayA9PT0gJ3N0cmluZycgPyBjb25maWcuYmxvY2tzTWFwW19ibG9ja10gOiBfYmxvY2tcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHNsdWcsIGFkbWluLCBpbWFnZUFsdFRleHQsIGltYWdlVVJMLCBsYWJlbHM6IGJsb2NrTGFiZWxzIH0gPSBibG9ja1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbFVSTCA9IGFkbWluPy5pbWFnZXM/LnRodW1ibmFpbFxuICAgICAgICAgICAgICAgICAgICAgID8gdHlwZW9mIGFkbWluLmltYWdlcy50aHVtYm5haWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGFkbWluLmltYWdlcy50aHVtYm5haWxcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYWRtaW4uaW1hZ2VzLnRodW1ibmFpbC51cmxcbiAgICAgICAgICAgICAgICAgICAgICA6IGltYWdlVVJMXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbEFsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgYWRtaW4/LmltYWdlcz8udGh1bWJuYWlsICYmIHR5cGVvZiBhZG1pbi5pbWFnZXMudGh1bWJuYWlsICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhZG1pbi5pbWFnZXMudGh1bWJuYWlsLmFsdFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpbWFnZUFsdFRleHRcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Jsb2NrYH0ga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGh1bWJuYWlsQ2FyZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkxhYmVsPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2dldFRyYW5zbGF0aW9uKGJsb2NrTGFiZWxzPy5zaW5ndWxhciwgaTE4bil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9uU2VsZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdChzbHVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJuYWlsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZGVmYXVsdC1pbWFnZWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RodW1ibmFpbFVSTCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9e3RodW1ibmFpbEFsdH0gc3JjPXt0aHVtYm5haWxVUkx9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGVmYXVsdEJsb2NrSW1hZ2UgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgKX1cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBUeXBlV2l0aElEIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBmb3JtYXREb2NUaXRsZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9mb3JtYXREb2NUaXRsZS9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgdHlwZSBUaHVtYm5haWxDYXJkUHJvcHMgPSB7XG4gIGFsaWduTGFiZWw/OiAnY2VudGVyJyB8ICdsZWZ0J1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY29sbGVjdGlvbj86IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgZG9jPzogeyBmaWxlbmFtZT86IHN0cmluZyB9ICYgVHlwZVdpdGhJRFxuICBsYWJlbD86IHN0cmluZ1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZFxuICBvbktleURvd24/OiAoKSA9PiB2b2lkXG4gIHRodW1ibmFpbDogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IGJhc2VDbGFzcyA9ICd0aHVtYm5haWwtY2FyZCdcblxuZXhwb3J0IGNvbnN0IFRodW1ibmFpbENhcmQ6IFJlYWN0LkZDPFRodW1ibmFpbENhcmRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduTGFiZWwsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbGxlY3Rpb24sXG4gICAgZG9jLFxuICAgIGxhYmVsOiBsYWJlbEZyb21Qcm9wcyxcbiAgICBvbkNsaWNrLFxuICAgIHRodW1ibmFpbCxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICBiYXNlQ2xhc3MsXG4gICAgY2xhc3NOYW1lLFxuICAgIHR5cGVvZiBvbkNsaWNrID09PSAnZnVuY3Rpb24nICYmIGAke2Jhc2VDbGFzc30tLWhhcy1vbi1jbGlja2AsXG4gICAgYWxpZ25MYWJlbCAmJiBgJHtiYXNlQ2xhc3N9LS1hbGlnbi1sYWJlbC0ke2FsaWduTGFiZWx9YCxcbiAgXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgbGV0IHRpdGxlID0gbGFiZWxGcm9tUHJvcHNcblxuICBpZiAoIXRpdGxlKSB7XG4gICAgdGl0bGUgPSBmb3JtYXREb2NUaXRsZSh7XG4gICAgICBjb2xsZWN0aW9uQ29uZmlnOiBjb2xsZWN0aW9uLFxuICAgICAgZGF0YTogZG9jLFxuICAgICAgZGF0ZUZvcm1hdDogY29uZmlnLmFkbWluLmRhdGVGb3JtYXQsXG4gICAgICBmYWxsYmFjazogZG9jPy5maWxlbmFtZSxcbiAgICAgIGkxOG4sXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvbiBjbGFzc05hbWU9e2NsYXNzZXN9IG9uQ2xpY2s9e29uQ2xpY2t9IHRpdGxlPXt0aXRsZX0gdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RodW1ibmFpbGB9Pnt0aHVtYm5haWx9PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWxgfT57dGl0bGV9PC9kaXY+XG4gICAgPC9idXR0b24+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnXG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0QmxvY2tJbWFnZTogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IFtwYXR0ZXJuSURdID0gdXNlU3RhdGUoKCkgPT4gYHBhdHRlcm4ke3V1aWQoKX1gKVxuXG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgaGVpZ2h0PVwiMTUxXCJcbiAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBzbGljZVwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDIzMSAxNTFcIlxuICAgICAgd2lkdGg9XCIyMzFcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgPGcgY2xpcFBhdGg9e2B1cmwoIyR7cGF0dGVybklEfSlgfT5cbiAgICAgICAgPHJlY3QgZmlsbD1cIiNEOUQ5RDlcIiBoZWlnaHQ9XCIxMDAlXCIgcng9XCIyXCIgd2lkdGg9XCIxMDAlXCIgLz5cbiAgICAgICAgPHJlY3RcbiAgICAgICAgICBmaWxsPVwiI0JDQkNCQ1wiXG4gICAgICAgICAgaGVpZ2h0PVwiMTE2LjA2M1wiXG4gICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDUyLjA2ODcgMzMuNzA1MSA3OS4zMDUxKVwiXG4gICAgICAgICAgd2lkdGg9XCI4NS44NTkzXCJcbiAgICAgICAgICB4PVwiMzMuNzA1MVwiXG4gICAgICAgICAgeT1cIjc5LjMwNTFcIlxuICAgICAgICAvPlxuICAgICAgICA8cmVjdFxuICAgICAgICAgIGZpbGw9XCIjQkNCQ0JDXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxMTYuMDYzXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNTIuMDY4NyA4Ni4xMjE5IDkyLjYyNzIpXCJcbiAgICAgICAgICB3aWR0aD1cIjg1Ljg1OTNcIlxuICAgICAgICAgIHg9XCI4Ni4xMjE5XCJcbiAgICAgICAgICB5PVwiOTIuNjI3MlwiXG4gICAgICAgIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxODlcIiBjeT1cIjQ1XCIgZmlsbD1cIiNCQ0JDQkNcIiByPVwiMTlcIiAvPlxuICAgICAgICA8cmVjdCBmaWxsPVwiI0I4QjhCOFwiIGhlaWdodD1cIjVcIiByeD1cIjIuNVwiIHdpZHRoPVwiOThcIiB4PVwiNjZcIiB5PVwiNzBcIiAvPlxuICAgICAgICA8cmVjdCBmaWxsPVwiI0I4QjhCOFwiIGhlaWdodD1cIjVcIiByeD1cIjIuNVwiIHdpZHRoPVwiNzZcIiB4PVwiNzdcIiB5PVwiODJcIiAvPlxuICAgICAgPC9nPlxuICAgICAgPGRlZnM+XG4gICAgICAgIDxjbGlwUGF0aCBpZD17YCR7cGF0dGVybklEfWB9PlxuICAgICAgICAgIDxyZWN0IGZpbGw9XCJ3aGl0ZVwiIGhlaWdodD1cIjE1MVwiIHdpZHRoPVwiMjMxXCIgLz5cbiAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgIDwvZGVmcz5cbiAgICA8L3N2Zz5cbiAgKVxufVxuIiwiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuXG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICAvL1xuICAvLyBOb3RlIHRvIGZ1dHVyZS1zZWxmOiBObywgeW91IGNhbid0IHJlbW92ZSB0aGUgYHRvTG93ZXJDYXNlKClgIGNhbGwuXG4gIC8vIFJFRjogaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNjc3I2lzc3VlY29tbWVudC0xNzU3MzUxMzUxXG4gIHJldHVybiAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIHZhciB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTtcbiAgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuICByZXR1cm4gdXVpZDtcbn1cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cblxudmFyIGdldFJhbmRvbVZhbHVlcztcbnZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwidmFyIHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuICAgIHJldHVybiBidWY7XG4gIH1cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IHY0OyIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vaWNvbnMvU2VhcmNoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2Jsb2NrLXNlYXJjaCdcblxuZXhwb3J0IGNvbnN0IEJsb2NrU2VhcmNoOiBSZWFjdC5GQzx7IHNldFNlYXJjaFRlcm06ICh0ZXJtOiBzdHJpbmcpID0+IHZvaWQgfT4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBzZXRTZWFyY2hUZXJtIH0gPSBwcm9wc1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZSkgPT4ge1xuICAgIHNldFNlYXJjaFRlcm0oZS50YXJnZXQudmFsdWUpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faW5wdXRgfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17dCgnZmllbGRzOnNlYXJjaEZvckJsb2NrJyl9XG4gICAgICAvPlxuICAgICAgPFNlYXJjaEljb24gLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IFNlYXJjaEljb246IFJlYWN0LkZDID0gKCkgPT4gKFxuICA8c3ZnXG4gICAgY2xhc3NOYW1lPVwiaWNvbiBpY29uLS1zZWFyY2hcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9XCJzdHJva2VcIlxuICAgICAgZD1cIk0xNiAxNkwxMy4xMzMzIDEzLjEzMzNNMTQuNjY2NyA5LjMzMzMzQzE0LjY2NjcgMTIuMjc4OSAxMi4yNzg5IDE0LjY2NjcgOS4zMzMzMyAxNC42NjY3QzYuMzg3ODEgMTQuNjY2NyA0IDEyLjI3ODkgNCA5LjMzMzMzQzQgNi4zODc4MSA2LjM4NzgxIDQgOS4zMzMzMyA0QzEyLjI3ODkgNCAxNC42NjY3IDYuMzg3ODEgMTQuNjY2NyA5LjMzMzMzWlwiXG4gICAgICBzdHJva2VMaW5lY2FwPVwic3F1YXJlXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3NlY3Rpb24tdGl0bGUnXG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICBjdXN0b21PbkNoYW5nZT86IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZFxuICBjdXN0b21WYWx1ZT86IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgcmVhZE9ubHk6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBBbiBpbnB1dCBmaWVsZCByZXByZXNlbnRpbmcgdGhlIGJsb2NrJ3MgYGJsb2NrTmFtZWAgcHJvcGVydHkgLSByZXNwb25zaWJsZSBmb3IgcmVhZGluZyBhbmQgc2F2aW5nIHRoZSBgYmxvY2tOYW1lYFxuICogcHJvcGVydHkgZnJvbS9pbnRvIHRoZSBwcm92aWRlZCBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgU2VjdGlvblRpdGxlOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjdXN0b21PbkNoYW5nZSwgY3VzdG9tVmFsdWUsIHBhdGgsIHJlYWRPbmx5IH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgc2V0VmFsdWUsIHZhbHVlIH0gPSB1c2VGaWVsZCh7IHBhdGggfSlcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgY2xhc3NlcyA9IFtiYXNlQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcblxuICBjb25zdCBvbkNoYW5nZSA9XG4gICAgY3VzdG9tT25DaGFuZ2UgfHxcbiAgICAoKGUpID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpXG4gICAgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzfSBkYXRhLXZhbHVlPXtjdXN0b21WYWx1ZSB8fCB2YWx1ZX0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dGB9XG4gICAgICAgIGlkPXtwYXRofVxuICAgICAgICBuYW1lPXtwYXRofVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXt0KCdnZW5lcmFsOnVudGl0bGVkJyl9XG4gICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICB2YWx1ZT17Y3VzdG9tVmFsdWUgfHwgKHZhbHVlIGFzIHN0cmluZykgfHwgJyd9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ29kZUZpZWxkQ2xpZW50Q29tcG9uZW50IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENvZGVFZGl0b3IgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Db2RlRWRpdG9yL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZEVycm9yL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy91c2VGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgeyBmaWVsZEJhc2VDbGFzcyB9IGZyb20gJy4uL3NoYXJlZC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBwcmlzbVRvTW9uYWNvTGFuZ3VhZ2VNYXAgPSB7XG4gIGpzOiAnamF2YXNjcmlwdCcsXG4gIHRzOiAndHlwZXNjcmlwdCcsXG4gIHRzeDogJ3R5cGVzY3JpcHQnLFxufVxuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29kZS1maWVsZCdcblxuY29uc3QgQ29kZUZpZWxkQ29tcG9uZW50OiBDb2RlRmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkOiB7XG4gICAgICBhZG1pbjogeyBjbGFzc05hbWUsIGRlc2NyaXB0aW9uLCBlZGl0b3JPcHRpb25zLCBlZGl0b3JQcm9wcywgbGFuZ3VhZ2UgPSAnamF2YXNjcmlwdCcgfSA9IHt9LFxuICAgICAgbGFiZWwsXG4gICAgICBsb2NhbGl6ZWQsXG4gICAgICByZXF1aXJlZCxcbiAgICB9LFxuICAgIG9uTW91bnQsXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgaW5wdXRDaGFuZ2VGcm9tUmVmID0gUmVhY3QudXNlUmVmPCdmb3JtU3RhdGUnIHwgJ2ludGVybmFsRWRpdG9yJz4oJ2Zvcm1TdGF0ZScpXG4gIGNvbnN0IFtyZWNhbGN1bGF0ZWRIZWlnaHRBdCwgc2V0UmVjYWxjdWxhdGVkSGVpZ2h0QXRdID0gdXNlU3RhdGU8bnVtYmVyIHwgdW5kZWZpbmVkPihEYXRlLm5vdygpKVxuXG4gIGNvbnN0IG1lbW9pemVkVmFsaWRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBpbml0aWFsVmFsdWUsXG4gICAgcGF0aCxcbiAgICBzZXRWYWx1ZSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsdWUsXG4gIH0gPSB1c2VGaWVsZDxzdHJpbmc+KHtcbiAgICBwb3RlbnRpYWxseVN0YWxlUGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBzdHJpbmdWYWx1ZVJlZiA9IFJlYWN0LnVzZVJlZjxzdHJpbmc+KFxuICAgICh2YWx1ZSB8fCBpbml0aWFsVmFsdWUpICE9PSB1bmRlZmluZWQgPyAodmFsdWUgPz8gaW5pdGlhbFZhbHVlKSA6IHVuZGVmaW5lZCxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWw6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHJlYWRPbmx5IHx8IGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaW5wdXRDaGFuZ2VGcm9tUmVmLmN1cnJlbnQgPSAnaW50ZXJuYWxFZGl0b3InXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFZhbHVlKHZhbCA/IHZhbCA6IG51bGwpXG4gICAgICAgIHN0cmluZ1ZhbHVlUmVmLmN1cnJlbnQgPSB2YWxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VmFsdWUodmFsID8gdmFsIDogbnVsbClcbiAgICAgICAgc3RyaW5nVmFsdWVSZWYuY3VycmVudCA9IHZhbFxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlYWRPbmx5LCBkaXNhYmxlZCwgc2V0VmFsdWVdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRDaGFuZ2VGcm9tUmVmLmN1cnJlbnQgPT09ICdmb3JtU3RhdGUnKSB7XG4gICAgICBzdHJpbmdWYWx1ZVJlZi5jdXJyZW50ID1cbiAgICAgICAgKHZhbHVlIHx8IGluaXRpYWxWYWx1ZSkgIT09IHVuZGVmaW5lZCA/ICh2YWx1ZSA/PyBpbml0aWFsVmFsdWUpIDogdW5kZWZpbmVkXG4gICAgICBzZXRSZWNhbGN1bGF0ZWRIZWlnaHRBdChEYXRlLm5vdygpKVxuICAgIH1cblxuICAgIGlucHV0Q2hhbmdlRnJvbVJlZi5jdXJyZW50ID0gJ2Zvcm1TdGF0ZSdcbiAgfSwgW2luaXRpYWxWYWx1ZSwgcGF0aCwgdmFsdWVdKVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgZmllbGRCYXNlQ2xhc3MsXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBzaG93RXJyb3IgJiYgJ2Vycm9yJyxcbiAgICAgICAgKHJlYWRPbmx5IHx8IGRpc2FibGVkKSAmJiAncmVhZC1vbmx5JyxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgc3R5bGU9e3N0eWxlc31cbiAgICA+XG4gICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgIEZhbGxiYWNrPXtcbiAgICAgICAgICA8RmllbGRMYWJlbCBsYWJlbD17bGFiZWx9IGxvY2FsaXplZD17bG9jYWxpemVkfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7ZmllbGRCYXNlQ2xhc3N9X193cmFwYH0+XG4gICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Vycm9yfVxuICAgICAgICAgIEZhbGxiYWNrPXs8RmllbGRFcnJvciBwYXRoPXtwYXRofSBzaG93RXJyb3I9e3Nob3dFcnJvcn0gLz59XG4gICAgICAgIC8+XG4gICAgICAgIHtCZWZvcmVJbnB1dH1cbiAgICAgICAgPENvZGVFZGl0b3JcbiAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2U9e3ByaXNtVG9Nb25hY29MYW5ndWFnZU1hcFtsYW5ndWFnZV0gfHwgbGFuZ3VhZ2V9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICBvbk1vdW50PXtvbk1vdW50fVxuICAgICAgICAgIG9wdGlvbnM9e2VkaXRvck9wdGlvbnN9XG4gICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5IHx8IGRpc2FibGVkfVxuICAgICAgICAgIHJlY2FsY3VsYXRlZEhlaWdodEF0PXtyZWNhbGN1bGF0ZWRIZWlnaHRBdH1cbiAgICAgICAgICB2YWx1ZT17c3RyaW5nVmFsdWVSZWYuY3VycmVudH1cbiAgICAgICAgICB3cmFwcGVyUHJvcHM9e3tcbiAgICAgICAgICAgIGlkOiBgZmllbGQtJHtwYXRoPy5yZXBsYWNlKC9cXC4vZywgJ19fJyl9YCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi4oZWRpdG9yUHJvcHMgfHwge30pfVxuICAgICAgICAvPlxuICAgICAgICB7QWZ0ZXJJbnB1dH1cbiAgICAgIDwvZGl2PlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Rlc2NyaXB0aW9ufVxuICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENvZGVGaWVsZCA9IHdpdGhDb25kaXRpb24oQ29kZUZpZWxkQ29tcG9uZW50KVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgbGF6eSwgU3VzcGVuc2UgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFNoaW1tZXJFZmZlY3QgfSBmcm9tICcuLi9TaGltbWVyRWZmZWN0L2luZGV4LmpzJ1xuXG5jb25zdCBMYXp5RWRpdG9yID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vQ29kZUVkaXRvci5qcycpKVxuXG5leHBvcnQgdHlwZSB7IFByb3BzIH1cblxuZXhwb3J0IGNvbnN0IENvZGVFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxTdXNwZW5zZSBmYWxsYmFjaz17PFNoaW1tZXJFZmZlY3QgLz59PlxuICAgICAgPExhenlFZGl0b3Igey4uLnByb3BzfSAvPlxuICAgIDwvU3VzcGVuc2U+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDb2xsYXBzaWJsZUZpZWxkQ2xpZW50Q29tcG9uZW50LCBEb2N1bWVudFByZWZlcmVuY2VzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENvbGxhcHNpYmxlIGFzIENvbGxhcHNpYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0NvbGxhcHNpYmxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgRXJyb3JQaWxsIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRXJyb3JQaWxsL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyRmllbGRzIH0gZnJvbSAnLi4vLi4vZm9ybXMvUmVuZGVyRmllbGRzL2luZGV4LmpzJ1xuaW1wb3J0IHsgUm93TGFiZWwgfSBmcm9tICcuLi8uLi9mb3Jtcy9Sb3dMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyBXYXRjaENoaWxkRXJyb3JzIH0gZnJvbSAnLi4vLi4vZm9ybXMvV2F0Y2hDaGlsZEVycm9ycy9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZVByZWZlcmVuY2VzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1ByZWZlcmVuY2VzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBtZXJnZUZpZWxkU3R5bGVzIH0gZnJvbSAnLi4vbWVyZ2VGaWVsZFN0eWxlcy5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdjb2xsYXBzaWJsZS1maWVsZCdcblxuY29uc3QgQ29sbGFwc2libGVGaWVsZENvbXBvbmVudDogQ29sbGFwc2libGVGaWVsZENsaWVudENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGQ6IHsgYWRtaW46IHsgY2xhc3NOYW1lLCBkZXNjcmlwdGlvbiwgaW5pdENvbGxhcHNlZCA9IGZhbHNlIH0gPSB7fSwgZmllbGRzLCBsYWJlbCB9ID0ge30sXG4gICAgaW5kZXhQYXRoLFxuICAgIHBhcmVudFBhdGgsXG4gICAgcGFyZW50U2NoZW1hUGF0aCxcbiAgICBwYXRoLFxuICAgIHBlcm1pc3Npb25zLFxuICAgIHJlYWRPbmx5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBnZXRQcmVmZXJlbmNlLCBzZXRQcmVmZXJlbmNlIH0gPSB1c2VQcmVmZXJlbmNlcygpXG4gIGNvbnN0IHsgcHJlZmVyZW5jZXNLZXkgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IFtjb2xsYXBzZWRPbk1vdW50LCBzZXRDb2xsYXBzZWRPbk1vdW50XSA9IHVzZVN0YXRlPGJvb2xlYW4+KClcbiAgY29uc3QgZmllbGRQcmVmZXJlbmNlc0tleSA9IGBjb2xsYXBzaWJsZS0ke3BhdGg/LnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gXG4gIGNvbnN0IFtlcnJvckNvdW50LCBzZXRFcnJvckNvdW50XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IGZpZWxkSGFzRXJyb3JzID0gZXJyb3JDb3VudCA+IDBcblxuICBjb25zdCB7IGN1c3RvbUNvbXBvbmVudHM6IHsgQWZ0ZXJJbnB1dCwgQmVmb3JlSW5wdXQsIERlc2NyaXB0aW9uLCBMYWJlbCB9ID0ge30sIGRpc2FibGVkIH0gPVxuICAgIHVzZUZpZWxkKHtcbiAgICAgIHBhdGgsXG4gICAgfSlcblxuICBjb25zdCBvblRvZ2dsZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChuZXdDb2xsYXBzZWRTdGF0ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdQcmVmZXJlbmNlczogRG9jdW1lbnRQcmVmZXJlbmNlcyA9IGF3YWl0IGdldFByZWZlcmVuY2UocHJlZmVyZW5jZXNLZXkpXG5cbiAgICAgIGlmIChwcmVmZXJlbmNlc0tleSkge1xuICAgICAgICB2b2lkIHNldFByZWZlcmVuY2UocHJlZmVyZW5jZXNLZXksIHtcbiAgICAgICAgICAuLi5leGlzdGluZ1ByZWZlcmVuY2VzLFxuICAgICAgICAgIC4uLihwYXRoXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLihleGlzdGluZ1ByZWZlcmVuY2VzPy5maWVsZHMgfHwge30pLFxuICAgICAgICAgICAgICAgICAgW3BhdGhdOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nUHJlZmVyZW5jZXM/LmZpZWxkcz8uW3BhdGhdLFxuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IG5ld0NvbGxhcHNlZFN0YXRlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLihleGlzdGluZ1ByZWZlcmVuY2VzPy5maWVsZHMgfHwge30pLFxuICAgICAgICAgICAgICAgICAgW2ZpZWxkUHJlZmVyZW5jZXNLZXldOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nUHJlZmVyZW5jZXM/LmZpZWxkcz8uW2ZpZWxkUHJlZmVyZW5jZXNLZXldLFxuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IG5ld0NvbGxhcHNlZFN0YXRlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcmVmZXJlbmNlc0tleSwgZmllbGRQcmVmZXJlbmNlc0tleSwgZ2V0UHJlZmVyZW5jZSwgc2V0UHJlZmVyZW5jZSwgcGF0aF0sXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZldGNoSW5pdGlhbFN0YXRlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHByZWZlcmVuY2VzS2V5KSB7XG4gICAgICAgIGNvbnN0IHByZWZlcmVuY2VzID0gYXdhaXQgZ2V0UHJlZmVyZW5jZShwcmVmZXJlbmNlc0tleSlcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNQcmVmZXJlbmNlID0gcGF0aFxuICAgICAgICAgID8gcHJlZmVyZW5jZXM/LmZpZWxkcz8uW3BhdGhdPy5jb2xsYXBzZWRcbiAgICAgICAgICA6IHByZWZlcmVuY2VzPy5maWVsZHM/LltmaWVsZFByZWZlcmVuY2VzS2V5XT8uY29sbGFwc2VkXG5cbiAgICAgICAgaWYgKHNwZWNpZmljUHJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2V0Q29sbGFwc2VkT25Nb3VudChCb29sZWFuKHNwZWNpZmljUHJlZmVyZW5jZSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0Q29sbGFwc2VkT25Nb3VudCh0eXBlb2YgaW5pdENvbGxhcHNlZCA9PT0gJ2Jvb2xlYW4nID8gaW5pdENvbGxhcHNlZCA6IGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2xsYXBzZWRPbk1vdW50KHR5cGVvZiBpbml0Q29sbGFwc2VkID09PSAnYm9vbGVhbicgPyBpbml0Q29sbGFwc2VkIDogZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdm9pZCBmZXRjaEluaXRpYWxTdGF0ZSgpXG4gIH0sIFtnZXRQcmVmZXJlbmNlLCBwcmVmZXJlbmNlc0tleSwgZmllbGRQcmVmZXJlbmNlc0tleSwgaW5pdENvbGxhcHNlZCwgcGF0aF0pXG5cbiAgY29uc3Qgc3R5bGVzID0gdXNlTWVtbygoKSA9PiBtZXJnZUZpZWxkU3R5bGVzKGZpZWxkKSwgW2ZpZWxkXSlcblxuICBpZiAodHlwZW9mIGNvbGxhcHNlZE9uTW91bnQgIT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIDxXYXRjaENoaWxkRXJyb3JzXG4gICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAvLyByZW1vdmVzIHRoZSAnY29sbGFwc2libGUnIHBhdGggc2VnbWVudCwgaS5lLiBgX2luZGV4LTBgXG4gICAgICAgIHBhdGg9e3BhdGguc3BsaXQoJy4nKS5zbGljZSgwLCAtMSl9XG4gICAgICAgIHNldEVycm9yQ291bnQ9e3NldEVycm9yQ291bnR9XG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgICBmaWVsZEJhc2VDbGFzcyxcbiAgICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIGZpZWxkSGFzRXJyb3JzID8gYCR7YmFzZUNsYXNzfS0taGFzLWVycm9yYCA6IGAke2Jhc2VDbGFzc30tLWhhcy1uby1lcnJvcmAsXG4gICAgICAgIF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgaWQ9e2BmaWVsZC0ke2ZpZWxkUHJlZmVyZW5jZXNLZXl9YH1cbiAgICAgICAgc3R5bGU9e3N0eWxlc31cbiAgICAgID5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICA8Q29sbGFwc2libGVFbGVtZW50XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb2xsYXBzaWJsZWB9XG4gICAgICAgICAgY29sbGFwc2libGVTdHlsZT17ZmllbGRIYXNFcnJvcnMgPyAnZXJyb3InIDogJ2RlZmF1bHQnfVxuICAgICAgICAgIGhlYWRlcj17XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcm93LWxhYmVsLXdyYXBgfT5cbiAgICAgICAgICAgICAgPFJvd0xhYmVsIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9IGxhYmVsPXtnZXRUcmFuc2xhdGlvbihsYWJlbCwgaTE4bil9IHBhdGg9e3BhdGh9IC8+XG4gICAgICAgICAgICAgIHtmaWVsZEhhc0Vycm9ycyAmJiA8RXJyb3JQaWxsIGNvdW50PXtlcnJvckNvdW50fSBpMThuPXtpMThufSB3aXRoTWVzc2FnZSAvPn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0Q29sbGFwc2VkPXtjb2xsYXBzZWRPbk1vdW50fVxuICAgICAgICAgIG9uVG9nZ2xlPXtvblRvZ2dsZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxSZW5kZXJGaWVsZHNcbiAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgbWFyZ2lucz1cInNtYWxsXCJcbiAgICAgICAgICAgIHBhcmVudEluZGV4UGF0aD17aW5kZXhQYXRofVxuICAgICAgICAgICAgcGFyZW50UGF0aD17cGFyZW50UGF0aH1cbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9e3BhcmVudFNjaGVtYVBhdGh9XG4gICAgICAgICAgICBwZXJtaXNzaW9ucz17cGVybWlzc2lvbnN9XG4gICAgICAgICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZUVsZW1lbnQ+XG4gICAgICAgIHtBZnRlcklucHV0fVxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvRnJhZ21lbnQ+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENvbGxhcHNpYmxlRmllbGQgPSB3aXRoQ29uZGl0aW9uKENvbGxhcHNpYmxlRmllbGRDb21wb25lbnQpXG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xpZW50RmllbGQgfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVRocm90dGxlZEVmZmVjdCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRocm90dGxlZEVmZmVjdC5qcydcbmltcG9ydCB7IHVzZUFsbEZvcm1GaWVsZHMsIHVzZUZvcm1TdWJtaXR0ZWQgfSBmcm9tICcuLi9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyBidWlsZFBhdGhTZWdtZW50cyB9IGZyb20gJy4vYnVpbGRQYXRoU2VnbWVudHMuanMnXG5cbnR5cGUgVHJhY2tTdWJTY2hlbWFFcnJvckNvdW50UHJvcHMgPSB7XG4gIGZpZWxkcz86IENsaWVudEZpZWxkW11cbiAgLyoqXG4gICAqIFRoaXMgcGF0aCBzaG91bGQgb25seSBpbmNsdWRlIHBhdGggc2VnbWVudHMgdGhhdCBhZmZlY3QgZGF0YVxuICAgKiBpLmUuIGl0IHNob3VsZCBub3QgaW5jbHVkZSBfaW5kZXgtMCB0eXBlIHNlZ21lbnRzXG4gICAqXG4gICAqIEZvciBjb2xsYXBzaWJsZXMgYW5kIHRhYnMgeW91IGNhbiBzaW1wbHkgcGFzcyB0aGVpciBwYXJlbnQgcGF0aFxuICAgKi9cbiAgcGF0aDogKG51bWJlciB8IHN0cmluZylbXVxuICBzZXRFcnJvckNvdW50OiAoY291bnQ6IG51bWJlcikgPT4gdm9pZFxufVxuZXhwb3J0IGNvbnN0IFdhdGNoQ2hpbGRFcnJvcnM6IFJlYWN0LkZDPFRyYWNrU3ViU2NoZW1hRXJyb3JDb3VudFByb3BzPiA9ICh7XG4gIGZpZWxkcyxcbiAgcGF0aDogcGFyZW50UGF0aCxcbiAgc2V0RXJyb3JDb3VudCxcbn0pID0+IHtcbiAgY29uc3QgW2Zvcm1TdGF0ZV0gPSB1c2VBbGxGb3JtRmllbGRzKClcbiAgY29uc3QgaGFzU3VibWl0dGVkID0gdXNlRm9ybVN1Ym1pdHRlZCgpXG5cbiAgY29uc3Qgc2VnbWVudHNUb01hdGNoID0gYnVpbGRQYXRoU2VnbWVudHMoZmllbGRzKVxuXG4gIHVzZVRocm90dGxlZEVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBpZiAoaGFzU3VibWl0dGVkKSB7XG4gICAgICAgIGxldCBlcnJvckNvdW50ID0gMFxuICAgICAgICBPYmplY3QuZW50cmllcyhmb3JtU3RhdGUpLmZvckVhY2goKFtrZXldKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdTZWdtZW50ID0gc2VnbWVudHNUb01hdGNoPy5zb21lKChzZWdtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50VG9NYXRjaCA9IFsuLi5wYXJlbnRQYXRoLCBzZWdtZW50XS5qb2luKCcuJylcbiAgICAgICAgICAgIC8vIG1hdGNoIGZpZWxkcyB3aXRoIHNhbWUgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGlmIChzZWdtZW50VG9NYXRjaC5lbmRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICAgIC8vIE1hdGNoIGJvdGggbmVzdGVkIGZpZWxkcyAoa2V5IHN0YXJ0cyB3aXRoIHNlZ21lbnRUb01hdGNoKVxuICAgICAgICAgICAgICAvLyBhbmQgdGhlIGZpZWxkIGl0c2VsZiAoa2V5IGVxdWFscyBzZWdtZW50VG9NYXRjaCB3aXRob3V0IHRyYWlsaW5nIGRvdClcbiAgICAgICAgICAgICAgY29uc3QgcGF0aFdpdGhvdXREb3QgPSBzZWdtZW50VG9NYXRjaC5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICAgcmV0dXJuIGtleS5zdGFydHNXaXRoKHNlZ21lbnRUb01hdGNoKSB8fCBrZXkgPT09IHBhdGhXaXRob3V0RG90XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtYXRjaCBmaWVsZHMgd2l0aCBzYW1lIHBhdGhcbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IHNlZ21lbnRUb01hdGNoXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChtYXRjaGluZ1NlZ21lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhTdGF0ZSA9IGZvcm1TdGF0ZVtrZXldXG4gICAgICAgICAgICBpZiAoJ3ZhbGlkJyBpbiBwYXRoU3RhdGUgJiYgIXBhdGhTdGF0ZS52YWxpZCkge1xuICAgICAgICAgICAgICBlcnJvckNvdW50ICs9IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHNldEVycm9yQ291bnQoZXJyb3JDb3VudClcbiAgICAgIH1cbiAgICB9LFxuICAgIDI1MCxcbiAgICBbZm9ybVN0YXRlLCBoYXNTdWJtaXR0ZWQsIGZpZWxkc10sXG4gIClcblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5leHBvcnQgY29uc3QgYnVpbGRQYXRoU2VnbWVudHMgPSAoZmllbGRzOiBDbGllbnRGaWVsZFtdKTogKGAke3N0cmluZ30uYCB8IHN0cmluZylbXSA9PiB7XG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2M6IChgJHtzdHJpbmd9LmAgfCBzdHJpbmcpW10sIGZpZWxkKSA9PiB7XG4gICAgY29uc3QgZmllbGRzOiBDbGllbnRGaWVsZFtdID0gJ2ZpZWxkcycgaW4gZmllbGQgPyBmaWVsZC5maWVsZHMgOiB1bmRlZmluZWRcblxuICAgIGlmIChmaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAvLyBncm91cCwgYmxvY2ssIGFycmF5XG4gICAgICAgIGFjYy5wdXNoKGAke2ZpZWxkLm5hbWV9LmApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByb3dzLCBjb2xsYXBzaWJsZXMsIHVubmFtZWQtdGFiXG4gICAgICAgIGFjYy5wdXNoKC4uLmJ1aWxkUGF0aFNlZ21lbnRzKGZpZWxkcykpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndGFicycpIHtcbiAgICAgIC8vIHRhYnNcbiAgICAgIGlmICgndGFicycgaW4gZmllbGQpIHtcbiAgICAgICAgZmllbGQudGFicz8uZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCduYW1lJyBpbiB0YWIpIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKGAke3RhYi5uYW1lfS5gKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MucHVzaCguLi5idWlsZFBhdGhTZWdtZW50cyh0YWIuZmllbGRzKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgLy8gdGV4dCwgbnVtYmVyLCBkYXRlLCBldGMuXG4gICAgICBhY2MucHVzaChmaWVsZC5uYW1lKVxuICAgIH1cblxuICAgIHJldHVybiBhY2NcbiAgfSwgW10pXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgRGF0ZUZpZWxkQ2xpZW50Q29tcG9uZW50LCBEYXRlRmllbGRWYWxpZGF0aW9uIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgVFpEYXRlTWluaSBhcyBUWkRhdGUgfSBmcm9tICdAZGF0ZS1mbnMvdHovZGF0ZS9taW5pJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB0cmFuc3Bvc2UgfSBmcm9tICdkYXRlLWZucydcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IERhdGVQaWNrZXJGaWVsZCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RhdGVQaWNrZXIvaW5kZXguanMnXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBUaW1lem9uZVBpY2tlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1RpbWV6b25lUGlja2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZEVycm9yL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybSwgdXNlRm9ybUZpZWxkcyB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgeyBmaWVsZEJhc2VDbGFzcyB9IGZyb20gJy4uL3NoYXJlZC9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RhdGUtdGltZS1maWVsZCdcblxuY29uc3QgRGF0ZVRpbWVGaWVsZENvbXBvbmVudDogRGF0ZUZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZDoge1xuICAgICAgYWRtaW46IHsgY2xhc3NOYW1lLCBkYXRlOiBkYXRlUGlja2VyUHJvcHMsIGRlc2NyaXB0aW9uLCBwbGFjZWhvbGRlciB9ID0ge30sXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgdGltZXpvbmUsXG4gICAgfSxcbiAgICBwYXRoOiBwYXRoRnJvbVByb3BzLFxuICAgIHJlYWRPbmx5LFxuICAgIHZhbGlkYXRlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBwaWNrZXJBcHBlYXJhbmNlID0gZGF0ZVBpY2tlclByb3BzPy5waWNrZXJBcHBlYXJhbmNlIHx8ICdkZWZhdWx0J1xuXG4gIC8vIEdldCB0aGUgdXNlciB0aW1lem9uZSBzbyB3ZSBjYW4gYWRqdXN0IHRoZSBkaXNwbGF5ZWQgdmFsdWUgYWdhaW5zdCBpdFxuICBjb25zdCB1c2VyVGltZXpvbmUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmVcblxuICBjb25zdCB7IGNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgZGlzcGF0Y2hGaWVsZHMsIHNldE1vZGlmaWVkIH0gPSB1c2VGb3JtKClcblxuICBjb25zdCBtZW1vaXplZFZhbGlkYXRlOiBEYXRlRmllbGRWYWxpZGF0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh2YWx1ZSwgeyAuLi5vcHRpb25zLCByZXF1aXJlZCB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3ZhbGlkYXRlLCByZXF1aXJlZF0sXG4gIClcblxuICBjb25zdCB7XG4gICAgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIEVycm9yLCBMYWJlbCB9ID0ge30sXG4gICAgZGlzYWJsZWQsXG4gICAgcGF0aCxcbiAgICBzZXRWYWx1ZSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsdWUsXG4gIH0gPSB1c2VGaWVsZDxzdHJpbmc+KHtcbiAgICBwb3RlbnRpYWxseVN0YWxlUGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCB0aW1lem9uZVBhdGggPSBwYXRoICsgJ190eidcbiAgY29uc3QgdGltZXpvbmVGaWVsZCA9IHVzZUZvcm1GaWVsZHMoKFtmaWVsZHMsIF9dKSA9PiBmaWVsZHM/Llt0aW1lem9uZVBhdGhdKVxuXG4gIGNvbnN0IHN1cHBvcnRlZFRpbWV6b25lcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh0aW1lem9uZSAmJiB0eXBlb2YgdGltZXpvbmUgPT09ICdvYmplY3QnICYmIHRpbWV6b25lLnN1cHBvcnRlZFRpbWV6b25lcykge1xuICAgICAgcmV0dXJuIHRpbWV6b25lLnN1cHBvcnRlZFRpbWV6b25lc1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWcuYWRtaW4udGltZXpvbmVzLnN1cHBvcnRlZFRpbWV6b25lc1xuICB9LCBbY29uZmlnLmFkbWluLnRpbWV6b25lcy5zdXBwb3J0ZWRUaW1lem9uZXMsIHRpbWV6b25lXSlcblxuICAvKipcbiAgICogRGF0ZSBhcHBlYXJhbmNlIGRvZXNuJ3QgaW5jbHVkZSB0aW1lc3RhbXBzLFxuICAgKiB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIHBpbiB0aGUgdGltZSB0byBhbHdheXMgMTI6MDAgZm9yIHRoZSBzZWxlY3RlZCBkYXRlXG4gICAqL1xuICBjb25zdCBpc0RhdGVPbmx5ID0gWydkYXlPbmx5JywgJ2RlZmF1bHQnLCAnbW9udGhPbmx5J10uaW5jbHVkZXMocGlja2VyQXBwZWFyYW5jZSlcbiAgY29uc3Qgc2VsZWN0ZWRUaW1lem9uZSA9IHRpbWV6b25lRmllbGQ/LnZhbHVlIGFzIHN0cmluZ1xuICBjb25zdCB0aW1lem9uZVJlcXVpcmVkID1cbiAgICByZXF1aXJlZCB8fCAodGltZXpvbmUgJiYgdHlwZW9mIHRpbWV6b25lID09PSAnb2JqZWN0JyAmJiB0aW1lem9uZS5yZXF1aXJlZClcblxuICAvLyBUaGUgZGlzcGxheWVkIHZhbHVlIHNob3VsZCBiZSB0aGUgb3JpZ2luYWwgdmFsdWUsIGFkanVzdGVkIHRvIHRoZSB1c2VyJ3MgdGltZXpvbmVcbiAgY29uc3QgZGlzcGxheWVkVmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAodGltZXpvbmUgJiYgc2VsZWN0ZWRUaW1lem9uZSAmJiB1c2VyVGltZXpvbmUgJiYgdmFsdWUpIHtcbiAgICAgIC8vIENyZWF0ZSBUWkRhdGUgaW5zdGFuY2VzIGZvciB0aGUgc2VsZWN0ZWQgdGltZXpvbmUgYW5kIHRoZSB1c2VyJ3MgdGltZXpvbmVcbiAgICAgIC8vIFRoZXNlIGluc3RhbmNlcyBhbGxvdyB1cyB0byB0cmFuc3Bvc2UgdGhlIGRhdGUgYmV0d2VlbiB0aW1lem9uZXMgd2hpbGUga2VlcGluZyB0aGUgc2FtZSB0aW1lIHZhbHVlXG4gICAgICBjb25zdCBEYXRlV2l0aE9yaWdpbmFsVHogPSBUWkRhdGUudHooc2VsZWN0ZWRUaW1lem9uZSlcbiAgICAgIGNvbnN0IERhdGVXaXRoVXNlclR6ID0gVFpEYXRlLnR6KHVzZXJUaW1lem9uZSlcblxuICAgICAgY29uc3QgbW9kaWZpZWREYXRlID0gbmV3IFRaRGF0ZSh2YWx1ZSkud2l0aFRpbWVab25lKHNlbGVjdGVkVGltZXpvbmUpXG5cbiAgICAgIC8vIFRyYW5zcG9zZSB0aGUgZGF0ZSB0byB0aGUgc2VsZWN0ZWQgdGltZXpvbmVcbiAgICAgIGNvbnN0IGRhdGVXaXRoVGltZXpvbmUgPSB0cmFuc3Bvc2UobW9kaWZpZWREYXRlLCBEYXRlV2l0aE9yaWdpbmFsVHopXG5cbiAgICAgIC8vIFRyYW5zcG9zZSB0aGUgZGF0ZSB0byB0aGUgdXNlcidzIHRpbWV6b25lIC0gdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgcmVhY3QtZGF0ZXBpY2tlciBjb21wb25lbnQgaW5zaXN0cyBvbiBkaXNwbGF5aW5nIHRoZSBkYXRlIGluIHRoZSB1c2VyJ3MgdGltZXpvbmVcbiAgICAgIGNvbnN0IGRhdGVXaXRoVXNlclRpbWV6b25lID0gdHJhbnNwb3NlKGRhdGVXaXRoVGltZXpvbmUsIERhdGVXaXRoVXNlclR6KVxuXG4gICAgICByZXR1cm4gZGF0ZVdpdGhVc2VyVGltZXpvbmUudG9JU09TdHJpbmcoKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9LCBbdGltZXpvbmUsIHNlbGVjdGVkVGltZXpvbmUsIHZhbHVlLCB1c2VyVGltZXpvbmVdKVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5jb21pbmdEYXRlOiBEYXRlKSA9PiB7XG4gICAgICBpZiAoIShyZWFkT25seSB8fCBkaXNhYmxlZCkpIHtcbiAgICAgICAgaWYgKHRpbWV6b25lICYmIHNlbGVjdGVkVGltZXpvbmUgJiYgaW5jb21pbmdEYXRlKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIFRaRGF0ZSBpbnN0YW5jZXMgZm9yIHRoZSBzZWxlY3RlZCB0aW1lem9uZVxuICAgICAgICAgIGNvbnN0IFRaRGF0ZVdpdGhTZWxlY3RlZFR6ID0gVFpEYXRlLnR6KHNlbGVjdGVkVGltZXpvbmUpXG5cbiAgICAgICAgICBpZiAoaXNEYXRlT25seSkge1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBvZmZzZXQgdGhpcyBoYXJkY29kZWQgaG91ciBvZmZzZXQgZnJvbSB0aGUgRGF0ZVBpY2tlciBlbGVtZW5lbnRcbiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGJlIHJlbW92ZWQgaW4gNC4wIHdoZW4gd2UgcmVtb3ZlIHRoZSBoYXJkY29kZWQgb2Zmc2V0IGFzIGl0IGlzIGEgYnJlYWtpbmcgY2hhbmdlXG4gICAgICAgICAgICAvLyBjb25zdCB0ek9mZnNldCA9IGluY29taW5nRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjBcbiAgICAgICAgICAgIGNvbnN0IGluY29taW5nT2Zmc2V0ID0gaW5jb21pbmdEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MFxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxIb3VyID0gaW5jb21pbmdEYXRlLmdldEhvdXJzKCkgKyBpbmNvbWluZ09mZnNldFxuICAgICAgICAgICAgaW5jb21pbmdEYXRlLnNldEhvdXJzKG9yaWdpbmFsSG91cilcblxuICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgb3JpZ2luYWwgZGF0ZSBhcyBwaWNrZWQgaW50byB0aGUgZGVzaXJlZCB0aW1lem9uZS5cbiAgICAgICAgICAgIGNvbnN0IGRhdGVUb1NlbGVjdGVkVHogPSB0cmFuc3Bvc2UoaW5jb21pbmdEYXRlLCBUWkRhdGVXaXRoU2VsZWN0ZWRUeilcblxuICAgICAgICAgICAgc2V0VmFsdWUoZGF0ZVRvU2VsZWN0ZWRUei50b0lTT1N0cmluZygpIHx8IG51bGwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZXMgYSBUWkRhdGUgaW5zdGFuY2UgZm9yIHRoZSB1c2VyJ3MgdGltZXpvbmUgIOKAlCB0aGlzIGlzIGRlZmF1bHQgYmVoYXZpb3VyIG9mIFRaRGF0ZSBhcyBpdCB3cmFwcyB0aGUgRGF0ZSBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgY29uc3QgZGF0ZVRvVXNlclR6ID0gbmV3IFRaRGF0ZShpbmNvbWluZ0RhdGUpXG4gICAgICAgICAgICAvLyBUcmFuc3Bvc2UgdGhlIGRhdGUgdG8gdGhlIHNlbGVjdGVkIHRpbWV6b25lXG4gICAgICAgICAgICBjb25zdCBkYXRlV2l0aFRpbWV6b25lID0gdHJhbnNwb3NlKGRhdGVUb1VzZXJUeiwgVFpEYXRlV2l0aFNlbGVjdGVkVHopXG5cbiAgICAgICAgICAgIHNldFZhbHVlKGRhdGVXaXRoVGltZXpvbmUudG9JU09TdHJpbmcoKSB8fCBudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRWYWx1ZShpbmNvbWluZ0RhdGU/LnRvSVNPU3RyaW5nKCkgfHwgbnVsbClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlYWRPbmx5LCBkaXNhYmxlZCwgdGltZXpvbmUsIHNlbGVjdGVkVGltZXpvbmUsIGlzRGF0ZU9ubHksIHNldFZhbHVlXSxcbiAgKVxuXG4gIGNvbnN0IG9uQ2hhbmdlVGltZXpvbmUgPSB1c2VDYWxsYmFjayhcbiAgICAodGltZXpvbmU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHRpbWV6b25lUGF0aCkge1xuICAgICAgICBkaXNwYXRjaEZpZWxkcyh7XG4gICAgICAgICAgdHlwZTogJ1VQREFURScsXG4gICAgICAgICAgcGF0aDogdGltZXpvbmVQYXRoLFxuICAgICAgICAgIHZhbHVlOiB0aW1lem9uZSxcbiAgICAgICAgfSlcblxuICAgICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzLCBzZXRNb2RpZmllZCwgdGltZXpvbmVQYXRoXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGZpZWxkQmFzZUNsYXNzLFxuICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc2hvd0Vycm9yICYmIGAke2Jhc2VDbGFzc30tLWhhcy1lcnJvcmAsXG4gICAgICAgIChyZWFkT25seSB8fCBkaXNhYmxlZCkgJiYgJ3JlYWQtb25seScsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIHN0eWxlPXtzdHlsZXN9XG4gICAgPlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0xhYmVsfVxuICAgICAgICBGYWxsYmFjaz17XG4gICAgICAgICAgPEZpZWxkTGFiZWwgbGFiZWw9e2xhYmVsfSBsb2NhbGl6ZWQ9e2xvY2FsaXplZH0gcGF0aD17cGF0aH0gcmVxdWlyZWQ9e3JlcXVpcmVkfSAvPlxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2ZpZWxkQmFzZUNsYXNzfV9fd3JhcGB9IGlkPXtgZmllbGQtJHtwYXRoLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfT5cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICA8RGF0ZVBpY2tlckZpZWxkXG4gICAgICAgICAgey4uLmRhdGVQaWNrZXJQcm9wc31cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgb3ZlcnJpZGVzPXt7XG4gICAgICAgICAgICAuLi5kYXRlUGlja2VyUHJvcHM/Lm92ZXJyaWRlcyxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtnZXRUcmFuc2xhdGlvbihwbGFjZWhvbGRlciwgaTE4bil9XG4gICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5IHx8IGRpc2FibGVkfVxuICAgICAgICAgIHZhbHVlPXtkaXNwbGF5ZWRWYWx1ZX1cbiAgICAgICAgLz5cbiAgICAgICAge3RpbWV6b25lICYmIHN1cHBvcnRlZFRpbWV6b25lcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8VGltZXpvbmVQaWNrZXJcbiAgICAgICAgICAgIGlkPXtgJHtwYXRofS10aW1lem9uZS1waWNrZXJgfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlVGltZXpvbmV9XG4gICAgICAgICAgICBvcHRpb25zPXtzdXBwb3J0ZWRUaW1lem9uZXN9XG4gICAgICAgICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICByZXF1aXJlZD17dGltZXpvbmVSZXF1aXJlZH1cbiAgICAgICAgICAgIHNlbGVjdGVkVGltZXpvbmU9e3NlbGVjdGVkVGltZXpvbmV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge0FmdGVySW5wdXR9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgRmFsbGJhY2s9ezxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gcGF0aD17cGF0aH0gLz59XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBEYXRlVGltZUZpZWxkID0gd2l0aENvbmRpdGlvbihEYXRlVGltZUZpZWxkQ29tcG9uZW50KVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgbGF6eSwgU3VzcGVuc2UgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFNoaW1tZXJFZmZlY3QgfSBmcm9tICcuLi9TaGltbWVyRWZmZWN0L2luZGV4LmpzJ1xuXG5jb25zdCBEYXRlUGlja2VyID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vRGF0ZVBpY2tlci5qcycpKVxuXG5leHBvcnQgY29uc3QgRGF0ZVBpY2tlckZpZWxkOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IChcbiAgPFN1c3BlbnNlIGZhbGxiYWNrPXs8U2hpbW1lckVmZmVjdCBoZWlnaHQ9ezUwfSAvPn0+XG4gICAgPERhdGVQaWNrZXIgey4uLnByb3BzfSAvPlxuICA8L1N1c3BlbnNlPlxuKVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgT3B0aW9uT2JqZWN0IH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVhY3RTZWxlY3QgfSBmcm9tICcuLi9SZWFjdFNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IGZvcm1hdE9wdGlvbnMgfSBmcm9tICcuLi9XaGVyZUJ1aWxkZXIvQ29uZGl0aW9uL1NlbGVjdC9mb3JtYXRPcHRpb25zLmpzJ1xuXG5leHBvcnQgY29uc3QgVGltZXpvbmVQaWNrZXI6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlRnJvbVByb3BzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNGcm9tUHJvcHMsXG4gICAgcmVhZE9ubHk6IHJlYWRPbmx5RnJvbVByb3BzLFxuICAgIHJlcXVpcmVkLFxuICAgIHNlbGVjdGVkVGltZXpvbmU6IHNlbGVjdGVkVGltZXpvbmVGcm9tUHJvcHMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IG9wdGlvbnMgPSBmb3JtYXRPcHRpb25zKG9wdGlvbnNGcm9tUHJvcHMpXG5cbiAgY29uc3Qgc2VsZWN0ZWRUaW1lem9uZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBvcHRpb25zLmZpbmQoKHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHQgPT09ICdzdHJpbmcnID8gdCA6IHQudmFsdWVcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gc2VsZWN0ZWRUaW1lem9uZUZyb21Qcm9wc1xuICAgIH0pXG4gIH0sIFtvcHRpb25zLCBzZWxlY3RlZFRpbWV6b25lRnJvbVByb3BzXSlcblxuICBjb25zdCByZWFkT25seSA9IEJvb2xlYW4ocmVhZE9ubHlGcm9tUHJvcHMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAxXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInRpbWV6b25lLXBpY2tlci13cmFwcGVyXCI+XG4gICAgICA8RmllbGRMYWJlbFxuICAgICAgICBodG1sRm9yPXtpZH1cbiAgICAgICAgbGFiZWw9e2Ake3QoJ2dlbmVyYWw6dGltZXpvbmUnKX0gJHtyZXF1aXJlZCA/ICcqJyA6ICcnfWB9XG4gICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgdW5zdHlsZWRcbiAgICAgIC8+XG4gICAgICA8UmVhY3RTZWxlY3RcbiAgICAgICAgY2xhc3NOYW1lPVwidGltZXpvbmUtcGlja2VyXCJcbiAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5fVxuICAgICAgICBpbnB1dElkPXtpZH1cbiAgICAgICAgaXNDbGVhcmFibGU9eyFyZXF1aXJlZH1cbiAgICAgICAgaXNDcmVhdGFibGU9e2ZhbHNlfVxuICAgICAgICBvbkNoYW5nZT17KHZhbDogT3B0aW9uT2JqZWN0KSA9PiB7XG4gICAgICAgICAgaWYgKG9uQ2hhbmdlRnJvbVByb3BzKSB7XG4gICAgICAgICAgICBvbkNoYW5nZUZyb21Qcm9wcyh2YWw/LnZhbHVlIHx8ICcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgdmFsdWU9e3NlbGVjdGVkVGltZXpvbmV9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgS2V5Ym9hcmRFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgYXJyYXlNb3ZlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUlkIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgU2VsZWN0LCB7IHR5cGUgU3R5bGVzQ29uZmlnIH0gZnJvbSAncmVhY3Qtc2VsZWN0J1xuaW1wb3J0IENyZWF0YWJsZVNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvY3JlYXRhYmxlJ1xuXG5pbXBvcnQgdHlwZSB7IE9wdGlvbiwgUmVhY3RTZWxlY3RBZGFwdGVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuZXhwb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IERyYWdnYWJsZVNvcnRhYmxlIH0gZnJvbSAnLi4vRHJhZ2dhYmxlU29ydGFibGUvaW5kZXguanMnXG5pbXBvcnQgeyBTaGltbWVyRWZmZWN0IH0gZnJvbSAnLi4vU2hpbW1lckVmZmVjdC9pbmRleC5qcydcbmltcG9ydCB7IENsZWFySW5kaWNhdG9yIH0gZnJvbSAnLi9DbGVhckluZGljYXRvci9pbmRleC5qcydcbmltcG9ydCB7IENvbnRyb2wgfSBmcm9tICcuL0NvbnRyb2wvaW5kZXguanMnXG5pbXBvcnQgeyBEcm9wZG93bkluZGljYXRvciB9IGZyb20gJy4vRHJvcGRvd25JbmRpY2F0b3IvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnLi9JbnB1dC9pbmRleC5qcydcbmltcG9ydCB7IGdlbmVyYXRlTXVsdGlWYWx1ZURyYWdnYWJsZUlELCBNdWx0aVZhbHVlIH0gZnJvbSAnLi9NdWx0aVZhbHVlL2luZGV4LmpzJ1xuaW1wb3J0IHsgTXVsdGlWYWx1ZUxhYmVsIH0gZnJvbSAnLi9NdWx0aVZhbHVlTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyBNdWx0aVZhbHVlUmVtb3ZlIH0gZnJvbSAnLi9NdWx0aVZhbHVlUmVtb3ZlL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2luZ2xlVmFsdWUgfSBmcm9tICcuL1NpbmdsZVZhbHVlL2luZGV4LmpzJ1xuaW1wb3J0IHsgVmFsdWVDb250YWluZXIgfSBmcm9tICcuL1ZhbHVlQ29udGFpbmVyL2luZGV4LmpzJ1xuXG5jb25zdCBjcmVhdGVPcHRpb24gPSAobGFiZWw6IHN0cmluZykgPT4gKHtcbiAgbGFiZWwsXG4gIHZhbHVlOiBsYWJlbCxcbn0pXG5cbmNvbnN0IFNlbGVjdEFkYXB0ZXI6IFJlYWN0LkZDPFJlYWN0U2VsZWN0QWRhcHRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUoJycpIC8vIGZvciBjcmVhdGFibGUgc2VsZWN0XG4gIGNvbnN0IHV1aWQgPSB1c2VJZCgpXG4gIGNvbnN0IFtoYXNNb3VudGVkLCBzZXRIYXNNb3VudGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SGFzTW91bnRlZCh0cnVlKVxuICB9LCBbXSlcblxuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudHMsXG4gICAgY3VzdG9tUHJvcHMsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBmaWx0ZXJPcHRpb24gPSB1bmRlZmluZWQsXG4gICAgZ2V0T3B0aW9uVmFsdWUsXG4gICAgaXNDbGVhcmFibGUgPSB0cnVlLFxuICAgIGlzQ3JlYXRhYmxlLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1NlYXJjaGFibGUgPSB0cnVlLFxuICAgIG5vT3B0aW9uc01lc3NhZ2UgPSAoKSA9PiB0KCdnZW5lcmFsOm5vT3B0aW9ucycpLFxuICAgIG51bWJlck9ubHkgPSBmYWxzZSxcbiAgICBvbkNoYW5nZSxcbiAgICBvbk1lbnVDbG9zZSxcbiAgICBvbk1lbnVPcGVuLFxuICAgIG9wdGlvbnMsXG4gICAgcGxhY2Vob2xkZXIgPSB0KCdnZW5lcmFsOnNlbGVjdFZhbHVlJyksXG4gICAgc2hvd0Vycm9yLFxuICAgIHZhbHVlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBsb2FkaW5nTWVzc2FnZSA9ICgpID0+IHQoJ2dlbmVyYWw6bG9hZGluZycpICsgJy4uLidcblxuICBjb25zdCBjbGFzc2VzID0gW2NsYXNzTmFtZSwgJ3JlYWN0LXNlbGVjdCcsIHNob3dFcnJvciAmJiAncmVhY3Qtc2VsZWN0LS1lcnJvciddXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICBjb25zdCBzdHlsZXM6IFN0eWxlc0NvbmZpZzxPcHRpb24+ID0ge1xuICAgIC8vIFJlbW92ZSB0aGUgZGVmYXVsdCByZWFjdC1zZWxlY3Qgei1pbmRleCBmcm9tIHRoZSBtZW51IHNvIHRoYXQgb3VyIGN1c3RvbVxuICAgIC8vIHotaW5kZXggaW4gdGhlIFwicGF5bG9hZC1kZWZhdWx0XCIgY3NzIGxheWVyIGNhbiB0YWtlIGVmZmVjdCwgaW4gc3VjaCBhIHdheVxuICAgIC8vIHRoYXQgZW5kIHVzZXJzIGNhbiBlYXNpbHkgb3ZlcnJpZGUgaXQgYXMgd2l0aCBvdGhlciBzdHlsZXMuXG4gICAgbWVudTogKHJzU3R5bGVzKSA9PiAoeyAuLi5yc1N0eWxlcywgekluZGV4OiB1bmRlZmluZWQgfSksXG4gIH1cblxuICBpZiAoIWhhc01vdW50ZWQpIHtcbiAgICByZXR1cm4gPFNoaW1tZXJFZmZlY3QgaGVpZ2h0PVwiY2FsYyh2YXIoLS1iYXNlKSAqIDIgKyAycHgpXCIgLz5cbiAgfVxuXG4gIGlmICghaXNDcmVhdGFibGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNlbGVjdFxuICAgICAgICBjYXB0dXJlTWVudVNjcm9sbFxuICAgICAgICBjdXN0b21Qcm9wcz17Y3VzdG9tUHJvcHN9XG4gICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgICAgY2xhc3NOYW1lUHJlZml4PVwicnNcIlxuICAgICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgICAgQ2xlYXJJbmRpY2F0b3IsXG4gICAgICAgICAgQ29udHJvbCxcbiAgICAgICAgICBEcm9wZG93bkluZGljYXRvcixcbiAgICAgICAgICBJbnB1dCxcbiAgICAgICAgICBNdWx0aVZhbHVlLFxuICAgICAgICAgIE11bHRpVmFsdWVMYWJlbCxcbiAgICAgICAgICBNdWx0aVZhbHVlUmVtb3ZlLFxuICAgICAgICAgIFNpbmdsZVZhbHVlLFxuICAgICAgICAgIFZhbHVlQ29udGFpbmVyLFxuICAgICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIH19XG4gICAgICAgIGZpbHRlck9wdGlvbj17ZmlsdGVyT3B0aW9ufVxuICAgICAgICBnZXRPcHRpb25WYWx1ZT17Z2V0T3B0aW9uVmFsdWV9XG4gICAgICAgIGluc3RhbmNlSWQ9e3V1aWR9XG4gICAgICAgIGlzQ2xlYXJhYmxlPXtpc0NsZWFyYWJsZX1cbiAgICAgICAgaXNEaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGlzU2VhcmNoYWJsZT17aXNTZWFyY2hhYmxlfVxuICAgICAgICBsb2FkaW5nTWVzc2FnZT17bG9hZGluZ01lc3NhZ2V9XG4gICAgICAgIG1lbnVQbGFjZW1lbnQ9XCJhdXRvXCJcbiAgICAgICAgbm9PcHRpb25zTWVzc2FnZT17bm9PcHRpb25zTWVzc2FnZX1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgIG9uTWVudU9wZW49e29uTWVudU9wZW59XG4gICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtnZXRUcmFuc2xhdGlvbihwbGFjZWhvbGRlciwgaTE4bil9XG4gICAgICAgIHN0eWxlcz17c3R5bGVzfVxuICAgICAgICB1bnN0eWxlZD17dHJ1ZX1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgLz5cbiAgICApXG4gIH1cbiAgY29uc3QgaGFuZGxlS2V5RG93bjogS2V5Ym9hcmRFdmVudEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAobnVtYmVyT25seSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgYWNjZXB0YWJsZUtleXMgPSBbXG4gICAgICAgICdUYWInLFxuICAgICAgICAnRXNjYXBlJyxcbiAgICAgICAgJ0JhY2tzcGFjZScsXG4gICAgICAgICdFbnRlcicsXG4gICAgICAgICdBcnJvd1JpZ2h0JyxcbiAgICAgICAgJ0Fycm93TGVmdCcsXG4gICAgICAgICdBcnJvd1VwJyxcbiAgICAgICAgJ0Fycm93RG93bicsXG4gICAgICBdXG4gICAgICBjb25zdCBpc051bWJlciA9ICEvXFxELy50ZXN0KGV2ZW50LmtleSlcbiAgICAgIGNvbnN0IGlzQWN0aW9uS2V5ID0gYWNjZXB0YWJsZUtleXMuaW5jbHVkZXMoZXZlbnQua2V5KVxuICAgICAgaWYgKCFpc051bWJlciAmJiAhaXNBY3Rpb25LZXkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF2YWx1ZSB8fCAhaW5wdXRWYWx1ZSB8fCBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZmlsdGVyT3B0aW9uICYmICFmaWx0ZXJPcHRpb24obnVsbCwgaW5wdXRWYWx1ZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuaXNDb21wb3NpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgb25DaGFuZ2UoWy4uLih2YWx1ZSBhcyBPcHRpb25bXSksIGNyZWF0ZU9wdGlvbihpbnB1dFZhbHVlKV0pXG4gICAgICAgIHNldElucHV0VmFsdWUoJycpXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q3JlYXRhYmxlU2VsZWN0XG4gICAgICBjYXB0dXJlTWVudVNjcm9sbFxuICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICBjbGFzc05hbWVQcmVmaXg9XCJyc1wiXG4gICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgIENsZWFySW5kaWNhdG9yLFxuICAgICAgICBDb250cm9sLFxuICAgICAgICBEcm9wZG93bkluZGljYXRvcixcbiAgICAgICAgSW5wdXQsXG4gICAgICAgIE11bHRpVmFsdWUsXG4gICAgICAgIE11bHRpVmFsdWVMYWJlbCxcbiAgICAgICAgTXVsdGlWYWx1ZVJlbW92ZSxcbiAgICAgICAgU2luZ2xlVmFsdWUsXG4gICAgICAgIFZhbHVlQ29udGFpbmVyLFxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgfX1cbiAgICAgIGZpbHRlck9wdGlvbj17ZmlsdGVyT3B0aW9ufVxuICAgICAgaW5wdXRWYWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgIGluc3RhbmNlSWQ9e3V1aWR9XG4gICAgICBpc0NsZWFyYWJsZT17aXNDbGVhcmFibGV9XG4gICAgICBpc0Rpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGlzU2VhcmNoYWJsZT17aXNTZWFyY2hhYmxlfVxuICAgICAgbG9hZGluZ01lc3NhZ2U9e2xvYWRpbmdNZXNzYWdlfVxuICAgICAgbWVudVBsYWNlbWVudD1cImF1dG9cIlxuICAgICAgbm9PcHRpb25zTWVzc2FnZT17bm9PcHRpb25zTWVzc2FnZX1cbiAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgIG9uSW5wdXRDaGFuZ2U9eyhuZXdWYWx1ZSkgPT4gc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSl9XG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICBvbk1lbnVPcGVuPXtvbk1lbnVPcGVufVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIHBsYWNlaG9sZGVyPXtnZXRUcmFuc2xhdGlvbihwbGFjZWhvbGRlciwgaTE4bil9XG4gICAgICBzdHlsZXM9e3N0eWxlc31cbiAgICAgIHVuc3R5bGVkPXt0cnVlfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgIC8+XG4gIClcbn1cblxuY29uc3QgU29ydGFibGVTZWxlY3Q6IFJlYWN0LkZDPFJlYWN0U2VsZWN0QWRhcHRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGdldE9wdGlvblZhbHVlLCBvbkNoYW5nZSwgdmFsdWUgfSA9IHByb3BzXG5cbiAgbGV0IGRyYWdnYWJsZUlEczogc3RyaW5nW10gPSBbXVxuICBpZiAodmFsdWUpIHtcbiAgICBkcmFnZ2FibGVJRHMgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pLm1hcCgob3B0aW9uVmFsdWUpID0+IHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZU11bHRpVmFsdWVEcmFnZ2FibGVJRChvcHRpb25WYWx1ZSwgZ2V0T3B0aW9uVmFsdWUpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERyYWdnYWJsZVNvcnRhYmxlXG4gICAgICBjbGFzc05hbWU9XCJyZWFjdC1zZWxlY3QtY29udGFpbmVyXCJcbiAgICAgIGlkcz17ZHJhZ2dhYmxlSURzfVxuICAgICAgb25EcmFnRW5kPXsoeyBtb3ZlRnJvbUluZGV4LCBtb3ZlVG9JbmRleCB9KSA9PiB7XG4gICAgICAgIGxldCBzb3J0ZWQgPSB2YWx1ZVxuICAgICAgICBpZiAodmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBzb3J0ZWQgPSBhcnJheU1vdmUodmFsdWUsIG1vdmVGcm9tSW5kZXgsIG1vdmVUb0luZGV4KVxuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlKHNvcnRlZClcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFNlbGVjdEFkYXB0ZXIgey4uLnByb3BzfSAvPlxuICAgIDwvRHJhZ2dhYmxlU29ydGFibGU+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFJlYWN0U2VsZWN0OiBSZWFjdC5GQzxSZWFjdFNlbGVjdEFkYXB0ZXJQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBpc011bHRpLCBpc1NvcnRhYmxlIH0gPSBwcm9wc1xuXG4gIGlmIChpc011bHRpICYmIGlzU29ydGFibGUpIHtcbiAgICByZXR1cm4gPFNvcnRhYmxlU2VsZWN0IHsuLi5wcm9wc30gLz5cbiAgfVxuXG4gIHJldHVybiA8U2VsZWN0QWRhcHRlciB7Li4ucHJvcHN9IC8+XG59XG4iLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX29iamVjdFNwcmVhZDIgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7XG4gIChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTtcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XG4gIHJldHVybiBuO1xufVxuZXhwb3J0IHsgX2FycmF5TGlrZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxuZXhwb3J0IHsgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZXhwb3J0IHsgX25vbkl0ZXJhYmxlUmVzdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7XG4gIGlmIChudWxsID09IGUpIHJldHVybiB7fTtcbiAgdmFyIG8sXG4gICAgcixcbiAgICBpID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxudmFyIF9leGNsdWRlZCA9IFtcImRlZmF1bHRJbnB1dFZhbHVlXCIsIFwiZGVmYXVsdE1lbnVJc09wZW5cIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJpbnB1dFZhbHVlXCIsIFwibWVudUlzT3BlblwiLCBcIm9uQ2hhbmdlXCIsIFwib25JbnB1dENoYW5nZVwiLCBcIm9uTWVudUNsb3NlXCIsIFwib25NZW51T3BlblwiLCBcInZhbHVlXCJdO1xuZnVuY3Rpb24gdXNlU3RhdGVNYW5hZ2VyKF9yZWYpIHtcbiAgdmFyIF9yZWYkZGVmYXVsdElucHV0VmFsdSA9IF9yZWYuZGVmYXVsdElucHV0VmFsdWUsXG4gICAgZGVmYXVsdElucHV0VmFsdWUgPSBfcmVmJGRlZmF1bHRJbnB1dFZhbHUgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRkZWZhdWx0SW5wdXRWYWx1LFxuICAgIF9yZWYkZGVmYXVsdE1lbnVJc09wZSA9IF9yZWYuZGVmYXVsdE1lbnVJc09wZW4sXG4gICAgZGVmYXVsdE1lbnVJc09wZW4gPSBfcmVmJGRlZmF1bHRNZW51SXNPcGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRkZWZhdWx0TWVudUlzT3BlLFxuICAgIF9yZWYkZGVmYXVsdFZhbHVlID0gX3JlZi5kZWZhdWx0VmFsdWUsXG4gICAgZGVmYXVsdFZhbHVlID0gX3JlZiRkZWZhdWx0VmFsdWUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGRlZmF1bHRWYWx1ZSxcbiAgICBwcm9wc0lucHV0VmFsdWUgPSBfcmVmLmlucHV0VmFsdWUsXG4gICAgcHJvcHNNZW51SXNPcGVuID0gX3JlZi5tZW51SXNPcGVuLFxuICAgIHByb3BzT25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgIHByb3BzT25JbnB1dENoYW5nZSA9IF9yZWYub25JbnB1dENoYW5nZSxcbiAgICBwcm9wc09uTWVudUNsb3NlID0gX3JlZi5vbk1lbnVDbG9zZSxcbiAgICBwcm9wc09uTWVudU9wZW4gPSBfcmVmLm9uTWVudU9wZW4sXG4gICAgcHJvcHNWYWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgcmVzdFNlbGVjdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShwcm9wc0lucHV0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzSW5wdXRWYWx1ZSA6IGRlZmF1bHRJbnB1dFZhbHVlKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBzdGF0ZUlucHV0VmFsdWUgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldFN0YXRlSW5wdXRWYWx1ZSA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUocHJvcHNNZW51SXNPcGVuICE9PSB1bmRlZmluZWQgPyBwcm9wc01lbnVJc09wZW4gOiBkZWZhdWx0TWVudUlzT3BlbiksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHN0YXRlTWVudUlzT3BlbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0U3RhdGVNZW51SXNPcGVuID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShwcm9wc1ZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm9wc1ZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgc3RhdGVWYWx1ZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgc2V0U3RhdGVWYWx1ZSA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcHNPbkNoYW5nZSh2YWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfVxuICAgIHNldFN0YXRlVmFsdWUodmFsdWUpO1xuICB9LCBbcHJvcHNPbkNoYW5nZV0pO1xuICB2YXIgb25JbnB1dENoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh2YWx1ZSwgYWN0aW9uTWV0YSkge1xuICAgIHZhciBuZXdWYWx1ZTtcbiAgICBpZiAodHlwZW9mIHByb3BzT25JbnB1dENoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV3VmFsdWUgPSBwcm9wc09uSW5wdXRDaGFuZ2UodmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cbiAgICBzZXRTdGF0ZUlucHV0VmFsdWUobmV3VmFsdWUgIT09IHVuZGVmaW5lZCA/IG5ld1ZhbHVlIDogdmFsdWUpO1xuICB9LCBbcHJvcHNPbklucHV0Q2hhbmdlXSk7XG4gIHZhciBvbk1lbnVPcGVuID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgcHJvcHNPbk1lbnVPcGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wc09uTWVudU9wZW4oKTtcbiAgICB9XG4gICAgc2V0U3RhdGVNZW51SXNPcGVuKHRydWUpO1xuICB9LCBbcHJvcHNPbk1lbnVPcGVuXSk7XG4gIHZhciBvbk1lbnVDbG9zZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzT25NZW51Q2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BzT25NZW51Q2xvc2UoKTtcbiAgICB9XG4gICAgc2V0U3RhdGVNZW51SXNPcGVuKGZhbHNlKTtcbiAgfSwgW3Byb3BzT25NZW51Q2xvc2VdKTtcbiAgdmFyIGlucHV0VmFsdWUgPSBwcm9wc0lucHV0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3BzSW5wdXRWYWx1ZSA6IHN0YXRlSW5wdXRWYWx1ZTtcbiAgdmFyIG1lbnVJc09wZW4gPSBwcm9wc01lbnVJc09wZW4gIT09IHVuZGVmaW5lZCA/IHByb3BzTWVudUlzT3BlbiA6IHN0YXRlTWVudUlzT3BlbjtcbiAgdmFyIHZhbHVlID0gcHJvcHNWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvcHNWYWx1ZSA6IHN0YXRlVmFsdWU7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RTZWxlY3RQcm9wcyksIHt9LCB7XG4gICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICBtZW51SXNPcGVuOiBtZW51SXNPcGVuLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBvbklucHV0Q2hhbmdlOiBvbklucHV0Q2hhbmdlLFxuICAgIG9uTWVudUNsb3NlOiBvbk1lbnVDbG9zZSxcbiAgICBvbk1lbnVPcGVuOiBvbk1lbnVPcGVuLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZXhwb3J0IHsgdXNlU3RhdGVNYW5hZ2VyIGFzIHUgfTtcbiIsImltcG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmV4cG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcndhcmRSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTIGFzIFNlbGVjdCB9IGZyb20gJy4vU2VsZWN0LWFhYjAyN2YzLmVzbS5qcyc7XG5leHBvcnQgeyBjIGFzIGNyZWF0ZUZpbHRlciwgZCBhcyBkZWZhdWx0VGhlbWUsIG0gYXMgbWVyZ2VTdHlsZXMgfSBmcm9tICcuL1NlbGVjdC1hYWIwMjdmMy5lc20uanMnO1xuaW1wb3J0IHsgQ2FjaGVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5leHBvcnQgeyBjIGFzIGNvbXBvbmVudHMgfSBmcm9tICcuL2luZGV4LTY0MWVlNWI4LmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZVN1cGVyJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheSc7XG5pbXBvcnQgJ21lbW9pemUtb25lJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0ICdyZWFjdC1kb20nO1xuaW1wb3J0ICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCAndXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdCc7XG5cbnZhciBTdGF0ZU1hbmFnZWRTZWxlY3QgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgYmFzZVNlbGVjdFByb3BzID0gdXNlU3RhdGVNYW5hZ2VyKHByb3BzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIGJhc2VTZWxlY3RQcm9wcykpO1xufSk7XG52YXIgU3RhdGVNYW5hZ2VkU2VsZWN0JDEgPSBTdGF0ZU1hbmFnZWRTZWxlY3Q7XG5cbnZhciBOb25jZVByb3ZpZGVyID0gKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBub25jZSA9IF9yZWYubm9uY2UsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIGNhY2hlS2V5ID0gX3JlZi5jYWNoZUtleTtcbiAgdmFyIGVtb3Rpb25DYWNoZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjcmVhdGVDYWNoZSh7XG4gICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgbm9uY2U6IG5vbmNlXG4gICAgfSk7XG4gIH0sIFtjYWNoZUtleSwgbm9uY2VdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZW1vdGlvbkNhY2hlXG4gIH0sIGNoaWxkcmVuKTtcbn0pO1xuXG5leHBvcnQgeyBOb25jZVByb3ZpZGVyLCBTdGF0ZU1hbmFnZWRTZWxlY3QkMSBhcyBkZWZhdWx0IH07XG4iLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5leHBvcnQgeyBfY2xhc3NDYWxsQ2hlY2sgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHtcbiAgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7XG4gICAgdmFyIG8gPSByW3RdO1xuICAgIG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCB0b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7XG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGU7XG59XG5leHBvcnQgeyBfY3JlYXRlQ2xhc3MgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkge1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTtcbiAgfSwgX2dldFByb3RvdHlwZU9mKHQpO1xufVxuZXhwb3J0IHsgX2dldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufVxuZXhwb3J0IHsgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkge1xuICBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlO1xuICBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7XG59XG5leHBvcnQgeyBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IGZyb20gXCIuL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qc1wiO1xuaW1wb3J0IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gZnJvbSBcIi4vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qc1wiO1xuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKHQpIHtcbiAgdmFyIHIgPSBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSxcbiAgICAgIG8gPSBnZXRQcm90b3R5cGVPZih0KTtcbiAgICBpZiAocikge1xuICAgICAgdmFyIHMgPSBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgIGUgPSBSZWZsZWN0LmNvbnN0cnVjdChvLCBhcmd1bWVudHMsIHMpO1xuICAgIH0gZWxzZSBlID0gby5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIGUpO1xuICB9O1xufVxuZXhwb3J0IHsgX2NyZWF0ZVN1cGVyIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkocik7XG59XG5leHBvcnQgeyBfYXJyYXlXaXRob3V0SG9sZXMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVNwcmVhZCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXkocikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmV4cG9ydCB7IF90b0NvbnN1bWFibGVBcnJheSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrJztcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MnO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cyc7XG5pbXBvcnQgX2NyZWF0ZVN1cGVyIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZVN1cGVyJztcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXknO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTWVtbywgRnJhZ21lbnQsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgciBhcyByZW1vdmVQcm9wcywgcyBhcyBzdXBwb3J0c1Bhc3NpdmVFdmVudHMsIGEgYXMgY2xlYXJJbmRpY2F0b3JDU1MsIGIgYXMgY29udGFpbmVyQ1NTLCBkIGFzIGNzcyQxLCBlIGFzIGRyb3Bkb3duSW5kaWNhdG9yQ1NTLCBnIGFzIGdyb3VwQ1NTLCBmIGFzIGdyb3VwSGVhZGluZ0NTUywgaSBhcyBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTLCBoIGFzIGluZGljYXRvclNlcGFyYXRvckNTUywgaiBhcyBpbnB1dENTUywgbCBhcyBsb2FkaW5nSW5kaWNhdG9yQ1NTLCBrIGFzIGxvYWRpbmdNZXNzYWdlQ1NTLCBtIGFzIG1lbnVDU1MsIG4gYXMgbWVudUxpc3RDU1MsIG8gYXMgbWVudVBvcnRhbENTUywgcCBhcyBtdWx0aVZhbHVlQ1NTLCBxIGFzIG11bHRpVmFsdWVMYWJlbENTUywgdCBhcyBtdWx0aVZhbHVlUmVtb3ZlQ1NTLCB1IGFzIG5vT3B0aW9uc01lc3NhZ2VDU1MsIHYgYXMgb3B0aW9uQ1NTLCB3IGFzIHBsYWNlaG9sZGVyQ1NTLCB4IGFzIGNzcyQyLCB5IGFzIHZhbHVlQ29udGFpbmVyQ1NTLCB6IGFzIGlzVG91Y2hDYXBhYmxlLCBBIGFzIGlzTW9iaWxlRGV2aWNlLCBCIGFzIG11bHRpVmFsdWVBc1ZhbHVlLCBDIGFzIHNpbmdsZVZhbHVlQXNWYWx1ZSwgRCBhcyB2YWx1ZVRlcm5hcnksIEUgYXMgY2xhc3NOYW1lcywgRiBhcyBkZWZhdWx0Q29tcG9uZW50cywgRyBhcyBpc0RvY3VtZW50RWxlbWVudCwgSCBhcyBjbGVhblZhbHVlLCBJIGFzIHNjcm9sbEludG9WaWV3LCBKIGFzIG5vb3AsIE0gYXMgTWVudVBsYWNlciwgSyBhcyBub3ROdWxsaXNoIH0gZnJvbSAnLi9pbmRleC02NDFlZTViOC5lc20uanMnO1xuaW1wb3J0IHsganN4LCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzJztcblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMigpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8vIEFzc2lzdGl2ZSB0ZXh0IHRvIGRlc2NyaWJlIHZpc3VhbCBlbGVtZW50cy4gSGlkZGVuIGZvciBzaWdodGVkIHVzZXJzLlxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiN3BnMGNqLWExMXlUZXh0XCIsXG4gIHN0eWxlczogXCJsYWJlbDphMTF5VGV4dDt6LWluZGV4Ojk5OTk7Ym9yZGVyOjA7Y2xpcDpyZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7aGVpZ2h0OjFweDt3aWR0aDoxcHg7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpub3dyYXBcIlxufSA6IHtcbiAgbmFtZTogXCIxZjQzYXZ6LWExMXlUZXh0LUExMXlUZXh0XCIsXG4gIHN0eWxlczogXCJsYWJlbDphMTF5VGV4dDt6LWluZGV4Ojk5OTk7Ym9yZGVyOjA7Y2xpcDpyZWN0KDFweCwgMXB4LCAxcHgsIDFweCk7aGVpZ2h0OjFweDt3aWR0aDoxcHg7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpub3dyYXA7bGFiZWw6QTExeVRleHQ7XCIsXG4gIG1hcDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJa0V4TVhsVVpYaDBMblJ6ZUNKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGUFNTSXNJbVpwYkdVaU9pSkJNVEY1VkdWNGRDNTBjM2dpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpb2dRR3B6ZUNCcWMzZ2dLaTljYm1sdGNHOXlkQ0I3SUVwVFdDQjlJR1p5YjIwZ0ozSmxZV04wSnp0Y2JtbHRjRzl5ZENCN0lHcHplQ0I5SUdaeWIyMGdKMEJsYlc5MGFXOXVMM0psWVdOMEp6dGNibHh1THk4Z1FYTnphWE4wYVhabElIUmxlSFFnZEc4Z1pHVnpZM0pwWW1VZ2RtbHpkV0ZzSUdWc1pXMWxiblJ6TGlCSWFXUmtaVzRnWm05eUlITnBaMmgwWldRZ2RYTmxjbk11WEc1amIyNXpkQ0JCTVRGNVZHVjRkQ0E5SUNod2NtOXdjem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZHpjR0Z1SjEwcElEMCtJQ2hjYmlBZ1BITndZVzVjYmlBZ0lDQmpjM005ZTN0Y2JpQWdJQ0FnSUd4aFltVnNPaUFuWVRFeGVWUmxlSFFuTEZ4dUlDQWdJQ0FnZWtsdVpHVjRPaUE1T1RrNUxGeHVJQ0FnSUNBZ1ltOXlaR1Z5T2lBd0xGeHVJQ0FnSUNBZ1kyeHBjRG9nSjNKbFkzUW9NWEI0TENBeGNIZ3NJREZ3ZUN3Z01YQjRLU2NzWEc0Z0lDQWdJQ0JvWldsbmFIUTZJREVzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dNU3hjYmlBZ0lDQWdJSEJ2YzJsMGFXOXVPaUFuWVdKemIyeDFkR1VuTEZ4dUlDQWdJQ0FnYjNabGNtWnNiM2M2SUNkb2FXUmtaVzRuTEZ4dUlDQWdJQ0FnY0dGa1pHbHVaem9nTUN4Y2JpQWdJQ0FnSUhkb2FYUmxVM0JoWTJVNklDZHViM2R5WVhBbkxGeHVJQ0FnSUgxOVhHNGdJQ0FnZXk0dUxuQnliM0J6ZlZ4dUlDQXZQbHh1S1R0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1FURXhlVlJsZUhRN1hHNGlYWDA9ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyQyXG59O1xudmFyIEExMXlUZXh0ID0gZnVuY3Rpb24gQTExeVRleHQocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNzczogX3JlZlxuICB9LCBwcm9wcykpO1xufTtcbnZhciBBMTF5VGV4dCQxID0gQTExeVRleHQ7XG5cbnZhciBkZWZhdWx0QXJpYUxpdmVNZXNzYWdlcyA9IHtcbiAgZ3VpZGFuY2U6IGZ1bmN0aW9uIGd1aWRhbmNlKHByb3BzKSB7XG4gICAgdmFyIGlzU2VhcmNoYWJsZSA9IHByb3BzLmlzU2VhcmNoYWJsZSxcbiAgICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpLFxuICAgICAgdGFiU2VsZWN0c1ZhbHVlID0gcHJvcHMudGFiU2VsZWN0c1ZhbHVlLFxuICAgICAgY29udGV4dCA9IHByb3BzLmNvbnRleHQsXG4gICAgICBpc0luaXRpYWxGb2N1cyA9IHByb3BzLmlzSW5pdGlhbEZvY3VzO1xuICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICAgIHJldHVybiBcIlVzZSBVcCBhbmQgRG93biB0byBjaG9vc2Ugb3B0aW9ucywgcHJlc3MgRW50ZXIgdG8gc2VsZWN0IHRoZSBjdXJyZW50bHkgZm9jdXNlZCBvcHRpb24sIHByZXNzIEVzY2FwZSB0byBleGl0IHRoZSBtZW51XCIuY29uY2F0KHRhYlNlbGVjdHNWYWx1ZSA/ICcsIHByZXNzIFRhYiB0byBzZWxlY3QgdGhlIG9wdGlvbiBhbmQgZXhpdCB0aGUgbWVudScgOiAnJywgXCIuXCIpO1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICByZXR1cm4gaXNJbml0aWFsRm9jdXMgPyBcIlwiLmNvbmNhdChwcm9wc1snYXJpYS1sYWJlbCddIHx8ICdTZWxlY3QnLCBcIiBpcyBmb2N1c2VkIFwiKS5jb25jYXQoaXNTZWFyY2hhYmxlID8gJyx0eXBlIHRvIHJlZmluZSBsaXN0JyA6ICcnLCBcIiwgcHJlc3MgRG93biB0byBvcGVuIHRoZSBtZW51LCBcIikuY29uY2F0KGlzTXVsdGkgPyAnIHByZXNzIGxlZnQgdG8gZm9jdXMgc2VsZWN0ZWQgdmFsdWVzJyA6ICcnKSA6ICcnO1xuICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICByZXR1cm4gJ1VzZSBsZWZ0IGFuZCByaWdodCB0byB0b2dnbGUgYmV0d2VlbiBmb2N1c2VkIHZhbHVlcywgcHJlc3MgQmFja3NwYWNlIHRvIHJlbW92ZSB0aGUgY3VycmVudGx5IGZvY3VzZWQgdmFsdWUnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSxcbiAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHByb3BzKSB7XG4gICAgdmFyIGFjdGlvbiA9IHByb3BzLmFjdGlvbixcbiAgICAgIF9wcm9wcyRsYWJlbCA9IHByb3BzLmxhYmVsLFxuICAgICAgbGFiZWwgPSBfcHJvcHMkbGFiZWwgPT09IHZvaWQgMCA/ICcnIDogX3Byb3BzJGxhYmVsLFxuICAgICAgbGFiZWxzID0gcHJvcHMubGFiZWxzLFxuICAgICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQ7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2Rlc2VsZWN0LW9wdGlvbic6XG4gICAgICBjYXNlICdwb3AtdmFsdWUnOlxuICAgICAgY2FzZSAncmVtb3ZlLXZhbHVlJzpcbiAgICAgICAgcmV0dXJuIFwib3B0aW9uIFwiLmNvbmNhdChsYWJlbCwgXCIsIGRlc2VsZWN0ZWQuXCIpO1xuICAgICAgY2FzZSAnY2xlYXInOlxuICAgICAgICByZXR1cm4gJ0FsbCBzZWxlY3RlZCBvcHRpb25zIGhhdmUgYmVlbiBjbGVhcmVkLic7XG4gICAgICBjYXNlICdpbml0aWFsLWlucHV0LWZvY3VzJzpcbiAgICAgICAgcmV0dXJuIFwib3B0aW9uXCIuY29uY2F0KGxhYmVscy5sZW5ndGggPiAxID8gJ3MnIDogJycsIFwiIFwiKS5jb25jYXQobGFiZWxzLmpvaW4oJywnKSwgXCIsIHNlbGVjdGVkLlwiKTtcbiAgICAgIGNhc2UgJ3NlbGVjdC1vcHRpb24nOlxuICAgICAgICByZXR1cm4gaXNEaXNhYmxlZCA/IFwib3B0aW9uIFwiLmNvbmNhdChsYWJlbCwgXCIgaXMgZGlzYWJsZWQuIFNlbGVjdCBhbm90aGVyIG9wdGlvbi5cIikgOiBcIm9wdGlvbiBcIi5jb25jYXQobGFiZWwsIFwiLCBzZWxlY3RlZC5cIik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9LFxuICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKHByb3BzKSB7XG4gICAgdmFyIGNvbnRleHQgPSBwcm9wcy5jb250ZXh0LFxuICAgICAgZm9jdXNlZCA9IHByb3BzLmZvY3VzZWQsXG4gICAgICBvcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgIF9wcm9wcyRsYWJlbDIgPSBwcm9wcy5sYWJlbCxcbiAgICAgIGxhYmVsID0gX3Byb3BzJGxhYmVsMiA9PT0gdm9pZCAwID8gJycgOiBfcHJvcHMkbGFiZWwyLFxuICAgICAgc2VsZWN0VmFsdWUgPSBwcm9wcy5zZWxlY3RWYWx1ZSxcbiAgICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgaXNTZWxlY3RlZCA9IHByb3BzLmlzU2VsZWN0ZWQsXG4gICAgICBpc0FwcGxlRGV2aWNlID0gcHJvcHMuaXNBcHBsZURldmljZTtcbiAgICB2YXIgZ2V0QXJyYXlJbmRleCA9IGZ1bmN0aW9uIGdldEFycmF5SW5kZXgoYXJyLCBpdGVtKSB7XG4gICAgICByZXR1cm4gYXJyICYmIGFyci5sZW5ndGggPyBcIlwiLmNvbmNhdChhcnIuaW5kZXhPZihpdGVtKSArIDEsIFwiIG9mIFwiKS5jb25jYXQoYXJyLmxlbmd0aCkgOiAnJztcbiAgICB9O1xuICAgIGlmIChjb250ZXh0ID09PSAndmFsdWUnICYmIHNlbGVjdFZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJ2YWx1ZSBcIi5jb25jYXQobGFiZWwsIFwiIGZvY3VzZWQsIFwiKS5jb25jYXQoZ2V0QXJyYXlJbmRleChzZWxlY3RWYWx1ZSwgZm9jdXNlZCksIFwiLlwiKTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgPT09ICdtZW51JyAmJiBpc0FwcGxlRGV2aWNlKSB7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBpc0Rpc2FibGVkID8gJyBkaXNhYmxlZCcgOiAnJztcbiAgICAgIHZhciBzdGF0dXMgPSBcIlwiLmNvbmNhdChpc1NlbGVjdGVkID8gJyBzZWxlY3RlZCcgOiAnJykuY29uY2F0KGRpc2FibGVkKTtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChsYWJlbCkuY29uY2F0KHN0YXR1cywgXCIsIFwiKS5jb25jYXQoZ2V0QXJyYXlJbmRleChvcHRpb25zLCBmb2N1c2VkKSwgXCIuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0sXG4gIG9uRmlsdGVyOiBmdW5jdGlvbiBvbkZpbHRlcihwcm9wcykge1xuICAgIHZhciBpbnB1dFZhbHVlID0gcHJvcHMuaW5wdXRWYWx1ZSxcbiAgICAgIHJlc3VsdHNNZXNzYWdlID0gcHJvcHMucmVzdWx0c01lc3NhZ2U7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdHNNZXNzYWdlKS5jb25jYXQoaW5wdXRWYWx1ZSA/ICcgZm9yIHNlYXJjaCB0ZXJtICcgKyBpbnB1dFZhbHVlIDogJycsIFwiLlwiKTtcbiAgfVxufTtcblxudmFyIExpdmVSZWdpb24gPSBmdW5jdGlvbiBMaXZlUmVnaW9uKHByb3BzKSB7XG4gIHZhciBhcmlhU2VsZWN0aW9uID0gcHJvcHMuYXJpYVNlbGVjdGlvbixcbiAgICBmb2N1c2VkT3B0aW9uID0gcHJvcHMuZm9jdXNlZE9wdGlvbixcbiAgICBmb2N1c2VkVmFsdWUgPSBwcm9wcy5mb2N1c2VkVmFsdWUsXG4gICAgZm9jdXNhYmxlT3B0aW9ucyA9IHByb3BzLmZvY3VzYWJsZU9wdGlvbnMsXG4gICAgaXNGb2N1c2VkID0gcHJvcHMuaXNGb2N1c2VkLFxuICAgIHNlbGVjdFZhbHVlID0gcHJvcHMuc2VsZWN0VmFsdWUsXG4gICAgc2VsZWN0UHJvcHMgPSBwcm9wcy5zZWxlY3RQcm9wcyxcbiAgICBpZCA9IHByb3BzLmlkLFxuICAgIGlzQXBwbGVEZXZpY2UgPSBwcm9wcy5pc0FwcGxlRGV2aWNlO1xuICB2YXIgYXJpYUxpdmVNZXNzYWdlcyA9IHNlbGVjdFByb3BzLmFyaWFMaXZlTWVzc2FnZXMsXG4gICAgZ2V0T3B0aW9uTGFiZWwgPSBzZWxlY3RQcm9wcy5nZXRPcHRpb25MYWJlbCxcbiAgICBpbnB1dFZhbHVlID0gc2VsZWN0UHJvcHMuaW5wdXRWYWx1ZSxcbiAgICBpc011bHRpID0gc2VsZWN0UHJvcHMuaXNNdWx0aSxcbiAgICBpc09wdGlvbkRpc2FibGVkID0gc2VsZWN0UHJvcHMuaXNPcHRpb25EaXNhYmxlZCxcbiAgICBpc1NlYXJjaGFibGUgPSBzZWxlY3RQcm9wcy5pc1NlYXJjaGFibGUsXG4gICAgbWVudUlzT3BlbiA9IHNlbGVjdFByb3BzLm1lbnVJc09wZW4sXG4gICAgb3B0aW9ucyA9IHNlbGVjdFByb3BzLm9wdGlvbnMsXG4gICAgc2NyZWVuUmVhZGVyU3RhdHVzID0gc2VsZWN0UHJvcHMuc2NyZWVuUmVhZGVyU3RhdHVzLFxuICAgIHRhYlNlbGVjdHNWYWx1ZSA9IHNlbGVjdFByb3BzLnRhYlNlbGVjdHNWYWx1ZSxcbiAgICBpc0xvYWRpbmcgPSBzZWxlY3RQcm9wcy5pc0xvYWRpbmc7XG4gIHZhciBhcmlhTGFiZWwgPSBzZWxlY3RQcm9wc1snYXJpYS1sYWJlbCddO1xuICB2YXIgYXJpYUxpdmUgPSBzZWxlY3RQcm9wc1snYXJpYS1saXZlJ107XG5cbiAgLy8gVXBkYXRlIGFyaWEgbGl2ZSBtZXNzYWdlIGNvbmZpZ3VyYXRpb24gd2hlbiBwcm9wIGNoYW5nZXNcbiAgdmFyIG1lc3NhZ2VzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGVmYXVsdEFyaWFMaXZlTWVzc2FnZXMpLCBhcmlhTGl2ZU1lc3NhZ2VzIHx8IHt9KTtcbiAgfSwgW2FyaWFMaXZlTWVzc2FnZXNdKTtcblxuICAvLyBVcGRhdGUgYXJpYSBsaXZlIHNlbGVjdGVkIG9wdGlvbiB3aGVuIHByb3AgY2hhbmdlc1xuICB2YXIgYXJpYVNlbGVjdGVkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoYXJpYVNlbGVjdGlvbiAmJiBtZXNzYWdlcy5vbkNoYW5nZSkge1xuICAgICAgdmFyIG9wdGlvbiA9IGFyaWFTZWxlY3Rpb24ub3B0aW9uLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBhcmlhU2VsZWN0aW9uLm9wdGlvbnMsXG4gICAgICAgIHJlbW92ZWRWYWx1ZSA9IGFyaWFTZWxlY3Rpb24ucmVtb3ZlZFZhbHVlLFxuICAgICAgICByZW1vdmVkVmFsdWVzID0gYXJpYVNlbGVjdGlvbi5yZW1vdmVkVmFsdWVzLFxuICAgICAgICB2YWx1ZSA9IGFyaWFTZWxlY3Rpb24udmFsdWU7XG4gICAgICAvLyBzZWxlY3Qtb3B0aW9uIHdoZW4gIWlzTXVsdGkgZG9lcyBub3QgcmV0dXJuIG9wdGlvbiBzbyB3ZSBhc3N1bWUgc2VsZWN0ZWQgb3B0aW9uIGlzIHZhbHVlXG4gICAgICB2YXIgYXNPcHRpb24gPSBmdW5jdGlvbiBhc09wdGlvbih2YWwpIHtcbiAgICAgICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBudWxsO1xuICAgICAgfTtcblxuICAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBvbmUgaXRlbSBmcm9tIHRoZSBhY3Rpb24gdGhlbiBnZXQgaXRzIGxhYmVsXG4gICAgICB2YXIgc2VsZWN0ZWQgPSByZW1vdmVkVmFsdWUgfHwgb3B0aW9uIHx8IGFzT3B0aW9uKHZhbHVlKTtcbiAgICAgIHZhciBsYWJlbCA9IHNlbGVjdGVkID8gZ2V0T3B0aW9uTGFiZWwoc2VsZWN0ZWQpIDogJyc7XG5cbiAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBpdGVtcyBmcm9tIHRoZSBhY3Rpb24gdGhlbiByZXR1cm4gYW4gYXJyYXkgb2YgbGFiZWxzXG4gICAgICB2YXIgbXVsdGlTZWxlY3RlZCA9IHNlbGVjdGVkT3B0aW9ucyB8fCByZW1vdmVkVmFsdWVzIHx8IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYWJlbHMgPSBtdWx0aVNlbGVjdGVkID8gbXVsdGlTZWxlY3RlZC5tYXAoZ2V0T3B0aW9uTGFiZWwpIDogW107XG4gICAgICB2YXIgb25DaGFuZ2VQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAvLyBtdWx0aVNlbGVjdGVkIGl0ZW1zIGFyZSB1c3VhbGx5IGl0ZW1zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gc2VsZWN0ZWRcbiAgICAgICAgLy8gb3Igc2V0IGJ5IHRoZSB1c2VyIGFzIGEgZGVmYXVsdCB2YWx1ZSBzbyB3ZSBhc3N1bWUgdGhleSBhcmUgbm90IGRpc2FibGVkXG4gICAgICAgIGlzRGlzYWJsZWQ6IHNlbGVjdGVkICYmIGlzT3B0aW9uRGlzYWJsZWQoc2VsZWN0ZWQsIHNlbGVjdFZhbHVlKSxcbiAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICBsYWJlbHM6IGxhYmVsc1xuICAgICAgfSwgYXJpYVNlbGVjdGlvbik7XG4gICAgICBtZXNzYWdlID0gbWVzc2FnZXMub25DaGFuZ2Uob25DaGFuZ2VQcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LCBbYXJpYVNlbGVjdGlvbiwgbWVzc2FnZXMsIGlzT3B0aW9uRGlzYWJsZWQsIHNlbGVjdFZhbHVlLCBnZXRPcHRpb25MYWJlbF0pO1xuICB2YXIgYXJpYUZvY3VzZWQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZm9jdXNNc2cgPSAnJztcbiAgICB2YXIgZm9jdXNlZCA9IGZvY3VzZWRPcHRpb24gfHwgZm9jdXNlZFZhbHVlO1xuICAgIHZhciBpc1NlbGVjdGVkID0gISEoZm9jdXNlZE9wdGlvbiAmJiBzZWxlY3RWYWx1ZSAmJiBzZWxlY3RWYWx1ZS5pbmNsdWRlcyhmb2N1c2VkT3B0aW9uKSk7XG4gICAgaWYgKGZvY3VzZWQgJiYgbWVzc2FnZXMub25Gb2N1cykge1xuICAgICAgdmFyIG9uRm9jdXNQcm9wcyA9IHtcbiAgICAgICAgZm9jdXNlZDogZm9jdXNlZCxcbiAgICAgICAgbGFiZWw6IGdldE9wdGlvbkxhYmVsKGZvY3VzZWQpLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc09wdGlvbkRpc2FibGVkKGZvY3VzZWQsIHNlbGVjdFZhbHVlKSxcbiAgICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICAgICAgb3B0aW9uczogZm9jdXNhYmxlT3B0aW9ucyxcbiAgICAgICAgY29udGV4dDogZm9jdXNlZCA9PT0gZm9jdXNlZE9wdGlvbiA/ICdtZW51JyA6ICd2YWx1ZScsXG4gICAgICAgIHNlbGVjdFZhbHVlOiBzZWxlY3RWYWx1ZSxcbiAgICAgICAgaXNBcHBsZURldmljZTogaXNBcHBsZURldmljZVxuICAgICAgfTtcbiAgICAgIGZvY3VzTXNnID0gbWVzc2FnZXMub25Gb2N1cyhvbkZvY3VzUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gZm9jdXNNc2c7XG4gIH0sIFtmb2N1c2VkT3B0aW9uLCBmb2N1c2VkVmFsdWUsIGdldE9wdGlvbkxhYmVsLCBpc09wdGlvbkRpc2FibGVkLCBtZXNzYWdlcywgZm9jdXNhYmxlT3B0aW9ucywgc2VsZWN0VmFsdWUsIGlzQXBwbGVEZXZpY2VdKTtcbiAgdmFyIGFyaWFSZXN1bHRzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdHNNc2cgPSAnJztcbiAgICBpZiAobWVudUlzT3BlbiAmJiBvcHRpb25zLmxlbmd0aCAmJiAhaXNMb2FkaW5nICYmIG1lc3NhZ2VzLm9uRmlsdGVyKSB7XG4gICAgICB2YXIgcmVzdWx0c01lc3NhZ2UgPSBzY3JlZW5SZWFkZXJTdGF0dXMoe1xuICAgICAgICBjb3VudDogZm9jdXNhYmxlT3B0aW9ucy5sZW5ndGhcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0c01zZyA9IG1lc3NhZ2VzLm9uRmlsdGVyKHtcbiAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgcmVzdWx0c01lc3NhZ2U6IHJlc3VsdHNNZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNNc2c7XG4gIH0sIFtmb2N1c2FibGVPcHRpb25zLCBpbnB1dFZhbHVlLCBtZW51SXNPcGVuLCBtZXNzYWdlcywgb3B0aW9ucywgc2NyZWVuUmVhZGVyU3RhdHVzLCBpc0xvYWRpbmddKTtcbiAgdmFyIGlzSW5pdGlhbEZvY3VzID0gKGFyaWFTZWxlY3Rpb24gPT09IG51bGwgfHwgYXJpYVNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJpYVNlbGVjdGlvbi5hY3Rpb24pID09PSAnaW5pdGlhbC1pbnB1dC1mb2N1cyc7XG4gIHZhciBhcmlhR3VpZGFuY2UgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ3VpZGFuY2VNc2cgPSAnJztcbiAgICBpZiAobWVzc2FnZXMuZ3VpZGFuY2UpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gZm9jdXNlZFZhbHVlID8gJ3ZhbHVlJyA6IG1lbnVJc09wZW4gPyAnbWVudScgOiAnaW5wdXQnO1xuICAgICAgZ3VpZGFuY2VNc2cgPSBtZXNzYWdlcy5ndWlkYW5jZSh7XG4gICAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICBpc0Rpc2FibGVkOiBmb2N1c2VkT3B0aW9uICYmIGlzT3B0aW9uRGlzYWJsZWQoZm9jdXNlZE9wdGlvbiwgc2VsZWN0VmFsdWUpLFxuICAgICAgICBpc011bHRpOiBpc011bHRpLFxuICAgICAgICBpc1NlYXJjaGFibGU6IGlzU2VhcmNoYWJsZSxcbiAgICAgICAgdGFiU2VsZWN0c1ZhbHVlOiB0YWJTZWxlY3RzVmFsdWUsXG4gICAgICAgIGlzSW5pdGlhbEZvY3VzOiBpc0luaXRpYWxGb2N1c1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBndWlkYW5jZU1zZztcbiAgfSwgW2FyaWFMYWJlbCwgZm9jdXNlZE9wdGlvbiwgZm9jdXNlZFZhbHVlLCBpc011bHRpLCBpc09wdGlvbkRpc2FibGVkLCBpc1NlYXJjaGFibGUsIG1lbnVJc09wZW4sIG1lc3NhZ2VzLCBzZWxlY3RWYWx1ZSwgdGFiU2VsZWN0c1ZhbHVlLCBpc0luaXRpYWxGb2N1c10pO1xuICB2YXIgU2NyZWVuUmVhZGVyVGV4dCA9IGpzeChGcmFnbWVudCwgbnVsbCwganN4KFwic3BhblwiLCB7XG4gICAgaWQ6IFwiYXJpYS1zZWxlY3Rpb25cIlxuICB9LCBhcmlhU2VsZWN0ZWQpLCBqc3goXCJzcGFuXCIsIHtcbiAgICBpZDogXCJhcmlhLWZvY3VzZWRcIlxuICB9LCBhcmlhRm9jdXNlZCksIGpzeChcInNwYW5cIiwge1xuICAgIGlkOiBcImFyaWEtcmVzdWx0c1wiXG4gIH0sIGFyaWFSZXN1bHRzKSwganN4KFwic3BhblwiLCB7XG4gICAgaWQ6IFwiYXJpYS1ndWlkYW5jZVwiXG4gIH0sIGFyaWFHdWlkYW5jZSkpO1xuICByZXR1cm4ganN4KEZyYWdtZW50LCBudWxsLCBqc3goQTExeVRleHQkMSwge1xuICAgIGlkOiBpZFxuICB9LCBpc0luaXRpYWxGb2N1cyAmJiBTY3JlZW5SZWFkZXJUZXh0KSwganN4KEExMXlUZXh0JDEsIHtcbiAgICBcImFyaWEtbGl2ZVwiOiBhcmlhTGl2ZSxcbiAgICBcImFyaWEtYXRvbWljXCI6IFwiZmFsc2VcIixcbiAgICBcImFyaWEtcmVsZXZhbnRcIjogXCJhZGRpdGlvbnMgdGV4dFwiLFxuICAgIHJvbGU6IFwibG9nXCJcbiAgfSwgaXNGb2N1c2VkICYmICFpc0luaXRpYWxGb2N1cyAmJiBTY3JlZW5SZWFkZXJUZXh0KSk7XG59O1xudmFyIExpdmVSZWdpb24kMSA9IExpdmVSZWdpb247XG5cbnZhciBkaWFjcml0aWNzID0gW3tcbiAgYmFzZTogJ0EnLFxuICBsZXR0ZXJzOiBcIkFcXHUyNEI2XFx1RkYyMVxceEMwXFx4QzFcXHhDMlxcdTFFQTZcXHUxRUE0XFx1MUVBQVxcdTFFQThcXHhDM1xcdTAxMDBcXHUwMTAyXFx1MUVCMFxcdTFFQUVcXHUxRUI0XFx1MUVCMlxcdTAyMjZcXHUwMUUwXFx4QzRcXHUwMURFXFx1MUVBMlxceEM1XFx1MDFGQVxcdTAxQ0RcXHUwMjAwXFx1MDIwMlxcdTFFQTBcXHUxRUFDXFx1MUVCNlxcdTFFMDBcXHUwMTA0XFx1MDIzQVxcdTJDNkZcIlxufSwge1xuICBiYXNlOiAnQUEnLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzJcIlxufSwge1xuICBiYXNlOiAnQUUnLFxuICBsZXR0ZXJzOiBcIlxceEM2XFx1MDFGQ1xcdTAxRTJcIlxufSwge1xuICBiYXNlOiAnQU8nLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzRcIlxufSwge1xuICBiYXNlOiAnQVUnLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzZcIlxufSwge1xuICBiYXNlOiAnQVYnLFxuICBsZXR0ZXJzOiBcIlxcdUE3MzhcXHVBNzNBXCJcbn0sIHtcbiAgYmFzZTogJ0FZJyxcbiAgbGV0dGVyczogXCJcXHVBNzNDXCJcbn0sIHtcbiAgYmFzZTogJ0InLFxuICBsZXR0ZXJzOiBcIkJcXHUyNEI3XFx1RkYyMlxcdTFFMDJcXHUxRTA0XFx1MUUwNlxcdTAyNDNcXHUwMTgyXFx1MDE4MVwiXG59LCB7XG4gIGJhc2U6ICdDJyxcbiAgbGV0dGVyczogXCJDXFx1MjRCOFxcdUZGMjNcXHUwMTA2XFx1MDEwOFxcdTAxMEFcXHUwMTBDXFx4QzdcXHUxRTA4XFx1MDE4N1xcdTAyM0JcXHVBNzNFXCJcbn0sIHtcbiAgYmFzZTogJ0QnLFxuICBsZXR0ZXJzOiBcIkRcXHUyNEI5XFx1RkYyNFxcdTFFMEFcXHUwMTBFXFx1MUUwQ1xcdTFFMTBcXHUxRTEyXFx1MUUwRVxcdTAxMTBcXHUwMThCXFx1MDE4QVxcdTAxODlcXHVBNzc5XCJcbn0sIHtcbiAgYmFzZTogJ0RaJyxcbiAgbGV0dGVyczogXCJcXHUwMUYxXFx1MDFDNFwiXG59LCB7XG4gIGJhc2U6ICdEeicsXG4gIGxldHRlcnM6IFwiXFx1MDFGMlxcdTAxQzVcIlxufSwge1xuICBiYXNlOiAnRScsXG4gIGxldHRlcnM6IFwiRVxcdTI0QkFcXHVGRjI1XFx4QzhcXHhDOVxceENBXFx1MUVDMFxcdTFFQkVcXHUxRUM0XFx1MUVDMlxcdTFFQkNcXHUwMTEyXFx1MUUxNFxcdTFFMTZcXHUwMTE0XFx1MDExNlxceENCXFx1MUVCQVxcdTAxMUFcXHUwMjA0XFx1MDIwNlxcdTFFQjhcXHUxRUM2XFx1MDIyOFxcdTFFMUNcXHUwMTE4XFx1MUUxOFxcdTFFMUFcXHUwMTkwXFx1MDE4RVwiXG59LCB7XG4gIGJhc2U6ICdGJyxcbiAgbGV0dGVyczogXCJGXFx1MjRCQlxcdUZGMjZcXHUxRTFFXFx1MDE5MVxcdUE3N0JcIlxufSwge1xuICBiYXNlOiAnRycsXG4gIGxldHRlcnM6IFwiR1xcdTI0QkNcXHVGRjI3XFx1MDFGNFxcdTAxMUNcXHUxRTIwXFx1MDExRVxcdTAxMjBcXHUwMUU2XFx1MDEyMlxcdTAxRTRcXHUwMTkzXFx1QTdBMFxcdUE3N0RcXHVBNzdFXCJcbn0sIHtcbiAgYmFzZTogJ0gnLFxuICBsZXR0ZXJzOiBcIkhcXHUyNEJEXFx1RkYyOFxcdTAxMjRcXHUxRTIyXFx1MUUyNlxcdTAyMUVcXHUxRTI0XFx1MUUyOFxcdTFFMkFcXHUwMTI2XFx1MkM2N1xcdTJDNzVcXHVBNzhEXCJcbn0sIHtcbiAgYmFzZTogJ0knLFxuICBsZXR0ZXJzOiBcIklcXHUyNEJFXFx1RkYyOVxceENDXFx4Q0RcXHhDRVxcdTAxMjhcXHUwMTJBXFx1MDEyQ1xcdTAxMzBcXHhDRlxcdTFFMkVcXHUxRUM4XFx1MDFDRlxcdTAyMDhcXHUwMjBBXFx1MUVDQVxcdTAxMkVcXHUxRTJDXFx1MDE5N1wiXG59LCB7XG4gIGJhc2U6ICdKJyxcbiAgbGV0dGVyczogXCJKXFx1MjRCRlxcdUZGMkFcXHUwMTM0XFx1MDI0OFwiXG59LCB7XG4gIGJhc2U6ICdLJyxcbiAgbGV0dGVyczogXCJLXFx1MjRDMFxcdUZGMkJcXHUxRTMwXFx1MDFFOFxcdTFFMzJcXHUwMTM2XFx1MUUzNFxcdTAxOThcXHUyQzY5XFx1QTc0MFxcdUE3NDJcXHVBNzQ0XFx1QTdBMlwiXG59LCB7XG4gIGJhc2U6ICdMJyxcbiAgbGV0dGVyczogXCJMXFx1MjRDMVxcdUZGMkNcXHUwMTNGXFx1MDEzOVxcdTAxM0RcXHUxRTM2XFx1MUUzOFxcdTAxM0JcXHUxRTNDXFx1MUUzQVxcdTAxNDFcXHUwMjNEXFx1MkM2MlxcdTJDNjBcXHVBNzQ4XFx1QTc0NlxcdUE3ODBcIlxufSwge1xuICBiYXNlOiAnTEonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQzdcIlxufSwge1xuICBiYXNlOiAnTGonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQzhcIlxufSwge1xuICBiYXNlOiAnTScsXG4gIGxldHRlcnM6IFwiTVxcdTI0QzJcXHVGRjJEXFx1MUUzRVxcdTFFNDBcXHUxRTQyXFx1MkM2RVxcdTAxOUNcIlxufSwge1xuICBiYXNlOiAnTicsXG4gIGxldHRlcnM6IFwiTlxcdTI0QzNcXHVGRjJFXFx1MDFGOFxcdTAxNDNcXHhEMVxcdTFFNDRcXHUwMTQ3XFx1MUU0NlxcdTAxNDVcXHUxRTRBXFx1MUU0OFxcdTAyMjBcXHUwMTlEXFx1QTc5MFxcdUE3QTRcIlxufSwge1xuICBiYXNlOiAnTkonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQ0FcIlxufSwge1xuICBiYXNlOiAnTmonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQ0JcIlxufSwge1xuICBiYXNlOiAnTycsXG4gIGxldHRlcnM6IFwiT1xcdTI0QzRcXHVGRjJGXFx4RDJcXHhEM1xceEQ0XFx1MUVEMlxcdTFFRDBcXHUxRUQ2XFx1MUVENFxceEQ1XFx1MUU0Q1xcdTAyMkNcXHUxRTRFXFx1MDE0Q1xcdTFFNTBcXHUxRTUyXFx1MDE0RVxcdTAyMkVcXHUwMjMwXFx4RDZcXHUwMjJBXFx1MUVDRVxcdTAxNTBcXHUwMUQxXFx1MDIwQ1xcdTAyMEVcXHUwMUEwXFx1MUVEQ1xcdTFFREFcXHUxRUUwXFx1MUVERVxcdTFFRTJcXHUxRUNDXFx1MUVEOFxcdTAxRUFcXHUwMUVDXFx4RDhcXHUwMUZFXFx1MDE4NlxcdTAxOUZcXHVBNzRBXFx1QTc0Q1wiXG59LCB7XG4gIGJhc2U6ICdPSScsXG4gIGxldHRlcnM6IFwiXFx1MDFBMlwiXG59LCB7XG4gIGJhc2U6ICdPTycsXG4gIGxldHRlcnM6IFwiXFx1QTc0RVwiXG59LCB7XG4gIGJhc2U6ICdPVScsXG4gIGxldHRlcnM6IFwiXFx1MDIyMlwiXG59LCB7XG4gIGJhc2U6ICdQJyxcbiAgbGV0dGVyczogXCJQXFx1MjRDNVxcdUZGMzBcXHUxRTU0XFx1MUU1NlxcdTAxQTRcXHUyQzYzXFx1QTc1MFxcdUE3NTJcXHVBNzU0XCJcbn0sIHtcbiAgYmFzZTogJ1EnLFxuICBsZXR0ZXJzOiBcIlFcXHUyNEM2XFx1RkYzMVxcdUE3NTZcXHVBNzU4XFx1MDI0QVwiXG59LCB7XG4gIGJhc2U6ICdSJyxcbiAgbGV0dGVyczogXCJSXFx1MjRDN1xcdUZGMzJcXHUwMTU0XFx1MUU1OFxcdTAxNThcXHUwMjEwXFx1MDIxMlxcdTFFNUFcXHUxRTVDXFx1MDE1NlxcdTFFNUVcXHUwMjRDXFx1MkM2NFxcdUE3NUFcXHVBN0E2XFx1QTc4MlwiXG59LCB7XG4gIGJhc2U6ICdTJyxcbiAgbGV0dGVyczogXCJTXFx1MjRDOFxcdUZGMzNcXHUxRTlFXFx1MDE1QVxcdTFFNjRcXHUwMTVDXFx1MUU2MFxcdTAxNjBcXHUxRTY2XFx1MUU2MlxcdTFFNjhcXHUwMjE4XFx1MDE1RVxcdTJDN0VcXHVBN0E4XFx1QTc4NFwiXG59LCB7XG4gIGJhc2U6ICdUJyxcbiAgbGV0dGVyczogXCJUXFx1MjRDOVxcdUZGMzRcXHUxRTZBXFx1MDE2NFxcdTFFNkNcXHUwMjFBXFx1MDE2MlxcdTFFNzBcXHUxRTZFXFx1MDE2NlxcdTAxQUNcXHUwMUFFXFx1MDIzRVxcdUE3ODZcIlxufSwge1xuICBiYXNlOiAnVFonLFxuICBsZXR0ZXJzOiBcIlxcdUE3MjhcIlxufSwge1xuICBiYXNlOiAnVScsXG4gIGxldHRlcnM6IFwiVVxcdTI0Q0FcXHVGRjM1XFx4RDlcXHhEQVxceERCXFx1MDE2OFxcdTFFNzhcXHUwMTZBXFx1MUU3QVxcdTAxNkNcXHhEQ1xcdTAxREJcXHUwMUQ3XFx1MDFENVxcdTAxRDlcXHUxRUU2XFx1MDE2RVxcdTAxNzBcXHUwMUQzXFx1MDIxNFxcdTAyMTZcXHUwMUFGXFx1MUVFQVxcdTFFRThcXHUxRUVFXFx1MUVFQ1xcdTFFRjBcXHUxRUU0XFx1MUU3MlxcdTAxNzJcXHUxRTc2XFx1MUU3NFxcdTAyNDRcIlxufSwge1xuICBiYXNlOiAnVicsXG4gIGxldHRlcnM6IFwiVlxcdTI0Q0JcXHVGRjM2XFx1MUU3Q1xcdTFFN0VcXHUwMUIyXFx1QTc1RVxcdTAyNDVcIlxufSwge1xuICBiYXNlOiAnVlknLFxuICBsZXR0ZXJzOiBcIlxcdUE3NjBcIlxufSwge1xuICBiYXNlOiAnVycsXG4gIGxldHRlcnM6IFwiV1xcdTI0Q0NcXHVGRjM3XFx1MUU4MFxcdTFFODJcXHUwMTc0XFx1MUU4NlxcdTFFODRcXHUxRTg4XFx1MkM3MlwiXG59LCB7XG4gIGJhc2U6ICdYJyxcbiAgbGV0dGVyczogXCJYXFx1MjRDRFxcdUZGMzhcXHUxRThBXFx1MUU4Q1wiXG59LCB7XG4gIGJhc2U6ICdZJyxcbiAgbGV0dGVyczogXCJZXFx1MjRDRVxcdUZGMzlcXHUxRUYyXFx4RERcXHUwMTc2XFx1MUVGOFxcdTAyMzJcXHUxRThFXFx1MDE3OFxcdTFFRjZcXHUxRUY0XFx1MDFCM1xcdTAyNEVcXHUxRUZFXCJcbn0sIHtcbiAgYmFzZTogJ1onLFxuICBsZXR0ZXJzOiBcIlpcXHUyNENGXFx1RkYzQVxcdTAxNzlcXHUxRTkwXFx1MDE3QlxcdTAxN0RcXHUxRTkyXFx1MUU5NFxcdTAxQjVcXHUwMjI0XFx1MkM3RlxcdTJDNkJcXHVBNzYyXCJcbn0sIHtcbiAgYmFzZTogJ2EnLFxuICBsZXR0ZXJzOiBcImFcXHUyNEQwXFx1RkY0MVxcdTFFOUFcXHhFMFxceEUxXFx4RTJcXHUxRUE3XFx1MUVBNVxcdTFFQUJcXHUxRUE5XFx4RTNcXHUwMTAxXFx1MDEwM1xcdTFFQjFcXHUxRUFGXFx1MUVCNVxcdTFFQjNcXHUwMjI3XFx1MDFFMVxceEU0XFx1MDFERlxcdTFFQTNcXHhFNVxcdTAxRkJcXHUwMUNFXFx1MDIwMVxcdTAyMDNcXHUxRUExXFx1MUVBRFxcdTFFQjdcXHUxRTAxXFx1MDEwNVxcdTJDNjVcXHUwMjUwXCJcbn0sIHtcbiAgYmFzZTogJ2FhJyxcbiAgbGV0dGVyczogXCJcXHVBNzMzXCJcbn0sIHtcbiAgYmFzZTogJ2FlJyxcbiAgbGV0dGVyczogXCJcXHhFNlxcdTAxRkRcXHUwMUUzXCJcbn0sIHtcbiAgYmFzZTogJ2FvJyxcbiAgbGV0dGVyczogXCJcXHVBNzM1XCJcbn0sIHtcbiAgYmFzZTogJ2F1JyxcbiAgbGV0dGVyczogXCJcXHVBNzM3XCJcbn0sIHtcbiAgYmFzZTogJ2F2JyxcbiAgbGV0dGVyczogXCJcXHVBNzM5XFx1QTczQlwiXG59LCB7XG4gIGJhc2U6ICdheScsXG4gIGxldHRlcnM6IFwiXFx1QTczRFwiXG59LCB7XG4gIGJhc2U6ICdiJyxcbiAgbGV0dGVyczogXCJiXFx1MjREMVxcdUZGNDJcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUwMTgwXFx1MDE4M1xcdTAyNTNcIlxufSwge1xuICBiYXNlOiAnYycsXG4gIGxldHRlcnM6IFwiY1xcdTI0RDJcXHVGRjQzXFx1MDEwN1xcdTAxMDlcXHUwMTBCXFx1MDEwRFxceEU3XFx1MUUwOVxcdTAxODhcXHUwMjNDXFx1QTczRlxcdTIxODRcIlxufSwge1xuICBiYXNlOiAnZCcsXG4gIGxldHRlcnM6IFwiZFxcdTI0RDNcXHVGRjQ0XFx1MUUwQlxcdTAxMEZcXHUxRTBEXFx1MUUxMVxcdTFFMTNcXHUxRTBGXFx1MDExMVxcdTAxOENcXHUwMjU2XFx1MDI1N1xcdUE3N0FcIlxufSwge1xuICBiYXNlOiAnZHonLFxuICBsZXR0ZXJzOiBcIlxcdTAxRjNcXHUwMUM2XCJcbn0sIHtcbiAgYmFzZTogJ2UnLFxuICBsZXR0ZXJzOiBcImVcXHUyNEQ0XFx1RkY0NVxceEU4XFx4RTlcXHhFQVxcdTFFQzFcXHUxRUJGXFx1MUVDNVxcdTFFQzNcXHUxRUJEXFx1MDExM1xcdTFFMTVcXHUxRTE3XFx1MDExNVxcdTAxMTdcXHhFQlxcdTFFQkJcXHUwMTFCXFx1MDIwNVxcdTAyMDdcXHUxRUI5XFx1MUVDN1xcdTAyMjlcXHUxRTFEXFx1MDExOVxcdTFFMTlcXHUxRTFCXFx1MDI0N1xcdTAyNUJcXHUwMUREXCJcbn0sIHtcbiAgYmFzZTogJ2YnLFxuICBsZXR0ZXJzOiBcImZcXHUyNEQ1XFx1RkY0NlxcdTFFMUZcXHUwMTkyXFx1QTc3Q1wiXG59LCB7XG4gIGJhc2U6ICdnJyxcbiAgbGV0dGVyczogXCJnXFx1MjRENlxcdUZGNDdcXHUwMUY1XFx1MDExRFxcdTFFMjFcXHUwMTFGXFx1MDEyMVxcdTAxRTdcXHUwMTIzXFx1MDFFNVxcdTAyNjBcXHVBN0ExXFx1MUQ3OVxcdUE3N0ZcIlxufSwge1xuICBiYXNlOiAnaCcsXG4gIGxldHRlcnM6IFwiaFxcdTI0RDdcXHVGRjQ4XFx1MDEyNVxcdTFFMjNcXHUxRTI3XFx1MDIxRlxcdTFFMjVcXHUxRTI5XFx1MUUyQlxcdTFFOTZcXHUwMTI3XFx1MkM2OFxcdTJDNzZcXHUwMjY1XCJcbn0sIHtcbiAgYmFzZTogJ2h2JyxcbiAgbGV0dGVyczogXCJcXHUwMTk1XCJcbn0sIHtcbiAgYmFzZTogJ2knLFxuICBsZXR0ZXJzOiBcImlcXHUyNEQ4XFx1RkY0OVxceEVDXFx4RURcXHhFRVxcdTAxMjlcXHUwMTJCXFx1MDEyRFxceEVGXFx1MUUyRlxcdTFFQzlcXHUwMUQwXFx1MDIwOVxcdTAyMEJcXHUxRUNCXFx1MDEyRlxcdTFFMkRcXHUwMjY4XFx1MDEzMVwiXG59LCB7XG4gIGJhc2U6ICdqJyxcbiAgbGV0dGVyczogXCJqXFx1MjREOVxcdUZGNEFcXHUwMTM1XFx1MDFGMFxcdTAyNDlcIlxufSwge1xuICBiYXNlOiAnaycsXG4gIGxldHRlcnM6IFwia1xcdTI0REFcXHVGRjRCXFx1MUUzMVxcdTAxRTlcXHUxRTMzXFx1MDEzN1xcdTFFMzVcXHUwMTk5XFx1MkM2QVxcdUE3NDFcXHVBNzQzXFx1QTc0NVxcdUE3QTNcIlxufSwge1xuICBiYXNlOiAnbCcsXG4gIGxldHRlcnM6IFwibFxcdTI0REJcXHVGRjRDXFx1MDE0MFxcdTAxM0FcXHUwMTNFXFx1MUUzN1xcdTFFMzlcXHUwMTNDXFx1MUUzRFxcdTFFM0JcXHUwMTdGXFx1MDE0MlxcdTAxOUFcXHUwMjZCXFx1MkM2MVxcdUE3NDlcXHVBNzgxXFx1QTc0N1wiXG59LCB7XG4gIGJhc2U6ICdsaicsXG4gIGxldHRlcnM6IFwiXFx1MDFDOVwiXG59LCB7XG4gIGJhc2U6ICdtJyxcbiAgbGV0dGVyczogXCJtXFx1MjREQ1xcdUZGNERcXHUxRTNGXFx1MUU0MVxcdTFFNDNcXHUwMjcxXFx1MDI2RlwiXG59LCB7XG4gIGJhc2U6ICduJyxcbiAgbGV0dGVyczogXCJuXFx1MjRERFxcdUZGNEVcXHUwMUY5XFx1MDE0NFxceEYxXFx1MUU0NVxcdTAxNDhcXHUxRTQ3XFx1MDE0NlxcdTFFNEJcXHUxRTQ5XFx1MDE5RVxcdTAyNzJcXHUwMTQ5XFx1QTc5MVxcdUE3QTVcIlxufSwge1xuICBiYXNlOiAnbmonLFxuICBsZXR0ZXJzOiBcIlxcdTAxQ0NcIlxufSwge1xuICBiYXNlOiAnbycsXG4gIGxldHRlcnM6IFwib1xcdTI0REVcXHVGRjRGXFx4RjJcXHhGM1xceEY0XFx1MUVEM1xcdTFFRDFcXHUxRUQ3XFx1MUVENVxceEY1XFx1MUU0RFxcdTAyMkRcXHUxRTRGXFx1MDE0RFxcdTFFNTFcXHUxRTUzXFx1MDE0RlxcdTAyMkZcXHUwMjMxXFx4RjZcXHUwMjJCXFx1MUVDRlxcdTAxNTFcXHUwMUQyXFx1MDIwRFxcdTAyMEZcXHUwMUExXFx1MUVERFxcdTFFREJcXHUxRUUxXFx1MUVERlxcdTFFRTNcXHUxRUNEXFx1MUVEOVxcdTAxRUJcXHUwMUVEXFx4RjhcXHUwMUZGXFx1MDI1NFxcdUE3NEJcXHVBNzREXFx1MDI3NVwiXG59LCB7XG4gIGJhc2U6ICdvaScsXG4gIGxldHRlcnM6IFwiXFx1MDFBM1wiXG59LCB7XG4gIGJhc2U6ICdvdScsXG4gIGxldHRlcnM6IFwiXFx1MDIyM1wiXG59LCB7XG4gIGJhc2U6ICdvbycsXG4gIGxldHRlcnM6IFwiXFx1QTc0RlwiXG59LCB7XG4gIGJhc2U6ICdwJyxcbiAgbGV0dGVyczogXCJwXFx1MjRERlxcdUZGNTBcXHUxRTU1XFx1MUU1N1xcdTAxQTVcXHUxRDdEXFx1QTc1MVxcdUE3NTNcXHVBNzU1XCJcbn0sIHtcbiAgYmFzZTogJ3EnLFxuICBsZXR0ZXJzOiBcInFcXHUyNEUwXFx1RkY1MVxcdTAyNEJcXHVBNzU3XFx1QTc1OVwiXG59LCB7XG4gIGJhc2U6ICdyJyxcbiAgbGV0dGVyczogXCJyXFx1MjRFMVxcdUZGNTJcXHUwMTU1XFx1MUU1OVxcdTAxNTlcXHUwMjExXFx1MDIxM1xcdTFFNUJcXHUxRTVEXFx1MDE1N1xcdTFFNUZcXHUwMjREXFx1MDI3RFxcdUE3NUJcXHVBN0E3XFx1QTc4M1wiXG59LCB7XG4gIGJhc2U6ICdzJyxcbiAgbGV0dGVyczogXCJzXFx1MjRFMlxcdUZGNTNcXHhERlxcdTAxNUJcXHUxRTY1XFx1MDE1RFxcdTFFNjFcXHUwMTYxXFx1MUU2N1xcdTFFNjNcXHUxRTY5XFx1MDIxOVxcdTAxNUZcXHUwMjNGXFx1QTdBOVxcdUE3ODVcXHUxRTlCXCJcbn0sIHtcbiAgYmFzZTogJ3QnLFxuICBsZXR0ZXJzOiBcInRcXHUyNEUzXFx1RkY1NFxcdTFFNkJcXHUxRTk3XFx1MDE2NVxcdTFFNkRcXHUwMjFCXFx1MDE2M1xcdTFFNzFcXHUxRTZGXFx1MDE2N1xcdTAxQURcXHUwMjg4XFx1MkM2NlxcdUE3ODdcIlxufSwge1xuICBiYXNlOiAndHonLFxuICBsZXR0ZXJzOiBcIlxcdUE3MjlcIlxufSwge1xuICBiYXNlOiAndScsXG4gIGxldHRlcnM6IFwidVxcdTI0RTRcXHVGRjU1XFx4RjlcXHhGQVxceEZCXFx1MDE2OVxcdTFFNzlcXHUwMTZCXFx1MUU3QlxcdTAxNkRcXHhGQ1xcdTAxRENcXHUwMUQ4XFx1MDFENlxcdTAxREFcXHUxRUU3XFx1MDE2RlxcdTAxNzFcXHUwMUQ0XFx1MDIxNVxcdTAyMTdcXHUwMUIwXFx1MUVFQlxcdTFFRTlcXHUxRUVGXFx1MUVFRFxcdTFFRjFcXHUxRUU1XFx1MUU3M1xcdTAxNzNcXHUxRTc3XFx1MUU3NVxcdTAyODlcIlxufSwge1xuICBiYXNlOiAndicsXG4gIGxldHRlcnM6IFwidlxcdTI0RTVcXHVGRjU2XFx1MUU3RFxcdTFFN0ZcXHUwMjhCXFx1QTc1RlxcdTAyOENcIlxufSwge1xuICBiYXNlOiAndnknLFxuICBsZXR0ZXJzOiBcIlxcdUE3NjFcIlxufSwge1xuICBiYXNlOiAndycsXG4gIGxldHRlcnM6IFwid1xcdTI0RTZcXHVGRjU3XFx1MUU4MVxcdTFFODNcXHUwMTc1XFx1MUU4N1xcdTFFODVcXHUxRTk4XFx1MUU4OVxcdTJDNzNcIlxufSwge1xuICBiYXNlOiAneCcsXG4gIGxldHRlcnM6IFwieFxcdTI0RTdcXHVGRjU4XFx1MUU4QlxcdTFFOERcIlxufSwge1xuICBiYXNlOiAneScsXG4gIGxldHRlcnM6IFwieVxcdTI0RThcXHVGRjU5XFx1MUVGM1xceEZEXFx1MDE3N1xcdTFFRjlcXHUwMjMzXFx1MUU4RlxceEZGXFx1MUVGN1xcdTFFOTlcXHUxRUY1XFx1MDFCNFxcdTAyNEZcXHUxRUZGXCJcbn0sIHtcbiAgYmFzZTogJ3onLFxuICBsZXR0ZXJzOiBcInpcXHUyNEU5XFx1RkY1QVxcdTAxN0FcXHUxRTkxXFx1MDE3Q1xcdTAxN0VcXHUxRTkzXFx1MUU5NVxcdTAxQjZcXHUwMjI1XFx1MDI0MFxcdTJDNkNcXHVBNzYzXCJcbn1dO1xudmFyIGFueURpYWNyaXRpYyA9IG5ldyBSZWdFeHAoJ1snICsgZGlhY3JpdGljcy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgcmV0dXJuIGQubGV0dGVycztcbn0pLmpvaW4oJycpICsgJ10nLCAnZycpO1xudmFyIGRpYWNyaXRpY1RvQmFzZSA9IHt9O1xuZm9yICh2YXIgaSA9IDA7IGkgPCBkaWFjcml0aWNzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBkaWFjcml0aWMgPSBkaWFjcml0aWNzW2ldO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGRpYWNyaXRpYy5sZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgZGlhY3JpdGljVG9CYXNlW2RpYWNyaXRpYy5sZXR0ZXJzW2pdXSA9IGRpYWNyaXRpYy5iYXNlO1xuICB9XG59XG52YXIgc3RyaXBEaWFjcml0aWNzID0gZnVuY3Rpb24gc3RyaXBEaWFjcml0aWNzKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoYW55RGlhY3JpdGljLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZGlhY3JpdGljVG9CYXNlW21hdGNoXTtcbiAgfSk7XG59O1xuXG52YXIgbWVtb2l6ZWRTdHJpcERpYWNyaXRpY3NGb3JJbnB1dCA9IG1lbW9pemVPbmUoc3RyaXBEaWFjcml0aWNzKTtcbnZhciB0cmltU3RyaW5nID0gZnVuY3Rpb24gdHJpbVN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59O1xudmFyIGRlZmF1bHRTdHJpbmdpZnkgPSBmdW5jdGlvbiBkZWZhdWx0U3RyaW5naWZ5KG9wdGlvbikge1xuICByZXR1cm4gXCJcIi5jb25jYXQob3B0aW9uLmxhYmVsLCBcIiBcIikuY29uY2F0KG9wdGlvbi52YWx1ZSk7XG59O1xudmFyIGNyZWF0ZUZpbHRlciA9IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcihjb25maWcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvcHRpb24sIHJhd0lucHV0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgaWYgKG9wdGlvbi5kYXRhLl9faXNOZXdfXykgcmV0dXJuIHRydWU7XG4gICAgdmFyIF9pZ25vcmVDYXNlJGlnbm9yZUFjYyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBpZ25vcmVDYXNlOiB0cnVlLFxuICAgICAgICBpZ25vcmVBY2NlbnRzOiB0cnVlLFxuICAgICAgICBzdHJpbmdpZnk6IGRlZmF1bHRTdHJpbmdpZnksXG4gICAgICAgIHRyaW06IHRydWUsXG4gICAgICAgIG1hdGNoRnJvbTogJ2FueSdcbiAgICAgIH0sIGNvbmZpZyksXG4gICAgICBpZ25vcmVDYXNlID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLmlnbm9yZUNhc2UsXG4gICAgICBpZ25vcmVBY2NlbnRzID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLmlnbm9yZUFjY2VudHMsXG4gICAgICBzdHJpbmdpZnkgPSBfaWdub3JlQ2FzZSRpZ25vcmVBY2Muc3RyaW5naWZ5LFxuICAgICAgdHJpbSA9IF9pZ25vcmVDYXNlJGlnbm9yZUFjYy50cmltLFxuICAgICAgbWF0Y2hGcm9tID0gX2lnbm9yZUNhc2UkaWdub3JlQWNjLm1hdGNoRnJvbTtcbiAgICB2YXIgaW5wdXQgPSB0cmltID8gdHJpbVN0cmluZyhyYXdJbnB1dCkgOiByYXdJbnB1dDtcbiAgICB2YXIgY2FuZGlkYXRlID0gdHJpbSA/IHRyaW1TdHJpbmcoc3RyaW5naWZ5KG9wdGlvbikpIDogc3RyaW5naWZ5KG9wdGlvbik7XG4gICAgaWYgKGlnbm9yZUNhc2UpIHtcbiAgICAgIGlucHV0ID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoaWdub3JlQWNjZW50cykge1xuICAgICAgaW5wdXQgPSBtZW1vaXplZFN0cmlwRGlhY3JpdGljc0ZvcklucHV0KGlucHV0KTtcbiAgICAgIGNhbmRpZGF0ZSA9IHN0cmlwRGlhY3JpdGljcyhjYW5kaWRhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hGcm9tID09PSAnc3RhcnQnID8gY2FuZGlkYXRlLnN1YnN0cigwLCBpbnB1dC5sZW5ndGgpID09PSBpbnB1dCA6IGNhbmRpZGF0ZS5pbmRleE9mKGlucHV0KSA+IC0xO1xuICB9O1xufTtcblxudmFyIF9leGNsdWRlZCA9IFtcImlubmVyUmVmXCJdO1xuZnVuY3Rpb24gRHVtbXlJbnB1dChfcmVmKSB7XG4gIHZhciBpbm5lclJlZiA9IF9yZWYuaW5uZXJSZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgdmFyIGZpbHRlcmVkUHJvcHMgPSByZW1vdmVQcm9wcyhwcm9wcywgJ29uRXhpdGVkJywgJ2luJywgJ2VudGVyJywgJ2V4aXQnLCAnYXBwZWFyJyk7XG4gIHJldHVybiBqc3goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBpbm5lclJlZlxuICB9LCBmaWx0ZXJlZFByb3BzLCB7XG4gICAgY3NzOiAvKiNfX1BVUkVfXyovY3NzKHtcbiAgICAgIGxhYmVsOiAnZHVtbXlJbnB1dCcsXG4gICAgICAvLyBnZXQgcmlkIG9mIGFueSBkZWZhdWx0IHN0eWxlc1xuICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgIGJvcmRlcjogMCxcbiAgICAgIC8vIGltcG9ydGFudCEgdGhpcyBoaWRlcyB0aGUgZmxhc2hpbmcgY3Vyc29yXG4gICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMycsXG4gICAgICBvdXRsaW5lOiAwLFxuICAgICAgcGFkZGluZzogMCxcbiAgICAgIC8vIGltcG9ydGFudCEgd2l0aG91dCBgd2lkdGhgIGJyb3dzZXJzIHdvbid0IGFsbG93IGZvY3VzXG4gICAgICB3aWR0aDogMSxcbiAgICAgIC8vIHJlbW92ZSBjdXJzb3Igb24gZGVza3RvcFxuICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIG1vYmlsZSB3aGlsc3QgbWFpbnRhaW5pbmcgXCJzY3JvbGwgaW50byB2aWV3XCIgYmVoYXZpb3VyXG4gICAgICBsZWZ0OiAtMTAwLFxuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKSdcbiAgICB9LCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBcIlwiIDogXCI7bGFiZWw6RHVtbXlJbnB1dDtcIiwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWtSMWJXMTVTVzV3ZFhRdWRITjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRWGxDVFNJc0ltWnBiR1VpT2lKRWRXMXRlVWx1Y0hWMExuUnplQ0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtpQkFhbk40SUdwemVDQXFMMXh1YVcxd2IzSjBJSHNnU2xOWUxDQlNaV1lnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdleUJxYzNnZ2ZTQm1jbTl0SUNkQVpXMXZkR2x2Ymk5eVpXRmpkQ2M3WEc1cGJYQnZjblFnZXlCeVpXMXZkbVZRY205d2N5QjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNGdSSFZ0YlhsSmJuQjFkQ2g3WEc0Z0lHbHVibVZ5VW1WbUxGeHVJQ0F1TGk1d2NtOXdjMXh1ZlRvZ1NsTllMa2x1ZEhKcGJuTnBZMFZzWlcxbGJuUnpXeWRwYm5CMWRDZGRJQ1lnZTF4dUlDQnlaV0ZrYjI1c2VTQnBibTVsY2xKbFpqb2dVbVZtUEVoVVRVeEpibkIxZEVWc1pXMWxiblErTzF4dWZTa2dlMXh1SUNBdkx5QlNaVzF2ZG1VZ1lXNXBiV0YwYVc5dUlIQnliM0J6SUc1dmRDQnRaV0Z1ZENCbWIzSWdTRlJOVENCbGJHVnRaVzUwYzF4dUlDQmpiMjV6ZENCbWFXeDBaWEpsWkZCeWIzQnpJRDBnY21WdGIzWmxVSEp2Y0hNb1hHNGdJQ0FnY0hKdmNITXNYRzRnSUNBZ0oyOXVSWGhwZEdWa0p5eGNiaUFnSUNBbmFXNG5MRnh1SUNBZ0lDZGxiblJsY2ljc1hHNGdJQ0FnSjJWNGFYUW5MRnh1SUNBZ0lDZGhjSEJsWVhJblhHNGdJQ2s3WEc1Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNBOGFXNXdkWFJjYmlBZ0lDQWdJSEpsWmoxN2FXNXVaWEpTWldaOVhHNGdJQ0FnSUNCN0xpNHVabWxzZEdWeVpXUlFjbTl3YzMxY2JpQWdJQ0FnSUdOemN6MTdlMXh1SUNBZ0lDQWdJQ0JzWVdKbGJEb2dKMlIxYlcxNVNXNXdkWFFuTEZ4dUlDQWdJQ0FnSUNBdkx5Qm5aWFFnY21sa0lHOW1JR0Z1ZVNCa1pXWmhkV3gwSUhOMGVXeGxjMXh1SUNBZ0lDQWdJQ0JpWVdOclozSnZkVzVrT2lBd0xGeHVJQ0FnSUNBZ0lDQmliM0prWlhJNklEQXNYRzRnSUNBZ0lDQWdJQzh2SUdsdGNHOXlkR0Z1ZENFZ2RHaHBjeUJvYVdSbGN5QjBhR1VnWm14aGMyaHBibWNnWTNWeWMyOXlYRzRnSUNBZ0lDQWdJR05oY21WMFEyOXNiM0k2SUNkMGNtRnVjM0JoY21WdWRDY3NYRzRnSUNBZ0lDQWdJR1p2Ym5SVGFYcGxPaUFuYVc1b1pYSnBkQ2NzWEc0Z0lDQWdJQ0FnSUdkeWFXUkJjbVZoT2lBbk1TQXZJREVnTHlBeUlDOGdNeWNzWEc0Z0lDQWdJQ0FnSUc5MWRHeHBibVU2SURBc1hHNGdJQ0FnSUNBZ0lIQmhaR1JwYm1jNklEQXNYRzRnSUNBZ0lDQWdJQzh2SUdsdGNHOXlkR0Z1ZENFZ2QybDBhRzkxZENCZ2QybGtkR2hnSUdKeWIzZHpaWEp6SUhkdmJpZDBJR0ZzYkc5M0lHWnZZM1Z6WEc0Z0lDQWdJQ0FnSUhkcFpIUm9PaUF4TEZ4dVhHNGdJQ0FnSUNBZ0lDOHZJSEpsYlc5MlpTQmpkWEp6YjNJZ2IyNGdaR1Z6YTNSdmNGeHVJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ0ozUnlZVzV6Y0dGeVpXNTBKeXhjYmx4dUlDQWdJQ0FnSUNBdkx5QnlaVzF2ZG1VZ1kzVnljMjl5SUc5dUlHMXZZbWxzWlNCM2FHbHNjM1FnYldGcGJuUmhhVzVwYm1jZ1hDSnpZM0p2Ykd3Z2FXNTBieUIyYVdWM1hDSWdZbVZvWVhacGIzVnlYRzRnSUNBZ0lDQWdJR3hsWm5RNklDMHhNREFzWEc0Z0lDQWdJQ0FnSUc5d1lXTnBkSGs2SURBc1hHNGdJQ0FnSUNBZ0lIQnZjMmwwYVc5dU9pQW5jbVZzWVhScGRtVW5MRnh1SUNBZ0lDQWdJQ0IwY21GdWMyWnZjbTA2SUNkelkyRnNaU2d1TURFcEp5eGNiaUFnSUNBZ0lIMTlYRzRnSUNBZ0x6NWNiaUFnS1R0Y2JuMWNiaUpkZlE9PSAqL1wiKVxuICB9KSk7XG59XG5cbnZhciBjYW5jZWxTY3JvbGwgPSBmdW5jdGlvbiBjYW5jZWxTY3JvbGwoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcbmZ1bmN0aW9uIHVzZVNjcm9sbENhcHR1cmUoX3JlZikge1xuICB2YXIgaXNFbmFibGVkID0gX3JlZi5pc0VuYWJsZWQsXG4gICAgb25Cb3R0b21BcnJpdmUgPSBfcmVmLm9uQm90dG9tQXJyaXZlLFxuICAgIG9uQm90dG9tTGVhdmUgPSBfcmVmLm9uQm90dG9tTGVhdmUsXG4gICAgb25Ub3BBcnJpdmUgPSBfcmVmLm9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmUgPSBfcmVmLm9uVG9wTGVhdmU7XG4gIHZhciBpc0JvdHRvbSA9IHVzZVJlZihmYWxzZSk7XG4gIHZhciBpc1RvcCA9IHVzZVJlZihmYWxzZSk7XG4gIHZhciB0b3VjaFN0YXJ0ID0gdXNlUmVmKDApO1xuICB2YXIgc2Nyb2xsVGFyZ2V0ID0gdXNlUmVmKG51bGwpO1xuICB2YXIgaGFuZGxlRXZlbnREZWx0YSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCwgZGVsdGEpIHtcbiAgICBpZiAoc2Nyb2xsVGFyZ2V0LmN1cnJlbnQgPT09IG51bGwpIHJldHVybjtcbiAgICB2YXIgX3Njcm9sbFRhcmdldCRjdXJyZW50ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQsXG4gICAgICBzY3JvbGxUb3AgPSBfc2Nyb2xsVGFyZ2V0JGN1cnJlbnQuc2Nyb2xsVG9wLFxuICAgICAgc2Nyb2xsSGVpZ2h0ID0gX3Njcm9sbFRhcmdldCRjdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgIGNsaWVudEhlaWdodCA9IF9zY3JvbGxUYXJnZXQkY3VycmVudC5jbGllbnRIZWlnaHQ7XG4gICAgdmFyIHRhcmdldCA9IHNjcm9sbFRhcmdldC5jdXJyZW50O1xuICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbCA9IHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCAtIHNjcm9sbFRvcDtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gZmFsc2U7XG5cbiAgICAvLyByZXNldCBib3R0b20vdG9wIGZsYWdzXG4gICAgaWYgKGF2YWlsYWJsZVNjcm9sbCA+IGRlbHRhICYmIGlzQm90dG9tLmN1cnJlbnQpIHtcbiAgICAgIGlmIChvbkJvdHRvbUxlYXZlKSBvbkJvdHRvbUxlYXZlKGV2ZW50KTtcbiAgICAgIGlzQm90dG9tLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlzRGVsdGFQb3NpdGl2ZSAmJiBpc1RvcC5jdXJyZW50KSB7XG4gICAgICBpZiAob25Ub3BMZWF2ZSkgb25Ub3BMZWF2ZShldmVudCk7XG4gICAgICBpc1RvcC5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gYm90dG9tIGxpbWl0XG4gICAgaWYgKGlzRGVsdGFQb3NpdGl2ZSAmJiBkZWx0YSA+IGF2YWlsYWJsZVNjcm9sbCkge1xuICAgICAgaWYgKG9uQm90dG9tQXJyaXZlICYmICFpc0JvdHRvbS5jdXJyZW50KSB7XG4gICAgICAgIG9uQm90dG9tQXJyaXZlKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHRhcmdldC5zY3JvbGxUb3AgPSBzY3JvbGxIZWlnaHQ7XG4gICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgICAgaXNCb3R0b20uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIC8vIHRvcCBsaW1pdFxuICAgIH0gZWxzZSBpZiAoIWlzRGVsdGFQb3NpdGl2ZSAmJiAtZGVsdGEgPiBzY3JvbGxUb3ApIHtcbiAgICAgIGlmIChvblRvcEFycml2ZSAmJiAhaXNUb3AuY3VycmVudCkge1xuICAgICAgICBvblRvcEFycml2ZShldmVudCk7XG4gICAgICB9XG4gICAgICB0YXJnZXQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgICBpc1RvcC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjYW5jZWwgc2Nyb2xsXG4gICAgaWYgKHNob3VsZENhbmNlbFNjcm9sbCkge1xuICAgICAgY2FuY2VsU2Nyb2xsKGV2ZW50KTtcbiAgICB9XG4gIH0sIFtvbkJvdHRvbUFycml2ZSwgb25Cb3R0b21MZWF2ZSwgb25Ub3BBcnJpdmUsIG9uVG9wTGVhdmVdKTtcbiAgdmFyIG9uV2hlZWwgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBoYW5kbGVFdmVudERlbHRhKGV2ZW50LCBldmVudC5kZWx0YVkpO1xuICB9LCBbaGFuZGxlRXZlbnREZWx0YV0pO1xuICB2YXIgb25Ub3VjaFN0YXJ0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gc2V0IHRvdWNoIHN0YXJ0IHNvIHdlIGNhbiBjYWxjdWxhdGUgdG91Y2htb3ZlIGRlbHRhXG4gICAgdG91Y2hTdGFydC5jdXJyZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgfSwgW10pO1xuICB2YXIgb25Ub3VjaE1vdmUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgZGVsdGFZID0gdG91Y2hTdGFydC5jdXJyZW50IC0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICBoYW5kbGVFdmVudERlbHRhKGV2ZW50LCBkZWx0YVkpO1xuICB9LCBbaGFuZGxlRXZlbnREZWx0YV0pO1xuICB2YXIgc3RhcnRMaXN0ZW5pbmcgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZWwpIHtcbiAgICAvLyBiYWlsIGVhcmx5IGlmIG5vIGVsZW1lbnQgaXMgYXZhaWxhYmxlIHRvIGF0dGFjaCB0b1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICB2YXIgbm90UGFzc2l2ZSA9IHN1cHBvcnRzUGFzc2l2ZUV2ZW50cyA/IHtcbiAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgfSA6IGZhbHNlO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgbm90UGFzc2l2ZSk7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwgbm90UGFzc2l2ZSk7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUsIG5vdFBhc3NpdmUpO1xuICB9LCBbb25Ub3VjaE1vdmUsIG9uVG91Y2hTdGFydCwgb25XaGVlbF0pO1xuICB2YXIgc3RvcExpc3RlbmluZyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbCkge1xuICAgIC8vIGJhaWwgZWFybHkgaWYgbm8gZWxlbWVudCBpcyBhdmFpbGFibGUgdG8gZGV0YWNoIGZyb21cbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsLCBmYWxzZSk7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlLCBmYWxzZSk7XG4gIH0sIFtvblRvdWNoTW92ZSwgb25Ub3VjaFN0YXJ0LCBvbldoZWVsXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybjtcbiAgICB2YXIgZWxlbWVudCA9IHNjcm9sbFRhcmdldC5jdXJyZW50O1xuICAgIHN0YXJ0TGlzdGVuaW5nKGVsZW1lbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzdG9wTGlzdGVuaW5nKGVsZW1lbnQpO1xuICAgIH07XG4gIH0sIFtpc0VuYWJsZWQsIHN0YXJ0TGlzdGVuaW5nLCBzdG9wTGlzdGVuaW5nXSk7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHNjcm9sbFRhcmdldC5jdXJyZW50ID0gZWxlbWVudDtcbiAgfTtcbn1cblxudmFyIFNUWUxFX0tFWVMgPSBbJ2JveFNpemluZycsICdoZWlnaHQnLCAnb3ZlcmZsb3cnLCAncGFkZGluZ1JpZ2h0JywgJ3Bvc2l0aW9uJ107XG52YXIgTE9DS19TVFlMRVMgPSB7XG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBhY2NvdW50IGZvciBwb3NzaWJsZSBkZWNsYXJhdGlvbiBgd2lkdGg6IDEwMCU7YCBvbiBib2R5XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGhlaWdodDogJzEwMCUnXG59O1xuZnVuY3Rpb24gcHJldmVudFRvdWNoTW92ZShlKSB7XG4gIGlmIChlLmNhbmNlbGFibGUpIGUucHJldmVudERlZmF1bHQoKTtcbn1cbmZ1bmN0aW9uIGFsbG93VG91Y2hNb3ZlKGUpIHtcbiAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbmZ1bmN0aW9uIHByZXZlbnRJbmVydGlhU2Nyb2xsKCkge1xuICB2YXIgdG9wID0gdGhpcy5zY3JvbGxUb3A7XG4gIHZhciB0b3RhbFNjcm9sbCA9IHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICB2YXIgY3VycmVudFNjcm9sbCA9IHRvcCArIHRoaXMub2Zmc2V0SGVpZ2h0O1xuICBpZiAodG9wID09PSAwKSB7XG4gICAgdGhpcy5zY3JvbGxUb3AgPSAxO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRTY3JvbGwgPT09IHRvdGFsU2Nyb2xsKSB7XG4gICAgdGhpcy5zY3JvbGxUb3AgPSB0b3AgLSAxO1xuICB9XG59XG5cbi8vIGBvbnRvdWNoc3RhcnRgIGNoZWNrIHdvcmtzIG9uIG1vc3QgYnJvd3NlcnNcbi8vIGBtYXhUb3VjaFBvaW50c2Agd29ya3Mgb24gSUUxMC8xMSBhbmQgU3VyZmFjZVxuZnVuY3Rpb24gaXNUb3VjaERldmljZSgpIHtcbiAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM7XG59XG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbnZhciBhY3RpdmVTY3JvbGxMb2NrcyA9IDA7XG52YXIgbGlzdGVuZXJPcHRpb25zID0ge1xuICBjYXB0dXJlOiBmYWxzZSxcbiAgcGFzc2l2ZTogZmFsc2Vcbn07XG5mdW5jdGlvbiB1c2VTY3JvbGxMb2NrKF9yZWYpIHtcbiAgdmFyIGlzRW5hYmxlZCA9IF9yZWYuaXNFbmFibGVkLFxuICAgIF9yZWYkYWNjb3VudEZvclNjcm9sbCA9IF9yZWYuYWNjb3VudEZvclNjcm9sbGJhcnMsXG4gICAgYWNjb3VudEZvclNjcm9sbGJhcnMgPSBfcmVmJGFjY291bnRGb3JTY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGFjY291bnRGb3JTY3JvbGw7XG4gIHZhciBvcmlnaW5hbFN0eWxlcyA9IHVzZVJlZih7fSk7XG4gIHZhciBzY3JvbGxUYXJnZXQgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBhZGRTY3JvbGxMb2NrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHRvdWNoU2Nyb2xsVGFyZ2V0KSB7XG4gICAgaWYgKCFjYW5Vc2VET00pIHJldHVybjtcbiAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgdGFyZ2V0U3R5bGUgPSB0YXJnZXQgJiYgdGFyZ2V0LnN0eWxlO1xuICAgIGlmIChhY2NvdW50Rm9yU2Nyb2xsYmFycykge1xuICAgICAgLy8gc3RvcmUgYW55IHN0eWxlcyBhbHJlYWR5IGFwcGxpZWQgdG8gdGhlIGJvZHlcbiAgICAgIFNUWUxFX0tFWVMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSB0YXJnZXRTdHlsZSAmJiB0YXJnZXRTdHlsZVtrZXldO1xuICAgICAgICBvcmlnaW5hbFN0eWxlcy5jdXJyZW50W2tleV0gPSB2YWw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0aGUgbG9jayBzdHlsZXMgYW5kIHBhZGRpbmcgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgc2Nyb2xsIGxvY2tcbiAgICBpZiAoYWNjb3VudEZvclNjcm9sbGJhcnMgJiYgYWN0aXZlU2Nyb2xsTG9ja3MgPCAxKSB7XG4gICAgICB2YXIgY3VycmVudFBhZGRpbmcgPSBwYXJzZUludChvcmlnaW5hbFN0eWxlcy5jdXJyZW50LnBhZGRpbmdSaWdodCwgMTApIHx8IDA7XG4gICAgICB2YXIgY2xpZW50V2lkdGggPSBkb2N1bWVudC5ib2R5ID8gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA6IDA7XG4gICAgICB2YXIgYWRqdXN0ZWRQYWRkaW5nID0gd2luZG93LmlubmVyV2lkdGggLSBjbGllbnRXaWR0aCArIGN1cnJlbnRQYWRkaW5nIHx8IDA7XG4gICAgICBPYmplY3Qua2V5cyhMT0NLX1NUWUxFUykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBMT0NLX1NUWUxFU1trZXldO1xuICAgICAgICBpZiAodGFyZ2V0U3R5bGUpIHtcbiAgICAgICAgICB0YXJnZXRTdHlsZVtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0YXJnZXRTdHlsZSkge1xuICAgICAgICB0YXJnZXRTdHlsZS5wYWRkaW5nUmlnaHQgPSBcIlwiLmNvbmNhdChhZGp1c3RlZFBhZGRpbmcsIFwicHhcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWNjb3VudCBmb3IgdG91Y2ggZGV2aWNlc1xuICAgIGlmICh0YXJnZXQgJiYgaXNUb3VjaERldmljZSgpKSB7XG4gICAgICAvLyBNb2JpbGUgU2FmYXJpIGlnbm9yZXMgeyBvdmVyZmxvdzogaGlkZGVuIH0gZGVjbGFyYXRpb24gb24gdGhlIGJvZHkuXG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgcHJldmVudFRvdWNoTW92ZSwgbGlzdGVuZXJPcHRpb25zKTtcblxuICAgICAgLy8gQWxsb3cgc2Nyb2xsIG9uIHByb3ZpZGVkIHRhcmdldFxuICAgICAgaWYgKHRvdWNoU2Nyb2xsVGFyZ2V0KSB7XG4gICAgICAgIHRvdWNoU2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBwcmV2ZW50SW5lcnRpYVNjcm9sbCwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgYWxsb3dUb3VjaE1vdmUsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaW5jcmVtZW50IGFjdGl2ZSBzY3JvbGwgbG9ja3NcbiAgICBhY3RpdmVTY3JvbGxMb2NrcyArPSAxO1xuICB9LCBbYWNjb3VudEZvclNjcm9sbGJhcnNdKTtcbiAgdmFyIHJlbW92ZVNjcm9sbExvY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAodG91Y2hTY3JvbGxUYXJnZXQpIHtcbiAgICBpZiAoIWNhblVzZURPTSkgcmV0dXJuO1xuICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciB0YXJnZXRTdHlsZSA9IHRhcmdldCAmJiB0YXJnZXQuc3R5bGU7XG5cbiAgICAvLyBzYWZlbHkgZGVjcmVtZW50IGFjdGl2ZSBzY3JvbGwgbG9ja3NcbiAgICBhY3RpdmVTY3JvbGxMb2NrcyA9IE1hdGgubWF4KGFjdGl2ZVNjcm9sbExvY2tzIC0gMSwgMCk7XG5cbiAgICAvLyByZWFwcGx5IG9yaWdpbmFsIGJvZHkgc3R5bGVzLCBpZiBhbnlcbiAgICBpZiAoYWNjb3VudEZvclNjcm9sbGJhcnMgJiYgYWN0aXZlU2Nyb2xsTG9ja3MgPCAxKSB7XG4gICAgICBTVFlMRV9LRVlTLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsID0gb3JpZ2luYWxTdHlsZXMuY3VycmVudFtrZXldO1xuICAgICAgICBpZiAodGFyZ2V0U3R5bGUpIHtcbiAgICAgICAgICB0YXJnZXRTdHlsZVtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdG91Y2ggbGlzdGVuZXJzXG4gICAgaWYgKHRhcmdldCAmJiBpc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50VG91Y2hNb3ZlLCBsaXN0ZW5lck9wdGlvbnMpO1xuICAgICAgaWYgKHRvdWNoU2Nyb2xsVGFyZ2V0KSB7XG4gICAgICAgIHRvdWNoU2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBwcmV2ZW50SW5lcnRpYVNjcm9sbCwgbGlzdGVuZXJPcHRpb25zKTtcbiAgICAgICAgdG91Y2hTY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgYWxsb3dUb3VjaE1vdmUsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbYWNjb3VudEZvclNjcm9sbGJhcnNdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzRW5hYmxlZCkgcmV0dXJuO1xuICAgIHZhciBlbGVtZW50ID0gc2Nyb2xsVGFyZ2V0LmN1cnJlbnQ7XG4gICAgYWRkU2Nyb2xsTG9jayhlbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVtb3ZlU2Nyb2xsTG9jayhlbGVtZW50KTtcbiAgICB9O1xuICB9LCBbaXNFbmFibGVkLCBhZGRTY3JvbGxMb2NrLCByZW1vdmVTY3JvbGxMb2NrXSk7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHNjcm9sbFRhcmdldC5jdXJyZW50ID0gZWxlbWVudDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18kMSgpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG52YXIgYmx1clNlbGVjdElucHV0ID0gZnVuY3Rpb24gYmx1clNlbGVjdElucHV0KGV2ZW50KSB7XG4gIHZhciBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xufTtcbnZhciBfcmVmMiQxID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFrZmRiMGVcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmZpeGVkO2xlZnQ6MDtib3R0b206MDtyaWdodDowO3RvcDowXCJcbn0gOiB7XG4gIG5hbWU6IFwiYnA4Y3VhLVNjcm9sbE1hbmFnZXJcIixcbiAgc3R5bGVzOiBcInBvc2l0aW9uOmZpeGVkO2xlZnQ6MDtib3R0b206MDtyaWdodDowO3RvcDowO2xhYmVsOlNjcm9sbE1hbmFnZXI7XCIsXG4gIG1hcDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbE5qY205c2JFMWhibUZuWlhJdWRITjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVzlFVlNJc0ltWnBiR1VpT2lKVFkzSnZiR3hOWVc1aFoyVnlMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ2FuTjRJSDBnWm5KdmJTQW5RR1Z0YjNScGIyNHZjbVZoWTNRbk8xeHVhVzF3YjNKMElIc2dSbkpoWjIxbGJuUXNJRkpsWVdOMFJXeGxiV1Z1ZEN3Z1VtVm1RMkZzYkdKaFkyc3NJRTF2ZFhObFJYWmxiblFnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdkWE5sVTJOeWIyeHNRMkZ3ZEhWeVpTQm1jbTl0SUNjdUwzVnpaVk5qY205c2JFTmhjSFIxY21Vbk8xeHVhVzF3YjNKMElIVnpaVk5qY205c2JFeHZZMnNnWm5KdmJTQW5MaTkxYzJWVFkzSnZiR3hNYjJOckp6dGNibHh1YVc1MFpYSm1ZV05sSUZCeWIzQnpJSHRjYmlBZ2NtVmhaRzl1YkhrZ1kyaHBiR1J5Wlc0NklDaHlaV1k2SUZKbFprTmhiR3hpWVdOclBFaFVUVXhGYkdWdFpXNTBQaWtnUFQ0Z1VtVmhZM1JGYkdWdFpXNTBPMXh1SUNCeVpXRmtiMjVzZVNCc2IyTnJSVzVoWW14bFpEb2dZbTl2YkdWaGJqdGNiaUFnY21WaFpHOXViSGtnWTJGd2RIVnlaVVZ1WVdKc1pXUTZJR0p2YjJ4bFlXNDdYRzRnSUhKbFlXUnZibXg1SUc5dVFtOTBkRzl0UVhKeWFYWmxQem9nS0dWMlpXNTBPaUJYYUdWbGJFVjJaVzUwSUh3Z1ZHOTFZMmhGZG1WdWRDa2dQVDRnZG05cFpEdGNiaUFnY21WaFpHOXViSGtnYjI1Q2IzUjBiMjFNWldGMlpUODZJQ2hsZG1WdWREb2dWMmhsWld4RmRtVnVkQ0I4SUZSdmRXTm9SWFpsYm5RcElEMCtJSFp2YVdRN1hHNGdJSEpsWVdSdmJteDVJRzl1Vkc5d1FYSnlhWFpsUHpvZ0tHVjJaVzUwT2lCWGFHVmxiRVYyWlc1MElId2dWRzkxWTJoRmRtVnVkQ2tnUFQ0Z2RtOXBaRHRjYmlBZ2NtVmhaRzl1YkhrZ2IyNVViM0JNWldGMlpUODZJQ2hsZG1WdWREb2dWMmhsWld4RmRtVnVkQ0I4SUZSdmRXTm9SWFpsYm5RcElEMCtJSFp2YVdRN1hHNTlYRzVjYm1OdmJuTjBJR0pzZFhKVFpXeGxZM1JKYm5CMWRDQTlJQ2hsZG1WdWREb2dUVzkxYzJWRmRtVnVkRHhJVkUxTVJHbDJSV3hsYldWdWRENHBJRDArSUh0Y2JpQWdZMjl1YzNRZ1pXeGxiV1Z1ZENBOUlHVjJaVzUwTG5SaGNtZGxkQ0JoY3lCSVZFMU1SR2wyUld4bGJXVnVkRHRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0JsYkdWdFpXNTBMbTkzYm1WeVJHOWpkVzFsYm5RdVlXTjBhWFpsUld4bGJXVnVkQ0FtSmx4dUlDQWdJQ2hsYkdWdFpXNTBMbTkzYm1WeVJHOWpkVzFsYm5RdVlXTjBhWFpsUld4bGJXVnVkQ0JoY3lCSVZFMU1SV3hsYldWdWRDa3VZbXgxY2lncFhHNGdJQ2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpQlRZM0p2Ykd4TllXNWhaMlZ5S0h0Y2JpQWdZMmhwYkdSeVpXNHNYRzRnSUd4dlkydEZibUZpYkdWa0xGeHVJQ0JqWVhCMGRYSmxSVzVoWW14bFpDQTlJSFJ5ZFdVc1hHNGdJRzl1UW05MGRHOXRRWEp5YVhabExGeHVJQ0J2YmtKdmRIUnZiVXhsWVhabExGeHVJQ0J2YmxSdmNFRnljbWwyWlN4Y2JpQWdiMjVVYjNCTVpXRjJaU3hjYm4wNklGQnliM0J6S1NCN1hHNGdJR052Ym5OMElITmxkRk5qY205c2JFTmhjSFIxY21WVVlYSm5aWFFnUFNCMWMyVlRZM0p2Ykd4RFlYQjBkWEpsS0h0Y2JpQWdJQ0JwYzBWdVlXSnNaV1E2SUdOaGNIUjFjbVZGYm1GaWJHVmtMRnh1SUNBZ0lHOXVRbTkwZEc5dFFYSnlhWFpsTEZ4dUlDQWdJRzl1UW05MGRHOXRUR1ZoZG1Vc1hHNGdJQ0FnYjI1VWIzQkJjbkpwZG1Vc1hHNGdJQ0FnYjI1VWIzQk1aV0YyWlN4Y2JpQWdmU2s3WEc0Z0lHTnZibk4wSUhObGRGTmpjbTlzYkV4dlkydFVZWEpuWlhRZ1BTQjFjMlZUWTNKdmJHeE1iMk5yS0hzZ2FYTkZibUZpYkdWa09pQnNiMk5yUlc1aFlteGxaQ0I5S1R0Y2JseHVJQ0JqYjI1emRDQjBZWEpuWlhSU1pXWTZJRkpsWmtOaGJHeGlZV05yUEVoVVRVeEZiR1Z0Wlc1MFBpQTlJQ2hsYkdWdFpXNTBLU0E5UGlCN1hHNGdJQ0FnYzJWMFUyTnliMnhzUTJGd2RIVnlaVlJoY21kbGRDaGxiR1Z0Wlc1MEtUdGNiaUFnSUNCelpYUlRZM0p2Ykd4TWIyTnJWR0Z5WjJWMEtHVnNaVzFsYm5RcE8xeHVJQ0I5TzF4dVhHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BFWnlZV2R0Wlc1MFBseHVJQ0FnSUNBZ2UyeHZZMnRGYm1GaWJHVmtJQ1ltSUNoY2JpQWdJQ0FnSUNBZ1BHUnBkbHh1SUNBZ0lDQWdJQ0FnSUc5dVEyeHBZMnM5ZTJKc2RYSlRaV3hsWTNSSmJuQjFkSDFjYmlBZ0lDQWdJQ0FnSUNCamMzTTllM3NnY0c5emFYUnBiMjQ2SUNkbWFYaGxaQ2NzSUd4bFpuUTZJREFzSUdKdmRIUnZiVG9nTUN3Z2NtbG5hSFE2SURBc0lIUnZjRG9nTUNCOWZWeHVJQ0FnSUNBZ0lDQXZQbHh1SUNBZ0lDQWdLWDFjYmlBZ0lDQWdJSHRqYUdsc1pISmxiaWgwWVhKblpYUlNaV1lwZlZ4dUlDQWdJRHd2Um5KaFoyMWxiblErWEc0Z0lDazdYRzU5WEc0aVhYMD0gKi9cIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fJDFcbn07XG5mdW5jdGlvbiBTY3JvbGxNYW5hZ2VyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBsb2NrRW5hYmxlZCA9IF9yZWYubG9ja0VuYWJsZWQsXG4gICAgX3JlZiRjYXB0dXJlRW5hYmxlZCA9IF9yZWYuY2FwdHVyZUVuYWJsZWQsXG4gICAgY2FwdHVyZUVuYWJsZWQgPSBfcmVmJGNhcHR1cmVFbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRjYXB0dXJlRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZSA9IF9yZWYub25Cb3R0b21BcnJpdmUsXG4gICAgb25Cb3R0b21MZWF2ZSA9IF9yZWYub25Cb3R0b21MZWF2ZSxcbiAgICBvblRvcEFycml2ZSA9IF9yZWYub25Ub3BBcnJpdmUsXG4gICAgb25Ub3BMZWF2ZSA9IF9yZWYub25Ub3BMZWF2ZTtcbiAgdmFyIHNldFNjcm9sbENhcHR1cmVUYXJnZXQgPSB1c2VTY3JvbGxDYXB0dXJlKHtcbiAgICBpc0VuYWJsZWQ6IGNhcHR1cmVFbmFibGVkLFxuICAgIG9uQm90dG9tQXJyaXZlOiBvbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlOiBvbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlOiBvblRvcEFycml2ZSxcbiAgICBvblRvcExlYXZlOiBvblRvcExlYXZlXG4gIH0pO1xuICB2YXIgc2V0U2Nyb2xsTG9ja1RhcmdldCA9IHVzZVNjcm9sbExvY2soe1xuICAgIGlzRW5hYmxlZDogbG9ja0VuYWJsZWRcbiAgfSk7XG4gIHZhciB0YXJnZXRSZWYgPSBmdW5jdGlvbiB0YXJnZXRSZWYoZWxlbWVudCkge1xuICAgIHNldFNjcm9sbENhcHR1cmVUYXJnZXQoZWxlbWVudCk7XG4gICAgc2V0U2Nyb2xsTG9ja1RhcmdldChlbGVtZW50KTtcbiAgfTtcbiAgcmV0dXJuIGpzeChGcmFnbWVudCwgbnVsbCwgbG9ja0VuYWJsZWQgJiYganN4KFwiZGl2XCIsIHtcbiAgICBvbkNsaWNrOiBibHVyU2VsZWN0SW5wdXQsXG4gICAgY3NzOiBfcmVmMiQxXG4gIH0pLCBjaGlsZHJlbih0YXJnZXRSZWYpKTtcbn1cblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFhMHJvNG4tcmVxdWlyZWRJbnB1dFwiLFxuICBzdHlsZXM6IFwibGFiZWw6cmVxdWlyZWRJbnB1dDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDoxMDAlXCJcbn0gOiB7XG4gIG5hbWU6IFwiNWtreGIyLXJlcXVpcmVkSW5wdXQtUmVxdWlyZWRJbnB1dFwiLFxuICBzdHlsZXM6IFwibGFiZWw6cmVxdWlyZWRJbnB1dDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDoxMDAlO2xhYmVsOlJlcXVpcmVkSW5wdXQ7XCIsXG4gIG1hcDogXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbEpsY1hWcGNtVmtTVzV3ZFhRdWRITjRJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRV05KSWl3aVptbHNaU0k2SWxKbGNYVnBjbVZrU1c1d2RYUXVkSE40SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FJRUJxYzNnZ2FuTjRJQ292WEc1cGJYQnZjblFnZXlCR2IyTjFjMFYyWlc1MFNHRnVaR3hsY2l3Z1JuVnVZM1JwYjI1RGIyMXdiMjVsYm5RZ2ZTQm1jbTl0SUNkeVpXRmpkQ2M3WEc1cGJYQnZjblFnZXlCcWMzZ2dmU0JtY205dElDZEFaVzF2ZEdsdmJpOXlaV0ZqZENjN1hHNWNibU52Ym5OMElGSmxjWFZwY21Wa1NXNXdkWFE2SUVaMWJtTjBhVzl1UTI5dGNHOXVaVzUwUEh0Y2JpQWdjbVZoWkc5dWJIa2dibUZ0WlQ4NklITjBjbWx1Wnp0Y2JpQWdjbVZoWkc5dWJIa2diMjVHYjJOMWN6b2dSbTlqZFhORmRtVnVkRWhoYm1Sc1pYSThTRlJOVEVsdWNIVjBSV3hsYldWdWRENDdYRzU5UGlBOUlDaDdJRzVoYldVc0lHOXVSbTlqZFhNZ2ZTa2dQVDRnS0Z4dUlDQThhVzV3ZFhSY2JpQWdJQ0J5WlhGMWFYSmxaRnh1SUNBZ0lHNWhiV1U5ZTI1aGJXVjlYRzRnSUNBZ2RHRmlTVzVrWlhnOWV5MHhmVnh1SUNBZ0lHRnlhV0V0YUdsa1pHVnVQVndpZEhKMVpWd2lYRzRnSUNBZ2IyNUdiMk4xY3oxN2IyNUdiMk4xYzMxY2JpQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lHeGhZbVZzT2lBbmNtVnhkV2x5WldSSmJuQjFkQ2NzWEc0Z0lDQWdJQ0J2Y0dGamFYUjVPaUF3TEZ4dUlDQWdJQ0FnY0c5cGJuUmxja1YyWlc1MGN6b2dKMjV2Ym1VbkxGeHVJQ0FnSUNBZ2NHOXphWFJwYjI0NklDZGhZbk52YkhWMFpTY3NYRzRnSUNBZ0lDQmliM1IwYjIwNklEQXNYRzRnSUNBZ0lDQnNaV1owT2lBd0xGeHVJQ0FnSUNBZ2NtbG5hSFE2SURBc1hHNGdJQ0FnSUNCM2FXUjBhRG9nSnpFd01DVW5MRnh1SUNBZ0lIMTlYRzRnSUNBZ0x5OGdVSEpsZG1WdWRDQmdVM2RwZEdOb2FXNW5JR1p5YjIwZ2RXNWpiMjUwY205c2JHVmtJSFJ2SUdOdmJuUnliMnhzWldSZ0lHVnljbTl5WEc0Z0lDQWdkbUZzZFdVOVhDSmNJbHh1SUNBZ0lHOXVRMmhoYm1kbFBYc29LU0E5UGlCN2ZYMWNiaUFnTHo1Y2JpazdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJRkpsY1hWcGNtVmtTVzV3ZFhRN1hHNGlYWDA9ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBSZXF1aXJlZElucHV0ID0gZnVuY3Rpb24gUmVxdWlyZWRJbnB1dChfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgIG9uRm9jdXMgPSBfcmVmLm9uRm9jdXM7XG4gIHJldHVybiBqc3goXCJpbnB1dFwiLCB7XG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgbmFtZTogbmFtZSxcbiAgICB0YWJJbmRleDogLTEsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIGNzczogX3JlZjJcbiAgICAvLyBQcmV2ZW50IGBTd2l0Y2hpbmcgZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZGAgZXJyb3JcbiAgICAsXG4gICAgdmFsdWU6IFwiXCIsXG4gICAgb25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKCkge31cbiAgfSk7XG59O1xudmFyIFJlcXVpcmVkSW5wdXQkMSA9IFJlcXVpcmVkSW5wdXQ7XG5cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidXNlci1hZ2VudC1kYXRhLXR5cGVzXCIgLz5cblxuZnVuY3Rpb24gdGVzdFBsYXRmb3JtKHJlKSB7XG4gIHZhciBfd2luZG93JG5hdmlnYXRvciR1c2U7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yICE9IG51bGwgPyByZS50ZXN0KCgoX3dpbmRvdyRuYXZpZ2F0b3IkdXNlID0gd2luZG93Lm5hdmlnYXRvclsndXNlckFnZW50RGF0YSddKSA9PT0gbnVsbCB8fCBfd2luZG93JG5hdmlnYXRvciR1c2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF93aW5kb3ckbmF2aWdhdG9yJHVzZS5wbGF0Zm9ybSkgfHwgd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkgOiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzSVBob25lKCkge1xuICByZXR1cm4gdGVzdFBsYXRmb3JtKC9eaVBob25lL2kpO1xufVxuZnVuY3Rpb24gaXNNYWMoKSB7XG4gIHJldHVybiB0ZXN0UGxhdGZvcm0oL15NYWMvaSk7XG59XG5mdW5jdGlvbiBpc0lQYWQoKSB7XG4gIHJldHVybiB0ZXN0UGxhdGZvcm0oL15pUGFkL2kpIHx8XG4gIC8vIGlQYWRPUyAxMyBsaWVzIGFuZCBzYXlzIGl0J3MgYSBNYWMsIGJ1dCB3ZSBjYW4gZGlzdGluZ3Vpc2ggYnkgZGV0ZWN0aW5nIHRvdWNoIHN1cHBvcnQuXG4gIGlzTWFjKCkgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMTtcbn1cbmZ1bmN0aW9uIGlzSU9TKCkge1xuICByZXR1cm4gaXNJUGhvbmUoKSB8fCBpc0lQYWQoKTtcbn1cbmZ1bmN0aW9uIGlzQXBwbGVEZXZpY2UoKSB7XG4gIHJldHVybiBpc01hYygpIHx8IGlzSU9TKCk7XG59XG5cbnZhciBmb3JtYXRHcm91cExhYmVsID0gZnVuY3Rpb24gZm9ybWF0R3JvdXBMYWJlbChncm91cCkge1xuICByZXR1cm4gZ3JvdXAubGFiZWw7XG59O1xudmFyIGdldE9wdGlvbkxhYmVsJDEgPSBmdW5jdGlvbiBnZXRPcHRpb25MYWJlbChvcHRpb24pIHtcbiAgcmV0dXJuIG9wdGlvbi5sYWJlbDtcbn07XG52YXIgZ2V0T3B0aW9uVmFsdWUkMSA9IGZ1bmN0aW9uIGdldE9wdGlvblZhbHVlKG9wdGlvbikge1xuICByZXR1cm4gb3B0aW9uLnZhbHVlO1xufTtcbnZhciBpc09wdGlvbkRpc2FibGVkID0gZnVuY3Rpb24gaXNPcHRpb25EaXNhYmxlZChvcHRpb24pIHtcbiAgcmV0dXJuICEhb3B0aW9uLmlzRGlzYWJsZWQ7XG59O1xuXG52YXIgZGVmYXVsdFN0eWxlcyA9IHtcbiAgY2xlYXJJbmRpY2F0b3I6IGNsZWFySW5kaWNhdG9yQ1NTLFxuICBjb250YWluZXI6IGNvbnRhaW5lckNTUyxcbiAgY29udHJvbDogY3NzJDEsXG4gIGRyb3Bkb3duSW5kaWNhdG9yOiBkcm9wZG93bkluZGljYXRvckNTUyxcbiAgZ3JvdXA6IGdyb3VwQ1NTLFxuICBncm91cEhlYWRpbmc6IGdyb3VwSGVhZGluZ0NTUyxcbiAgaW5kaWNhdG9yc0NvbnRhaW5lcjogaW5kaWNhdG9yc0NvbnRhaW5lckNTUyxcbiAgaW5kaWNhdG9yU2VwYXJhdG9yOiBpbmRpY2F0b3JTZXBhcmF0b3JDU1MsXG4gIGlucHV0OiBpbnB1dENTUyxcbiAgbG9hZGluZ0luZGljYXRvcjogbG9hZGluZ0luZGljYXRvckNTUyxcbiAgbG9hZGluZ01lc3NhZ2U6IGxvYWRpbmdNZXNzYWdlQ1NTLFxuICBtZW51OiBtZW51Q1NTLFxuICBtZW51TGlzdDogbWVudUxpc3RDU1MsXG4gIG1lbnVQb3J0YWw6IG1lbnVQb3J0YWxDU1MsXG4gIG11bHRpVmFsdWU6IG11bHRpVmFsdWVDU1MsXG4gIG11bHRpVmFsdWVMYWJlbDogbXVsdGlWYWx1ZUxhYmVsQ1NTLFxuICBtdWx0aVZhbHVlUmVtb3ZlOiBtdWx0aVZhbHVlUmVtb3ZlQ1NTLFxuICBub09wdGlvbnNNZXNzYWdlOiBub09wdGlvbnNNZXNzYWdlQ1NTLFxuICBvcHRpb246IG9wdGlvbkNTUyxcbiAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyQ1NTLFxuICBzaW5nbGVWYWx1ZTogY3NzJDIsXG4gIHZhbHVlQ29udGFpbmVyOiB2YWx1ZUNvbnRhaW5lckNTU1xufTtcbi8vIE1lcmdlIFV0aWxpdHlcbi8vIEFsbG93cyBjb25zdW1lcnMgdG8gZXh0ZW5kIGEgYmFzZSBTZWxlY3Qgd2l0aCBhZGRpdGlvbmFsIHN0eWxlc1xuXG5mdW5jdGlvbiBtZXJnZVN0eWxlcyhzb3VyY2UpIHtcbiAgdmFyIHRhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIC8vIGluaXRpYWxpemUgd2l0aCBzb3VyY2Ugc3R5bGVzXG4gIHZhciBzdHlsZXMgPSBfb2JqZWN0U3ByZWFkKHt9LCBzb3VyY2UpO1xuXG4gIC8vIG1hc3NhZ2UgaW4gdGFyZ2V0IHN0eWxlc1xuICBPYmplY3Qua2V5cyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24gKGtleUFzU3RyaW5nKSB7XG4gICAgdmFyIGtleSA9IGtleUFzU3RyaW5nO1xuICAgIGlmIChzb3VyY2Vba2V5XSkge1xuICAgICAgc3R5bGVzW2tleV0gPSBmdW5jdGlvbiAocnNDc3MsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRba2V5XShzb3VyY2Vba2V5XShyc0NzcywgcHJvcHMpLCBwcm9wcyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXNba2V5XSA9IHRhcmdldFtrZXldO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHlsZXM7XG59XG5cbnZhciBjb2xvcnMgPSB7XG4gIHByaW1hcnk6ICcjMjY4NEZGJyxcbiAgcHJpbWFyeTc1OiAnIzRDOUFGRicsXG4gIHByaW1hcnk1MDogJyNCMkQ0RkYnLFxuICBwcmltYXJ5MjU6ICcjREVFQkZGJyxcbiAgZGFuZ2VyOiAnI0RFMzUwQicsXG4gIGRhbmdlckxpZ2h0OiAnI0ZGQkRBRCcsXG4gIG5ldXRyYWwwOiAnaHNsKDAsIDAlLCAxMDAlKScsXG4gIG5ldXRyYWw1OiAnaHNsKDAsIDAlLCA5NSUpJyxcbiAgbmV1dHJhbDEwOiAnaHNsKDAsIDAlLCA5MCUpJyxcbiAgbmV1dHJhbDIwOiAnaHNsKDAsIDAlLCA4MCUpJyxcbiAgbmV1dHJhbDMwOiAnaHNsKDAsIDAlLCA3MCUpJyxcbiAgbmV1dHJhbDQwOiAnaHNsKDAsIDAlLCA2MCUpJyxcbiAgbmV1dHJhbDUwOiAnaHNsKDAsIDAlLCA1MCUpJyxcbiAgbmV1dHJhbDYwOiAnaHNsKDAsIDAlLCA0MCUpJyxcbiAgbmV1dHJhbDcwOiAnaHNsKDAsIDAlLCAzMCUpJyxcbiAgbmV1dHJhbDgwOiAnaHNsKDAsIDAlLCAyMCUpJyxcbiAgbmV1dHJhbDkwOiAnaHNsKDAsIDAlLCAxMCUpJ1xufTtcbnZhciBib3JkZXJSYWRpdXMgPSA0O1xuLy8gVXNlZCB0byBjYWxjdWxhdGUgY29uc2lzdGVudCBtYXJnaW4vcGFkZGluZyBvbiBlbGVtZW50c1xudmFyIGJhc2VVbml0ID0gNDtcbi8vIFRoZSBtaW5pbXVtIGhlaWdodCBvZiB0aGUgY29udHJvbFxudmFyIGNvbnRyb2xIZWlnaHQgPSAzODtcbi8vIFRoZSBhbW91bnQgb2Ygc3BhY2UgYmV0d2VlbiB0aGUgY29udHJvbCBhbmQgbWVudSAqL1xudmFyIG1lbnVHdXR0ZXIgPSBiYXNlVW5pdCAqIDI7XG52YXIgc3BhY2luZyA9IHtcbiAgYmFzZVVuaXQ6IGJhc2VVbml0LFxuICBjb250cm9sSGVpZ2h0OiBjb250cm9sSGVpZ2h0LFxuICBtZW51R3V0dGVyOiBtZW51R3V0dGVyXG59O1xudmFyIGRlZmF1bHRUaGVtZSA9IHtcbiAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMsXG4gIGNvbG9yczogY29sb3JzLFxuICBzcGFjaW5nOiBzcGFjaW5nXG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICAnYXJpYS1saXZlJzogJ3BvbGl0ZScsXG4gIGJhY2tzcGFjZVJlbW92ZXNWYWx1ZTogdHJ1ZSxcbiAgYmx1cklucHV0T25TZWxlY3Q6IGlzVG91Y2hDYXBhYmxlKCksXG4gIGNhcHR1cmVNZW51U2Nyb2xsOiAhaXNUb3VjaENhcGFibGUoKSxcbiAgY2xhc3NOYW1lczoge30sXG4gIGNsb3NlTWVudU9uU2VsZWN0OiB0cnVlLFxuICBjbG9zZU1lbnVPblNjcm9sbDogZmFsc2UsXG4gIGNvbXBvbmVudHM6IHt9LFxuICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWU6IHRydWUsXG4gIGVzY2FwZUNsZWFyc1ZhbHVlOiBmYWxzZSxcbiAgZmlsdGVyT3B0aW9uOiBjcmVhdGVGaWx0ZXIoKSxcbiAgZm9ybWF0R3JvdXBMYWJlbDogZm9ybWF0R3JvdXBMYWJlbCxcbiAgZ2V0T3B0aW9uTGFiZWw6IGdldE9wdGlvbkxhYmVsJDEsXG4gIGdldE9wdGlvblZhbHVlOiBnZXRPcHRpb25WYWx1ZSQxLFxuICBpc0Rpc2FibGVkOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgaXNNdWx0aTogZmFsc2UsXG4gIGlzUnRsOiBmYWxzZSxcbiAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICBpc09wdGlvbkRpc2FibGVkOiBpc09wdGlvbkRpc2FibGVkLFxuICBsb2FkaW5nTWVzc2FnZTogZnVuY3Rpb24gbG9hZGluZ01lc3NhZ2UoKSB7XG4gICAgcmV0dXJuICdMb2FkaW5nLi4uJztcbiAgfSxcbiAgbWF4TWVudUhlaWdodDogMzAwLFxuICBtaW5NZW51SGVpZ2h0OiAxNDAsXG4gIG1lbnVJc09wZW46IGZhbHNlLFxuICBtZW51UGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbWVudVBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBtZW51U2hvdWxkQmxvY2tTY3JvbGw6IGZhbHNlLFxuICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXc6ICFpc01vYmlsZURldmljZSgpLFxuICBub09wdGlvbnNNZXNzYWdlOiBmdW5jdGlvbiBub09wdGlvbnNNZXNzYWdlKCkge1xuICAgIHJldHVybiAnTm8gb3B0aW9ucyc7XG4gIH0sXG4gIG9wZW5NZW51T25Gb2N1czogZmFsc2UsXG4gIG9wZW5NZW51T25DbGljazogdHJ1ZSxcbiAgb3B0aW9uczogW10sXG4gIHBhZ2VTaXplOiA1LFxuICBwbGFjZWhvbGRlcjogJ1NlbGVjdC4uLicsXG4gIHNjcmVlblJlYWRlclN0YXR1czogZnVuY3Rpb24gc2NyZWVuUmVhZGVyU3RhdHVzKF9yZWYpIHtcbiAgICB2YXIgY291bnQgPSBfcmVmLmNvdW50O1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChjb3VudCwgXCIgcmVzdWx0XCIpLmNvbmNhdChjb3VudCAhPT0gMSA/ICdzJyA6ICcnLCBcIiBhdmFpbGFibGVcIik7XG4gIH0sXG4gIHN0eWxlczoge30sXG4gIHRhYkluZGV4OiAwLFxuICB0YWJTZWxlY3RzVmFsdWU6IHRydWUsXG4gIHVuc3R5bGVkOiBmYWxzZVxufTtcbmZ1bmN0aW9uIHRvQ2F0ZWdvcml6ZWRPcHRpb24ocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUsIGluZGV4KSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzT3B0aW9uRGlzYWJsZWQocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUpO1xuICB2YXIgaXNTZWxlY3RlZCA9IF9pc09wdGlvblNlbGVjdGVkKHByb3BzLCBvcHRpb24sIHNlbGVjdFZhbHVlKTtcbiAgdmFyIGxhYmVsID0gZ2V0T3B0aW9uTGFiZWwocHJvcHMsIG9wdGlvbik7XG4gIHZhciB2YWx1ZSA9IGdldE9wdGlvblZhbHVlKHByb3BzLCBvcHRpb24pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdvcHRpb24nLFxuICAgIGRhdGE6IG9wdGlvbixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpbmRleDogaW5kZXhcbiAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSkge1xuICByZXR1cm4gcHJvcHMub3B0aW9ucy5tYXAoZnVuY3Rpb24gKGdyb3VwT3JPcHRpb24sIGdyb3VwT3JPcHRpb25JbmRleCkge1xuICAgIGlmICgnb3B0aW9ucycgaW4gZ3JvdXBPck9wdGlvbikge1xuICAgICAgdmFyIGNhdGVnb3JpemVkT3B0aW9ucyA9IGdyb3VwT3JPcHRpb24ub3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbiwgb3B0aW9uSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRvQ2F0ZWdvcml6ZWRPcHRpb24ocHJvcHMsIG9wdGlvbiwgc2VsZWN0VmFsdWUsIG9wdGlvbkluZGV4KTtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoY2F0ZWdvcml6ZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGlzRm9jdXNhYmxlKHByb3BzLCBjYXRlZ29yaXplZE9wdGlvbik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjYXRlZ29yaXplZE9wdGlvbnMubGVuZ3RoID4gMCA/IHtcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgICAgZGF0YTogZ3JvdXBPck9wdGlvbixcbiAgICAgICAgb3B0aW9uczogY2F0ZWdvcml6ZWRPcHRpb25zLFxuICAgICAgICBpbmRleDogZ3JvdXBPck9wdGlvbkluZGV4XG4gICAgICB9IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgY2F0ZWdvcml6ZWRPcHRpb24gPSB0b0NhdGVnb3JpemVkT3B0aW9uKHByb3BzLCBncm91cE9yT3B0aW9uLCBzZWxlY3RWYWx1ZSwgZ3JvdXBPck9wdGlvbkluZGV4KTtcbiAgICByZXR1cm4gaXNGb2N1c2FibGUocHJvcHMsIGNhdGVnb3JpemVkT3B0aW9uKSA/IGNhdGVnb3JpemVkT3B0aW9uIDogdW5kZWZpbmVkO1xuICB9KS5maWx0ZXIobm90TnVsbGlzaCk7XG59XG5mdW5jdGlvbiBidWlsZEZvY3VzYWJsZU9wdGlvbnNGcm9tQ2F0ZWdvcml6ZWRPcHRpb25zKGNhdGVnb3JpemVkT3B0aW9ucykge1xuICByZXR1cm4gY2F0ZWdvcml6ZWRPcHRpb25zLnJlZHVjZShmdW5jdGlvbiAob3B0aW9uc0FjY3VtdWxhdG9yLCBjYXRlZ29yaXplZE9wdGlvbikge1xuICAgIGlmIChjYXRlZ29yaXplZE9wdGlvbi50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICBvcHRpb25zQWNjdW11bGF0b3IucHVzaC5hcHBseShvcHRpb25zQWNjdW11bGF0b3IsIF90b0NvbnN1bWFibGVBcnJheShjYXRlZ29yaXplZE9wdGlvbi5vcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uZGF0YTtcbiAgICAgIH0pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNBY2N1bXVsYXRvci5wdXNoKGNhdGVnb3JpemVkT3B0aW9uLmRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc0FjY3VtdWxhdG9yO1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBidWlsZEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzKGNhdGVnb3JpemVkT3B0aW9ucywgb3B0aW9uSWQpIHtcbiAgcmV0dXJuIGNhdGVnb3JpemVkT3B0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKG9wdGlvbnNBY2N1bXVsYXRvciwgY2F0ZWdvcml6ZWRPcHRpb24pIHtcbiAgICBpZiAoY2F0ZWdvcml6ZWRPcHRpb24udHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgb3B0aW9uc0FjY3VtdWxhdG9yLnB1c2guYXBwbHkob3B0aW9uc0FjY3VtdWxhdG9yLCBfdG9Db25zdW1hYmxlQXJyYXkoY2F0ZWdvcml6ZWRPcHRpb24ub3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IG9wdGlvbi5kYXRhLFxuICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChvcHRpb25JZCwgXCItXCIpLmNvbmNhdChjYXRlZ29yaXplZE9wdGlvbi5pbmRleCwgXCItXCIpLmNvbmNhdChvcHRpb24uaW5kZXgpXG4gICAgICAgIH07XG4gICAgICB9KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zQWNjdW11bGF0b3IucHVzaCh7XG4gICAgICAgIGRhdGE6IGNhdGVnb3JpemVkT3B0aW9uLmRhdGEsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChvcHRpb25JZCwgXCItXCIpLmNvbmNhdChjYXRlZ29yaXplZE9wdGlvbi5pbmRleClcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc0FjY3VtdWxhdG9yO1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBidWlsZEZvY3VzYWJsZU9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSB7XG4gIHJldHVybiBidWlsZEZvY3VzYWJsZU9wdGlvbnNGcm9tQ2F0ZWdvcml6ZWRPcHRpb25zKGJ1aWxkQ2F0ZWdvcml6ZWRPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSkpO1xufVxuZnVuY3Rpb24gaXNGb2N1c2FibGUocHJvcHMsIGNhdGVnb3JpemVkT3B0aW9uKSB7XG4gIHZhciBfcHJvcHMkaW5wdXRWYWx1ZSA9IHByb3BzLmlucHV0VmFsdWUsXG4gICAgaW5wdXRWYWx1ZSA9IF9wcm9wcyRpbnB1dFZhbHVlID09PSB2b2lkIDAgPyAnJyA6IF9wcm9wcyRpbnB1dFZhbHVlO1xuICB2YXIgZGF0YSA9IGNhdGVnb3JpemVkT3B0aW9uLmRhdGEsXG4gICAgaXNTZWxlY3RlZCA9IGNhdGVnb3JpemVkT3B0aW9uLmlzU2VsZWN0ZWQsXG4gICAgbGFiZWwgPSBjYXRlZ29yaXplZE9wdGlvbi5sYWJlbCxcbiAgICB2YWx1ZSA9IGNhdGVnb3JpemVkT3B0aW9uLnZhbHVlO1xuICByZXR1cm4gKCFzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zKHByb3BzKSB8fCAhaXNTZWxlY3RlZCkgJiYgX2ZpbHRlck9wdGlvbihwcm9wcywge1xuICAgIGxhYmVsOiBsYWJlbCxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZGF0YTogZGF0YVxuICB9LCBpbnB1dFZhbHVlKTtcbn1cbmZ1bmN0aW9uIGdldE5leHRGb2N1c2VkVmFsdWUoc3RhdGUsIG5leHRTZWxlY3RWYWx1ZSkge1xuICB2YXIgZm9jdXNlZFZhbHVlID0gc3RhdGUuZm9jdXNlZFZhbHVlLFxuICAgIGxhc3RTZWxlY3RWYWx1ZSA9IHN0YXRlLnNlbGVjdFZhbHVlO1xuICB2YXIgbGFzdEZvY3VzZWRJbmRleCA9IGxhc3RTZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG4gIGlmIChsYXN0Rm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICB2YXIgbmV4dEZvY3VzZWRJbmRleCA9IG5leHRTZWxlY3RWYWx1ZS5pbmRleE9mKGZvY3VzZWRWYWx1ZSk7XG4gICAgaWYgKG5leHRGb2N1c2VkSW5kZXggPiAtMSkge1xuICAgICAgLy8gdGhlIGZvY3VzZWQgdmFsdWUgaXMgc3RpbGwgaW4gdGhlIHNlbGVjdFZhbHVlLCByZXR1cm4gaXRcbiAgICAgIHJldHVybiBmb2N1c2VkVmFsdWU7XG4gICAgfSBlbHNlIGlmIChsYXN0Rm9jdXNlZEluZGV4IDwgbmV4dFNlbGVjdFZhbHVlLmxlbmd0aCkge1xuICAgICAgLy8gdGhlIGZvY3VzZWRWYWx1ZSBpcyBub3QgcHJlc2VudCBpbiB0aGUgbmV4dCBzZWxlY3RWYWx1ZSBhcnJheSBieVxuICAgICAgLy8gcmVmZXJlbmNlLCBzbyByZXR1cm4gdGhlIG5ldyB2YWx1ZSBhdCB0aGUgc2FtZSBpbmRleFxuICAgICAgcmV0dXJuIG5leHRTZWxlY3RWYWx1ZVtsYXN0Rm9jdXNlZEluZGV4XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXROZXh0Rm9jdXNlZE9wdGlvbihzdGF0ZSwgb3B0aW9ucykge1xuICB2YXIgbGFzdEZvY3VzZWRPcHRpb24gPSBzdGF0ZS5mb2N1c2VkT3B0aW9uO1xuICByZXR1cm4gbGFzdEZvY3VzZWRPcHRpb24gJiYgb3B0aW9ucy5pbmRleE9mKGxhc3RGb2N1c2VkT3B0aW9uKSA+IC0xID8gbGFzdEZvY3VzZWRPcHRpb24gOiBvcHRpb25zWzBdO1xufVxudmFyIGdldEZvY3VzZWRPcHRpb25JZCA9IGZ1bmN0aW9uIGdldEZvY3VzZWRPcHRpb25JZChmb2N1c2FibGVPcHRpb25zV2l0aElkcywgZm9jdXNlZE9wdGlvbikge1xuICB2YXIgX2ZvY3VzYWJsZU9wdGlvbnNXaXRoO1xuICB2YXIgZm9jdXNlZE9wdGlvbklkID0gKF9mb2N1c2FibGVPcHRpb25zV2l0aCA9IGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24uZGF0YSA9PT0gZm9jdXNlZE9wdGlvbjtcbiAgfSkpID09PSBudWxsIHx8IF9mb2N1c2FibGVPcHRpb25zV2l0aCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ZvY3VzYWJsZU9wdGlvbnNXaXRoLmlkO1xuICByZXR1cm4gZm9jdXNlZE9wdGlvbklkIHx8IG51bGw7XG59O1xudmFyIGdldE9wdGlvbkxhYmVsID0gZnVuY3Rpb24gZ2V0T3B0aW9uTGFiZWwocHJvcHMsIGRhdGEpIHtcbiAgcmV0dXJuIHByb3BzLmdldE9wdGlvbkxhYmVsKGRhdGEpO1xufTtcbnZhciBnZXRPcHRpb25WYWx1ZSA9IGZ1bmN0aW9uIGdldE9wdGlvblZhbHVlKHByb3BzLCBkYXRhKSB7XG4gIHJldHVybiBwcm9wcy5nZXRPcHRpb25WYWx1ZShkYXRhKTtcbn07XG5mdW5jdGlvbiBfaXNPcHRpb25EaXNhYmxlZChwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHByb3BzLmlzT3B0aW9uRGlzYWJsZWQgPT09ICdmdW5jdGlvbicgPyBwcm9wcy5pc09wdGlvbkRpc2FibGVkKG9wdGlvbiwgc2VsZWN0VmFsdWUpIDogZmFsc2U7XG59XG5mdW5jdGlvbiBfaXNPcHRpb25TZWxlY3RlZChwcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSkge1xuICBpZiAoc2VsZWN0VmFsdWUuaW5kZXhPZihvcHRpb24pID4gLTEpIHJldHVybiB0cnVlO1xuICBpZiAodHlwZW9mIHByb3BzLmlzT3B0aW9uU2VsZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcHJvcHMuaXNPcHRpb25TZWxlY3RlZChvcHRpb24sIHNlbGVjdFZhbHVlKTtcbiAgfVxuICB2YXIgY2FuZGlkYXRlID0gZ2V0T3B0aW9uVmFsdWUocHJvcHMsIG9wdGlvbik7XG4gIHJldHVybiBzZWxlY3RWYWx1ZS5zb21lKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGdldE9wdGlvblZhbHVlKHByb3BzLCBpKSA9PT0gY2FuZGlkYXRlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIF9maWx0ZXJPcHRpb24ocHJvcHMsIG9wdGlvbiwgaW5wdXRWYWx1ZSkge1xuICByZXR1cm4gcHJvcHMuZmlsdGVyT3B0aW9uID8gcHJvcHMuZmlsdGVyT3B0aW9uKG9wdGlvbiwgaW5wdXRWYWx1ZSkgOiB0cnVlO1xufVxudmFyIHNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMgPSBmdW5jdGlvbiBzaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zKHByb3BzKSB7XG4gIHZhciBoaWRlU2VsZWN0ZWRPcHRpb25zID0gcHJvcHMuaGlkZVNlbGVjdGVkT3B0aW9ucyxcbiAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgaWYgKGhpZGVTZWxlY3RlZE9wdGlvbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGlzTXVsdGk7XG4gIHJldHVybiBoaWRlU2VsZWN0ZWRPcHRpb25zO1xufTtcbnZhciBpbnN0YW5jZUlkID0gMTtcbnZhciBTZWxlY3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFNlbGVjdCwgX0NvbXBvbmVudCk7XG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2VsZWN0KTtcbiAgLy8gTWlzYy4gSW5zdGFuY2UgUHJvcGVydGllc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBUT0RPXG5cbiAgLy8gUmVmc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgZnVuY3Rpb24gU2VsZWN0KF9wcm9wcykge1xuICAgIHZhciBfdGhpcztcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2VsZWN0KTtcbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIF9wcm9wcyk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBhcmlhU2VsZWN0aW9uOiBudWxsLFxuICAgICAgZm9jdXNlZE9wdGlvbjogbnVsbCxcbiAgICAgIGZvY3VzZWRPcHRpb25JZDogbnVsbCxcbiAgICAgIGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzOiBbXSxcbiAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGlucHV0SXNIaWRkZW46IGZhbHNlLFxuICAgICAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHNlbGVjdFZhbHVlOiBbXSxcbiAgICAgIGNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlOiBmYWxzZSxcbiAgICAgIHByZXZXYXNGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogdW5kZWZpbmVkLFxuICAgICAgcHJldlByb3BzOiB1bmRlZmluZWQsXG4gICAgICBpbnN0YW5jZVByZWZpeDogJydcbiAgICB9O1xuICAgIF90aGlzLmJsb2NrT3B0aW9uSG92ZXIgPSBmYWxzZTtcbiAgICBfdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgIF90aGlzLmNvbW1vblByb3BzID0gdm9pZCAwO1xuICAgIF90aGlzLmluaXRpYWxUb3VjaFggPSAwO1xuICAgIF90aGlzLmluaXRpYWxUb3VjaFkgPSAwO1xuICAgIF90aGlzLm9wZW5BZnRlckZvY3VzID0gZmFsc2U7XG4gICAgX3RoaXMuc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uT25VcGRhdGUgPSBmYWxzZTtcbiAgICBfdGhpcy51c2VySXNEcmFnZ2luZyA9IHZvaWQgMDtcbiAgICBfdGhpcy5pc0FwcGxlRGV2aWNlID0gaXNBcHBsZURldmljZSgpO1xuICAgIF90aGlzLmNvbnRyb2xSZWYgPSBudWxsO1xuICAgIF90aGlzLmdldENvbnRyb2xSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5jb250cm9sUmVmID0gcmVmO1xuICAgIH07XG4gICAgX3RoaXMuZm9jdXNlZE9wdGlvblJlZiA9IG51bGw7XG4gICAgX3RoaXMuZ2V0Rm9jdXNlZE9wdGlvblJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmZvY3VzZWRPcHRpb25SZWYgPSByZWY7XG4gICAgfTtcbiAgICBfdGhpcy5tZW51TGlzdFJlZiA9IG51bGw7XG4gICAgX3RoaXMuZ2V0TWVudUxpc3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5tZW51TGlzdFJlZiA9IHJlZjtcbiAgICB9O1xuICAgIF90aGlzLmlucHV0UmVmID0gbnVsbDtcbiAgICBfdGhpcy5nZXRJbnB1dFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmlucHV0UmVmID0gcmVmO1xuICAgIH07XG4gICAgX3RoaXMuZm9jdXMgPSBfdGhpcy5mb2N1c0lucHV0O1xuICAgIF90aGlzLmJsdXIgPSBfdGhpcy5ibHVySW5wdXQ7XG4gICAgX3RoaXMub25DaGFuZ2UgPSBmdW5jdGlvbiAobmV3VmFsdWUsIGFjdGlvbk1ldGEpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uQ2hhbmdlLFxuICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHMubmFtZTtcbiAgICAgIGFjdGlvbk1ldGEubmFtZSA9IG5hbWU7XG4gICAgICBfdGhpcy5hcmlhT25DaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgICAgb25DaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH07XG4gICAgX3RoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUsIGFjdGlvbiwgb3B0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgIGNsb3NlTWVudU9uU2VsZWN0ID0gX3RoaXMkcHJvcHMyLmNsb3NlTWVudU9uU2VsZWN0LFxuICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMyLmlzTXVsdGksXG4gICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRwcm9wczIuaW5wdXRWYWx1ZTtcbiAgICAgIF90aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnc2V0LXZhbHVlJyxcbiAgICAgICAgcHJldklucHV0VmFsdWU6IGlucHV0VmFsdWVcbiAgICAgIH0pO1xuICAgICAgaWYgKGNsb3NlTWVudU9uU2VsZWN0KSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6ICFpc011bHRpXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgfVxuICAgICAgLy8gd2hlbiB0aGUgc2VsZWN0IHZhbHVlIHNob3VsZCBjaGFuZ2UsIHdlIHNob3VsZCByZXNldCBmb2N1c2VkVmFsdWVcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgX3RoaXMub25DaGFuZ2UobmV3VmFsdWUsIHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIG9wdGlvbjogb3B0aW9uXG4gICAgICB9KTtcbiAgICB9O1xuICAgIF90aGlzLnNlbGVjdE9wdGlvbiA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICBibHVySW5wdXRPblNlbGVjdCA9IF90aGlzJHByb3BzMy5ibHVySW5wdXRPblNlbGVjdCxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzMy5pc011bHRpLFxuICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHMzLm5hbWU7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIHZhciBkZXNlbGVjdGVkID0gaXNNdWx0aSAmJiBfdGhpcy5pc09wdGlvblNlbGVjdGVkKG5ld1ZhbHVlLCBzZWxlY3RWYWx1ZSk7XG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IF90aGlzLmlzT3B0aW9uRGlzYWJsZWQobmV3VmFsdWUsIHNlbGVjdFZhbHVlKTtcbiAgICAgIGlmIChkZXNlbGVjdGVkKSB7XG4gICAgICAgIHZhciBjYW5kaWRhdGUgPSBfdGhpcy5nZXRPcHRpb25WYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIF90aGlzLnNldFZhbHVlKG11bHRpVmFsdWVBc1ZhbHVlKHNlbGVjdFZhbHVlLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5nZXRPcHRpb25WYWx1ZShpKSAhPT0gY2FuZGlkYXRlO1xuICAgICAgICB9KSksICdkZXNlbGVjdC1vcHRpb24nLCBuZXdWYWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICAgIC8vIFNlbGVjdCBvcHRpb24gaWYgb3B0aW9uIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgIF90aGlzLnNldFZhbHVlKG11bHRpVmFsdWVBc1ZhbHVlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc2VsZWN0VmFsdWUpLCBbbmV3VmFsdWVdKSksICdzZWxlY3Qtb3B0aW9uJywgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLnNldFZhbHVlKHNpbmdsZVZhbHVlQXNWYWx1ZShuZXdWYWx1ZSksICdzZWxlY3Qtb3B0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmFyaWFPbkNoYW5nZShzaW5nbGVWYWx1ZUFzVmFsdWUobmV3VmFsdWUpLCB7XG4gICAgICAgICAgYWN0aW9uOiAnc2VsZWN0LW9wdGlvbicsXG4gICAgICAgICAgb3B0aW9uOiBuZXdWYWx1ZSxcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoYmx1cklucHV0T25TZWxlY3QpIHtcbiAgICAgICAgX3RoaXMuYmx1cklucHV0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBfdGhpcy5yZW1vdmVWYWx1ZSA9IGZ1bmN0aW9uIChyZW1vdmVkVmFsdWUpIHtcbiAgICAgIHZhciBpc011bHRpID0gX3RoaXMucHJvcHMuaXNNdWx0aTtcbiAgICAgIHZhciBzZWxlY3RWYWx1ZSA9IF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgdmFyIGNhbmRpZGF0ZSA9IF90aGlzLmdldE9wdGlvblZhbHVlKHJlbW92ZWRWYWx1ZSk7XG4gICAgICB2YXIgbmV3VmFsdWVBcnJheSA9IHNlbGVjdFZhbHVlLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuZ2V0T3B0aW9uVmFsdWUoaSkgIT09IGNhbmRpZGF0ZTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdmFsdWVUZXJuYXJ5KGlzTXVsdGksIG5ld1ZhbHVlQXJyYXksIG5ld1ZhbHVlQXJyYXlbMF0gfHwgbnVsbCk7XG4gICAgICBfdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSwge1xuICAgICAgICBhY3Rpb246ICdyZW1vdmUtdmFsdWUnLFxuICAgICAgICByZW1vdmVkVmFsdWU6IHJlbW92ZWRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgfTtcbiAgICBfdGhpcy5jbGVhclZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XG4gICAgICBfdGhpcy5vbkNoYW5nZSh2YWx1ZVRlcm5hcnkoX3RoaXMucHJvcHMuaXNNdWx0aSwgW10sIG51bGwpLCB7XG4gICAgICAgIGFjdGlvbjogJ2NsZWFyJyxcbiAgICAgICAgcmVtb3ZlZFZhbHVlczogc2VsZWN0VmFsdWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgX3RoaXMucG9wVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaXNNdWx0aSA9IF90aGlzLnByb3BzLmlzTXVsdGk7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIHZhciBsYXN0U2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdFZhbHVlW3NlbGVjdFZhbHVlLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIG5ld1ZhbHVlQXJyYXkgPSBzZWxlY3RWYWx1ZS5zbGljZSgwLCBzZWxlY3RWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHZhbHVlVGVybmFyeShpc011bHRpLCBuZXdWYWx1ZUFycmF5LCBuZXdWYWx1ZUFycmF5WzBdIHx8IG51bGwpO1xuICAgICAgaWYgKGxhc3RTZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIF90aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLCB7XG4gICAgICAgICAgYWN0aW9uOiAncG9wLXZhbHVlJyxcbiAgICAgICAgICByZW1vdmVkVmFsdWU6IGxhc3RTZWxlY3RlZFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMuZ2V0Rm9jdXNlZE9wdGlvbklkID0gZnVuY3Rpb24gKGZvY3VzZWRPcHRpb24pIHtcbiAgICAgIHJldHVybiBnZXRGb2N1c2VkT3B0aW9uSWQoX3RoaXMuc3RhdGUuZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsIGZvY3VzZWRPcHRpb24pO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYnVpbGRGb2N1c2FibGVPcHRpb25zV2l0aElkcyhidWlsZENhdGVnb3JpemVkT3B0aW9ucyhfdGhpcy5wcm9wcywgX3RoaXMuc3RhdGUuc2VsZWN0VmFsdWUpLCBfdGhpcy5nZXRFbGVtZW50SWQoJ29wdGlvbicpKTtcbiAgICB9O1xuICAgIF90aGlzLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgIH07XG4gICAgX3RoaXMuY3ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc05hbWVzLmFwcGx5KHZvaWQgMCwgW190aGlzLnByb3BzLmNsYXNzTmFtZVByZWZpeF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9O1xuICAgIF90aGlzLmdldE9wdGlvbkxhYmVsID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBnZXRPcHRpb25MYWJlbChfdGhpcy5wcm9wcywgZGF0YSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRPcHRpb25WYWx1ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gZ2V0T3B0aW9uVmFsdWUoX3RoaXMucHJvcHMsIGRhdGEpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0U3R5bGVzID0gZnVuY3Rpb24gKGtleSwgcHJvcHMpIHtcbiAgICAgIHZhciB1bnN0eWxlZCA9IF90aGlzLnByb3BzLnVuc3R5bGVkO1xuICAgICAgdmFyIGJhc2UgPSBkZWZhdWx0U3R5bGVzW2tleV0ocHJvcHMsIHVuc3R5bGVkKTtcbiAgICAgIGJhc2UuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgICAgdmFyIGN1c3RvbSA9IF90aGlzLnByb3BzLnN0eWxlc1trZXldO1xuICAgICAgcmV0dXJuIGN1c3RvbSA/IGN1c3RvbShiYXNlLCBwcm9wcykgOiBiYXNlO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uIChrZXksIHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkY2xhc3NOYW1lLCBfdGhpcyRwcm9wcyRjbGFzc05hbWUyO1xuICAgICAgcmV0dXJuIChfdGhpcyRwcm9wcyRjbGFzc05hbWUgPSAoX3RoaXMkcHJvcHMkY2xhc3NOYW1lMiA9IF90aGlzLnByb3BzLmNsYXNzTmFtZXMpW2tleV0pID09PSBudWxsIHx8IF90aGlzJHByb3BzJGNsYXNzTmFtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkY2xhc3NOYW1lLmNhbGwoX3RoaXMkcHJvcHMkY2xhc3NOYW1lMiwgcHJvcHMpO1xuICAgIH07XG4gICAgX3RoaXMuZ2V0RWxlbWVudElkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChfdGhpcy5zdGF0ZS5pbnN0YW5jZVByZWZpeCwgXCItXCIpLmNvbmNhdChlbGVtZW50KTtcbiAgICB9O1xuICAgIF90aGlzLmdldENvbXBvbmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdENvbXBvbmVudHMoX3RoaXMucHJvcHMpO1xuICAgIH07XG4gICAgX3RoaXMuYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMoX3RoaXMucHJvcHMsIF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlKTtcbiAgICB9O1xuICAgIF90aGlzLmdldENhdGVnb3JpemVkT3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5tZW51SXNPcGVuID8gX3RoaXMuYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMoKSA6IFtdO1xuICAgIH07XG4gICAgX3RoaXMuYnVpbGRGb2N1c2FibGVPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMoX3RoaXMuYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMoKSk7XG4gICAgfTtcbiAgICBfdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm1lbnVJc09wZW4gPyBfdGhpcy5idWlsZEZvY3VzYWJsZU9wdGlvbnMoKSA6IFtdO1xuICAgIH07XG4gICAgX3RoaXMuYXJpYU9uQ2hhbmdlID0gZnVuY3Rpb24gKHZhbHVlLCBhY3Rpb25NZXRhKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFyaWFTZWxlY3Rpb246IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9LCBhY3Rpb25NZXRhKVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBfdGhpcy5vbk1lbnVNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH07XG4gICAgX3RoaXMub25NZW51TW91c2VNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5ibG9ja09wdGlvbkhvdmVyID0gZmFsc2U7XG4gICAgfTtcbiAgICBfdGhpcy5vbkNvbnRyb2xNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIEV2ZW50IGNhcHR1cmVkIGJ5IGRyb3Bkb3duIGluZGljYXRvclxuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG9wZW5NZW51T25DbGljayA9IF90aGlzLnByb3BzLm9wZW5NZW51T25DbGljaztcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNGb2N1c2VkKSB7XG4gICAgICAgIGlmIChvcGVuTWVudU9uQ2xpY2spIHtcbiAgICAgICAgICBfdGhpcy5vcGVuQWZ0ZXJGb2N1cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMucHJvcHMubWVudUlzT3Blbikge1xuICAgICAgICBpZiAob3Blbk1lbnVPbkNsaWNrKSB7XG4gICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJyAmJiBldmVudC50YXJnZXQudGFnTmFtZSAhPT0gJ1RFWFRBUkVBJykge1xuICAgICAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJyAmJiBldmVudC50YXJnZXQudGFnTmFtZSAhPT0gJ1RFWFRBUkVBJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMub25Ecm9wZG93bkluZGljYXRvck1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gaWdub3JlIG1vdXNlIGV2ZW50cyB0aGF0IHdlcmVuJ3QgdHJpZ2dlcmVkIGJ5IHRoZSBwcmltYXJ5IGJ1dHRvblxuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHM0LmlzTXVsdGksXG4gICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczQubWVudUlzT3BlbjtcbiAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGU6ICFpc011bHRpXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgX3RoaXMub25DbGVhckluZGljYXRvck1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gaWdub3JlIG1vdXNlIGV2ZW50cyB0aGF0IHdlcmVuJ3QgdHJpZ2dlcmVkIGJ5IHRoZSBwcmltYXJ5IGJ1dHRvblxuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBfdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgX3RoaXMub3BlbkFmdGVyRm9jdXMgPSBmYWxzZTtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG91Y2hlbmQnKSB7XG4gICAgICAgIF90aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMub25TY3JvbGwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgaXNEb2N1bWVudEVsZW1lbnQoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uTWVudUNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIF90aGlzLnByb3BzLmNsb3NlTWVudU9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5jbG9zZU1lbnVPblNjcm9sbChldmVudCkpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBfdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5pc0NvbXBvc2luZyA9IHRydWU7XG4gICAgfTtcbiAgICBfdGhpcy5vbkNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIF90aGlzLm9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIHRvdWNoZXMgPSBfcmVmMi50b3VjaGVzO1xuICAgICAgdmFyIHRvdWNoID0gdG91Y2hlcyAmJiB0b3VjaGVzLml0ZW0oMCk7XG4gICAgICBpZiAoIXRvdWNoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFggPSB0b3VjaC5jbGllbnRYO1xuICAgICAgX3RoaXMuaW5pdGlhbFRvdWNoWSA9IHRvdWNoLmNsaWVudFk7XG4gICAgICBfdGhpcy51c2VySXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIH07XG4gICAgX3RoaXMub25Ub3VjaE1vdmUgPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gX3JlZjMudG91Y2hlcztcbiAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXMgJiYgdG91Y2hlcy5pdGVtKDApO1xuICAgICAgaWYgKCF0b3VjaCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgZGVsdGFYID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIF90aGlzLmluaXRpYWxUb3VjaFgpO1xuICAgICAgdmFyIGRlbHRhWSA9IE1hdGguYWJzKHRvdWNoLmNsaWVudFkgLSBfdGhpcy5pbml0aWFsVG91Y2hZKTtcbiAgICAgIHZhciBtb3ZlVGhyZXNob2xkID0gNTtcbiAgICAgIF90aGlzLnVzZXJJc0RyYWdnaW5nID0gZGVsdGFYID4gbW92ZVRocmVzaG9sZCB8fCBkZWx0YVkgPiBtb3ZlVGhyZXNob2xkO1xuICAgIH07XG4gICAgX3RoaXMub25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICAgIC8vIGNsb3NlIHRoZSBtZW51IGlmIHRoZSB1c2VyIHRhcHMgb3V0c2lkZVxuICAgICAgLy8gd2UncmUgY2hlY2tpbmcgb24gZXZlbnQudGFyZ2V0IGhlcmUgaW5zdGVhZCBvZiBldmVudC5jdXJyZW50VGFyZ2V0LCBiZWNhdXNlIHdlIHdhbnQgdG8gYXNzZXJ0IGluZm9ybWF0aW9uXG4gICAgICAvLyBvbiBldmVudHMgb24gY2hpbGQgZWxlbWVudHMsIG5vdCB0aGUgZG9jdW1lbnQgKHdoaWNoIHdlJ3ZlIGF0dGFjaGVkIHRoaXMgaGFuZGxlciB0bykuXG4gICAgICBpZiAoX3RoaXMuY29udHJvbFJlZiAmJiAhX3RoaXMuY29udHJvbFJlZi5jb250YWlucyhldmVudC50YXJnZXQpICYmIF90aGlzLm1lbnVMaXN0UmVmICYmICFfdGhpcy5tZW51TGlzdFJlZi5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgIF90aGlzLmJsdXJJbnB1dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNldCBtb3ZlIHZhcnNcbiAgICAgIF90aGlzLmluaXRpYWxUb3VjaFggPSAwO1xuICAgICAgX3RoaXMuaW5pdGlhbFRvdWNoWSA9IDA7XG4gICAgfTtcbiAgICBfdGhpcy5vbkNvbnRyb2xUb3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnVzZXJJc0RyYWdnaW5nKSByZXR1cm47XG4gICAgICBfdGhpcy5vbkNvbnRyb2xNb3VzZURvd24oZXZlbnQpO1xuICAgIH07XG4gICAgX3RoaXMub25DbGVhckluZGljYXRvclRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMudXNlcklzRHJhZ2dpbmcpIHJldHVybjtcbiAgICAgIF90aGlzLm9uQ2xlYXJJbmRpY2F0b3JNb3VzZURvd24oZXZlbnQpO1xuICAgIH07XG4gICAgX3RoaXMub25Ecm9wZG93bkluZGljYXRvclRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMudXNlcklzRHJhZ2dpbmcpIHJldHVybjtcbiAgICAgIF90aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JNb3VzZURvd24oZXZlbnQpO1xuICAgIH07XG4gICAgX3RoaXMuaGFuZGxlSW5wdXRDaGFuZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBwcmV2SW5wdXRWYWx1ZSA9IF90aGlzLnByb3BzLmlucHV0VmFsdWU7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgX3RoaXMub25JbnB1dENoYW5nZShpbnB1dFZhbHVlLCB7XG4gICAgICAgIGFjdGlvbjogJ2lucHV0LWNoYW5nZScsXG4gICAgICAgIHByZXZJbnB1dFZhbHVlOiBwcmV2SW5wdXRWYWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoIV90aGlzLnByb3BzLm1lbnVJc09wZW4pIHtcbiAgICAgICAgX3RoaXMub25NZW51T3BlbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgX3RoaXMub25JbnB1dEZvY3VzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiBmYWxzZSxcbiAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGlmIChfdGhpcy5vcGVuQWZ0ZXJGb2N1cyB8fCBfdGhpcy5wcm9wcy5vcGVuTWVudU9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICB9XG4gICAgICBfdGhpcy5vcGVuQWZ0ZXJGb2N1cyA9IGZhbHNlO1xuICAgIH07XG4gICAgX3RoaXMub25JbnB1dEJsdXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBwcmV2SW5wdXRWYWx1ZSA9IF90aGlzLnByb3BzLmlucHV0VmFsdWU7XG4gICAgICBpZiAoX3RoaXMubWVudUxpc3RSZWYgJiYgX3RoaXMubWVudUxpc3RSZWYuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgX3RoaXMuaW5wdXRSZWYuZm9jdXMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuICAgICAgX3RoaXMub25JbnB1dENoYW5nZSgnJywge1xuICAgICAgICBhY3Rpb246ICdpbnB1dC1ibHVyJyxcbiAgICAgICAgcHJldklucHV0VmFsdWU6IHByZXZJbnB1dFZhbHVlXG4gICAgICB9KTtcbiAgICAgIF90aGlzLm9uTWVudUNsb3NlKCk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBfdGhpcy5vbk9wdGlvbkhvdmVyID0gZnVuY3Rpb24gKGZvY3VzZWRPcHRpb24pIHtcbiAgICAgIGlmIChfdGhpcy5ibG9ja09wdGlvbkhvdmVyIHx8IF90aGlzLnN0YXRlLmZvY3VzZWRPcHRpb24gPT09IGZvY3VzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG9wdGlvbnMgPSBfdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zKCk7XG4gICAgICB2YXIgZm9jdXNlZE9wdGlvbkluZGV4ID0gb3B0aW9ucy5pbmRleE9mKGZvY3VzZWRPcHRpb24pO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkT3B0aW9uOiBmb2N1c2VkT3B0aW9uLFxuICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IGZvY3VzZWRPcHRpb25JbmRleCA+IC0xID8gX3RoaXMuZ2V0Rm9jdXNlZE9wdGlvbklkKGZvY3VzZWRPcHRpb24pIDogbnVsbFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBfdGhpcy5zaG91bGRIaWRlU2VsZWN0ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMoX3RoaXMucHJvcHMpO1xuICAgIH07XG4gICAgX3RoaXMub25WYWx1ZUlucHV0Rm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIF90aGlzLmZvY3VzKCk7XG4gICAgfTtcbiAgICBfdGhpcy5vbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzNS5pc011bHRpLFxuICAgICAgICBiYWNrc3BhY2VSZW1vdmVzVmFsdWUgPSBfdGhpcyRwcm9wczUuYmFja3NwYWNlUmVtb3Zlc1ZhbHVlLFxuICAgICAgICBlc2NhcGVDbGVhcnNWYWx1ZSA9IF90aGlzJHByb3BzNS5lc2NhcGVDbGVhcnNWYWx1ZSxcbiAgICAgICAgaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzNS5pbnB1dFZhbHVlLFxuICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzNS5pc0NsZWFyYWJsZSxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzNS5pc0Rpc2FibGVkLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM1Lm1lbnVJc09wZW4sXG4gICAgICAgIG9uS2V5RG93biA9IF90aGlzJHByb3BzNS5vbktleURvd24sXG4gICAgICAgIHRhYlNlbGVjdHNWYWx1ZSA9IF90aGlzJHByb3BzNS50YWJTZWxlY3RzVmFsdWUsXG4gICAgICAgIG9wZW5NZW51T25Gb2N1cyA9IF90aGlzJHByb3BzNS5vcGVuTWVudU9uRm9jdXM7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgZm9jdXNlZE9wdGlvbiA9IF90aGlzJHN0YXRlLmZvY3VzZWRPcHRpb24sXG4gICAgICAgIGZvY3VzZWRWYWx1ZSA9IF90aGlzJHN0YXRlLmZvY3VzZWRWYWx1ZSxcbiAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIGlmIChpc0Rpc2FibGVkKSByZXR1cm47XG4gICAgICBpZiAodHlwZW9mIG9uS2V5RG93biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbktleURvd24oZXZlbnQpO1xuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCbG9jayBvcHRpb24gaG92ZXIgZXZlbnRzIHdoZW4gdGhlIHVzZXIgaGFzIGp1c3QgcHJlc3NlZCBhIGtleVxuICAgICAgX3RoaXMuYmxvY2tPcHRpb25Ib3ZlciA9IHRydWU7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgIGlmICghaXNNdWx0aSB8fCBpbnB1dFZhbHVlKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuZm9jdXNWYWx1ZSgncHJldmlvdXMnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgICAgaWYgKCFpc011bHRpIHx8IGlucHV0VmFsdWUpIHJldHVybjtcbiAgICAgICAgICBfdGhpcy5mb2N1c1ZhbHVlKCduZXh0Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICAgICAgaWYgKGlucHV0VmFsdWUpIHJldHVybjtcbiAgICAgICAgICBpZiAoZm9jdXNlZFZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpcy5yZW1vdmVWYWx1ZShmb2N1c2VkVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWJhY2tzcGFjZVJlbW92ZXNWYWx1ZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgICAgX3RoaXMucG9wVmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDbGVhcmFibGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICBpZiAoX3RoaXMuaXNDb21wb3NpbmcpIHJldHVybjtcbiAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgIW1lbnVJc09wZW4gfHwgIXRhYlNlbGVjdHNWYWx1ZSB8fCAhZm9jdXNlZE9wdGlvbiB8fFxuICAgICAgICAgIC8vIGRvbid0IGNhcHR1cmUgdGhlIGV2ZW50IGlmIHRoZSBtZW51IG9wZW5zIG9uIGZvY3VzIGFuZCB0aGUgZm9jdXNlZFxuICAgICAgICAgIC8vIG9wdGlvbiBpcyBhbHJlYWR5IHNlbGVjdGVkOyBpdCBicmVha3MgdGhlIGZsb3cgb2YgbmF2aWdhdGlvblxuICAgICAgICAgIG9wZW5NZW51T25Gb2N1cyAmJiBfdGhpcy5pc09wdGlvblNlbGVjdGVkKGZvY3VzZWRPcHRpb24sIHNlbGVjdFZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy5zZWxlY3RPcHRpb24oZm9jdXNlZE9wdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjI5KSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgdGhlIGtleWRvd24gZXZlbnQgZnJvbSBhbiBJbnB1dCBNZXRob2QgRWRpdG9yKElNRSlcbiAgICAgICAgICAgIC8vIHJlZi4gaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLyNkZXRlcm1pbmUta2V5ZG93bi1rZXl1cC1rZXlDb2RlXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1lbnVJc09wZW4pIHtcbiAgICAgICAgICAgIGlmICghZm9jdXNlZE9wdGlvbikgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzQ29tcG9zaW5nKSByZXR1cm47XG4gICAgICAgICAgICBfdGhpcy5zZWxlY3RPcHRpb24oZm9jdXNlZE9wdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMub25JbnB1dENoYW5nZSgnJywge1xuICAgICAgICAgICAgICBhY3Rpb246ICdtZW51LWNsb3NlJyxcbiAgICAgICAgICAgICAgcHJldklucHV0VmFsdWU6IGlucHV0VmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMub25NZW51Q2xvc2UoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2xlYXJhYmxlICYmIGVzY2FwZUNsZWFyc1ZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAvLyBzcGFjZVxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghbWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMub3Blbk1lbnUoJ2ZpcnN0Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmb2N1c2VkT3B0aW9uKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuc2VsZWN0T3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICBpZiAobWVudUlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ3VwJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5NZW51KCdsYXN0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgIGlmIChtZW51SXNPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5mb2N1c09wdGlvbignZG93bicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTWVudSgnZmlyc3QnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgICAgaWYgKCFtZW51SXNPcGVuKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ3BhZ2V1cCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgICAgaWYgKCFtZW51SXNPcGVuKSByZXR1cm47XG4gICAgICAgICAgX3RoaXMuZm9jdXNPcHRpb24oJ3BhZ2Vkb3duJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdmaXJzdCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuO1xuICAgICAgICAgIF90aGlzLmZvY3VzT3B0aW9uKCdsYXN0Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIF90aGlzLnN0YXRlLmluc3RhbmNlUHJlZml4ID0gJ3JlYWN0LXNlbGVjdC0nICsgKF90aGlzLnByb3BzLmluc3RhbmNlSWQgfHwgKytpbnN0YW5jZUlkKTtcbiAgICBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZSA9IGNsZWFuVmFsdWUoX3Byb3BzLnZhbHVlKTtcbiAgICAvLyBTZXQgZm9jdXNlZE9wdGlvbiBpZiBtZW51SXNPcGVuIGlzIHNldCBvbiBpbml0IChlLmcuIGRlZmF1bHRNZW51SXNPcGVuKVxuICAgIGlmIChfcHJvcHMubWVudUlzT3BlbiAmJiBfdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZS5sZW5ndGgpIHtcbiAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zV2l0aElkcyA9IF90aGlzLmdldEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzKCk7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9ucyA9IF90aGlzLmJ1aWxkRm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgdmFyIG9wdGlvbkluZGV4ID0gZm9jdXNhYmxlT3B0aW9ucy5pbmRleE9mKF90aGlzLnN0YXRlLnNlbGVjdFZhbHVlWzBdKTtcbiAgICAgIF90aGlzLnN0YXRlLmZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzID0gZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHM7XG4gICAgICBfdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uID0gZm9jdXNhYmxlT3B0aW9uc1tvcHRpb25JbmRleF07XG4gICAgICBfdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uSWQgPSBnZXRGb2N1c2VkT3B0aW9uSWQoZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsIGZvY3VzYWJsZU9wdGlvbnNbb3B0aW9uSW5kZXhdKTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9jcmVhdGVDbGFzcyhTZWxlY3QsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydExpc3RlbmluZ0NvbXBvc2l0aW9uKCk7XG4gICAgICB0aGlzLnN0YXJ0TGlzdGVuaW5nVG9Ub3VjaCgpO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2xvc2VNZW51T25TY3JvbGwgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAvLyBMaXN0ZW4gdG8gYWxsIHNjcm9sbCBldmVudHMsIGFuZCBmaWx0ZXIgdGhlbSBvdXQgaW5zaWRlIG9mICdvblNjcm9sbCdcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNjcm9sbCBmb2N1c2VkT3B0aW9uIGludG8gdmlldyBpZiBtZW51SXNPcGVuIGlzIHNldCBvbiBtb3VudCAoZS5nLiBkZWZhdWx0TWVudUlzT3BlbilcbiAgICAgIGlmICh0aGlzLnByb3BzLm1lbnVJc09wZW4gJiYgdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uICYmIHRoaXMubWVudUxpc3RSZWYgJiYgdGhpcy5mb2N1c2VkT3B0aW9uUmVmKSB7XG4gICAgICAgIHNjcm9sbEludG9WaWV3KHRoaXMubWVudUxpc3RSZWYsIHRoaXMuZm9jdXNlZE9wdGlvblJlZik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzNi5pc0Rpc2FibGVkLFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHM2Lm1lbnVJc09wZW47XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG4gICAgICBpZiAoXG4gICAgICAvLyBlbnN1cmUgZm9jdXMgaXMgcmVzdG9yZWQgY29ycmVjdGx5IHdoZW4gdGhlIGNvbnRyb2wgYmVjb21lcyBlbmFibGVkXG4gICAgICBpc0ZvY3VzZWQgJiYgIWlzRGlzYWJsZWQgJiYgcHJldlByb3BzLmlzRGlzYWJsZWQgfHxcbiAgICAgIC8vIGVuc3VyZSBmb2N1cyBpcyBvbiB0aGUgSW5wdXQgd2hlbiB0aGUgbWVudSBvcGVuc1xuICAgICAgaXNGb2N1c2VkICYmIG1lbnVJc09wZW4gJiYgIXByZXZQcm9wcy5tZW51SXNPcGVuKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzRm9jdXNlZCAmJiBpc0Rpc2FibGVkICYmICFwcmV2UHJvcHMuaXNEaXNhYmxlZCkge1xuICAgICAgICAvLyBlbnN1cmUgc2VsZWN0IHN0YXRlIGdldHMgYmx1cnJlZCBpbiBjYXNlIFNlbGVjdCBpcyBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGVkIHdoaWxlIGZvY3VzZWRcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgICAgfSwgdGhpcy5vbk1lbnVDbG9zZSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0ZvY3VzZWQgJiYgIWlzRGlzYWJsZWQgJiYgcHJldlByb3BzLmlzRGlzYWJsZWQgJiYgdGhpcy5pbnB1dFJlZiA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAvLyBlbnN1cmUgc2VsZWN0IHN0YXRlIGdldHMgZm9jdXNlZCBpbiBjYXNlIFNlbGVjdCBpcyBwcm9ncmFtYXRpY2FsbHkgcmUtZW5hYmxlZCB3aGlsZSBmb2N1c2VkIChGaXJlZm94KVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBzY3JvbGwgdGhlIGZvY3VzZWQgb3B0aW9uIGludG8gdmlldyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmICh0aGlzLm1lbnVMaXN0UmVmICYmIHRoaXMuZm9jdXNlZE9wdGlvblJlZiAmJiB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlKSB7XG4gICAgICAgIHNjcm9sbEludG9WaWV3KHRoaXMubWVudUxpc3RSZWYsIHRoaXMuZm9jdXNlZE9wdGlvblJlZik7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uT25VcGRhdGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnN0b3BMaXN0ZW5pbmdDb21wb3NpdGlvbigpO1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nVG9Ub3VjaCgpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ29uc3VtZXIgSGFuZGxlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgfSwge1xuICAgIGtleTogXCJvbk1lbnVPcGVuXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uTWVudU9wZW4oKSB7XG4gICAgICB0aGlzLnByb3BzLm9uTWVudU9wZW4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25NZW51Q2xvc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoJycsIHtcbiAgICAgICAgYWN0aW9uOiAnbWVudS1jbG9zZScsXG4gICAgICAgIHByZXZJbnB1dFZhbHVlOiB0aGlzLnByb3BzLmlucHV0VmFsdWVcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVDbG9zZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbklucHV0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uSW5wdXRDaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpIHtcbiAgICAgIHRoaXMucHJvcHMub25JbnB1dENoYW5nZShuZXdWYWx1ZSwgYWN0aW9uTWV0YSk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTWV0aG9kc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzSW5wdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXNJbnB1dCgpIHtcbiAgICAgIGlmICghdGhpcy5pbnB1dFJlZikgcmV0dXJuO1xuICAgICAgdGhpcy5pbnB1dFJlZi5mb2N1cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJibHVySW5wdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmx1cklucHV0KCkge1xuICAgICAgaWYgKCF0aGlzLmlucHV0UmVmKSByZXR1cm47XG4gICAgICB0aGlzLmlucHV0UmVmLmJsdXIoKTtcbiAgICB9XG5cbiAgICAvLyBhbGlhc2VkIGZvciBjb25zdW1lcnNcbiAgfSwge1xuICAgIGtleTogXCJvcGVuTWVudVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVuTWVudShmb2N1c09wdGlvbikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgc2VsZWN0VmFsdWUgPSBfdGhpcyRzdGF0ZTIuc2VsZWN0VmFsdWUsXG4gICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHN0YXRlMi5pc0ZvY3VzZWQ7XG4gICAgICB2YXIgZm9jdXNhYmxlT3B0aW9ucyA9IHRoaXMuYnVpbGRGb2N1c2FibGVPcHRpb25zKCk7XG4gICAgICB2YXIgb3BlbkF0SW5kZXggPSBmb2N1c09wdGlvbiA9PT0gJ2ZpcnN0JyA/IDAgOiBmb2N1c2FibGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuaXNNdWx0aSkge1xuICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IGZvY3VzYWJsZU9wdGlvbnMuaW5kZXhPZihzZWxlY3RWYWx1ZVswXSk7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBvcGVuQXRJbmRleCA9IHNlbGVjdGVkSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gb25seSBzY3JvbGwgaWYgdGhlIG1lbnUgaXNuJ3QgYWxyZWFkeSBvcGVuXG4gICAgICB0aGlzLnNjcm9sbFRvRm9jdXNlZE9wdGlvbk9uVXBkYXRlID0gIShpc0ZvY3VzZWQgJiYgdGhpcy5tZW51TGlzdFJlZik7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiBmYWxzZSxcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgICBmb2N1c2VkT3B0aW9uOiBmb2N1c2FibGVPcHRpb25zW29wZW5BdEluZGV4XSxcbiAgICAgICAgZm9jdXNlZE9wdGlvbklkOiB0aGlzLmdldEZvY3VzZWRPcHRpb25JZChmb2N1c2FibGVPcHRpb25zW29wZW5BdEluZGV4XSlcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5vbk1lbnVPcGVuKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1c1ZhbHVlKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGUzLnNlbGVjdFZhbHVlLFxuICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZTMuZm9jdXNlZFZhbHVlO1xuXG4gICAgICAvLyBPbmx5IG11bHRpc2VsZWN0cyBzdXBwb3J0IHZhbHVlIGZvY3VzaW5nXG4gICAgICBpZiAoIXRoaXMucHJvcHMuaXNNdWx0aSkgcmV0dXJuO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRPcHRpb246IG51bGxcbiAgICAgIH0pO1xuICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IHNlbGVjdFZhbHVlLmluZGV4T2YoZm9jdXNlZFZhbHVlKTtcbiAgICAgIGlmICghZm9jdXNlZFZhbHVlKSB7XG4gICAgICAgIGZvY3VzZWRJbmRleCA9IC0xO1xuICAgICAgfVxuICAgICAgdmFyIGxhc3RJbmRleCA9IHNlbGVjdFZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbmV4dEZvY3VzID0gLTE7XG4gICAgICBpZiAoIXNlbGVjdFZhbHVlLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAncHJldmlvdXMnOlxuICAgICAgICAgIGlmIChmb2N1c2VkSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIC8vIGRvbid0IGN5Y2xlIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmRcbiAgICAgICAgICAgIG5leHRGb2N1cyA9IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChmb2N1c2VkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAvLyBpZiBub3RoaW5nIGlzIGZvY3VzZWQsIGZvY3VzIHRoZSBsYXN0IHZhbHVlIGZpcnN0XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBsYXN0SW5kZXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEgJiYgZm9jdXNlZEluZGV4IDwgbGFzdEluZGV4KSB7XG4gICAgICAgICAgICBuZXh0Rm9jdXMgPSBmb2N1c2VkSW5kZXggKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dElzSGlkZGVuOiBuZXh0Rm9jdXMgIT09IC0xLFxuICAgICAgICBmb2N1c2VkVmFsdWU6IHNlbGVjdFZhbHVlW25leHRGb2N1c11cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c09wdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1c09wdGlvbigpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdmaXJzdCc7XG4gICAgICB2YXIgcGFnZVNpemUgPSB0aGlzLnByb3BzLnBhZ2VTaXplO1xuICAgICAgdmFyIGZvY3VzZWRPcHRpb24gPSB0aGlzLnN0YXRlLmZvY3VzZWRPcHRpb247XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZ2V0Rm9jdXNhYmxlT3B0aW9ucygpO1xuICAgICAgaWYgKCFvcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIG5leHRGb2N1cyA9IDA7IC8vIGhhbmRsZXMgJ2ZpcnN0J1xuICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IG9wdGlvbnMuaW5kZXhPZihmb2N1c2VkT3B0aW9uKTtcbiAgICAgIGlmICghZm9jdXNlZE9wdGlvbikge1xuICAgICAgICBmb2N1c2VkSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgbmV4dEZvY3VzID0gZm9jdXNlZEluZGV4ID4gMCA/IGZvY3VzZWRJbmRleCAtIDEgOiBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IChmb2N1c2VkSW5kZXggKyAxKSAlIG9wdGlvbnMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdwYWdldXAnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCAtIHBhZ2VTaXplO1xuICAgICAgICBpZiAobmV4dEZvY3VzIDwgMCkgbmV4dEZvY3VzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncGFnZWRvd24nKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IGZvY3VzZWRJbmRleCArIHBhZ2VTaXplO1xuICAgICAgICBpZiAobmV4dEZvY3VzID4gb3B0aW9ucy5sZW5ndGggLSAxKSBuZXh0Rm9jdXMgPSBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xhc3QnKSB7XG4gICAgICAgIG5leHRGb2N1cyA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Nyb2xsVG9Gb2N1c2VkT3B0aW9uT25VcGRhdGUgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRPcHRpb246IG9wdGlvbnNbbmV4dEZvY3VzXSxcbiAgICAgICAgZm9jdXNlZFZhbHVlOiBudWxsLFxuICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IHRoaXMuZ2V0Rm9jdXNlZE9wdGlvbklkKG9wdGlvbnNbbmV4dEZvY3VzXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRUaGVtZVwiLFxuICAgIHZhbHVlOlxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEdldHRlcnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIGdldFRoZW1lKCkge1xuICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IHRoZW1lIGlmIHRoZXJlIGFyZSBubyBjdXN0b21pc2F0aW9ucy5cbiAgICAgIGlmICghdGhpcy5wcm9wcy50aGVtZSkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFRoZW1lO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGhlIHRoZW1lIHByb3AgaXMgYSBmdW5jdGlvbiwgYXNzdW1lIHRoZSBmdW5jdGlvblxuICAgICAgLy8ga25vd3MgaG93IHRvIG1lcmdlIHRoZSBwYXNzZWQtaW4gZGVmYXVsdCB0aGVtZSB3aXRoXG4gICAgICAvLyBpdHMgb3duIG1vZGlmaWNhdGlvbnMuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMudGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgaWYgYSBwbGFpbiB0aGVtZSBvYmplY3Qgd2FzIHBhc3NlZCBpbixcbiAgICAgIC8vIG92ZXJsYXkgaXQgd2l0aCB0aGUgZGVmYXVsdCB0aGVtZS5cbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRlZmF1bHRUaGVtZSksIHRoaXMucHJvcHMudGhlbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRDb21tb25Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDb21tb25Qcm9wcygpIHtcbiAgICAgIHZhciBjbGVhclZhbHVlID0gdGhpcy5jbGVhclZhbHVlLFxuICAgICAgICBjeCA9IHRoaXMuY3gsXG4gICAgICAgIGdldFN0eWxlcyA9IHRoaXMuZ2V0U3R5bGVzLFxuICAgICAgICBnZXRDbGFzc05hbWVzID0gdGhpcy5nZXRDbGFzc05hbWVzLFxuICAgICAgICBnZXRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUsXG4gICAgICAgIHNlbGVjdE9wdGlvbiA9IHRoaXMuc2VsZWN0T3B0aW9uLFxuICAgICAgICBzZXRWYWx1ZSA9IHRoaXMuc2V0VmFsdWUsXG4gICAgICAgIHByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgIHZhciBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICAgICAgaXNSdGwgPSBwcm9wcy5pc1J0bCxcbiAgICAgICAgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnM7XG4gICAgICB2YXIgaGFzVmFsdWUgPSB0aGlzLmhhc1ZhbHVlKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGVhclZhbHVlOiBjbGVhclZhbHVlLFxuICAgICAgICBjeDogY3gsXG4gICAgICAgIGdldFN0eWxlczogZ2V0U3R5bGVzLFxuICAgICAgICBnZXRDbGFzc05hbWVzOiBnZXRDbGFzc05hbWVzLFxuICAgICAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsXG4gICAgICAgIGhhc1ZhbHVlOiBoYXNWYWx1ZSxcbiAgICAgICAgaXNNdWx0aTogaXNNdWx0aSxcbiAgICAgICAgaXNSdGw6IGlzUnRsLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICBzZWxlY3RPcHRpb246IHNlbGVjdE9wdGlvbixcbiAgICAgICAgc2VsZWN0UHJvcHM6IHByb3BzLFxuICAgICAgICBzZXRWYWx1ZTogc2V0VmFsdWUsXG4gICAgICAgIHRoZW1lOiB0aGlzLmdldFRoZW1lKClcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc1ZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc1ZhbHVlKCkge1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgIHJldHVybiBzZWxlY3RWYWx1ZS5sZW5ndGggPiAwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc09wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldEZvY3VzYWJsZU9wdGlvbnMoKS5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzQ2xlYXJhYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzQ2xlYXJhYmxlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHM3LmlzQ2xlYXJhYmxlLFxuICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHM3LmlzTXVsdGk7XG5cbiAgICAgIC8vIHNpbmdsZSBzZWxlY3QsIGJ5IGRlZmF1bHQsIElTIE5PVCBjbGVhcmFibGVcbiAgICAgIC8vIG11bHRpIHNlbGVjdCwgYnkgZGVmYXVsdCwgSVMgY2xlYXJhYmxlXG4gICAgICBpZiAoaXNDbGVhcmFibGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGlzTXVsdGk7XG4gICAgICByZXR1cm4gaXNDbGVhcmFibGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzT3B0aW9uRGlzYWJsZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNPcHRpb25EaXNhYmxlZChvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gICAgICByZXR1cm4gX2lzT3B0aW9uRGlzYWJsZWQodGhpcy5wcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzT3B0aW9uU2VsZWN0ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNPcHRpb25TZWxlY3RlZChvcHRpb24sIHNlbGVjdFZhbHVlKSB7XG4gICAgICByZXR1cm4gX2lzT3B0aW9uU2VsZWN0ZWQodGhpcy5wcm9wcywgb3B0aW9uLCBzZWxlY3RWYWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpbHRlck9wdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaWx0ZXJPcHRpb24ob3B0aW9uLCBpbnB1dFZhbHVlKSB7XG4gICAgICByZXR1cm4gX2ZpbHRlck9wdGlvbih0aGlzLnByb3BzLCBvcHRpb24sIGlucHV0VmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JtYXRPcHRpb25MYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRPcHRpb25MYWJlbChkYXRhLCBjb250ZXh0KSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuZm9ybWF0T3B0aW9uTGFiZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF9pbnB1dFZhbHVlID0gdGhpcy5wcm9wcy5pbnB1dFZhbHVlO1xuICAgICAgICB2YXIgX3NlbGVjdFZhbHVlID0gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZm9ybWF0T3B0aW9uTGFiZWwoZGF0YSwge1xuICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgaW5wdXRWYWx1ZTogX2lucHV0VmFsdWUsXG4gICAgICAgICAgc2VsZWN0VmFsdWU6IF9zZWxlY3RWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkxhYmVsKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JtYXRHcm91cExhYmVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdEdyb3VwTGFiZWwoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZm9ybWF0R3JvdXBMYWJlbChkYXRhKTtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBNb3VzZSBIYW5kbGVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB9LCB7XG4gICAga2V5OiBcInN0YXJ0TGlzdGVuaW5nQ29tcG9zaXRpb25cIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBDb21wb3NpdGlvbiBIYW5kbGVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgZnVuY3Rpb24gc3RhcnRMaXN0ZW5pbmdDb21wb3NpdGlvbigpIHtcbiAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIHRoaXMub25Db21wb3NpdGlvbkVuZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdG9wTGlzdGVuaW5nQ29tcG9zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcExpc3RlbmluZ0NvbXBvc2l0aW9uKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIHRoaXMub25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdGFydExpc3RlbmluZ1RvVG91Y2hcIixcbiAgICB2YWx1ZTpcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUb3VjaCBIYW5kbGVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgZnVuY3Rpb24gc3RhcnRMaXN0ZW5pbmdUb1RvdWNoKCkge1xuICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmUsIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3RvcExpc3RlbmluZ1RvVG91Y2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcExpc3RlbmluZ1RvVG91Y2goKSB7XG4gICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uVG91Y2hNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uVG91Y2hFbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnB1dFwiLFxuICAgIHZhbHVlOlxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFJlbmRlcmVyc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGZ1bmN0aW9uIHJlbmRlcklucHV0KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczguaXNEaXNhYmxlZCxcbiAgICAgICAgaXNTZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM4LmlzU2VhcmNoYWJsZSxcbiAgICAgICAgaW5wdXRJZCA9IF90aGlzJHByb3BzOC5pbnB1dElkLFxuICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHM4LmlucHV0VmFsdWUsXG4gICAgICAgIHRhYkluZGV4ID0gX3RoaXMkcHJvcHM4LnRhYkluZGV4LFxuICAgICAgICBmb3JtID0gX3RoaXMkcHJvcHM4LmZvcm0sXG4gICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczgubWVudUlzT3BlbixcbiAgICAgICAgcmVxdWlyZWQgPSBfdGhpcyRwcm9wczgucmVxdWlyZWQ7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBJbnB1dCA9IF90aGlzJGdldENvbXBvbmVudHMuSW5wdXQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU0ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgaW5wdXRJc0hpZGRlbiA9IF90aGlzJHN0YXRlNC5pbnB1dElzSGlkZGVuLFxuICAgICAgICBhcmlhU2VsZWN0aW9uID0gX3RoaXMkc3RhdGU0LmFyaWFTZWxlY3Rpb247XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIGlkID0gaW5wdXRJZCB8fCB0aGlzLmdldEVsZW1lbnRJZCgnaW5wdXQnKTtcblxuICAgICAgLy8gYXJpYSBhdHRyaWJ1dGVzIG1ha2VzIHRoZSBKU1ggXCJub2lzeVwiLCBzZXBhcmF0ZWQgZm9yIGNsYXJpdHlcbiAgICAgIHZhciBhcmlhQXR0cmlidXRlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ2xpc3QnLFxuICAgICAgICAnYXJpYS1leHBhbmRlZCc6IG1lbnVJc09wZW4sXG4gICAgICAgICdhcmlhLWhhc3BvcHVwJzogdHJ1ZSxcbiAgICAgICAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogdGhpcy5wcm9wc1snYXJpYS1lcnJvcm1lc3NhZ2UnXSxcbiAgICAgICAgJ2FyaWEtaW52YWxpZCc6IHRoaXMucHJvcHNbJ2FyaWEtaW52YWxpZCddLFxuICAgICAgICAnYXJpYS1sYWJlbCc6IHRoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IHRoaXMucHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAnYXJpYS1yZXF1aXJlZCc6IHJlcXVpcmVkLFxuICAgICAgICByb2xlOiAnY29tYm9ib3gnLFxuICAgICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogdGhpcy5pc0FwcGxlRGV2aWNlID8gdW5kZWZpbmVkIDogdGhpcy5zdGF0ZS5mb2N1c2VkT3B0aW9uSWQgfHwgJydcbiAgICAgIH0sIG1lbnVJc09wZW4gJiYge1xuICAgICAgICAnYXJpYS1jb250cm9scyc6IHRoaXMuZ2V0RWxlbWVudElkKCdsaXN0Ym94JylcbiAgICAgIH0pLCAhaXNTZWFyY2hhYmxlICYmIHtcbiAgICAgICAgJ2FyaWEtcmVhZG9ubHknOiB0cnVlXG4gICAgICB9KSwgdGhpcy5oYXNWYWx1ZSgpID8gKGFyaWFTZWxlY3Rpb24gPT09IG51bGwgfHwgYXJpYVNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJpYVNlbGVjdGlvbi5hY3Rpb24pID09PSAnaW5pdGlhbC1pbnB1dC1mb2N1cycgJiYge1xuICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IHRoaXMuZ2V0RWxlbWVudElkKCdsaXZlLXJlZ2lvbicpXG4gICAgICB9IDoge1xuICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IHRoaXMuZ2V0RWxlbWVudElkKCdwbGFjZWhvbGRlcicpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNTZWFyY2hhYmxlKSB7XG4gICAgICAgIC8vIHVzZSBhIGR1bW15IGlucHV0IHRvIG1haW50YWluIGZvY3VzL2JsdXIgZnVuY3Rpb25hbGl0eVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHVtbXlJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBpbm5lclJlZjogdGhpcy5nZXRJbnB1dFJlZixcbiAgICAgICAgICBvbkJsdXI6IHRoaXMub25JbnB1dEJsdXIsXG4gICAgICAgICAgb25DaGFuZ2U6IG5vb3AsXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5vbklucHV0Rm9jdXMsXG4gICAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICAgIGlucHV0TW9kZTogXCJub25lXCIsXG4gICAgICAgICAgZm9ybTogZm9ybSxcbiAgICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgICB9LCBhcmlhQXR0cmlidXRlcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgYXV0b0NhcGl0YWxpemU6IFwibm9uZVwiLFxuICAgICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgIGF1dG9Db3JyZWN0OiBcIm9mZlwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGlubmVyUmVmOiB0aGlzLmdldElucHV0UmVmLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpc0hpZGRlbjogaW5wdXRJc0hpZGRlbixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uSW5wdXRCbHVyLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVJbnB1dENoYW5nZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbklucHV0Rm9jdXMsXG4gICAgICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIixcbiAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICBmb3JtOiBmb3JtLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWVcbiAgICAgIH0sIGFyaWFBdHRyaWJ1dGVzKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclBsYWNlaG9sZGVyT3JWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJQbGFjZWhvbGRlck9yVmFsdWUoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzMiA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBNdWx0aVZhbHVlID0gX3RoaXMkZ2V0Q29tcG9uZW50czIuTXVsdGlWYWx1ZSxcbiAgICAgICAgTXVsdGlWYWx1ZUNvbnRhaW5lciA9IF90aGlzJGdldENvbXBvbmVudHMyLk11bHRpVmFsdWVDb250YWluZXIsXG4gICAgICAgIE11bHRpVmFsdWVMYWJlbCA9IF90aGlzJGdldENvbXBvbmVudHMyLk11bHRpVmFsdWVMYWJlbCxcbiAgICAgICAgTXVsdGlWYWx1ZVJlbW92ZSA9IF90aGlzJGdldENvbXBvbmVudHMyLk11bHRpVmFsdWVSZW1vdmUsXG4gICAgICAgIFNpbmdsZVZhbHVlID0gX3RoaXMkZ2V0Q29tcG9uZW50czIuU2luZ2xlVmFsdWUsXG4gICAgICAgIFBsYWNlaG9sZGVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czIuUGxhY2Vob2xkZXI7XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIF90aGlzJHByb3BzOSA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSA9IF90aGlzJHByb3BzOS5jb250cm9sU2hvdWxkUmVuZGVyVmFsdWUsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczkuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNNdWx0aSA9IF90aGlzJHByb3BzOS5pc011bHRpLFxuICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHM5LmlucHV0VmFsdWUsXG4gICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHM5LnBsYWNlaG9sZGVyO1xuICAgICAgdmFyIF90aGlzJHN0YXRlNSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHNlbGVjdFZhbHVlID0gX3RoaXMkc3RhdGU1LnNlbGVjdFZhbHVlLFxuICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZTUuZm9jdXNlZFZhbHVlLFxuICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTUuaXNGb2N1c2VkO1xuICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKCkgfHwgIWNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZSA/IG51bGwgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQbGFjZWhvbGRlciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAga2V5OiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCxcbiAgICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgICBpZDogdGhpcy5nZXRFbGVtZW50SWQoJ3BsYWNlaG9sZGVyJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pLCBwbGFjZWhvbGRlcik7XG4gICAgICB9XG4gICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0VmFsdWUubWFwKGZ1bmN0aW9uIChvcHQsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIGlzT3B0aW9uRm9jdXNlZCA9IG9wdCA9PT0gZm9jdXNlZFZhbHVlO1xuICAgICAgICAgIHZhciBrZXkgPSBcIlwiLmNvbmNhdChfdGhpczMuZ2V0T3B0aW9uTGFiZWwob3B0KSwgXCItXCIpLmNvbmNhdChfdGhpczMuZ2V0T3B0aW9uVmFsdWUob3B0KSk7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE11bHRpVmFsdWUsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBDb250YWluZXI6IE11bHRpVmFsdWVDb250YWluZXIsXG4gICAgICAgICAgICAgIExhYmVsOiBNdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgICAgICAgIFJlbW92ZTogTXVsdGlWYWx1ZVJlbW92ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzRm9jdXNlZDogaXNPcHRpb25Gb2N1c2VkLFxuICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgcmVtb3ZlUHJvcHM6IHtcbiAgICAgICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLnJlbW92ZVZhbHVlKG9wdCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uVG91Y2hFbmQ6IGZ1bmN0aW9uIG9uVG91Y2hFbmQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5yZW1vdmVWYWx1ZShvcHQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGE6IG9wdFxuICAgICAgICAgIH0pLCBfdGhpczMuZm9ybWF0T3B0aW9uTGFiZWwob3B0LCAndmFsdWUnKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgc2luZ2xlVmFsdWUgPSBzZWxlY3RWYWx1ZVswXTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTaW5nbGVWYWx1ZSwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGRhdGE6IHNpbmdsZVZhbHVlLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICB9KSwgdGhpcy5mb3JtYXRPcHRpb25MYWJlbChzaW5nbGVWYWx1ZSwgJ3ZhbHVlJykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDbGVhckluZGljYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhckluZGljYXRvcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzMyA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBDbGVhckluZGljYXRvciA9IF90aGlzJGdldENvbXBvbmVudHMzLkNsZWFySW5kaWNhdG9yO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczEwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTAuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxMC5pc0xvYWRpbmc7XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG4gICAgICBpZiAoIXRoaXMuaXNDbGVhcmFibGUoKSB8fCAhQ2xlYXJJbmRpY2F0b3IgfHwgaXNEaXNhYmxlZCB8fCAhdGhpcy5oYXNWYWx1ZSgpIHx8IGlzTG9hZGluZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkNsZWFySW5kaWNhdG9yTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uQ2xlYXJJbmRpY2F0b3JUb3VjaEVuZCxcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENsZWFySW5kaWNhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTG9hZGluZ0luZGljYXRvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMb2FkaW5nSW5kaWNhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM0ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIExvYWRpbmdJbmRpY2F0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzNC5Mb2FkaW5nSW5kaWNhdG9yO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczExID0gdGhpcy5wcm9wcyxcbiAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMTEuaXNEaXNhYmxlZCxcbiAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMxMS5pc0xvYWRpbmc7XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG4gICAgICBpZiAoIUxvYWRpbmdJbmRpY2F0b3IgfHwgIWlzTG9hZGluZykgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgaW5uZXJQcm9wcyA9IHtcbiAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvYWRpbmdJbmRpY2F0b3IsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclByb3BzOiBpbm5lclByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbmRpY2F0b3JTZXBhcmF0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySW5kaWNhdG9yU2VwYXJhdG9yKCkge1xuICAgICAgdmFyIF90aGlzJGdldENvbXBvbmVudHM1ID0gdGhpcy5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIERyb3Bkb3duSW5kaWNhdG9yID0gX3RoaXMkZ2V0Q29tcG9uZW50czUuRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgIEluZGljYXRvclNlcGFyYXRvciA9IF90aGlzJGdldENvbXBvbmVudHM1LkluZGljYXRvclNlcGFyYXRvcjtcblxuICAgICAgLy8gc2VwYXJhdG9yIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IHRoZSBkcm9wZG93biBpbmRpY2F0b3JcbiAgICAgIGlmICghRHJvcGRvd25JbmRpY2F0b3IgfHwgIUluZGljYXRvclNlcGFyYXRvcikgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLnByb3BzLmlzRGlzYWJsZWQ7XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kaWNhdG9yU2VwYXJhdG9yLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRHJvcGRvd25JbmRpY2F0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRHJvcGRvd25JbmRpY2F0b3IoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czYgPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgRHJvcGRvd25JbmRpY2F0b3IgPSBfdGhpcyRnZXRDb21wb25lbnRzNi5Ecm9wZG93bkluZGljYXRvcjtcbiAgICAgIGlmICghRHJvcGRvd25JbmRpY2F0b3IpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0gdGhpcy5jb21tb25Qcm9wcztcbiAgICAgIHZhciBpc0Rpc2FibGVkID0gdGhpcy5wcm9wcy5pc0Rpc2FibGVkO1xuICAgICAgdmFyIGlzRm9jdXNlZCA9IHRoaXMuc3RhdGUuaXNGb2N1c2VkO1xuICAgICAgdmFyIGlubmVyUHJvcHMgPSB7XG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uRHJvcGRvd25JbmRpY2F0b3JNb3VzZURvd24sXG4gICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25Ecm9wZG93bkluZGljYXRvclRvdWNoRW5kLFxuICAgICAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZSdcbiAgICAgIH07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcGRvd25JbmRpY2F0b3IsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpbm5lclByb3BzOiBpbm5lclByb3BzLFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZFxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJNZW51XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlck1lbnUoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIHZhciBfdGhpcyRnZXRDb21wb25lbnRzNyA9IHRoaXMuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBHcm91cCA9IF90aGlzJGdldENvbXBvbmVudHM3Lkdyb3VwLFxuICAgICAgICBHcm91cEhlYWRpbmcgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Hcm91cEhlYWRpbmcsXG4gICAgICAgIE1lbnUgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5NZW51LFxuICAgICAgICBNZW51TGlzdCA9IF90aGlzJGdldENvbXBvbmVudHM3Lk1lbnVMaXN0LFxuICAgICAgICBNZW51UG9ydGFsID0gX3RoaXMkZ2V0Q29tcG9uZW50czcuTWVudVBvcnRhbCxcbiAgICAgICAgTG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRnZXRDb21wb25lbnRzNy5Mb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgTm9PcHRpb25zTWVzc2FnZSA9IF90aGlzJGdldENvbXBvbmVudHM3Lk5vT3B0aW9uc01lc3NhZ2UsXG4gICAgICAgIE9wdGlvbiA9IF90aGlzJGdldENvbXBvbmVudHM3Lk9wdGlvbjtcbiAgICAgIHZhciBjb21tb25Qcm9wcyA9IHRoaXMuY29tbW9uUHJvcHM7XG4gICAgICB2YXIgZm9jdXNlZE9wdGlvbiA9IHRoaXMuc3RhdGUuZm9jdXNlZE9wdGlvbjtcbiAgICAgIHZhciBfdGhpcyRwcm9wczEyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2FwdHVyZU1lbnVTY3JvbGwgPSBfdGhpcyRwcm9wczEyLmNhcHR1cmVNZW51U2Nyb2xsLFxuICAgICAgICBpbnB1dFZhbHVlID0gX3RoaXMkcHJvcHMxMi5pbnB1dFZhbHVlLFxuICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczEyLmlzTG9hZGluZyxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRwcm9wczEyLmxvYWRpbmdNZXNzYWdlLFxuICAgICAgICBtaW5NZW51SGVpZ2h0ID0gX3RoaXMkcHJvcHMxMi5taW5NZW51SGVpZ2h0LFxuICAgICAgICBtYXhNZW51SGVpZ2h0ID0gX3RoaXMkcHJvcHMxMi5tYXhNZW51SGVpZ2h0LFxuICAgICAgICBtZW51SXNPcGVuID0gX3RoaXMkcHJvcHMxMi5tZW51SXNPcGVuLFxuICAgICAgICBtZW51UGxhY2VtZW50ID0gX3RoaXMkcHJvcHMxMi5tZW51UGxhY2VtZW50LFxuICAgICAgICBtZW51UG9zaXRpb24gPSBfdGhpcyRwcm9wczEyLm1lbnVQb3NpdGlvbixcbiAgICAgICAgbWVudVBvcnRhbFRhcmdldCA9IF90aGlzJHByb3BzMTIubWVudVBvcnRhbFRhcmdldCxcbiAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsID0gX3RoaXMkcHJvcHMxMi5tZW51U2hvdWxkQmxvY2tTY3JvbGwsXG4gICAgICAgIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldyA9IF90aGlzJHByb3BzMTIubWVudVNob3VsZFNjcm9sbEludG9WaWV3LFxuICAgICAgICBub09wdGlvbnNNZXNzYWdlID0gX3RoaXMkcHJvcHMxMi5ub09wdGlvbnNNZXNzYWdlLFxuICAgICAgICBvbk1lbnVTY3JvbGxUb1RvcCA9IF90aGlzJHByb3BzMTIub25NZW51U2Nyb2xsVG9Ub3AsXG4gICAgICAgIG9uTWVudVNjcm9sbFRvQm90dG9tID0gX3RoaXMkcHJvcHMxMi5vbk1lbnVTY3JvbGxUb0JvdHRvbTtcbiAgICAgIGlmICghbWVudUlzT3BlbikgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIFRPRE86IEludGVybmFsIE9wdGlvbiBUeXBlIGhlcmVcbiAgICAgIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIGlkKSB7XG4gICAgICAgIHZhciB0eXBlID0gcHJvcHMudHlwZSxcbiAgICAgICAgICBkYXRhID0gcHJvcHMuZGF0YSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc1NlbGVjdGVkID0gcHJvcHMuaXNTZWxlY3RlZCxcbiAgICAgICAgICBsYWJlbCA9IHByb3BzLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gcHJvcHMudmFsdWU7XG4gICAgICAgIHZhciBpc0ZvY3VzZWQgPSBmb2N1c2VkT3B0aW9uID09PSBkYXRhO1xuICAgICAgICB2YXIgb25Ib3ZlciA9IGlzRGlzYWJsZWQgPyB1bmRlZmluZWQgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNC5vbk9wdGlvbkhvdmVyKGRhdGEpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25TZWxlY3QgPSBpc0Rpc2FibGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQuc2VsZWN0T3B0aW9uKGRhdGEpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb3B0aW9uSWQgPSBcIlwiLmNvbmNhdChfdGhpczQuZ2V0RWxlbWVudElkKCdvcHRpb24nKSwgXCItXCIpLmNvbmNhdChpZCk7XG4gICAgICAgIHZhciBpbm5lclByb3BzID0ge1xuICAgICAgICAgIGlkOiBvcHRpb25JZCxcbiAgICAgICAgICBvbkNsaWNrOiBvblNlbGVjdCxcbiAgICAgICAgICBvbk1vdXNlTW92ZTogb25Ib3ZlcixcbiAgICAgICAgICBvbk1vdXNlT3Zlcjogb25Ib3ZlcixcbiAgICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgICAgcm9sZTogJ29wdGlvbicsXG4gICAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBfdGhpczQuaXNBcHBsZURldmljZSA/IHVuZGVmaW5lZCA6IGlzU2VsZWN0ZWQgLy8gaXMgbm90IHN1cHBvcnRlZCBvbiBBcHBsZSBkZXZpY2VzXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE9wdGlvbiwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICAgICAgICBrZXk6IG9wdGlvbklkLFxuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCxcbiAgICAgICAgICBpbm5lclJlZjogaXNGb2N1c2VkID8gX3RoaXM0LmdldEZvY3VzZWRPcHRpb25SZWYgOiB1bmRlZmluZWRcbiAgICAgICAgfSksIF90aGlzNC5mb3JtYXRPcHRpb25MYWJlbChwcm9wcy5kYXRhLCAnbWVudScpKTtcbiAgICAgIH07XG4gICAgICB2YXIgbWVudVVJO1xuICAgICAgaWYgKHRoaXMuaGFzT3B0aW9ucygpKSB7XG4gICAgICAgIG1lbnVVSSA9IHRoaXMuZ2V0Q2F0ZWdvcml6ZWRPcHRpb25zKCkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdmFyIF9kYXRhID0gaXRlbS5kYXRhLFxuICAgICAgICAgICAgICBvcHRpb25zID0gaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgICBncm91cEluZGV4ID0gaXRlbS5pbmRleDtcbiAgICAgICAgICAgIHZhciBncm91cElkID0gXCJcIi5jb25jYXQoX3RoaXM0LmdldEVsZW1lbnRJZCgnZ3JvdXAnKSwgXCItXCIpLmNvbmNhdChncm91cEluZGV4KTtcbiAgICAgICAgICAgIHZhciBoZWFkaW5nSWQgPSBcIlwiLmNvbmNhdChncm91cElkLCBcIi1oZWFkaW5nXCIpO1xuICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEdyb3VwLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgICAgICAga2V5OiBncm91cElkLFxuICAgICAgICAgICAgICBkYXRhOiBfZGF0YSxcbiAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgICAgSGVhZGluZzogR3JvdXBIZWFkaW5nLFxuICAgICAgICAgICAgICBoZWFkaW5nUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBpZDogaGVhZGluZ0lkLFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0uZGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYWJlbDogX3RoaXM0LmZvcm1hdEdyb3VwTGFiZWwoaXRlbS5kYXRhKVxuICAgICAgICAgICAgfSksIGl0ZW0ub3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKG9wdGlvbiwgXCJcIi5jb25jYXQoZ3JvdXBJbmRleCwgXCItXCIpLmNvbmNhdChvcHRpb24uaW5kZXgpKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ29wdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXIoaXRlbSwgXCJcIi5jb25jYXQoaXRlbS5pbmRleCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgICAgICB2YXIgbWVzc2FnZSA9IGxvYWRpbmdNZXNzYWdlKHtcbiAgICAgICAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWVzc2FnZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIG1lbnVVSSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvYWRpbmdNZXNzYWdlLCBjb21tb25Qcm9wcywgbWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX21lc3NhZ2UgPSBub09wdGlvbnNNZXNzYWdlKHtcbiAgICAgICAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoX21lc3NhZ2UgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBtZW51VUkgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb09wdGlvbnNNZXNzYWdlLCBjb21tb25Qcm9wcywgX21lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdmFyIG1lbnVQbGFjZW1lbnRQcm9wcyA9IHtcbiAgICAgICAgbWluTWVudUhlaWdodDogbWluTWVudUhlaWdodCxcbiAgICAgICAgbWF4TWVudUhlaWdodDogbWF4TWVudUhlaWdodCxcbiAgICAgICAgbWVudVBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgICAgbWVudVBvc2l0aW9uOiBtZW51UG9zaXRpb24sXG4gICAgICAgIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldzogbWVudVNob3VsZFNjcm9sbEludG9WaWV3XG4gICAgICB9O1xuICAgICAgdmFyIG1lbnVFbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudVBsYWNlciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCBtZW51UGxhY2VtZW50UHJvcHMpLCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgICAgdmFyIHJlZiA9IF9yZWY0LnJlZixcbiAgICAgICAgICBfcmVmNCRwbGFjZXJQcm9wcyA9IF9yZWY0LnBsYWNlclByb3BzLFxuICAgICAgICAgIHBsYWNlbWVudCA9IF9yZWY0JHBsYWNlclByb3BzLnBsYWNlbWVudCxcbiAgICAgICAgICBtYXhIZWlnaHQgPSBfcmVmNCRwbGFjZXJQcm9wcy5tYXhIZWlnaHQ7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZW51LCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIG1lbnVQbGFjZW1lbnRQcm9wcywge1xuICAgICAgICAgIGlubmVyUmVmOiByZWYsXG4gICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgb25Nb3VzZURvd246IF90aGlzNC5vbk1lbnVNb3VzZURvd24sXG4gICAgICAgICAgICBvbk1vdXNlTW92ZTogX3RoaXM0Lm9uTWVudU1vdXNlTW92ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbE1hbmFnZXIsIHtcbiAgICAgICAgICBjYXB0dXJlRW5hYmxlZDogY2FwdHVyZU1lbnVTY3JvbGwsXG4gICAgICAgICAgb25Ub3BBcnJpdmU6IG9uTWVudVNjcm9sbFRvVG9wLFxuICAgICAgICAgIG9uQm90dG9tQXJyaXZlOiBvbk1lbnVTY3JvbGxUb0JvdHRvbSxcbiAgICAgICAgICBsb2NrRW5hYmxlZDogbWVudVNob3VsZEJsb2NrU2Nyb2xsXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzY3JvbGxUYXJnZXRSZWYpIHtcbiAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudUxpc3QsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICAgICAgaW5uZXJSZWY6IGZ1bmN0aW9uIGlubmVyUmVmKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgIF90aGlzNC5nZXRNZW51TGlzdFJlZihpbnN0YW5jZSk7XG4gICAgICAgICAgICAgIHNjcm9sbFRhcmdldFJlZihpbnN0YW5jZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5uZXJQcm9wczoge1xuICAgICAgICAgICAgICByb2xlOiAnbGlzdGJveCcsXG4gICAgICAgICAgICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IGNvbW1vblByb3BzLmlzTXVsdGksXG4gICAgICAgICAgICAgIGlkOiBfdGhpczQuZ2V0RWxlbWVudElkKCdsaXN0Ym94JylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0LFxuICAgICAgICAgICAgZm9jdXNlZE9wdGlvbjogZm9jdXNlZE9wdGlvblxuICAgICAgICAgIH0pLCBtZW51VUkpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gcG9zaXRpb25pbmcgYmVoYXZpb3VyIGlzIGFsbW9zdCBpZGVudGljYWwgZm9yIHBvcnRhbGxlZCBhbmQgZml4ZWQsXG4gICAgICAvLyBzbyB3ZSB1c2UgdGhlIHNhbWUgY29tcG9uZW50LiB0aGUgYWN0dWFsIHBvcnRhbGxpbmcgbG9naWMgaXMgZm9ya2VkXG4gICAgICAvLyB3aXRoaW4gdGhlIGNvbXBvbmVudCBiYXNlZCBvbiBgbWVudVBvc2l0aW9uYFxuICAgICAgcmV0dXJuIG1lbnVQb3J0YWxUYXJnZXQgfHwgbWVudVBvc2l0aW9uID09PSAnZml4ZWQnID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVudVBvcnRhbCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGFwcGVuZFRvOiBtZW51UG9ydGFsVGFyZ2V0LFxuICAgICAgICBjb250cm9sRWxlbWVudDogdGhpcy5jb250cm9sUmVmLFxuICAgICAgICBtZW51UGxhY2VtZW50OiBtZW51UGxhY2VtZW50LFxuICAgICAgICBtZW51UG9zaXRpb246IG1lbnVQb3NpdGlvblxuICAgICAgfSksIG1lbnVFbGVtZW50KSA6IG1lbnVFbGVtZW50O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJGb3JtRmllbGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRm9ybUZpZWxkKCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMTMuZGVsaW1pdGVyLFxuICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMxMy5pc0Rpc2FibGVkLFxuICAgICAgICBpc011bHRpID0gX3RoaXMkcHJvcHMxMy5pc011bHRpLFxuICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHMxMy5uYW1lLFxuICAgICAgICByZXF1aXJlZCA9IF90aGlzJHByb3BzMTMucmVxdWlyZWQ7XG4gICAgICB2YXIgc2VsZWN0VmFsdWUgPSB0aGlzLnN0YXRlLnNlbGVjdFZhbHVlO1xuICAgICAgaWYgKHJlcXVpcmVkICYmICF0aGlzLmhhc1ZhbHVlKCkgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlcXVpcmVkSW5wdXQkMSwge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5vblZhbHVlSW5wdXRGb2N1c1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghbmFtZSB8fCBpc0Rpc2FibGVkKSByZXR1cm47XG4gICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICBpZiAoZGVsaW1pdGVyKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc2VsZWN0VmFsdWUubWFwKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczUuZ2V0T3B0aW9uVmFsdWUob3B0KTtcbiAgICAgICAgICB9KS5qb2luKGRlbGltaXRlcik7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSBzZWxlY3RWYWx1ZS5sZW5ndGggPiAwID8gc2VsZWN0VmFsdWUubWFwKGZ1bmN0aW9uIChvcHQsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAga2V5OiBcImktXCIuY29uY2F0KGkpLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3RoaXM1LmdldE9wdGlvblZhbHVlKG9wdClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pIDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBcIlwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF92YWx1ZSA9IHNlbGVjdFZhbHVlWzBdID8gdGhpcy5nZXRPcHRpb25WYWx1ZShzZWxlY3RWYWx1ZVswXSkgOiAnJztcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICB2YWx1ZTogX3ZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJMaXZlUmVnaW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckxpdmVSZWdpb24oKSB7XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzO1xuICAgICAgdmFyIF90aGlzJHN0YXRlNiA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGFyaWFTZWxlY3Rpb24gPSBfdGhpcyRzdGF0ZTYuYXJpYVNlbGVjdGlvbixcbiAgICAgICAgZm9jdXNlZE9wdGlvbiA9IF90aGlzJHN0YXRlNi5mb2N1c2VkT3B0aW9uLFxuICAgICAgICBmb2N1c2VkVmFsdWUgPSBfdGhpcyRzdGF0ZTYuZm9jdXNlZFZhbHVlLFxuICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRzdGF0ZTYuaXNGb2N1c2VkLFxuICAgICAgICBzZWxlY3RWYWx1ZSA9IF90aGlzJHN0YXRlNi5zZWxlY3RWYWx1ZTtcbiAgICAgIHZhciBmb2N1c2FibGVPcHRpb25zID0gdGhpcy5nZXRGb2N1c2FibGVPcHRpb25zKCk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGl2ZVJlZ2lvbiQxLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaWQ6IHRoaXMuZ2V0RWxlbWVudElkKCdsaXZlLXJlZ2lvbicpLFxuICAgICAgICBhcmlhU2VsZWN0aW9uOiBhcmlhU2VsZWN0aW9uLFxuICAgICAgICBmb2N1c2VkT3B0aW9uOiBmb2N1c2VkT3B0aW9uLFxuICAgICAgICBmb2N1c2VkVmFsdWU6IGZvY3VzZWRWYWx1ZSxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWQsXG4gICAgICAgIHNlbGVjdFZhbHVlOiBzZWxlY3RWYWx1ZSxcbiAgICAgICAgZm9jdXNhYmxlT3B0aW9uczogZm9jdXNhYmxlT3B0aW9ucyxcbiAgICAgICAgaXNBcHBsZURldmljZTogdGhpcy5pc0FwcGxlRGV2aWNlXG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q29tcG9uZW50czggPSB0aGlzLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgQ29udHJvbCA9IF90aGlzJGdldENvbXBvbmVudHM4LkNvbnRyb2wsXG4gICAgICAgIEluZGljYXRvcnNDb250YWluZXIgPSBfdGhpcyRnZXRDb21wb25lbnRzOC5JbmRpY2F0b3JzQ29udGFpbmVyLFxuICAgICAgICBTZWxlY3RDb250YWluZXIgPSBfdGhpcyRnZXRDb21wb25lbnRzOC5TZWxlY3RDb250YWluZXIsXG4gICAgICAgIFZhbHVlQ29udGFpbmVyID0gX3RoaXMkZ2V0Q29tcG9uZW50czguVmFsdWVDb250YWluZXI7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMxNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMTQuY2xhc3NOYW1lLFxuICAgICAgICBpZCA9IF90aGlzJHByb3BzMTQuaWQsXG4gICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczE0LmlzRGlzYWJsZWQsXG4gICAgICAgIG1lbnVJc09wZW4gPSBfdGhpcyRwcm9wczE0Lm1lbnVJc09wZW47XG4gICAgICB2YXIgaXNGb2N1c2VkID0gdGhpcy5zdGF0ZS5pc0ZvY3VzZWQ7XG4gICAgICB2YXIgY29tbW9uUHJvcHMgPSB0aGlzLmNvbW1vblByb3BzID0gdGhpcy5nZXRDb21tb25Qcm9wcygpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdENvbnRhaW5lciwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBpbm5lclByb3BzOiB7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd25cbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaXNGb2N1c2VkOiBpc0ZvY3VzZWRcbiAgICAgIH0pLCB0aGlzLnJlbmRlckxpdmVSZWdpb24oKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udHJvbCwgX2V4dGVuZHMoe30sIGNvbW1vblByb3BzLCB7XG4gICAgICAgIGlubmVyUmVmOiB0aGlzLmdldENvbnRyb2xSZWYsXG4gICAgICAgIGlubmVyUHJvcHM6IHtcbiAgICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkNvbnRyb2xNb3VzZURvd24sXG4gICAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNvbnRyb2xUb3VjaEVuZFxuICAgICAgICB9LFxuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCxcbiAgICAgICAgbWVudUlzT3BlbjogbWVudUlzT3BlblxuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFZhbHVlQ29udGFpbmVyLCBfZXh0ZW5kcyh7fSwgY29tbW9uUHJvcHMsIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgfSksIHRoaXMucmVuZGVyUGxhY2Vob2xkZXJPclZhbHVlKCksIHRoaXMucmVuZGVySW5wdXQoKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluZGljYXRvcnNDb250YWluZXIsIF9leHRlbmRzKHt9LCBjb21tb25Qcm9wcywge1xuICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICB9KSwgdGhpcy5yZW5kZXJDbGVhckluZGljYXRvcigpLCB0aGlzLnJlbmRlckxvYWRpbmdJbmRpY2F0b3IoKSwgdGhpcy5yZW5kZXJJbmRpY2F0b3JTZXBhcmF0b3IoKSwgdGhpcy5yZW5kZXJEcm9wZG93bkluZGljYXRvcigpKSksIHRoaXMucmVuZGVyTWVudSgpLCB0aGlzLnJlbmRlckZvcm1GaWVsZCgpKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgICAgdmFyIHByZXZQcm9wcyA9IHN0YXRlLnByZXZQcm9wcyxcbiAgICAgICAgY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGUgPSBzdGF0ZS5jbGVhckZvY3VzVmFsdWVPblVwZGF0ZSxcbiAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlID0gc3RhdGUuaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlLFxuICAgICAgICBhcmlhU2VsZWN0aW9uID0gc3RhdGUuYXJpYVNlbGVjdGlvbixcbiAgICAgICAgaXNGb2N1c2VkID0gc3RhdGUuaXNGb2N1c2VkLFxuICAgICAgICBwcmV2V2FzRm9jdXNlZCA9IHN0YXRlLnByZXZXYXNGb2N1c2VkLFxuICAgICAgICBpbnN0YW5jZVByZWZpeCA9IHN0YXRlLmluc3RhbmNlUHJlZml4O1xuICAgICAgdmFyIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgICAgICBtZW51SXNPcGVuID0gcHJvcHMubWVudUlzT3BlbixcbiAgICAgICAgaW5wdXRWYWx1ZSA9IHByb3BzLmlucHV0VmFsdWUsXG4gICAgICAgIGlzTXVsdGkgPSBwcm9wcy5pc011bHRpO1xuICAgICAgdmFyIHNlbGVjdFZhbHVlID0gY2xlYW5WYWx1ZSh2YWx1ZSk7XG4gICAgICB2YXIgbmV3TWVudU9wdGlvbnNTdGF0ZSA9IHt9O1xuICAgICAgaWYgKHByZXZQcm9wcyAmJiAodmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSB8fCBvcHRpb25zICE9PSBwcmV2UHJvcHMub3B0aW9ucyB8fCBtZW51SXNPcGVuICE9PSBwcmV2UHJvcHMubWVudUlzT3BlbiB8fCBpbnB1dFZhbHVlICE9PSBwcmV2UHJvcHMuaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnMgPSBtZW51SXNPcGVuID8gYnVpbGRGb2N1c2FibGVPcHRpb25zKHByb3BzLCBzZWxlY3RWYWx1ZSkgOiBbXTtcbiAgICAgICAgdmFyIGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzID0gbWVudUlzT3BlbiA/IGJ1aWxkRm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMoYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMocHJvcHMsIHNlbGVjdFZhbHVlKSwgXCJcIi5jb25jYXQoaW5zdGFuY2VQcmVmaXgsIFwiLW9wdGlvblwiKSkgOiBbXTtcbiAgICAgICAgdmFyIGZvY3VzZWRWYWx1ZSA9IGNsZWFyRm9jdXNWYWx1ZU9uVXBkYXRlID8gZ2V0TmV4dEZvY3VzZWRWYWx1ZShzdGF0ZSwgc2VsZWN0VmFsdWUpIDogbnVsbDtcbiAgICAgICAgdmFyIGZvY3VzZWRPcHRpb24gPSBnZXROZXh0Rm9jdXNlZE9wdGlvbihzdGF0ZSwgZm9jdXNhYmxlT3B0aW9ucyk7XG4gICAgICAgIHZhciBmb2N1c2VkT3B0aW9uSWQgPSBnZXRGb2N1c2VkT3B0aW9uSWQoZm9jdXNhYmxlT3B0aW9uc1dpdGhJZHMsIGZvY3VzZWRPcHRpb24pO1xuICAgICAgICBuZXdNZW51T3B0aW9uc1N0YXRlID0ge1xuICAgICAgICAgIHNlbGVjdFZhbHVlOiBzZWxlY3RWYWx1ZSxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uOiBmb2N1c2VkT3B0aW9uLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb25JZDogZm9jdXNlZE9wdGlvbklkLFxuICAgICAgICAgIGZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzOiBmb2N1c2FibGVPcHRpb25zV2l0aElkcyxcbiAgICAgICAgICBmb2N1c2VkVmFsdWU6IGZvY3VzZWRWYWx1ZSxcbiAgICAgICAgICBjbGVhckZvY3VzVmFsdWVPblVwZGF0ZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHNvbWUgdXBkYXRlcyBzaG91bGQgdG9nZ2xlIHRoZSBzdGF0ZSBvZiB0aGUgaW5wdXQgdmlzaWJpbGl0eVxuICAgICAgdmFyIG5ld0lucHV0SXNIaWRkZW5TdGF0ZSA9IGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSAhPSBudWxsICYmIHByb3BzICE9PSBwcmV2UHJvcHMgPyB7XG4gICAgICAgIGlucHV0SXNIaWRkZW46IGlucHV0SXNIaWRkZW5BZnRlclVwZGF0ZSxcbiAgICAgICAgaW5wdXRJc0hpZGRlbkFmdGVyVXBkYXRlOiB1bmRlZmluZWRcbiAgICAgIH0gOiB7fTtcbiAgICAgIHZhciBuZXdBcmlhU2VsZWN0aW9uID0gYXJpYVNlbGVjdGlvbjtcbiAgICAgIHZhciBoYXNLZXB0Rm9jdXMgPSBpc0ZvY3VzZWQgJiYgcHJldldhc0ZvY3VzZWQ7XG4gICAgICBpZiAoaXNGb2N1c2VkICYmICFoYXNLZXB0Rm9jdXMpIHtcbiAgICAgICAgLy8gSWYgYHZhbHVlYCBvciBgZGVmYXVsdFZhbHVlYCBwcm9wcyBhcmUgbm90IGVtcHR5IHRoZW4gYW5ub3VuY2UgdGhlbVxuICAgICAgICAvLyB3aGVuIHRoZSBTZWxlY3QgaXMgaW5pdGlhbGx5IGZvY3VzZWRcbiAgICAgICAgbmV3QXJpYVNlbGVjdGlvbiA9IHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVUZXJuYXJ5KGlzTXVsdGksIHNlbGVjdFZhbHVlLCBzZWxlY3RWYWx1ZVswXSB8fCBudWxsKSxcbiAgICAgICAgICBvcHRpb25zOiBzZWxlY3RWYWx1ZSxcbiAgICAgICAgICBhY3Rpb246ICdpbml0aWFsLWlucHV0LWZvY3VzJ1xuICAgICAgICB9O1xuICAgICAgICBoYXNLZXB0Rm9jdXMgPSAhcHJldldhc0ZvY3VzZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSAnaW5pdGlhbC1pbnB1dC1mb2N1cycgYWN0aW9uIGhhcyBiZWVuIHNldCBhbHJlYWR5XG4gICAgICAvLyB0aGVuIHJlc2V0IHRoZSBhcmlhU2VsZWN0aW9uIHRvIG51bGxcbiAgICAgIGlmICgoYXJpYVNlbGVjdGlvbiA9PT0gbnVsbCB8fCBhcmlhU2VsZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcmlhU2VsZWN0aW9uLmFjdGlvbikgPT09ICdpbml0aWFsLWlucHV0LWZvY3VzJykge1xuICAgICAgICBuZXdBcmlhU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbmV3TWVudU9wdGlvbnNTdGF0ZSksIG5ld0lucHV0SXNIaWRkZW5TdGF0ZSksIHt9LCB7XG4gICAgICAgIHByZXZQcm9wczogcHJvcHMsXG4gICAgICAgIGFyaWFTZWxlY3Rpb246IG5ld0FyaWFTZWxlY3Rpb24sXG4gICAgICAgIHByZXZXYXNGb2N1c2VkOiBoYXNLZXB0Rm9jdXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gU2VsZWN0O1xufShDb21wb25lbnQpO1xuU2VsZWN0LmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxuZXhwb3J0IHsgU2VsZWN0IGFzIFMsIGRlZmF1bHRQcm9wcyBhcyBhLCBnZXRPcHRpb25MYWJlbCQxIGFzIGIsIGNyZWF0ZUZpbHRlciBhcyBjLCBkZWZhdWx0VGhlbWUgYXMgZCwgZ2V0T3B0aW9uVmFsdWUkMSBhcyBnLCBtZXJnZVN0eWxlcyBhcyBtIH07XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH0pO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcykge1xuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkpKSB7XG4gICAgICBuZXdQcm9wc1tfa2V5XSA9IHByb3BzW19rZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBSdW50aW1lIGxhYmVsaW5nIGlzIGFuIG9wdC1pbiBmZWF0dXJlIGJlY2F1c2U6XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIgX2tleTIgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkyKSAmJiBfa2V5MiAhPT0gJ2NzcycgJiYgX2tleTIgIT09IHR5cGVQcm9wTmFtZSAmJiAoIWlzRGV2ZWxvcG1lbnQgKSkge1xuICAgICAgbmV3UHJvcHNbX2tleTJdID0gcHJvcHNbX2tleTJdO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsInZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwg4p2k77iPXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG5cbmZ1bmN0aW9uIHNoZWV0Rm9yVGFnKHRhZykge1xuICBpZiAodGFnLnNoZWV0KSB7XG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH0gLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIHJldHVybiB3aXRoIGEgdmFsdWVcbiAgLy8gVFMgY2FuJ3QgdW5kZXJzdGFuZCBpdCB0aG91Z2ggc28gd2UgbWFrZSBpdCBzdG9wIGNvbXBsYWluaW5nIGhlcmVcblxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBvcHRpb25zLmtleSk7XG5cbiAgaWYgKG9wdGlvbnMubm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgb3B0aW9ucy5ub25jZSk7XG4gIH1cblxuICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICByZXR1cm4gdGFnO1xufVxuXG52YXIgU3R5bGVTaGVldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8vIFVzaW5nIE5vZGUgaW5zdGVhZCBvZiBIVE1MRWxlbWVudCBzaW5jZSBjb250YWluZXIgbWF5IGJlIGEgU2hhZG93Um9vdFxuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5faW5zZXJ0VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIGJlZm9yZTtcblxuICAgICAgaWYgKF90aGlzLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChfdGhpcy5pbnNlcnRpb25Qb2ludCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmluc2VydGlvblBvaW50Lm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2UgaWYgKF90aGlzLnByZXBlbmQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5iZWZvcmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZm9yZSA9IF90aGlzLnRhZ3NbX3RoaXMudGFncy5sZW5ndGggLSAxXS5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZSh0YWcsIGJlZm9yZSk7XG5cbiAgICAgIF90aGlzLnRhZ3MucHVzaCh0YWcpO1xuICAgIH07XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gb3B0aW9ucy5zcGVlZHkgPT09IHVuZGVmaW5lZCA/ICFpc0RldmVsb3BtZW50IDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdGhpcy50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIF90YWckcGFyZW50Tm9kZTtcblxuICAgICAgcmV0dXJuIChfdGFnJHBhcmVudE5vZGUgPSB0YWcucGFyZW50Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90YWckcGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iLCIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufVxuXG5leHBvcnQgeyBtZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbiBjcmVhdGVDYWNoZShvcHRpb25zKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzdHlsaXNQbHVnaW5zID0gb3B0aW9ucy5zdHlsaXNQbHVnaW5zIHx8IGRlZmF1bHRTdHlsaXNQbHVnaW5zO1xuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAgdmFyIG9tbmlwcmVzZW50UGx1Z2lucyA9IFtjb21wYXQsIHJlbW92ZUxhYmVsXTtcblxuICB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGUgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUNhY2hlIGFzIGRlZmF1bHQgfTtcbiIsInZhciBpc0Jyb3dzZXIgPSB0cnVlO1xuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICBzY2FsZTogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudFNlbGVjdG9yID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAoY29tcG9uZW50U2VsZWN0b3IuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICByZXR1cm4gY29tcG9uZW50U2VsZWN0b3I7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIHZhciBrZXlmcmFtZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChrZXlmcmFtZXMuYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGtleWZyYW1lcy5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBrZXlmcmFtZXMuc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ga2V5ZnJhbWVzLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWRTdHlsZXMubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyArIFwiO1wiO1xuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO3tdKylcXHMqKDt8JCkvZzsgLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cbnZhciBjdXJzb3I7XG5mdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhc1RlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICBzdHlsZXMgKz0gYXNUZW1wbGF0ZVN0cmluZ3NBcnJbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZVN0cmluZ3NBcnIgPSBzdHJpbmdzO1xuXG4gICAgICBzdHlsZXMgKz0gdGVtcGxhdGVTdHJpbmdzQXJyW2ldO1xuICAgIH1cbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIHN5bmNGYWxsYmFjayA9IGZ1bmN0aW9uIHN5bmNGYWxsYmFjayhjcmVhdGUpIHtcbiAgcmV0dXJuIGNyZWF0ZSgpO1xufTtcblxudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddID8gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gOiBmYWxzZTtcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgUmVhY3QudXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzRGV2ZWxvcG1lbnQgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC1mMGRlOTY4ZS5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyBDIGFzIENhY2hlUHJvdmlkZXIsIFQgYXMgVGhlbWVDb250ZXh0LCBhIGFzIFRoZW1lUHJvdmlkZXIsIF8gYXMgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlLCB1IGFzIHVzZVRoZW1lLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIGIgYXMgd2l0aFRoZW1lIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtZjBkZTk2OGUuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcywgZ2V0UmVnaXN0ZXJlZFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSA9IG5ldyBBcnJheShhcmdzTGVuZ3RoKTtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzBdID0gRW1vdGlvbjtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzFdID0gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3NMZW5ndGg7IGkrKykge1xuICAgIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVtpXSA9IGFyZ3NbaV07XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxuKGZ1bmN0aW9uIChfanN4KSB7XG4gIHZhciBKU1g7XG5cbiAgKGZ1bmN0aW9uIChfSlNYKSB7fSkoSlNYIHx8IChKU1ggPSBfanN4LkpTWCB8fCAoX2pzeC5KU1ggPSB7fSkpKTtcbn0pKGpzeCB8fCAoanN4ID0ge30pKTtcblxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcblxuICB2YXIgc3R5bGVzID0gcHJvcHMuc3R5bGVzO1xuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSwgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuICAvLyBidXQgaXQgaXMgYmFzZWQgb24gYSBjb25zdGFudCB0aGF0IHdpbGwgbmV2ZXIgY2hhbmdlIGF0IHJ1bnRpbWVcbiAgLy8gaXQncyBlZmZlY3RpdmVseSBsaWtlIGhhdmluZyB0d28gaW1wbGVtZW50YXRpb25zIGFuZCBzd2l0Y2hpbmcgdGhlbSBvdXRcbiAgLy8gc28gaXQncyBub3QgYWN0dWFsbHkgYnJlYWtpbmcgYW55dGhpbmdcblxuXG4gIHZhciBzaGVldFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBrZXkgPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWxcIjsgLy8gdXNlIGNhc2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMjY3NVxuXG4gICAgdmFyIHNoZWV0ID0gbmV3IGNhY2hlLnNoZWV0LmNvbnN0cnVjdG9yKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbm9uY2U6IGNhY2hlLnNoZWV0Lm5vbmNlLFxuICAgICAgY29udGFpbmVyOiBjYWNoZS5zaGVldC5jb250YWluZXIsXG4gICAgICBzcGVlZHk6IGNhY2hlLnNoZWV0LmlzU3BlZWR5XG4gICAgfSk7XG4gICAgdmFyIHJlaHlkcmF0aW5nID0gZmFsc2U7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IFwiQGtleWZyYW1lcyBcIiArIG5hbWUgKyBcIntcIiArIGluc2VydGFibGUuc3R5bGVzICsgXCJ9XCIsXG4gICAgYW5pbTogMSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gXCJfRU1PX1wiICsgdGhpcy5uYW1lICsgXCJfXCIgKyB0aGlzLnN0eWxlcyArIFwiX0VNT19cIjtcbiAgICB9XG4gIH07XG59XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iLCJmdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKGUsIHQpIHtcbiAgcmV0dXJuIHQgfHwgKHQgPSBlLnNsaWNlKDApKSwgT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCB7XG4gICAgcmF3OiB7XG4gICAgICB2YWx1ZTogT2JqZWN0LmZyZWV6ZSh0KVxuICAgIH1cbiAgfSkpO1xufVxuZXhwb3J0IHsgX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcywgY3NzIGFzIGNzcyQyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXknO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgX3R5cGVvZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YnO1xuaW1wb3J0IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdGFnZ2VkVGVtcGxhdGVMaXRlcmFsJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgYXV0b1VwZGF0ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHVzZUxheW91dEVmZmVjdCBmcm9tICd1c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0JztcblxudmFyIF9leGNsdWRlZCQ0ID0gW1wiY2xhc3NOYW1lXCIsIFwiY2xlYXJWYWx1ZVwiLCBcImN4XCIsIFwiZ2V0U3R5bGVzXCIsIFwiZ2V0Q2xhc3NOYW1lc1wiLCBcImdldFZhbHVlXCIsIFwiaGFzVmFsdWVcIiwgXCJpc011bHRpXCIsIFwiaXNSdGxcIiwgXCJvcHRpb25zXCIsIFwic2VsZWN0T3B0aW9uXCIsIFwic2VsZWN0UHJvcHNcIiwgXCJzZXRWYWx1ZVwiLCBcInRoZW1lXCJdO1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBOTyBPUFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENsYXNzIE5hbWUgUHJlZml4ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29tcG9uZW50IHN0YXRlIGZvciBzdHlsaW5nIHdpdGggY2xhc3MgbmFtZXMuXG5cbiBFeHBlY3RzIGFuIGFycmF5IG9mIHN0cmluZ3MgT1IgYSBzdHJpbmcvb2JqZWN0IHBhaXI6XG4gLSBjbGFzc05hbWUoWydjb21wJywgJ2NvbXAtYXJnJywgJ2NvbXAtYXJnLTInXSlcbiAgIEByZXR1cm5zICdyZWFjdC1zZWxlY3RfX2NvbXAgcmVhY3Qtc2VsZWN0X19jb21wLWFyZyByZWFjdC1zZWxlY3RfX2NvbXAtYXJnLTInXG4gLSBjbGFzc05hbWUoJ2NvbXAnLCB7IHNvbWU6IHRydWUsIHN0YXRlOiBmYWxzZSB9KVxuICAgQHJldHVybnMgJ3JlYWN0LXNlbGVjdF9fY29tcCByZWFjdC1zZWxlY3RfX2NvbXAtLXNvbWUnXG4qL1xuZnVuY3Rpb24gYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH0gZWxzZSBpZiAobmFtZVswXSA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIHByZWZpeCArIG5hbWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdfXycgKyBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiBjbGFzc05hbWVzKHByZWZpeCwgc3RhdGUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzTmFtZUxpc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGNsYXNzTmFtZUxpc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIHZhciBhcnIgPSBbXS5jb25jYXQoY2xhc3NOYW1lTGlzdCk7XG4gIGlmIChzdGF0ZSAmJiBwcmVmaXgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIHN0YXRlW2tleV0pIHtcbiAgICAgICAgYXJyLnB1c2goXCJcIi5jb25jYXQoYXBwbHlQcmVmaXhUb05hbWUocHJlZml4LCBrZXkpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH0pLm1hcChmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBTdHJpbmcoaSkudHJpbSgpO1xuICB9KS5qb2luKCcgJyk7XG59XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENsZWFuIFZhbHVlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGNsZWFuVmFsdWUgPSBmdW5jdGlvbiBjbGVhblZhbHVlKHZhbHVlKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkgcmV0dXJuIFt2YWx1ZV07XG4gIHJldHVybiBbXTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ2xlYW4gQ29tbW9uIFByb3BzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGNsZWFuQ29tbW9uUHJvcHMgPSBmdW5jdGlvbiBjbGVhbkNvbW1vblByb3BzKHByb3BzKSB7XG4gIC8vY2xhc3NOYW1lXG4gIHByb3BzLmNsYXNzTmFtZTtcbiAgICBwcm9wcy5jbGVhclZhbHVlO1xuICAgIHByb3BzLmN4O1xuICAgIHByb3BzLmdldFN0eWxlcztcbiAgICBwcm9wcy5nZXRDbGFzc05hbWVzO1xuICAgIHByb3BzLmdldFZhbHVlO1xuICAgIHByb3BzLmhhc1ZhbHVlO1xuICAgIHByb3BzLmlzTXVsdGk7XG4gICAgcHJvcHMuaXNSdGw7XG4gICAgcHJvcHMub3B0aW9ucztcbiAgICBwcm9wcy5zZWxlY3RPcHRpb247XG4gICAgcHJvcHMuc2VsZWN0UHJvcHM7XG4gICAgcHJvcHMuc2V0VmFsdWU7XG4gICAgcHJvcHMudGhlbWU7XG4gICAgdmFyIGlubmVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCQ0KTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIGlubmVyUHJvcHMpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHZXQgU3R5bGUgUHJvcHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZ2V0U3R5bGVQcm9wcyA9IGZ1bmN0aW9uIGdldFN0eWxlUHJvcHMocHJvcHMsIG5hbWUsIGNsYXNzTmFtZXNTdGF0ZSkge1xuICB2YXIgY3ggPSBwcm9wcy5jeCxcbiAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgZ2V0Q2xhc3NOYW1lcyA9IHByb3BzLmdldENsYXNzTmFtZXMsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICByZXR1cm4ge1xuICAgIGNzczogZ2V0U3R5bGVzKG5hbWUsIHByb3BzKSxcbiAgICBjbGFzc05hbWU6IGN4KGNsYXNzTmFtZXNTdGF0ZSAhPT0gbnVsbCAmJiBjbGFzc05hbWVzU3RhdGUgIT09IHZvaWQgMCA/IGNsYXNzTmFtZXNTdGF0ZSA6IHt9LCBnZXRDbGFzc05hbWVzKG5hbWUsIHByb3BzKSwgY2xhc3NOYW1lKVxuICB9O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIYW5kbGUgSW5wdXQgQ2hhbmdlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaGFuZGxlSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSwgYWN0aW9uTWV0YSwgb25JbnB1dENoYW5nZSkge1xuICBpZiAob25JbnB1dENoYW5nZSkge1xuICAgIHZhciBfbmV3VmFsdWUgPSBvbklucHV0Q2hhbmdlKGlucHV0VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIGlmICh0eXBlb2YgX25ld1ZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIF9uZXdWYWx1ZTtcbiAgfVxuICByZXR1cm4gaW5wdXRWYWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY3JvbGwgSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzRG9jdW1lbnRFbGVtZW50KGVsKSB7XG4gIHJldHVybiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBkb2N1bWVudC5ib2R5LCB3aW5kb3ddLmluZGV4T2YoZWwpID4gLTE7XG59XG5cbi8vIE5vcm1hbGl6ZWQgU2Nyb2xsIFRvcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRIZWlnaHQoZWwpIHtcbiAgaWYgKGlzRG9jdW1lbnRFbGVtZW50KGVsKSkge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIGVsLmNsaWVudEhlaWdodDtcbn1cblxuLy8gTm9ybWFsaXplZCBzY3JvbGxUbyAmIHNjcm9sbFRvcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcChlbCkge1xuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgfVxuICByZXR1cm4gZWwuc2Nyb2xsVG9wO1xufVxuZnVuY3Rpb24gc2Nyb2xsVG8oZWwsIHRvcCkge1xuICAvLyB3aXRoIGEgc2Nyb2xsIGRpc3RhbmNlLCB3ZSBwZXJmb3JtIHNjcm9sbCBvbiB0aGUgZWxlbWVudFxuICBpZiAoaXNEb2N1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIHRvcCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsLnNjcm9sbFRvcCA9IHRvcDtcbn1cblxuLy8gR2V0IFNjcm9sbCBQYXJlbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgZXhjbHVkZVN0YXRpY1BhcmVudCA9IHN0eWxlLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnO1xuICB2YXIgb3ZlcmZsb3dSeCA9IC8oYXV0b3xzY3JvbGwpLztcbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBmb3IgKHZhciBwYXJlbnQgPSBlbGVtZW50OyBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDspIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBpZiAoZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBzdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSeC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cblxuLy8gQW5pbWF0ZWQgU2Nyb2xsIFRvXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gIEBwYXJhbSB0OiB0aW1lIChlbGFwc2VkKVxuICBAcGFyYW0gYjogaW5pdGlhbCB2YWx1ZVxuICBAcGFyYW0gYzogYW1vdW50IG9mIGNoYW5nZVxuICBAcGFyYW0gZDogZHVyYXRpb25cbiovXG5mdW5jdGlvbiBlYXNlT3V0Q3ViaWModCwgYiwgYywgZCkge1xuICByZXR1cm4gYyAqICgodCA9IHQgLyBkIC0gMSkgKiB0ICogdCArIDEpICsgYjtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVkU2Nyb2xsVG8oZWxlbWVudCwgdG8pIHtcbiAgdmFyIGR1cmF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAyMDA7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbm9vcDtcbiAgdmFyIHN0YXJ0ID0gZ2V0U2Nyb2xsVG9wKGVsZW1lbnQpO1xuICB2YXIgY2hhbmdlID0gdG8gLSBzdGFydDtcbiAgdmFyIGluY3JlbWVudCA9IDEwO1xuICB2YXIgY3VycmVudFRpbWUgPSAwO1xuICBmdW5jdGlvbiBhbmltYXRlU2Nyb2xsKCkge1xuICAgIGN1cnJlbnRUaW1lICs9IGluY3JlbWVudDtcbiAgICB2YXIgdmFsID0gZWFzZU91dEN1YmljKGN1cnJlbnRUaW1lLCBzdGFydCwgY2hhbmdlLCBkdXJhdGlvbik7XG4gICAgc2Nyb2xsVG8oZWxlbWVudCwgdmFsKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPCBkdXJhdGlvbikge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlU2Nyb2xsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIGFuaW1hdGVTY3JvbGwoKTtcbn1cblxuLy8gU2Nyb2xsIEludG8gVmlld1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KG1lbnVFbCwgZm9jdXNlZEVsKSB7XG4gIHZhciBtZW51UmVjdCA9IG1lbnVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGZvY3VzZWRSZWN0ID0gZm9jdXNlZEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgb3ZlclNjcm9sbCA9IGZvY3VzZWRFbC5vZmZzZXRIZWlnaHQgLyAzO1xuICBpZiAoZm9jdXNlZFJlY3QuYm90dG9tICsgb3ZlclNjcm9sbCA+IG1lbnVSZWN0LmJvdHRvbSkge1xuICAgIHNjcm9sbFRvKG1lbnVFbCwgTWF0aC5taW4oZm9jdXNlZEVsLm9mZnNldFRvcCArIGZvY3VzZWRFbC5jbGllbnRIZWlnaHQgLSBtZW51RWwub2Zmc2V0SGVpZ2h0ICsgb3ZlclNjcm9sbCwgbWVudUVsLnNjcm9sbEhlaWdodCkpO1xuICB9IGVsc2UgaWYgKGZvY3VzZWRSZWN0LnRvcCAtIG92ZXJTY3JvbGwgPCBtZW51UmVjdC50b3ApIHtcbiAgICBzY3JvbGxUbyhtZW51RWwsIE1hdGgubWF4KGZvY3VzZWRFbC5vZmZzZXRUb3AgLSBvdmVyU2Nyb2xsLCAwKSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHZXQgYm91bmRpbmcgY2xpZW50IG9iamVjdFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIGNhbm5vdCBnZXQga2V5cyB1c2luZyBhcnJheSBub3RhdGlvbiB3aXRoIERPTVJlY3RcbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50T2JqKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvdWNoIENhcGFiaWxpdHkgRGV0ZWN0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBpc1RvdWNoQ2FwYWJsZSgpIHtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudC5jcmVhdGVFdmVudCgnVG91Y2hFdmVudCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTW9iaWxlIERldmljZSBEZXRlY3RvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGlzTW9iaWxlRGV2aWNlKCkge1xuICB0cnkge1xuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXNzaXZlIEV2ZW50IERldGVjdG9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JhZmdyYXBoL2RldGVjdC1pdC9ibG9iL21haW4vc3JjL2luZGV4LnRzI0wxOS1MMzZcbnZhciBwYXNzaXZlT3B0aW9uQWNjZXNzZWQgPSBmYWxzZTtcbnZhciBvcHRpb25zID0ge1xuICBnZXQgcGFzc2l2ZSgpIHtcbiAgICByZXR1cm4gcGFzc2l2ZU9wdGlvbkFjY2Vzc2VkID0gdHJ1ZTtcbiAgfVxufTtcbi8vIGNoZWNrIGZvciBTU1JcbnZhciB3ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTtcbmlmICh3LmFkZEV2ZW50TGlzdGVuZXIgJiYgdy5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gIHcuYWRkRXZlbnRMaXN0ZW5lcigncCcsIG5vb3AsIG9wdGlvbnMpO1xuICB3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3AnLCBub29wLCBmYWxzZSk7XG59XG52YXIgc3VwcG9ydHNQYXNzaXZlRXZlbnRzID0gcGFzc2l2ZU9wdGlvbkFjY2Vzc2VkO1xuZnVuY3Rpb24gbm90TnVsbGlzaChpdGVtKSB7XG4gIHJldHVybiBpdGVtICE9IG51bGw7XG59XG5mdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xufVxuZnVuY3Rpb24gdmFsdWVUZXJuYXJ5KGlzTXVsdGksIG11bHRpVmFsdWUsIHNpbmdsZVZhbHVlKSB7XG4gIHJldHVybiBpc011bHRpID8gbXVsdGlWYWx1ZSA6IHNpbmdsZVZhbHVlO1xufVxuZnVuY3Rpb24gc2luZ2xlVmFsdWVBc1ZhbHVlKHNpbmdsZVZhbHVlKSB7XG4gIHJldHVybiBzaW5nbGVWYWx1ZTtcbn1cbmZ1bmN0aW9uIG11bHRpVmFsdWVBc1ZhbHVlKG11bHRpVmFsdWUpIHtcbiAgcmV0dXJuIG11bHRpVmFsdWU7XG59XG52YXIgcmVtb3ZlUHJvcHMgPSBmdW5jdGlvbiByZW1vdmVQcm9wcyhwcm9wc09iaikge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BlcnRpZXMgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgIHByb3BlcnRpZXNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cbiAgdmFyIHByb3BzTWFwID0gT2JqZWN0LmVudHJpZXMocHJvcHNPYmopLmZpbHRlcihmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAga2V5ID0gX3JlZjJbMF07XG4gICAgcmV0dXJuICFwcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSk7XG4gIH0pO1xuICByZXR1cm4gcHJvcHNNYXAucmVkdWNlKGZ1bmN0aW9uIChuZXdQcm9wcywgX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICBrZXkgPSBfcmVmNFswXSxcbiAgICAgIHZhbCA9IF9yZWY0WzFdO1xuICAgIG5ld1Byb3BzW2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIG5ld1Byb3BzO1xuICB9LCB7fSk7XG59O1xuXG52YXIgX2V4Y2x1ZGVkJDMgPSBbXCJjaGlsZHJlblwiLCBcImlubmVyUHJvcHNcIl0sXG4gIF9leGNsdWRlZDIkMSA9IFtcImNoaWxkcmVuXCIsIFwiaW5uZXJQcm9wc1wiXTtcbmZ1bmN0aW9uIGdldE1lbnVQbGFjZW1lbnQoX3JlZikge1xuICB2YXIgcHJlZmVycmVkTWF4SGVpZ2h0ID0gX3JlZi5tYXhIZWlnaHQsXG4gICAgbWVudUVsID0gX3JlZi5tZW51RWwsXG4gICAgbWluSGVpZ2h0ID0gX3JlZi5taW5IZWlnaHQsXG4gICAgcHJlZmVycmVkUGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQsXG4gICAgc2hvdWxkU2Nyb2xsID0gX3JlZi5zaG91bGRTY3JvbGwsXG4gICAgaXNGaXhlZFBvc2l0aW9uID0gX3JlZi5pc0ZpeGVkUG9zaXRpb24sXG4gICAgY29udHJvbEhlaWdodCA9IF9yZWYuY29udHJvbEhlaWdodDtcbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChtZW51RWwpO1xuICB2YXIgZGVmYXVsdFN0YXRlID0ge1xuICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgfTtcblxuICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZywgcmV0dXJuIGRlZmF1bHQgc3RhdGVcbiAgaWYgKCFtZW51RWwgfHwgIW1lbnVFbC5vZmZzZXRQYXJlbnQpIHJldHVybiBkZWZhdWx0U3RhdGU7XG5cbiAgLy8gd2UgY2FuJ3QgdHJ1c3QgYHNjcm9sbFBhcmVudC5zY3JvbGxIZWlnaHRgIC0tPiBpdCBtYXkgaW5jcmVhc2Ugd2hlblxuICAvLyB0aGUgbWVudSBpcyByZW5kZXJlZFxuICB2YXIgX3Njcm9sbFBhcmVudCRnZXRCb3VuID0gc2Nyb2xsUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIHNjcm9sbEhlaWdodCA9IF9zY3JvbGxQYXJlbnQkZ2V0Qm91bi5oZWlnaHQ7XG4gIHZhciBfbWVudUVsJGdldEJvdW5kaW5nQ2wgPSBtZW51RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgbWVudUJvdHRvbSA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC5ib3R0b20sXG4gICAgbWVudUhlaWdodCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC5oZWlnaHQsXG4gICAgbWVudVRvcCA9IF9tZW51RWwkZ2V0Qm91bmRpbmdDbC50b3A7XG4gIHZhciBfbWVudUVsJG9mZnNldFBhcmVudCQgPSBtZW51RWwub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgIGNvbnRhaW5lclRvcCA9IF9tZW51RWwkb2Zmc2V0UGFyZW50JC50b3A7XG4gIHZhciB2aWV3SGVpZ2h0ID0gaXNGaXhlZFBvc2l0aW9uID8gd2luZG93LmlubmVySGVpZ2h0IDogbm9ybWFsaXplZEhlaWdodChzY3JvbGxQYXJlbnQpO1xuICB2YXIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsVG9wKHNjcm9sbFBhcmVudCk7XG4gIHZhciBtYXJnaW5Cb3R0b20gPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luQm90dG9tLCAxMCk7XG4gIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG1lbnVFbCkubWFyZ2luVG9wLCAxMCk7XG4gIHZhciB2aWV3U3BhY2VBYm92ZSA9IGNvbnRhaW5lclRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHZpZXdTcGFjZUJlbG93ID0gdmlld0hlaWdodCAtIG1lbnVUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUFib3ZlID0gdmlld1NwYWNlQWJvdmUgKyBzY3JvbGxUb3A7XG4gIHZhciBzY3JvbGxTcGFjZUJlbG93ID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gbWVudVRvcDtcbiAgdmFyIHNjcm9sbERvd24gPSBtZW51Qm90dG9tIC0gdmlld0hlaWdodCArIHNjcm9sbFRvcCArIG1hcmdpbkJvdHRvbTtcbiAgdmFyIHNjcm9sbFVwID0gc2Nyb2xsVG9wICsgbWVudVRvcCAtIG1hcmdpblRvcDtcbiAgdmFyIHNjcm9sbER1cmF0aW9uID0gMTYwO1xuICBzd2l0Y2ggKHByZWZlcnJlZFBsYWNlbWVudCkge1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAvLyAxOiB0aGUgbWVudSB3aWxsIGZpdCwgZG8gbm90aGluZ1xuICAgICAgaWYgKHZpZXdTcGFjZUJlbG93ID49IG1lbnVIZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDI6IHRoZSBtZW51IHdpbGwgZml0LCBpZiBzY3JvbGxlZFxuICAgICAgaWYgKHNjcm9sbFNwYWNlQmVsb3cgPj0gbWVudUhlaWdodCAmJiAhaXNGaXhlZFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBhbmltYXRlZFNjcm9sbFRvKHNjcm9sbFBhcmVudCwgc2Nyb2xsRG93biwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAzOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgY29uc3RyYWluZWRcbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQmVsb3cgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VCZWxvdyA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxEb3duLCBzY3JvbGxEdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSB3YW50IHRvIHByb3ZpZGUgYXMgbXVjaCBvZiB0aGUgbWVudSBhcyBwb3NzaWJsZSB0byB0aGUgdXNlcixcbiAgICAgICAgLy8gc28gZ2l2ZSB0aGVtIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBiZWxvdyByYXRoZXIgdGhhbiB0aGUgbWluSGVpZ2h0LlxuICAgICAgICB2YXIgY29uc3RyYWluZWRIZWlnaHQgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VCZWxvdyAtIG1hcmdpbkJvdHRvbSA6IHNjcm9sbFNwYWNlQmVsb3cgLSBtYXJnaW5Cb3R0b207XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IGNvbnN0cmFpbmVkSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIEZvcmtlZCBiZXZpb3VyIHdoZW4gdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlIGJlbG93XG5cbiAgICAgIC8vIEFVVE86IGZsaXAgdGhlIG1lbnUsIHJlbmRlciBhYm92ZVxuICAgICAgaWYgKHByZWZlcnJlZFBsYWNlbWVudCA9PT0gJ2F1dG8nIHx8IGlzRml4ZWRQb3NpdGlvbikge1xuICAgICAgICAvLyBtYXkgbmVlZCB0byBiZSBjb25zdHJhaW5lZCBhZnRlciBmbGlwcGluZ1xuICAgICAgICB2YXIgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gcHJlZmVycmVkTWF4SGVpZ2h0O1xuICAgICAgICB2YXIgc3BhY2VBYm92ZSA9IGlzRml4ZWRQb3NpdGlvbiA/IHZpZXdTcGFjZUFib3ZlIDogc2Nyb2xsU3BhY2VBYm92ZTtcbiAgICAgICAgaWYgKHNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0KSB7XG4gICAgICAgICAgX2NvbnN0cmFpbmVkSGVpZ2h0ID0gTWF0aC5taW4oc3BhY2VBYm92ZSAtIG1hcmdpbkJvdHRvbSAtIGNvbnRyb2xIZWlnaHQsIHByZWZlcnJlZE1heEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgIG1heEhlaWdodDogX2NvbnN0cmFpbmVkSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEJPVFRPTTogYWxsb3cgYnJvd3NlciB0byBpbmNyZWFzZSBzY3JvbGxhYmxlIGFyZWEgYW5kIGltbWVkaWF0ZWx5IHNldCBzY3JvbGxcbiAgICAgIGlmIChwcmVmZXJyZWRQbGFjZW1lbnQgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxUbyhzY3JvbGxQYXJlbnQsIHNjcm9sbERvd24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIC8vIDE6IHRoZSBtZW51IHdpbGwgZml0LCBkbyBub3RoaW5nXG4gICAgICBpZiAodmlld1NwYWNlQWJvdmUgPj0gbWVudUhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgICAgICAgbWF4SGVpZ2h0OiBwcmVmZXJyZWRNYXhIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gMjogdGhlIG1lbnUgd2lsbCBmaXQsIGlmIHNjcm9sbGVkXG4gICAgICBpZiAoc2Nyb2xsU3BhY2VBYm92ZSA+PSBtZW51SGVpZ2h0ICYmICFpc0ZpeGVkUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHByZWZlcnJlZE1heEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAzOiB0aGUgbWVudSB3aWxsIGZpdCwgaWYgY29uc3RyYWluZWRcbiAgICAgIGlmICghaXNGaXhlZFBvc2l0aW9uICYmIHNjcm9sbFNwYWNlQWJvdmUgPj0gbWluSGVpZ2h0IHx8IGlzRml4ZWRQb3NpdGlvbiAmJiB2aWV3U3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQpIHtcbiAgICAgICAgdmFyIF9jb25zdHJhaW5lZEhlaWdodDIgPSBwcmVmZXJyZWRNYXhIZWlnaHQ7XG5cbiAgICAgICAgLy8gd2Ugd2FudCB0byBwcm92aWRlIGFzIG11Y2ggb2YgdGhlIG1lbnUgYXMgcG9zc2libGUgdG8gdGhlIHVzZXIsXG4gICAgICAgIC8vIHNvIGdpdmUgdGhlbSB3aGF0ZXZlciBpcyBhdmFpbGFibGUgYmVsb3cgcmF0aGVyIHRoYW4gdGhlIG1pbkhlaWdodC5cbiAgICAgICAgaWYgKCFpc0ZpeGVkUG9zaXRpb24gJiYgc2Nyb2xsU3BhY2VBYm92ZSA+PSBtaW5IZWlnaHQgfHwgaXNGaXhlZFBvc2l0aW9uICYmIHZpZXdTcGFjZUFib3ZlID49IG1pbkhlaWdodCkge1xuICAgICAgICAgIF9jb25zdHJhaW5lZEhlaWdodDIgPSBpc0ZpeGVkUG9zaXRpb24gPyB2aWV3U3BhY2VBYm92ZSAtIG1hcmdpblRvcCA6IHNjcm9sbFNwYWNlQWJvdmUgLSBtYXJnaW5Ub3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIGFuaW1hdGVkU2Nyb2xsVG8oc2Nyb2xsUGFyZW50LCBzY3JvbGxVcCwgc2Nyb2xsRHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICAgICAgICBtYXhIZWlnaHQ6IF9jb25zdHJhaW5lZEhlaWdodDJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gbm90IGVub3VnaCBzcGFjZSwgdGhlIGJyb3dzZXIgV0lMTCBOT1QgaW5jcmVhc2Ugc2Nyb2xsYWJsZSBhcmVhIHdoZW5cbiAgICAgIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50IHJlbmRlcmVkIGFib3ZlIHRoZSB2aWV3cG9ydCAob25seSBiZWxvdykuXG4gICAgICAvLyBGbGlwIHRoZSBtZW51LCByZW5kZXIgYmVsb3dcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgIG1heEhlaWdodDogcHJlZmVycmVkTWF4SGVpZ2h0XG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBsYWNlbWVudCBwcm92aWRlZCBcXFwiXCIuY29uY2F0KHByZWZlcnJlZFBsYWNlbWVudCwgXCJcXFwiLlwiKSk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRTdGF0ZTtcbn1cblxuLy8gTWVudSBDb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBhbGlnblRvQ29udHJvbChwbGFjZW1lbnQpIHtcbiAgdmFyIHBsYWNlbWVudFRvQ1NTUHJvcCA9IHtcbiAgICBib3R0b206ICd0b3AnLFxuICAgIHRvcDogJ2JvdHRvbSdcbiAgfTtcbiAgcmV0dXJuIHBsYWNlbWVudCA/IHBsYWNlbWVudFRvQ1NTUHJvcFtwbGFjZW1lbnRdIDogJ2JvdHRvbSc7XG59XG52YXIgY29lcmNlUGxhY2VtZW50ID0gZnVuY3Rpb24gY29lcmNlUGxhY2VtZW50KHApIHtcbiAgcmV0dXJuIHAgPT09ICdhdXRvJyA/ICdib3R0b20nIDogcDtcbn07XG52YXIgbWVudUNTUyA9IGZ1bmN0aW9uIG1lbnVDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBfb2JqZWN0U3ByZWFkMjtcbiAgdmFyIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICBfcmVmMiR0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYyJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBzcGFjaW5nID0gX3JlZjIkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKChfb2JqZWN0U3ByZWFkMiA9IHtcbiAgICBsYWJlbDogJ21lbnUnXG4gIH0sIF9kZWZpbmVQcm9wZXJ0eShfb2JqZWN0U3ByZWFkMiwgYWxpZ25Ub0NvbnRyb2wocGxhY2VtZW50KSwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBcInBvc2l0aW9uXCIsICdhYnNvbHV0ZScpLCBfZGVmaW5lUHJvcGVydHkoX29iamVjdFNwcmVhZDIsIFwid2lkdGhcIiwgJzEwMCUnKSwgX2RlZmluZVByb3BlcnR5KF9vYmplY3RTcHJlYWQyLCBcInpJbmRleFwiLCAxKSwgX29iamVjdFNwcmVhZDIpLCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLm5ldXRyYWwwLFxuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzLFxuICAgIGJveFNoYWRvdzogJzAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKScsXG4gICAgbWFyZ2luQm90dG9tOiBzcGFjaW5nLm1lbnVHdXR0ZXIsXG4gICAgbWFyZ2luVG9wOiBzcGFjaW5nLm1lbnVHdXR0ZXJcbiAgfSk7XG59O1xudmFyIFBvcnRhbFBsYWNlbWVudENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChudWxsKTtcblxuLy8gTk9URTogaW50ZXJuYWwgb25seVxudmFyIE1lbnVQbGFjZXIgPSBmdW5jdGlvbiBNZW51UGxhY2VyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIG1pbk1lbnVIZWlnaHQgPSBwcm9wcy5taW5NZW51SGVpZ2h0LFxuICAgIG1heE1lbnVIZWlnaHQgPSBwcm9wcy5tYXhNZW51SGVpZ2h0LFxuICAgIG1lbnVQbGFjZW1lbnQgPSBwcm9wcy5tZW51UGxhY2VtZW50LFxuICAgIG1lbnVQb3NpdGlvbiA9IHByb3BzLm1lbnVQb3NpdGlvbixcbiAgICBtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSBwcm9wcy5tZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXcsXG4gICAgdGhlbWUgPSBwcm9wcy50aGVtZTtcbiAgdmFyIF9yZWYzID0gdXNlQ29udGV4dChQb3J0YWxQbGFjZW1lbnRDb250ZXh0KSB8fCB7fSxcbiAgICBzZXRQb3J0YWxQbGFjZW1lbnQgPSBfcmVmMy5zZXRQb3J0YWxQbGFjZW1lbnQ7XG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShtYXhNZW51SGVpZ2h0KSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBtYXhIZWlnaHQgPSBfdXNlU3RhdGUyWzBdLFxuICAgIHNldE1heEhlaWdodCA9IF91c2VTdGF0ZTJbMV07XG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgIHBsYWNlbWVudCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgc2V0UGxhY2VtZW50ID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIGNvbnRyb2xIZWlnaHQgPSB0aGVtZS5zcGFjaW5nLmNvbnRyb2xIZWlnaHQ7XG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lbnVFbCA9IHJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudUVsKSByZXR1cm47XG5cbiAgICAvLyBETyBOT1Qgc2Nyb2xsIGlmIHBvc2l0aW9uIGlzIGZpeGVkXG4gICAgdmFyIGlzRml4ZWRQb3NpdGlvbiA9IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgICB2YXIgc2hvdWxkU2Nyb2xsID0gbWVudVNob3VsZFNjcm9sbEludG9WaWV3ICYmICFpc0ZpeGVkUG9zaXRpb247XG4gICAgdmFyIHN0YXRlID0gZ2V0TWVudVBsYWNlbWVudCh7XG4gICAgICBtYXhIZWlnaHQ6IG1heE1lbnVIZWlnaHQsXG4gICAgICBtZW51RWw6IG1lbnVFbCxcbiAgICAgIG1pbkhlaWdodDogbWluTWVudUhlaWdodCxcbiAgICAgIHBsYWNlbWVudDogbWVudVBsYWNlbWVudCxcbiAgICAgIHNob3VsZFNjcm9sbDogc2hvdWxkU2Nyb2xsLFxuICAgICAgaXNGaXhlZFBvc2l0aW9uOiBpc0ZpeGVkUG9zaXRpb24sXG4gICAgICBjb250cm9sSGVpZ2h0OiBjb250cm9sSGVpZ2h0XG4gICAgfSk7XG4gICAgc2V0TWF4SGVpZ2h0KHN0YXRlLm1heEhlaWdodCk7XG4gICAgc2V0UGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gICAgc2V0UG9ydGFsUGxhY2VtZW50ID09PSBudWxsIHx8IHNldFBvcnRhbFBsYWNlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2V0UG9ydGFsUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIH0sIFttYXhNZW51SGVpZ2h0LCBtZW51UGxhY2VtZW50LCBtZW51UG9zaXRpb24sIG1lbnVTaG91bGRTY3JvbGxJbnRvVmlldywgbWluTWVudUhlaWdodCwgc2V0UG9ydGFsUGxhY2VtZW50LCBjb250cm9sSGVpZ2h0XSk7XG4gIHJldHVybiBjaGlsZHJlbih7XG4gICAgcmVmOiByZWYsXG4gICAgcGxhY2VyUHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQgfHwgY29lcmNlUGxhY2VtZW50KG1lbnVQbGFjZW1lbnQpLFxuICAgICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICB9KVxuICB9KTtcbn07XG52YXIgTWVudSA9IGZ1bmN0aW9uIE1lbnUocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ21lbnUnLCB7XG4gICAgbWVudTogdHJ1ZVxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgTWVudSQxID0gTWVudTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNZW51IExpc3Rcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudUxpc3RDU1MgPSBmdW5jdGlvbiBtZW51TGlzdENTUyhfcmVmNCwgdW5zdHlsZWQpIHtcbiAgdmFyIG1heEhlaWdodCA9IF9yZWY0Lm1heEhlaWdodCxcbiAgICBiYXNlVW5pdCA9IF9yZWY0LnRoZW1lLnNwYWNpbmcuYmFzZVVuaXQ7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAvLyByZXF1aXJlZCBmb3Igb2Zmc2V0W0hlaWdodCwgVG9wXSA+IGtleWJvYXJkIHNjcm9sbFxuICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZ0JvdHRvbTogYmFzZVVuaXQsXG4gICAgcGFkZGluZ1RvcDogYmFzZVVuaXRcbiAgfSk7XG59O1xudmFyIE1lbnVMaXN0ID0gZnVuY3Rpb24gTWVudUxpc3QocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaW5uZXJSZWYgPSBwcm9wcy5pbm5lclJlZixcbiAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ21lbnVMaXN0Jywge1xuICAgICdtZW51LWxpc3QnOiB0cnVlLFxuICAgICdtZW51LWxpc3QtLWlzLW11bHRpJzogaXNNdWx0aVxuICB9KSwge1xuICAgIHJlZjogaW5uZXJSZWZcbiAgfSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBOb3RpY2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIG5vdGljZUNTUyA9IGZ1bmN0aW9uIG5vdGljZUNTUyhfcmVmNSwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWY1JHRoZW1lID0gX3JlZjUudGhlbWUsXG4gICAgYmFzZVVuaXQgPSBfcmVmNSR0aGVtZS5zcGFjaW5nLmJhc2VVbml0LFxuICAgIGNvbG9ycyA9IF9yZWY1JHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIHRleHRBbGlnbjogJ2NlbnRlcidcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw0MCxcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChiYXNlVW5pdCAqIDIsIFwicHggXCIpLmNvbmNhdChiYXNlVW5pdCAqIDMsIFwicHhcIilcbiAgfSk7XG59O1xudmFyIG5vT3B0aW9uc01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgbG9hZGluZ01lc3NhZ2VDU1MgPSBub3RpY2VDU1M7XG52YXIgTm9PcHRpb25zTWVzc2FnZSA9IGZ1bmN0aW9uIE5vT3B0aW9uc01lc3NhZ2UoX3JlZjYpIHtcbiAgdmFyIF9yZWY2JGNoaWxkcmVuID0gX3JlZjYuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmNiRjaGlsZHJlbiA9PT0gdm9pZCAwID8gJ05vIG9wdGlvbnMnIDogX3JlZjYkY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY2LmlubmVyUHJvcHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY2LCBfZXhjbHVkZWQkMyk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0UHJvcHMpLCB7fSwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpbm5lclByb3BzOiBpbm5lclByb3BzXG4gIH0pLCAnbm9PcHRpb25zTWVzc2FnZScsIHtcbiAgICAnbWVudS1ub3RpY2UnOiB0cnVlLFxuICAgICdtZW51LW5vdGljZS0tbm8tb3B0aW9ucyc6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIExvYWRpbmdNZXNzYWdlID0gZnVuY3Rpb24gTG9hZGluZ01lc3NhZ2UoX3JlZjcpIHtcbiAgdmFyIF9yZWY3JGNoaWxkcmVuID0gX3JlZjcuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmNyRjaGlsZHJlbiA9PT0gdm9pZCAwID8gJ0xvYWRpbmcuLi4nIDogX3JlZjckY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IF9yZWY3LmlubmVyUHJvcHMsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY3LCBfZXhjbHVkZWQyJDEpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFByb3BzKSwge30sIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wczogaW5uZXJQcm9wc1xuICB9KSwgJ2xvYWRpbmdNZXNzYWdlJywge1xuICAgICdtZW51LW5vdGljZSc6IHRydWUsXG4gICAgJ21lbnUtbm90aWNlLS1sb2FkaW5nJzogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWVudSBQb3J0YWxcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbWVudVBvcnRhbENTUyA9IGZ1bmN0aW9uIG1lbnVQb3J0YWxDU1MoX3JlZjgpIHtcbiAgdmFyIHJlY3QgPSBfcmVmOC5yZWN0LFxuICAgIG9mZnNldCA9IF9yZWY4Lm9mZnNldCxcbiAgICBwb3NpdGlvbiA9IF9yZWY4LnBvc2l0aW9uO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgdG9wOiBvZmZzZXQsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgekluZGV4OiAxXG4gIH07XG59O1xudmFyIE1lbnVQb3J0YWwgPSBmdW5jdGlvbiBNZW51UG9ydGFsKHByb3BzKSB7XG4gIHZhciBhcHBlbmRUbyA9IHByb3BzLmFwcGVuZFRvLFxuICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgY29udHJvbEVsZW1lbnQgPSBwcm9wcy5jb250cm9sRWxlbWVudCxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBtZW51UGxhY2VtZW50ID0gcHJvcHMubWVudVBsYWNlbWVudCxcbiAgICBtZW51UG9zaXRpb24gPSBwcm9wcy5tZW51UG9zaXRpb247XG4gIHZhciBtZW51UG9ydGFsUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgY2xlYW51cFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShjb2VyY2VQbGFjZW1lbnQobWVudVBsYWNlbWVudCkpLFxuICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICBwbGFjZW1lbnQgPSBfdXNlU3RhdGU2WzBdLFxuICAgIHNldFBvcnRhbFBsYWNlbWVudCA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBwb3J0YWxQbGFjZW1lbnRDb250ZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFBvcnRhbFBsYWNlbWVudDogc2V0UG9ydGFsUGxhY2VtZW50XG4gICAgfTtcbiAgfSwgW10pO1xuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKG51bGwpLFxuICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICBjb21wdXRlZFBvc2l0aW9uID0gX3VzZVN0YXRlOFswXSxcbiAgICBzZXRDb21wdXRlZFBvc2l0aW9uID0gX3VzZVN0YXRlOFsxXTtcbiAgdmFyIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjb250cm9sRWxlbWVudCkgcmV0dXJuO1xuICAgIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRPYmooY29udHJvbEVsZW1lbnQpO1xuICAgIHZhciBzY3JvbGxEaXN0YW5jZSA9IG1lbnVQb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IDAgOiB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgdmFyIG9mZnNldCA9IHJlY3RbcGxhY2VtZW50XSArIHNjcm9sbERpc3RhbmNlO1xuICAgIGlmIChvZmZzZXQgIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0KSB8fCByZWN0LmxlZnQgIT09IChjb21wdXRlZFBvc2l0aW9uID09PSBudWxsIHx8IGNvbXB1dGVkUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXB1dGVkUG9zaXRpb24ucmVjdC5sZWZ0KSB8fCByZWN0LndpZHRoICE9PSAoY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3Qud2lkdGgpKSB7XG4gICAgICBzZXRDb21wdXRlZFBvc2l0aW9uKHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHJlY3Q6IHJlY3RcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRyb2xFbGVtZW50LCBtZW51UG9zaXRpb24sIHBsYWNlbWVudCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLm9mZnNldCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3QubGVmdCwgY29tcHV0ZWRQb3NpdGlvbiA9PT0gbnVsbCB8fCBjb21wdXRlZFBvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wdXRlZFBvc2l0aW9uLnJlY3Qud2lkdGhdKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB1cGRhdGVDb21wdXRlZFBvc2l0aW9uKCk7XG4gIH0sIFt1cGRhdGVDb21wdXRlZFBvc2l0aW9uXSk7XG4gIHZhciBydW5BdXRvVXBkYXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgY2xlYW51cFJlZi5jdXJyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjbGVhbnVwUmVmLmN1cnJlbnQoKTtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChjb250cm9sRWxlbWVudCAmJiBtZW51UG9ydGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFudXBSZWYuY3VycmVudCA9IGF1dG9VcGRhdGUoY29udHJvbEVsZW1lbnQsIG1lbnVQb3J0YWxSZWYuY3VycmVudCwgdXBkYXRlQ29tcHV0ZWRQb3NpdGlvbiwge1xuICAgICAgICBlbGVtZW50UmVzaXplOiAnUmVzaXplT2JzZXJ2ZXInIGluIHdpbmRvd1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udHJvbEVsZW1lbnQsIHVwZGF0ZUNvbXB1dGVkUG9zaXRpb25dKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBydW5BdXRvVXBkYXRlKCk7XG4gIH0sIFtydW5BdXRvVXBkYXRlXSk7XG4gIHZhciBzZXRNZW51UG9ydGFsRWxlbWVudCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChtZW51UG9ydGFsRWxlbWVudCkge1xuICAgIG1lbnVQb3J0YWxSZWYuY3VycmVudCA9IG1lbnVQb3J0YWxFbGVtZW50O1xuICAgIHJ1bkF1dG9VcGRhdGUoKTtcbiAgfSwgW3J1bkF1dG9VcGRhdGVdKTtcblxuICAvLyBiYWlsIGVhcmx5IGlmIHJlcXVpcmVkIGVsZW1lbnRzIGFyZW4ndCBwcmVzZW50XG4gIGlmICghYXBwZW5kVG8gJiYgbWVudVBvc2l0aW9uICE9PSAnZml4ZWQnIHx8ICFjb21wdXRlZFBvc2l0aW9uKSByZXR1cm4gbnVsbDtcblxuICAvLyBzYW1lIHdyYXBwZXIgZWxlbWVudCB3aGV0aGVyIGZpeGVkIG9yIHBvcnRhbGxlZFxuICB2YXIgbWVudVdyYXBwZXIgPSBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogc2V0TWVudVBvcnRhbEVsZW1lbnRcbiAgfSwgZ2V0U3R5bGVQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICBvZmZzZXQ6IGNvbXB1dGVkUG9zaXRpb24ub2Zmc2V0LFxuICAgIHBvc2l0aW9uOiBtZW51UG9zaXRpb24sXG4gICAgcmVjdDogY29tcHV0ZWRQb3NpdGlvbi5yZWN0XG4gIH0pLCAnbWVudVBvcnRhbCcsIHtcbiAgICAnbWVudS1wb3J0YWwnOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xuICByZXR1cm4ganN4KFBvcnRhbFBsYWNlbWVudENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcG9ydGFsUGxhY2VtZW50Q29udGV4dFxuICB9LCBhcHBlbmRUbyA/IC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwobWVudVdyYXBwZXIsIGFwcGVuZFRvKSA6IG1lbnVXcmFwcGVyKTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUm9vdCBDb250YWluZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgY29udGFpbmVyQ1NTID0gZnVuY3Rpb24gY29udGFpbmVyQ1NTKF9yZWYpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNSdGwgPSBfcmVmLmlzUnRsO1xuICByZXR1cm4ge1xuICAgIGxhYmVsOiAnY29udGFpbmVyJyxcbiAgICBkaXJlY3Rpb246IGlzUnRsID8gJ3J0bCcgOiB1bmRlZmluZWQsXG4gICAgcG9pbnRlckV2ZW50czogaXNEaXNhYmxlZCA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAvLyBjYW5jZWwgbW91c2UgZXZlbnRzIHdoZW4gZGlzYWJsZWRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xufTtcbnZhciBTZWxlY3RDb250YWluZXIgPSBmdW5jdGlvbiBTZWxlY3RDb250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHMsXG4gICAgaXNEaXNhYmxlZCA9IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNSdGwgPSBwcm9wcy5pc1J0bDtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2NvbnRhaW5lcicsIHtcbiAgICAnLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJy0taXMtcnRsJzogaXNSdGxcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZhbHVlIENvbnRhaW5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciB2YWx1ZUNvbnRhaW5lckNTUyA9IGZ1bmN0aW9uIHZhbHVlQ29udGFpbmVyQ1NTKF9yZWYyLCB1bnN0eWxlZCkge1xuICB2YXIgc3BhY2luZyA9IF9yZWYyLnRoZW1lLnNwYWNpbmcsXG4gICAgaXNNdWx0aSA9IF9yZWYyLmlzTXVsdGksXG4gICAgaGFzVmFsdWUgPSBfcmVmMi5oYXNWYWx1ZSxcbiAgICBjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUgPSBfcmVmMi5zZWxlY3RQcm9wcy5jb250cm9sU2hvdWxkUmVuZGVyVmFsdWU7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiBpc011bHRpICYmIGhhc1ZhbHVlICYmIGNvbnRyb2xTaG91bGRSZW5kZXJWYWx1ZSA/ICdmbGV4JyA6ICdncmlkJyxcbiAgICBmbGV4OiAxLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgcGFkZGluZzogXCJcIi5jb25jYXQoc3BhY2luZy5iYXNlVW5pdCAvIDIsIFwicHggXCIpLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMiwgXCJweFwiKVxuICB9KTtcbn07XG52YXIgVmFsdWVDb250YWluZXIgPSBmdW5jdGlvbiBWYWx1ZUNvbnRhaW5lcihwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpc011bHRpID0gcHJvcHMuaXNNdWx0aSxcbiAgICBoYXNWYWx1ZSA9IHByb3BzLmhhc1ZhbHVlO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAndmFsdWVDb250YWluZXInLCB7XG4gICAgJ3ZhbHVlLWNvbnRhaW5lcic6IHRydWUsXG4gICAgJ3ZhbHVlLWNvbnRhaW5lci0taXMtbXVsdGknOiBpc011bHRpLFxuICAgICd2YWx1ZS1jb250YWluZXItLWhhcy12YWx1ZSc6IGhhc1ZhbHVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJbmRpY2F0b3IgQ29udGFpbmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIGluZGljYXRvcnNDb250YWluZXJDU1MgPSBmdW5jdGlvbiBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTKCkge1xuICByZXR1cm4ge1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4U2hyaW5rOiAwXG4gIH07XG59O1xudmFyIEluZGljYXRvcnNDb250YWluZXIgPSBmdW5jdGlvbiBJbmRpY2F0b3JzQ29udGFpbmVyKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnaW5kaWNhdG9yc0NvbnRhaW5lcicsIHtcbiAgICBpbmRpY2F0b3JzOiB0cnVlXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcbnZhciBfZXhjbHVkZWQkMiA9IFtcInNpemVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJpbm5lclByb3BzXCIsIFwiaXNSdGxcIiwgXCJzaXplXCJdO1xuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjhtbWtjZ1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7bGluZS1oZWlnaHQ6MTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDowXCJcbn0gOiB7XG4gIG5hbWU6IFwidGo1YmRlLVN2Z1wiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7bGluZS1oZWlnaHQ6MTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDowO2xhYmVsOlN2ZztcIixcbiAgbWFwOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVhsQ1NTSXNJbVpwYkdVaU9pSnBibVJwWTJGMGIzSnpMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1NsTllMQ0JTWldGamRFNXZaR1VnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdleUJxYzNnc0lHdGxlV1p5WVcxbGN5QjlJR1p5YjIwZ0owQmxiVzkwYVc5dUwzSmxZV04wSnp0Y2JseHVhVzF3YjNKMElIdGNiaUFnUTI5dGJXOXVVSEp2Y0hOQmJtUkRiR0Z6YzA1aGJXVXNYRzRnSUVOVFUwOWlhbVZqZEZkcGRHaE1ZV0psYkN4Y2JpQWdSM0p2ZFhCQ1lYTmxMRnh1ZlNCbWNtOXRJQ2N1TGk5MGVYQmxjeWM3WEc1cGJYQnZjblFnZXlCblpYUlRkSGxzWlZCeWIzQnpJSDBnWm5KdmJTQW5MaTR2ZFhScGJITW5PMXh1WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmk4dklFUnliM0JrYjNkdUlDWWdRMnhsWVhJZ1NXTnZibk5jYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1amIyNXpkQ0JUZG1jZ1BTQW9lMXh1SUNCemFYcGxMRnh1SUNBdUxpNXdjbTl3YzF4dWZUb2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lkemRtY25YU0FtSUhzZ2MybDZaVG9nYm5WdFltVnlJSDBwSUQwK0lDaGNiaUFnUEhOMloxeHVJQ0FnSUdobGFXZG9kRDE3YzJsNlpYMWNiaUFnSUNCM2FXUjBhRDE3YzJsNlpYMWNiaUFnSUNCMmFXVjNRbTk0UFZ3aU1DQXdJREl3SURJd1hDSmNiaUFnSUNCaGNtbGhMV2hwWkdSbGJqMWNJblJ5ZFdWY0lseHVJQ0FnSUdadlkzVnpZV0pzWlQxY0ltWmhiSE5sWENKY2JpQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lHUnBjM0JzWVhrNklDZHBibXhwYm1VdFlteHZZMnNuTEZ4dUlDQWdJQ0FnWm1sc2JEb2dKMk4xY25KbGJuUkRiMnh2Y2ljc1hHNGdJQ0FnSUNCc2FXNWxTR1ZwWjJoME9pQXhMRnh1SUNBZ0lDQWdjM1J5YjJ0bE9pQW5ZM1Z5Y21WdWRFTnZiRzl5Snl4Y2JpQWdJQ0FnSUhOMGNtOXJaVmRwWkhSb09pQXdMRnh1SUNBZ0lIMTlYRzRnSUNBZ2V5NHVMbkJ5YjNCemZWeHVJQ0F2UGx4dUtUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1EzSnZjM05KWTI5dVVISnZjSE1nUFNCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKM04yWnlkZElDWWdleUJ6YVhwbFB6b2diblZ0WW1WeUlIMDdYRzVsZUhCdmNuUWdZMjl1YzNRZ1EzSnZjM05KWTI5dUlEMGdLSEJ5YjNCek9pQkRjbTl6YzBsamIyNVFjbTl3Y3lrZ1BUNGdLRnh1SUNBOFUzWm5JSE5wZW1VOWV6SXdmU0I3TGk0dWNISnZjSE45UGx4dUlDQWdJRHh3WVhSb0lHUTlYQ0pOTVRRdU16UTRJREUwTGpnME9XTXRNQzQwTmprZ01DNDBOamt0TVM0eU1qa2dNQzQwTmprdE1TNDJPVGNnTUd3dE1pNDJOVEV0TXk0d016QXRNaTQyTlRFZ015NHdNamxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQXRNQzQwTmprdE1DNDBOamt0TUM0ME5qa3RNUzR5TWprZ01DMHhMalk1TjJ3eUxqYzFPQzB6TGpFMUxUSXVOelU1TFRNdU1UVXlZeTB3TGpRMk9TMHdMalEyT1Mwd0xqUTJPUzB4TGpJeU9DQXdMVEV1TmprM2N6RXVNakk0TFRBdU5EWTVJREV1TmprM0lEQnNNaTQyTlRJZ015NHdNekVnTWk0Mk5URXRNeTR3TXpGak1DNDBOamt0TUM0ME5qa2dNUzR5TWpndE1DNDBOamtnTVM0Mk9UY2dNSE13TGpRMk9TQXhMakl5T1NBd0lERXVOamszYkMweUxqYzFPQ0F6TGpFMU1pQXlMamMxT0NBekxqRTFZekF1TkRZNUlEQXVORFk1SURBdU5EWTVJREV1TWpJNUlEQWdNUzQyT1RoNlhDSWdMejVjYmlBZ1BDOVRkbWMrWEc0cE8xeHVaWGh3YjNKMElIUjVjR1VnUkc5M2JrTm9aWFp5YjI1UWNtOXdjeUE5SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM1puSjEwZ0ppQjdJSE5wZW1VL09pQnVkVzFpWlhJZ2ZUdGNibVY0Y0c5eWRDQmpiMjV6ZENCRWIzZHVRMmhsZG5KdmJpQTlJQ2h3Y205d2N6b2dSRzkzYmtOb1pYWnliMjVRY205d2N5a2dQVDRnS0Z4dUlDQThVM1puSUhOcGVtVTllekl3ZlNCN0xpNHVjSEp2Y0hOOVBseHVJQ0FnSUR4d1lYUm9JR1E5WENKTk5DNDFNVFlnTnk0MU5EaGpNQzQwTXpZdE1DNDBORFlnTVM0d05ETXRNQzQwT0RFZ01TNDFOellnTUd3ekxqa3dPQ0F6TGpjME55QXpMamt3T0MwekxqYzBOMk13TGpVek15MHdMalE0TVNBeExqRTBNUzB3TGpRME5pQXhMalUzTkNBd0lEQXVORE0ySURBdU5EUTFJREF1TkRBNElERXVNVGszSURBZ01TNDJNVFV0TUM0ME1EWWdNQzQwTVRndE5DNDJPVFVnTkM0MU1ESXROQzQyT1RVZ05DNDFNREl0TUM0eU1UY2dNQzR5TWpNdE1DNDFNRElnTUM0ek16VXRNQzQzT0RjZ01DNHpNelZ6TFRBdU5UY3RNQzR4TVRJdE1DNDNPRGt0TUM0ek16VmpNQ0F3TFRRdU1qZzNMVFF1TURnMExUUXVOamsxTFRRdU5UQXljeTB3TGpRek5pMHhMakUzSURBdE1TNDJNVFY2WENJZ0x6NWNiaUFnUEM5VGRtYytYRzRwTzF4dVhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpOHZJRVJ5YjNCa2IzZHVJQ1lnUTJ4bFlYSWdRblYwZEc5dWMxeHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdSSEp2Y0dSdmQyNUpibVJwWTJGMGIzSlFjbTl3Y3p4Y2JpQWdUM0IwYVc5dUlEMGdkVzVyYm05M2JpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNGdQU0JpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtJRDBnUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0Z1pYaDBaVzVrY3lCRGIyMXRiMjVRY205d2MwRnVaRU5zWVhOelRtRnRaVHhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BpQjdYRzRnSUM4cUtpQlVhR1VnWTJocGJHUnlaVzRnZEc4Z1ltVWdjbVZ1WkdWeVpXUWdhVzV6YVdSbElIUm9aU0JwYm1ScFkyRjBiM0l1SUNvdlhHNGdJR05vYVd4a2NtVnVQem9nVW1WaFkzUk9iMlJsTzF4dUlDQXZLaW9nVUhKdmNITWdkR2hoZENCM2FXeHNJR0psSUhCaGMzTmxaQ0J2YmlCMGJ5QjBhR1VnWTJocGJHUnlaVzR1SUNvdlhHNGdJR2x1Ym1WeVVISnZjSE02SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25aR2wySjEwN1hHNGdJQzhxS2lCVWFHVWdabTlqZFhObFpDQnpkR0YwWlNCdlppQjBhR1VnYzJWc1pXTjBMaUFxTDF4dUlDQnBjMFp2WTNWelpXUTZJR0p2YjJ4bFlXNDdYRzRnSUdselJHbHpZV0pzWldRNklHSnZiMnhsWVc0N1hHNTlYRzVjYm1OdmJuTjBJR0poYzJWRFUxTWdQU0E4WEc0Z0lFOXdkR2x2Yml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNG9YRzRnSUh0Y2JpQWdJQ0JwYzBadlkzVnpaV1FzWEc0Z0lDQWdkR2hsYldVNklIdGNiaUFnSUNBZ0lITndZV05wYm1jNklIc2dZbUZ6WlZWdWFYUWdmU3hjYmlBZ0lDQWdJR052Ykc5eWN5eGNiaUFnSUNCOUxGeHVJQ0I5T2x4dUlDQWdJSHdnUkhKdmNHUnZkMjVKYm1ScFkyRjBiM0pRY205d2N6eFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGx4dUlDQWdJSHdnUTJ4bFlYSkpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaXhjYmlBZ2RXNXpkSGxzWldRNklHSnZiMnhsWVc1Y2JpazZJRU5UVTA5aWFtVmpkRmRwZEdoTVlXSmxiQ0E5UGlBb2UxeHVJQ0JzWVdKbGJEb2dKMmx1WkdsallYUnZja052Ym5SaGFXNWxjaWNzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdkSEpoYm5OcGRHbHZiam9nSjJOdmJHOXlJREUxTUcxekp5eGNiaUFnTGk0dUtIVnVjM1I1YkdWa1hHNGdJQ0FnUHlCN2ZWeHVJQ0FnSURvZ2UxeHVJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ2FYTkdiMk4xYzJWa0lEOGdZMjlzYjNKekxtNWxkWFJ5WVd3Mk1DQTZJR052Ykc5eWN5NXVaWFYwY21Gc01qQXNYRzRnSUNBZ0lDQWdJSEJoWkdScGJtYzZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdJQ0FnSUNBZ0p6cG9iM1psY2ljNklIdGNiaUFnSUNBZ0lDQWdJQ0JqYjJ4dmNqb2dhWE5HYjJOMWMyVmtJRDhnWTI5c2IzSnpMbTVsZFhSeVlXdzRNQ0E2SUdOdmJHOXljeTV1WlhWMGNtRnNOREFzWEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCOUtTeGNibjBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWkhKdmNHUnZkMjVKYm1ScFkyRjBiM0pEVTFNZ1BTQmlZWE5sUTFOVE8xeHVaWGh3YjNKMElHTnZibk4wSUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQndjbTl3Y3pvZ1JISnZjR1J2ZDI1SmJtUnBZMkYwYjNKUWNtOXdjenhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BseHVLU0E5UGlCN1hHNGdJR052Ym5OMElIc2dZMmhwYkdSeVpXNHNJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektIQnliM0J6TENBblpISnZjR1J2ZDI1SmJtUnBZMkYwYjNJbkxDQjdYRzRnSUNBZ0lDQWdJR2x1WkdsallYUnZjam9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdKMlJ5YjNCa2IzZHVMV2x1WkdsallYUnZjaWM2SUhSeWRXVXNYRzRnSUNBZ0lDQjlLWDFjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUQ1Y2JpQWdJQ0FnSUh0amFHbHNaSEpsYmlCOGZDQThSRzkzYmtOb1pYWnliMjRnTHo1OVhHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFhHNGdJRTl3ZEdsdmJpQTlJSFZ1YTI1dmQyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVJRDBnWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQaUE5SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0lHVjRkR1Z1WkhNZ1EyOXRiVzl1VUhKdmNITkJibVJEYkdGemMwNWhiV1U4VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENGdlMXh1SUNBdktpb2dWR2hsSUdOb2FXeGtjbVZ1SUhSdklHSmxJSEpsYm1SbGNtVmtJR2x1YzJsa1pTQjBhR1VnYVc1a2FXTmhkRzl5TGlBcUwxeHVJQ0JqYUdsc1pISmxiajg2SUZKbFlXTjBUbTlrWlR0Y2JpQWdMeW9xSUZCeWIzQnpJSFJvWVhRZ2QybHNiQ0JpWlNCd1lYTnpaV1FnYjI0Z2RHOGdkR2hsSUdOb2FXeGtjbVZ1TGlBcUwxeHVJQ0JwYm01bGNsQnliM0J6T2lCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKMlJwZGlkZE8xeHVJQ0F2S2lvZ1ZHaGxJR1p2WTNWelpXUWdjM1JoZEdVZ2IyWWdkR2hsSUhObGJHVmpkQzRnS2k5Y2JpQWdhWE5HYjJOMWMyVmtPaUJpYjI5c1pXRnVPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWTJ4bFlYSkpibVJwWTJGMGIzSkRVMU1nUFNCaVlYTmxRMU5UTzF4dVpYaHdiM0owSUdOdmJuTjBJRU5zWldGeVNXNWthV05oZEc5eUlEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0J3Y205d2N6b2dRMnhsWVhKSmJtUnBZMkYwYjNKUWNtOXdjenhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BseHVLU0E5UGlCN1hHNGdJR052Ym5OMElIc2dZMmhwYkdSeVpXNHNJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektIQnliM0J6TENBblkyeGxZWEpKYm1ScFkyRjBiM0luTENCN1hHNGdJQ0FnSUNBZ0lHbHVaR2xqWVhSdmNqb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ0oyTnNaV0Z5TFdsdVpHbGpZWFJ2Y2ljNklIUnlkV1VzWEc0Z0lDQWdJQ0I5S1gxY2JpQWdJQ0FnSUhzdUxpNXBibTVsY2xCeWIzQnpmVnh1SUNBZ0lENWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpQjhmQ0E4UTNKdmMzTkpZMjl1SUM4K2ZWeHVJQ0FnSUR3dlpHbDJQbHh1SUNBcE8xeHVmVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QlRaWEJoY21GMGIzSmNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRWx1WkdsallYUnZjbE5sY0dGeVlYUnZjbEJ5YjNCelBGeHVJQ0JQY0hScGIyNGdQU0IxYm10dWIzZHVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaUE5SUdKdmIyeGxZVzRzWEc0Z0lFZHliM1Z3SUdWNGRHVnVaSE1nUjNKdmRYQkNZWE5sUEU5d2RHbHZiajRnUFNCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpQmxlSFJsYm1SeklFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsUEU5d2RHbHZiaXdnU1hOTmRXeDBhU3dnUjNKdmRYQStJSHRjYmlBZ2FYTkVhWE5oWW14bFpEb2dZbTl2YkdWaGJqdGNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBibTVsY2xCeWIzQnpQem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZHpjR0Z1SjEwN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnBibVJwWTJGMGIzSlRaWEJoY21GMGIzSkRVMU1nUFNBOFhHNGdJRTl3ZEdsdmJpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRvWEc0Z0lIdGNiaUFnSUNCcGMwUnBjMkZpYkdWa0xGeHVJQ0FnSUhSb1pXMWxPaUI3WEc0Z0lDQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJQ0FnSUNCamIyeHZjbk1zWEc0Z0lDQWdmU3hjYmlBZ2ZUb2dTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRzWEc0Z0lIVnVjM1I1YkdWa09pQmliMjlzWldGdVhHNHBPaUJEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dnUFQ0Z0tIdGNiaUFnYkdGaVpXdzZJQ2RwYm1ScFkyRjBiM0pUWlhCaGNtRjBiM0luTEZ4dUlDQmhiR2xuYmxObGJHWTZJQ2R6ZEhKbGRHTm9KeXhjYmlBZ2QybGtkR2c2SURFc1hHNGdJQzR1TGloMWJuTjBlV3hsWkZ4dUlDQWdJRDhnZTMxY2JpQWdJQ0E2SUh0Y2JpQWdJQ0FnSUNBZ1ltRmphMmR5YjNWdVpFTnZiRzl5T2lCcGMwUnBjMkZpYkdWa0lEOGdZMjlzYjNKekxtNWxkWFJ5WVd3eE1DQTZJR052Ykc5eWN5NXVaWFYwY21Gc01qQXNYRzRnSUNBZ0lDQWdJRzFoY21kcGJrSnZkSFJ2YlRvZ1ltRnpaVlZ1YVhRZ0tpQXlMRnh1SUNBZ0lDQWdJQ0J0WVhKbmFXNVViM0E2SUdKaGMyVlZibWwwSUNvZ01peGNiaUFnSUNBZ0lIMHBMRnh1ZlNrN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCSmJtUnBZMkYwYjNKVFpYQmhjbUYwYjNJZ1BTQThYRzRnSUU5d2RHbHZiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRzWEc0Z0lFZHliM1Z3SUdWNGRHVnVaSE1nUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0b1hHNGdJSEJ5YjNCek9pQkpibVJwWTJGMGIzSlRaWEJoY21GMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQbHh1S1NBOVBpQjdYRzRnSUdOdmJuTjBJSHNnYVc1dVpYSlFjbTl3Y3lCOUlEMGdjSEp2Y0hNN1hHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BITndZVzVjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ2V5NHVMbWRsZEZOMGVXeGxVSEp2Y0hNb2NISnZjSE1zSUNkcGJtUnBZMkYwYjNKVFpYQmhjbUYwYjNJbkxDQjdYRzRnSUNBZ0lDQWdJQ2RwYm1ScFkyRjBiM0l0YzJWd1lYSmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJSDBwZlZ4dUlDQWdJQzgrWEc0Z0lDazdYRzU5TzF4dVhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpOHZJRXh2WVdScGJtZGNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzVqYjI1emRDQnNiMkZrYVc1blJHOTBRVzVwYldGMGFXOXVjeUE5SUd0bGVXWnlZVzFsYzJCY2JpQWdNQ1VzSURnd0pTd2dNVEF3SlNCN0lHOXdZV05wZEhrNklEQTdJSDFjYmlBZ05EQWxJSHNnYjNCaFkybDBlVG9nTVRzZ2ZWeHVZRHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR3h2WVdScGJtZEpibVJwWTJGMGIzSkRVMU1nUFNBOFhHNGdJRTl3ZEdsdmJpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRvWEc0Z0lIdGNiaUFnSUNCcGMwWnZZM1Z6WldRc1hHNGdJQ0FnYzJsNlpTeGNiaUFnSUNCMGFHVnRaVG9nZTF4dUlDQWdJQ0FnWTI5c2IzSnpMRnh1SUNBZ0lDQWdjM0JoWTJsdVp6b2dleUJpWVhObFZXNXBkQ0I5TEZ4dUlDQWdJSDBzWEc0Z0lIMDZJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaXhjYmlBZ2RXNXpkSGxzWldRNklHSnZiMnhsWVc1Y2JpazZJRU5UVTA5aWFtVmpkRmRwZEdoTVlXSmxiQ0E5UGlBb2UxeHVJQ0JzWVdKbGJEb2dKMnh2WVdScGJtZEpibVJwWTJGMGIzSW5MRnh1SUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lIUnlZVzV6YVhScGIyNDZJQ2RqYjJ4dmNpQXhOVEJ0Y3ljc1hHNGdJR0ZzYVdkdVUyVnNaam9nSjJObGJuUmxjaWNzWEc0Z0lHWnZiblJUYVhwbE9pQnphWHBsTEZ4dUlDQnNhVzVsU0dWcFoyaDBPaUF4TEZ4dUlDQnRZWEpuYVc1U2FXZG9kRG9nYzJsNlpTeGNiaUFnZEdWNGRFRnNhV2R1T2lBblkyVnVkR1Z5Snl4Y2JpQWdkbVZ5ZEdsallXeEJiR2xuYmpvZ0oyMXBaR1JzWlNjc1hHNGdJQzR1TGloMWJuTjBlV3hsWkZ4dUlDQWdJRDhnZTMxY2JpQWdJQ0E2SUh0Y2JpQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzTmpBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd0xGeHVJQ0FnSUNBZ0lDQndZV1JrYVc1bk9pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0I5S1N4Y2JuMHBPMXh1WEc1cGJuUmxjbVpoWTJVZ1RHOWhaR2x1WjBSdmRGQnliM0J6SUh0Y2JpQWdaR1ZzWVhrNklHNTFiV0psY2p0Y2JpQWdiMlptYzJWME9pQmliMjlzWldGdU8xeHVmVnh1WTI5dWMzUWdURzloWkdsdVowUnZkQ0E5SUNoN0lHUmxiR0Y1TENCdlptWnpaWFFnZlRvZ1RHOWhaR2x1WjBSdmRGQnliM0J6S1NBOVBpQW9YRzRnSUR4emNHRnVYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JoYm1sdFlYUnBiMjQ2SUdBa2UyeHZZV1JwYm1kRWIzUkJibWx0WVhScGIyNXpmU0F4Y3lCbFlYTmxMV2x1TFc5MWRDQWtlMlJsYkdGNWZXMXpJR2x1Wm1sdWFYUmxPMkFzWEc0Z0lDQWdJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJQ2RqZFhKeVpXNTBRMjlzYjNJbkxGeHVJQ0FnSUNBZ1ltOXlaR1Z5VW1Ga2FYVnpPaUFuTVdWdEp5eGNiaUFnSUNBZ0lHUnBjM0JzWVhrNklDZHBibXhwYm1VdFlteHZZMnNuTEZ4dUlDQWdJQ0FnYldGeVoybHVUR1ZtZERvZ2IyWm1jMlYwSUQ4Z0p6RmxiU2NnT2lCMWJtUmxabWx1WldRc1hHNGdJQ0FnSUNCb1pXbG5hSFE2SUNjeFpXMG5MRnh1SUNBZ0lDQWdkbVZ5ZEdsallXeEJiR2xuYmpvZ0ozUnZjQ2NzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekZsYlNjc1hHNGdJQ0FnZlgxY2JpQWdMejVjYmlrN1hHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdURzloWkdsdVowbHVaR2xqWVhSdmNsQnliM0J6UEZ4dUlDQlBjSFJwYjI0Z1BTQjFibXR1YjNkdUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpQTlJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNGdQU0JIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGlCbGVIUmxibVJ6SUVOdmJXMXZibEJ5YjNCelFXNWtRMnhoYzNOT1lXMWxQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0lIdGNiaUFnTHlvcUlGQnliM0J6SUhSb1lYUWdkMmxzYkNCaVpTQndZWE56WldRZ2IyNGdkRzhnZEdobElHTm9hV3hrY21WdUxpQXFMMXh1SUNCcGJtNWxjbEJ5YjNCek9pQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjJScGRpZGRPMXh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBjMFJwYzJGaWJHVmtPaUJpYjI5c1pXRnVPMXh1SUNBdktpb2dVMlYwSUhOcGVtVWdiMllnZEdobElHTnZiblJoYVc1bGNpNGdLaTljYmlBZ2MybDZaVG9nYm5WdFltVnlPMXh1ZlZ4dVpYaHdiM0owSUdOdmJuTjBJRXh2WVdScGJtZEpibVJwWTJGMGIzSWdQU0E4WEc0Z0lFOXdkR2x2Yml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNG9lMXh1SUNCcGJtNWxjbEJ5YjNCekxGeHVJQ0JwYzFKMGJDeGNiaUFnYzJsNlpTQTlJRFFzWEc0Z0lDNHVMbkpsYzNSUWNtOXdjMXh1ZlRvZ1RHOWhaR2x1WjBsdVpHbGpZWFJ2Y2xCeWIzQnpQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0tTQTlQaUI3WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEdScGRseHVJQ0FnSUNBZ2V5NHVMbWRsZEZOMGVXeGxVSEp2Y0hNb1hHNGdJQ0FnSUNBZ0lIc2dMaTR1Y21WemRGQnliM0J6TENCcGJtNWxjbEJ5YjNCekxDQnBjMUowYkN3Z2MybDZaU0I5TEZ4dUlDQWdJQ0FnSUNBbmJHOWhaR2x1WjBsdVpHbGpZWFJ2Y2ljc1hHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnSjJ4dllXUnBibWN0YVc1a2FXTmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnS1gxY2JpQWdJQ0FnSUhzdUxpNXBibTVsY2xCeWIzQnpmVnh1SUNBZ0lENWNiaUFnSUNBZ0lEeE1iMkZrYVc1blJHOTBJR1JsYkdGNVBYc3dmU0J2Wm1aelpYUTllMmx6VW5Sc2ZTQXZQbHh1SUNBZ0lDQWdQRXh2WVdScGJtZEViM1FnWkdWc1lYazllekUyTUgwZ2IyWm1jMlYwSUM4K1hHNGdJQ0FnSUNBOFRHOWhaR2x1WjBSdmRDQmtaV3hoZVQxN016SXdmU0J2Wm1aelpYUTlleUZwYzFKMGJIMGdMejVjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVHRjYm4wN1hHNGlYWDA9ICovXCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcbnZhciBTdmcgPSBmdW5jdGlvbiBTdmcoX3JlZikge1xuICB2YXIgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQkMik7XG4gIHJldHVybiBqc3goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIGhlaWdodDogc2l6ZSxcbiAgICB3aWR0aDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY3NzOiBfcmVmMlxuICB9LCBwcm9wcykpO1xufTtcbnZhciBDcm9zc0ljb24gPSBmdW5jdGlvbiBDcm9zc0ljb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChTdmcsIF9leHRlbmRzKHtcbiAgICBzaXplOiAyMFxuICB9LCBwcm9wcyksIGpzeChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiXG4gIH0pKTtcbn07XG52YXIgRG93bkNoZXZyb24gPSBmdW5jdGlvbiBEb3duQ2hldnJvbihwcm9wcykge1xuICByZXR1cm4ganN4KFN2ZywgX2V4dGVuZHMoe1xuICAgIHNpemU6IDIwXG4gIH0sIHByb3BzKSwganN4KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCJcbiAgfSkpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEJ1dHRvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgYmFzZUNTUyA9IGZ1bmN0aW9uIGJhc2VDU1MoX3JlZjMsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmMy5pc0ZvY3VzZWQsXG4gICAgX3JlZjMkdGhlbWUgPSBfcmVmMy50aGVtZSxcbiAgICBiYXNlVW5pdCA9IF9yZWYzJHRoZW1lLnNwYWNpbmcuYmFzZVVuaXQsXG4gICAgY29sb3JzID0gX3JlZjMkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICAgIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgICAnOmhvdmVyJzoge1xuICAgICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwXG4gICAgfVxuICB9KTtcbn07XG52YXIgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIERyb3Bkb3duSW5kaWNhdG9yID0gZnVuY3Rpb24gRHJvcGRvd25JbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdkcm9wZG93bkluZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2Ryb3Bkb3duLWluZGljYXRvcic6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goRG93bkNoZXZyb24sIG51bGwpKTtcbn07XG52YXIgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xudmFyIENsZWFySW5kaWNhdG9yID0gZnVuY3Rpb24gQ2xlYXJJbmRpY2F0b3IocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdjbGVhckluZGljYXRvcicsIHtcbiAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBjaGlsZHJlbiB8fCBqc3goQ3Jvc3NJY29uLCBudWxsKSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlcGFyYXRvclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnZhciBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSBmdW5jdGlvbiBpbmRpY2F0b3JTZXBhcmF0b3JDU1MoX3JlZjQsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZjQuaXNEaXNhYmxlZCxcbiAgICBfcmVmNCR0aGVtZSA9IF9yZWY0LnRoZW1lLFxuICAgIGJhc2VVbml0ID0gX3JlZjQkdGhlbWUuc3BhY2luZy5iYXNlVW5pdCxcbiAgICBjb2xvcnMgPSBfcmVmNCR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gICAgYWxpZ25TZWxmOiAnc3RyZXRjaCcsXG4gICAgd2lkdGg6IDFcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBtYXJnaW5Cb3R0b206IGJhc2VVbml0ICogMixcbiAgICBtYXJnaW5Ub3A6IGJhc2VVbml0ICogMlxuICB9KTtcbn07XG52YXIgSW5kaWNhdG9yU2VwYXJhdG9yID0gZnVuY3Rpb24gSW5kaWNhdG9yU2VwYXJhdG9yKHByb3BzKSB7XG4gIHZhciBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGlubmVyUHJvcHMsIGdldFN0eWxlUHJvcHMocHJvcHMsICdpbmRpY2F0b3JTZXBhcmF0b3InLCB7XG4gICAgJ2luZGljYXRvci1zZXBhcmF0b3InOiB0cnVlXG4gIH0pKSk7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExvYWRpbmdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cXG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cXG5cIl0pKSk7XG52YXIgbG9hZGluZ0luZGljYXRvckNTUyA9IGZ1bmN0aW9uIGxvYWRpbmdJbmRpY2F0b3JDU1MoX3JlZjUsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0ZvY3VzZWQgPSBfcmVmNS5pc0ZvY3VzZWQsXG4gICAgc2l6ZSA9IF9yZWY1LnNpemUsXG4gICAgX3JlZjUkdGhlbWUgPSBfcmVmNS50aGVtZSxcbiAgICBjb2xvcnMgPSBfcmVmNSR0aGVtZS5jb2xvcnMsXG4gICAgYmFzZVVuaXQgPSBfcmVmNSR0aGVtZS5zcGFjaW5nLmJhc2VVbml0O1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICAgIGZvbnRTaXplOiBzaXplLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDYwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgICBwYWRkaW5nOiBiYXNlVW5pdCAqIDJcbiAgfSk7XG59O1xudmFyIExvYWRpbmdEb3QgPSBmdW5jdGlvbiBMb2FkaW5nRG90KF9yZWY2KSB7XG4gIHZhciBkZWxheSA9IF9yZWY2LmRlbGF5LFxuICAgIG9mZnNldCA9IF9yZWY2Lm9mZnNldDtcbiAgcmV0dXJuIGpzeChcInNwYW5cIiwge1xuICAgIGNzczogLyojX19QVVJFX18qL2NzcyQyKHtcbiAgICAgIGFuaW1hdGlvbjogXCJcIi5jb25jYXQobG9hZGluZ0RvdEFuaW1hdGlvbnMsIFwiIDFzIGVhc2UtaW4tb3V0IFwiKS5jb25jYXQoZGVsYXksIFwibXMgaW5maW5pdGU7XCIpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzFlbScsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCA/ICcxZW0nIDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiAnMWVtJyxcbiAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgd2lkdGg6ICcxZW0nXG4gICAgfSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJcIiA6IFwiO2xhYmVsOkxvYWRpbmdEb3Q7XCIsIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiBcIi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltbHVaR2xqWVhSdmNuTXVkSE40SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVcxUlNTSXNJbVpwYkdVaU9pSnBibVJwWTJGMGIzSnpMblJ6ZUNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLaUJBYW5ONElHcHplQ0FxTDF4dWFXMXdiM0owSUhzZ1NsTllMQ0JTWldGamRFNXZaR1VnZlNCbWNtOXRJQ2R5WldGamRDYzdYRzVwYlhCdmNuUWdleUJxYzNnc0lHdGxlV1p5WVcxbGN5QjlJR1p5YjIwZ0owQmxiVzkwYVc5dUwzSmxZV04wSnp0Y2JseHVhVzF3YjNKMElIdGNiaUFnUTI5dGJXOXVVSEp2Y0hOQmJtUkRiR0Z6YzA1aGJXVXNYRzRnSUVOVFUwOWlhbVZqZEZkcGRHaE1ZV0psYkN4Y2JpQWdSM0p2ZFhCQ1lYTmxMRnh1ZlNCbWNtOXRJQ2N1TGk5MGVYQmxjeWM3WEc1cGJYQnZjblFnZXlCblpYUlRkSGxzWlZCeWIzQnpJSDBnWm5KdmJTQW5MaTR2ZFhScGJITW5PMXh1WEc0dkx5QTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmk4dklFUnliM0JrYjNkdUlDWWdRMnhsWVhJZ1NXTnZibk5jYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1WEc1amIyNXpkQ0JUZG1jZ1BTQW9lMXh1SUNCemFYcGxMRnh1SUNBdUxpNXdjbTl3YzF4dWZUb2dTbE5ZTGtsdWRISnBibk5wWTBWc1pXMWxiblJ6V3lkemRtY25YU0FtSUhzZ2MybDZaVG9nYm5WdFltVnlJSDBwSUQwK0lDaGNiaUFnUEhOMloxeHVJQ0FnSUdobGFXZG9kRDE3YzJsNlpYMWNiaUFnSUNCM2FXUjBhRDE3YzJsNlpYMWNiaUFnSUNCMmFXVjNRbTk0UFZ3aU1DQXdJREl3SURJd1hDSmNiaUFnSUNCaGNtbGhMV2hwWkdSbGJqMWNJblJ5ZFdWY0lseHVJQ0FnSUdadlkzVnpZV0pzWlQxY0ltWmhiSE5sWENKY2JpQWdJQ0JqYzNNOWUzdGNiaUFnSUNBZ0lHUnBjM0JzWVhrNklDZHBibXhwYm1VdFlteHZZMnNuTEZ4dUlDQWdJQ0FnWm1sc2JEb2dKMk4xY25KbGJuUkRiMnh2Y2ljc1hHNGdJQ0FnSUNCc2FXNWxTR1ZwWjJoME9pQXhMRnh1SUNBZ0lDQWdjM1J5YjJ0bE9pQW5ZM1Z5Y21WdWRFTnZiRzl5Snl4Y2JpQWdJQ0FnSUhOMGNtOXJaVmRwWkhSb09pQXdMRnh1SUNBZ0lIMTlYRzRnSUNBZ2V5NHVMbkJ5YjNCemZWeHVJQ0F2UGx4dUtUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1EzSnZjM05KWTI5dVVISnZjSE1nUFNCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKM04yWnlkZElDWWdleUJ6YVhwbFB6b2diblZ0WW1WeUlIMDdYRzVsZUhCdmNuUWdZMjl1YzNRZ1EzSnZjM05KWTI5dUlEMGdLSEJ5YjNCek9pQkRjbTl6YzBsamIyNVFjbTl3Y3lrZ1BUNGdLRnh1SUNBOFUzWm5JSE5wZW1VOWV6SXdmU0I3TGk0dWNISnZjSE45UGx4dUlDQWdJRHh3WVhSb0lHUTlYQ0pOTVRRdU16UTRJREUwTGpnME9XTXRNQzQwTmprZ01DNDBOamt0TVM0eU1qa2dNQzQwTmprdE1TNDJPVGNnTUd3dE1pNDJOVEV0TXk0d016QXRNaTQyTlRFZ015NHdNamxqTFRBdU5EWTVJREF1TkRZNUxURXVNakk1SURBdU5EWTVMVEV1TmprM0lEQXRNQzQwTmprdE1DNDBOamt0TUM0ME5qa3RNUzR5TWprZ01DMHhMalk1TjJ3eUxqYzFPQzB6TGpFMUxUSXVOelU1TFRNdU1UVXlZeTB3TGpRMk9TMHdMalEyT1Mwd0xqUTJPUzB4TGpJeU9DQXdMVEV1TmprM2N6RXVNakk0TFRBdU5EWTVJREV1TmprM0lEQnNNaTQyTlRJZ015NHdNekVnTWk0Mk5URXRNeTR3TXpGak1DNDBOamt0TUM0ME5qa2dNUzR5TWpndE1DNDBOamtnTVM0Mk9UY2dNSE13TGpRMk9TQXhMakl5T1NBd0lERXVOamszYkMweUxqYzFPQ0F6TGpFMU1pQXlMamMxT0NBekxqRTFZekF1TkRZNUlEQXVORFk1SURBdU5EWTVJREV1TWpJNUlEQWdNUzQyT1RoNlhDSWdMejVjYmlBZ1BDOVRkbWMrWEc0cE8xeHVaWGh3YjNKMElIUjVjR1VnUkc5M2JrTm9aWFp5YjI1UWNtOXdjeUE5SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25jM1puSjEwZ0ppQjdJSE5wZW1VL09pQnVkVzFpWlhJZ2ZUdGNibVY0Y0c5eWRDQmpiMjV6ZENCRWIzZHVRMmhsZG5KdmJpQTlJQ2h3Y205d2N6b2dSRzkzYmtOb1pYWnliMjVRY205d2N5a2dQVDRnS0Z4dUlDQThVM1puSUhOcGVtVTllekl3ZlNCN0xpNHVjSEp2Y0hOOVBseHVJQ0FnSUR4d1lYUm9JR1E5WENKTk5DNDFNVFlnTnk0MU5EaGpNQzQwTXpZdE1DNDBORFlnTVM0d05ETXRNQzQwT0RFZ01TNDFOellnTUd3ekxqa3dPQ0F6TGpjME55QXpMamt3T0MwekxqYzBOMk13TGpVek15MHdMalE0TVNBeExqRTBNUzB3TGpRME5pQXhMalUzTkNBd0lEQXVORE0ySURBdU5EUTFJREF1TkRBNElERXVNVGszSURBZ01TNDJNVFV0TUM0ME1EWWdNQzQwTVRndE5DNDJPVFVnTkM0MU1ESXROQzQyT1RVZ05DNDFNREl0TUM0eU1UY2dNQzR5TWpNdE1DNDFNRElnTUM0ek16VXRNQzQzT0RjZ01DNHpNelZ6TFRBdU5UY3RNQzR4TVRJdE1DNDNPRGt0TUM0ek16VmpNQ0F3TFRRdU1qZzNMVFF1TURnMExUUXVOamsxTFRRdU5UQXljeTB3TGpRek5pMHhMakUzSURBdE1TNDJNVFY2WENJZ0x6NWNiaUFnUEM5VGRtYytYRzRwTzF4dVhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpOHZJRVJ5YjNCa2IzZHVJQ1lnUTJ4bFlYSWdRblYwZEc5dWMxeHVMeThnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdSSEp2Y0dSdmQyNUpibVJwWTJGMGIzSlFjbTl3Y3p4Y2JpQWdUM0IwYVc5dUlEMGdkVzVyYm05M2JpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNGdQU0JpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtJRDBnUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0Z1pYaDBaVzVrY3lCRGIyMXRiMjVRY205d2MwRnVaRU5zWVhOelRtRnRaVHhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BpQjdYRzRnSUM4cUtpQlVhR1VnWTJocGJHUnlaVzRnZEc4Z1ltVWdjbVZ1WkdWeVpXUWdhVzV6YVdSbElIUm9aU0JwYm1ScFkyRjBiM0l1SUNvdlhHNGdJR05vYVd4a2NtVnVQem9nVW1WaFkzUk9iMlJsTzF4dUlDQXZLaW9nVUhKdmNITWdkR2hoZENCM2FXeHNJR0psSUhCaGMzTmxaQ0J2YmlCMGJ5QjBhR1VnWTJocGJHUnlaVzR1SUNvdlhHNGdJR2x1Ym1WeVVISnZjSE02SUVwVFdDNUpiblJ5YVc1emFXTkZiR1Z0Wlc1MGMxc25aR2wySjEwN1hHNGdJQzhxS2lCVWFHVWdabTlqZFhObFpDQnpkR0YwWlNCdlppQjBhR1VnYzJWc1pXTjBMaUFxTDF4dUlDQnBjMFp2WTNWelpXUTZJR0p2YjJ4bFlXNDdYRzRnSUdselJHbHpZV0pzWldRNklHSnZiMnhsWVc0N1hHNTlYRzVjYm1OdmJuTjBJR0poYzJWRFUxTWdQU0E4WEc0Z0lFOXdkR2x2Yml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNG9YRzRnSUh0Y2JpQWdJQ0JwYzBadlkzVnpaV1FzWEc0Z0lDQWdkR2hsYldVNklIdGNiaUFnSUNBZ0lITndZV05wYm1jNklIc2dZbUZ6WlZWdWFYUWdmU3hjYmlBZ0lDQWdJR052Ykc5eWN5eGNiaUFnSUNCOUxGeHVJQ0I5T2x4dUlDQWdJSHdnUkhKdmNHUnZkMjVKYm1ScFkyRjBiM0pRY205d2N6eFBjSFJwYjI0c0lFbHpUWFZzZEdrc0lFZHliM1Z3UGx4dUlDQWdJSHdnUTJ4bFlYSkpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaXhjYmlBZ2RXNXpkSGxzWldRNklHSnZiMnhsWVc1Y2JpazZJRU5UVTA5aWFtVmpkRmRwZEdoTVlXSmxiQ0E5UGlBb2UxeHVJQ0JzWVdKbGJEb2dKMmx1WkdsallYUnZja052Ym5SaGFXNWxjaWNzWEc0Z0lHUnBjM0JzWVhrNklDZG1iR1Y0Snl4Y2JpQWdkSEpoYm5OcGRHbHZiam9nSjJOdmJHOXlJREUxTUcxekp5eGNiaUFnTGk0dUtIVnVjM1I1YkdWa1hHNGdJQ0FnUHlCN2ZWeHVJQ0FnSURvZ2UxeHVJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ2FYTkdiMk4xYzJWa0lEOGdZMjlzYjNKekxtNWxkWFJ5WVd3Mk1DQTZJR052Ykc5eWN5NXVaWFYwY21Gc01qQXNYRzRnSUNBZ0lDQWdJSEJoWkdScGJtYzZJR0poYzJWVmJtbDBJQ29nTWl4Y2JpQWdJQ0FnSUNBZ0p6cG9iM1psY2ljNklIdGNiaUFnSUNBZ0lDQWdJQ0JqYjJ4dmNqb2dhWE5HYjJOMWMyVmtJRDhnWTI5c2IzSnpMbTVsZFhSeVlXdzRNQ0E2SUdOdmJHOXljeTV1WlhWMGNtRnNOREFzWEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCOUtTeGNibjBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWkhKdmNHUnZkMjVKYm1ScFkyRjBiM0pEVTFNZ1BTQmlZWE5sUTFOVE8xeHVaWGh3YjNKMElHTnZibk4wSUVSeWIzQmtiM2R1U1c1a2FXTmhkRzl5SUQwZ1BGeHVJQ0JQY0hScGIyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVMRnh1SUNCSGNtOTFjQ0JsZUhSbGJtUnpJRWR5YjNWd1FtRnpaVHhQY0hScGIyNCtYRzQrS0Z4dUlDQndjbTl3Y3pvZ1JISnZjR1J2ZDI1SmJtUnBZMkYwYjNKUWNtOXdjenhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BseHVLU0E5UGlCN1hHNGdJR052Ym5OMElIc2dZMmhwYkdSeVpXNHNJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektIQnliM0J6TENBblpISnZjR1J2ZDI1SmJtUnBZMkYwYjNJbkxDQjdYRzRnSUNBZ0lDQWdJR2x1WkdsallYUnZjam9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdKMlJ5YjNCa2IzZHVMV2x1WkdsallYUnZjaWM2SUhSeWRXVXNYRzRnSUNBZ0lDQjlLWDFjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUQ1Y2JpQWdJQ0FnSUh0amFHbHNaSEpsYmlCOGZDQThSRzkzYmtOb1pYWnliMjRnTHo1OVhHNGdJQ0FnUEM5a2FYWStYRzRnSUNrN1hHNTlPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVOc1pXRnlTVzVrYVdOaGRHOXlVSEp2Y0hNOFhHNGdJRTl3ZEdsdmJpQTlJSFZ1YTI1dmQyNHNYRzRnSUVselRYVnNkR2tnWlhoMFpXNWtjeUJpYjI5c1pXRnVJRDBnWW05dmJHVmhiaXhjYmlBZ1IzSnZkWEFnWlhoMFpXNWtjeUJIY205MWNFSmhjMlU4VDNCMGFXOXVQaUE5SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0lHVjRkR1Z1WkhNZ1EyOXRiVzl1VUhKdmNITkJibVJEYkdGemMwNWhiV1U4VDNCMGFXOXVMQ0JKYzAxMWJIUnBMQ0JIY205MWNENGdlMXh1SUNBdktpb2dWR2hsSUdOb2FXeGtjbVZ1SUhSdklHSmxJSEpsYm1SbGNtVmtJR2x1YzJsa1pTQjBhR1VnYVc1a2FXTmhkRzl5TGlBcUwxeHVJQ0JqYUdsc1pISmxiajg2SUZKbFlXTjBUbTlrWlR0Y2JpQWdMeW9xSUZCeWIzQnpJSFJvWVhRZ2QybHNiQ0JpWlNCd1lYTnpaV1FnYjI0Z2RHOGdkR2hsSUdOb2FXeGtjbVZ1TGlBcUwxeHVJQ0JwYm01bGNsQnliM0J6T2lCS1UxZ3VTVzUwY21sdWMybGpSV3hsYldWdWRITmJKMlJwZGlkZE8xeHVJQ0F2S2lvZ1ZHaGxJR1p2WTNWelpXUWdjM1JoZEdVZ2IyWWdkR2hsSUhObGJHVmpkQzRnS2k5Y2JpQWdhWE5HYjJOMWMyVmtPaUJpYjI5c1pXRnVPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWTJ4bFlYSkpibVJwWTJGMGIzSkRVMU1nUFNCaVlYTmxRMU5UTzF4dVpYaHdiM0owSUdOdmJuTjBJRU5zWldGeVNXNWthV05oZEc5eUlEMGdQRnh1SUNCUGNIUnBiMjRzWEc0Z0lFbHpUWFZzZEdrZ1pYaDBaVzVrY3lCaWIyOXNaV0Z1TEZ4dUlDQkhjbTkxY0NCbGVIUmxibVJ6SUVkeWIzVndRbUZ6WlR4UGNIUnBiMjQrWEc0K0tGeHVJQ0J3Y205d2N6b2dRMnhsWVhKSmJtUnBZMkYwYjNKUWNtOXdjenhQY0hScGIyNHNJRWx6VFhWc2RHa3NJRWR5YjNWd1BseHVLU0E5UGlCN1hHNGdJR052Ym5OMElIc2dZMmhwYkdSeVpXNHNJR2x1Ym1WeVVISnZjSE1nZlNBOUlIQnliM0J6TzF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUR4a2FYWmNiaUFnSUNBZ0lIc3VMaTVuWlhSVGRIbHNaVkJ5YjNCektIQnliM0J6TENBblkyeGxZWEpKYm1ScFkyRjBiM0luTENCN1hHNGdJQ0FnSUNBZ0lHbHVaR2xqWVhSdmNqb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ0oyTnNaV0Z5TFdsdVpHbGpZWFJ2Y2ljNklIUnlkV1VzWEc0Z0lDQWdJQ0I5S1gxY2JpQWdJQ0FnSUhzdUxpNXBibTVsY2xCeWIzQnpmVnh1SUNBZ0lENWNiaUFnSUNBZ0lIdGphR2xzWkhKbGJpQjhmQ0E4UTNKdmMzTkpZMjl1SUM4K2ZWeHVJQ0FnSUR3dlpHbDJQbHh1SUNBcE8xeHVmVHRjYmx4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0dkx5QlRaWEJoY21GMGIzSmNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRWx1WkdsallYUnZjbE5sY0dGeVlYUnZjbEJ5YjNCelBGeHVJQ0JQY0hScGIyNGdQU0IxYm10dWIzZHVMRnh1SUNCSmMwMTFiSFJwSUdWNGRHVnVaSE1nWW05dmJHVmhiaUE5SUdKdmIyeGxZVzRzWEc0Z0lFZHliM1Z3SUdWNGRHVnVaSE1nUjNKdmRYQkNZWE5sUEU5d2RHbHZiajRnUFNCSGNtOTFjRUpoYzJVOFQzQjBhVzl1UGx4dVBpQmxlSFJsYm1SeklFTnZiVzF2YmxCeWIzQnpRVzVrUTJ4aGMzTk9ZVzFsUEU5d2RHbHZiaXdnU1hOTmRXeDBhU3dnUjNKdmRYQStJSHRjYmlBZ2FYTkVhWE5oWW14bFpEb2dZbTl2YkdWaGJqdGNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBibTVsY2xCeWIzQnpQem9nU2xOWUxrbHVkSEpwYm5OcFkwVnNaVzFsYm5Seld5ZHpjR0Z1SjEwN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnBibVJwWTJGMGIzSlRaWEJoY21GMGIzSkRVMU1nUFNBOFhHNGdJRTl3ZEdsdmJpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRvWEc0Z0lIdGNiaUFnSUNCcGMwUnBjMkZpYkdWa0xGeHVJQ0FnSUhSb1pXMWxPaUI3WEc0Z0lDQWdJQ0J6Y0dGamFXNW5PaUI3SUdKaGMyVlZibWwwSUgwc1hHNGdJQ0FnSUNCamIyeHZjbk1zWEc0Z0lDQWdmU3hjYmlBZ2ZUb2dTVzVrYVdOaGRHOXlVMlZ3WVhKaGRHOXlVSEp2Y0hNOFQzQjBhVzl1TENCSmMwMTFiSFJwTENCSGNtOTFjRDRzWEc0Z0lIVnVjM1I1YkdWa09pQmliMjlzWldGdVhHNHBPaUJEVTFOUFltcGxZM1JYYVhSb1RHRmlaV3dnUFQ0Z0tIdGNiaUFnYkdGaVpXdzZJQ2RwYm1ScFkyRjBiM0pUWlhCaGNtRjBiM0luTEZ4dUlDQmhiR2xuYmxObGJHWTZJQ2R6ZEhKbGRHTm9KeXhjYmlBZ2QybGtkR2c2SURFc1hHNGdJQzR1TGloMWJuTjBlV3hsWkZ4dUlDQWdJRDhnZTMxY2JpQWdJQ0E2SUh0Y2JpQWdJQ0FnSUNBZ1ltRmphMmR5YjNWdVpFTnZiRzl5T2lCcGMwUnBjMkZpYkdWa0lEOGdZMjlzYjNKekxtNWxkWFJ5WVd3eE1DQTZJR052Ykc5eWN5NXVaWFYwY21Gc01qQXNYRzRnSUNBZ0lDQWdJRzFoY21kcGJrSnZkSFJ2YlRvZ1ltRnpaVlZ1YVhRZ0tpQXlMRnh1SUNBZ0lDQWdJQ0J0WVhKbmFXNVViM0E2SUdKaGMyVlZibWwwSUNvZ01peGNiaUFnSUNBZ0lIMHBMRnh1ZlNrN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCSmJtUnBZMkYwYjNKVFpYQmhjbUYwYjNJZ1BTQThYRzRnSUU5d2RHbHZiaXhjYmlBZ1NYTk5kV3gwYVNCbGVIUmxibVJ6SUdKdmIyeGxZVzRzWEc0Z0lFZHliM1Z3SUdWNGRHVnVaSE1nUjNKdmRYQkNZWE5sUEU5d2RHbHZiajVjYmo0b1hHNGdJSEJ5YjNCek9pQkpibVJwWTJGMGIzSlRaWEJoY21GMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQbHh1S1NBOVBpQjdYRzRnSUdOdmJuTjBJSHNnYVc1dVpYSlFjbTl3Y3lCOUlEMGdjSEp2Y0hNN1hHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ1BITndZVzVjYmlBZ0lDQWdJSHN1TGk1cGJtNWxjbEJ5YjNCemZWeHVJQ0FnSUNBZ2V5NHVMbWRsZEZOMGVXeGxVSEp2Y0hNb2NISnZjSE1zSUNkcGJtUnBZMkYwYjNKVFpYQmhjbUYwYjNJbkxDQjdYRzRnSUNBZ0lDQWdJQ2RwYm1ScFkyRjBiM0l0YzJWd1lYSmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJSDBwZlZ4dUlDQWdJQzgrWEc0Z0lDazdYRzU5TzF4dVhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpOHZJRXh2WVdScGJtZGNiaTh2SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVYRzVqYjI1emRDQnNiMkZrYVc1blJHOTBRVzVwYldGMGFXOXVjeUE5SUd0bGVXWnlZVzFsYzJCY2JpQWdNQ1VzSURnd0pTd2dNVEF3SlNCN0lHOXdZV05wZEhrNklEQTdJSDFjYmlBZ05EQWxJSHNnYjNCaFkybDBlVG9nTVRzZ2ZWeHVZRHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR3h2WVdScGJtZEpibVJwWTJGMGIzSkRVMU1nUFNBOFhHNGdJRTl3ZEdsdmJpeGNiaUFnU1hOTmRXeDBhU0JsZUhSbGJtUnpJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNWNiajRvWEc0Z0lIdGNiaUFnSUNCcGMwWnZZM1Z6WldRc1hHNGdJQ0FnYzJsNlpTeGNiaUFnSUNCMGFHVnRaVG9nZTF4dUlDQWdJQ0FnWTI5c2IzSnpMRnh1SUNBZ0lDQWdjM0JoWTJsdVp6b2dleUJpWVhObFZXNXBkQ0I5TEZ4dUlDQWdJSDBzWEc0Z0lIMDZJRXh2WVdScGJtZEpibVJwWTJGMGIzSlFjbTl3Y3p4UGNIUnBiMjRzSUVselRYVnNkR2tzSUVkeWIzVndQaXhjYmlBZ2RXNXpkSGxzWldRNklHSnZiMnhsWVc1Y2JpazZJRU5UVTA5aWFtVmpkRmRwZEdoTVlXSmxiQ0E5UGlBb2UxeHVJQ0JzWVdKbGJEb2dKMnh2WVdScGJtZEpibVJwWTJGMGIzSW5MRnh1SUNCa2FYTndiR0Y1T2lBblpteGxlQ2NzWEc0Z0lIUnlZVzV6YVhScGIyNDZJQ2RqYjJ4dmNpQXhOVEJ0Y3ljc1hHNGdJR0ZzYVdkdVUyVnNaam9nSjJObGJuUmxjaWNzWEc0Z0lHWnZiblJUYVhwbE9pQnphWHBsTEZ4dUlDQnNhVzVsU0dWcFoyaDBPaUF4TEZ4dUlDQnRZWEpuYVc1U2FXZG9kRG9nYzJsNlpTeGNiaUFnZEdWNGRFRnNhV2R1T2lBblkyVnVkR1Z5Snl4Y2JpQWdkbVZ5ZEdsallXeEJiR2xuYmpvZ0oyMXBaR1JzWlNjc1hHNGdJQzR1TGloMWJuTjBlV3hsWkZ4dUlDQWdJRDhnZTMxY2JpQWdJQ0E2SUh0Y2JpQWdJQ0FnSUNBZ1kyOXNiM0k2SUdselJtOWpkWE5sWkNBL0lHTnZiRzl5Y3k1dVpYVjBjbUZzTmpBZ09pQmpiMnh2Y25NdWJtVjFkSEpoYkRJd0xGeHVJQ0FnSUNBZ0lDQndZV1JrYVc1bk9pQmlZWE5sVlc1cGRDQXFJRElzWEc0Z0lDQWdJQ0I5S1N4Y2JuMHBPMXh1WEc1cGJuUmxjbVpoWTJVZ1RHOWhaR2x1WjBSdmRGQnliM0J6SUh0Y2JpQWdaR1ZzWVhrNklHNTFiV0psY2p0Y2JpQWdiMlptYzJWME9pQmliMjlzWldGdU8xeHVmVnh1WTI5dWMzUWdURzloWkdsdVowUnZkQ0E5SUNoN0lHUmxiR0Y1TENCdlptWnpaWFFnZlRvZ1RHOWhaR2x1WjBSdmRGQnliM0J6S1NBOVBpQW9YRzRnSUR4emNHRnVYRzRnSUNBZ1kzTnpQWHQ3WEc0Z0lDQWdJQ0JoYm1sdFlYUnBiMjQ2SUdBa2UyeHZZV1JwYm1kRWIzUkJibWx0WVhScGIyNXpmU0F4Y3lCbFlYTmxMV2x1TFc5MWRDQWtlMlJsYkdGNWZXMXpJR2x1Wm1sdWFYUmxPMkFzWEc0Z0lDQWdJQ0JpWVdOclozSnZkVzVrUTI5c2IzSTZJQ2RqZFhKeVpXNTBRMjlzYjNJbkxGeHVJQ0FnSUNBZ1ltOXlaR1Z5VW1Ga2FYVnpPaUFuTVdWdEp5eGNiaUFnSUNBZ0lHUnBjM0JzWVhrNklDZHBibXhwYm1VdFlteHZZMnNuTEZ4dUlDQWdJQ0FnYldGeVoybHVUR1ZtZERvZ2IyWm1jMlYwSUQ4Z0p6RmxiU2NnT2lCMWJtUmxabWx1WldRc1hHNGdJQ0FnSUNCb1pXbG5hSFE2SUNjeFpXMG5MRnh1SUNBZ0lDQWdkbVZ5ZEdsallXeEJiR2xuYmpvZ0ozUnZjQ2NzWEc0Z0lDQWdJQ0IzYVdSMGFEb2dKekZsYlNjc1hHNGdJQ0FnZlgxY2JpQWdMejVjYmlrN1hHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdURzloWkdsdVowbHVaR2xqWVhSdmNsQnliM0J6UEZ4dUlDQlBjSFJwYjI0Z1BTQjFibXR1YjNkdUxGeHVJQ0JKYzAxMWJIUnBJR1Y0ZEdWdVpITWdZbTl2YkdWaGJpQTlJR0p2YjJ4bFlXNHNYRzRnSUVkeWIzVndJR1Y0ZEdWdVpITWdSM0p2ZFhCQ1lYTmxQRTl3ZEdsdmJqNGdQU0JIY205MWNFSmhjMlU4VDNCMGFXOXVQbHh1UGlCbGVIUmxibVJ6SUVOdmJXMXZibEJ5YjNCelFXNWtRMnhoYzNOT1lXMWxQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0lIdGNiaUFnTHlvcUlGQnliM0J6SUhSb1lYUWdkMmxzYkNCaVpTQndZWE56WldRZ2IyNGdkRzhnZEdobElHTm9hV3hrY21WdUxpQXFMMXh1SUNCcGJtNWxjbEJ5YjNCek9pQktVMWd1U1c1MGNtbHVjMmxqUld4bGJXVnVkSE5iSjJScGRpZGRPMXh1SUNBdktpb2dWR2hsSUdadlkzVnpaV1FnYzNSaGRHVWdiMllnZEdobElITmxiR1ZqZEM0Z0tpOWNiaUFnYVhOR2IyTjFjMlZrT2lCaWIyOXNaV0Z1TzF4dUlDQnBjMFJwYzJGaWJHVmtPaUJpYjI5c1pXRnVPMXh1SUNBdktpb2dVMlYwSUhOcGVtVWdiMllnZEdobElHTnZiblJoYVc1bGNpNGdLaTljYmlBZ2MybDZaVG9nYm5WdFltVnlPMXh1ZlZ4dVpYaHdiM0owSUdOdmJuTjBJRXh2WVdScGJtZEpibVJwWTJGMGIzSWdQU0E4WEc0Z0lFOXdkR2x2Yml4Y2JpQWdTWE5OZFd4MGFTQmxlSFJsYm1SeklHSnZiMnhsWVc0c1hHNGdJRWR5YjNWd0lHVjRkR1Z1WkhNZ1IzSnZkWEJDWVhObFBFOXdkR2x2Ymo1Y2JqNG9lMXh1SUNCcGJtNWxjbEJ5YjNCekxGeHVJQ0JwYzFKMGJDeGNiaUFnYzJsNlpTQTlJRFFzWEc0Z0lDNHVMbkpsYzNSUWNtOXdjMXh1ZlRvZ1RHOWhaR2x1WjBsdVpHbGpZWFJ2Y2xCeWIzQnpQRTl3ZEdsdmJpd2dTWE5OZFd4MGFTd2dSM0p2ZFhBK0tTQTlQaUI3WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnUEdScGRseHVJQ0FnSUNBZ2V5NHVMbWRsZEZOMGVXeGxVSEp2Y0hNb1hHNGdJQ0FnSUNBZ0lIc2dMaTR1Y21WemRGQnliM0J6TENCcGJtNWxjbEJ5YjNCekxDQnBjMUowYkN3Z2MybDZaU0I5TEZ4dUlDQWdJQ0FnSUNBbmJHOWhaR2x1WjBsdVpHbGpZWFJ2Y2ljc1hHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0JwYm1ScFkyRjBiM0k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnSjJ4dllXUnBibWN0YVc1a2FXTmhkRzl5SnpvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnS1gxY2JpQWdJQ0FnSUhzdUxpNXBibTVsY2xCeWIzQnpmVnh1SUNBZ0lENWNiaUFnSUNBZ0lEeE1iMkZrYVc1blJHOTBJR1JsYkdGNVBYc3dmU0J2Wm1aelpYUTllMmx6VW5Sc2ZTQXZQbHh1SUNBZ0lDQWdQRXh2WVdScGJtZEViM1FnWkdWc1lYazllekUyTUgwZ2IyWm1jMlYwSUM4K1hHNGdJQ0FnSUNBOFRHOWhaR2x1WjBSdmRDQmtaV3hoZVQxN016SXdmU0J2Wm1aelpYUTlleUZwYzFKMGJIMGdMejVjYmlBZ0lDQThMMlJwZGo1Y2JpQWdLVHRjYm4wN1hHNGlYWDA9ICovXCIpXG4gIH0pO1xufTtcbnZhciBMb2FkaW5nSW5kaWNhdG9yID0gZnVuY3Rpb24gTG9hZGluZ0luZGljYXRvcihfcmVmNykge1xuICB2YXIgaW5uZXJQcm9wcyA9IF9yZWY3LmlubmVyUHJvcHMsXG4gICAgaXNSdGwgPSBfcmVmNy5pc1J0bCxcbiAgICBfcmVmNyRzaXplID0gX3JlZjcuc2l6ZSxcbiAgICBzaXplID0gX3JlZjckc2l6ZSA9PT0gdm9pZCAwID8gNCA6IF9yZWY3JHNpemUsXG4gICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY3LCBfZXhjbHVkZWQyKTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RQcm9wcyksIHt9LCB7XG4gICAgaW5uZXJQcm9wczogaW5uZXJQcm9wcyxcbiAgICBpc1J0bDogaXNSdGwsXG4gICAgc2l6ZTogc2l6ZVxuICB9KSwgJ2xvYWRpbmdJbmRpY2F0b3InLCB7XG4gICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBqc3goTG9hZGluZ0RvdCwge1xuICAgIGRlbGF5OiAwLFxuICAgIG9mZnNldDogaXNSdGxcbiAgfSksIGpzeChMb2FkaW5nRG90LCB7XG4gICAgZGVsYXk6IDE2MCxcbiAgICBvZmZzZXQ6IHRydWVcbiAgfSksIGpzeChMb2FkaW5nRG90LCB7XG4gICAgZGVsYXk6IDMyMCxcbiAgICBvZmZzZXQ6ICFpc1J0bFxuICB9KSk7XG59O1xuXG52YXIgY3NzJDEgPSBmdW5jdGlvbiBjc3MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnMsXG4gICAgYm9yZGVyUmFkaXVzID0gX3JlZiR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnY29udHJvbCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBtaW5IZWlnaHQ6IHNwYWNpbmcuY29udHJvbEhlaWdodCxcbiAgICBvdXRsaW5lOiAnMCAhaW1wb3J0YW50JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB0cmFuc2l0aW9uOiAnYWxsIDEwMG1zJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsNSA6IGNvbG9ycy5uZXV0cmFsMCxcbiAgICBib3JkZXJDb2xvcjogaXNEaXNhYmxlZCA/IGNvbG9ycy5uZXV0cmFsMTAgOiBpc0ZvY3VzZWQgPyBjb2xvcnMucHJpbWFyeSA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gICAgYm9yZGVyUmFkaXVzOiBib3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm94U2hhZG93OiBpc0ZvY3VzZWQgPyBcIjAgMCAwIDFweCBcIi5jb25jYXQoY29sb3JzLnByaW1hcnkpIDogdW5kZWZpbmVkLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYm9yZGVyQ29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5wcmltYXJ5IDogY29sb3JzLm5ldXRyYWwzMFxuICAgIH1cbiAgfSk7XG59O1xudmFyIENvbnRyb2wgPSBmdW5jdGlvbiBDb250cm9sKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZCxcbiAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIG1lbnVJc09wZW4gPSBwcm9wcy5tZW51SXNPcGVuO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IGlubmVyUmVmXG4gIH0sIGdldFN0eWxlUHJvcHMocHJvcHMsICdjb250cm9sJywge1xuICAgIGNvbnRyb2w6IHRydWUsXG4gICAgJ2NvbnRyb2wtLWlzLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnY29udHJvbC0taXMtZm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnY29udHJvbC0tbWVudS1pcy1vcGVuJzogbWVudUlzT3BlblxuICB9KSwgaW5uZXJQcm9wcywge1xuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBpc0Rpc2FibGVkIHx8IHVuZGVmaW5lZFxuICB9KSwgY2hpbGRyZW4pO1xufTtcbnZhciBDb250cm9sJDEgPSBDb250cm9sO1xuXG52YXIgX2V4Y2x1ZGVkJDEgPSBbXCJkYXRhXCJdO1xudmFyIGdyb3VwQ1NTID0gZnVuY3Rpb24gZ3JvdXBDU1MoX3JlZiwgdW5zdHlsZWQpIHtcbiAgdmFyIHNwYWNpbmcgPSBfcmVmLnRoZW1lLnNwYWNpbmc7XG4gIHJldHVybiB1bnN0eWxlZCA/IHt9IDoge1xuICAgIHBhZGRpbmdCb3R0b206IHNwYWNpbmcuYmFzZVVuaXQgKiAyLFxuICAgIHBhZGRpbmdUb3A6IHNwYWNpbmcuYmFzZVVuaXQgKiAyXG4gIH07XG59O1xudmFyIEdyb3VwID0gZnVuY3Rpb24gR3JvdXAocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgY3ggPSBwcm9wcy5jeCxcbiAgICBnZXRTdHlsZXMgPSBwcm9wcy5nZXRTdHlsZXMsXG4gICAgZ2V0Q2xhc3NOYW1lcyA9IHByb3BzLmdldENsYXNzTmFtZXMsXG4gICAgSGVhZGluZyA9IHByb3BzLkhlYWRpbmcsXG4gICAgaGVhZGluZ1Byb3BzID0gcHJvcHMuaGVhZGluZ1Byb3BzLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzLFxuICAgIGxhYmVsID0gcHJvcHMubGFiZWwsXG4gICAgdGhlbWUgPSBwcm9wcy50aGVtZSxcbiAgICBzZWxlY3RQcm9wcyA9IHByb3BzLnNlbGVjdFByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnZ3JvdXAnLCB7XG4gICAgZ3JvdXA6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpLCBqc3goSGVhZGluZywgX2V4dGVuZHMoe30sIGhlYWRpbmdQcm9wcywge1xuICAgIHNlbGVjdFByb3BzOiBzZWxlY3RQcm9wcyxcbiAgICB0aGVtZTogdGhlbWUsXG4gICAgZ2V0U3R5bGVzOiBnZXRTdHlsZXMsXG4gICAgZ2V0Q2xhc3NOYW1lczogZ2V0Q2xhc3NOYW1lcyxcbiAgICBjeDogY3hcbiAgfSksIGxhYmVsKSwganN4KFwiZGl2XCIsIG51bGwsIGNoaWxkcmVuKSk7XG59O1xudmFyIGdyb3VwSGVhZGluZ0NTUyA9IGZ1bmN0aW9uIGdyb3VwSGVhZGluZ0NTUyhfcmVmMiwgdW5zdHlsZWQpIHtcbiAgdmFyIF9yZWYyJHRoZW1lID0gX3JlZjIudGhlbWUsXG4gICAgY29sb3JzID0gX3JlZjIkdGhlbWUuY29sb3JzLFxuICAgIHNwYWNpbmcgPSBfcmVmMiR0aGVtZS5zcGFjaW5nO1xuICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgbGFiZWw6ICdncm91cCcsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBjb2xvcnMubmV1dHJhbDQwLFxuICAgIGZvbnRTaXplOiAnNzUlJyxcbiAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgbWFyZ2luQm90dG9tOiAnMC4yNWVtJyxcbiAgICBwYWRkaW5nTGVmdDogc3BhY2luZy5iYXNlVW5pdCAqIDMsXG4gICAgcGFkZGluZ1JpZ2h0OiBzcGFjaW5nLmJhc2VVbml0ICogMyxcbiAgICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ1xuICB9KTtcbn07XG52YXIgR3JvdXBIZWFkaW5nID0gZnVuY3Rpb24gR3JvdXBIZWFkaW5nKHByb3BzKSB7XG4gIHZhciBfY2xlYW5Db21tb25Qcm9wcyA9IGNsZWFuQ29tbW9uUHJvcHMocHJvcHMpO1xuICAgIF9jbGVhbkNvbW1vblByb3BzLmRhdGE7XG4gICAgdmFyIGlubmVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2NsZWFuQ29tbW9uUHJvcHMsIF9leGNsdWRlZCQxKTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2dyb3VwSGVhZGluZycsIHtcbiAgICAnZ3JvdXAtaGVhZGluZyc6IHRydWVcbiAgfSksIGlubmVyUHJvcHMpKTtcbn07XG52YXIgR3JvdXAkMSA9IEdyb3VwO1xuXG52YXIgX2V4Y2x1ZGVkID0gW1wiaW5uZXJSZWZcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaXNIaWRkZW5cIiwgXCJpbnB1dENsYXNzTmFtZVwiXTtcbnZhciBpbnB1dENTUyA9IGZ1bmN0aW9uIGlucHV0Q1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZiR0aGVtZS5zcGFjaW5nLFxuICAgIGNvbG9ycyA9IF9yZWYkdGhlbWUuY29sb3JzO1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICB2aXNpYmlsaXR5OiBpc0Rpc2FibGVkID8gJ2hpZGRlbicgOiAndmlzaWJsZScsXG4gICAgLy8gZm9yY2UgY3NzIHRvIHJlY29tcHV0ZSB3aGVuIHZhbHVlIGNoYW5nZSBkdWUgdG8gQGVtb3Rpb24gYnVnLlxuICAgIC8vIFdlIGNhbiByZW1vdmUgaXQgd2hlbmV2ZXIgdGhlIGJ1ZyBpcyBmaXhlZC5cbiAgICB0cmFuc2Zvcm06IHZhbHVlID8gJ3RyYW5zbGF0ZVooMCknIDogJydcbiAgfSwgY29udGFpbmVyU3R5bGUpLCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIG1hcmdpbjogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgcGFkZGluZ0JvdHRvbTogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgcGFkZGluZ1RvcDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsODBcbiAgfSk7XG59O1xudmFyIHNwYWNpbmdTdHlsZSA9IHtcbiAgZ3JpZEFyZWE6ICcxIC8gMicsXG4gIGZvbnQ6ICdpbmhlcml0JyxcbiAgbWluV2lkdGg6ICcycHgnLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgb3V0bGluZTogMCxcbiAgcGFkZGluZzogMFxufTtcbnZhciBjb250YWluZXJTdHlsZSA9IHtcbiAgZmxleDogJzEgMSBhdXRvJyxcbiAgZGlzcGxheTogJ2lubGluZS1ncmlkJyxcbiAgZ3JpZEFyZWE6ICcxIC8gMSAvIDIgLyAzJyxcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogJzAgbWluLWNvbnRlbnQnLFxuICAnJjphZnRlcic6IF9vYmplY3RTcHJlYWQoe1xuICAgIGNvbnRlbnQ6ICdhdHRyKGRhdGEtdmFsdWUpIFwiIFwiJyxcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAncHJlJ1xuICB9LCBzcGFjaW5nU3R5bGUpXG59O1xudmFyIGlucHV0U3R5bGUgPSBmdW5jdGlvbiBpbnB1dFN0eWxlKGlzSGlkZGVuKSB7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ2lucHV0JyxcbiAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgIGJhY2tncm91bmQ6IDAsXG4gICAgb3BhY2l0eTogaXNIaWRkZW4gPyAwIDogMSxcbiAgICB3aWR0aDogJzEwMCUnXG4gIH0sIHNwYWNpbmdTdHlsZSk7XG59O1xudmFyIElucHV0ID0gZnVuY3Rpb24gSW5wdXQocHJvcHMpIHtcbiAgdmFyIGN4ID0gcHJvcHMuY3gsXG4gICAgdmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgdmFyIF9jbGVhbkNvbW1vblByb3BzID0gY2xlYW5Db21tb25Qcm9wcyhwcm9wcyksXG4gICAgaW5uZXJSZWYgPSBfY2xlYW5Db21tb25Qcm9wcy5pbm5lclJlZixcbiAgICBpc0Rpc2FibGVkID0gX2NsZWFuQ29tbW9uUHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc0hpZGRlbiA9IF9jbGVhbkNvbW1vblByb3BzLmlzSGlkZGVuLFxuICAgIGlucHV0Q2xhc3NOYW1lID0gX2NsZWFuQ29tbW9uUHJvcHMuaW5wdXRDbGFzc05hbWUsXG4gICAgaW5uZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY2xlYW5Db21tb25Qcm9wcywgX2V4Y2x1ZGVkKTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgZ2V0U3R5bGVQcm9wcyhwcm9wcywgJ2lucHV0Jywge1xuICAgICdpbnB1dC1jb250YWluZXInOiB0cnVlXG4gIH0pLCB7XG4gICAgXCJkYXRhLXZhbHVlXCI6IHZhbHVlIHx8ICcnXG4gIH0pLCBqc3goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjeCh7XG4gICAgICBpbnB1dDogdHJ1ZVxuICAgIH0sIGlucHV0Q2xhc3NOYW1lKSxcbiAgICByZWY6IGlubmVyUmVmLFxuICAgIHN0eWxlOiBpbnB1dFN0eWxlKGlzSGlkZGVuKSxcbiAgICBkaXNhYmxlZDogaXNEaXNhYmxlZFxuICB9LCBpbm5lclByb3BzKSkpO1xufTtcbnZhciBJbnB1dCQxID0gSW5wdXQ7XG5cbnZhciBtdWx0aVZhbHVlQ1NTID0gZnVuY3Rpb24gbXVsdGlWYWx1ZUNTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnbXVsdGlWYWx1ZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIG1pbldpZHRoOiAwXG4gIH0sIHVuc3R5bGVkID8ge30gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcnMubmV1dHJhbDEwLFxuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzIC8gMixcbiAgICBtYXJnaW46IHNwYWNpbmcuYmFzZVVuaXQgLyAyXG4gIH0pO1xufTtcbnZhciBtdWx0aVZhbHVlTGFiZWxDU1MgPSBmdW5jdGlvbiBtdWx0aVZhbHVlTGFiZWxDU1MoX3JlZjIsIHVuc3R5bGVkKSB7XG4gIHZhciBfcmVmMiR0aGVtZSA9IF9yZWYyLnRoZW1lLFxuICAgIGJvcmRlclJhZGl1cyA9IF9yZWYyJHRoZW1lLmJvcmRlclJhZGl1cyxcbiAgICBjb2xvcnMgPSBfcmVmMiR0aGVtZS5jb2xvcnMsXG4gICAgY3JvcFdpdGhFbGxpcHNpcyA9IF9yZWYyLmNyb3BXaXRoRWxsaXBzaXM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiBjcm9wV2l0aEVsbGlwc2lzIHx8IGNyb3BXaXRoRWxsaXBzaXMgPT09IHVuZGVmaW5lZCA/ICdlbGxpcHNpcycgOiB1bmRlZmluZWQsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1cyAvIDIsXG4gICAgY29sb3I6IGNvbG9ycy5uZXV0cmFsODAsXG4gICAgZm9udFNpemU6ICc4NSUnLFxuICAgIHBhZGRpbmc6IDMsXG4gICAgcGFkZGluZ0xlZnQ6IDZcbiAgfSk7XG59O1xudmFyIG11bHRpVmFsdWVSZW1vdmVDU1MgPSBmdW5jdGlvbiBtdWx0aVZhbHVlUmVtb3ZlQ1NTKF9yZWYzLCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZjMkdGhlbWUgPSBfcmVmMy50aGVtZSxcbiAgICBzcGFjaW5nID0gX3JlZjMkdGhlbWUuc3BhY2luZyxcbiAgICBib3JkZXJSYWRpdXMgPSBfcmVmMyR0aGVtZS5ib3JkZXJSYWRpdXMsXG4gICAgY29sb3JzID0gX3JlZjMkdGhlbWUuY29sb3JzLFxuICAgIGlzRm9jdXNlZCA9IF9yZWYzLmlzRm9jdXNlZDtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGRpc3BsYXk6ICdmbGV4J1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzIC8gMixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5kYW5nZXJMaWdodCA6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nTGVmdDogc3BhY2luZy5iYXNlVW5pdCxcbiAgICBwYWRkaW5nUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQsXG4gICAgJzpob3Zlcic6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JzLmRhbmdlckxpZ2h0LFxuICAgICAgY29sb3I6IGNvbG9ycy5kYW5nZXJcbiAgICB9XG4gIH0pO1xufTtcbnZhciBNdWx0aVZhbHVlR2VuZXJpYyA9IGZ1bmN0aW9uIE11bHRpVmFsdWVHZW5lcmljKF9yZWY0KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgIGlubmVyUHJvcHMgPSBfcmVmNC5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIGlubmVyUHJvcHMsIGNoaWxkcmVuKTtcbn07XG52YXIgTXVsdGlWYWx1ZUNvbnRhaW5lciA9IE11bHRpVmFsdWVHZW5lcmljO1xudmFyIE11bHRpVmFsdWVMYWJlbCA9IE11bHRpVmFsdWVHZW5lcmljO1xuZnVuY3Rpb24gTXVsdGlWYWx1ZVJlbW92ZShfcmVmNSkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbixcbiAgICBpbm5lclByb3BzID0gX3JlZjUuaW5uZXJQcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcm9sZTogXCJidXR0b25cIlxuICB9LCBpbm5lclByb3BzKSwgY2hpbGRyZW4gfHwganN4KENyb3NzSWNvbiwge1xuICAgIHNpemU6IDE0XG4gIH0pKTtcbn1cbnZhciBNdWx0aVZhbHVlID0gZnVuY3Rpb24gTXVsdGlWYWx1ZShwcm9wcykge1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICBjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICBkYXRhID0gcHJvcHMuZGF0YSxcbiAgICBpbm5lclByb3BzID0gcHJvcHMuaW5uZXJQcm9wcyxcbiAgICBpc0Rpc2FibGVkID0gcHJvcHMuaXNEaXNhYmxlZCxcbiAgICByZW1vdmVQcm9wcyA9IHByb3BzLnJlbW92ZVByb3BzLFxuICAgIHNlbGVjdFByb3BzID0gcHJvcHMuc2VsZWN0UHJvcHM7XG4gIHZhciBDb250YWluZXIgPSBjb21wb25lbnRzLkNvbnRhaW5lcixcbiAgICBMYWJlbCA9IGNvbXBvbmVudHMuTGFiZWwsXG4gICAgUmVtb3ZlID0gY29tcG9uZW50cy5SZW1vdmU7XG4gIHJldHVybiBqc3goQ29udGFpbmVyLCB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBpbm5lclByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdtdWx0aVZhbHVlJywge1xuICAgICAgJ211bHRpLXZhbHVlJzogdHJ1ZSxcbiAgICAgICdtdWx0aS12YWx1ZS0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gICAgfSkpLCBpbm5lclByb3BzKSxcbiAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHNcbiAgfSwganN4KExhYmVsLCB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBpbm5lclByb3BzOiBfb2JqZWN0U3ByZWFkKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbXVsdGlWYWx1ZUxhYmVsJywge1xuICAgICAgJ211bHRpLXZhbHVlX19sYWJlbCc6IHRydWVcbiAgICB9KSksXG4gICAgc2VsZWN0UHJvcHM6IHNlbGVjdFByb3BzXG4gIH0sIGNoaWxkcmVuKSwganN4KFJlbW92ZSwge1xuICAgIGRhdGE6IGRhdGEsXG4gICAgaW5uZXJQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnbXVsdGlWYWx1ZVJlbW92ZScsIHtcbiAgICAgICdtdWx0aS12YWx1ZV9fcmVtb3ZlJzogdHJ1ZVxuICAgIH0pKSwge30sIHtcbiAgICAgICdhcmlhLWxhYmVsJzogXCJSZW1vdmUgXCIuY29uY2F0KGNoaWxkcmVuIHx8ICdvcHRpb24nKVxuICAgIH0sIHJlbW92ZVByb3BzKSxcbiAgICBzZWxlY3RQcm9wczogc2VsZWN0UHJvcHNcbiAgfSkpO1xufTtcbnZhciBNdWx0aVZhbHVlJDEgPSBNdWx0aVZhbHVlO1xuXG52YXIgb3B0aW9uQ1NTID0gZnVuY3Rpb24gb3B0aW9uQ1NTKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAnb3B0aW9uJyxcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICdyZ2JhKDAsIDAsIDAsIDApJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogaXNTZWxlY3RlZCA/IGNvbG9ycy5wcmltYXJ5IDogaXNGb2N1c2VkID8gY29sb3JzLnByaW1hcnkyNSA6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDIwIDogaXNTZWxlY3RlZCA/IGNvbG9ycy5uZXV0cmFsMCA6ICdpbmhlcml0JyxcbiAgICBwYWRkaW5nOiBcIlwiLmNvbmNhdChzcGFjaW5nLmJhc2VVbml0ICogMiwgXCJweCBcIikuY29uY2F0KHNwYWNpbmcuYmFzZVVuaXQgKiAzLCBcInB4XCIpLFxuICAgIC8vIHByb3ZpZGUgc29tZSBhZmZvcmRhbmNlIG9uIHRvdWNoIGRldmljZXNcbiAgICAnOmFjdGl2ZSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogIWlzRGlzYWJsZWQgPyBpc1NlbGVjdGVkID8gY29sb3JzLnByaW1hcnkgOiBjb2xvcnMucHJpbWFyeTUwIDogdW5kZWZpbmVkXG4gICAgfVxuICB9KTtcbn07XG52YXIgT3B0aW9uID0gZnVuY3Rpb24gT3B0aW9uKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIGlzRm9jdXNlZCA9IHByb3BzLmlzRm9jdXNlZCxcbiAgICBpc1NlbGVjdGVkID0gcHJvcHMuaXNTZWxlY3RlZCxcbiAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnb3B0aW9uJywge1xuICAgIG9wdGlvbjogdHJ1ZSxcbiAgICAnb3B0aW9uLS1pcy1kaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJ29wdGlvbi0taXMtZm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnb3B0aW9uLS1pcy1zZWxlY3RlZCc6IGlzU2VsZWN0ZWRcbiAgfSksIHtcbiAgICByZWY6IGlubmVyUmVmLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBpc0Rpc2FibGVkXG4gIH0sIGlubmVyUHJvcHMpLCBjaGlsZHJlbik7XG59O1xudmFyIE9wdGlvbiQxID0gT3B0aW9uO1xuXG52YXIgcGxhY2Vob2xkZXJDU1MgPSBmdW5jdGlvbiBwbGFjZWhvbGRlckNTUyhfcmVmLCB1bnN0eWxlZCkge1xuICB2YXIgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgc3BhY2luZyA9IF9yZWYkdGhlbWUuc3BhY2luZyxcbiAgICBjb2xvcnMgPSBfcmVmJHRoZW1lLmNvbG9ycztcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgIGxhYmVsOiAncGxhY2Vob2xkZXInLFxuICAgIGdyaWRBcmVhOiAnMSAvIDEgLyAyIC8gMydcbiAgfSwgdW5zdHlsZWQgPyB7fSA6IHtcbiAgICBjb2xvcjogY29sb3JzLm5ldXRyYWw1MCxcbiAgICBtYXJnaW5MZWZ0OiBzcGFjaW5nLmJhc2VVbml0IC8gMixcbiAgICBtYXJnaW5SaWdodDogc3BhY2luZy5iYXNlVW5pdCAvIDJcbiAgfSk7XG59O1xudmFyIFBsYWNlaG9sZGVyID0gZnVuY3Rpb24gUGxhY2Vob2xkZXIocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyA9IHByb3BzLmlubmVyUHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwgX2V4dGVuZHMoe30sIGdldFN0eWxlUHJvcHMocHJvcHMsICdwbGFjZWhvbGRlcicsIHtcbiAgICBwbGFjZWhvbGRlcjogdHJ1ZVxuICB9KSwgaW5uZXJQcm9wcyksIGNoaWxkcmVuKTtcbn07XG52YXIgUGxhY2Vob2xkZXIkMSA9IFBsYWNlaG9sZGVyO1xuXG52YXIgY3NzID0gZnVuY3Rpb24gY3NzKF9yZWYsIHVuc3R5bGVkKSB7XG4gIHZhciBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgIHNwYWNpbmcgPSBfcmVmJHRoZW1lLnNwYWNpbmcsXG4gICAgY29sb3JzID0gX3JlZiR0aGVtZS5jb2xvcnM7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICBsYWJlbDogJ3NpbmdsZVZhbHVlJyxcbiAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xuICB9LCB1bnN0eWxlZCA/IHt9IDoge1xuICAgIGNvbG9yOiBpc0Rpc2FibGVkID8gY29sb3JzLm5ldXRyYWw0MCA6IGNvbG9ycy5uZXV0cmFsODAsXG4gICAgbWFyZ2luTGVmdDogc3BhY2luZy5iYXNlVW5pdCAvIDIsXG4gICAgbWFyZ2luUmlnaHQ6IHNwYWNpbmcuYmFzZVVuaXQgLyAyXG4gIH0pO1xufTtcbnZhciBTaW5nbGVWYWx1ZSA9IGZ1bmN0aW9uIFNpbmdsZVZhbHVlKHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIGlzRGlzYWJsZWQgPSBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIGlubmVyUHJvcHMgPSBwcm9wcy5pbm5lclByb3BzO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIF9leHRlbmRzKHt9LCBnZXRTdHlsZVByb3BzKHByb3BzLCAnc2luZ2xlVmFsdWUnLCB7XG4gICAgJ3NpbmdsZS12YWx1ZSc6IHRydWUsXG4gICAgJ3NpbmdsZS12YWx1ZS0taXMtZGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0pLCBpbm5lclByb3BzKSwgY2hpbGRyZW4pO1xufTtcbnZhciBTaW5nbGVWYWx1ZSQxID0gU2luZ2xlVmFsdWU7XG5cbnZhciBjb21wb25lbnRzID0ge1xuICBDbGVhckluZGljYXRvcjogQ2xlYXJJbmRpY2F0b3IsXG4gIENvbnRyb2w6IENvbnRyb2wkMSxcbiAgRHJvcGRvd25JbmRpY2F0b3I6IERyb3Bkb3duSW5kaWNhdG9yLFxuICBEb3duQ2hldnJvbjogRG93bkNoZXZyb24sXG4gIENyb3NzSWNvbjogQ3Jvc3NJY29uLFxuICBHcm91cDogR3JvdXAkMSxcbiAgR3JvdXBIZWFkaW5nOiBHcm91cEhlYWRpbmcsXG4gIEluZGljYXRvcnNDb250YWluZXI6IEluZGljYXRvcnNDb250YWluZXIsXG4gIEluZGljYXRvclNlcGFyYXRvcjogSW5kaWNhdG9yU2VwYXJhdG9yLFxuICBJbnB1dDogSW5wdXQkMSxcbiAgTG9hZGluZ0luZGljYXRvcjogTG9hZGluZ0luZGljYXRvcixcbiAgTWVudTogTWVudSQxLFxuICBNZW51TGlzdDogTWVudUxpc3QsXG4gIE1lbnVQb3J0YWw6IE1lbnVQb3J0YWwsXG4gIExvYWRpbmdNZXNzYWdlOiBMb2FkaW5nTWVzc2FnZSxcbiAgTm9PcHRpb25zTWVzc2FnZTogTm9PcHRpb25zTWVzc2FnZSxcbiAgTXVsdGlWYWx1ZTogTXVsdGlWYWx1ZSQxLFxuICBNdWx0aVZhbHVlQ29udGFpbmVyOiBNdWx0aVZhbHVlQ29udGFpbmVyLFxuICBNdWx0aVZhbHVlTGFiZWw6IE11bHRpVmFsdWVMYWJlbCxcbiAgTXVsdGlWYWx1ZVJlbW92ZTogTXVsdGlWYWx1ZVJlbW92ZSxcbiAgT3B0aW9uOiBPcHRpb24kMSxcbiAgUGxhY2Vob2xkZXI6IFBsYWNlaG9sZGVyJDEsXG4gIFNlbGVjdENvbnRhaW5lcjogU2VsZWN0Q29udGFpbmVyLFxuICBTaW5nbGVWYWx1ZTogU2luZ2xlVmFsdWUkMSxcbiAgVmFsdWVDb250YWluZXI6IFZhbHVlQ29udGFpbmVyXG59O1xudmFyIGRlZmF1bHRDb21wb25lbnRzID0gZnVuY3Rpb24gZGVmYXVsdENvbXBvbmVudHMocHJvcHMpIHtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29tcG9uZW50cyksIHByb3BzLmNvbXBvbmVudHMpO1xufTtcblxuZXhwb3J0IHsgaXNNb2JpbGVEZXZpY2UgYXMgQSwgbXVsdGlWYWx1ZUFzVmFsdWUgYXMgQiwgc2luZ2xlVmFsdWVBc1ZhbHVlIGFzIEMsIHZhbHVlVGVybmFyeSBhcyBELCBjbGFzc05hbWVzIGFzIEUsIGRlZmF1bHRDb21wb25lbnRzIGFzIEYsIGlzRG9jdW1lbnRFbGVtZW50IGFzIEcsIGNsZWFuVmFsdWUgYXMgSCwgc2Nyb2xsSW50b1ZpZXcgYXMgSSwgbm9vcCBhcyBKLCBub3ROdWxsaXNoIGFzIEssIGhhbmRsZUlucHV0Q2hhbmdlIGFzIEwsIE1lbnVQbGFjZXIgYXMgTSwgY2xlYXJJbmRpY2F0b3JDU1MgYXMgYSwgY29udGFpbmVyQ1NTIGFzIGIsIGNvbXBvbmVudHMgYXMgYywgY3NzJDEgYXMgZCwgZHJvcGRvd25JbmRpY2F0b3JDU1MgYXMgZSwgZ3JvdXBIZWFkaW5nQ1NTIGFzIGYsIGdyb3VwQ1NTIGFzIGcsIGluZGljYXRvclNlcGFyYXRvckNTUyBhcyBoLCBpbmRpY2F0b3JzQ29udGFpbmVyQ1NTIGFzIGksIGlucHV0Q1NTIGFzIGosIGxvYWRpbmdNZXNzYWdlQ1NTIGFzIGssIGxvYWRpbmdJbmRpY2F0b3JDU1MgYXMgbCwgbWVudUNTUyBhcyBtLCBtZW51TGlzdENTUyBhcyBuLCBtZW51UG9ydGFsQ1NTIGFzIG8sIG11bHRpVmFsdWVDU1MgYXMgcCwgbXVsdGlWYWx1ZUxhYmVsQ1NTIGFzIHEsIHJlbW92ZVByb3BzIGFzIHIsIHN1cHBvcnRzUGFzc2l2ZUV2ZW50cyBhcyBzLCBtdWx0aVZhbHVlUmVtb3ZlQ1NTIGFzIHQsIG5vT3B0aW9uc01lc3NhZ2VDU1MgYXMgdSwgb3B0aW9uQ1NTIGFzIHYsIHBsYWNlaG9sZGVyQ1NTIGFzIHcsIGNzcyBhcyB4LCB2YWx1ZUNvbnRhaW5lckNTUyBhcyB5LCBpc1RvdWNoQ2FwYWJsZSBhcyB6IH07XG4iLCJpbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBpbmRleCA9IHVzZUxheW91dEVmZmVjdCA7XG5cbmV4cG9ydCB7IGluZGV4IGFzIGRlZmF1bHQgfTtcbiIsInZhciBzYWZlSXNOYU4gPSBOdW1iZXIuaXNOYU4gfHxcbiAgICBmdW5jdGlvbiBwb255ZmlsbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWU7XG4gICAgfTtcbmZ1bmN0aW9uIGlzRXF1YWwoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmIChmaXJzdCA9PT0gc2Vjb25kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2FmZUlzTmFOKGZpcnN0KSAmJiBzYWZlSXNOYU4oc2Vjb25kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gICAgaWYgKG5ld0lucHV0cy5sZW5ndGggIT09IGxhc3RJbnB1dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG5ld0lucHV0c1tpXSwgbGFzdElucHV0c1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVtb2l6ZU9uZShyZXN1bHRGbiwgaXNFcXVhbCkge1xuICAgIGlmIChpc0VxdWFsID09PSB2b2lkIDApIHsgaXNFcXVhbCA9IGFyZUlucHV0c0VxdWFsOyB9XG4gICAgdmFyIGNhY2hlID0gbnVsbDtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FjaGUgJiYgY2FjaGUubGFzdFRoaXMgPT09IHRoaXMgJiYgaXNFcXVhbChuZXdBcmdzLCBjYWNoZS5sYXN0QXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5sYXN0UmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhY2hlID0ge1xuICAgICAgICAgICAgbGFzdFJlc3VsdDogbGFzdFJlc3VsdCxcbiAgICAgICAgICAgIGxhc3RBcmdzOiBuZXdBcmdzLFxuICAgICAgICAgICAgbGFzdFRoaXM6IHRoaXMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICBtZW1vaXplZC5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBjYWNoZSA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCB7IG1lbW9pemVPbmUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFMgYXMgU2VsZWN0IH0gZnJvbSAnLi4vLi4vZGlzdC9TZWxlY3QtYWFiMDI3ZjMuZXNtLmpzJztcbmltcG9ydCB7IHUgYXMgdXNlU3RhdGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vZGlzdC91c2VTdGF0ZU1hbmFnZXItN2UxZTg0ODkuZXNtLmpzJztcbmltcG9ydCB7IHUgYXMgdXNlQ3JlYXRhYmxlIH0gZnJvbSAnLi4vLi4vZGlzdC91c2VDcmVhdGFibGUtODQwMDgyMzcuZXNtLmpzJztcbmV4cG9ydCB7IHUgYXMgdXNlQ3JlYXRhYmxlIH0gZnJvbSAnLi4vLi4vZGlzdC91c2VDcmVhdGFibGUtODQwMDgyMzcuZXNtLmpzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RTcHJlYWQyJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVTdXBlcic7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXknO1xuaW1wb3J0ICcuLi8uLi9kaXN0L2luZGV4LTY0MWVlNWI4LmVzbS5qcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5JztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy90YWdnZWRUZW1wbGF0ZUxpdGVyYWwnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCAncmVhY3QtZG9tJztcbmltcG9ydCAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgJ3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QnO1xuaW1wb3J0ICdtZW1vaXplLW9uZSc7XG5cbnZhciBDcmVhdGFibGVTZWxlY3QgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgY3JlYXRhYmxlUHJvcHMgPSB1c2VTdGF0ZU1hbmFnZXIocHJvcHMpO1xuICB2YXIgc2VsZWN0UHJvcHMgPSB1c2VDcmVhdGFibGUoY3JlYXRhYmxlUHJvcHMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWZcbiAgfSwgc2VsZWN0UHJvcHMpKTtcbn0pO1xudmFyIENyZWF0YWJsZVNlbGVjdCQxID0gQ3JlYXRhYmxlU2VsZWN0O1xuXG5leHBvcnQgeyBDcmVhdGFibGVTZWxlY3QkMSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXknO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcyc7XG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEggYXMgY2xlYW5WYWx1ZSwgRCBhcyB2YWx1ZVRlcm5hcnkgfSBmcm9tICcuL2luZGV4LTY0MWVlNWI4LmVzbS5qcyc7XG5pbXBvcnQgeyBnIGFzIGdldE9wdGlvblZhbHVlLCBiIGFzIGdldE9wdGlvbkxhYmVsIH0gZnJvbSAnLi9TZWxlY3QtYWFiMDI3ZjMuZXNtLmpzJztcblxudmFyIF9leGNsdWRlZCA9IFtcImFsbG93Q3JlYXRlV2hpbGVMb2FkaW5nXCIsIFwiY3JlYXRlT3B0aW9uUG9zaXRpb25cIiwgXCJmb3JtYXRDcmVhdGVMYWJlbFwiLCBcImlzVmFsaWROZXdPcHRpb25cIiwgXCJnZXROZXdPcHRpb25EYXRhXCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvcHRpb25zXCIsIFwib25DaGFuZ2VcIl07XG52YXIgY29tcGFyZU9wdGlvbiA9IGZ1bmN0aW9uIGNvbXBhcmVPcHRpb24oKSB7XG4gIHZhciBpbnB1dFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIG9wdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgYWNjZXNzb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjYW5kaWRhdGUgPSBTdHJpbmcoaW5wdXRWYWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG9wdGlvblZhbHVlID0gU3RyaW5nKGFjY2Vzc29ycy5nZXRPcHRpb25WYWx1ZShvcHRpb24pKS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgb3B0aW9uTGFiZWwgPSBTdHJpbmcoYWNjZXNzb3JzLmdldE9wdGlvbkxhYmVsKG9wdGlvbikpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBvcHRpb25WYWx1ZSA9PT0gY2FuZGlkYXRlIHx8IG9wdGlvbkxhYmVsID09PSBjYW5kaWRhdGU7XG59O1xudmFyIGJ1aWx0aW5zID0ge1xuICBmb3JtYXRDcmVhdGVMYWJlbDogZnVuY3Rpb24gZm9ybWF0Q3JlYXRlTGFiZWwoaW5wdXRWYWx1ZSkge1xuICAgIHJldHVybiBcIkNyZWF0ZSBcXFwiXCIuY29uY2F0KGlucHV0VmFsdWUsIFwiXFxcIlwiKTtcbiAgfSxcbiAgaXNWYWxpZE5ld09wdGlvbjogZnVuY3Rpb24gaXNWYWxpZE5ld09wdGlvbihpbnB1dFZhbHVlLCBzZWxlY3RWYWx1ZSwgc2VsZWN0T3B0aW9ucywgYWNjZXNzb3JzKSB7XG4gICAgcmV0dXJuICEoIWlucHV0VmFsdWUgfHwgc2VsZWN0VmFsdWUuc29tZShmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICByZXR1cm4gY29tcGFyZU9wdGlvbihpbnB1dFZhbHVlLCBvcHRpb24sIGFjY2Vzc29ycyk7XG4gICAgfSkgfHwgc2VsZWN0T3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIHJldHVybiBjb21wYXJlT3B0aW9uKGlucHV0VmFsdWUsIG9wdGlvbiwgYWNjZXNzb3JzKTtcbiAgICB9KSk7XG4gIH0sXG4gIGdldE5ld09wdGlvbkRhdGE6IGZ1bmN0aW9uIGdldE5ld09wdGlvbkRhdGEoaW5wdXRWYWx1ZSwgb3B0aW9uTGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IG9wdGlvbkxhYmVsLFxuICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICBfX2lzTmV3X186IHRydWVcbiAgICB9O1xuICB9XG59O1xuZnVuY3Rpb24gdXNlQ3JlYXRhYmxlKF9yZWYpIHtcbiAgdmFyIF9yZWYkYWxsb3dDcmVhdGVXaGlsZSA9IF9yZWYuYWxsb3dDcmVhdGVXaGlsZUxvYWRpbmcsXG4gICAgYWxsb3dDcmVhdGVXaGlsZUxvYWRpbmcgPSBfcmVmJGFsbG93Q3JlYXRlV2hpbGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRhbGxvd0NyZWF0ZVdoaWxlLFxuICAgIF9yZWYkY3JlYXRlT3B0aW9uUG9zaSA9IF9yZWYuY3JlYXRlT3B0aW9uUG9zaXRpb24sXG4gICAgY3JlYXRlT3B0aW9uUG9zaXRpb24gPSBfcmVmJGNyZWF0ZU9wdGlvblBvc2kgPT09IHZvaWQgMCA/ICdsYXN0JyA6IF9yZWYkY3JlYXRlT3B0aW9uUG9zaSxcbiAgICBfcmVmJGZvcm1hdENyZWF0ZUxhYmUgPSBfcmVmLmZvcm1hdENyZWF0ZUxhYmVsLFxuICAgIGZvcm1hdENyZWF0ZUxhYmVsID0gX3JlZiRmb3JtYXRDcmVhdGVMYWJlID09PSB2b2lkIDAgPyBidWlsdGlucy5mb3JtYXRDcmVhdGVMYWJlbCA6IF9yZWYkZm9ybWF0Q3JlYXRlTGFiZSxcbiAgICBfcmVmJGlzVmFsaWROZXdPcHRpb24gPSBfcmVmLmlzVmFsaWROZXdPcHRpb24sXG4gICAgaXNWYWxpZE5ld09wdGlvbiA9IF9yZWYkaXNWYWxpZE5ld09wdGlvbiA9PT0gdm9pZCAwID8gYnVpbHRpbnMuaXNWYWxpZE5ld09wdGlvbiA6IF9yZWYkaXNWYWxpZE5ld09wdGlvbixcbiAgICBfcmVmJGdldE5ld09wdGlvbkRhdGEgPSBfcmVmLmdldE5ld09wdGlvbkRhdGEsXG4gICAgZ2V0TmV3T3B0aW9uRGF0YSA9IF9yZWYkZ2V0TmV3T3B0aW9uRGF0YSA9PT0gdm9pZCAwID8gYnVpbHRpbnMuZ2V0TmV3T3B0aW9uRGF0YSA6IF9yZWYkZ2V0TmV3T3B0aW9uRGF0YSxcbiAgICBvbkNyZWF0ZU9wdGlvbiA9IF9yZWYub25DcmVhdGVPcHRpb24sXG4gICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgIHByb3BzT3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8gW10gOiBfcmVmJG9wdGlvbnMsXG4gICAgcHJvcHNPbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgcmVzdFNlbGVjdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG4gIHZhciBfcmVzdFNlbGVjdFByb3BzJGdldE8gPSByZXN0U2VsZWN0UHJvcHMuZ2V0T3B0aW9uVmFsdWUsXG4gICAgZ2V0T3B0aW9uVmFsdWUkMSA9IF9yZXN0U2VsZWN0UHJvcHMkZ2V0TyA9PT0gdm9pZCAwID8gZ2V0T3B0aW9uVmFsdWUgOiBfcmVzdFNlbGVjdFByb3BzJGdldE8sXG4gICAgX3Jlc3RTZWxlY3RQcm9wcyRnZXRPMiA9IHJlc3RTZWxlY3RQcm9wcy5nZXRPcHRpb25MYWJlbCxcbiAgICBnZXRPcHRpb25MYWJlbCQxID0gX3Jlc3RTZWxlY3RQcm9wcyRnZXRPMiA9PT0gdm9pZCAwID8gZ2V0T3B0aW9uTGFiZWwgOiBfcmVzdFNlbGVjdFByb3BzJGdldE8yLFxuICAgIGlucHV0VmFsdWUgPSByZXN0U2VsZWN0UHJvcHMuaW5wdXRWYWx1ZSxcbiAgICBpc0xvYWRpbmcgPSByZXN0U2VsZWN0UHJvcHMuaXNMb2FkaW5nLFxuICAgIGlzTXVsdGkgPSByZXN0U2VsZWN0UHJvcHMuaXNNdWx0aSxcbiAgICB2YWx1ZSA9IHJlc3RTZWxlY3RQcm9wcy52YWx1ZSxcbiAgICBuYW1lID0gcmVzdFNlbGVjdFByb3BzLm5hbWU7XG4gIHZhciBuZXdPcHRpb24gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXNWYWxpZE5ld09wdGlvbihpbnB1dFZhbHVlLCBjbGVhblZhbHVlKHZhbHVlKSwgcHJvcHNPcHRpb25zLCB7XG4gICAgICBnZXRPcHRpb25WYWx1ZTogZ2V0T3B0aW9uVmFsdWUkMSxcbiAgICAgIGdldE9wdGlvbkxhYmVsOiBnZXRPcHRpb25MYWJlbCQxXG4gICAgfSkgPyBnZXROZXdPcHRpb25EYXRhKGlucHV0VmFsdWUsIGZvcm1hdENyZWF0ZUxhYmVsKGlucHV0VmFsdWUpKSA6IHVuZGVmaW5lZDtcbiAgfSwgW2Zvcm1hdENyZWF0ZUxhYmVsLCBnZXROZXdPcHRpb25EYXRhLCBnZXRPcHRpb25MYWJlbCQxLCBnZXRPcHRpb25WYWx1ZSQxLCBpbnB1dFZhbHVlLCBpc1ZhbGlkTmV3T3B0aW9uLCBwcm9wc09wdGlvbnMsIHZhbHVlXSk7XG4gIHZhciBvcHRpb25zID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIChhbGxvd0NyZWF0ZVdoaWxlTG9hZGluZyB8fCAhaXNMb2FkaW5nKSAmJiBuZXdPcHRpb24gPyBjcmVhdGVPcHRpb25Qb3NpdGlvbiA9PT0gJ2ZpcnN0JyA/IFtuZXdPcHRpb25dLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocHJvcHNPcHRpb25zKSkgOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByb3BzT3B0aW9ucyksIFtuZXdPcHRpb25dKSA6IHByb3BzT3B0aW9ucztcbiAgfSwgW2FsbG93Q3JlYXRlV2hpbGVMb2FkaW5nLCBjcmVhdGVPcHRpb25Qb3NpdGlvbiwgaXNMb2FkaW5nLCBuZXdPcHRpb24sIHByb3BzT3B0aW9uc10pO1xuICB2YXIgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUsIGFjdGlvbk1ldGEpIHtcbiAgICBpZiAoYWN0aW9uTWV0YS5hY3Rpb24gIT09ICdzZWxlY3Qtb3B0aW9uJykge1xuICAgICAgcmV0dXJuIHByb3BzT25DaGFuZ2UobmV3VmFsdWUsIGFjdGlvbk1ldGEpO1xuICAgIH1cbiAgICB2YXIgdmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkobmV3VmFsdWUpID8gbmV3VmFsdWUgOiBbbmV3VmFsdWVdO1xuICAgIGlmICh2YWx1ZUFycmF5W3ZhbHVlQXJyYXkubGVuZ3RoIC0gMV0gPT09IG5ld09wdGlvbikge1xuICAgICAgaWYgKG9uQ3JlYXRlT3B0aW9uKSBvbkNyZWF0ZU9wdGlvbihpbnB1dFZhbHVlKTtlbHNlIHtcbiAgICAgICAgdmFyIG5ld09wdGlvbkRhdGEgPSBnZXROZXdPcHRpb25EYXRhKGlucHV0VmFsdWUsIGlucHV0VmFsdWUpO1xuICAgICAgICB2YXIgbmV3QWN0aW9uTWV0YSA9IHtcbiAgICAgICAgICBhY3Rpb246ICdjcmVhdGUtb3B0aW9uJyxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIG9wdGlvbjogbmV3T3B0aW9uRGF0YVxuICAgICAgICB9O1xuICAgICAgICBwcm9wc09uQ2hhbmdlKHZhbHVlVGVybmFyeShpc011bHRpLCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsZWFuVmFsdWUodmFsdWUpKSwgW25ld09wdGlvbkRhdGFdKSwgbmV3T3B0aW9uRGF0YSksIG5ld0FjdGlvbk1ldGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwcm9wc09uQ2hhbmdlKG5ld1ZhbHVlLCBhY3Rpb25NZXRhKTtcbiAgfSwgW2dldE5ld09wdGlvbkRhdGEsIGlucHV0VmFsdWUsIGlzTXVsdGksIG5hbWUsIG5ld09wdGlvbiwgb25DcmVhdGVPcHRpb24sIHByb3BzT25DaGFuZ2UsIHZhbHVlXSk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RTZWxlY3RQcm9wcyksIHt9LCB7XG4gICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2VcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVzZUNyZWF0YWJsZSBhcyB1IH07XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xlYXJJbmRpY2F0b3JQcm9wcyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE9wdGlvbiBhcyBPcHRpb25UeXBlIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvWC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY2xlYXItaW5kaWNhdG9yJ1xuXG5leHBvcnQgY29uc3QgQ2xlYXJJbmRpY2F0b3I6IFJlYWN0LkZDPENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uVHlwZSwgdHJ1ZT4+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGVhclZhbHVlLFxuICAgIGlubmVyUHJvcHM6IHsgcmVmLCAuLi5yZXN0SW5uZXJQcm9wcyB9LFxuICB9ID0gcHJvcHNcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgLy8gVE9ETyBGaXggdGhpcyAtIEJyb2tlIHdpdGggUmVhY3QgMTkgdHlwZXNcbiAgICAgIHJlZj17dHlwZW9mIHJlZiA9PT0gJ3N0cmluZycgPyBudWxsIDogcmVmfVxuICAgICAgey4uLnJlc3RJbm5lclByb3BzfVxuICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICBjbGVhclZhbHVlKClcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIHRhYkluZGV4PXswfVxuICAgID5cbiAgICAgIDxYSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ljb25gfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BzIH0gZnJvbSAncmVhY3Qtc2VsZWN0J1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjb21wb25lbnRzIGFzIFNlbGVjdENvbXBvbmVudHMgfSBmcm9tICdyZWFjdC1zZWxlY3QnXG5cbmltcG9ydCB0eXBlIHsgT3B0aW9uIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBDb250cm9sOiBSZWFjdC5GQzxDb250cm9sUHJvcHM8T3B0aW9uLCBhbnk+PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgaW5uZXJQcm9wcyxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yLW5leHQtbGluZSAvLyBUT0RPIEZpeCB0aGlzIC0gbW9kdWxlUmVzb2x1dGlvbiAxNiBicmVha3Mgb3VyIGRlY2xhcmUgbW9kdWxlXG4gICAgc2VsZWN0UHJvcHM6IHsgY3VzdG9tUHJvcHM6IHsgZGlzYWJsZUtleURvd24sIGRpc2FibGVNb3VzZURvd24gfSA9IHt9IH0gPSB7fSxcbiAgfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8U2VsZWN0Q29tcG9uZW50cy5Db250cm9sXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgaW5uZXJQcm9wcz17e1xuICAgICAgICAgIC4uLmlubmVyUHJvcHMsXG4gICAgICAgICAgb25LZXlEb3duOiAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVLZXlEb3duKSB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgLy8gQ3JlYXRlIGV2ZW50IGZvciBrZXlkb3duIGxpc3RlbmVycyB3aGljaCBzcGVjaWZpY2FsbHkgd2FudCB0byBieXBhc3MgdGhpcyBzdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgY29uc3QgYnlwYXNzRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2J5cGFzc0tleURvd24nLCB7IGRldGFpbDogZSB9KVxuICAgICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGJ5cGFzc0V2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gcmVhY3Qtc2VsZWN0IGhhcyB0aGlzIHR5cGVkIGluY29ycmVjdGx5IHNvIHdlIGRpc2FibGUgdGhlIGxpbnRpbmcgcnVsZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcHJldmVudCByZWFjdC1zZWxlY3QgZnJvbSBoaWphY2tpbmcgdGhlICdvbktleURvd24nIGV2ZW50IHdoaWxlIG1vZGFscyBhcmUgb3BlbiAoaS5lLiB0aGUgJ1JlbGF0aW9uc2hpcCcgZmllbGQgY29tcG9uZW50KVxuXG4gICAgICAgICAgb25Nb3VzZURvd246IChlKSA9PiB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHByZXZlbnQgcmVhY3Qtc2VsZWN0IGZyb20gaGlqYWNraW5nIHRoZSAnb25Nb3VzZURvd24nIGV2ZW50IHdoaWxlIG1vZGFscyBhcmUgb3BlbiAoaS5lLiB0aGUgJ1JlbGF0aW9uc2hpcCcgZmllbGQgY29tcG9uZW50KVxuICAgICAgICAgICAgaWYgKCFkaXNhYmxlTW91c2VEb3duKSB7XG4gICAgICAgICAgICAgIGlubmVyUHJvcHMub25Nb3VzZURvd24oZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1NlbGVjdENvbXBvbmVudHMuQ29udHJvbD5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgRHJvcGRvd25JbmRpY2F0b3JQcm9wcyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IFJlYWN0LCB7IHR5cGUgSlNYIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgT3B0aW9uIGFzIE9wdGlvblR5cGUgfSBmcm9tICcuLi90eXBlcy5qcydcblxuaW1wb3J0IHsgQ2hldnJvbkljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9DaGV2cm9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdkcm9wZG93bi1pbmRpY2F0b3InXG5leHBvcnQgY29uc3QgRHJvcGRvd25JbmRpY2F0b3I6IFJlYWN0LkZDPFxuICB7XG4gICAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydidXR0b24nXVxuICB9ICYgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb25UeXBlLCB0cnVlPlxuPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaW5uZXJQcm9wczogeyByZWYsIC4uLnJlc3RJbm5lclByb3BzIH0sXG4gIH0gPSBwcm9wc1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICByZWY9e3JlZn1cbiAgICAgIHsuLi5yZXN0SW5uZXJQcm9wc31cbiAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgZS5rZXkgPSAnICdcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIDxDaGV2cm9uSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ljb25gfSAvPlxuICAgIDwvYnV0dG9uPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgSW5wdXRQcm9wcyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY29tcG9uZW50cyBhcyBTZWxlY3RDb21wb25lbnRzIH0gZnJvbSAncmVhY3Qtc2VsZWN0J1xuXG5pbXBvcnQgdHlwZSB7IE9wdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgSW5wdXQ6IFJlYWN0LkZDPElucHV0UHJvcHM8T3B0aW9uLCBhbnk+PiA9IChwcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxTZWxlY3RDb21wb25lbnRzLklucHV0XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZGluZyBgYXJpYS1hY3RpdmVkZXNjZW5kYW50YCBmaXhlcyBoeWRyYXRpb24gZXJyb3JcbiAgICAgICAgICogc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvNTQ1OSNpc3N1ZWNvbW1lbnQtMTg3ODAzNzE5NlxuICAgICAgICAgKi9cbiAgICAgICAgYXJpYS1hY3RpdmVkZXNjZW5kYW50PXt1bmRlZmluZWR9XG4gICAgICAvPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlUHJvcHMgfSBmcm9tICdyZWFjdC1zZWxlY3QnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNvbXBvbmVudHMgYXMgU2VsZWN0Q29tcG9uZW50cyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlRHJhZ2dhYmxlU29ydGFibGUgfSBmcm9tICcuLi8uLi9EcmFnZ2FibGVTb3J0YWJsZS91c2VEcmFnZ2FibGVTb3J0YWJsZS9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbXVsdGktdmFsdWUnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU11bHRpVmFsdWVEcmFnZ2FibGVJRChvcHRpb25EYXRhLCB2YWx1ZUZ1bmN0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlRnVuY3Rpb24ob3B0aW9uRGF0YSkgOiBvcHRpb25EYXRhPy52YWx1ZVxufVxuZXhwb3J0IGNvbnN0IE11bHRpVmFsdWU6IFJlYWN0LkZDPE11bHRpVmFsdWVQcm9wczxPcHRpb24+PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGRhdGEsXG4gICAgaW5uZXJQcm9wcyxcbiAgICBpc0Rpc2FibGVkLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLy8gVE9ETyBGaXggdGhpcyAtIG1vZHVsZVJlc29sdXRpb24gMTYgYnJlYWtzIG91ciBkZWNsYXJlIG1vZHVsZVxuICAgIHNlbGVjdFByb3BzOiB7IGN1c3RvbVByb3BzOiB7IGRpc2FibGVNb3VzZURvd24gfSA9IHt9LCBnZXRPcHRpb25WYWx1ZSwgaXNTb3J0YWJsZSB9ID0ge30sXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IGlkID0gZ2VuZXJhdGVNdWx0aVZhbHVlRHJhZ2dhYmxlSUQoZGF0YSwgZ2V0T3B0aW9uVmFsdWUpXG5cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBpc0RyYWdnaW5nLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIHRyYW5zZm9ybSB9ID0gdXNlRHJhZ2dhYmxlU29ydGFibGUoe1xuICAgIGlkLFxuICAgIGRpc2FibGVkOiAhaXNTb3J0YWJsZSxcbiAgfSlcblxuICBjb25zdCBjbGFzc2VzID0gW1xuICAgIGJhc2VDbGFzcyxcbiAgICBjbGFzc05hbWUsXG4gICAgIWlzRGlzYWJsZWQgJiYgaXNTb3J0YWJsZSAmJiAnZHJhZ2dhYmxlJyxcbiAgICBpc0RyYWdnaW5nICYmIGAke2Jhc2VDbGFzc30tLWlzLWRyYWdnaW5nYCxcbiAgXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgLy8gRXh0cmFjdCBvbk1vdXNlRG93biBmcm9tIGxpc3RlbmVycyB0byBwcmVzZXJ2ZSB0aGUgTW91c2VTZW5zb3IgaGFuZGxlclxuICBjb25zdCB7IG9uTW91c2VEb3duOiBsaXN0ZW5lcnNNb3VzZURvd24sIC4uLnJlc3RMaXN0ZW5lcnMgfSA9IGxpc3RlbmVycyB8fCB7fVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPFNlbGVjdENvbXBvbmVudHMuTXVsdGlWYWx1ZVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgICAgaW5uZXJQcm9wcz17e1xuICAgICAgICAgIC4uLihpc1NvcnRhYmxlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIC4uLnJlc3RMaXN0ZW5lcnMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLmlubmVyUHJvcHMsXG4gICAgICAgICAgb25Nb3VzZURvd246IChlKSA9PiB7XG4gICAgICAgICAgICAvLyBDYWxsIHRoZSBNb3VzZVNlbnNvcidzIGhhbmRsZXIgZmlyc3QgdG8gZW5hYmxlIG1vdXNlIGRyYWdnaW5nXG4gICAgICAgICAgICBpZiAoaXNTb3J0YWJsZSAmJiBsaXN0ZW5lcnNNb3VzZURvd24pIHtcbiAgICAgICAgICAgICAgbGlzdGVuZXJzTW91c2VEb3duKGUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZGlzYWJsZU1vdXNlRG93bikge1xuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHByZXZlbnQgdGhlIGRyb3Bkb3duIGZyb20gb3BlbmluZyB3aGVuIGNsaWNraW5nIG9uIHRoZSBkcmFnIGhhbmRsZSwgYnV0IG5vdCB3aGVuIGEgbW9kYWwgaXMgb3BlbiAoaS5lLiB0aGUgJ1JlbGF0aW9uc2hpcCcgZmllbGQgY29tcG9uZW50KVxuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWY6IHNldE5vZGVSZWYsXG4gICAgICAgICAgc3R5bGU6IGlzU29ydGFibGVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAuLi5hdHRyaWJ1dGVzPy5zdHlsZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IE9wdGlvbkxhYmVsIH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB0eXBlIHsgTXVsdGlWYWx1ZVByb3BzIH0gZnJvbSAncmVhY3Qtc2VsZWN0J1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNvbXBvbmVudHMgYXMgU2VsZWN0Q29tcG9uZW50cyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ211bHRpLXZhbHVlLWxhYmVsJ1xuXG5leHBvcnQgY29uc3QgTXVsdGlWYWx1ZUxhYmVsOiBSZWFjdC5GQzxNdWx0aVZhbHVlUHJvcHM8T3B0aW9uPj4gPSAocHJvcHMpID0+IHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvci1uZXh0LWxpbmUvLyBUT0RPIEZpeCB0aGlzIC0gbW9kdWxlUmVzb2x1dGlvbiAxNiBicmVha3Mgb3VyIGRlY2xhcmUgbW9kdWxlXG4gIGNvbnN0IHsgZGF0YSwgc2VsZWN0UHJvcHM6IHsgY3VzdG9tUHJvcHM6IHsgZHJhZ2dhYmxlUHJvcHMsIGVkaXRhYmxlUHJvcHMgfSA9IHt9IH0gPSB7fSB9ID0gcHJvcHNcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgY2xhc3NOYW1lID0gYCR7YmFzZUNsYXNzfV9fdGV4dGBcbiAgY29uc3QgbGFiZWxUZXh0ID0gZGF0YS5sYWJlbCA/IGdldFRyYW5zbGF0aW9uKGRhdGEubGFiZWwgYXMgT3B0aW9uTGFiZWwsIGkxOG4pIDogJydcbiAgY29uc3QgdGl0bGVUZXh0ID0gdHlwZW9mIGxhYmVsVGV4dCA9PT0gJ3N0cmluZycgPyBsYWJlbFRleHQgOiAnJ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30gdGl0bGU9e3RpdGxlVGV4dH0+XG4gICAgICA8U2VsZWN0Q29tcG9uZW50cy5NdWx0aVZhbHVlTGFiZWxcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBpbm5lclByb3BzPXt7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIC4uLigoZWRpdGFibGVQcm9wcyAmJiBlZGl0YWJsZVByb3BzKGRhdGEsIGNsYXNzTmFtZSwgcHJvcHMuc2VsZWN0UHJvcHMpKSB8fCB7fSksXG4gICAgICAgICAgLi4uKGRyYWdnYWJsZVByb3BzIHx8IHt9KSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlUmVtb3ZlUHJvcHMgfSBmcm9tICdyZWFjdC1zZWxlY3QnXG5cbmltcG9ydCBSZWFjdCwgeyB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE9wdGlvbiBhcyBPcHRpb25UeXBlIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvWC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uLy4uL1Rvb2x0aXAvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ211bHRpLXZhbHVlLXJlbW92ZSdcblxuZXhwb3J0IGNvbnN0IE11bHRpVmFsdWVSZW1vdmU6IFJlYWN0LkZDPFxuICB7XG4gICAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydidXR0b24nXVxuICB9ICYgTXVsdGlWYWx1ZVJlbW92ZVByb3BzPE9wdGlvblR5cGU+XG4+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpbm5lclByb3BzOiB7IGNsYXNzTmFtZSwgb25DbGljaywgb25Ub3VjaEVuZCB9LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbc2hvd1Rvb2x0aXAsIHNldFNob3dUb29sdGlwXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6cmVtb3ZlJyl9XG4gICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIHNldFNob3dUb29sdGlwKGZhbHNlKVxuICAgICAgICBvbkNsaWNrKGUpXG4gICAgICB9fVxuICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFNob3dUb29sdGlwKHRydWUpfVxuICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRTaG93VG9vbHRpcChmYWxzZSl9XG4gICAgICBvblRvdWNoRW5kPXtvblRvdWNoRW5kfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPFRvb2x0aXAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190b29sdGlwYH0gc2hvdz17c2hvd1Rvb2x0aXB9PlxuICAgICAgICB7dCgnZ2VuZXJhbDpyZW1vdmUnKX1cbiAgICAgIDwvVG9vbHRpcD5cbiAgICAgIDxYSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ljb25gfSAvPlxuICAgIDwvYnV0dG9uPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgU2luZ2xlVmFsdWVQcm9wcyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY29tcG9uZW50cyBhcyBTZWxlY3RDb21wb25lbnRzIH0gZnJvbSAncmVhY3Qtc2VsZWN0J1xuXG5pbXBvcnQgdHlwZSB7IE9wdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmVhY3Qtc2VsZWN0LS1zaW5nbGUtdmFsdWUnXG5cbmV4cG9ydCBjb25zdCBTaW5nbGVWYWx1ZTogUmVhY3QuRkM8U2luZ2xlVmFsdWVQcm9wczxPcHRpb24+PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUgfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8U2VsZWN0Q29tcG9uZW50cy5TaW5nbGVWYWx1ZVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1NlbGVjdENvbXBvbmVudHMuU2luZ2xlVmFsdWU+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IE9wdGlvbkxhYmVsIH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB0eXBlIHsgVmFsdWVDb250YWluZXJQcm9wcyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjb21wb25lbnRzIGFzIFNlbGVjdENvbXBvbmVudHMgfSBmcm9tICdyZWFjdC1zZWxlY3QnXG5cbmltcG9ydCB0eXBlIHsgT3B0aW9uIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICd2YWx1ZS1jb250YWluZXInXG5cbmV4cG9ydCBjb25zdCBWYWx1ZUNvbnRhaW5lcjogUmVhY3QuRkM8VmFsdWVDb250YWluZXJQcm9wczxPcHRpb24sIGFueT4+ID0gKHByb3BzKSA9PiB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3ItbmV4dC1saW5lIC8vIFRPRE8gRml4IHRoaXMgLSBtb2R1bGVSZXNvbHV0aW9uIDE2IGJyZWFrcyBvdXIgZGVjbGFyZSBtb2R1bGVcbiAgY29uc3QgeyBzZWxlY3RQcm9wczogeyBjdXN0b21Qcm9wcywgdmFsdWUgfSA9IHt9IH0gPSBwcm9wc1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICAvLyBHZXQgdGhlIHRpdGxlIGZvciBzaW5nbGUtdmFsdWUgc2VsZWN0c1xuICBsZXQgdGl0bGVUZXh0ID0gJydcbiAgaWYgKHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdsYWJlbCcgaW4gdmFsdWUpIHtcbiAgICBjb25zdCBsYWJlbFRleHQgPSB2YWx1ZS5sYWJlbCA/IGdldFRyYW5zbGF0aW9uKHZhbHVlLmxhYmVsIGFzIE9wdGlvbkxhYmVsLCBpMThuKSA6ICcnXG4gICAgdGl0bGVUZXh0ID0gdHlwZW9mIGxhYmVsVGV4dCA9PT0gJ3N0cmluZycgPyBsYWJlbFRleHQgOiAnJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfSByZWY9e2N1c3RvbVByb3BzPy5kcm9wcGFibGVSZWZ9IHRpdGxlPXt0aXRsZVRleHR9PlxuICAgICAge2N1c3RvbVByb3BzPy52YWx1ZUNvbnRhaW5lckxhYmVsICYmIChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9PntjdXN0b21Qcm9wcz8udmFsdWVDb250YWluZXJMYWJlbH08L3NwYW4+XG4gICAgICApfVxuICAgICAgPFNlbGVjdENvbXBvbmVudHMuVmFsdWVDb250YWluZXIgey4uLnByb3BzfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IE9wdGlvbiwgT3B0aW9uT2JqZWN0IH0gZnJvbSAncGF5bG9hZCdcblxuLyoqXG4gKiBGb3JtYXRzIGFuIGFycmF5IG9mIG9wdGlvbnMgZm9yIHVzZSBpbiBhIHNlbGVjdCBpbnB1dC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdE9wdGlvbnMgPSAob3B0aW9uczogT3B0aW9uW10pOiBPcHRpb25PYmplY3RbXSA9PlxuICBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIChvcHRpb24udmFsdWUgfHwgb3B0aW9uLnZhbHVlID09PSAnJykpIHtcbiAgICAgIHJldHVybiBvcHRpb25cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IG9wdGlvbixcbiAgICAgIHZhbHVlOiBvcHRpb24sXG4gICAgfSBhcyBPcHRpb25PYmplY3RcbiAgfSlcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBFbWFpbEZpZWxkQ2xpZW50Q29tcG9uZW50LFxuICBFbWFpbEZpZWxkQ2xpZW50UHJvcHMsXG4gIEVtYWlsRmllbGRWYWxpZGF0aW9uLFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgd2l0aENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL3dpdGhDb25kaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgeyBmaWVsZEJhc2VDbGFzcyB9IGZyb20gJy4uL3NoYXJlZC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBFbWFpbEZpZWxkQ29tcG9uZW50OiBFbWFpbEZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZDoge1xuICAgICAgYWRtaW46IHtcbiAgICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgIH0gPSB7fSBhcyBFbWFpbEZpZWxkQ2xpZW50UHJvcHNbJ2ZpZWxkJ11bJ2FkbWluJ10sXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgIH0gPSB7fSBhcyBFbWFpbEZpZWxkQ2xpZW50UHJvcHNbJ2ZpZWxkJ10sXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgbWVtb2l6ZWRWYWxpZGF0ZTogRW1haWxGaWVsZFZhbGlkYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBwYXRoLFxuICAgIHNldFZhbHVlLFxuICAgIHNob3dFcnJvcixcbiAgICB2YWx1ZSxcbiAgfSA9IHVzZUZpZWxkKHtcbiAgICBwb3RlbnRpYWxseVN0YWxlUGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBzdHlsZXMgPSB1c2VNZW1vKCgpID0+IG1lcmdlRmllbGRTdHlsZXMoZmllbGQpLCBbZmllbGRdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGZpZWxkQmFzZUNsYXNzLFxuICAgICAgICAnZW1haWwnLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHNob3dFcnJvciAmJiAnZXJyb3InLFxuICAgICAgICAocmVhZE9ubHkgfHwgZGlzYWJsZWQpICYmICdyZWFkLW9ubHknLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBzdHlsZT17c3R5bGVzfVxuICAgID5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtMYWJlbH1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIDxGaWVsZExhYmVsIGxhYmVsPXtsYWJlbH0gbG9jYWxpemVkPXtsb2NhbGl6ZWR9IHBhdGg9e3BhdGh9IHJlcXVpcmVkPXtyZXF1aXJlZH0gLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtmaWVsZEJhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICB7LyogZGlzYWJsZSBlc2xpbnQgaGVyZSBiZWNhdXNlIHRoZSBsYWJlbCBpcyBkeW5hbWljICovfVxuICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L2NvbnRyb2wtaGFzLWFzc29jaWF0ZWQtbGFiZWwgKi99XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGF1dG9Db21wbGV0ZT17YXV0b0NvbXBsZXRlfVxuICAgICAgICAgIGRpc2FibGVkPXtyZWFkT25seSB8fCBkaXNhYmxlZH1cbiAgICAgICAgICBpZD17YGZpZWxkLSR7cGF0aC5yZXBsYWNlKC9cXC4vZywgJ19fJyl9YH1cbiAgICAgICAgICBuYW1lPXtwYXRofVxuICAgICAgICAgIG9uQ2hhbmdlPXtzZXRWYWx1ZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0VHJhbnNsYXRpb24ocGxhY2Vob2xkZXIsIGkxOG4pfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgIHZhbHVlPXsodmFsdWUgYXMgc3RyaW5nKSB8fCAnJ31cbiAgICAgICAgLz5cbiAgICAgICAge0FmdGVySW5wdXR9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgRmFsbGJhY2s9ezxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gcGF0aD17cGF0aH0gLz59XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBFbWFpbEZpZWxkID0gd2l0aENvbmRpdGlvbihFbWFpbEZpZWxkQ29tcG9uZW50KVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgR3JvdXBGaWVsZENsaWVudENvbXBvbmVudCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgZ3JvdXBIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VDb2xsYXBzaWJsZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0NvbGxhcHNpYmxlL3Byb3ZpZGVyLmpzJ1xuaW1wb3J0IHsgRXJyb3JQaWxsIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRXJyb3JQaWxsL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybVN1Ym1pdHRlZCB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IFJlbmRlckZpZWxkcyB9IGZyb20gJy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB3aXRoQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvd2l0aENvbmRpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHVzZVJvdyB9IGZyb20gJy4uL1Jvdy9wcm92aWRlci5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVGFicyB9IGZyb20gJy4uL1RhYnMvcHJvdmlkZXIuanMnXG5pbXBvcnQgeyBHcm91cFByb3ZpZGVyLCB1c2VHcm91cCB9IGZyb20gJy4vcHJvdmlkZXIuanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdncm91cC1maWVsZCdcblxuZXhwb3J0IGNvbnN0IEdyb3VwRmllbGRDb21wb25lbnQ6IEdyb3VwRmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkOiB7IGFkbWluOiB7IGNsYXNzTmFtZSwgZGVzY3JpcHRpb24sIGhpZGVHdXR0ZXIgfSA9IHt9LCBmaWVsZHMsIGxhYmVsIH0sXG4gICAgaW5kZXhQYXRoLFxuICAgIHBhcmVudFBhdGgsXG4gICAgcGFyZW50U2NoZW1hUGF0aCxcbiAgICBwYXRoLFxuICAgIHBlcm1pc3Npb25zLFxuICAgIHJlYWRPbmx5LFxuICAgIHNjaGVtYVBhdGg6IHNjaGVtYVBhdGhGcm9tUHJvcHMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHNjaGVtYVBhdGggPVxuICAgIHNjaGVtYVBhdGhGcm9tUHJvcHMgPz8gKGZpZWxkLnR5cGUgPT09ICdncm91cCcgJiYgZ3JvdXBIYXNOYW1lKGZpZWxkKSA/IGZpZWxkLm5hbWUgOiBwYXRoKVxuXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGlzV2l0aGluQ29sbGFwc2libGUgfSA9IHVzZUNvbGxhcHNpYmxlKClcbiAgY29uc3QgaXNXaXRoaW5Hcm91cCA9IHVzZUdyb3VwKClcbiAgY29uc3QgaXNXaXRoaW5Sb3cgPSB1c2VSb3coKVxuICBjb25zdCBpc1dpdGhpblRhYiA9IHVzZVRhYnMoKVxuXG4gIGNvbnN0IHsgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIExhYmVsIH0gPSB7fSwgZXJyb3JQYXRocyB9ID1cbiAgICB1c2VGaWVsZCh7IHBhdGggfSlcblxuICBjb25zdCBzdWJtaXR0ZWQgPSB1c2VGb3JtU3VibWl0dGVkKClcbiAgY29uc3QgZXJyb3JDb3VudCA9IGVycm9yUGF0aHMubGVuZ3RoXG4gIGNvbnN0IGZpZWxkSGFzRXJyb3JzID0gc3VibWl0dGVkICYmIGVycm9yQ291bnQgPiAwXG5cbiAgY29uc3QgaXNUb3BMZXZlbCA9ICEoaXNXaXRoaW5Db2xsYXBzaWJsZSB8fCBpc1dpdGhpbkdyb3VwIHx8IGlzV2l0aGluUm93KVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgZmllbGRCYXNlQ2xhc3MsXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgaXNUb3BMZXZlbCAmJiBgJHtiYXNlQ2xhc3N9LS10b3AtbGV2ZWxgLFxuICAgICAgICBpc1dpdGhpbkNvbGxhcHNpYmxlICYmIGAke2Jhc2VDbGFzc30tLXdpdGhpbi1jb2xsYXBzaWJsZWAsXG4gICAgICAgIGlzV2l0aGluR3JvdXAgJiYgYCR7YmFzZUNsYXNzfS0td2l0aGluLWdyb3VwYCxcbiAgICAgICAgaXNXaXRoaW5Sb3cgJiYgYCR7YmFzZUNsYXNzfS0td2l0aGluLXJvd2AsXG4gICAgICAgIGlzV2l0aGluVGFiICYmIGAke2Jhc2VDbGFzc30tLXdpdGhpbi10YWJgLFxuICAgICAgICAhaGlkZUd1dHRlciAmJiBpc1dpdGhpbkdyb3VwICYmIGAke2Jhc2VDbGFzc30tLWd1dHRlcmAsXG4gICAgICAgIGZpZWxkSGFzRXJyb3JzICYmIGAke2Jhc2VDbGFzc30tLWhhcy1lcnJvcmAsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgaWQ9e2BmaWVsZC0ke3BhdGg/LnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfVxuICAgICAgc3R5bGU9e3N0eWxlc31cbiAgICA+XG4gICAgICA8R3JvdXBQcm92aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgICB7Qm9vbGVhbihMYWJlbCB8fCBEZXNjcmlwdGlvbiB8fCBsYWJlbCB8fCBmaWVsZEhhc0Vycm9ycykgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcmB9PlxuICAgICAgICAgICAgICB7Qm9vbGVhbihMYWJlbCB8fCBEZXNjcmlwdGlvbiB8fCBsYWJlbCkgJiYgKFxuICAgICAgICAgICAgICAgIDxoZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgICAgICAgICAgICAgIEZhbGxiYWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190aXRsZWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXM9XCJzcGFuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2dldFRyYW5zbGF0aW9uKGxhYmVsLCBpMThuKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxpemVkPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD17cGF0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtmaWVsZEhhc0Vycm9ycyAmJiA8RXJyb3JQaWxsIGNvdW50PXtlcnJvckNvdW50fSBpMThuPXtpMThufSB3aXRoTWVzc2FnZSAvPn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICAgIHsvKiBSZW5kZXIgYW4gdW5uYW1lZCBncm91cCBkaWZmZXJlbnRseSAqL31cbiAgICAgICAgICB7Z3JvdXBIYXNOYW1lKGZpZWxkKSA/IChcbiAgICAgICAgICAgIDxSZW5kZXJGaWVsZHNcbiAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgIG1hcmdpbnM9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIHBhcmVudEluZGV4UGF0aD1cIlwiXG4gICAgICAgICAgICAgIHBhcmVudFBhdGg9e3BhdGh9XG4gICAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9e3NjaGVtYVBhdGh9XG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zPXtwZXJtaXNzaW9ucyA9PT0gdHJ1ZSA/IHBlcm1pc3Npb25zIDogcGVybWlzc2lvbnM/LmZpZWxkc31cbiAgICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFJlbmRlckZpZWxkc1xuICAgICAgICAgICAgICBmaWVsZHM9e2ZpZWxkc31cbiAgICAgICAgICAgICAgbWFyZ2lucz1cInNtYWxsXCJcbiAgICAgICAgICAgICAgcGFyZW50SW5kZXhQYXRoPXtpbmRleFBhdGh9XG4gICAgICAgICAgICAgIHBhcmVudFBhdGg9e3BhcmVudFBhdGh9XG4gICAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9e3BhcmVudFNjaGVtYVBhdGh9XG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zPXtwZXJtaXNzaW9uc31cbiAgICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvR3JvdXBQcm92aWRlcj5cbiAgICAgIHtBZnRlcklucHV0fVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCB7IEdyb3VwUHJvdmlkZXIsIHVzZUdyb3VwIH1cblxuZXhwb3J0IGNvbnN0IEdyb3VwRmllbGQgPSB3aXRoQ29uZGl0aW9uKEdyb3VwRmllbGRDb21wb25lbnQpXG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IENvbnRleHQgPSBjcmVhdGVDb250ZXh0KGZhbHNlKVxuXG5leHBvcnQgY29uc3QgUm93UHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7IHdpdGhpblJvdz86IGJvb2xlYW4gfT4gPSAoe1xuICBjaGlsZHJlbixcbiAgd2l0aGluUm93ID0gdHJ1ZSxcbn0pID0+IHtcbiAgcmV0dXJuIDxDb250ZXh0IHZhbHVlPXt3aXRoaW5Sb3d9PntjaGlsZHJlbn08L0NvbnRleHQ+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VSb3cgPSAoKTogYm9vbGVhbiA9PiB1c2UoQ29udGV4dClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSB9IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBDb250ZXh0ID0gY3JlYXRlQ29udGV4dChmYWxzZSlcblxuZXhwb3J0IGNvbnN0IFRhYnNQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTsgd2l0aGluVGFiPzogYm9vbGVhbiB9PiA9ICh7XG4gIGNoaWxkcmVuLFxuICB3aXRoaW5UYWIgPSB0cnVlLFxufSkgPT4ge1xuICByZXR1cm4gPENvbnRleHQgdmFsdWU9e3dpdGhpblRhYn0+e2NoaWxkcmVufTwvQ29udGV4dD5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVRhYnMgPSAoKTogYm9vbGVhbiA9PiB1c2UoQ29udGV4dClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgR3JvdXBDb250ZXh0ID0gY3JlYXRlQ29udGV4dChmYWxzZSlcblxuZXhwb3J0IGNvbnN0IEdyb3VwUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7IHdpdGhpbkdyb3VwPzogYm9vbGVhbiB9PiA9ICh7XG4gIGNoaWxkcmVuLFxuICB3aXRoaW5Hcm91cCA9IHRydWUsXG59KSA9PiB7XG4gIHJldHVybiA8R3JvdXBDb250ZXh0IHZhbHVlPXt3aXRoaW5Hcm91cH0+e2NoaWxkcmVufTwvR3JvdXBDb250ZXh0PlxufVxuXG5leHBvcnQgY29uc3QgdXNlR3JvdXAgPSAoKTogYm9vbGVhbiA9PiB1c2UoR3JvdXBDb250ZXh0KVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgSGlkZGVuRmllbGRQcm9wcyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy91c2VGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gaW5wdXQgd2l0aCBgdHlwZT1cImhpZGRlblwiYC5cbiAqIFRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gc2F2ZSBhIHZhbHVlIG9uIHRoZSBmb3JtIHRoYXQgaXMgbm90IHZpc2libGUgdG8gdGhlIHVzZXIuXG4gKiBGb3IgZXhhbXBsZSwgdGhpcyBzZXRzIHRoZSBgw6xkYCBwcm9wZXJ0eSBvZiBhIGJsb2NrIGluIHRoZSBCbG9ja3MgZmllbGQuXG4gKi9cbmNvbnN0IEhpZGRlbkZpZWxkQ29tcG9uZW50OiBSZWFjdC5GQzxIaWRkZW5GaWVsZFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGRpc2FibGVNb2RpZnlpbmdGb3JtID0gdHJ1ZSwgcGF0aDogcGF0aEZyb21Qcm9wcywgdmFsdWU6IHZhbHVlRnJvbVByb3BzIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgZm9ybUluaXRpYWxpemluZywgcGF0aCwgc2V0VmFsdWUsIHZhbHVlIH0gPSB1c2VGaWVsZCh7XG4gICAgcG90ZW50aWFsbHlTdGFsZVBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gIH0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWVGcm9tUHJvcHMgIT09IHVuZGVmaW5lZCAmJiAhZm9ybUluaXRpYWxpemluZykge1xuICAgICAgc2V0VmFsdWUodmFsdWVGcm9tUHJvcHMsIGRpc2FibGVNb2RpZnlpbmdGb3JtKVxuICAgIH1cbiAgfSwgW3ZhbHVlRnJvbVByb3BzLCBzZXRWYWx1ZSwgZGlzYWJsZU1vZGlmeWluZ0Zvcm0sIGZvcm1Jbml0aWFsaXppbmddKVxuXG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICBpZD17YGZpZWxkLSR7cGF0aD8ucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICBuYW1lPXtwYXRofVxuICAgICAgb25DaGFuZ2U9e3NldFZhbHVlfVxuICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICB2YWx1ZT17KHZhbHVlIGFzIHN0cmluZykgfHwgJyd9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgSGlkZGVuRmllbGQgPSB3aXRoQ29uZGl0aW9uKEhpZGRlbkZpZWxkQ29tcG9uZW50KVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2xpZW50Q29uZmlnLFxuICBDbGllbnRGaWVsZCxcbiAgSm9pbkZpZWxkQ2xpZW50LFxuICBKb2luRmllbGRDbGllbnRDb21wb25lbnQsXG4gIFBhZ2luYXRlZERvY3MsXG4gIFdoZXJlLFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgT2JqZWN0SWRJbXBvcnQgZnJvbSAnYnNvbi1vYmplY3RpZCdcbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEsIGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgUmVsYXRpb25zaGlwVGFibGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZWxhdGlvbnNoaXBUYWJsZS9pbmRleC5qcydcbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB3aXRoQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvd2l0aENvbmRpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vRmllbGRFcnJvci9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi9pbmRleC5qcydcblxuY29uc3QgT2JqZWN0SWQgPSAnZGVmYXVsdCcgaW4gT2JqZWN0SWRJbXBvcnQgPyBPYmplY3RJZEltcG9ydC5kZWZhdWx0IDogT2JqZWN0SWRJbXBvcnRcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBmb3Igam9pbmVkIGNvbGxlY3Rpb25cbiAqL1xuY29uc3QgZ2V0SW5pdGlhbERyYXdlckRhdGEgPSAoe1xuICBjb2xsZWN0aW9uU2x1ZyxcbiAgY29uZmlnLFxuICBkb2NJRCxcbiAgZmllbGRzLFxuICBzZWdtZW50cyxcbn06IHtcbiAgY29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICBjb25maWc6IENsaWVudENvbmZpZ1xuICBkb2NJRDogbnVtYmVyIHwgc3RyaW5nXG4gIGZpZWxkczogQ2xpZW50RmllbGRbXVxuICBzZWdtZW50czogc3RyaW5nW11cbn0pID0+IHtcbiAgY29uc3QgZmxhdHRlbmVkRmllbGRzID0gZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkcywge1xuICAgIGtlZXBQcmVzZW50YXRpb25hbEZpZWxkczogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBwYXRoID0gc2VnbWVudHNbMF1cblxuICBjb25zdCBmaWVsZCA9IGZsYXR0ZW5lZEZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gcGF0aClcblxuICBpZiAoIWZpZWxkKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlmIChmaWVsZC50eXBlID09PSAncmVsYXRpb25zaGlwJyB8fCBmaWVsZC50eXBlID09PSAndXBsb2FkJykge1xuICAgIGxldCB2YWx1ZTogeyByZWxhdGlvblRvOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfSB8IG51bWJlciB8IHN0cmluZyA9IGRvY0lEXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykpIHtcbiAgICAgIHZhbHVlID0ge1xuICAgICAgICByZWxhdGlvblRvOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgdmFsdWU6IGRvY0lELFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgW2ZpZWxkLm5hbWVdOiBmaWVsZC5oYXNNYW55ID8gW3ZhbHVlXSA6IHZhbHVlLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5leHRTZWdtZW50cyA9IHNlZ21lbnRzLnNsaWNlKDEsIHNlZ21lbnRzLmxlbmd0aClcblxuICBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYicgfHwgKGZpZWxkLnR5cGUgPT09ICdncm91cCcgJiYgZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtmaWVsZC5uYW1lXTogZ2V0SW5pdGlhbERyYXdlckRhdGEoe1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkb2NJRCxcbiAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgIHNlZ21lbnRzOiBuZXh0U2VnbWVudHMsXG4gICAgICB9KSxcbiAgICB9XG4gIH1cblxuICBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgIGNvbnN0IGluaXRpYWxEYXRhID0gZ2V0SW5pdGlhbERyYXdlckRhdGEoe1xuICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICBjb25maWcsXG4gICAgICBkb2NJRCxcbiAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgc2VnbWVudHM6IG5leHRTZWdtZW50cyxcbiAgICB9KVxuXG4gICAgaW5pdGlhbERhdGEuaWQgPSBPYmplY3RJZCgpLnRvSGV4U3RyaW5nKClcblxuICAgIHJldHVybiB7XG4gICAgICBbZmllbGQubmFtZV06IFtpbml0aWFsRGF0YV0sXG4gICAgfVxuICB9XG5cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdibG9ja3MnKSB7XG4gICAgZm9yIChjb25zdCBfYmxvY2sgb2YgZmllbGQuYmxvY2tSZWZlcmVuY2VzID8/IGZpZWxkLmJsb2Nrcykge1xuICAgICAgY29uc3QgYmxvY2sgPSB0eXBlb2YgX2Jsb2NrID09PSAnc3RyaW5nJyA/IGNvbmZpZy5ibG9ja3NNYXBbX2Jsb2NrXSA6IF9ibG9ja1xuXG4gICAgICBjb25zdCBibG9ja0luaXRpYWxEYXRhID0gZ2V0SW5pdGlhbERyYXdlckRhdGEoe1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkb2NJRCxcbiAgICAgICAgZmllbGRzOiBibG9jay5maWVsZHMsXG4gICAgICAgIHNlZ21lbnRzOiBuZXh0U2VnbWVudHMsXG4gICAgICB9KVxuXG4gICAgICBpZiAoYmxvY2tJbml0aWFsRGF0YSkge1xuICAgICAgICBibG9ja0luaXRpYWxEYXRhLmlkID0gT2JqZWN0SWQoKS50b0hleFN0cmluZygpXG4gICAgICAgIGJsb2NrSW5pdGlhbERhdGEuYmxvY2tUeXBlID0gYmxvY2suc2x1Z1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2ZpZWxkLm5hbWVdOiBbYmxvY2tJbml0aWFsRGF0YV0sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgSm9pbkZpZWxkQ29tcG9uZW50OiBKb2luRmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkOiB7XG4gICAgICBhZG1pbjogeyBhbGxvd0NyZWF0ZSwgZGVzY3JpcHRpb24gfSxcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIG9uLFxuICAgICAgcmVxdWlyZWQsXG4gICAgfSxcbiAgICBwYXRoOiBwYXRoRnJvbVByb3BzLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGlkOiBkb2NJRCwgZG9jQ29uZmlnIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIGNvbnN0IHsgY29uZmlnLCBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3Qge1xuICAgIGN1c3RvbUNvbXBvbmVudHM6IHsgQWZ0ZXJJbnB1dCwgQmVmb3JlSW5wdXQsIERlc2NyaXB0aW9uLCBFcnJvciwgTGFiZWwgfSA9IHt9LFxuICAgIHBhdGgsXG4gICAgc2hvd0Vycm9yLFxuICAgIHZhbHVlLFxuICB9ID0gdXNlRmllbGQ8UGFnaW5hdGVkRG9jcz4oe1xuICAgIHBvdGVudGlhbGx5U3RhbGVQYXRoOiBwYXRoRnJvbVByb3BzLFxuICB9KVxuXG4gIGNvbnN0IGZpbHRlck9wdGlvbnM6IG51bGwgfCBXaGVyZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZG9jSUQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgbGV0IHZhbHVlOiB7IHJlbGF0aW9uVG86IHN0cmluZzsgdmFsdWU6IG51bWJlciB8IHN0cmluZyB9IHwgbnVtYmVyIHwgc3RyaW5nID0gZG9jSURcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnRhcmdldEZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICB2YWx1ZSA9IHtcbiAgICAgICAgcmVsYXRpb25UbzogZG9jQ29uZmlnLnNsdWcsXG4gICAgICAgIHZhbHVlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdoZXJlID0gQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKVxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgW29uXToge1xuICAgICAgICAgICAgZXF1YWxzOiB2YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG5cbiAgICBpZiAoZmllbGQud2hlcmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuZDogW3doZXJlLCBmaWVsZC53aGVyZV0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoZXJlXG4gIH0sIFtkb2NJRCwgY29sbGVjdGlvbiwgZmllbGQudGFyZ2V0RmllbGQucmVsYXRpb25UbywgZmllbGQud2hlcmUsIG9uLCBkb2NDb25maWc/LnNsdWddKVxuXG4gIGNvbnN0IGluaXRpYWxEcmF3ZXJEYXRhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb24gPSBnZXRFbnRpdHlDb25maWcoe1xuICAgICAgY29sbGVjdGlvblNsdWc6IEFycmF5LmlzQXJyYXkoZmllbGQuY29sbGVjdGlvbikgPyBmaWVsZC5jb2xsZWN0aW9uWzBdIDogZmllbGQuY29sbGVjdGlvbixcbiAgICB9KVxuXG4gICAgcmV0dXJuIGdldEluaXRpYWxEcmF3ZXJEYXRhKHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnOiBkb2NDb25maWc/LnNsdWcsXG4gICAgICBjb25maWcsXG4gICAgICBkb2NJRCxcbiAgICAgIGZpZWxkczogcmVsYXRlZENvbGxlY3Rpb24/LmZpZWxkcyxcbiAgICAgIHNlZ21lbnRzOiBmaWVsZC5vbi5zcGxpdCgnLicpLFxuICAgIH0pXG4gIH0sIFtnZXRFbnRpdHlDb25maWcsIGZpZWxkLmNvbGxlY3Rpb24sIGZpZWxkLm9uLCBkb2NDb25maWc/LnNsdWcsIGRvY0lELCBjb25maWddKVxuXG4gIGlmICghZG9jQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbZmllbGRCYXNlQ2xhc3MsIHNob3dFcnJvciAmJiAnZXJyb3InLCAnam9pbiddLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICBpZD17YGZpZWxkLSR7cGF0aD8ucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgPlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Vycm9yfVxuICAgICAgICBGYWxsYmFjaz17PEZpZWxkRXJyb3IgcGF0aD17cGF0aH0gc2hvd0Vycm9yPXtzaG93RXJyb3J9IC8+fVxuICAgICAgLz5cbiAgICAgIDxSZWxhdGlvbnNoaXBUYWJsZVxuICAgICAgICBBZnRlcklucHV0PXtBZnRlcklucHV0fVxuICAgICAgICBhbGxvd0NyZWF0ZT17dHlwZW9mIGRvY0lEICE9PSAndW5kZWZpbmVkJyAmJiBhbGxvd0NyZWF0ZX1cbiAgICAgICAgQmVmb3JlSW5wdXQ9e0JlZm9yZUlucHV0fVxuICAgICAgICBkaXNhYmxlVGFibGU9e2ZpbHRlck9wdGlvbnMgPT09IG51bGx9XG4gICAgICAgIGZpZWxkPXtmaWVsZCBhcyBKb2luRmllbGRDbGllbnR9XG4gICAgICAgIGZpZWxkUGF0aD17cGF0aH1cbiAgICAgICAgZmlsdGVyT3B0aW9ucz17ZmlsdGVyT3B0aW9uc31cbiAgICAgICAgaW5pdGlhbERhdGE9e2RvY0lEICYmIHZhbHVlID8gdmFsdWUgOiAoeyBkb2NzOiBbXSB9IGFzIFBhZ2luYXRlZERvY3MpfVxuICAgICAgICBpbml0aWFsRHJhd2VyRGF0YT17aW5pdGlhbERyYXdlckRhdGF9XG4gICAgICAgIExhYmVsPXtcbiAgICAgICAgICA8aDQgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAge0xhYmVsIHx8IChcbiAgICAgICAgICAgICAgPEZpZWxkTGFiZWwgbGFiZWw9e2xhYmVsfSBsb2NhbGl6ZWQ9e2xvY2FsaXplZH0gcGF0aD17cGF0aH0gcmVxdWlyZWQ9e3JlcXVpcmVkfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2g0PlxuICAgICAgICB9XG4gICAgICAgIHBhcmVudD17XG4gICAgICAgICAgdHlwZW9mIGRvY0lEICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgaWQ6IGRvY0lELFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnOiBkb2NDb25maWcuc2x1ZyxcbiAgICAgICAgICAgICAgICBqb2luUGF0aDogcGF0aCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICByZWxhdGlvblRvPXtjb2xsZWN0aW9ufVxuICAgICAgLz5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgRmFsbGJhY2s9ezxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gcGF0aD17cGF0aH0gLz59XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBKb2luRmllbGQgPSB3aXRoQ29uZGl0aW9uKEpvaW5GaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQge1xuICB0eXBlIENvbGxlY3Rpb25TbHVnLFxuICB0eXBlIENvbHVtbixcbiAgdHlwZSBKb2luRmllbGRDbGllbnQsXG4gIHR5cGUgTGlzdFF1ZXJ5LFxuICB0eXBlIFBhZ2luYXRlZERvY3MsXG4gIHR5cGUgV2hlcmUsXG59IGZyb20gJ3BheWxvYWQnXG5pbXBvcnQgeyBob2lzdFF1ZXJ5UGFyYW1zVG9BbmQsIHRyYW5zZm9ybUNvbHVtbnNUb1ByZWZlcmVuY2VzIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudERyYXdlclByb3BzIH0gZnJvbSAnLi4vRG9jdW1lbnREcmF3ZXIvdHlwZXMuanMnXG5cbmltcG9ydCB7IFBpbGwgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9QaWxsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWZmZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VFZmZlY3RFdmVudC5qcydcbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0UXVlcnlQcm92aWRlciB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXN0UXVlcnkvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VTZXJ2ZXJGdW5jdGlvbnMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VydmVyRnVuY3Rpb25zL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGFibGVDb2x1bW5zUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVGFibGVDb2x1bW5zL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBBbmltYXRlSGVpZ2h0IH0gZnJvbSAnLi4vQW5pbWF0ZUhlaWdodC9pbmRleC5qcydcbmltcG9ydCB7IENvbHVtblNlbGVjdG9yIH0gZnJvbSAnLi4vQ29sdW1uU2VsZWN0b3IvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlciB9IGZyb20gJy4uL0RvY3VtZW50RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgTm9MaXN0UmVzdWx0cyB9IGZyb20gJy4uL05vTGlzdFJlc3VsdHMvaW5kZXguanMnXG5pbXBvcnQgeyBSZWxhdGlvbnNoaXBQcm92aWRlciB9IGZyb20gJy4uL1RhYmxlL1JlbGF0aW9uc2hpcFByb3ZpZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgQWRkTmV3QnV0dG9uIH0gZnJvbSAnLi9BZGROZXdCdXR0b24uanMnXG5pbXBvcnQgeyBEcmF3ZXJMaW5rIH0gZnJvbSAnLi9jZWxscy9EcmF3ZXJMaW5rL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwVGFibGVQYWdpbmF0aW9uIH0gZnJvbSAnLi9QYWdpbmF0aW9uLmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdyZWxhdGlvbnNoaXAtdGFibGUnXG5cbnR5cGUgUmVsYXRpb25zaGlwVGFibGVDb21wb25lbnRQcm9wcyA9IHtcbiAgcmVhZG9ubHkgQWZ0ZXJJbnB1dD86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBhbGxvd0NyZWF0ZT86IGJvb2xlYW5cbiAgcmVhZG9ubHkgQmVmb3JlSW5wdXQ/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgZGlzYWJsZVRhYmxlPzogYm9vbGVhblxuICByZWFkb25seSBmaWVsZDogSm9pbkZpZWxkQ2xpZW50XG4gIHJlYWRvbmx5IGZpZWxkUGF0aD86IHN0cmluZ1xuICByZWFkb25seSBmaWx0ZXJPcHRpb25zPzogV2hlcmVcbiAgcmVhZG9ubHkgaW5pdGlhbERhdGE/OiBQYWdpbmF0ZWREb2NzXG4gIHJlYWRvbmx5IGluaXRpYWxEcmF3ZXJEYXRhPzogRG9jdW1lbnREcmF3ZXJQcm9wc1snaW5pdGlhbERhdGEnXVxuICByZWFkb25seSBMYWJlbD86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBwYXJlbnQ/OiB7XG4gICAgY29sbGVjdGlvblNsdWc6IENvbGxlY3Rpb25TbHVnXG4gICAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICAgIGpvaW5QYXRoOiBzdHJpbmdcbiAgfVxuICByZWFkb25seSByZWxhdGlvblRvOiBzdHJpbmcgfCBzdHJpbmdbXVxufVxuXG5leHBvcnQgdHlwZSBPbkRyYXdlck9wZW4gPSAoaWQ/OiBzdHJpbmcsIGNvbGxlY3Rpb25TbHVnPzogc3RyaW5nKSA9PiB2b2lkXG5cbmV4cG9ydCBjb25zdCBSZWxhdGlvbnNoaXBUYWJsZTogUmVhY3QuRkM8UmVsYXRpb25zaGlwVGFibGVDb21wb25lbnRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIEFmdGVySW5wdXQsXG4gICAgYWxsb3dDcmVhdGUgPSB0cnVlLFxuICAgIEJlZm9yZUlucHV0LFxuICAgIGRpc2FibGVUYWJsZSA9IGZhbHNlLFxuICAgIGZpZWxkLFxuICAgIGZpZWxkUGF0aCxcbiAgICBmaWx0ZXJPcHRpb25zLFxuICAgIGluaXRpYWxEYXRhOiBpbml0aWFsRGF0YUZyb21Qcm9wcyxcbiAgICBpbml0aWFsRHJhd2VyRGF0YSxcbiAgICBMYWJlbCxcbiAgICBwYXJlbnQsXG4gICAgcmVsYXRpb25UbyxcbiAgfSA9IHByb3BzXG4gIGNvbnN0IFtUYWJsZSwgc2V0VGFibGVdID0gdXNlU3RhdGU8UmVhY3QuUmVhY3ROb2RlPihudWxsKVxuICBjb25zdCB7IGNvbmZpZywgZ2V0RW50aXR5Q29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IHVzZVN0YXRlPExpc3RRdWVyeT4oKVxuICBjb25zdCBbb3BlbkNvbHVtblNlbGVjdG9yLCBzZXRPcGVuQ29sdW1uU2VsZWN0b3JdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgW2NvbGxlY3Rpb25Db25maWddID0gdXNlU3RhdGUoKCkgPT4gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWc6IHJlbGF0aW9uVG8gfSkpXG5cbiAgY29uc3QgaXNQb2x5bW9ycGhpYyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcblxuICBjb25zdCBbc2VsZWN0ZWRDb2xsZWN0aW9uLCBzZXRTZWxlY3RlZENvbGxlY3Rpb25dID0gdXNlU3RhdGUoXG4gICAgaXNQb2x5bW9ycGhpYyA/IHVuZGVmaW5lZCA6IHJlbGF0aW9uVG8sXG4gIClcblxuICBjb25zdCB7IHBlcm1pc3Npb25zIH0gPSB1c2VBdXRoKClcblxuICBjb25zdCBvcGVuRHJhd2VyV2hlblJlbGF0aW9uQ2hhbmdlcyA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBbY3VycmVudERyYXdlcklELCBzZXRDdXJyZW50RHJhd2VySURdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgY29uc3QgW0RvY3VtZW50RHJhd2VyLCAsIHsgY2xvc2VEcmF3ZXIsIGlzRHJhd2VyT3Blbiwgb3BlbkRyYXdlciB9XSA9IHVzZURvY3VtZW50RHJhd2VyKHtcbiAgICBpZDogY3VycmVudERyYXdlcklELFxuICAgIGNvbGxlY3Rpb25TbHVnOiBzZWxlY3RlZENvbGxlY3Rpb24sXG4gIH0pXG5cbiAgY29uc3QgW2lzTG9hZGluZ1RhYmxlLCBzZXRJc0xvYWRpbmdUYWJsZV0gPSB1c2VTdGF0ZSghZGlzYWJsZVRhYmxlKVxuXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPFBhZ2luYXRlZERvY3M+KCgpID0+XG4gICAgaW5pdGlhbERhdGFGcm9tUHJvcHNcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmluaXRpYWxEYXRhRnJvbVByb3BzLFxuICAgICAgICAgIGRvY3M6IEFycmF5LmlzQXJyYXkoaW5pdGlhbERhdGFGcm9tUHJvcHMuZG9jcylcbiAgICAgICAgICAgID8gaW5pdGlhbERhdGFGcm9tUHJvcHMuZG9jcy5yZWR1Y2UoKGFjYywgZG9jKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2MgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBkb2MgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogZG9jLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCBkb2NdXG4gICAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQsXG4gIClcblxuICBjb25zdCBbY29sdW1uU3RhdGUsIHNldENvbHVtblN0YXRlXSA9IHVzZVN0YXRlPENvbHVtbltdPigpXG5cbiAgY29uc3QgeyBnZXRUYWJsZVN0YXRlIH0gPSB1c2VTZXJ2ZXJGdW5jdGlvbnMoKVxuXG4gIGNvbnN0IHJlbmRlclRhYmxlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGRhdGE/OiBQYWdpbmF0ZWREb2NzKSA9PiB7XG4gICAgICBjb25zdCBuZXdRdWVyeTogTGlzdFF1ZXJ5ID0ge1xuICAgICAgICBsaW1pdDogZmllbGQ/LmRlZmF1bHRMaW1pdCB8fCBjb2xsZWN0aW9uQ29uZmlnPy5hZG1pbj8ucGFnaW5hdGlvbj8uZGVmYXVsdExpbWl0LFxuICAgICAgICBzb3J0OiBmaWVsZC5kZWZhdWx0U29ydCB8fCBjb2xsZWN0aW9uQ29uZmlnPy5kZWZhdWx0U29ydCxcbiAgICAgICAgLi4uKHF1ZXJ5IHx8IHt9KSxcbiAgICAgICAgd2hlcmU6IHsgLi4uKHF1ZXJ5Py53aGVyZSB8fCB7fSkgfSxcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgbmV3UXVlcnkud2hlcmUgPSBob2lzdFF1ZXJ5UGFyYW1zVG9BbmQobmV3UXVlcnkud2hlcmUsIGZpbHRlck9wdGlvbnMpXG4gICAgICB9XG5cbiAgICAgIC8vIG1hcCBjb2x1bW5zIGZyb20gc3RyaW5nW10gdG8gQ29sbGVjdGlvblByZWZlcmVuY2VzWydjb2x1bW5zJ11cbiAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gZmllbGQuYWRtaW4uZGVmYXVsdENvbHVtbnNcbiAgICAgICAgPyBmaWVsZC5hZG1pbi5kZWZhdWx0Q29sdW1ucy5tYXAoKGFjY2Vzc29yKSA9PiAoe1xuICAgICAgICAgICAgYWNjZXNzb3IsXG4gICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgfSkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGNvbnN0IHJlbmRlclJvd1R5cGVzID1cbiAgICAgICAgdHlwZW9mIGZpZWxkLmFkbWluLmRpc2FibGVSb3dUeXBlcyA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgPyAhZmllbGQuYWRtaW4uZGlzYWJsZVJvd1R5cGVzXG4gICAgICAgICAgOiBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogbmV3RGF0YSxcbiAgICAgICAgc3RhdGU6IG5ld0NvbHVtblN0YXRlLFxuICAgICAgICBUYWJsZTogTmV3VGFibGUsXG4gICAgICB9ID0gYXdhaXQgZ2V0VGFibGVTdGF0ZSh7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnOiByZWxhdGlvblRvLFxuICAgICAgICBjb2x1bW5zOiB0cmFuc2Zvcm1Db2x1bW5zVG9QcmVmZXJlbmNlcyhxdWVyeT8uY29sdW1ucykgfHwgZGVmYXVsdENvbHVtbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGVuYWJsZVJvd1NlbGVjdGlvbnM6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGVGaWVsZE5hbWU6XG4gICAgICAgICAgIWZpZWxkLm9yZGVyYWJsZSB8fCBBcnJheS5pc0FycmF5KGZpZWxkLmNvbGxlY3Rpb24pXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBgXyR7ZmllbGQuY29sbGVjdGlvbn1fJHtmaWVsZC5uYW1lfV9vcmRlcmAsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgcXVlcnk6IG5ld1F1ZXJ5LFxuICAgICAgICByZW5kZXJSb3dUeXBlcyxcbiAgICAgICAgdGFibGVBcHBlYXJhbmNlOiAnY29uZGVuc2VkJyxcbiAgICAgIH0pXG5cbiAgICAgIHNldERhdGEobmV3RGF0YSlcbiAgICAgIHNldFRhYmxlKE5ld1RhYmxlKVxuICAgICAgc2V0Q29sdW1uU3RhdGUobmV3Q29sdW1uU3RhdGUpXG4gICAgICBzZXRJc0xvYWRpbmdUYWJsZShmYWxzZSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGZpZWxkLmRlZmF1bHRMaW1pdCxcbiAgICAgIGZpZWxkLmRlZmF1bHRTb3J0LFxuICAgICAgZmllbGQuYWRtaW4uZGVmYXVsdENvbHVtbnMsXG4gICAgICBmaWVsZC5hZG1pbi5kaXNhYmxlUm93VHlwZXMsXG4gICAgICBmaWVsZC5jb2xsZWN0aW9uLFxuICAgICAgZmllbGQubmFtZSxcbiAgICAgIGZpZWxkLm9yZGVyYWJsZSxcbiAgICAgIGNvbGxlY3Rpb25Db25maWc/LmFkbWluPy5wYWdpbmF0aW9uPy5kZWZhdWx0TGltaXQsXG4gICAgICBjb2xsZWN0aW9uQ29uZmlnPy5kZWZhdWx0U29ydCxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZmlsdGVyT3B0aW9ucyxcbiAgICAgIGdldFRhYmxlU3RhdGUsXG4gICAgICByZWxhdGlvblRvLFxuICAgICAgcGFyZW50LFxuICAgIF0sXG4gIClcblxuICBjb25zdCBoYW5kbGVUYWJsZVJlbmRlciA9IHVzZUVmZmVjdEV2ZW50KChxdWVyeTogTGlzdFF1ZXJ5LCBkaXNhYmxlVGFibGU6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoIWRpc2FibGVUYWJsZSAmJiAoIVRhYmxlIHx8IHF1ZXJ5KSkge1xuICAgICAgdm9pZCByZW5kZXJUYWJsZSgpXG4gICAgfVxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFuZGxlVGFibGVSZW5kZXIocXVlcnksIGRpc2FibGVUYWJsZSlcbiAgfSwgW3F1ZXJ5LCBkaXNhYmxlVGFibGVdKVxuXG4gIGNvbnN0IG9uRHJhd2VyU2F2ZSA9IHVzZUNhbGxiYWNrPERvY3VtZW50RHJhd2VyUHJvcHNbJ29uU2F2ZSddPihcbiAgICAoeyBkb2MsIG9wZXJhdGlvbiB9KSA9PiB7XG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnY3JlYXRlJykge1xuICAgICAgICBjbG9zZURyYXdlcigpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kRG9jSW5kZXggPSBkYXRhPy5kb2NzPy5maW5kSW5kZXgoKGQpID0+IGQuaWQgPT09IGRvYy5pZClcbiAgICAgIGNvbnN0IHdpdGhOZXdPclVwZGF0ZWREYXRhOiBQYWdpbmF0ZWREb2NzID0geyBkb2NzOiBbXSB9IGFzIFBhZ2luYXRlZERvY3NcblxuICAgICAgaWYgKGZvdW5kRG9jSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0RvY3MgPSBbLi4uZGF0YS5kb2NzXVxuICAgICAgICBuZXdEb2NzW2ZvdW5kRG9jSW5kZXhdID0gZG9jXG4gICAgICAgIHdpdGhOZXdPclVwZGF0ZWREYXRhLmRvY3MgPSBuZXdEb2NzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aXRoTmV3T3JVcGRhdGVkRGF0YS5kb2NzID0gW2RvYywgLi4uZGF0YS5kb2NzXVxuICAgICAgfVxuXG4gICAgICB2b2lkIHJlbmRlclRhYmxlKHdpdGhOZXdPclVwZGF0ZWREYXRhKVxuICAgIH0sXG4gICAgW2RhdGE/LmRvY3MsIHJlbmRlclRhYmxlLCBjbG9zZURyYXdlcl0sXG4gIClcblxuICBjb25zdCBvbkRyYXdlckRlbGV0ZSA9IHVzZUNhbGxiYWNrPERvY3VtZW50RHJhd2VyUHJvcHNbJ29uRGVsZXRlJ10+KFxuICAgIChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBuZXdEb2NzID0gZGF0YS5kb2NzLmZpbHRlcigoZG9jKSA9PiBkb2MuaWQgIT09IGFyZ3MuaWQpXG5cbiAgICAgIHZvaWQgcmVuZGVyVGFibGUoe1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBkb2NzOiBuZXdEb2NzLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudERyYXdlcklEKHVuZGVmaW5lZClcbiAgICB9LFxuICAgIFtkYXRhLCByZW5kZXJUYWJsZV0sXG4gIClcblxuICBjb25zdCBvbkRyYXdlck9wZW4gPSB1c2VDYWxsYmFjazxPbkRyYXdlck9wZW4+KChpZCwgY29sbGVjdGlvblNsdWcpID0+IHtcbiAgICBvcGVuRHJhd2VyV2hlblJlbGF0aW9uQ2hhbmdlcy5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgaWYgKGlkKSB7XG4gICAgICBzZXRDdXJyZW50RHJhd2VySUQoaWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEN1cnJlbnREcmF3ZXJJRCh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICBzZXRTZWxlY3RlZENvbGxlY3Rpb24oY29sbGVjdGlvblNsdWcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkQ29sbGVjdGlvbih1bmRlZmluZWQpXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuRHJhd2VyV2hlblJlbGF0aW9uQ2hhbmdlcy5jdXJyZW50KSB7XG4gICAgICBvcGVuRHJhd2VyV2hlblJlbGF0aW9uQ2hhbmdlcy5jdXJyZW50ID0gZmFsc2VcbiAgICAgIG9wZW5EcmF3ZXIoKVxuICAgIH1cbiAgfSwgW29wZW5EcmF3ZXJdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0RyYXdlck9wZW4pIHtcbiAgICAgIHNldEN1cnJlbnREcmF3ZXJJRCh1bmRlZmluZWQpXG4gICAgfVxuICB9LCBbaXNEcmF3ZXJPcGVuXSlcblxuICBjb25zdCBjYW5DcmVhdGUgPVxuICAgIGFsbG93Q3JlYXRlICE9PSBmYWxzZSAmJlxuICAgIHBlcm1pc3Npb25zPy5jb2xsZWN0aW9ucz8uW2lzUG9seW1vcnBoaWMgPyByZWxhdGlvblRvWzBdIDogcmVsYXRpb25Ub10/LmNyZWF0ZVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzUG9seW1vcnBoaWMgJiYgc2VsZWN0ZWRDb2xsZWN0aW9uKSB7XG4gICAgICBvcGVuRHJhd2VyKClcbiAgICB9XG4gIH0sIFtzZWxlY3RlZENvbGxlY3Rpb24sIG9wZW5EcmF3ZXIsIGlzUG9seW1vcnBoaWNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzUG9seW1vcnBoaWMgJiYgIWlzRHJhd2VyT3BlbiAmJiBzZWxlY3RlZENvbGxlY3Rpb24pIHtcbiAgICAgIHNldFNlbGVjdGVkQ29sbGVjdGlvbih1bmRlZmluZWQpXG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1jb21waWxlci9yZWFjdC1jb21waWxlciAtLSBUT0RPOiBmaXhcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtpc0RyYXdlck9wZW5dKVxuXG4gIGNvbnN0IG1lbW9pemVkTGlzdFF1ZXJ5ID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgY29sdW1uczogdHJhbnNmb3JtQ29sdW1uc1RvUHJlZmVyZW5jZXMoY29sdW1uU3RhdGUpPy5tYXAoKHsgYWNjZXNzb3IgfSkgPT4gYWNjZXNzb3IpLFxuICAgICAgbGltaXQ6IGZpZWxkLmRlZmF1bHRMaW1pdCA/PyBjb2xsZWN0aW9uQ29uZmlnPy5hZG1pbj8ucGFnaW5hdGlvbj8uZGVmYXVsdExpbWl0LFxuICAgICAgc29ydDogZmllbGQuZGVmYXVsdFNvcnQgPz8gY29sbGVjdGlvbkNvbmZpZz8uZGVmYXVsdFNvcnQsXG4gICAgfSksXG4gICAgW2NvbHVtblN0YXRlLCBmaWVsZCwgY29sbGVjdGlvbkNvbmZpZ10sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcmB9PlxuICAgICAgICB7TGFiZWx9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb25zYH0+XG4gICAgICAgICAgPEFkZE5ld0J1dHRvblxuICAgICAgICAgICAgYWxsb3dDcmVhdGU9e2FsbG93Q3JlYXRlICE9PSBmYWxzZX1cbiAgICAgICAgICAgIGJhc2VDbGFzcz17YmFzZUNsYXNzfVxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJub25lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWRkLW5ldyR7aXNQb2x5bW9ycGhpYyA/ICctcG9seW1vcnBoaWMnIDogJyBkb2MtZHJhd2VyX190b2dnbGVyJ31gfVxuICAgICAgICAgICAgY29sbGVjdGlvbnM9e2NvbmZpZy5jb2xsZWN0aW9uc31cbiAgICAgICAgICAgIGkxOG49e2kxOG59XG4gICAgICAgICAgICBpY29uPXtpc1BvbHltb3JwaGljID8gJ3BsdXMnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgbGFiZWw9e2kxOG4udCgnZmllbGRzOmFkZE5ldycpfVxuICAgICAgICAgICAgb25DbGljaz17aXNQb2x5bW9ycGhpYyA/IHNldFNlbGVjdGVkQ29sbGVjdGlvbiA6IG9wZW5EcmF3ZXJ9XG4gICAgICAgICAgICBwZXJtaXNzaW9ucz17cGVybWlzc2lvbnN9XG4gICAgICAgICAgICByZWxhdGlvblRvPXtyZWxhdGlvblRvfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFBpbGxcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9e2Ake2Jhc2VDbGFzc30tY29sdW1uc2B9XG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtvcGVuQ29sdW1uU2VsZWN0b3J9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RvZ2dsZS1jb2x1bW5zICR7XG4gICAgICAgICAgICAgIG9wZW5Db2x1bW5TZWxlY3RvciA/IGAke2Jhc2VDbGFzc31fX2J1dHRvbnMtYWN0aXZlYCA6ICcnXG4gICAgICAgICAgICB9YH1cbiAgICAgICAgICAgIGljb249ezxDaGV2cm9uSWNvbiBkaXJlY3Rpb249e29wZW5Db2x1bW5TZWxlY3RvciA/ICd1cCcgOiAnZG93bid9IC8+fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0T3BlbkNvbHVtblNlbGVjdG9yKCFvcGVuQ29sdW1uU2VsZWN0b3IpfVxuICAgICAgICAgICAgcGlsbFN0eWxlPVwibGlnaHRcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dCgnZ2VuZXJhbDpjb2x1bW5zJyl9XG4gICAgICAgICAgPC9QaWxsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAge0JlZm9yZUlucHV0fVxuICAgICAge2lzTG9hZGluZ1RhYmxlID8gKFxuICAgICAgICA8cD57dCgnZ2VuZXJhbDpsb2FkaW5nJyl9PC9wPlxuICAgICAgKSA6IChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIHtkYXRhPy5kb2NzICYmIGRhdGEuZG9jcy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgPE5vTGlzdFJlc3VsdHNcbiAgICAgICAgICAgICAgQWN0aW9ucz17XG4gICAgICAgICAgICAgICAgY2FuQ3JlYXRlXG4gICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICA8QWRkTmV3QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0NyZWF0ZT17Y2FuQ3JlYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUNsYXNzPXtiYXNlQ2xhc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9ucz17Y29uZmlnLmNvbGxlY3Rpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj17aTE4bn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT1cImNyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17aTE4bi50KCdnZW5lcmFsOmNyZWF0ZU5ld0xhYmVsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXNQb2x5bW9ycGhpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaTE4bi50KCdnZW5lcmFsOmRvY3VtZW50JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldFRyYW5zbGF0aW9uKGNvbGxlY3Rpb25Db25maWc/LmxhYmVscz8uc2luZ3VsYXIsIGkxOG4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtpc1BvbHltb3JwaGljID8gc2V0U2VsZWN0ZWRDb2xsZWN0aW9uIDogb3BlbkRyYXdlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zPXtwZXJtaXNzaW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG89e3JlbGF0aW9uVG99XG4gICAgICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIDogW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBNZXNzYWdlPXtcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGgzPntpMThuLnQoJ2dlbmVyYWw6bm9SZXN1bHRzRm91bmQnKX08L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2dlbmVyYWw6bm9SZXN1bHRzJywge1xuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpc1BvbHltb3JwaGljXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGkxOG4udCgnZ2VuZXJhbDpkb2N1bWVudHMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHM/LnBsdXJhbCwgaTE4biksXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2RhdGE/LmRvY3MgJiYgZGF0YS5kb2NzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPFJlbGF0aW9uc2hpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICA8TGlzdFF1ZXJ5UHJvdmlkZXJcbiAgICAgICAgICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICAgICAgICAgIG1vZGlmeVNlYXJjaFBhcmFtcz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgb25RdWVyeUNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICAgICAgb3JkZXJhYmxlRmllbGROYW1lPXtcbiAgICAgICAgICAgICAgICAgICFmaWVsZC5vcmRlcmFibGUgfHwgQXJyYXkuaXNBcnJheShmaWVsZC5jb2xsZWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA6IGBfJHtmaWVsZC5jb2xsZWN0aW9ufV8ke2ZpZWxkUGF0aC5yZXBsYWNlQWxsKCcuJywgJ18nKX1fb3JkZXJgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHF1ZXJ5PXttZW1vaXplZExpc3RRdWVyeX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUYWJsZUNvbHVtbnNQcm92aWRlclxuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWc9e2lzUG9seW1vcnBoaWMgPyByZWxhdGlvblRvWzBdIDogcmVsYXRpb25Ub31cbiAgICAgICAgICAgICAgICAgIGNvbHVtblN0YXRlPXtjb2x1bW5TdGF0ZX1cbiAgICAgICAgICAgICAgICAgIExpbmtlZENlbGxPdmVycmlkZT17XG4gICAgICAgICAgICAgICAgICAgIDxEcmF3ZXJMaW5rIGN1cnJlbnREcmF3ZXJJRD17Y3VycmVudERyYXdlcklEfSBvbkRyYXdlck9wZW49e29uRHJhd2VyT3Blbn0gLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8QW5pbWF0ZUhlaWdodFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbHVtbnNgfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e29wZW5Db2x1bW5TZWxlY3RvciA/ICdhdXRvJyA6IDB9XG4gICAgICAgICAgICAgICAgICAgIGlkPXtgJHtiYXNlQ2xhc3N9LWNvbHVtbnNgfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29sdW1ucy1pbm5lcmB9PlxuICAgICAgICAgICAgICAgICAgICAgIHtjb2xsZWN0aW9uQ29uZmlnICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb2x1bW5TZWxlY3RvciBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvbkNvbmZpZy5zbHVnfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9BbmltYXRlSGVpZ2h0PlxuICAgICAgICAgICAgICAgICAge1RhYmxlfVxuICAgICAgICAgICAgICAgICAgPFJlbGF0aW9uc2hpcFRhYmxlUGFnaW5hdGlvbiAvPlxuICAgICAgICAgICAgICAgIDwvVGFibGVDb2x1bW5zUHJvdmlkZXI+XG4gICAgICAgICAgICAgIDwvTGlzdFF1ZXJ5UHJvdmlkZXI+XG4gICAgICAgICAgICA8L1JlbGF0aW9uc2hpcFByb3ZpZGVyPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApfVxuICAgICAge0FmdGVySW5wdXR9XG4gICAgICA8RG9jdW1lbnREcmF3ZXJcbiAgICAgICAgaW5pdGlhbERhdGE9e2luaXRpYWxEcmF3ZXJEYXRhfVxuICAgICAgICBvbkRlbGV0ZT17b25EcmF3ZXJEZWxldGV9XG4gICAgICAgIG9uU2F2ZT17b25EcmF3ZXJTYXZlfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VSb3V0ZXIsIHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IHR5cGUgTGlzdFF1ZXJ5LCB0eXBlIFdoZXJlIH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgSUxpc3RRdWVyeUNvbnRleHQsIExpc3RRdWVyeVByb3BzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlTGlzdERyYXdlckNvbnRleHQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9MaXN0RHJhd2VyL1Byb3ZpZGVyLmpzJ1xuaW1wb3J0IHsgdXNlRWZmZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VFZmZlY3RFdmVudC5qcydcbmltcG9ydCB7IHVzZVJvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZVRyYW5zaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBwYXJzZVNlYXJjaFBhcmFtcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9wYXJzZVNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IExpc3RRdWVyeUNvbnRleHQsIExpc3RRdWVyeU1vZGlmaWVkQ29udGV4dCB9IGZyb20gJy4vY29udGV4dC5qcydcbmltcG9ydCB7IG1lcmdlUXVlcnkgfSBmcm9tICcuL21lcmdlUXVlcnkuanMnXG5pbXBvcnQgeyBzYW5pdGl6ZVF1ZXJ5IH0gZnJvbSAnLi9zYW5pdGl6ZVF1ZXJ5LmpzJ1xuXG5leHBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuL2NvbnRleHQuanMnXG5cbmV4cG9ydCBjb25zdCBMaXN0UXVlcnlQcm92aWRlcjogUmVhY3QuRkM8TGlzdFF1ZXJ5UHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNvbGxlY3Rpb25TbHVnLFxuICBkYXRhLFxuICBtb2RpZnlTZWFyY2hQYXJhbXMsXG4gIG9uUXVlcnlDaGFuZ2U6IG9uUXVlcnlDaGFuZ2VGcm9tUHJvcHMsXG4gIG9yZGVyYWJsZUZpZWxkTmFtZSxcbiAgcXVlcnk6IHF1ZXJ5RnJvbVByb3BzLFxufSkgPT4ge1xuICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB0aGlzIGlzIHN0aWxsIG5lZWRlZFxuICAndXNlIG5vIG1lbW8nXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgcmF3U2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcbiAgY29uc3QgW21vZGlmaWVkLCBzZXRNb2RpZmllZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgeyBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuXG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VSZWYoe30gYXMgSUxpc3RRdWVyeUNvbnRleHQpXG4gIGNvbnRleHRSZWYuY3VycmVudC5tb2RpZmllZCA9IG1vZGlmaWVkXG5cbiAgY29uc3QgeyBvblF1ZXJ5Q2hhbmdlOiBvblF1ZXJ5Q2hhbmdlRnJvbUNvbnRleHQgfSA9IHVzZUxpc3REcmF3ZXJDb250ZXh0KClcbiAgY29uc3Qgb25RdWVyeUNoYW5nZSA9IG9uUXVlcnlDaGFuZ2VGcm9tQ29udGV4dCB8fCBvblF1ZXJ5Q2hhbmdlRnJvbVByb3BzXG5cbiAgY29uc3QgcXVlcnlGcm9tVVJMID0gdXNlTWVtbzxMaXN0UXVlcnk+KFxuICAgICgpID0+IHNhbml0aXplUXVlcnkocGFyc2VTZWFyY2hQYXJhbXMocmF3U2VhcmNoUGFyYW1zKSksXG4gICAgW3Jhd1NlYXJjaFBhcmFtc10sXG4gIClcblxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IHVzZVN0YXRlPExpc3RRdWVyeT4oKCkgPT4ge1xuICAgIGlmIChtb2RpZnlTZWFyY2hQYXJhbXMpIHtcbiAgICAgIHJldHVybiBxdWVyeUZyb21VUkxcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGltaXQ6IHF1ZXJ5RnJvbVByb3BzLmxpbWl0LFxuICAgICAgICBzb3J0OiBxdWVyeUZyb21Qcm9wcy5zb3J0LFxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBjb25zdCByZWZpbmVMaXN0RGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuICAgIGFzeW5jIChpbmNvbWluZ1F1ZXJ5OiBMaXN0UXVlcnksIG1vZGlmaWVkPzogYm9vbGVhbikgPT4ge1xuICAgICAgc2V0TW9kaWZpZWQobW9kaWZpZWQgPz8gdHJ1ZSlcblxuICAgICAgY29uc3QgbmV3UXVlcnkgPSBtZXJnZVF1ZXJ5KHF1ZXJ5LCBpbmNvbWluZ1F1ZXJ5LCB7XG4gICAgICAgIGRlZmF1bHRzOiB7XG4gICAgICAgICAgbGltaXQ6IHF1ZXJ5RnJvbVByb3BzLmxpbWl0LFxuICAgICAgICAgIHNvcnQ6IHF1ZXJ5RnJvbVByb3BzLnNvcnQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAobW9kaWZ5U2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IGA/JHtxcy5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLm5ld1F1ZXJ5LFxuICAgICAgICAgIGNvbHVtbnM6IEpTT04uc3RyaW5naWZ5KG5ld1F1ZXJ5LmNvbHVtbnMpLFxuICAgICAgICAgIHF1ZXJ5QnlHcm91cDogSlNPTi5zdHJpbmdpZnkobmV3UXVlcnkucXVlcnlCeUdyb3VwKSxcbiAgICAgICAgfSl9YFxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaCAhPT0gc2VhcmNoKSB7XG4gICAgICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4gcm91dGVyLnJlcGxhY2Uoc2VhcmNoKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb25RdWVyeUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvblF1ZXJ5Q2hhbmdlKG5ld1F1ZXJ5KVxuICAgICAgfVxuXG4gICAgICBzZXRRdWVyeShuZXdRdWVyeSlcbiAgICB9LFxuICAgIFtcbiAgICAgIHF1ZXJ5LFxuICAgICAgcXVlcnlGcm9tUHJvcHMubGltaXQsXG4gICAgICBxdWVyeUZyb21Qcm9wcy5zb3J0LFxuICAgICAgbW9kaWZ5U2VhcmNoUGFyYW1zLFxuICAgICAgb25RdWVyeUNoYW5nZSxcbiAgICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uLFxuICAgICAgcm91dGVyLFxuICAgIF0sXG4gIClcblxuICBjb25zdCBoYW5kbGVQYWdlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGFyZzogbnVtYmVyKSA9PiB7XG4gICAgICBhd2FpdCByZWZpbmVMaXN0RGF0YSh7IHBhZ2U6IGFyZyB9KVxuICAgIH0sXG4gICAgW3JlZmluZUxpc3REYXRhXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVBlclBhZ2VDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICBhc3luYyAoYXJnOiBudW1iZXIpID0+IHtcbiAgICAgIGF3YWl0IHJlZmluZUxpc3REYXRhKHsgbGltaXQ6IGFyZywgcGFnZTogMSB9KVxuICAgIH0sXG4gICAgW3JlZmluZUxpc3REYXRhXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhcmc6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoID0gYXJnID09PSAnJyA/IHVuZGVmaW5lZCA6IGFyZ1xuICAgICAgYXdhaXQgcmVmaW5lTGlzdERhdGEoeyBzZWFyY2ggfSlcbiAgICB9LFxuICAgIFtyZWZpbmVMaXN0RGF0YV0sXG4gIClcblxuICBjb25zdCBoYW5kbGVTb3J0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNvcnQ6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgcmVmaW5lTGlzdERhdGEoeyBzb3J0IH0pXG4gICAgfSxcbiAgICBbcmVmaW5lTGlzdERhdGFdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlV2hlcmVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAod2hlcmU6IFdoZXJlKSA9PiB7XG4gICAgICBhd2FpdCByZWZpbmVMaXN0RGF0YSh7IHdoZXJlIH0pXG4gICAgfSxcbiAgICBbcmVmaW5lTGlzdERhdGFdLFxuICApXG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgY29tcG9uZW50IG1heSBwYXNzIHByb3BzIHRvIHRoaXMgY2xpZW50IGNvbXBvbmVudCwgZS5nLiBmcm9tXG4gICAqIGZldGNoaW5nIHRoZSBxdWVyeSBmcm9tIHByZWZlcmVuY2VzLlxuICAgKiBUaGlzIGVmZmVjdCBpcyByZXNwb25zaWJsZSBmb3Igc3luY2luZyB0aGUgcHJvcHMgYmFjayB0byB0aGUgVVJMLCB3aXRob3V0XG4gICAqIHRyaWdnZXJpbmcgYSByZS1yZW5kZXIuXG4gICAqL1xuICBjb25zdCBzeW5jUHJvcHNUb1VSTCA9IHVzZUVmZmVjdEV2ZW50KCgpID0+IHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IHNhbml0aXplUXVlcnkoeyAuLi4ocXVlcnkgfHwge30pLCAuLi4ocXVlcnlGcm9tUHJvcHMgfHwge30pIH0pXG5cbiAgICBjb25zdCBzZWFyY2ggPSBgPyR7cXMuc3RyaW5naWZ5KHtcbiAgICAgIC4uLm5ld1F1ZXJ5LFxuICAgICAgY29sdW1uczogSlNPTi5zdHJpbmdpZnkobmV3UXVlcnkuY29sdW1ucyksXG4gICAgICBxdWVyeUJ5R3JvdXA6IEpTT04uc3RyaW5naWZ5KG5ld1F1ZXJ5LnF1ZXJ5QnlHcm91cCksXG4gICAgfSl9YFxuXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggIT09IHNlYXJjaCkge1xuICAgICAgc2V0UXVlcnkobmV3UXVlcnkpXG4gICAgICAvLyBJbXBvcnRhbnQ6IGRvIG5vdCB1c2Ugcm91dGVyLnJlcGxhY2UgaGVyZSB0byBhdm9pZCByZS1yZW5kZXJpbmcuXG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIHNlYXJjaClcbiAgICB9XG4gIH0pXG5cbiAgLy8gSWYgYHF1ZXJ5YCBpcyB1cGRhdGVkIGV4dGVybmFsbHksIHVwZGF0ZSB0aGUgbG9jYWwgc3RhdGVcbiAgLy8gRS5nLiB3aGVuIEhNUiBydW5zLCB0aGVzZSBwcm9wZXJ0aWVzIG1heSBiZSBkaWZmZXJlbnRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kaWZ5U2VhcmNoUGFyYW1zICYmIHF1ZXJ5RnJvbVByb3BzKSB7XG4gICAgICBzeW5jUHJvcHNUb1VSTCgpXG4gICAgfVxuICB9LCBbbW9kaWZ5U2VhcmNoUGFyYW1zLCBxdWVyeUZyb21Qcm9wc10pXG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdFF1ZXJ5Q29udGV4dFxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRlZmF1bHRMaW1pdDogZGF0YT8ubGltaXQsXG4gICAgICAgIGhhbmRsZVBhZ2VDaGFuZ2UsXG4gICAgICAgIGhhbmRsZVBlclBhZ2VDaGFuZ2UsXG4gICAgICAgIGhhbmRsZVNlYXJjaENoYW5nZSxcbiAgICAgICAgaGFuZGxlU29ydENoYW5nZSxcbiAgICAgICAgaGFuZGxlV2hlcmVDaGFuZ2UsXG4gICAgICAgIGlzR3JvdXBpbmdCeTogQm9vbGVhbihjb2xsZWN0aW9uQ29uZmlnPy5hZG1pbj8uZ3JvdXBCeSAmJiBxdWVyeT8uZ3JvdXBCeSksXG4gICAgICAgIG9yZGVyYWJsZUZpZWxkTmFtZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHJlZmluZUxpc3REYXRhLFxuICAgICAgICBzZXRNb2RpZmllZCxcbiAgICAgICAgLi4uY29udGV4dFJlZi5jdXJyZW50LFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8TGlzdFF1ZXJ5TW9kaWZpZWRDb250ZXh0IHZhbHVlPXttb2RpZmllZH0+e2NoaWxkcmVufTwvTGlzdFF1ZXJ5TW9kaWZpZWRDb250ZXh0PlxuICAgIDwvTGlzdFF1ZXJ5Q29udGV4dD5cbiAgKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uU2x1ZywgRGF0YSwgTGlzdFF1ZXJ5IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgdXNlU2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB0eXBlIHsgVXNlRG9jdW1lbnREcmF3ZXIgfSBmcm9tICcuLi9Eb2N1bWVudERyYXdlci90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgT3B0aW9uIH0gZnJvbSAnLi4vUmVhY3RTZWxlY3QvaW5kZXguanMnXG5cbmV4cG9ydCB0eXBlIExpc3REcmF3ZXJDb250ZXh0UHJvcHMgPSB7XG4gIHJlYWRvbmx5IGFsbG93Q3JlYXRlPzogYm9vbGVhblxuICByZWFkb25seSBjcmVhdGVOZXdEcmF3ZXJTbHVnPzogc3RyaW5nXG4gIHJlYWRvbmx5IERvY3VtZW50RHJhd2VyVG9nZ2xlcj86IFJldHVyblR5cGU8VXNlRG9jdW1lbnREcmF3ZXI+WzFdXG4gIHJlYWRvbmx5IGRyYXdlclNsdWc/OiBzdHJpbmdcbiAgcmVhZG9ubHkgZW5hYmxlZENvbGxlY3Rpb25zPzogQ29sbGVjdGlvblNsdWdbXVxuICByZWFkb25seSBvbkJ1bGtTZWxlY3Q/OiAoc2VsZWN0ZWQ6IFJldHVyblR5cGU8dHlwZW9mIHVzZVNlbGVjdGlvbj5bJ3NlbGVjdGVkJ10pID0+IHZvaWRcbiAgcmVhZG9ubHkgb25RdWVyeUNoYW5nZT86IChxdWVyeTogTGlzdFF1ZXJ5KSA9PiB2b2lkXG4gIHJlYWRvbmx5IG9uU2VsZWN0PzogKGFyZ3M6IHtcbiAgICBjb2xsZWN0aW9uU2x1ZzogQ29sbGVjdGlvblNsdWdcbiAgICBkb2M6IERhdGFcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIFRoZSBgZG9jSURgIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIFBheWxvYWQuXG4gICAgICogVXNlIGBkb2MuaWRgIGluc3RlYWQuXG4gICAgICovXG4gICAgZG9jSUQ6IHN0cmluZ1xuICB9KSA9PiB2b2lkXG4gIHJlYWRvbmx5IHNlbGVjdGVkT3B0aW9uPzogT3B0aW9uPENvbGxlY3Rpb25TbHVnPlxuICByZWFkb25seSBzZXRTZWxlY3RlZE9wdGlvbj86IChvcHRpb246IE9wdGlvbjxDb2xsZWN0aW9uU2x1Zz4pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgTGlzdERyYXdlckNvbnRleHRUeXBlID0ge1xuICByZWFkb25seSBpc0luRHJhd2VyOiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGVuIGNhbGxlZCwgd2lsbCBlaXRoZXIgcmVmcmVzaCB0aGUgbGlzdCB2aWV3IHdpdGggaXRzIGN1cnJlbnRseSBzZWxlY3RlZCBjb2xsZWN0aW9uLlxuICAgKiBJZiBhbiBjb2xsZWN0aW9uIHNsdWcgaXMgcHJvdmlkZWQsIHdpbGwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZnJlc2g6IChjb2xsZWN0aW9uU2x1Zz86IENvbGxlY3Rpb25TbHVnKSA9PiBQcm9taXNlPHZvaWQ+XG59ICYgTGlzdERyYXdlckNvbnRleHRQcm9wc1xuXG5leHBvcnQgY29uc3QgTGlzdERyYXdlckNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9IGFzIExpc3REcmF3ZXJDb250ZXh0VHlwZSlcblxuZXhwb3J0IGNvbnN0IExpc3REcmF3ZXJDb250ZXh0UHJvdmlkZXI6IFJlYWN0LkZDPFxuICB7XG4gICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICAgIHJlZnJlc2g6IExpc3REcmF3ZXJDb250ZXh0VHlwZVsncmVmcmVzaCddXG4gIH0gJiBMaXN0RHJhd2VyQ29udGV4dFByb3BzXG4+ID0gKHsgY2hpbGRyZW4sIC4uLnJlc3QgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxMaXN0RHJhd2VyQ29udGV4dCB2YWx1ZT17eyBpc0luRHJhd2VyOiBCb29sZWFuKHJlc3QuZHJhd2VyU2x1ZyksIC4uLnJlc3QgfX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9MaXN0RHJhd2VyQ29udGV4dD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlTGlzdERyYXdlckNvbnRleHQgPSAoKTogTGlzdERyYXdlckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZShMaXN0RHJhd2VyQ29udGV4dClcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUxpc3REcmF3ZXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBMaXN0RHJhd2VyQ29udGV4dFByb3ZpZGVyJylcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5cbi8qKlxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIHBhcnNlIFVSTFNlYXJjaFBhcmFtcyBpbnRvIGEgUGFyc2VkUXMgb2JqZWN0LlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBgcXNgIGxpYnJhcnkuXG4gKiBJbiBOZXh0LmpzLCB0aGUgYHVzZVNlYXJjaFBhcmFtcygpYCBob29rIGZyb20gYG5leHQvbmF2aWdhdGlvbmAgcmV0dXJucyBhIGBVUkxTZWFyY2hQYXJhbXNgIG9iamVjdC5cbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcGFyc2UgdGhhdCBvYmplY3QgaW50byBhIG1vcmUgdXNhYmxlIGZvcm1hdC5cbiAqIEBwYXJhbSB7UmVhZG9ubHlVUkxTZWFyY2hQYXJhbXN9IHNlYXJjaFBhcmFtcyAtIFRoZSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0IHRvIHBhcnNlLlxuICogQHJldHVybnMge3FzLlBhcnNlZFFzfSAtIFRoZSBwYXJzZWQgcXVlcnkgc3RyaW5nIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VhcmNoUGFyYW1zKHNlYXJjaFBhcmFtczogUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMpOiBxcy5QYXJzZWRRcyB7XG4gIGNvbnN0IHNlYXJjaCA9IHNlYXJjaFBhcmFtcy50b1N0cmluZygpXG5cbiAgcmV0dXJuIHFzLnBhcnNlKHNlYXJjaCwge1xuICAgIGRlcHRoOiAxMCxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogdHJ1ZSxcbiAgfSlcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IElMaXN0UXVlcnlDb250ZXh0IH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IExpc3RRdWVyeUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9IGFzIElMaXN0UXVlcnlDb250ZXh0KVxuXG5leHBvcnQgY29uc3QgdXNlTGlzdFF1ZXJ5ID0gKCk6IElMaXN0UXVlcnlDb250ZXh0ID0+IHVzZShMaXN0UXVlcnlDb250ZXh0KVxuXG5leHBvcnQgY29uc3QgTGlzdFF1ZXJ5TW9kaWZpZWRDb250ZXh0ID0gY3JlYXRlQ29udGV4dChmYWxzZSlcblxuZXhwb3J0IGNvbnN0IHVzZUxpc3RRdWVyeU1vZGlmaWVkID0gKCk6IGJvb2xlYW4gPT4gdXNlKExpc3RRdWVyeU1vZGlmaWVkQ29udGV4dClcbiIsImltcG9ydCB0eXBlIHsgTGlzdFF1ZXJ5IH0gZnJvbSAncGF5bG9hZCdcblxuZXhwb3J0IGNvbnN0IG1lcmdlUXVlcnkgPSAoXG4gIGN1cnJlbnRRdWVyeTogTGlzdFF1ZXJ5LFxuICBuZXdRdWVyeTogTGlzdFF1ZXJ5LFxuICBvcHRpb25zPzoge1xuICAgIGRlZmF1bHRzPzogTGlzdFF1ZXJ5XG4gIH0sXG4pOiBMaXN0UXVlcnkgPT4ge1xuICBsZXQgcGFnZSA9ICdwYWdlJyBpbiBuZXdRdWVyeSA/IG5ld1F1ZXJ5LnBhZ2UgOiBjdXJyZW50UXVlcnk/LnBhZ2VcblxuICBjb25zdCBzaG91bGRSZXNldFBhZ2UgPSBbJ3doZXJlJywgJ3NlYXJjaCcsICdncm91cEJ5J10/LnNvbWUoXG4gICAgKGtleSkgPT4ga2V5IGluIG5ld1F1ZXJ5ICYmICFbJ2xpbWl0JywgJ3BhZ2UnXS5pbmNsdWRlcyhrZXkpLFxuICApXG5cbiAgaWYgKHNob3VsZFJlc2V0UGFnZSkge1xuICAgIHBhZ2UgPSAxXG4gIH1cblxuICBjb25zdCBzaG91bGRSZXNldFF1ZXJ5QnlHcm91cCA9IFsnd2hlcmUnLCAnc2VhcmNoJywgJ3BhZ2UnLCAnbGltaXQnLCAnZ3JvdXBCeScsICdzb3J0J10uc29tZShcbiAgICAoa2V5KSA9PiBrZXkgaW4gbmV3UXVlcnksXG4gIClcblxuICBsZXQgbWVyZ2VkUXVlcnlCeUdyb3VwID0gdW5kZWZpbmVkXG5cbiAgaWYgKCFzaG91bGRSZXNldFF1ZXJ5QnlHcm91cCkge1xuICAgIC8vIERlZXBseSBtZXJnZSBxdWVyeUJ5R3JvdXAgc28gd2UgY2FuIHNlbmQgYSBwYXJ0aWFsIHVwZGF0ZSBmb3IgYSBzcGVjaWZpYyBncm91cFxuICAgIG1lcmdlZFF1ZXJ5QnlHcm91cCA9IHtcbiAgICAgIC4uLihjdXJyZW50UXVlcnk/LnF1ZXJ5QnlHcm91cCB8fCB7fSksXG4gICAgICAuLi4obmV3UXVlcnkucXVlcnlCeUdyb3VwXG4gICAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMobmV3UXVlcnkucXVlcnlCeUdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi4oY3VycmVudFF1ZXJ5Py5xdWVyeUJ5R3JvdXA/LltrZXldIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIClcbiAgICAgICAgOiB7fSksXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VkUXVlcnk6IExpc3RRdWVyeSA9IHtcbiAgICAuLi5jdXJyZW50UXVlcnksXG4gICAgLi4ubmV3UXVlcnksXG4gICAgY29sdW1uczogJ2NvbHVtbnMnIGluIG5ld1F1ZXJ5ID8gbmV3UXVlcnkuY29sdW1ucyA6IGN1cnJlbnRRdWVyeS5jb2x1bW5zLFxuICAgIGdyb3VwQnk6XG4gICAgICAnZ3JvdXBCeScgaW4gbmV3UXVlcnlcbiAgICAgICAgPyBuZXdRdWVyeS5ncm91cEJ5XG4gICAgICAgIDogKGN1cnJlbnRRdWVyeT8uZ3JvdXBCeSA/PyBvcHRpb25zPy5kZWZhdWx0cz8uZ3JvdXBCeSksXG4gICAgbGltaXQ6ICdsaW1pdCcgaW4gbmV3UXVlcnkgPyBuZXdRdWVyeS5saW1pdCA6IChjdXJyZW50UXVlcnk/LmxpbWl0ID8/IG9wdGlvbnM/LmRlZmF1bHRzPy5saW1pdCksXG4gICAgcGFnZSxcbiAgICBwcmVzZXQ6ICdwcmVzZXQnIGluIG5ld1F1ZXJ5ID8gbmV3UXVlcnkucHJlc2V0IDogY3VycmVudFF1ZXJ5Py5wcmVzZXQsXG4gICAgcXVlcnlCeUdyb3VwOiBtZXJnZWRRdWVyeUJ5R3JvdXAsXG4gICAgc2VhcmNoOiAnc2VhcmNoJyBpbiBuZXdRdWVyeSA/IG5ld1F1ZXJ5LnNlYXJjaCA6IGN1cnJlbnRRdWVyeT8uc2VhcmNoLFxuICAgIHNvcnQ6XG4gICAgICAnc29ydCcgaW4gbmV3UXVlcnlcbiAgICAgICAgPyBuZXdRdWVyeS5zb3J0XG4gICAgICAgIDogKChjdXJyZW50UXVlcnk/LnNvcnQgYXMgc3RyaW5nKSA/PyBvcHRpb25zPy5kZWZhdWx0cz8uc29ydCksXG4gICAgd2hlcmU6ICd3aGVyZScgaW4gbmV3UXVlcnkgPyBuZXdRdWVyeS53aGVyZSA6IGN1cnJlbnRRdWVyeT8ud2hlcmUsXG4gIH1cblxuICByZXR1cm4gbWVyZ2VkUXVlcnlcbn1cbiIsImltcG9ydCB0eXBlIHsgTGlzdFF1ZXJ5LCBXaGVyZSB9IGZyb20gJ3BheWxvYWQnXG5cbi8qKlxuICogU2FuaXRpemUgZW1wdHkgc3RyaW5ncyBmcm9tIHRoZSBxdWVyeSwgZS5nLiBgP3ByZXNldD1gXG4gKiBUaGlzIGlzIGhvdyB3ZSBkZXRlcm1pbmUgd2hldGhlciB0byBjbGVhciB1c2VyIHByZWZlcmVuY2VzIGZvciBjZXJ0YWluIHBhcmFtc1xuICogT25jZSBjbGVhcmVkLCB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkIGluIHRoZSBVUkxcbiAqL1xuZXhwb3J0IGNvbnN0IHNhbml0aXplUXVlcnkgPSAodG9TYW5pdGl6ZTogTGlzdFF1ZXJ5KTogTGlzdFF1ZXJ5ID0+IHtcbiAgY29uc3Qgc2FuaXRpemVkID0geyAuLi50b1Nhbml0aXplIH1cblxuICBPYmplY3QuZW50cmllcyhzYW5pdGl6ZWQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmIChcbiAgICAgIGtleSA9PT0gJ2NvbHVtbnMnICYmXG4gICAgICAodmFsdWUgPT09ICdbXScgfHwgKEFycmF5LmlzQXJyYXkoc2FuaXRpemVkW2tleV0pICYmIHNhbml0aXplZFtrZXldLmxlbmd0aCA9PT0gMCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgc2FuaXRpemVkW2tleV1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBrZXkgPT09ICd3aGVyZScgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAhT2JqZWN0LmtleXModmFsdWUgYXMgV2hlcmUpLmxlbmd0aFxuICAgICkge1xuICAgICAgZGVsZXRlIHNhbml0aXplZFtrZXldXG4gICAgfVxuXG4gICAgaWYgKChrZXkgPT09ICdsaW1pdCcgfHwga2V5ID09PSAncGFnZScpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMClcbiAgICAgIHNhbml0aXplZFtrZXldID0gTnVtYmVyLmlzTmFOKHBhcnNlZCkgPyB1bmRlZmluZWQgOiBwYXJzZWRcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAncGFnZScgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgIGRlbGV0ZSBzYW5pdGl6ZWRba2V5XVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGRlbGV0ZSBzYW5pdGl6ZWRba2V5XVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gc2FuaXRpemVkXG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gIEFkbWluVmlld1NlcnZlclByb3BzT25seSxcbiAgQnVpbGRGb3JtU3RhdGVBcmdzLFxuICBCdWlsZFRhYmxlU3RhdGVBcmdzLFxuICBEYXRhLFxuICBEb2N1bWVudFByZWZlcmVuY2VzLFxuICBEb2N1bWVudFNsb3RzLFxuICBGb3JtU3RhdGUsXG4gIEdldEZvbGRlclJlc3VsdHNDb21wb25lbnRBbmREYXRhQXJncyxcbiAgUGFyYW1zLFxuICBSZW5kZXJEb2N1bWVudFZlcnNpb25zUHJvcGVydGllcyxcbiAgU2VydmVyRnVuY3Rpb24sXG4gIFNlcnZlckZ1bmN0aW9uQ2xpZW50LFxuICBTbHVnaWZ5U2VydmVyRnVuY3Rpb25BcmdzLFxufSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHR5cGUgeyBTbHVnaWZ5IH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJlbmRlckZpZWxkU2VydmVyRm5BcmdzLFxuICBSZW5kZXJGaWVsZFNlcnZlckZuUmV0dXJuVHlwZSxcbn0gZnJvbSAnLi4vLi4vZm9ybXMvZmllbGRTY2hlbWFzVG9Gb3JtU3RhdGUvc2VydmVyRnVuY3Rpb25zL3JlbmRlckZpZWxkU2VydmVyRm4uanMnXG5pbXBvcnQgdHlwZSB7IGJ1aWxkRm9ybVN0YXRlSGFuZGxlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9idWlsZEZvcm1TdGF0ZS5qcydcbmltcG9ydCB0eXBlIHsgYnVpbGRUYWJsZVN0YXRlSGFuZGxlciB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9idWlsZFRhYmxlU3RhdGUuanMnXG5pbXBvcnQgdHlwZSB7IENvcHlEYXRhRnJvbUxvY2FsZUFyZ3MgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29weURhdGFGcm9tTG9jYWxlLmpzJ1xuaW1wb3J0IHR5cGUgeyBnZXRGb2xkZXJSZXN1bHRzQ29tcG9uZW50QW5kRGF0YUhhbmRsZXIgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvZ2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudEFuZERhdGEuanMnXG5pbXBvcnQgdHlwZSB7XG4gIHNjaGVkdWxlUHVibGlzaEhhbmRsZXIsXG4gIFNjaGVkdWxlUHVibGlzaEhhbmRsZXJBcmdzLFxufSBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2NoZWR1bGVQdWJsaXNoSGFuZGxlci5qcydcblxudHlwZSBHZXRGb3JtU3RhdGVDbGllbnQgPSAoXG4gIGFyZ3M6IHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuICB9ICYgT21pdDxCdWlsZEZvcm1TdGF0ZUFyZ3MsICdjbGllbnRDb25maWcnIHwgJ3JlcSc+LFxuKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZEZvcm1TdGF0ZUhhbmRsZXI+XG5cbnR5cGUgU2NoZWR1bGVQdWJsaXNoQ2xpZW50ID0gKFxuICBhcmdzOiB7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgfSAmIE9taXQ8U2NoZWR1bGVQdWJsaXNoSGFuZGxlckFyZ3MsICdjbGllbnRDb25maWcnIHwgJ3JlcSc+LFxuKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBzY2hlZHVsZVB1Ymxpc2hIYW5kbGVyPlxuXG50eXBlIEdldFRhYmxlU3RhdGVDbGllbnQgPSAoXG4gIGFyZ3M6IHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuICB9ICYgT21pdDxCdWlsZFRhYmxlU3RhdGVBcmdzLCAnY2xpZW50Q29uZmlnJyB8ICdyZXEnPixcbikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRUYWJsZVN0YXRlSGFuZGxlcj5cblxudHlwZSBTbHVnaWZ5Q2xpZW50ID0gKFxuICBhcmdzOiB7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgfSAmIE9taXQ8U2x1Z2lmeVNlcnZlckZ1bmN0aW9uQXJncywgJ2NsaWVudENvbmZpZycgfCAncmVxJz4sXG4pID0+IFJldHVyblR5cGU8U2x1Z2lmeT5cblxuZXhwb3J0IHR5cGUgUmVuZGVyRG9jdW1lbnRSZXN1bHQgPSB7XG4gIGRhdGE6IGFueVxuICBEb2N1bWVudDogUmVhY3QuUmVhY3ROb2RlXG4gIHByZWZlcmVuY2VzOiBEb2N1bWVudFByZWZlcmVuY2VzXG59XG5cbnR5cGUgUmVuZGVyRG9jdW1lbnRCYXNlQXJncyA9IHtcbiAgY29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICBkaXNhYmxlQWN0aW9ucz86IGJvb2xlYW5cbiAgZG9jSUQ6IG51bWJlciB8IHN0cmluZ1xuICBkcmF3ZXJTbHVnPzogc3RyaW5nXG4gIGluaXRpYWxEYXRhPzogRGF0YVxuICBpbml0aWFsU3RhdGU/OiBGb3JtU3RhdGVcbiAgb3ZlcnJpZGVFbnRpdHlWaXNpYmlsaXR5PzogYm9vbGVhblxuICBwYXJhbXNPdmVycmlkZT86IEFkbWluVmlld1NlcnZlclByb3BzT25seVsncGFyYW1zJ11cbiAgcmVkaXJlY3RBZnRlckNyZWF0ZT86IGJvb2xlYW5cbiAgcmVkaXJlY3RBZnRlckRlbGV0ZTogYm9vbGVhblxuICByZWRpcmVjdEFmdGVyRHVwbGljYXRlOiBib29sZWFuXG4gIHJlZGlyZWN0QWZ0ZXJSZXN0b3JlPzogYm9vbGVhblxuICBzZWFyY2hQYXJhbXM/OiBQYXJhbXNcbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgc3BlY2lmaWMgdG8gdGhlIHZlcnNpb25zIHZpZXdcbiAgICovXG4gIHZlcnNpb25zPzogUmVuZGVyRG9jdW1lbnRWZXJzaW9uc1Byb3BlcnRpZXNcbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyRG9jdW1lbnRTZXJ2ZXJGdW5jdGlvbiA9IFNlcnZlckZ1bmN0aW9uPFxuICBSZW5kZXJEb2N1bWVudEJhc2VBcmdzLFxuICBQcm9taXNlPFJlbmRlckRvY3VtZW50UmVzdWx0PlxuPlxuXG50eXBlIFJlbmRlckRvY3VtZW50U2VydmVyRnVuY3Rpb25Ib29rRm4gPSAoXG4gIC8vIE5vIHJlcSBvciBpbXBvcnRNYXAgLSB0aG9zZSBhcmUgYXVnbWVudGVkIGJ5IGhhbmRsZVNlcnZlckZ1bmN0aW9uc1xuICBhcmdzOiB7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgfSAmIFJlbmRlckRvY3VtZW50QmFzZUFyZ3MsXG4pID0+IFByb21pc2U8UmVuZGVyRG9jdW1lbnRSZXN1bHQ+XG5cbnR5cGUgQ29weURhdGFGcm9tTG9jYWxlQ2xpZW50ID0gKFxuICBhcmdzOiB7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgfSAmIE9taXQ8Q29weURhdGFGcm9tTG9jYWxlQXJncywgJ3JlcSc+LFxuKSA9PiBQcm9taXNlPHsgZGF0YTogRGF0YSB9PlxuXG50eXBlIEdldERvY3VtZW50U2xvdHMgPSAoYXJnczoge1xuICBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gIGlkPzogbnVtYmVyIHwgc3RyaW5nXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG59KSA9PiBQcm9taXNlPERvY3VtZW50U2xvdHM+XG5cbnR5cGUgR2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudEFuZERhdGFDbGllbnQgPSAoXG4gIGFyZ3M6IHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuICB9ICYgT21pdDxHZXRGb2xkZXJSZXN1bHRzQ29tcG9uZW50QW5kRGF0YUFyZ3MsICdyZXEnPixcbikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudEFuZERhdGFIYW5kbGVyPlxuXG50eXBlIFJlbmRlckZpZWxkQ2xpZW50ID0gKGFyZ3M6IFJlbmRlckZpZWxkU2VydmVyRm5BcmdzKSA9PiBQcm9taXNlPFJlbmRlckZpZWxkU2VydmVyRm5SZXR1cm5UeXBlPlxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJGdW5jdGlvbnNDb250ZXh0VHlwZSA9IHtcbiAgX2ludGVybmFsX3JlbmRlckZpZWxkOiBSZW5kZXJGaWVsZENsaWVudFxuICBjb3B5RGF0YUZyb21Mb2NhbGU6IENvcHlEYXRhRnJvbUxvY2FsZUNsaWVudFxuICBnZXREb2N1bWVudFNsb3RzOiBHZXREb2N1bWVudFNsb3RzXG4gIGdldEZvbGRlclJlc3VsdHNDb21wb25lbnRBbmREYXRhOiBHZXRGb2xkZXJSZXN1bHRzQ29tcG9uZW50QW5kRGF0YUNsaWVudFxuICBnZXRGb3JtU3RhdGU6IEdldEZvcm1TdGF0ZUNsaWVudFxuICBnZXRUYWJsZVN0YXRlOiBHZXRUYWJsZVN0YXRlQ2xpZW50XG4gIHJlbmRlckRvY3VtZW50OiBSZW5kZXJEb2N1bWVudFNlcnZlckZ1bmN0aW9uSG9va0ZuXG4gIHNjaGVkdWxlUHVibGlzaDogU2NoZWR1bGVQdWJsaXNoQ2xpZW50XG4gIHNlcnZlckZ1bmN0aW9uOiBTZXJ2ZXJGdW5jdGlvbkNsaWVudFxuICBzbHVnaWZ5OiBTbHVnaWZ5Q2xpZW50XG59XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJGdW5jdGlvbnNDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTZXJ2ZXJGdW5jdGlvbnNDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZCxcbilcblxuZXhwb3J0IGNvbnN0IHVzZVNlcnZlckZ1bmN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZShTZXJ2ZXJGdW5jdGlvbnNDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VTZXJ2ZXJGdW5jdGlvbnMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFNlcnZlckZ1bmN0aW9uc1Byb3ZpZGVyJylcbiAgfVxuICByZXR1cm4gY29udGV4dFxufVxuXG5leHBvcnQgY29uc3QgU2VydmVyRnVuY3Rpb25zUHJvdmlkZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBzZXJ2ZXJGdW5jdGlvbjogU2VydmVyRnVuY3Rpb25DbGllbnRcbn0+ID0gKHsgY2hpbGRyZW4sIHNlcnZlckZ1bmN0aW9uIH0pID0+IHtcbiAgaWYgKCFzZXJ2ZXJGdW5jdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyRnVuY3Rpb25zUHJvdmlkZXIgcmVxdWlyZXMgYSBzZXJ2ZXJGdW5jdGlvbiBwcm9wJylcbiAgfVxuXG4gIGNvbnN0IGdldERvY3VtZW50U2xvdHMgPSB1c2VDYWxsYmFjazxHZXREb2N1bWVudFNsb3RzPihcbiAgICBhc3luYyAoYXJncykgPT5cbiAgICAgIGF3YWl0IHNlcnZlckZ1bmN0aW9uKHtcbiAgICAgICAgbmFtZTogJ3JlbmRlci1kb2N1bWVudC1zbG90cycsXG4gICAgICAgIGFyZ3MsXG4gICAgICB9KSxcbiAgICBbc2VydmVyRnVuY3Rpb25dLFxuICApXG5cbiAgY29uc3Qgc2NoZWR1bGVQdWJsaXNoID0gdXNlQ2FsbGJhY2s8U2NoZWR1bGVQdWJsaXNoQ2xpZW50PihcbiAgICBhc3luYyAoYXJncykgPT4ge1xuICAgICAgY29uc3QgeyBzaWduYWw6IHJlbW90ZVNpZ25hbCwgLi4ucmVzdCB9ID0gYXJnc1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXJlbW90ZVNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlckZ1bmN0aW9uKHtcbiAgICAgICAgICAgIG5hbWU6ICdzY2hlZHVsZS1wdWJsaXNoJyxcbiAgICAgICAgICAgIGFyZ3M6IHsgLi4ucmVzdCB9LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoIXJlbW90ZVNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKF9lcnIpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgfVxuXG4gICAgICBsZXQgZXJyb3IgPSBgRXJyb3Igc2NoZWR1bGluZyAke3Jlc3QudHlwZX1gXG5cbiAgICAgIGlmIChyZXN0LmRvYykge1xuICAgICAgICBlcnJvciArPSBgIGZvciBkb2N1bWVudCB3aXRoIElEICR7cmVzdC5kb2MudmFsdWV9IGluIGNvbGxlY3Rpb24gJHtyZXN0LmRvYy5yZWxhdGlvblRvfWBcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgZXJyb3IgfVxuICAgIH0sXG4gICAgW3NlcnZlckZ1bmN0aW9uXSxcbiAgKVxuXG4gIGNvbnN0IGdldEZvcm1TdGF0ZSA9IHVzZUNhbGxiYWNrPEdldEZvcm1TdGF0ZUNsaWVudD4oXG4gICAgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHsgc2lnbmFsOiByZW1vdGVTaWduYWwsIC4uLnJlc3QgfSA9IGFyZ3MgfHwge31cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyZW1vdGVTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgc2VydmVyRnVuY3Rpb24oe1xuICAgICAgICAgICAgbmFtZTogJ2Zvcm0tc3RhdGUnLFxuICAgICAgICAgICAgYXJnczogeyBmYWxsYmFja0xvY2FsZTogZmFsc2UsIC4uLnJlc3QgfSxcbiAgICAgICAgICB9KSkgYXMgQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBidWlsZEZvcm1TdGF0ZUhhbmRsZXI+PiAvLyBUT0RPOiBpbmZlciB0aGlzIHR5cGUgd2hlbiBgc3RyaWN0TnVsbENoZWNrc2AgaXMgZW5hYmxlZFxuXG4gICAgICAgICAgaWYgKCFyZW1vdGVTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihfZXJyKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgc3RhdGU6IG51bGwgfVxuICAgIH0sXG4gICAgW3NlcnZlckZ1bmN0aW9uXSxcbiAgKVxuXG4gIGNvbnN0IGdldFRhYmxlU3RhdGUgPSB1c2VDYWxsYmFjazxHZXRUYWJsZVN0YXRlQ2xpZW50PihcbiAgICBhc3luYyAoYXJncykgPT4ge1xuICAgICAgY29uc3QgeyBzaWduYWw6IHJlbW90ZVNpZ25hbCwgLi4ucmVzdCB9ID0gYXJncyB8fCB7fVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXJlbW90ZVNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBzZXJ2ZXJGdW5jdGlvbih7XG4gICAgICAgICAgICBuYW1lOiAndGFibGUtc3RhdGUnLFxuICAgICAgICAgICAgYXJnczogeyBmYWxsYmFja0xvY2FsZTogZmFsc2UsIC4uLnJlc3QgfSxcbiAgICAgICAgICB9KSkgYXMgQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBidWlsZFRhYmxlU3RhdGVIYW5kbGVyPj4gLy8gVE9ETzogaW5mZXIgdGhpcyB0eXBlIHdoZW4gYHN0cmljdE51bGxDaGVja3NgIGlzIGVuYWJsZWRcblxuICAgICAgICAgIGlmICghcmVtb3RlU2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoX2VycikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICB9XG5cbiAgICAgIC8vIHJldHVybiB7IHN0YXRlOiBhcmdzLmZvcm1TdGF0ZSB9XG4gICAgfSxcbiAgICBbc2VydmVyRnVuY3Rpb25dLFxuICApXG5cbiAgY29uc3QgcmVuZGVyRG9jdW1lbnQgPSB1c2VDYWxsYmFjazxSZW5kZXJEb2N1bWVudFNlcnZlckZ1bmN0aW9uSG9va0ZuPihcbiAgICBhc3luYyAoYXJncykgPT4ge1xuICAgICAgY29uc3QgeyBzaWduYWw6IHJlbW90ZVNpZ25hbCwgLi4ucmVzdCB9ID0gYXJncyB8fCB7fVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHNlcnZlckZ1bmN0aW9uKHtcbiAgICAgICAgICBuYW1lOiAncmVuZGVyLWRvY3VtZW50JyxcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBmYWxsYmFja0xvY2FsZTogZmFsc2UsXG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgIH0gYXMgUGFyYW1ldGVyczxSZW5kZXJEb2N1bWVudFNlcnZlckZ1bmN0aW9uSG9va0ZuPlswXSxcbiAgICAgICAgfSkpIGFzIEF3YWl0ZWQ8UmV0dXJuVHlwZTxSZW5kZXJEb2N1bWVudFNlcnZlckZ1bmN0aW9uSG9va0ZuPj4gLy8gVE9ETzogaW5mZXIgdGhpcyB0eXBlIHdoZW4gYHN0cmljdE51bGxDaGVja3NgIGlzIGVuYWJsZWRcblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoX2VycikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICB9XG4gICAgfSxcbiAgICBbc2VydmVyRnVuY3Rpb25dLFxuICApXG5cbiAgY29uc3QgY29weURhdGFGcm9tTG9jYWxlID0gdXNlQ2FsbGJhY2s8Q29weURhdGFGcm9tTG9jYWxlQ2xpZW50PihcbiAgICBhc3luYyAoYXJncykgPT4ge1xuICAgICAgY29uc3QgeyBzaWduYWw6IHJlbW90ZVNpZ25hbCwgLi4ucmVzdCB9ID0gYXJncyB8fCB7fVxuXG4gICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgc2VydmVyRnVuY3Rpb24oe1xuICAgICAgICBuYW1lOiAnY29weS1kYXRhLWZyb20tbG9jYWxlJyxcbiAgICAgICAgYXJnczogcmVzdCxcbiAgICAgIH0pKSBhcyBEYXRhXG5cbiAgICAgIGlmICghcmVtb3RlU2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHJlc3VsdCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2VydmVyRnVuY3Rpb25dLFxuICApXG5cbiAgY29uc3QgZ2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudEFuZERhdGEgPSB1c2VDYWxsYmFjazxHZXRGb2xkZXJSZXN1bHRzQ29tcG9uZW50QW5kRGF0YUNsaWVudD4oXG4gICAgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHsgc2lnbmFsOiByZW1vdGVTaWduYWwsIC4uLnJlc3QgfSA9IGFyZ3MgfHwge31cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHNlcnZlckZ1bmN0aW9uKHtcbiAgICAgICAgICBuYW1lOiAnZ2V0LWZvbGRlci1yZXN1bHRzLWNvbXBvbmVudC1hbmQtZGF0YScsXG4gICAgICAgICAgYXJnczogcmVzdCxcbiAgICAgICAgfSkpIGFzIEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZ2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudEFuZERhdGFIYW5kbGVyPj5cblxuICAgICAgICBpZiAoIXJlbW90ZVNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKF9lcnIpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlcnZlckZ1bmN0aW9uXSxcbiAgKVxuXG4gIGNvbnN0IF9pbnRlcm5hbF9yZW5kZXJGaWVsZCA9IHVzZUNhbGxiYWNrPFJlbmRlckZpZWxkQ2xpZW50PihcbiAgICBhc3luYyAoYXJncykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHNlcnZlckZ1bmN0aW9uKHtcbiAgICAgICAgICBuYW1lOiAncmVuZGVyLWZpZWxkJyxcbiAgICAgICAgICBhcmdzLFxuICAgICAgICB9KSkgYXMgUmVuZGVyRmllbGRTZXJ2ZXJGblJldHVyblR5cGVcblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoX2VycikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICB9XG4gICAgfSxcbiAgICBbc2VydmVyRnVuY3Rpb25dLFxuICApXG5cbiAgY29uc3Qgc2x1Z2lmeSA9IHVzZUNhbGxiYWNrPFNsdWdpZnlDbGllbnQ+KFxuICAgIGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICBjb25zdCB7IHNpZ25hbDogcmVtb3RlU2lnbmFsLCAuLi5yZXN0IH0gPSBhcmdzIHx8IHt9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBzZXJ2ZXJGdW5jdGlvbih7XG4gICAgICAgICAgbmFtZTogJ3NsdWdpZnknLFxuICAgICAgICAgIGFyZ3M6IHsgLi4ucmVzdCB9LFxuICAgICAgICB9KSkgYXMgQXdhaXRlZDxSZXR1cm5UeXBlPFNsdWdpZnk+PiAvLyBUT0RPOiBpbmZlciB0aGlzIHR5cGUgd2hlbiBgc3RyaWN0TnVsbENoZWNrc2AgaXMgZW5hYmxlZFxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihfZXJyKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXJ2ZXJGdW5jdGlvbl0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTZXJ2ZXJGdW5jdGlvbnNDb250ZXh0XG4gICAgICB2YWx1ZT17e1xuICAgICAgICBfaW50ZXJuYWxfcmVuZGVyRmllbGQsXG4gICAgICAgIGNvcHlEYXRhRnJvbUxvY2FsZSxcbiAgICAgICAgZ2V0RG9jdW1lbnRTbG90cyxcbiAgICAgICAgZ2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudEFuZERhdGEsXG4gICAgICAgIGdldEZvcm1TdGF0ZSxcbiAgICAgICAgZ2V0VGFibGVTdGF0ZSxcbiAgICAgICAgcmVuZGVyRG9jdW1lbnQsXG4gICAgICAgIHNjaGVkdWxlUHVibGlzaCxcbiAgICAgICAgc2VydmVyRnVuY3Rpb24sXG4gICAgICAgIHNsdWdpZnksXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NlcnZlckZ1bmN0aW9uc0NvbnRleHQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgdHlwZSBDb2x1bW4gfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHsgdHJhbnNmb3JtQ29sdW1uc1RvU2VhcmNoUGFyYW1zIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgc3RhcnRUcmFuc2l0aW9uLCB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgSVRhYmxlQ29sdW1ucywgVGFibGVDb2x1bW5zUHJvdmlkZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2luZGV4LmpzJ1xuaW1wb3J0IHsgVGFibGVDb2x1bW5Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0LmpzJ1xuXG5leHBvcnQgeyB1c2VUYWJsZUNvbHVtbnMgfSBmcm9tICcuL2NvbnRleHQuanMnXG5cbmV4cG9ydCBjb25zdCBUYWJsZUNvbHVtbnNQcm92aWRlcjogUmVhY3QuRkM8VGFibGVDb2x1bW5zUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgY29sbGVjdGlvblNsdWcsXG4gIGNvbHVtblN0YXRlOiBjb2x1bW5TdGF0ZUZyb21Qcm9wcyxcbiAgTGlua2VkQ2VsbE92ZXJyaWRlLFxufSkgPT4ge1xuICBjb25zdCB7IGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBxdWVyeTogY3VycmVudFF1ZXJ5LCByZWZpbmVMaXN0RGF0YSB9ID0gdXNlTGlzdFF1ZXJ5KClcblxuICBjb25zdCB7IGFkbWluOiB7IGRlZmF1bHRDb2x1bW5zIH0gPSB7fSB9ID0gZ2V0RW50aXR5Q29uZmlnKHtcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgfSlcblxuICBjb25zdCBbY29sdW1uU3RhdGUsIHNldE9wdGltaXN0aWNDb2x1bW5TdGF0ZV0gPSBSZWFjdC51c2VPcHRpbWlzdGljKFxuICAgIGNvbHVtblN0YXRlRnJvbVByb3BzLFxuICAgIChzdGF0ZSwgYWN0aW9uOiBDb2x1bW5bXSkgPT4gYWN0aW9uLFxuICApXG5cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7fSBhcyBJVGFibGVDb2x1bW5zKVxuXG4gIGNvbnN0IHRvZ2dsZUNvbHVtbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChjb2x1bW46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmV3Q29sdW1uU3RhdGUgPSAoY29sdW1uU3RhdGUgfHwgW10pLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wuYWNjZXNzb3IgPT09IGNvbHVtbikge1xuICAgICAgICAgIHJldHVybiB7IC4uLmNvbCwgYWN0aXZlOiAhY29sLmFjdGl2ZSB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbFxuICAgICAgfSlcblxuICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgICAgc2V0T3B0aW1pc3RpY0NvbHVtblN0YXRlKG5ld0NvbHVtblN0YXRlKVxuICAgICAgfSlcblxuICAgICAgYXdhaXQgcmVmaW5lTGlzdERhdGEoe1xuICAgICAgICBjb2x1bW5zOiB0cmFuc2Zvcm1Db2x1bW5zVG9TZWFyY2hQYXJhbXMobmV3Q29sdW1uU3RhdGUpLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtyZWZpbmVMaXN0RGF0YSwgY29sdW1uU3RhdGUsIHNldE9wdGltaXN0aWNDb2x1bW5TdGF0ZV0sXG4gIClcblxuICBjb25zdCBtb3ZlQ29sdW1uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGFyZ3M6IHsgZnJvbUluZGV4OiBudW1iZXI7IHRvSW5kZXg6IG51bWJlciB9KSA9PiB7XG4gICAgICBjb25zdCB7IGZyb21JbmRleCwgdG9JbmRleCB9ID0gYXJnc1xuICAgICAgY29uc3QgbmV3Q29sdW1uU3RhdGUgPSBbLi4uKGNvbHVtblN0YXRlIHx8IFtdKV1cbiAgICAgIGNvbnN0IFtjb2x1bW5Ub01vdmVdID0gbmV3Q29sdW1uU3RhdGUuc3BsaWNlKGZyb21JbmRleCwgMSlcbiAgICAgIG5ld0NvbHVtblN0YXRlLnNwbGljZSh0b0luZGV4LCAwLCBjb2x1bW5Ub01vdmUpXG5cbiAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgIHNldE9wdGltaXN0aWNDb2x1bW5TdGF0ZShuZXdDb2x1bW5TdGF0ZSlcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHJlZmluZUxpc3REYXRhKHtcbiAgICAgICAgY29sdW1uczogdHJhbnNmb3JtQ29sdW1uc1RvU2VhcmNoUGFyYW1zKG5ld0NvbHVtblN0YXRlKSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbY29sdW1uU3RhdGUsIHJlZmluZUxpc3REYXRhLCBzZXRPcHRpbWlzdGljQ29sdW1uU3RhdGVdLFxuICApXG5cbiAgY29uc3Qgc2V0QWN0aXZlQ29sdW1ucyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChjb2x1bW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgbmV3Q29sdW1uU3RhdGUgPSBjdXJyZW50UXVlcnkuY29sdW1uc1xuXG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbE5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBuZXdDb2x1bW5TdGF0ZS5maW5kSW5kZXgoKGMpID0+IGNvbE5hbWUgPT09IGMpXG5cbiAgICAgICAgLy8gZW5zdXJlIHRoZSBuYW1lIGRvZXMgbm90IGJlZ2luIHdpdGggYSBgLWAgd2hpY2ggZGVub3RlcyBhbiBpbmFjdGl2ZSBjb2x1bW5cbiAgICAgICAgaWYgKGNvbEluZGV4ICE9PSB1bmRlZmluZWQgJiYgbmV3Q29sdW1uU3RhdGVbY29sSW5kZXhdWzBdID09PSAnLScpIHtcbiAgICAgICAgICBuZXdDb2x1bW5TdGF0ZVtjb2xJbmRleF0gPSBjb2xOYW1lLnNsaWNlKDEpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHJlZmluZUxpc3REYXRhKHsgY29sdW1uczogbmV3Q29sdW1uU3RhdGUgfSlcbiAgICB9LFxuICAgIFtjdXJyZW50UXVlcnksIHJlZmluZUxpc3REYXRhXSxcbiAgKVxuXG4gIGNvbnN0IHJlc2V0Q29sdW1uc1N0YXRlID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlZmluZUxpc3REYXRhKHsgY29sdW1uczogZGVmYXVsdENvbHVtbnMgfHwgW10gfSlcbiAgfSwgW2RlZmF1bHRDb2x1bW5zLCByZWZpbmVMaXN0RGF0YV0pXG5cbiAgcmV0dXJuIChcbiAgICA8VGFibGVDb2x1bW5Db250ZXh0XG4gICAgICB2YWx1ZT17e1xuICAgICAgICBjb2x1bW5zOiBjb2x1bW5TdGF0ZSxcbiAgICAgICAgTGlua2VkQ2VsbE92ZXJyaWRlLFxuICAgICAgICBtb3ZlQ29sdW1uLFxuICAgICAgICByZXNldENvbHVtbnNTdGF0ZSxcbiAgICAgICAgc2V0QWN0aXZlQ29sdW1ucyxcbiAgICAgICAgdG9nZ2xlQ29sdW1uLFxuICAgICAgICAuLi5jb250ZXh0UmVmLmN1cnJlbnQsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1RhYmxlQ29sdW1uQ29udGV4dD5cbiAgKVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgSVRhYmxlQ29sdW1ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBUYWJsZUNvbHVtbkNvbnRleHQgPSBjcmVhdGVDb250ZXh0PElUYWJsZUNvbHVtbnM+KHt9IGFzIElUYWJsZUNvbHVtbnMpXG5cbmV4cG9ydCBjb25zdCB1c2VUYWJsZUNvbHVtbnMgPSAoKTogSVRhYmxlQ29sdW1ucyA9PiB1c2UoVGFibGVDb2x1bW5Db250ZXh0KVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcsIFN0YXRpY0xhYmVsIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZmllbGRJc0hpZGRlbk9yRGlzYWJsZWQsIGZpZWxkSXNJRCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUlkLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi9maWVsZHMvRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUVkaXREZXB0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9FZGl0RGVwdGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUYWJsZUNvbHVtbnMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVGFibGVDb2x1bW5zL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGlsbFNlbGVjdG9yLCB0eXBlIFNlbGVjdGFibGVQaWxsIH0gZnJvbSAnLi4vUGlsbFNlbGVjdG9yL2luZGV4LmpzJ1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgY29sbGVjdGlvblNsdWc6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ3NsdWcnXVxufVxuXG5leHBvcnQgY29uc3QgQ29sdW1uU2VsZWN0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IGNvbGxlY3Rpb25TbHVnIH0pID0+IHtcbiAgY29uc3QgeyBjb2x1bW5zLCBtb3ZlQ29sdW1uLCB0b2dnbGVDb2x1bW4gfSA9IHVzZVRhYmxlQ29sdW1ucygpXG5cbiAgY29uc3QgdXVpZCA9IHVzZUlkKClcbiAgY29uc3QgZWRpdERlcHRoID0gdXNlRWRpdERlcHRoKClcblxuICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBjb2x1bW5zPy5maWx0ZXIoXG4gICAgICAgIChjb2wpID0+XG4gICAgICAgICAgIShmaWVsZElzSGlkZGVuT3JEaXNhYmxlZChjb2wuZmllbGQpICYmICFmaWVsZElzSUQoY29sLmZpZWxkKSkgJiZcbiAgICAgICAgICAhY29sPy5maWVsZD8uYWRtaW4/LmRpc2FibGVMaXN0Q29sdW1uLFxuICAgICAgKSxcbiAgICBbY29sdW1uc10sXG4gIClcblxuICBjb25zdCBwaWxsczogU2VsZWN0YWJsZVBpbGxbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBmaWx0ZXJlZENvbHVtbnNcbiAgICAgID8gZmlsdGVyZWRDb2x1bW5zLm1hcCgoY29sLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhY2Nlc3NvciwgYWN0aXZlLCBmaWVsZCB9ID0gY29sXG5cbiAgICAgICAgICBjb25zdCBsYWJlbCA9XG4gICAgICAgICAgICAnbGFiZWxXaXRoUHJlZml4JyBpbiBmaWVsZCAmJiBmaWVsZC5sYWJlbFdpdGhQcmVmaXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IGZpZWxkLmxhYmVsV2l0aFByZWZpeFxuICAgICAgICAgICAgICA6ICdsYWJlbCcgaW4gZmllbGQgJiYgZmllbGQubGFiZWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICA6ICduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8gZmllbGQubmFtZVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhY2Nlc3NvcixcbiAgICAgICAgICAgIGtleTogYCR7Y29sbGVjdGlvblNsdWd9LSR7YWNjZXNzb3J9LSR7aX0ke2VkaXREZXB0aCA/IGAtJHtlZGl0RGVwdGh9LWAgOiAnJ30ke3V1aWR9YCxcbiAgICAgICAgICAgIExhYmVsOiA8RmllbGRMYWJlbCBsYWJlbD17bGFiZWwgYXMgU3RhdGljTGFiZWx9IHVuc3R5bGVkIC8+LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGFjdGl2ZSxcbiAgICAgICAgICB9IGFzIFNlbGVjdGFibGVQaWxsXG4gICAgICAgIH0pXG4gICAgICA6IG51bGxcbiAgfSwgW2NvbGxlY3Rpb25TbHVnLCBlZGl0RGVwdGgsIGZpbHRlcmVkQ29sdW1ucywgdXVpZF0pXG5cbiAgaWYgKCFwaWxscykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQaWxsU2VsZWN0b3JcbiAgICAgIGRyYWdnYWJsZT17e1xuICAgICAgICBvbkRyYWdFbmQ6ICh7IG1vdmVGcm9tSW5kZXgsIG1vdmVUb0luZGV4IH0pID0+IHtcbiAgICAgICAgICB2b2lkIG1vdmVDb2x1bW4oe1xuICAgICAgICAgICAgZnJvbUluZGV4OiBtb3ZlRnJvbUluZGV4LFxuICAgICAgICAgICAgdG9JbmRleDogbW92ZVRvSW5kZXgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBvbkNsaWNrPXsoeyBwaWxsIH0pID0+IHtcbiAgICAgICAgdm9pZCB0b2dnbGVDb2x1bW4ocGlsbC5uYW1lKVxuICAgICAgfX1cbiAgICAgIHBpbGxzPXtwaWxsc31cbiAgICAvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBQbHVzSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1BsdXMvaW5kZXguanMnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyBEcmFnZ2FibGVTb3J0YWJsZSB9IGZyb20gJy4uL0RyYWdnYWJsZVNvcnRhYmxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGlsbCB9IGZyb20gJy4uL1BpbGwvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3BpbGwtc2VsZWN0b3InXG5cbmV4cG9ydCB0eXBlIFNlbGVjdGFibGVQaWxsID0ge1xuICBrZXk/OiBzdHJpbmdcbiAgTGFiZWw/OiBSZWFjdC5SZWFjdE5vZGVcbiAgbmFtZTogc3RyaW5nXG4gIHNlbGVjdGVkOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICBkcmFnZ2FibGU/OiB7XG4gICAgb25EcmFnRW5kOiAoYXJnczogeyBtb3ZlRnJvbUluZGV4OiBudW1iZXI7IG1vdmVUb0luZGV4OiBudW1iZXIgfSkgPT4gdm9pZFxuICB9XG4gIG9uQ2xpY2s/OiAoYXJnczogeyBwaWxsOiBTZWxlY3RhYmxlUGlsbCB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICBwaWxsczogU2VsZWN0YWJsZVBpbGxbXVxufVxuXG4vKipcbiAqIERpc3BsYXlzIGEgd3JhcHBhYmxlIGxpc3Qgb2YgcGlsbHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgb3IgZGVzZWxlY3RlZC5cbiAqIElmIGBkcmFnZ2FibGVgIGlzIHRydWUsIHRoZSBwaWxscyBjYW4gYmUgcmVvcmRlcmVkIGJ5IGRyYWdnaW5nLlxuICovXG5leHBvcnQgY29uc3QgUGlsbFNlbGVjdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyBkcmFnZ2FibGUsIG9uQ2xpY2ssIHBpbGxzIH0pID0+IHtcbiAgLy8gSU1QT1JUQU5UOiBEbyBOT1Qgd3JhcCBEcmFnZ2FibGVTb3J0YWJsZSBpbiBhIGR5bmFtaWMgY29tcG9uZW50IGZ1bmN0aW9uIHVzaW5nIHVzZU1lbW8uXG4gIC8vIEJBRDogdXNlTWVtbygoKSA9PiAoeyBjaGlsZHJlbiB9KSA9PiA8RHJhZ2dhYmxlU29ydGFibGU+Li4uPC9EcmFnZ2FibGVTb3J0YWJsZT4sIFtkZXBzXSlcbiAgLy8gVGhpcyBjcmVhdGVzIGEgbmV3IGZ1bmN0aW9uIHJlZmVyZW5jZSBvbiBlYWNoIHJlY29tcHV0YXRpb24sIGNhdXNpbmcgUmVhY3QgdG8gdHJlYXQgaXQgYXMgYVxuICAvLyBkaWZmZXJlbnQgY29tcG9uZW50IHR5cGUsIHRyaWdnZXJpbmcgdW5tb3VudC9tb3VudCBjeWNsZXMgaW5zdGVhZCBvZiBqdXN0IHVwZGF0aW5nIHByb3BzLlxuICAvLyBHT09EOiBVc2UgY29uZGl0aW9uYWwgcmVuZGVyaW5nIGRpcmVjdGx5OiBkcmFnZ2FibGUgPyA8RHJhZ2dhYmxlU29ydGFibGUgLz4gOiA8ZGl2IC8+XG4gIGNvbnN0IHBpbGxFbGVtZW50cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBwaWxscy5tYXAoKHBpbGwsIGkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQaWxsXG4gICAgICAgICAgYWxpZ25JY29uPVwibGVmdFwiXG4gICAgICAgICAgYXJpYS1jaGVja2VkPXtwaWxsLnNlbGVjdGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31fX3BpbGxgLCBwaWxsLnNlbGVjdGVkICYmIGAke2Jhc2VDbGFzc31fX3BpbGwtLXNlbGVjdGVkYF1cbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgZHJhZ2dhYmxlPXtCb29sZWFuKGRyYWdnYWJsZSl9XG4gICAgICAgICAgaWNvbj17cGlsbC5zZWxlY3RlZCA/IDxYSWNvbiAvPiA6IDxQbHVzSWNvbiAvPn1cbiAgICAgICAgICBpZD17cGlsbC5uYW1lfVxuICAgICAgICAgIGtleT17cGlsbC5rZXkgPz8gYCR7cGlsbC5uYW1lfS0ke2l9YH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgICAgICB2b2lkIG9uQ2xpY2soeyBwaWxsIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAge3BpbGwuTGFiZWwgPz8gPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19waWxsLWxhYmVsYH0+e3BpbGwubmFtZX08L3NwYW4+fVxuICAgICAgICA8L1BpbGw+XG4gICAgICApXG4gICAgfSlcbiAgfSwgW3BpbGxzLCBvbkNsaWNrLCBkcmFnZ2FibGVdKVxuXG4gIGlmIChkcmFnZ2FibGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPERyYWdnYWJsZVNvcnRhYmxlXG4gICAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgICBpZHM9e3BpbGxzLm1hcCgocGlsbCkgPT4gcGlsbC5uYW1lKX1cbiAgICAgICAgb25EcmFnRW5kPXsoeyBtb3ZlRnJvbUluZGV4LCBtb3ZlVG9JbmRleCB9KSA9PiB7XG4gICAgICAgICAgZHJhZ2dhYmxlLm9uRHJhZ0VuZCh7XG4gICAgICAgICAgICBtb3ZlRnJvbUluZGV4LFxuICAgICAgICAgICAgbW92ZVRvSW5kZXgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3BpbGxFbGVtZW50c31cbiAgICAgIDwvRHJhZ2dhYmxlU29ydGFibGU+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PntwaWxsRWxlbWVudHN9PC9kaXY+XG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUlkLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7XG4gIERvY3VtZW50RHJhd2VyUHJvcHMsXG4gIERvY3VtZW50VG9nZ2xlclByb3BzLFxuICBVc2VEb2N1bWVudERyYXdlcixcbiAgVXNlRG9jdW1lbnREcmF3ZXJDb250ZXh0LFxufSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VSZWxhdGVkQ29sbGVjdGlvbnMgfSBmcm9tICcuLi8uLi9ob29rcy91c2VSZWxhdGVkQ29sbGVjdGlvbnMuanMnXG5pbXBvcnQgeyB1c2VFZGl0RGVwdGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRWRpdERlcHRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBEcmF3ZXIsIERyYXdlclRvZ2dsZXIgfSBmcm9tICcuLi9EcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBEb2N1bWVudERyYXdlckNvbnRlbnQgfSBmcm9tICcuL0RyYXdlckNvbnRlbnQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IGRvY3VtZW50RHJhd2VyQmFzZUNsYXNzID0gJ2RvYy1kcmF3ZXInXG5cbmNvbnN0IGZvcm1hdERvY3VtZW50RHJhd2VyU2x1ZyA9ICh7XG4gIGlkLFxuICBjb2xsZWN0aW9uU2x1ZyxcbiAgZGVwdGgsXG4gIHV1aWQsXG59OiB7XG4gIGNvbGxlY3Rpb25TbHVnOiBzdHJpbmdcbiAgZGVwdGg6IG51bWJlclxuICBpZD86IG51bWJlciB8IHN0cmluZ1xuICB1dWlkOiBzdHJpbmdcbn0pID0+IGBkb2MtZHJhd2VyXyR7Y29sbGVjdGlvblNsdWd9XyR7ZGVwdGh9JHtpZCA/IGBfJHtpZH1gIDogJyd9XyR7dXVpZH1gXG5cbmV4cG9ydCBjb25zdCBEb2N1bWVudERyYXdlclRvZ2dsZXI6IFJlYWN0LkZDPERvY3VtZW50VG9nZ2xlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNvbGxlY3Rpb25TbHVnLFxuICBkaXNhYmxlZCxcbiAgZHJhd2VyU2x1ZyxcbiAgb25DbGljayxcbiAgb3BlcmF0aW9uLFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBbY29sbGVjdGlvbkNvbmZpZ10gPSB1c2VSZWxhdGVkQ29sbGVjdGlvbnMoY29sbGVjdGlvblNsdWcpXG5cbiAgcmV0dXJuIChcbiAgICA8RHJhd2VyVG9nZ2xlclxuICAgICAgYXJpYS1sYWJlbD17dChvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ2ZpZWxkczphZGROZXdMYWJlbCcgOiAnZ2VuZXJhbDplZGl0TGFiZWwnLCB7XG4gICAgICAgIGxhYmVsOiBjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHMuc2luZ3VsYXIsXG4gICAgICB9KX1cbiAgICAgIGNsYXNzTmFtZT17W2NsYXNzTmFtZSwgYCR7ZG9jdW1lbnREcmF3ZXJCYXNlQ2xhc3N9X190b2dnbGVyYF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBzbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvRHJhd2VyVG9nZ2xlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgRG9jdW1lbnREcmF3ZXI6IFJlYWN0LkZDPERvY3VtZW50RHJhd2VyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZHJhd2VyU2x1ZyB9ID0gcHJvcHNcblxuICByZXR1cm4gKFxuICAgIDxEcmF3ZXIgY2xhc3NOYW1lPXtkb2N1bWVudERyYXdlckJhc2VDbGFzc30gZ3V0dGVyPXtmYWxzZX0gSGVhZGVyPXtudWxsfSBzbHVnPXtkcmF3ZXJTbHVnfT5cbiAgICAgIDxEb2N1bWVudERyYXdlckNvbnRlbnQgey4uLnByb3BzfSAvPlxuICAgIDwvRHJhd2VyPlxuICApXG59XG5cbi8qKlxuICogQSBob29rIHRvIG1hbmFnZSBkb2N1bWVudHMgZnJvbSBhIGRyYXdlciBtb2RhbC5cbiAqIEl0IHByb3ZpZGVzIHRoZSBjb21wb25lbnRzIGFuZCBtZXRob2RzIG5lZWRlZCB0byBvcGVuLCBjbG9zZSwgYW5kIGludGVyYWN0IHdpdGggdGhlIGRyYXdlci5cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBbRG9jdW1lbnREcmF3ZXIsIERvY3VtZW50RHJhd2VyVG9nZ2xlciwgeyBvcGVuRHJhd2VyLCBjbG9zZURyYXdlciB9XSA9IHVzZURvY3VtZW50RHJhd2VyKHtcbiAqICAgY29sbGVjdGlvblNsdWc6ICdwb3N0cycsXG4gKiAgIGlkOiBwb3N0SWQsIC8vIG9wdGlvbmFsLCBpZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgcmVuZGVyIHRoZSBcImNyZWF0ZSBuZXdcIiB2aWV3XG4gKiB9KVxuICpcbiAqIC8vIC4uLlxuICpcbiAqIHJldHVybiAoXG4gKiAgIDxkaXY+XG4gKiAgICAgPERvY3VtZW50RHJhd2VyVG9nZ2xlciBjb2xsZWN0aW9uU2x1Zz1cInBvc3RzXCIgaWQ9e3Bvc3RJZH0+XG4gKiAgICAgICBFZGl0IFBvc3RcbiAqICAgIDwvRG9jdW1lbnREcmF3ZXJUb2dnbGVyPlxuICogICAgPERvY3VtZW50RHJhd2VyIGNvbGxlY3Rpb25TbHVnPVwicG9zdHNcIiBpZD17cG9zdElkfSAvPlxuICogIDwvZGl2PlxuICovXG5leHBvcnQgY29uc3QgdXNlRG9jdW1lbnREcmF3ZXI6IFVzZURvY3VtZW50RHJhd2VyID0gKHtcbiAgaWQsXG4gIGNvbGxlY3Rpb25TbHVnLFxuICBvdmVycmlkZUVudGl0eVZpc2liaWxpdHksXG59KSA9PiB7XG4gIGNvbnN0IGVkaXREZXB0aCA9IHVzZUVkaXREZXB0aCgpXG4gIGNvbnN0IHV1aWQgPSB1c2VJZCgpXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgbW9kYWxTdGF0ZSwgb3Blbk1vZGFsLCB0b2dnbGVNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgZHJhd2VyU2x1ZyA9IGZvcm1hdERvY3VtZW50RHJhd2VyU2x1Zyh7XG4gICAgaWQsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZGVwdGg6IGVkaXREZXB0aCxcbiAgICB1dWlkLFxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SXNPcGVuKEJvb2xlYW4obW9kYWxTdGF0ZVtkcmF3ZXJTbHVnXT8uaXNPcGVuKSlcbiAgfSwgW21vZGFsU3RhdGUsIGRyYXdlclNsdWddKVxuXG4gIGNvbnN0IHRvZ2dsZURyYXdlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVNb2RhbChkcmF3ZXJTbHVnKVxuICB9LCBbdG9nZ2xlTW9kYWwsIGRyYXdlclNsdWddKVxuXG4gIGNvbnN0IGNsb3NlRHJhd2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwoZHJhd2VyU2x1ZylcbiAgfSwgW2Nsb3NlTW9kYWwsIGRyYXdlclNsdWddKVxuXG4gIGNvbnN0IG9wZW5EcmF3ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb3Blbk1vZGFsKGRyYXdlclNsdWcpXG4gIH0sIFtvcGVuTW9kYWwsIGRyYXdlclNsdWddKVxuXG4gIGNvbnN0IE1lbW9pemVkRHJhd2VyID0gdXNlTWVtbzxSZWFjdC5GQzxEb2N1bWVudERyYXdlclByb3BzPj4oKCkgPT4ge1xuICAgIHJldHVybiAocHJvcHMpID0+IChcbiAgICAgIDxEb2N1bWVudERyYXdlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgZHJhd2VyU2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBrZXk9e2RyYXdlclNsdWd9XG4gICAgICAgIG92ZXJyaWRlRW50aXR5VmlzaWJpbGl0eT17b3ZlcnJpZGVFbnRpdHlWaXNpYmlsaXR5fVxuICAgICAgLz5cbiAgICApXG4gIH0sIFtpZCwgZHJhd2VyU2x1ZywgY29sbGVjdGlvblNsdWcsIG92ZXJyaWRlRW50aXR5VmlzaWJpbGl0eV0pXG5cbiAgY29uc3QgTWVtb2l6ZWREcmF3ZXJUb2dnbGVyID0gdXNlTWVtbzxSZWFjdC5GQzxEb2N1bWVudFRvZ2dsZXJQcm9wcz4+KCgpID0+IHtcbiAgICByZXR1cm4gKHByb3BzKSA9PiAoXG4gICAgICA8RG9jdW1lbnREcmF3ZXJUb2dnbGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25TbHVnfVxuICAgICAgICBkcmF3ZXJTbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgICBvcGVyYXRpb249eyFpZCA/ICdjcmVhdGUnIDogJ3VwZGF0ZSd9XG4gICAgICAvPlxuICAgIClcbiAgfSwgW2lkLCBkcmF3ZXJTbHVnLCBjb2xsZWN0aW9uU2x1Z10pXG5cbiAgY29uc3QgTWVtb2l6ZWREcmF3ZXJTdGF0ZSA9IHVzZU1lbW88VXNlRG9jdW1lbnREcmF3ZXJDb250ZXh0PihcbiAgICAoKSA9PiAoe1xuICAgICAgY2xvc2VEcmF3ZXIsXG4gICAgICBkcmF3ZXJEZXB0aDogZWRpdERlcHRoLFxuICAgICAgZHJhd2VyU2x1ZyxcbiAgICAgIGlzRHJhd2VyT3BlbjogaXNPcGVuLFxuICAgICAgb3BlbkRyYXdlcixcbiAgICAgIHRvZ2dsZURyYXdlcixcbiAgICB9KSxcbiAgICBbZWRpdERlcHRoLCBkcmF3ZXJTbHVnLCBpc09wZW4sIHRvZ2dsZURyYXdlciwgY2xvc2VEcmF3ZXIsIG9wZW5EcmF3ZXJdLFxuICApXG5cbiAgcmV0dXJuIFtNZW1vaXplZERyYXdlciwgTWVtb2l6ZWREcmF3ZXJUb2dnbGVyLCBNZW1vaXplZERyYXdlclN0YXRlXVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuXG4vKipcbiAqIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcgY2xpZW50IGNvbGxlY3Rpb24gY29uZmlnKHMpIGZvciB0aGUgZ2l2ZW4gY29sbGVjdGlvbiBzbHVnLlxuICovXG5leHBvcnQgY29uc3QgdXNlUmVsYXRlZENvbGxlY3Rpb25zID0gKHJlbGF0aW9uVG86IHN0cmluZyB8IHN0cmluZ1tdKTogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgeyBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgW3JlbGF0ZWRDb2xsZWN0aW9uc10gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgaWYgKHJlbGF0aW9uVG8pIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9ucyA9IHR5cGVvZiByZWxhdGlvblRvID09PSAnc3RyaW5nJyA/IFtyZWxhdGlvblRvXSA6IHJlbGF0aW9uVG9cbiAgICAgIHJldHVybiByZWxhdGlvbnMubWFwKChyZWxhdGlvbikgPT4gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWc6IHJlbGF0aW9uIH0pKVxuICAgIH1cbiAgICByZXR1cm4gW11cbiAgfSlcblxuICByZXR1cm4gcmVsYXRlZENvbGxlY3Rpb25zXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB0eXBlIHsgRG9jdW1lbnREcmF3ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IExvYWRpbmdPdmVybGF5IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTG9hZGluZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VTZXJ2ZXJGdW5jdGlvbnMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VydmVyRnVuY3Rpb25zL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBhYm9ydEFuZElnbm9yZSwgaGFuZGxlQWJvcnRSZWYgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvYWJvcnRBbmRJZ25vcmUuanMnXG5pbXBvcnQgeyBEb2N1bWVudERyYXdlckNvbnRleHRQcm92aWRlciB9IGZyb20gJy4vUHJvdmlkZXIuanMnXG5cbmV4cG9ydCBjb25zdCBEb2N1bWVudERyYXdlckNvbnRlbnQ6IFJlYWN0LkZDPERvY3VtZW50RHJhd2VyUHJvcHM+ID0gKHtcbiAgaWQ6IGRvY0lELFxuICBjb2xsZWN0aW9uU2x1ZyxcbiAgZGlzYWJsZUFjdGlvbnMsXG4gIGRyYXdlclNsdWcsXG4gIGluaXRpYWxEYXRhLFxuICBvbkRlbGV0ZTogb25EZWxldGVGcm9tUHJvcHMsXG4gIG9uRHVwbGljYXRlOiBvbkR1cGxpY2F0ZUZyb21Qcm9wcyxcbiAgb25TYXZlOiBvblNhdmVGcm9tUHJvcHMsXG4gIG92ZXJyaWRlRW50aXR5VmlzaWJpbGl0eSA9IHRydWUsXG4gIHJlZGlyZWN0QWZ0ZXJDcmVhdGUsXG4gIHJlZGlyZWN0QWZ0ZXJEZWxldGUsXG4gIHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGUsXG4gIHJlZGlyZWN0QWZ0ZXJSZXN0b3JlLFxufSkgPT4ge1xuICBjb25zdCB7IGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBbY29sbGVjdGlvbkNvbmZpZ10gPSB1c2VTdGF0ZSgoKSA9PiBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KSlcblxuICBjb25zdCBhYm9ydEdldERvY3VtZW50Vmlld1JlZiA9IFJlYWN0LnVzZVJlZjxBYm9ydENvbnRyb2xsZXI+KG51bGwpXG5cbiAgY29uc3QgeyBjbG9zZU1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHsgcmVuZGVyRG9jdW1lbnQgfSA9IHVzZVNlcnZlckZ1bmN0aW9ucygpXG5cbiAgY29uc3QgW0RvY3VtZW50Vmlldywgc2V0RG9jdW1lbnRWaWV3XSA9IHVzZVN0YXRlPFJlYWN0LlJlYWN0Tm9kZT4odW5kZWZpbmVkKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcblxuICBjb25zdCBoYXNJbml0aWFsaXplZCA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBnZXREb2N1bWVudFZpZXcgPSB1c2VDYWxsYmFjayhcbiAgICAoZG9jSUQ/OiBEb2N1bWVudERyYXdlclByb3BzWydpZCddLCBzaG93TG9hZGluZ0luZGljYXRvcjogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gaGFuZGxlQWJvcnRSZWYoYWJvcnRHZXREb2N1bWVudFZpZXdSZWYpXG5cbiAgICAgIGNvbnN0IGZldGNoRG9jdW1lbnRWaWV3ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoc2hvd0xvYWRpbmdJbmRpY2F0b3IpIHtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVuZGVyRG9jdW1lbnQoe1xuICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICBkaXNhYmxlQWN0aW9ucyxcbiAgICAgICAgICAgIGRvY0lELFxuICAgICAgICAgICAgZHJhd2VyU2x1ZyxcbiAgICAgICAgICAgIGluaXRpYWxEYXRhLFxuICAgICAgICAgICAgb3ZlcnJpZGVFbnRpdHlWaXNpYmlsaXR5LFxuICAgICAgICAgICAgcmVkaXJlY3RBZnRlckNyZWF0ZSxcbiAgICAgICAgICAgIHJlZGlyZWN0QWZ0ZXJEZWxldGU6IHJlZGlyZWN0QWZ0ZXJEZWxldGUgIT09IHVuZGVmaW5lZCA/IHJlZGlyZWN0QWZ0ZXJEZWxldGUgOiBmYWxzZSxcbiAgICAgICAgICAgIHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGU6XG4gICAgICAgICAgICAgIHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGUgIT09IHVuZGVmaW5lZCA/IHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGUgOiBmYWxzZSxcbiAgICAgICAgICAgIHJlZGlyZWN0QWZ0ZXJSZXN0b3JlOiByZWRpcmVjdEFmdGVyUmVzdG9yZSAhPT0gdW5kZWZpbmVkID8gcmVkaXJlY3RBZnRlclJlc3RvcmUgOiBmYWxzZSxcbiAgICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChyZXN1bHQ/LkRvY3VtZW50KSB7XG4gICAgICAgICAgICBzZXREb2N1bWVudFZpZXcocmVzdWx0LkRvY3VtZW50KVxuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0b2FzdC5lcnJvcihlcnJvcj8ubWVzc2FnZSB8fCB0KCdlcnJvcjp1bnNwZWNpZmljJykpXG4gICAgICAgICAgY2xvc2VNb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgICB9XG5cbiAgICAgICAgYWJvcnRHZXREb2N1bWVudFZpZXdSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgdm9pZCBmZXRjaERvY3VtZW50VmlldygpXG4gICAgfSxcbiAgICBbXG4gICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgIGRpc2FibGVBY3Rpb25zLFxuICAgICAgZHJhd2VyU2x1ZyxcbiAgICAgIGluaXRpYWxEYXRhLFxuICAgICAgcmVkaXJlY3RBZnRlckRlbGV0ZSxcbiAgICAgIHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGUsXG4gICAgICByZWRpcmVjdEFmdGVyUmVzdG9yZSxcbiAgICAgIHJlbmRlckRvY3VtZW50LFxuICAgICAgcmVkaXJlY3RBZnRlckNyZWF0ZSxcbiAgICAgIGNsb3NlTW9kYWwsXG4gICAgICBvdmVycmlkZUVudGl0eVZpc2liaWxpdHksXG4gICAgICB0LFxuICAgIF0sXG4gIClcblxuICBjb25zdCBvblNhdmUgPSB1c2VDYWxsYmFjazxEb2N1bWVudERyYXdlclByb3BzWydvblNhdmUnXT4oXG4gICAgKGFyZ3MpID0+IHtcbiAgICAgIGlmIChhcmdzLm9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgZ2V0RG9jdW1lbnRWaWV3KGFyZ3MuZG9jLmlkKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2F2ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2b2lkIG9uU2F2ZUZyb21Qcm9wcyh7XG4gICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uU2F2ZUZyb21Qcm9wcywgY29sbGVjdGlvbkNvbmZpZywgZ2V0RG9jdW1lbnRWaWV3XSxcbiAgKVxuXG4gIGNvbnN0IG9uRHVwbGljYXRlID0gdXNlQ2FsbGJhY2s8RG9jdW1lbnREcmF3ZXJQcm9wc1snb25EdXBsaWNhdGUnXT4oXG4gICAgKGFyZ3MpID0+IHtcbiAgICAgIGdldERvY3VtZW50VmlldyhhcmdzLmRvYy5pZClcblxuICAgICAgaWYgKHR5cGVvZiBvbkR1cGxpY2F0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2b2lkIG9uRHVwbGljYXRlRnJvbVByb3BzKHtcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25EdXBsaWNhdGVGcm9tUHJvcHMsIGNvbGxlY3Rpb25Db25maWcsIGdldERvY3VtZW50Vmlld10sXG4gIClcblxuICBjb25zdCBvbkRlbGV0ZSA9IHVzZUNhbGxiYWNrPERvY3VtZW50RHJhd2VyUHJvcHNbJ29uRGVsZXRlJ10+KFxuICAgIChhcmdzKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uRGVsZXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZvaWQgb25EZWxldGVGcm9tUHJvcHMoe1xuICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2xvc2VNb2RhbChkcmF3ZXJTbHVnKVxuICAgIH0sXG4gICAgW29uRGVsZXRlRnJvbVByb3BzLCBjbG9zZU1vZGFsLCBkcmF3ZXJTbHVnLCBjb2xsZWN0aW9uQ29uZmlnXSxcbiAgKVxuXG4gIGNvbnN0IGNsZWFyRG9jID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGdldERvY3VtZW50Vmlldyh1bmRlZmluZWQsIHRydWUpXG4gIH0sIFtnZXREb2N1bWVudFZpZXddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFEb2N1bWVudFZpZXcgJiYgIWhhc0luaXRpYWxpemVkLmN1cnJlbnQpIHtcbiAgICAgIGdldERvY3VtZW50Vmlldyhkb2NJRCwgdHJ1ZSlcbiAgICAgIGhhc0luaXRpYWxpemVkLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICB9LCBbRG9jdW1lbnRWaWV3LCBnZXREb2N1bWVudFZpZXcsIGRvY0lEXSlcblxuICAvLyBDbGVhbnVwIGFueSBwZW5kaW5nIHJlcXVlc3RzIHdoZW4gdGhlIGNvbXBvbmVudCB1bm1vdW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFib3J0R2V0RG9jdW1lbnRWaWV3ID0gYWJvcnRHZXREb2N1bWVudFZpZXdSZWYuY3VycmVudFxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGFib3J0QW5kSWdub3JlKGFib3J0R2V0RG9jdW1lbnRWaWV3KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgaWYgKGlzTG9hZGluZykge1xuICAgIHJldHVybiA8TG9hZGluZ092ZXJsYXkgLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERvY3VtZW50RHJhd2VyQ29udGV4dFByb3ZpZGVyXG4gICAgICBjbGVhckRvYz17Y2xlYXJEb2N9XG4gICAgICBkcmF3ZXJTbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgb25EZWxldGU9e29uRGVsZXRlfVxuICAgICAgb25EdXBsaWNhdGU9e29uRHVwbGljYXRlfVxuICAgICAgb25TYXZlPXtvblNhdmV9XG4gICAgPlxuICAgICAge0RvY3VtZW50Vmlld31cbiAgICA8L0RvY3VtZW50RHJhd2VyQ29udGV4dFByb3ZpZGVyPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IExvYWRpbmdPdmVybGF5VHlwZXMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Mb2FkaW5nT3ZlcmxheS90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlTG9hZGluZ092ZXJsYXkgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Mb2FkaW5nT3ZlcmxheS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm1Qcm9jZXNzaW5nIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xvYWRpbmctb3ZlcmxheSdcblxudHlwZSBMb2FkaW5nT3ZlcmxheVByb3BzID0ge1xuICBhbmltYXRpb25EdXJhdGlvbj86IHN0cmluZ1xuICBsb2FkaW5nVGV4dD86IHN0cmluZ1xuICBvdmVybGF5VHlwZT86IHN0cmluZ1xuICBzaG93PzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgTG9hZGluZ092ZXJsYXk6IFJlYWN0LkZDPExvYWRpbmdPdmVybGF5UHJvcHM+ID0gKHtcbiAgYW5pbWF0aW9uRHVyYXRpb24sXG4gIGxvYWRpbmdUZXh0LFxuICBvdmVybGF5VHlwZSxcbiAgc2hvdyA9IHRydWUsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgc2hvdyA/IGAke2Jhc2VDbGFzc30tLWVudGVyaW5nYCA6IGAke2Jhc2VDbGFzc30tLWV4aXRpbmdgLFxuICAgICAgICBvdmVybGF5VHlwZSA/IGAke2Jhc2VDbGFzc30tLSR7b3ZlcmxheVR5cGV9YCA6ICcnLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogYW5pbWF0aW9uRHVyYXRpb24gfHwgJzUwMG1zJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2JhcnNgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2JhcmB9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19iYXJgfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmFyYH0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2JhcmB9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19iYXJgfSAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGV4dGB9Pntsb2FkaW5nVGV4dCB8fCB0KCdnZW5lcmFsOmxvYWRpbmcnKX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IHR5cGUgVXNlTG9hZGluZ092ZXJsYXlUb2dnbGVQcm9wcyA9IHtcbiAgbG9hZGluZ1RleHQ/OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNob3c6IGJvb2xlYW5cbiAgdHlwZT86IExvYWRpbmdPdmVybGF5VHlwZXNcbn1cbmV4cG9ydCBjb25zdCBMb2FkaW5nT3ZlcmxheVRvZ2dsZTogUmVhY3QuRkM8VXNlTG9hZGluZ092ZXJsYXlUb2dnbGVQcm9wcz4gPSAoe1xuICBuYW1lOiBrZXksXG4gIHR5cGUgPSAnZnVsbHNjcmVlbicsXG4gIGxvYWRpbmdUZXh0LFxuICBzaG93LFxufSkgPT4ge1xuICBjb25zdCB7IHRvZ2dsZUxvYWRpbmdPdmVybGF5IH0gPSB1c2VMb2FkaW5nT3ZlcmxheSgpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB0b2dnbGVMb2FkaW5nT3ZlcmxheSh7XG4gICAgICB0eXBlLFxuICAgICAgaXNMb2FkaW5nOiBzaG93LFxuICAgICAga2V5LFxuICAgICAgbG9hZGluZ1RleHQ6IGxvYWRpbmdUZXh0IHx8IHVuZGVmaW5lZCxcbiAgICB9KVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRvZ2dsZUxvYWRpbmdPdmVybGF5KHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAga2V5LFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtzaG93LCB0b2dnbGVMb2FkaW5nT3ZlcmxheSwga2V5LCB0eXBlLCBsb2FkaW5nVGV4dF0pXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IHR5cGUgRm9ybUxvYWRpbmdPdmVybGF5VG9nZ2xlUHJvcHMgPSB7XG4gIGFjdGlvbjogJ2NyZWF0ZScgfCAnbG9hZGluZycgfCAndXBkYXRlJ1xuICBmb3JtSXNMb2FkaW5nPzogYm9vbGVhblxuICBsb2FkaW5nU3VmZml4Pzogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICB0eXBlPzogTG9hZGluZ092ZXJsYXlUeXBlc1xufVxuXG5leHBvcnQgY29uc3QgRm9ybUxvYWRpbmdPdmVybGF5VG9nZ2xlOiBSZWFjdC5GQzxGb3JtTG9hZGluZ092ZXJsYXlUb2dnbGVQcm9wcz4gPSAoe1xuICBuYW1lLFxuICB0eXBlID0gJ2Z1bGxzY3JlZW4nLFxuICBhY3Rpb24sXG4gIGZvcm1Jc0xvYWRpbmcgPSBmYWxzZSxcbiAgbG9hZGluZ1N1ZmZpeCxcbn0pID0+IHtcbiAgY29uc3QgaXNQcm9jZXNzaW5nID0gdXNlRm9ybVByb2Nlc3NpbmcoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBsYWJlbHMgPSB7XG4gICAgY3JlYXRlOiB0KCdnZW5lcmFsOmNyZWF0aW5nJyksXG4gICAgbG9hZGluZzogdCgnZ2VuZXJhbDpsb2FkaW5nJyksXG4gICAgdXBkYXRlOiB0KCdnZW5lcmFsOnVwZGF0aW5nJyksXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxMb2FkaW5nT3ZlcmxheVRvZ2dsZVxuICAgICAgbG9hZGluZ1RleHQ9e2Ake2xhYmVsc1thY3Rpb25dfSAke1xuICAgICAgICBsb2FkaW5nU3VmZml4ID8gZ2V0VHJhbnNsYXRpb24obG9hZGluZ1N1ZmZpeCwgaTE4bikgOiAnJ1xuICAgICAgfWAudHJpbSgpfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHNob3c9e2Zvcm1Jc0xvYWRpbmcgfHwgaXNQcm9jZXNzaW5nfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgTG9hZGluZ092ZXJsYXlDb250ZXh0LCBUb2dnbGVMb2FkaW5nT3ZlcmxheSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IExvYWRpbmdPdmVybGF5IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTG9hZGluZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURlbGF5ZWRSZW5kZXIgfSBmcm9tICcuLi8uLi9ob29rcy91c2VEZWxheWVkUmVuZGVyLmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBkZWZhdWx0TG9hZGluZ092ZXJsYXlTdGF0ZSwgcmVkdWNlciB9IGZyb20gJy4vcmVkdWNlci5qcydcblxuY29uc3QgYW5pbWF0ZWREdXJhdGlvbiA9IDI1MFxuXG5jb25zdCBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGlzT25TY3JlZW46IGZhbHNlLFxuICB0b2dnbGVMb2FkaW5nT3ZlcmxheTogdW5kZWZpbmVkLFxufSlcblxuZXhwb3J0IGNvbnN0IExvYWRpbmdPdmVybGF5UHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBmYWxsYmFja1RleHQgPSB0KCdnZW5lcmFsOmxvYWRpbmcnKVxuICBjb25zdCBbb3ZlcmxheXMsIGRpc3BhdGNoT3ZlcmxheV0gPSBSZWFjdC51c2VSZWR1Y2VyKHJlZHVjZXIsIGRlZmF1bHRMb2FkaW5nT3ZlcmxheVN0YXRlKVxuXG4gIGNvbnN0IHsgaXNNb3VudGVkLCBpc1VubW91bnRpbmcsIHRyaWdnZXJEZWxheWVkUmVuZGVyIH0gPSB1c2VEZWxheWVkUmVuZGVyKHtcbiAgICBkZWxheUJlZm9yZVNob3c6IDEwMDAsXG4gICAgaW5UaW1lb3V0OiBhbmltYXRlZER1cmF0aW9uLFxuICAgIG1pblNob3dUaW1lOiA1MDAsXG4gICAgb3V0VGltZW91dDogYW5pbWF0ZWREdXJhdGlvbixcbiAgICBzaG93OiBvdmVybGF5cy5pc0xvYWRpbmcsXG4gIH0pXG5cbiAgY29uc3QgdG9nZ2xlTG9hZGluZ092ZXJsYXkgPSBSZWFjdC51c2VDYWxsYmFjazxUb2dnbGVMb2FkaW5nT3ZlcmxheT4oXG4gICAgKHsgdHlwZSwgaXNMb2FkaW5nLCBrZXksIGxvYWRpbmdUZXh0ID0gZmFsbGJhY2tUZXh0IH0pID0+IHtcbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgdHJpZ2dlckRlbGF5ZWRSZW5kZXIoKVxuICAgICAgICBkaXNwYXRjaE92ZXJsYXkoe1xuICAgICAgICAgIHR5cGU6ICdhZGQnLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBsb2FkaW5nVGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2hPdmVybGF5KHtcbiAgICAgICAgICB0eXBlOiAncmVtb3ZlJyxcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdHJpZ2dlckRlbGF5ZWRSZW5kZXIsIGZhbGxiYWNrVGV4dF0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxDb250ZXh0XG4gICAgICB2YWx1ZT17e1xuICAgICAgICBpc09uU2NyZWVuOiBpc01vdW50ZWQsXG4gICAgICAgIHRvZ2dsZUxvYWRpbmdPdmVybGF5LFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7aXNNb3VudGVkICYmIChcbiAgICAgICAgPExvYWRpbmdPdmVybGF5XG4gICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb249e2Ake2FuaW1hdGVkRHVyYXRpb259bXNgfVxuICAgICAgICAgIGxvYWRpbmdUZXh0PXtvdmVybGF5cy5sb2FkaW5nVGV4dCB8fCBmYWxsYmFja1RleHR9XG4gICAgICAgICAgb3ZlcmxheVR5cGU9e292ZXJsYXlzLm92ZXJsYXlUeXBlfVxuICAgICAgICAgIHNob3c9eyFpc1VubW91bnRpbmd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29udGV4dD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlTG9hZGluZ092ZXJsYXkgPSAoKTogTG9hZGluZ092ZXJsYXlDb250ZXh0ID0+IHtcbiAgY29uc3QgY29udGV4dEhvb2sgPSBSZWFjdC51c2UoQ29udGV4dClcbiAgaWYgKGNvbnRleHRIb29rID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUxvYWRpbmdPdmVybGF5IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBMb2FkaW5nT3ZlcmxheVByb3ZpZGVyJylcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0SG9va1xufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRGVsYXkgfSBmcm9tICcuL3VzZURlbGF5LmpzJ1xuXG50eXBlIERlbGF5ZWRSZW5kZXJQcm9wcyA9IHtcbiAgLyoqIFRpbWUgaW4gbXMgdG8gd2FpdCBiZWZvcmUgXCJtb3VudGluZ1wiIHRoZSBjb21wb25lbnQuICovXG4gIGRlbGF5QmVmb3JlU2hvdzogbnVtYmVyXG4gIC8qKiBUaW1lIGluIG1zIGZvciB0aGUgXCJlbnRlclwiIHBoYXNlIG9mIHRoZSB0cmFuc2l0aW9uLCBhZnRlciBkZWxheSBjb21wbGV0ZXMuICovXG4gIGluVGltZW91dDogbnVtYmVyXG4gIC8qKiBNaW4gdGltZSBpbiBtcyBmb3IgdGhlIFwiZW50ZXJlZFwiIHBoYXNlIG9mIHRoZSB0cmFuc2l0aW9uLiAqL1xuICBtaW5TaG93VGltZTogbnVtYmVyXG4gIC8qKiBUaW1lIGluIG1zIGZvciB0aGUgZXhpdCBwaGFzZSBvZiB0aGUgdHJhbnNpdGlvbi4gKi9cbiAgb3V0VGltZW91dDogbnVtYmVyXG4gIC8qKiBgdHJ1ZWAgc3RhcnRzIHRoZSBtb3VudCBwcm9jZXNzLlxuICAgKiBgZmFsc2VgIHN0YXJ0cyB0aGUgdW5tb3VudCBwcm9jZXNzLlxuICAgKiAqL1xuICBzaG93OiBib29sZWFuXG59XG50eXBlIHVzZURlbGF5ZWRSZW5kZXJUID0gKHByb3BzOiBEZWxheWVkUmVuZGVyUHJvcHMpID0+IHtcbiAgLyoqIGB0cnVlYCBpZiB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkIGFmdGVyIHRoZSB0aW1lb3V0LiAqL1xuICBpc01vdW50ZWQ6IGJvb2xlYW5cbiAgLyoqIGB0cnVlYCBpZiB0aGUgY29tcG9uZW50IGlzIHVubW91bnRpbmcuICovXG4gIGlzVW5tb3VudGluZzogYm9vbGVhblxuICAvKiogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRyaWdnZXIgdGhlIHRpbWVvdXQgZGVsYXkgYmVmb3JlIHJlbmRlcmluZy4gKi9cbiAgdHJpZ2dlckRlbGF5ZWRSZW5kZXI6ICgpID0+IHZvaWRcbn1cbmV4cG9ydCBjb25zdCB1c2VEZWxheWVkUmVuZGVyOiB1c2VEZWxheWVkUmVuZGVyVCA9ICh7XG4gIGRlbGF5QmVmb3JlU2hvdyxcbiAgaW5UaW1lb3V0LFxuICBtaW5TaG93VGltZSxcbiAgb3V0VGltZW91dCxcbiAgc2hvdyxcbn0pID0+IHtcbiAgY29uc3QgdG90YWxNb3VudFRpbWUgPSBpblRpbWVvdXQgKyBtaW5TaG93VGltZSArIG91dFRpbWVvdXRcbiAgY29uc3QgW2hhc0RlbGF5ZWQsIHRyaWdnZXJEZWxheV0gPSB1c2VEZWxheShkZWxheUJlZm9yZVNob3cpXG4gIGNvbnN0IFtpc01vdW50ZWQsIHNldElzTW91bnRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzVW5tb3VudGluZywgc2V0SXNVbm1vdW50aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBvbk1vdW50VGltZXN0YW1wUmVmID0gUmVhY3QudXNlUmVmKDApXG4gIGNvbnN0IHVubW91bnRUaW1lb3V0UmVmOiBSZWFjdC5SZWZPYmplY3Q8Tm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ+ID0gUmVhY3QudXNlUmVmKHVuZGVmaW5lZClcblxuICBjb25zdCB1bm1vdW50ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzVW5tb3VudGluZyh0cnVlKVxuICAgIHVubW91bnRUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzTW91bnRlZChmYWxzZSlcbiAgICAgIHNldElzVW5tb3VudGluZyhmYWxzZSlcbiAgICB9LCBvdXRUaW1lb3V0KVxuICB9LCBbc2V0SXNVbm1vdW50aW5nLCBvdXRUaW1lb3V0XSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNob3VsZE1vdW50ID0gaGFzRGVsYXllZCAmJiAhaXNNb3VudGVkICYmIHNob3dcbiAgICBjb25zdCBzaG91bGRVbm1vdW50ID0gaXNNb3VudGVkICYmICFzaG93XG5cbiAgICBpZiAoc2hvdWxkTW91bnQpIHtcbiAgICAgIG9uTW91bnRUaW1lc3RhbXBSZWYuY3VycmVudCA9IERhdGUubm93KClcbiAgICAgIHNldElzTW91bnRlZCh0cnVlKVxuICAgIH0gZWxzZSBpZiAoc2hvdWxkVW5tb3VudCkge1xuICAgICAgY29uc3QgdG90YWxUaW1lTW91bnRlZCA9IERhdGUubm93KCkgLSBvbk1vdW50VGltZXN0YW1wUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSB0b3RhbE1vdW50VGltZSAtIHRvdGFsVGltZU1vdW50ZWRcbiAgICAgIGNsZWFyVGltZW91dCh1bm1vdW50VGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgdW5tb3VudFRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQodW5tb3VudCwgTWF0aC5tYXgoMCwgcmVtYWluaW5nVGltZSkpXG4gICAgfVxuICB9LCBbaXNNb3VudGVkLCBzaG93LCB1bm1vdW50LCB0b3RhbE1vdW50VGltZSwgaGFzRGVsYXllZF0pXG5cbiAgcmV0dXJuIHtcbiAgICBpc01vdW50ZWQsXG4gICAgaXNVbm1vdW50aW5nLFxuICAgIHRyaWdnZXJEZWxheWVkUmVuZGVyOiB0cmlnZ2VyRGVsYXksXG4gIH1cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBBY3Rpb24sIFN0YXRlIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2FkaW5nT3ZlcmxheVN0YXRlID0ge1xuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZGluZ1RleHQ6ICcnLFxuICBvdmVybGF5VHlwZTogbnVsbCxcbn1cblxuZXhwb3J0IGNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgY29uc3QgbG9hZGVyc0NvcHkgPSBbLi4uc3RhdGUubG9hZGVyc11cbiAgY29uc3QgeyB0eXBlID0gJ2Z1bGxzY3JlZW4nLCBrZXkgPSAndXNlcicsIGxvYWRpbmdUZXh0IH0gPSBhY3Rpb24ucGF5bG9hZFxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ2FkZCcpIHtcbiAgICBsb2FkZXJzQ29weS5wdXNoKHsgdHlwZSwga2V5LCBsb2FkaW5nVGV4dCB9KVxuICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAncmVtb3ZlJykge1xuICAgIGNvbnN0IGluZGV4ID0gbG9hZGVyc0NvcHkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmtleSA9PT0ga2V5ICYmIGl0ZW0udHlwZSA9PT0gdHlwZSlcbiAgICBsb2FkZXJzQ29weS5zcGxpY2UoaW5kZXgsIDEpXG4gIH1cblxuICBjb25zdCBuZXh0TG9hZGVyID0gbG9hZGVyc0NvcHk/Lmxlbmd0aCA+IDAgPyBsb2FkZXJzQ29weVtsb2FkZXJzQ29weS5sZW5ndGggLSAxXSA6IG51bGxcblxuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogQm9vbGVhbihuZXh0TG9hZGVyKSxcbiAgICBsb2FkZXJzOiBsb2FkZXJzQ29weSxcbiAgICBsb2FkaW5nVGV4dDogbmV4dExvYWRlcj8ubG9hZGluZ1RleHQgfHwgc3RhdGU/LmxvYWRpbmdUZXh0LFxuICAgIG92ZXJsYXlUeXBlOiBuZXh0TG9hZGVyPy50eXBlIHx8IHN0YXRlPy5vdmVybGF5VHlwZSxcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFib3J0QW5kSWdub3JlKGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyKSB7XG4gIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICB0cnkge1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KClcbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAvLyBzd2FsbG93IGVycm9yXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiBhbiBlZmZlY3QgaXMgdHJpZ2dlcmVkIG11bHRpcGxlIHRpbWVzIG92ZXIgYW5kIHlvdSB3YW50IHRvIGNhbmNlbCB0aGUgcHJldmlvdXMgZWZmZWN0LlxuICogSXQgd2lsbCBhYm9ydCB0aGUgcHJldmlvdXMgZWZmZWN0IGFuZCBjcmVhdGUgYSBuZXcgQWJvcnRDb250cm9sbGVyIGZvciB0aGUgbmV4dCBlZmZlY3QuXG4gKiBJbXBvcnRhbnQ6IFlvdSBtdXN0IGFsc28gX3Jlc2V0XyB0aGUgYGFib3J0Q29udHJvbGxlclJlZmAgYWZ0ZXIgdGhlIGVmZmVjdCBpcyBkb25lLCBvdGhlcndpc2UgdGhlIG5leHQgZWZmZWN0IHdpbGwgYmUgYWJvcnRlZCBpbW1lZGlhdGVseS5cbiAqIEZvciBleGFtcGxlLCBydW4gYGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbGAgaW4gYSBgZmluYWxseWAgYmxvY2sgb3IgYWZ0ZXIgYW4gYXdhaXRlZCBwcm9taXNlLlxuICogQHBhcmFtIGFib3J0Q29udHJvbGxlclJlZlxuICogQHJldHVybnMge0Fib3J0Q29udHJvbGxlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUFib3J0UmVmKFxuICBhYm9ydENvbnRyb2xsZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxBYm9ydENvbnRyb2xsZXI+LFxuKTogQWJvcnRDb250cm9sbGVyIHtcbiAgY29uc3QgbmV3Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgIHRyeSB7XG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgLy8gc3dhbGxvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbmV3Q29udHJvbGxlclxuXG4gIHJldHVybiBuZXdDb250cm9sbGVyXG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcsIERhdGEsIEZvcm1TdGF0ZSwgVHlwZVdpdGhJRCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZSB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBEb2N1bWVudERyYXdlckNvbnRleHRQcm9wcyA9IHtcbiAgcmVhZG9ubHkgY2xlYXJEb2M/OiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IGRyYXdlclNsdWc6IHN0cmluZ1xuICByZWFkb25seSBvbkRlbGV0ZT86IChhcmdzOiB7XG4gICAgY29sbGVjdGlvbkNvbmZpZz86IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgICBpZDogc3RyaW5nXG4gIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkXG4gIC8qIG9ubHkgYXZhaWxhYmxlIGlmIGByZWRpcmVjdEFmdGVyRHVwbGljYXRlYCBpcyBgZmFsc2VgICovXG4gIHJlYWRvbmx5IG9uRHVwbGljYXRlPzogKGFyZ3M6IHtcbiAgICBjb2xsZWN0aW9uQ29uZmlnPzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICAgIGRvYzogVHlwZVdpdGhJRFxuICB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICByZWFkb25seSBvblJlc3RvcmU/OiAoYXJnczoge1xuICAgIGNvbGxlY3Rpb25Db25maWc/OiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gICAgaWQ6IHN0cmluZ1xuICB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICByZWFkb25seSBvblNhdmU/OiAoYXJnczoge1xuICAgIGNvbGxlY3Rpb25Db25maWc/OiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gICAgLyoqXG4gICAgICogSWYgeW91IHdhbnQgdG8gcGFzcyBhZGRpdGlvbmFsIGRhdGEgdG8gdGhlIG9uU3VjY2VzcyBjYWxsYmFjaywgeW91IGNhbiB1c2UgdGhpcyBjb250ZXh0IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWwgVGhpcyBwcm9wZXJ0eSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gICAgICovXG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgZG9jOiBUeXBlV2l0aElEXG4gICAgb3BlcmF0aW9uOiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgcmVzdWx0OiBEYXRhXG4gIH0pID0+IFByb21pc2U8Rm9ybVN0YXRlIHwgdm9pZD4gfCB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGUgPSB7fSAmIERvY3VtZW50RHJhd2VyQ29udGV4dFByb3BzXG5cbmV4cG9ydCBjb25zdCBEb2N1bWVudERyYXdlckNhbGxiYWNrc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9IGFzIERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGUpXG5cbmV4cG9ydCBjb25zdCBEb2N1bWVudERyYXdlckNvbnRleHRQcm92aWRlcjogUmVhY3QuRkM8XG4gIHtcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIH0gJiBEb2N1bWVudERyYXdlckNvbnRleHRQcm9wc1xuPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8RG9jdW1lbnREcmF3ZXJDYWxsYmFja3NDb250ZXh0IHZhbHVlPXt7IC4uLnJlc3QgfX0+e2NoaWxkcmVufTwvRG9jdW1lbnREcmF3ZXJDYWxsYmFja3NDb250ZXh0PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCB1c2VEb2N1bWVudERyYXdlckNvbnRleHQgPSAoKTogRG9jdW1lbnREcmF3ZXJDb250ZXh0VHlwZSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2UoRG9jdW1lbnREcmF3ZXJDYWxsYmFja3NDb250ZXh0KVxuXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlRG9jdW1lbnREcmF3ZXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBEb2N1bWVudERyYXdlclByb3ZpZGVyJylcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbm8tcmVzdWx0cydcblxudHlwZSBOb1Jlc3VsdHNQcm9wcyA9IHtcbiAgQWN0aW9ucz86IFJlYWN0LlJlYWN0Tm9kZVtdXG4gIE1lc3NhZ2U6IFJlYWN0LlJlYWN0Tm9kZVxufVxuZXhwb3J0IGZ1bmN0aW9uIE5vTGlzdFJlc3VsdHMoeyBBY3Rpb25zLCBNZXNzYWdlIH06IE5vUmVzdWx0c1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICB7TWVzc2FnZX1cbiAgICAgIHtBY3Rpb25zICYmIEFjdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb25zYH0+XG4gICAgICAgICAge0FjdGlvbnMubWFwKChhY3Rpb24sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtpbmRleH0+e2FjdGlvbn08L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RUeXBlLCBUeXBlV2l0aElEIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgYXBwZW5kVXBsb2FkU2VsZWN0RmllbGRzLCBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVkdWNlciwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZURlYm91bmNlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRGVib3VuY2UuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVkdWNlciB9IGZyb20gJy4vcmVkdWNlci5qcydcblxuLy8gZG9jdW1lbnRzIGFyZSBmaXJzdCBzZXQgdG8gbnVsbCB3aGVuIHJlcXVlc3RlZFxuLy8gc2V0IHRvIGZhbHNlIHdoZW4gbm8gZG9jIGlzIHJldHVybmVkXG4vLyBvciBzZXQgdG8gdGhlIGRvY3VtZW50IHJldHVybmVkXG5leHBvcnQgdHlwZSBEb2N1bWVudHMgPSB7XG4gIFtzbHVnOiBzdHJpbmddOiB7XG4gICAgW2lkOiBudW1iZXIgfCBzdHJpbmddOiBmYWxzZSB8IG51bGwgfCBUeXBlV2l0aElEXG4gIH1cbn1cblxudHlwZSBMaXN0UmVsYXRpb25zaGlwQ29udGV4dCA9IHtcbiAgZG9jdW1lbnRzOiBEb2N1bWVudHNcbiAgZ2V0UmVsYXRpb25zaGlwczogKFxuICAgIGRvY3M6IHtcbiAgICAgIHJlbGF0aW9uVG86IHN0cmluZ1xuICAgICAgdmFsdWU6IG51bWJlciB8IHN0cmluZ1xuICAgIH1bXSxcbiAgKSA9PiB2b2lkXG59XG5cbmNvbnN0IENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9IGFzIExpc3RSZWxhdGlvbnNoaXBDb250ZXh0KVxuXG5leHBvcnQgY29uc3QgUmVsYXRpb25zaGlwUHJvdmlkZXI6IFJlYWN0LkZDPHsgcmVhZG9ubHkgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoe1xuICBjaGlsZHJlbixcbn0pID0+IHtcbiAgY29uc3QgW2RvY3VtZW50cywgZGlzcGF0Y2hEb2N1bWVudHNdID0gdXNlUmVkdWNlcihyZWR1Y2VyLCB7fSlcbiAgY29uc3QgZGVib3VuY2VkRG9jdW1lbnRzID0gdXNlRGVib3VuY2UoZG9jdW1lbnRzLCAxMDApXG5cbiAgY29uc3Qge1xuICAgIGNvbmZpZzoge1xuICAgICAgY29sbGVjdGlvbnMsXG4gICAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCBwcmV2TG9jYWxlID0gdXNlUmVmKGxvY2FsZSlcblxuICBjb25zdCBsb2FkUmVsYXRpb25zaGlwRG9jcyA9IHVzZUNhbGxiYWNrKFxuICAgIChyZWxvYWRBbGwgPSBmYWxzZSkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZGVib3VuY2VkRG9jdW1lbnRzKS5mb3JFYWNoKGFzeW5jIChbc2x1ZywgZG9jc10pID0+IHtcbiAgICAgICAgY29uc3QgaWRzVG9Mb2FkOiAobnVtYmVyIHwgc3RyaW5nKVtdID0gW11cblxuICAgICAgICBPYmplY3QuZW50cmllcyhkb2NzKS5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCByZWxvYWRBbGwpIHtcbiAgICAgICAgICAgIGlkc1RvTG9hZC5wdXNoKGlkKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoaWRzVG9Mb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBmb3JtYXRBZG1pblVSTCh7IGFwaVJvdXRlOiBhcGksIHBhdGg6IGAvJHtzbHVnfWAgfSlcblxuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdDogU2VsZWN0VHlwZSA9IHt9XG5cbiAgICAgICAgICBwYXJhbXMuYXBwZW5kKCdkZXB0aCcsICcwJylcbiAgICAgICAgICBwYXJhbXMuYXBwZW5kKCdsaW1pdCcsICcyNTAnKVxuXG4gICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zLmZpbmQoKGMpID0+IGMuc2x1ZyA9PT0gc2x1ZylcbiAgICAgICAgICBpZiAoY29sbGVjdGlvbi5hZG1pbi5lbmFibGVMaXN0Vmlld1NlbGVjdEFQSSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRUb1NlbGVjdCA9IGNvbGxlY3Rpb24uYWRtaW4udXNlQXNUaXRsZSA/PyAnaWQnXG4gICAgICAgICAgICBzZWxlY3RbZmllbGRUb1NlbGVjdF0gPSB0cnVlXG5cbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLnVwbG9hZCkge1xuICAgICAgICAgICAgICBhcHBlbmRVcGxvYWRTZWxlY3RGaWVsZHMoeyBjb2xsZWN0aW9uQ29uZmlnOiBjb2xsZWN0aW9uLCBzZWxlY3QgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCdsb2NhbGUnLCBsb2NhbGUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaWRzVG9TdHJpbmcgPSBpZHNUb0xvYWQubWFwKChpZCkgPT4gU3RyaW5nKGlkKSlcbiAgICAgICAgICBwYXJhbXMuYXBwZW5kKCd3aGVyZVtpZF1baW5dJywgaWRzVG9TdHJpbmcuam9pbignLCcpKVxuXG4gICAgICAgICAgY29uc3QgcXVlcnkgPSBgPyR7cGFyYW1zLnRvU3RyaW5nKCl9JiR7cXMuc3RyaW5naWZ5KHsgc2VsZWN0IH0pfWBcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3VybH0ke3F1ZXJ5fWAsIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKHJlc3VsdC5vaykge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3VsdC5qc29uKClcbiAgICAgICAgICAgIGlmIChqc29uLmRvY3MpIHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2hEb2N1bWVudHMoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdBRERfTE9BREVEJyxcbiAgICAgICAgICAgICAgICBkb2NzOiBqc29uLmRvY3MsXG4gICAgICAgICAgICAgICAgaWRzVG9Mb2FkLFxuICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IHNsdWcsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BhdGNoRG9jdW1lbnRzKHsgdHlwZTogJ0FERF9MT0FERUQnLCBkb2NzOiBbXSwgaWRzVG9Mb2FkLCByZWxhdGlvblRvOiBzbHVnIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG4gICAgW2RlYm91bmNlZERvY3VtZW50cywgYXBpLCBpMThuLCBsb2NhbGUsIGNvbGxlY3Rpb25zXSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBsb2FkUmVsYXRpb25zaGlwRG9jcyhsb2NhbGUgJiYgcHJldkxvY2FsZS5jdXJyZW50ICE9PSBsb2NhbGUpXG4gICAgcHJldkxvY2FsZS5jdXJyZW50ID0gbG9jYWxlXG4gIH0sIFtsb2NhbGUsIGxvYWRSZWxhdGlvbnNoaXBEb2NzXSlcblxuICBjb25zdCBnZXRSZWxhdGlvbnNoaXBzID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlbGF0aW9uc2hpcHM6IHsgcmVsYXRpb25Ubzogc3RyaW5nOyB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIH1bXSkgPT4ge1xuICAgICAgZGlzcGF0Y2hEb2N1bWVudHMoeyB0eXBlOiAnUkVRVUVTVCcsIGRvY3M6IHJlbGF0aW9uc2hpcHMgfSlcbiAgICB9LFxuICAgIFtdLFxuICApXG5cbiAgcmV0dXJuIDxDb250ZXh0IHZhbHVlPXt7IGRvY3VtZW50cywgZ2V0UmVsYXRpb25zaGlwcyB9fT57Y2hpbGRyZW59PC9Db250ZXh0PlxufVxuXG5leHBvcnQgY29uc3QgdXNlTGlzdFJlbGF0aW9uc2hpcHMgPSAoKTogTGlzdFJlbGF0aW9uc2hpcENvbnRleHQgPT4gdXNlKENvbnRleHQpXG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZURlYm91bmNlPFQgPSB1bmtub3duPih2YWx1ZTogVCwgZGVsYXk6IG51bWJlcik6IFQge1xuICAvLyBTdGF0ZSBhbmQgc2V0dGVycyBmb3IgZGVib3VuY2VkIHZhbHVlXG4gIGNvbnN0IFtkZWJvdW5jZWRWYWx1ZSwgc2V0RGVib3VuY2VkVmFsdWVdID0gdXNlU3RhdGUodmFsdWUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXREZWJvdW5jZWRWYWx1ZSh2YWx1ZSlcbiAgICB9LCBkZWxheSlcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaGFuZGxlcilcbiAgICB9XG4gIH0sIFt2YWx1ZSwgZGVsYXldKVxuXG4gIHJldHVybiBkZWJvdW5jZWRWYWx1ZVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUeXBlV2l0aElEIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudHMgfSBmcm9tICcuL2luZGV4LmpzJ1xuXG50eXBlIFJlcXVlc3REb2N1bWVudHMgPSB7XG4gIGRvY3M6IHsgcmVsYXRpb25Ubzogc3RyaW5nOyB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIH1bXVxuICB0eXBlOiAnUkVRVUVTVCdcbn1cblxudHlwZSBBZGRMb2FkZWREb2N1bWVudHMgPSB7XG4gIGRvY3M6IFR5cGVXaXRoSURbXVxuICBpZHNUb0xvYWQ6IChudW1iZXIgfCBzdHJpbmcpW11cbiAgcmVsYXRpb25Ubzogc3RyaW5nXG4gIHR5cGU6ICdBRERfTE9BREVEJ1xufVxuXG50eXBlIEFjdGlvbiA9IEFkZExvYWRlZERvY3VtZW50cyB8IFJlcXVlc3REb2N1bWVudHNcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGU6IERvY3VtZW50cywgYWN0aW9uOiBBY3Rpb24pOiBEb2N1bWVudHMge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnQUREX0xPQURFRCc6IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9XG4gICAgICBpZiAodHlwZW9mIG5ld1N0YXRlW2FjdGlvbi5yZWxhdGlvblRvXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgbmV3U3RhdGVbYWN0aW9uLnJlbGF0aW9uVG9dID0ge31cbiAgICAgIH1cbiAgICAgIGNvbnN0IHVucmV0dXJuZWRJRHMgPSBbLi4uYWN0aW9uLmlkc1RvTG9hZF1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uLmRvY3MpKSB7XG4gICAgICAgIGFjdGlvbi5kb2NzLmZvckVhY2goKGRvYykgPT4ge1xuICAgICAgICAgIHVucmV0dXJuZWRJRHMuc3BsaWNlKHVucmV0dXJuZWRJRHMuaW5kZXhPZihkb2MuaWQpLCAxKVxuICAgICAgICAgIG5ld1N0YXRlW2FjdGlvbi5yZWxhdGlvblRvXVtkb2MuaWRdID0gZG9jXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHVucmV0dXJuZWRJRHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgbmV3U3RhdGVbYWN0aW9uLnJlbGF0aW9uVG9dW2lkXSA9IGZhbHNlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gbmV3U3RhdGVcbiAgICB9XG5cbiAgICBjYXNlICdSRVFVRVNUJzoge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH1cblxuICAgICAgYWN0aW9uLmRvY3MuZm9yRWFjaCgoeyByZWxhdGlvblRvLCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3U3RhdGVbcmVsYXRpb25Ub10gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgbmV3U3RhdGVbcmVsYXRpb25Ub10gPSB7fVxuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXRlW3JlbGF0aW9uVG9dW3ZhbHVlXSA9IG51bGxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBuZXdTdGF0ZVxuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IEkxOG5DbGllbnQgfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcsIFNhbml0aXplZFBlcm1pc3Npb25zIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5cbmltcG9ydCB0eXBlIHsgUHJvcHMgYXMgQnV0dG9uUHJvcHMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CdXR0b24vdHlwZXMuanMnXG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IFBvcHVwLCBQb3B1cExpc3QgfSBmcm9tICcuLi9Qb3B1cC9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IEFkZE5ld0J1dHRvbiA9ICh7XG4gIGFsbG93Q3JlYXRlLFxuICBiYXNlQ2xhc3MsXG4gIGJ1dHRvblN0eWxlLFxuICBjbGFzc05hbWUsXG4gIGNvbGxlY3Rpb25zLFxuICBpMThuLFxuICBpY29uLFxuICBsYWJlbCxcbiAgb25DbGljayxcbiAgcGVybWlzc2lvbnMsXG4gIHJlbGF0aW9uVG8sXG59OiB7XG4gIGFsbG93Q3JlYXRlOiBib29sZWFuXG4gIGJhc2VDbGFzczogc3RyaW5nXG4gIGJ1dHRvblN0eWxlPzogQnV0dG9uUHJvcHNbJ2J1dHRvblN0eWxlJ11cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGNvbGxlY3Rpb25zOiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnW11cbiAgaTE4bjogSTE4bkNsaWVudFxuICBpY29uPzogQnV0dG9uUHJvcHNbJ2ljb24nXVxuICBsYWJlbDogc3RyaW5nXG4gIG9uQ2xpY2s6IChzZWxlY3RlZENvbGxlY3Rpb24/OiBzdHJpbmcpID0+IHZvaWRcbiAgcGVybWlzc2lvbnM6IFNhbml0aXplZFBlcm1pc3Npb25zXG4gIHJlbGF0aW9uVG86IHN0cmluZyB8IHN0cmluZ1tdXG59KSA9PiB7XG4gIGlmICghYWxsb3dDcmVhdGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgaXNQb2x5bW9ycGhpYyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcblxuICBpZiAoIWlzUG9seW1vcnBoaWMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvbiBidXR0b25TdHlsZT17YnV0dG9uU3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiBvbkNsaWNrKCl9PlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L0J1dHRvbj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hZGQtbmV3LXBvbHltb3JwaGljLXdyYXBwZXJgfT5cbiAgICAgIDxQb3B1cFxuICAgICAgICBidXR0b249e1xuICAgICAgICAgIDxCdXR0b24gYnV0dG9uU3R5bGU9e2J1dHRvblN0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaWNvbj17aWNvbn0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uVHlwZT1cImN1c3RvbVwiXG4gICAgICAgIGhvcml6b250YWxBbGlnbj1cImNlbnRlclwiXG4gICAgICAgIHJlbmRlcj17KHsgY2xvc2U6IGNsb3NlUG9wdXAgfSkgPT4gKFxuICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICB7cmVsYXRpb25Uby5tYXAoKHJlbGF0ZWRDb2xsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9ucy5jb2xsZWN0aW9uc1tyZWxhdGVkQ29sbGVjdGlvbl0/LmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3JlbGF0aW9uLWJ1dHRvbi0tJHtyZWxhdGVkQ29sbGVjdGlvbn1gfVxuICAgICAgICAgICAgICAgICAgICBrZXk9e3JlbGF0ZWRDb2xsZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2VQb3B1cCgpXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljayhyZWxhdGVkQ29sbGVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2dldFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zLmZpbmQoKGVhY2gpID0+IGVhY2guc2x1ZyA9PT0gcmVsYXRlZENvbGxlY3Rpb24pLmxhYmVscy5zaW5ndWxhcixcbiAgICAgICAgICAgICAgICAgICAgICBpMThuLFxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgKX1cbiAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE9uRHJhd2VyT3BlbiB9IGZyb20gJy4uLy4uL2luZGV4LmpzJ1xuXG5pbXBvcnQgeyBFZGl0SWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2ljb25zL0VkaXQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDZWxsUHJvcHMgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvVGFibGVDb2x1bW5zL1JlbmRlckRlZmF1bHRDZWxsL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVmYXVsdENlbGwgfSBmcm9tICcuLi8uLi8uLi9UYWJsZS9EZWZhdWx0Q2VsbC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgY29uc3QgRHJhd2VyTGluazogUmVhY3QuRkM8e1xuICBjdXJyZW50RHJhd2VySUQ/OiBzdHJpbmdcbiAgb25EcmF3ZXJPcGVuOiBPbkRyYXdlck9wZW5cbn0+ID0gKHsgb25EcmF3ZXJPcGVuIH0pID0+IHtcbiAgY29uc3QgY2VsbFByb3BzID0gdXNlQ2VsbFByb3BzKClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZHJhd2VyLWxpbmtcIj5cbiAgICAgIDxEZWZhdWx0Q2VsbCB7Li4uY2VsbFByb3BzfSBjbGFzc05hbWU9XCJkcmF3ZXItbGlua19fY2VsbFwiIGxpbms9e2ZhbHNlfSBvbkNsaWNrPXtudWxsfSAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9XCJkcmF3ZXItbGlua19fZG9jLWRyYXdlci10b2dnbGVyXCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIG9uRHJhd2VyT3BlbihjZWxsUHJvcHMucm93RGF0YS5pZCwgY2VsbFByb3BzLmNvbGxlY3Rpb25TbHVnKVxuICAgICAgICB9fVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPEVkaXRJY29uIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUxpc3REcmF3ZXJDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvTGlzdERyYXdlci9Qcm92aWRlci5qcydcbmltcG9ydCB7IERlZmF1bHRDZWxsIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvVGFibGUvRGVmYXVsdENlbGwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUYWJsZUNvbHVtbnMgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVGFibGVDb2x1bW5zL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdkZWZhdWx0LWNlbGwnXG5cbmNvbnN0IENlbGxQcm9wc0NvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMgfCBudWxsPihudWxsKVxuXG5leHBvcnQgY29uc3QgdXNlQ2VsbFByb3BzID0gKCk6IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMgfCBudWxsID0+IFJlYWN0LnVzZShDZWxsUHJvcHNDb250ZXh0KVxuXG5leHBvcnQgY29uc3QgUmVuZGVyRGVmYXVsdENlbGw6IFJlYWN0LkZDPHtcbiAgY2xpZW50UHJvcHM6IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHNcbiAgY29sdW1uSW5kZXg6IG51bWJlclxuICBlbmFibGVSb3dTZWxlY3Rpb25zPzogYm9vbGVhblxuICBpc0xpbmtlZENvbHVtbj86IGJvb2xlYW5cbn0+ID0gKHsgY2xpZW50UHJvcHMsIGNvbHVtbkluZGV4LCBpc0xpbmtlZENvbHVtbiB9KSA9PiB7XG4gIGNvbnN0IHsgZHJhd2VyU2x1Zywgb25TZWxlY3QgfSA9IHVzZUxpc3REcmF3ZXJDb250ZXh0KClcbiAgY29uc3QgeyBMaW5rZWRDZWxsT3ZlcnJpZGUgfSA9IHVzZVRhYmxlQ29sdW1ucygpXG5cbiAgY29uc3QgcHJvcHNUb1Bhc3M6IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMgPSB7XG4gICAgLi4uY2xpZW50UHJvcHMsXG4gICAgY29sdW1uSW5kZXgsXG4gIH1cblxuICBpZiAoaXNMaW5rZWRDb2x1bW4gJiYgZHJhd2VyU2x1Zykge1xuICAgIHByb3BzVG9QYXNzLmNsYXNzTmFtZSA9IGAke2Jhc2VDbGFzc31fX2ZpcnN0LWNlbGxgXG4gICAgcHJvcHNUb1Bhc3MubGluayA9IGZhbHNlXG4gICAgcHJvcHNUb1Bhc3Mub25DbGljayA9ICh7IGNvbGxlY3Rpb25TbHVnOiByb3dDb2xsLCByb3dEYXRhIH0pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25TZWxlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25TZWxlY3Qoe1xuICAgICAgICAgIGNvbGxlY3Rpb25TbHVnOiByb3dDb2xsLFxuICAgICAgICAgIGRvYzogcm93RGF0YSxcbiAgICAgICAgICBkb2NJRDogcm93RGF0YS5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2VsbFByb3BzQ29udGV4dCB2YWx1ZT17cHJvcHNUb1Bhc3N9PlxuICAgICAge2lzTGlua2VkQ29sdW1uICYmIExpbmtlZENlbGxPdmVycmlkZSA/IExpbmtlZENlbGxPdmVycmlkZSA6IDxEZWZhdWx0Q2VsbCB7Li4ucHJvcHNUb1Bhc3N9IC8+fVxuICAgIDwvQ2VsbFByb3BzQ29udGV4dD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMsIFVwbG9hZEZpZWxkQ2xpZW50IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCBmaWVsZElzSUQgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCcgLy8gVE9ETzogYWJzdHJhY3QgdGhpcyBvdXQgdG8gc3VwcG9ydCBhbGwgcm91dGVyc1xuXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9mb3JtYXRBZG1pblVSTC5qcydcbmltcG9ydCB7IGdldERpc3BsYXllZEZpZWxkVmFsdWUgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvZ2V0RGlzcGxheWVkRmllbGRWYWx1ZS5qcydcbmltcG9ydCB7IGlzVmFsaWRSZWFjdEVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaXNWYWxpZFJlYWN0RWxlbWVudC5qcydcbmltcG9ydCB7IExpbmsgfSBmcm9tICcuLi8uLi9MaW5rL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29kZUNlbGwgfSBmcm9tICcuL2ZpZWxkcy9Db2RlL2luZGV4LmpzJ1xuaW1wb3J0IHsgY2VsbENvbXBvbmVudHMgfSBmcm9tICcuL2ZpZWxkcy9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRDZWxsOiBSZWFjdC5GQzxEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2VsbERhdGEsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVGcm9tUHJvcHMsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZmllbGQsXG4gICAgZmllbGQ6IHsgYWRtaW4gfSxcbiAgICBsaW5rLFxuICAgIGxpbmtVUkwsXG4gICAgb25DbGljazogb25DbGlja0Zyb21Qcm9wcyxcbiAgICByb3dEYXRhLFxuICAgIHZpZXdUeXBlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUgfSxcbiAgICB9LFxuICAgIGdldEVudGl0eUNvbmZpZyxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnIH0pXG5cbiAgY29uc3QgY2xhc3NOYW1lRnJvbUNvbmZpZ0NvbnRleHQgPSBhZG1pbiAmJiAnY2xhc3NOYW1lJyBpbiBhZG1pbiA/IGFkbWluLmNsYXNzTmFtZSA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGNsYXNzTmFtZSA9XG4gICAgY2xhc3NOYW1lRnJvbVByb3BzIHx8XG4gICAgKGZpZWxkLmFkbWluICYmICdjbGFzc05hbWUnIGluIGZpZWxkLmFkbWluID8gZmllbGQuYWRtaW4uY2xhc3NOYW1lIDogbnVsbCkgfHxcbiAgICBjbGFzc05hbWVGcm9tQ29uZmlnQ29udGV4dFxuXG4gIGNvbnN0IG9uQ2xpY2sgPSBvbkNsaWNrRnJvbVByb3BzXG5cbiAgbGV0IFdyYXBFbGVtZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT4gfCBzdHJpbmcgPSAnc3BhbidcblxuICBjb25zdCB3cmFwRWxlbWVudFByb3BzOiB7XG4gICAgY2xhc3NOYW1lPzogc3RyaW5nXG4gICAgaHJlZj86IHN0cmluZ1xuICAgIG9uQ2xpY2s/OiAoKSA9PiB2b2lkXG4gICAgcHJlZmV0Y2g/OiBmYWxzZVxuICAgIHR5cGU/OiAnYnV0dG9uJ1xuICB9ID0ge1xuICAgIGNsYXNzTmFtZSxcbiAgfVxuXG4gIGlmIChsaW5rKSB7XG4gICAgd3JhcEVsZW1lbnRQcm9wcy5wcmVmZXRjaCA9IGZhbHNlXG4gICAgV3JhcEVsZW1lbnQgPSBMaW5rXG5cbiAgICAvLyBVc2UgY3VzdG9tIGxpbmtVUkwgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCBVUkwgZ2VuZXJhdGlvblxuICAgIGlmIChsaW5rVVJMKSB7XG4gICAgICB3cmFwRWxlbWVudFByb3BzLmhyZWYgPSBsaW5rVVJMXG4gICAgfSBlbHNlIHtcbiAgICAgIHdyYXBFbGVtZW50UHJvcHMuaHJlZiA9IGNvbGxlY3Rpb25Db25maWc/LnNsdWdcbiAgICAgICAgPyBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICBhZG1pblJvdXRlLFxuICAgICAgICAgICAgcGF0aDogYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25Db25maWc/LnNsdWd9JHt2aWV3VHlwZSA9PT0gJ3RyYXNoJyA/ICcvdHJhc2gnIDogJyd9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJvd0RhdGEuaWQpfWAsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygb25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFdyYXBFbGVtZW50ID0gJ2J1dHRvbidcbiAgICB3cmFwRWxlbWVudFByb3BzLnR5cGUgPSAnYnV0dG9uJ1xuICAgIHdyYXBFbGVtZW50UHJvcHMub25DbGljayA9ICgpID0+IHtcbiAgICAgIG9uQ2xpY2soe1xuICAgICAgICBjZWxsRGF0YSxcbiAgICAgICAgY29sbGVjdGlvblNsdWc6IGNvbGxlY3Rpb25Db25maWc/LnNsdWcsXG4gICAgICAgIHJvd0RhdGEsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZElzSUQoZmllbGQpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxXcmFwRWxlbWVudCB7Li4ud3JhcEVsZW1lbnRQcm9wc30+XG4gICAgICAgIDxDb2RlQ2VsbFxuICAgICAgICAgIGNlbGxEYXRhPXtgSUQ6ICR7Y2VsbERhdGF9YH1cbiAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnPXtjb2xsZWN0aW9uQ29uZmlnfVxuICAgICAgICAgIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgICBmaWVsZD17e1xuICAgICAgICAgICAgLi4uZmllbGQsXG4gICAgICAgICAgICB0eXBlOiAnY29kZScsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBub3dyYXBcbiAgICAgICAgICByb3dEYXRhPXtyb3dEYXRhfVxuICAgICAgICAvPlxuICAgICAgPC9XcmFwRWxlbWVudD5cbiAgICApXG4gIH1cblxuICBjb25zdCBkaXNwbGF5ZWRWYWx1ZSA9IGdldERpc3BsYXllZEZpZWxkVmFsdWUoY2VsbERhdGEsIGZpZWxkLCBpMThuKVxuXG4gIGNvbnN0IERlZmF1bHRDZWxsQ29tcG9uZW50OiBSZWFjdC5GQzxEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzPiA9XG4gICAgdHlwZW9mIGNlbGxEYXRhICE9PSAndW5kZWZpbmVkJyAmJiBjZWxsQ29tcG9uZW50c1tmaWVsZC50eXBlXVxuXG4gIGxldCBDZWxsQ29tcG9uZW50OiBSZWFjdC5SZWFjdE5vZGUgPSBudWxsXG5cbiAgLy8gSGFuZGxlIEpTWCBsYWJlbHMgYmVmb3JlIHVzaW5nIERlZmF1bHRDZWxsQ29tcG9uZW50XG4gIGlmIChpc1ZhbGlkUmVhY3RFbGVtZW50KGRpc3BsYXllZFZhbHVlKSkge1xuICAgIENlbGxDb21wb25lbnQgPSBkaXNwbGF5ZWRWYWx1ZVxuICB9IGVsc2UgaWYgKERlZmF1bHRDZWxsQ29tcG9uZW50KSB7XG4gICAgQ2VsbENvbXBvbmVudCA9IDxEZWZhdWx0Q2VsbENvbXBvbmVudCBjZWxsRGF0YT17Y2VsbERhdGF9IHJvd0RhdGE9e3Jvd0RhdGF9IHsuLi5wcm9wc30gLz5cbiAgfSBlbHNlIGlmICghRGVmYXVsdENlbGxDb21wb25lbnQpIHtcbiAgICAvLyBEZWZhdWx0Q2VsbENvbXBvbmVudCBkb2VzIG5vdCBleGlzdCBmb3IgY2VydGFpbiBmaWVsZCB0eXBlcyBsaWtlIGB0ZXh0YFxuICAgIGlmIChcbiAgICAgIGNvbGxlY3Rpb25Db25maWc/LnVwbG9hZCAmJlxuICAgICAgZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiZcbiAgICAgIGZpZWxkLm5hbWUgPT09ICdmaWxlbmFtZScgJiZcbiAgICAgIGZpZWxkLnR5cGUgPT09ICd0ZXh0J1xuICAgICkge1xuICAgICAgY29uc3QgRmlsZUNlbGxDb21wb25lbnQgPSBjZWxsQ29tcG9uZW50cy5GaWxlXG5cbiAgICAgIENlbGxDb21wb25lbnQgPSAoXG4gICAgICAgIDxGaWxlQ2VsbENvbXBvbmVudFxuICAgICAgICAgIGNlbGxEYXRhPXtjZWxsRGF0YX1cbiAgICAgICAgICByb3dEYXRhPXtyb3dEYXRhfVxuICAgICAgICAgIHsuLi4ocHJvcHMgYXMgRGVmYXVsdENlbGxDb21wb25lbnRQcm9wczxVcGxvYWRGaWVsZENsaWVudD4pfVxuICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc9e2NvbGxlY3Rpb25Db25maWd9XG4gICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcEVsZW1lbnQgey4uLndyYXBFbGVtZW50UHJvcHN9PlxuICAgICAgICAgIHsoZGlzcGxheWVkVmFsdWUgPT09ICcnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZGlzcGxheWVkVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgICAgICBkaXNwbGF5ZWRWYWx1ZSA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgIGkxOG4udCgnZ2VuZXJhbDpub0xhYmVsJywge1xuICAgICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oKCdsYWJlbCcgaW4gZmllbGQgPyBmaWVsZC5sYWJlbCA6IG51bGwpIHx8ICdkYXRhJywgaTE4biksXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICB7dHlwZW9mIGRpc3BsYXllZFZhbHVlID09PSAnc3RyaW5nJyAmJiBkaXNwbGF5ZWRWYWx1ZX1cbiAgICAgICAgICB7dHlwZW9mIGRpc3BsYXllZFZhbHVlID09PSAnbnVtYmVyJyAmJiBkaXNwbGF5ZWRWYWx1ZX1cbiAgICAgICAgICB7dHlwZW9mIGRpc3BsYXllZFZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgZGlzcGxheWVkVmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGRpc3BsYXllZFZhbHVlKX1cbiAgICAgICAgPC9XcmFwRWxlbWVudD5cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBpZiAoKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnIHx8IGZpZWxkLnR5cGUgPT09ICdyYWRpbycpICYmIGZpZWxkLm9wdGlvbnMubGVuZ3RoICYmIGNlbGxEYXRhKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IEFycmF5LmlzQXJyYXkoY2VsbERhdGEpXG4gICAgICA/IGNlbGxEYXRhLm1hcCgodmFsdWUpID0+IGBzZWxlY3RlZC0tJHt2YWx1ZX1gKS5qb2luKCcgJylcbiAgICAgIDogYHNlbGVjdGVkLS0ke2NlbGxEYXRhfWBcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFt3cmFwRWxlbWVudFByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxXcmFwRWxlbWVudCB7Li4ud3JhcEVsZW1lbnRQcm9wc30gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICB7Q2VsbENvbXBvbmVudH1cbiAgICAgIDwvV3JhcEVsZW1lbnQ+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIDxXcmFwRWxlbWVudCB7Li4ud3JhcEVsZW1lbnRQcm9wc30+e0NlbGxDb21wb25lbnR9PC9XcmFwRWxlbWVudD5cbn1cbiIsIi8qKiBXaWxsIHJlYWQgdGhlIGByb3V0ZXMuYWRtaW5gIGNvbmZpZyBhbmQgYXBwcm9wcmlhdGVseSBoYW5kbGUgYFwiL1wiYCBhZG1pbiBwYXRocyAqL1xuZXhwb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbiIsImltcG9ydCB0eXBlIHsgSTE4bkNsaWVudCB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB0eXBlIHsgQ2xpZW50RmllbGQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcblxuaW1wb3J0IHsgaXNWYWxpZFJlYWN0RWxlbWVudCB9IGZyb20gJy4vaXNWYWxpZFJlYWN0RWxlbWVudC5qcydcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBkaXNwbGF5IHZhbHVlIGZvciBhIGZpZWxkLlxuICogLSBGb3Igc2VsZWN0IGFuZCByYWRpbyBmaWVsZHM6XG4gKiAgIC0gUmV0dXJucyBKU1ggZWxlbWVudHMgYXMtaXMuXG4gKiAgIC0gVHJhbnNsYXRlcyBsb2NhbGl6ZWQgbGFiZWwgb2JqZWN0cyBiYXNlZCBvbiB0aGUgY3VycmVudCBsYW5ndWFnZS5cbiAqICAgLSBSZXR1cm5zIHN0cmluZyBsYWJlbHMgZGlyZWN0bHkuXG4gKiAgIC0gRmFsbHMgYmFjayB0byB0aGUgb3B0aW9uIHZhbHVlIGlmIG5vIHZhbGlkIGxhYmVsIGlzIGZvdW5kLlxuICogLSBGb3IgYWxsIG90aGVyIGZpZWxkIHR5cGVzLCByZXR1cm5zIGBjZWxsRGF0YWAgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheWVkRmllbGRWYWx1ZSA9IChjZWxsRGF0YTogYW55LCBmaWVsZDogQ2xpZW50RmllbGQsIGkxOG46IEkxOG5DbGllbnQpID0+IHtcbiAgaWYgKChmaWVsZD8udHlwZSA9PT0gJ3NlbGVjdCcgfHwgZmllbGQ/LnR5cGUgPT09ICdyYWRpbycpICYmIEFycmF5LmlzQXJyYXkoZmllbGQub3B0aW9ucykpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkLm9wdGlvbnMuZmluZCgob3B0KSA9PlxuICAgICAgdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQudmFsdWUgPT09IGNlbGxEYXRhIDogb3B0ID09PSBjZWxsRGF0YSxcbiAgICApXG5cbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWRPcHRpb24gPT09ICdvYmplY3QnICYmICdsYWJlbCcgaW4gc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWRSZWFjdEVsZW1lbnQoc2VsZWN0ZWRPcHRpb24ubGFiZWwpXG4gICAgICAgICAgPyBzZWxlY3RlZE9wdGlvbi5sYWJlbCAvLyBSZXR1cm4gSlNYIGRpcmVjdGx5XG4gICAgICAgICAgOiBnZXRUcmFuc2xhdGlvbihzZWxlY3RlZE9wdGlvbi5sYWJlbCwgaTE4bikgfHwgc2VsZWN0ZWRPcHRpb24udmFsdWUgLy8gVXNlIHRyYW5zbGF0aW9uIG9yIGZhbGxiYWNrIHRvIHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb24gLy8gSWYgb3B0aW9uIGlzIGEgc3RyaW5nLCByZXR1cm4gaXQgZGlyZWN0bHlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNlbGxEYXRhIC8vIERlZmF1bHQgZmFsbGJhY2sgaWYgbm8gbWF0Y2ggZm91bmRcbn1cbiIsImltcG9ydCBSZWFjdCwgeyB0eXBlIFJlYWN0RWxlbWVudCB9IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBMYXp5UmVhY3RDb21wb25lbnRTeW1ib2wgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JylcblxuLyoqXG4gKiBTaW5jZSBOZXh0LmpzIDE1LjQsIGBSZWFjdC5pc1ZhbGlkRWxlbWVudCgpYCByZXR1cm5zIGBmYWxzZWAgZm9yIGNvbXBvbmVudHMgdGhhdCBjcm9zcyB0aGUgc2VydmVyLWNsaWVudCBib3VuZGFyeS5cbiAqIFRoaXMgdXRpbGl0eSBleHBhbmRzIG9uIHRoYXQgY2hlY2sgc28gdGhhdCBpdCByZXR1cm5zIHRydWUgZm9yIHZhbGlkIFJlYWN0IGVsZW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJlYWN0RWxlbWVudDxQPihvYmplY3Q6IHt9IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iamVjdCBpcyBSZWFjdEVsZW1lbnQ8UD4ge1xuICByZXR1cm4gUmVhY3QuaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB8fCBvYmplY3Q/LlsnJCR0eXBlb2YnXSA9PT0gTGF6eVJlYWN0Q29tcG9uZW50U3ltYm9sXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xpZW50Q29sbGVjdGlvbkNvbmZpZywgQ29kZUZpZWxkQ2xpZW50LCBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQ2VsbFByb3BzIGV4dGVuZHMgRGVmYXVsdENlbGxDb21wb25lbnRQcm9wczxDb2RlRmllbGRDbGllbnQ+IHtcbiAgcmVhZG9ubHkgY29sbGVjdGlvbkNvbmZpZzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICByZWFkb25seSBub3dyYXA/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDb2RlQ2VsbDogUmVhY3QuRkM8Q29kZUNlbGxQcm9wcz4gPSAoeyBjZWxsRGF0YSwgbm93cmFwIH0pID0+IHtcbiAgY29uc3QgdGV4dFRvU2hvdyA9IGNlbGxEYXRhPy5sZW5ndGggPiAxMDAgPyBgJHtjZWxsRGF0YS5zdWJzdHJpbmcoMCwgMTAwKX1cXHUyMDI2YCA6IGNlbGxEYXRhXG5cbiAgY29uc3Qgbm9XcmFwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBub3dyYXAgPyB7IHdoaXRlU3BhY2U6ICdub3dyYXAnIH0gOiB7fVxuXG4gIHJldHVybiAoXG4gICAgPGNvZGUgY2xhc3NOYW1lPVwiY29kZS1jZWxsXCIgc3R5bGU9e25vV3JhcFN0eWxlfT5cbiAgICAgIDxzcGFuPnt0ZXh0VG9TaG93fTwvc3Bhbj5cbiAgICA8L2NvZGU+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBBcnJheUZpZWxkQ2xpZW50LCBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5Q2VsbFByb3BzIGV4dGVuZHMgRGVmYXVsdENlbGxDb21wb25lbnRQcm9wczxBcnJheUZpZWxkQ2xpZW50PiB7fVxuXG5leHBvcnQgY29uc3QgQXJyYXlDZWxsOiBSZWFjdC5GQzxBcnJheUNlbGxQcm9wcz4gPSAoeyBjZWxsRGF0YSwgZmllbGQ6IHsgbGFiZWxzIH0gfSkgPT4ge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBhcnJheUZpZWxkcyA9IGNlbGxEYXRhID8/IFtdXG5cbiAgY29uc3QgbGFiZWwgPVxuICAgIGFycmF5RmllbGRzLmxlbmd0aCA9PT0gMVxuICAgICAgPyBgJHthcnJheUZpZWxkcy5sZW5ndGh9ICR7Z2V0VHJhbnNsYXRpb24obGFiZWxzPy5zaW5ndWxhciB8fCBpMThuLnQoJ2dlbmVyYWw6cm93cycpLCBpMThuKX1gXG4gICAgICA6IGAke2FycmF5RmllbGRzLmxlbmd0aH0gJHtnZXRUcmFuc2xhdGlvbihsYWJlbHM/LnBsdXJhbCB8fCBpMThuLnQoJ2dlbmVyYWw6cm93cycpLCBpMThuKX1gXG5cbiAgcmV0dXJuIDxzcGFuPntsYWJlbH08L3NwYW4+XG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQmxvY2tzRmllbGRDbGllbnQsIERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0NlbGxQcm9wcyBleHRlbmRzIERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHM8QmxvY2tzRmllbGRDbGllbnQ+IHt9XG5cbmV4cG9ydCBjb25zdCBCbG9ja3NDZWxsOiBSZWFjdC5GQzxCbG9ja3NDZWxsUHJvcHM+ID0gKHtcbiAgY2VsbERhdGEsXG4gIGZpZWxkOiB7IGJsb2NrUmVmZXJlbmNlcywgYmxvY2tzLCBsYWJlbHMgfSxcbn0pID0+IHtcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IHNlbGVjdGVkQmxvY2tzID0gQXJyYXkuaXNBcnJheShjZWxsRGF0YSkgPyBjZWxsRGF0YS5tYXAoKHsgYmxvY2tUeXBlIH0pID0+IGJsb2NrVHlwZSkgOiBbXVxuXG4gIGNvbnN0IHRyYW5zbGF0ZWRCbG9ja0xhYmVscyA9IChibG9ja1JlZmVyZW5jZXMgPz8gYmxvY2tzKT8ubWFwKChiKSA9PiB7XG4gICAgY29uc3QgYmxvY2sgPSB0eXBlb2YgYiA9PT0gJ3N0cmluZycgPyBjb25maWcuYmxvY2tzTWFwW2JdIDogYlxuICAgIHJldHVybiB7XG4gICAgICBzbHVnOiBibG9jay5zbHVnLFxuICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGJsb2NrLmxhYmVscy5zaW5ndWxhciwgaTE4biksXG4gICAgfVxuICB9KVxuXG4gIGxldCBsYWJlbCA9IGAwICR7Z2V0VHJhbnNsYXRpb24obGFiZWxzPy5wbHVyYWwsIGkxOG4pfWBcblxuICBjb25zdCBmb3JtYXRCbG9ja0xpc3QgPSAoYmxvY2tzKSA9PlxuICAgIGJsb2Nrc1xuICAgICAgLm1hcCgoYikgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRyYW5zbGF0ZWRCbG9ja0xhYmVscy5maWx0ZXIoKGYpID0+IGYuc2x1ZyA9PT0gYik/LlswXVxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ/LmxhYmVsXG4gICAgICB9KVxuICAgICAgLmpvaW4oJywgJylcblxuICBjb25zdCBpdGVtc1RvU2hvdyA9IDVcblxuICBpZiAoc2VsZWN0ZWRCbG9ja3MubGVuZ3RoID4gaXRlbXNUb1Nob3cpIHtcbiAgICBjb25zdCBtb3JlID0gc2VsZWN0ZWRCbG9ja3MubGVuZ3RoIC0gaXRlbXNUb1Nob3dcbiAgICBsYWJlbCA9IGAke3NlbGVjdGVkQmxvY2tzLmxlbmd0aH0gJHtnZXRUcmFuc2xhdGlvbihsYWJlbHM/LnBsdXJhbCwgaTE4bil9IC0gJHtpMThuLnQoXG4gICAgICAnZmllbGRzOml0ZW1zQW5kTW9yZScsXG4gICAgICB7IGNvdW50OiBtb3JlLCBpdGVtczogZm9ybWF0QmxvY2tMaXN0KHNlbGVjdGVkQmxvY2tzLnNsaWNlKDAsIGl0ZW1zVG9TaG93KSkgfSxcbiAgICApfWBcbiAgfSBlbHNlIGlmIChzZWxlY3RlZEJsb2Nrcy5sZW5ndGggPiAwKSB7XG4gICAgbGFiZWwgPSBgJHtzZWxlY3RlZEJsb2Nrcy5sZW5ndGh9ICR7Z2V0VHJhbnNsYXRpb24oXG4gICAgICBzZWxlY3RlZEJsb2Nrcy5sZW5ndGggPT09IDEgPyBsYWJlbHM/LnNpbmd1bGFyIDogbGFiZWxzPy5wbHVyYWwsXG4gICAgICBpMThuLFxuICAgICl9IC0gJHtmb3JtYXRCbG9ja0xpc3Qoc2VsZWN0ZWRCbG9ja3MpfWBcbiAgfVxuXG4gIHJldHVybiA8c3Bhbj57bGFiZWx9PC9zcGFuPlxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENoZWNrYm94RmllbGRDbGllbnQsIERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBDaGVja2JveENlbGw6IFJlYWN0LkZDPERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHM8Q2hlY2tib3hGaWVsZENsaWVudD4+ID0gKHtcbiAgY2VsbERhdGEsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIHJldHVybiAoXG4gICAgPGNvZGUgY2xhc3NOYW1lPVwiYm9vbC1jZWxsXCI+XG4gICAgICA8c3Bhbj57dChgZ2VuZXJhbDoke2NlbGxEYXRhfWApLnRvTG93ZXJDYXNlKCl9PC9zcGFuPlxuICAgIDwvY29kZT5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERhdGVGaWVsZENsaWVudCwgRGVmYXVsdENlbGxDb21wb25lbnRQcm9wcyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldE9iamVjdERvdE5vdGF0aW9uIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvZm9ybWF0RGF0ZVRpdGxlLmpzJ1xuXG5leHBvcnQgY29uc3QgRGF0ZUNlbGw6IFJlYWN0LkZDPFxuICBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzPHsgYWNjZXNzb3I/OiBzdHJpbmcgfSAmIERhdGVGaWVsZENsaWVudD5cbj4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNlbGxEYXRhLFxuICAgIGZpZWxkOiB7IG5hbWUsIGFjY2Vzc29yLCBhZG1pbjogeyBkYXRlIH0gPSB7fSwgdGltZXpvbmU6IHRpbWV6b25lRnJvbUZpZWxkIH0sXG4gICAgcm93RGF0YSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3Qge1xuICAgIGNvbmZpZzoge1xuICAgICAgYWRtaW46IHsgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdEZyb21Sb290IH0sXG4gICAgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IGZpZWxkUGF0aCA9IGFjY2Vzc29yIHx8IG5hbWVcblxuICBjb25zdCB0aW1lem9uZUZpZWxkTmFtZSA9IGAke2ZpZWxkUGF0aH1fdHpgXG4gIGNvbnN0IHRpbWV6b25lID1cbiAgICBCb29sZWFuKHRpbWV6b25lRnJvbUZpZWxkKSAmJiByb3dEYXRhXG4gICAgICA/IGdldE9iamVjdERvdE5vdGF0aW9uKHJvd0RhdGEsIHRpbWV6b25lRmllbGROYW1lLCB1bmRlZmluZWQpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGRhdGVGb3JtYXQgPSBkYXRlPy5kaXNwbGF5Rm9ybWF0IHx8IGRhdGVGb3JtYXRGcm9tUm9vdFxuXG4gIHJldHVybiAoXG4gICAgPHNwYW4+XG4gICAgICB7Qm9vbGVhbihjZWxsRGF0YSkgJiYgZm9ybWF0RGF0ZSh7IGRhdGU6IGNlbGxEYXRhLCBpMThuLCBwYXR0ZXJuOiBkYXRlRm9ybWF0LCB0aW1lem9uZSB9KX1cbiAgICA8L3NwYW4+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLFxuICBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzLFxuICBUZXh0RmllbGRDbGllbnQsXG4gIFVwbG9hZEZpZWxkQ2xpZW50LFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRCZXN0Rml0RnJvbVNpemVzLCBpc0ltYWdlIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgVGh1bWJuYWlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vVGh1bWJuYWlsL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZmlsZSdcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2VsbFByb3BzXG4gIGV4dGVuZHMgRGVmYXVsdENlbGxDb21wb25lbnRQcm9wczxUZXh0RmllbGRDbGllbnQgfCBVcGxvYWRGaWVsZENsaWVudD4ge1xuICByZWFkb25seSBjb2xsZWN0aW9uQ29uZmlnOiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG59XG5cbmV4cG9ydCBjb25zdCBGaWxlQ2VsbDogUmVhY3QuRkM8RmlsZUNlbGxQcm9wcz4gPSAoe1xuICBjZWxsRGF0YTogZmlsZW5hbWUsXG4gIGNvbGxlY3Rpb25Db25maWcsXG4gIGZpZWxkLFxuICByb3dEYXRhLFxufSkgPT4ge1xuICBjb25zdCBmaWVsZFByZXZpZXdBbGxvd2VkID0gJ2Rpc3BsYXlQcmV2aWV3JyBpbiBmaWVsZCA/IGZpZWxkLmRpc3BsYXlQcmV2aWV3IDogdW5kZWZpbmVkXG4gIGNvbnN0IHByZXZpZXdBbGxvd2VkID0gZmllbGRQcmV2aWV3QWxsb3dlZCA/PyBjb2xsZWN0aW9uQ29uZmlnLnVwbG9hZD8uZGlzcGxheVByZXZpZXcgPz8gdHJ1ZVxuXG4gIGlmIChwcmV2aWV3QWxsb3dlZCkge1xuICAgIGNvbnN0IGlzRmlsZUltYWdlID0gaXNJbWFnZShyb3dEYXRhPy5taW1lVHlwZSlcbiAgICBsZXQgZmlsZVNyYzogc3RyaW5nIHwgdW5kZWZpbmVkID0gaXNGaWxlSW1hZ2VcbiAgICAgID8gcm93RGF0YT8udGh1bWJuYWlsVVJMIHx8IHJvd0RhdGE/LnVybFxuICAgICAgOiByb3dEYXRhPy50aHVtYm5haWxVUkxcblxuICAgIGlmIChpc0ZpbGVJbWFnZSkge1xuICAgICAgZmlsZVNyYyA9IGdldEJlc3RGaXRGcm9tU2l6ZXMoe1xuICAgICAgICBzaXplczogcm93RGF0YT8uc2l6ZXMsXG4gICAgICAgIHRodW1ibmFpbFVSTDogcm93RGF0YT8udGh1bWJuYWlsVVJMLFxuICAgICAgICB1cmw6IHJvd0RhdGE/LnVybCxcbiAgICAgICAgd2lkdGg6IHJvd0RhdGE/LndpZHRoLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICAgIDxUaHVtYm5haWxcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RodW1ibmFpbGB9XG4gICAgICAgICAgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25Db25maWc/LnNsdWd9XG4gICAgICAgICAgZG9jPXt7XG4gICAgICAgICAgICAuLi5yb3dEYXRhLFxuICAgICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBmaWxlU3JjPXtmaWxlU3JjfVxuICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2NvbGxlY3Rpb25Db25maWc/LnVwbG9hZD8uY2FjaGVUYWdzICYmIHJvd0RhdGE/LnVwZGF0ZWRBdH1cbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIHVwbG9hZENvbmZpZz17Y29sbGVjdGlvbkNvbmZpZz8udXBsb2FkfVxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZpbGVuYW1lYH0+e1N0cmluZyhmaWxlbmFtZSl9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiA8PntTdHJpbmcoZmlsZW5hbWUpfTwvPlxuICB9XG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICd0aHVtYm5haWwnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IEZpbGUgfSBmcm9tICcuLi8uLi9ncmFwaGljcy9GaWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2hpbW1lckVmZmVjdCB9IGZyb20gJy4uL1NoaW1tZXJFZmZlY3QvaW5kZXguanMnXG5cbmV4cG9ydCB0eXBlIFRodW1ibmFpbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY29sbGVjdGlvblNsdWc/OiBzdHJpbmdcbiAgZG9jPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgZmlsZVNyYz86IHN0cmluZ1xuICBoZWlnaHQ/OiBudW1iZXJcbiAgaW1hZ2VDYWNoZVRhZz86IHN0cmluZ1xuICBzaXplPzogJ2V4cGFuZCcgfCAnbGFyZ2UnIHwgJ21lZGl1bScgfCAnbm9uZScgfCAnc21hbGwnXG4gIHVwbG9hZENvbmZpZz86IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ3VwbG9hZCddXG4gIHdpZHRoPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBUaHVtYm5haWw6IFJlYWN0LkZDPFRodW1ibmFpbFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lID0gJycsXG4gICAgZG9jOiB7IGZpbGVuYW1lIH0gPSB7fSxcbiAgICBmaWxlU3JjLFxuICAgIGhlaWdodCxcbiAgICBpbWFnZUNhY2hlVGFnLFxuICAgIHNpemUsXG4gICAgd2lkdGgsXG4gIH0gPSBwcm9wc1xuICBjb25zdCBbZmlsZUV4aXN0cywgc2V0RmlsZUV4aXN0c10gPSBSZWFjdC51c2VTdGF0ZSh1bmRlZmluZWQpXG5cbiAgY29uc3QgY2xhc3NOYW1lcyA9IFtiYXNlQ2xhc3MsIGAke2Jhc2VDbGFzc30tLXNpemUtJHtzaXplIHx8ICdtZWRpdW0nfWAsIGNsYXNzTmFtZV0uam9pbignICcpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWZpbGVTcmMpIHtcbiAgICAgIHNldEZpbGVFeGlzdHMoZmFsc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0RmlsZUV4aXN0cyh1bmRlZmluZWQpXG5cbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKVxuICAgIGltZy5zcmMgPSBmaWxlU3JjXG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHNldEZpbGVFeGlzdHModHJ1ZSlcbiAgICB9XG4gICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBzZXRGaWxlRXhpc3RzKGZhbHNlKVxuICAgIH1cbiAgfSwgW2ZpbGVTcmNdKVxuXG4gIGxldCBzcmM6IG51bGwgfCBzdHJpbmcgPSBudWxsXG5cbiAgLyoqXG4gICAqIElmIGFuIGltYWdlQ2FjaGVUYWcgaXMgcHJvdmlkZWQsIGFwcGVuZCBpdCB0byB0aGUgZmlsZVNyY1xuICAgKiBDaGVjayBpZiB0aGUgZmlsZVNyYyBhbHJlYWR5IGhhcyBhIHF1ZXJ5IHN0cmluZywgaWYgaXQgZG9lcywgYXBwZW5kIHRoZSBpbWFnZUNhY2hlVGFnIHdpdGggYW4gYW1wZXJzYW5kXG4gICAqL1xuICBpZiAoZmlsZVNyYykge1xuICAgIGNvbnN0IHF1ZXJ5Q2hhciA9IGZpbGVTcmM/LmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPydcbiAgICBzcmMgPSBpbWFnZUNhY2hlVGFnID8gYCR7ZmlsZVNyY30ke3F1ZXJ5Q2hhcn0ke2VuY29kZVVSSUNvbXBvbmVudChpbWFnZUNhY2hlVGFnKX1gIDogZmlsZVNyY1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lc30+XG4gICAgICB7ZmlsZUV4aXN0cyA9PT0gdW5kZWZpbmVkICYmIDxTaGltbWVyRWZmZWN0IGhlaWdodD1cIjEwMCVcIiAvPn1cbiAgICAgIHtmaWxlRXhpc3RzICYmIDxpbWcgYWx0PXtmaWxlbmFtZSBhcyBzdHJpbmd9IGhlaWdodD17aGVpZ2h0fSBzcmM9e3NyY30gd2lkdGg9e3dpZHRofSAvPn1cbiAgICAgIHtmaWxlRXhpc3RzID09PSBmYWxzZSAmJiA8RmlsZSAvPn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG50eXBlIFRodW1ibmFpbENvbXBvbmVudFByb3BzID0ge1xuICByZWFkb25seSBhbHQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmdcbiAgcmVhZG9ubHkgZmlsZVNyYzogc3RyaW5nXG4gIHJlYWRvbmx5IGltYWdlQ2FjaGVUYWc/OiBzdHJpbmdcbiAgcmVhZG9ubHkgc2l6ZT86ICdleHBhbmQnIHwgJ2xhcmdlJyB8ICdtZWRpdW0nIHwgJ25vbmUnIHwgJ3NtYWxsJ1xufVxuZXhwb3J0IGZ1bmN0aW9uIFRodW1ibmFpbENvbXBvbmVudChwcm9wczogVGh1bWJuYWlsQ29tcG9uZW50UHJvcHMpIHtcbiAgY29uc3QgeyBhbHQsIGNsYXNzTmFtZSA9ICcnLCBmaWxlbmFtZSwgZmlsZVNyYywgaW1hZ2VDYWNoZVRhZywgc2l6ZSB9ID0gcHJvcHNcbiAgY29uc3QgW2ZpbGVFeGlzdHMsIHNldEZpbGVFeGlzdHNdID0gUmVhY3QudXNlU3RhdGUodW5kZWZpbmVkKVxuXG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBbYmFzZUNsYXNzLCBgJHtiYXNlQ2xhc3N9LS1zaXplLSR7c2l6ZSB8fCAnbWVkaXVtJ31gLCBjbGFzc05hbWVdLmpvaW4oJyAnKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFmaWxlU3JjKSB7XG4gICAgICBzZXRGaWxlRXhpc3RzKGZhbHNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldEZpbGVFeGlzdHModW5kZWZpbmVkKVxuXG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKClcbiAgICBpbWcuc3JjID0gZmlsZVNyY1xuICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBzZXRGaWxlRXhpc3RzKHRydWUpXG4gICAgfVxuICAgIGltZy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgc2V0RmlsZUV4aXN0cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtmaWxlU3JjXSlcblxuICBsZXQgc3JjOiBzdHJpbmcgPSAnJ1xuXG4gIC8qKlxuICAgKiBJZiBhbiBpbWFnZUNhY2hlVGFnIGlzIHByb3ZpZGVkLCBhcHBlbmQgaXQgdG8gdGhlIGZpbGVTcmNcbiAgICogQ2hlY2sgaWYgdGhlIGZpbGVTcmMgYWxyZWFkeSBoYXMgYSBxdWVyeSBzdHJpbmcsIGlmIGl0IGRvZXMsIGFwcGVuZCB0aGUgaW1hZ2VDYWNoZVRhZyB3aXRoIGFuIGFtcGVyc2FuZFxuICAgKi9cbiAgaWYgKGZpbGVTcmMpIHtcbiAgICBjb25zdCBxdWVyeUNoYXIgPSBmaWxlU3JjPy5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nXG4gICAgc3JjID0gaW1hZ2VDYWNoZVRhZyA/IGAke2ZpbGVTcmN9JHtxdWVyeUNoYXJ9JHtlbmNvZGVVUklDb21wb25lbnQoaW1hZ2VDYWNoZVRhZyl9YCA6IGZpbGVTcmNcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXN9PlxuICAgICAge2ZpbGVFeGlzdHMgPT09IHVuZGVmaW5lZCAmJiA8U2hpbW1lckVmZmVjdCBoZWlnaHQ9XCIxMDAlXCIgLz59XG4gICAgICB7ZmlsZUV4aXN0cyAmJiA8aW1nIGFsdD17YWx0IHx8IGZpbGVuYW1lfSBzcmM9e3NyY30gLz59XG4gICAgICB7ZmlsZUV4aXN0cyA9PT0gZmFsc2UgJiYgPEZpbGUgLz59XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IEZpbGU6IFJlYWN0LkZDID0gKCkgPT4gKFxuICA8c3ZnXG4gICAgaGVpZ2h0PVwiMTUwXCJcbiAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6ICcjMzMzMzMzJyB9fVxuICAgIHZpZXdCb3g9XCIwIDAgMTUwIDE1MFwiXG4gICAgd2lkdGg9XCIxNTBcIlxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICA+XG4gICAgPHBhdGggZD1cIk04Mi44ODc2IDUwLjVINTUuNTU1NVYxMDAuNUg5NC40NDQ0VjYxLjk4MThIODIuODg3NlY1MC41WlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgPHBhdGggZD1cIk04Mi44ODc2IDYxLjk4MThIOTQuNDQ0NEw4Mi44ODc2IDUwLjVWNjEuOTgxOFpcIiBmaWxsPVwiIzlBOUE5QVwiIC8+XG4gIDwvc3ZnPlxuKVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMsIEpTT05GaWVsZENsaWVudCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHN0cmluZ2lmeVRydW5jYXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxpdGllcy9zdHJpbmdpZnlUcnVuY2F0ZWQuanMnXG5cbmV4cG9ydCBjb25zdCBKU09OQ2VsbDogUmVhY3QuRkM8RGVmYXVsdENlbGxDb21wb25lbnRQcm9wczxKU09ORmllbGRDbGllbnQ+PiA9ICh7IGNlbGxEYXRhIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIHRyeSB7XG4gICAgY29uc3QgY2VsbERhdGFTdHJpbmcgPSBzdHJpbmdpZnlUcnVuY2F0ZWQoY2VsbERhdGEsIDEwMClcbiAgICByZXR1cm4gKFxuICAgICAgPGNvZGUgY2xhc3NOYW1lPVwianNvbi1jZWxsXCI+XG4gICAgICAgIDxzcGFuPntjZWxsRGF0YVN0cmluZ308L3NwYW4+XG4gICAgICA8L2NvZGU+XG4gICAgKVxuICB9IGNhdGNoIChfaWdub3JlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxjb2RlIGNsYXNzTmFtZT1cImpzb24tY2VsbFwiPlxuICAgICAgICA8c3Bhbj57dCgnZ2VuZXJhbDplcnJvcicpfTwvc3Bhbj5cbiAgICAgIDwvY29kZT5cbiAgICApXG4gIH1cbn1cbiIsIi8qKlxuICogU2FmZWx5IHN0cmluZ2lmeSBhIHZhbHVlIGFuZCB0cnVuY2F0ZSBpdCB0byBhIG1heGltdW0gbGVuZ3RoLlxuICpcbiAqIENvbnZlcnRzIGFueSB2YWx1ZSB0byBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFuZCB0cnVuY2F0ZXMgdGhlIHJlc3VsdGluZ1xuICogc3RyaW5nIGlmIGl0IGV4Y2VlZHMgdGhlIG1heGltdW0gbGVuZ3RoLiBJZiB0cnVuY2F0aW9uIG9jY3VycywgYW4gZWxsaXBzaXMgKOKApilcbiAqIGlzIGFwcGVuZGVkIHRvIGluZGljYXRlIGluY29tcGxldGUgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzdHJpbmdpZnkgKGNhbiBiZSBhbnkgdHlwZSBpbmNsdWRpbmcgb2JqZWN0cywgYXJyYXlzLCBwcmltaXRpdmVzKVxuICogQHBhcmFtIG1heExlbmd0aCAtIFRoZSBtYXhpbXVtIGNoYXJhY3RlciBsZW5ndGggb2YgdGhlIG91dHB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIEEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24sIHRydW5jYXRlZCB3aXRoIFwi4oCmXCIgaWYgaXQgZXhjZWVkcyBtYXhMZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVRydW5jYXRlZCh2YWx1ZTogdW5rbm93biwgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzdHJpbmdpZmllZEpTT04gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgY29uc3QgdG90YWxDaGFycyA9IHN0cmluZ2lmaWVkSlNPTi5sZW5ndGhcblxuICAvLyBPbmx5IHRydW5jYXRlIGlmIHRoZSBzdHJpbmcgaXMgc2lnbmlmaWNhbnRseSBsb25nZXIgKD4xLjV4IHRoZSBtYXggbGVuZ3RoKVxuICBpZiAodG90YWxDaGFycyAvIG1heExlbmd0aCA+IDEuNSkge1xuICAgIHJldHVybiBgJHtzdHJpbmdpZmllZEpTT04uc3Vic3RyaW5nKDAsIG1heExlbmd0aCl9XFx1MjAyNmBcbiAgfVxuXG4gIHJldHVybiBzdHJpbmdpZmllZEpTT05cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzLFxuICBKb2luRmllbGRDbGllbnQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkQ2xpZW50LFxuICBVcGxvYWRGaWVsZENsaWVudCxcbn0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VJbnRlcnNlY3QgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VJbnRlcnNlY3QuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBjYW5Vc2VET00gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsaXRpZXMvY2FuVXNlRE9NLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RG9jVGl0bGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UmVsYXRpb25zaGlwcyB9IGZyb20gJy4uLy4uLy4uL1JlbGF0aW9uc2hpcFByb3ZpZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmlsZUNlbGwgfSBmcm9tICcuLi9GaWxlL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbnR5cGUgVmFsdWUgPSB7IHJlbGF0aW9uVG86IHN0cmluZzsgdmFsdWU6IG51bWJlciB8IHN0cmluZyB9XG5jb25zdCBiYXNlQ2xhc3MgPSAncmVsYXRpb25zaGlwLWNlbGwnXG5jb25zdCB0b3RhbFRvU2hvdyA9IDNcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25zaGlwQ2VsbFByb3BzID0gRGVmYXVsdENlbGxDb21wb25lbnRQcm9wczxcbiAgSm9pbkZpZWxkQ2xpZW50IHwgUmVsYXRpb25zaGlwRmllbGRDbGllbnQgfCBVcGxvYWRGaWVsZENsaWVudFxuPlxuXG5leHBvcnQgY29uc3QgUmVsYXRpb25zaGlwQ2VsbDogUmVhY3QuRkM8UmVsYXRpb25zaGlwQ2VsbFByb3BzPiA9ICh7XG4gIGNlbGxEYXRhOiBjZWxsRGF0YUZyb21Qcm9wcyxcbiAgY3VzdG9tQ2VsbFByb3BzOiBjdXN0b21DZWxsQ29udGV4dCxcbiAgZmllbGQsXG4gIGZpZWxkOiB7IGxhYmVsIH0sXG59KSA9PiB7XG4gIC8vIGNvbmRpdGlvbmFsbHkgZXh0cmFjdCByZWxhdGlvblRvIGJvdGggYm90aCByZWxhdGlvbnNoaXAgYW5kIGpvaW4gZmllbGRzXG4gIGNvbnN0IHJlbGF0aW9uVG8gPVxuICAgICgncmVsYXRpb25UbycgaW4gZmllbGQgJiYgZmllbGQucmVsYXRpb25UbykgfHwgKCdjb2xsZWN0aW9uJyBpbiBmaWVsZCAmJiBmaWVsZC5jb2xsZWN0aW9uKVxuXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXh0cmFjdCBkb2NzIGZyb20gam9pbiBmaWVsZHNcbiAgY29uc3QgY2VsbERhdGEgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gJ2NvbGxlY3Rpb24nIGluIGZpZWxkID8gY2VsbERhdGFGcm9tUHJvcHM/LmRvY3MgOiBjZWxsRGF0YUZyb21Qcm9wc1xuICB9LCBbY2VsbERhdGFGcm9tUHJvcHMsIGZpZWxkXSlcblxuICBjb25zdCB7IGNvbmZpZywgZ2V0RW50aXR5Q29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGNvbGxlY3Rpb25zIH0gPSBjb25maWdcbiAgY29uc3QgW2ludGVyc2VjdGlvblJlZiwgZW50cnldID0gdXNlSW50ZXJzZWN0KClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlPFZhbHVlW10+KFtdKVxuICBjb25zdCB7IGRvY3VtZW50cywgZ2V0UmVsYXRpb25zaGlwcyB9ID0gdXNlTGlzdFJlbGF0aW9uc2hpcHMoKVxuICBjb25zdCBbaGFzUmVxdWVzdGVkLCBzZXRIYXNSZXF1ZXN0ZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IGlzQWJvdmVWaWV3cG9ydCA9IGNhblVzZURPTSA/IGVudHJ5Py5ib3VuZGluZ0NsaWVudFJlY3Q/LnRvcCA8IHdpbmRvdy5pbm5lckhlaWdodCA6IGZhbHNlXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoKGNlbGxEYXRhIHx8IHR5cGVvZiBjZWxsRGF0YSA9PT0gJ251bWJlcicpICYmIGlzQWJvdmVWaWV3cG9ydCAmJiAhaGFzUmVxdWVzdGVkKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZXM6IFZhbHVlW10gPSBbXVxuICAgICAgY29uc3QgYXJyYXlDZWxsRGF0YSA9IEFycmF5LmlzQXJyYXkoY2VsbERhdGEpID8gY2VsbERhdGEgOiBbY2VsbERhdGFdXG4gICAgICBhcnJheUNlbGxEYXRhXG4gICAgICAgIC5zbGljZSgwLCBhcnJheUNlbGxEYXRhLmxlbmd0aCA8IHRvdGFsVG9TaG93ID8gYXJyYXlDZWxsRGF0YS5sZW5ndGggOiB0b3RhbFRvU2hvdylcbiAgICAgICAgLmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdvYmplY3QnICYmICdyZWxhdGlvblRvJyBpbiBjZWxsICYmICd2YWx1ZScgaW4gY2VsbCkge1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWVzLnB1c2goY2VsbClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHR5cGVvZiBjZWxsID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY2VsbCA9PT0gJ3N0cmluZycpICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVsYXRpb25UbyA9PT0gJ3N0cmluZydcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgcmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgdmFsdWU6IGNlbGwsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIGdldFJlbGF0aW9uc2hpcHMoZm9ybWF0dGVkVmFsdWVzKVxuICAgICAgc2V0SGFzUmVxdWVzdGVkKHRydWUpXG4gICAgICBzZXRWYWx1ZXMoZm9ybWF0dGVkVmFsdWVzKVxuICAgIH1cbiAgfSwgW2NlbGxEYXRhLCByZWxhdGlvblRvLCBjb2xsZWN0aW9ucywgaXNBYm92ZVZpZXdwb3J0LCBoYXNSZXF1ZXN0ZWQsIGdldFJlbGF0aW9uc2hpcHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhhc1JlcXVlc3RlZCkge1xuICAgICAgc2V0SGFzUmVxdWVzdGVkKGZhbHNlKVxuICAgIH1cbiAgfSwgW2NlbGxEYXRhXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9IHJlZj17aW50ZXJzZWN0aW9uUmVmfT5cbiAgICAgIHt2YWx1ZXMubWFwKCh7IHJlbGF0aW9uVG8sIHZhbHVlIH0sIGkpID0+IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudHNbcmVsYXRpb25Ub11bdmFsdWVdXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uID0gZ2V0RW50aXR5Q29uZmlnKHtcbiAgICAgICAgICBjb2xsZWN0aW9uU2x1ZzogcmVsYXRpb25UbyxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBsYWJlbCA9IGZvcm1hdERvY1RpdGxlKHtcbiAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnOiByZWxhdGVkQ29sbGVjdGlvbixcbiAgICAgICAgICBkYXRhOiBkb2N1bWVudCB8fCBudWxsLFxuICAgICAgICAgIGRhdGVGb3JtYXQ6IGNvbmZpZy5hZG1pbi5kYXRlRm9ybWF0LFxuICAgICAgICAgIGZhbGxiYWNrOiBgJHt0KCdnZW5lcmFsOnVudGl0bGVkJyl9IC0gSUQ6ICR7dmFsdWV9YCxcbiAgICAgICAgICBpMThuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGxldCBmaWxlRmllbGQgPSBudWxsXG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICd1cGxvYWQnKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRQcmV2aWV3QWxsb3dlZCA9ICdkaXNwbGF5UHJldmlldycgaW4gZmllbGQgPyBmaWVsZC5kaXNwbGF5UHJldmlldyA6IHVuZGVmaW5lZFxuICAgICAgICAgIGNvbnN0IHByZXZpZXdBbGxvd2VkID1cbiAgICAgICAgICAgIGZpZWxkUHJldmlld0FsbG93ZWQgPz8gcmVsYXRlZENvbGxlY3Rpb24udXBsb2FkPy5kaXNwbGF5UHJldmlldyA/PyB0cnVlXG5cbiAgICAgICAgICBpZiAocHJldmlld0FsbG93ZWQgJiYgZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGZpbGVGaWVsZCA9IChcbiAgICAgICAgICAgICAgPEZpbGVDZWxsXG4gICAgICAgICAgICAgICAgY2VsbERhdGE9e2xhYmVsfVxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc9e3JlbGF0ZWRDb2xsZWN0aW9ufVxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnPXtyZWxhdGVkQ29sbGVjdGlvbi5zbHVnfVxuICAgICAgICAgICAgICAgIGN1c3RvbUNlbGxQcm9wcz17Y3VzdG9tQ2VsbENvbnRleHR9XG4gICAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICAgIHJvd0RhdGE9e2RvY3VtZW50fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17aX0+XG4gICAgICAgICAgICB7ZG9jdW1lbnQgPT09IGZhbHNlICYmIGAke3QoJ2dlbmVyYWw6dW50aXRsZWQnKX0gLSBJRDogJHt2YWx1ZX1gfVxuICAgICAgICAgICAge2RvY3VtZW50ID09PSBudWxsICYmIGAke3QoJ2dlbmVyYWw6bG9hZGluZycpfS4uLmB9XG4gICAgICAgICAgICB7ZG9jdW1lbnQgPyBmaWxlRmllbGQgfHwgbGFiZWwgOiBudWxsfVxuICAgICAgICAgICAge3ZhbHVlcy5sZW5ndGggPiBpICsgMSAmJiAnLCAnfVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgICAge0FycmF5LmlzQXJyYXkoY2VsbERhdGEpICYmXG4gICAgICAgIGNlbGxEYXRhLmxlbmd0aCA+IHRvdGFsVG9TaG93ICYmXG4gICAgICAgIHQoJ2ZpZWxkczppdGVtc0FuZE1vcmUnLCB7IGNvdW50OiBjZWxsRGF0YS5sZW5ndGggLSB0b3RhbFRvU2hvdywgaXRlbXM6ICcnIH0pfVxuICAgICAge3ZhbHVlcy5sZW5ndGggPT09IDAgJiYgdCgnZ2VuZXJhbDpub0xhYmVsJywgeyBsYWJlbDogZ2V0VHJhbnNsYXRpb24obGFiZWwgfHwgJycsIGkxOG4pIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG4iLCJleHBvcnQgY29uc3QgY2FuVXNlRE9NID0gISEoXG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gIHdpbmRvdy5kb2N1bWVudCAmJlxuICB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuKVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMsIE9wdGlvbk9iamVjdCwgU2VsZWN0RmllbGRDbGllbnQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IG9wdGlvbnNBcmVPYmplY3RzIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdENlbGxQcm9wcyBleHRlbmRzIERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHM8U2VsZWN0RmllbGRDbGllbnQ+IHt9XG5cbmV4cG9ydCBjb25zdCBTZWxlY3RDZWxsOiBSZWFjdC5GQzxTZWxlY3RDZWxsUHJvcHM+ID0gKHsgY2VsbERhdGEsIGZpZWxkOiB7IG9wdGlvbnMgfSB9KSA9PiB7XG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IGZpbmRMYWJlbCA9IChpdGVtczogc3RyaW5nW10pID0+XG4gICAgaXRlbXNcbiAgICAgIC5tYXAoKGkpID0+IHtcbiAgICAgICAgY29uc3QgZm91bmQgPSAob3B0aW9ucyBhcyBPcHRpb25PYmplY3RbXSkuZmlsdGVyKChmOiBPcHRpb25PYmplY3QpID0+IGYudmFsdWUgPT09IGkpPy5bMF1cbiAgICAgICAgICA/LmxhYmVsXG4gICAgICAgIHJldHVybiBnZXRUcmFuc2xhdGlvbihmb3VuZCwgaTE4bilcbiAgICAgIH0pXG4gICAgICAuam9pbignLCAnKVxuXG4gIGxldCBjb250ZW50ID0gJydcbiAgaWYgKG9wdGlvbnNBcmVPYmplY3RzKG9wdGlvbnMpKSB7XG4gICAgY29udGVudCA9IEFycmF5LmlzQXJyYXkoY2VsbERhdGEpXG4gICAgICA/IGZpbmRMYWJlbChjZWxsRGF0YSkgLy8gaGFzTWFueVxuICAgICAgOiBmaW5kTGFiZWwoW2NlbGxEYXRhXSlcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gQXJyYXkuaXNBcnJheShjZWxsRGF0YSlcbiAgICAgID8gY2VsbERhdGEuam9pbignLCAnKSAvLyBoYXNNYW55XG4gICAgICA6IGNlbGxEYXRhXG4gIH1cblxuICByZXR1cm4gPHNwYW4+e2NvbnRlbnR9PC9zcGFuPlxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMsIFRleHRhcmVhRmllbGRDbGllbnQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjb25zdCBUZXh0YXJlYUNlbGw6IFJlYWN0LkZDPERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHM8VGV4dGFyZWFGaWVsZENsaWVudD4+ID0gKHtcbiAgY2VsbERhdGEsXG59KSA9PiB7XG4gIGNvbnN0IHRleHRUb1Nob3cgPSBjZWxsRGF0YT8ubGVuZ3RoID4gMTAwID8gYCR7Y2VsbERhdGEuc3Vic3RyaW5nKDAsIDEwMCl9XFx1MjAyNmAgOiBjZWxsRGF0YVxuICByZXR1cm4gPHNwYW4+e3RleHRUb1Nob3d9PC9zcGFuPlxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyBBcnJheUNlbGwgfSBmcm9tICcuL0FycmF5L2luZGV4LmpzJ1xuaW1wb3J0IHsgQmxvY2tzQ2VsbCB9IGZyb20gJy4vQmxvY2tzL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ2hlY2tib3hDZWxsIH0gZnJvbSAnLi9DaGVja2JveC9pbmRleC5qcydcbmltcG9ydCB7IENvZGVDZWxsIH0gZnJvbSAnLi9Db2RlL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGF0ZUNlbGwgfSBmcm9tICcuL0RhdGUvaW5kZXguanMnXG5pbXBvcnQgeyBGaWxlQ2VsbCB9IGZyb20gJy4vRmlsZS9pbmRleC5qcydcbmltcG9ydCB7IEpTT05DZWxsIH0gZnJvbSAnLi9KU09OL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwQ2VsbCB9IGZyb20gJy4vUmVsYXRpb25zaGlwL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VsZWN0Q2VsbCB9IGZyb20gJy4vU2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgVGV4dGFyZWFDZWxsIH0gZnJvbSAnLi9UZXh0YXJlYS9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IGNlbGxDb21wb25lbnRzID0ge1xuICBhcnJheTogQXJyYXlDZWxsLFxuICBibG9ja3M6IEJsb2Nrc0NlbGwsXG4gIGNoZWNrYm94OiBDaGVja2JveENlbGwsXG4gIGNvZGU6IENvZGVDZWxsLFxuICBkYXRlOiBEYXRlQ2VsbCxcbiAgRmlsZTogRmlsZUNlbGwsXG4gIGpvaW46IFJlbGF0aW9uc2hpcENlbGwsXG4gIGpzb246IEpTT05DZWxsLFxuICByYWRpbzogU2VsZWN0Q2VsbCxcbiAgcmVsYXRpb25zaGlwOiBSZWxhdGlvbnNoaXBDZWxsLFxuICBzZWxlY3Q6IFNlbGVjdENlbGwsXG4gIHRleHRhcmVhOiBUZXh0YXJlYUNlbGwsXG4gIHVwbG9hZDogUmVsYXRpb25zaGlwQ2VsbCxcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUxpc3RRdWVyeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXN0UXVlcnkvaW5kZXguanMnXG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnLi4vUGFnaW5hdGlvbi9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IFJlbGF0aW9uc2hpcFRhYmxlUGFnaW5hdGlvbjogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgZGF0YSwgaGFuZGxlUGFnZUNoYW5nZSB9ID0gdXNlTGlzdFF1ZXJ5KClcblxuICByZXR1cm4gKFxuICAgIDxQYWdpbmF0aW9uXG4gICAgICBoYXNOZXh0UGFnZT17ZGF0YS5oYXNOZXh0UGFnZX1cbiAgICAgIGhhc1ByZXZQYWdlPXtkYXRhLmhhc1ByZXZQYWdlfVxuICAgICAgbGltaXQ9e2RhdGEubGltaXR9XG4gICAgICBuZXh0UGFnZT17ZGF0YS5uZXh0UGFnZSB8fCAyfVxuICAgICAgbnVtYmVyT2ZOZWlnaGJvcnM9ezF9XG4gICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgdm9pZCBoYW5kbGVQYWdlQ2hhbmdlKGUpXG4gICAgICB9fVxuICAgICAgcGFnZT17ZGF0YS5wYWdlIHx8IDF9XG4gICAgICBwcmV2UGFnZT17ZGF0YS5wcmV2UGFnZSB8fCB1bmRlZmluZWR9XG4gICAgICB0b3RhbFBhZ2VzPXtkYXRhLnRvdGFsUGFnZXN9XG4gICAgLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENsaWNrYWJsZUFycm93IH0gZnJvbSAnLi9DbGlja2FibGVBcnJvdy9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgUGFnZSB9IGZyb20gJy4vUGFnZS9pbmRleC5qcydcbmltcG9ydCB7IFNlcGFyYXRvciB9IGZyb20gJy4vU2VwYXJhdG9yL2luZGV4LmpzJ1xuXG5jb25zdCBub2RlVHlwZXMgPSB7XG4gIENsaWNrYWJsZUFycm93LFxuICBQYWdlLFxuICBTZXBhcmF0b3IsXG59XG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdwYWdpbmF0b3InXG5cbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25Qcm9wcyA9IHtcbiAgaGFzTmV4dFBhZ2U/OiBib29sZWFuXG4gIGhhc1ByZXZQYWdlPzogYm9vbGVhblxuICBsaW1pdD86IG51bWJlclxuICBuZXh0UGFnZT86IG51bWJlclxuICBudW1iZXJPZk5laWdoYm9ycz86IG51bWJlclxuICBvbkNoYW5nZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWRcbiAgcGFnZT86IG51bWJlclxuICBwcmV2UGFnZT86IG51bWJlclxuICB0b3RhbFBhZ2VzPzogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIE5vZGUgPVxuICB8IHtcbiAgICAgIHByb3BzPzoge1xuICAgICAgICBkaXJlY3Rpb24/OiAnbGVmdCcgfCAncmlnaHQnXG4gICAgICAgIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gICAgICAgIGlzRmlyc3RQYWdlPzogYm9vbGVhblxuICAgICAgICBpc0xhc3RQYWdlPzogYm9vbGVhblxuICAgICAgICBwYWdlPzogbnVtYmVyXG4gICAgICAgIHVwZGF0ZVBhZ2U6IChwYWdlPzogbnVtYmVyKSA9PiB2b2lkXG4gICAgICB9XG4gICAgICB0eXBlOiAnQ2xpY2thYmxlQXJyb3cnIHwgJ1BhZ2UnIHwgJ1NlcGFyYXRvcidcbiAgICB9XG4gIHwgbnVtYmVyXG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0aW9uOiBSZWFjdC5GQzxQYWdpbmF0aW9uUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBoYXNOZXh0UGFnZSA9IGZhbHNlLFxuICAgIGhhc1ByZXZQYWdlID0gZmFsc2UsXG4gICAgbmV4dFBhZ2UgPSBudWxsLFxuICAgIG51bWJlck9mTmVpZ2hib3JzID0gMSxcbiAgICBvbkNoYW5nZSxcbiAgICBwYWdlOiBjdXJyZW50UGFnZSxcbiAgICBwcmV2UGFnZSA9IG51bGwsXG4gICAgdG90YWxQYWdlcyA9IG51bGwsXG4gIH0gPSBwcm9wc1xuXG4gIGlmICghaGFzUHJldlBhZ2UgJiYgIWhhc05leHRQYWdlKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZVBhZ2UgPSAocGFnZSkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9uQ2hhbmdlKHBhZ2UpXG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIGFycmF5IG9mIGludGVnZXJzIGZvciBlYWNoIHBhZ2VcbiAgY29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbFBhZ2VzIH0sIChfLCBpbmRleCkgPT4gaW5kZXggKyAxKVxuXG4gIC8vIEFzc2lnbiBpbmRpY2VzIGZvciBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZSBvZiBwYWdlcyB0aGF0IHNob3VsZCBiZSBzaG93biBpbiBwYWdpbmF0b3JcbiAgbGV0IHJhbmdlU3RhcnRJbmRleCA9IGN1cnJlbnRQYWdlIC0gMSAtIG51bWJlck9mTmVpZ2hib3JzXG5cbiAgLy8gU2FuaXRpemUgcmFuZ2VTdGFydEluZGV4IGluIGNhc2UgaXQgaXMgbGVzcyB0aGFuIHplcm8gZm9yIHNhZmUgc3BsaXRcbiAgaWYgKHJhbmdlU3RhcnRJbmRleCA8PSAwKSB7XG4gICAgcmFuZ2VTdGFydEluZGV4ID0gMFxuICB9XG5cbiAgY29uc3QgcmFuZ2VFbmRJbmRleCA9IGN1cnJlbnRQYWdlIC0gMSArIG51bWJlck9mTmVpZ2hib3JzICsgMVxuXG4gIC8vIFNsaWNlIG91dCB0aGUgcmFuZ2Ugb2YgcGFnZXMgdGhhdCB3ZSB3YW50IHRvIHJlbmRlclxuICBjb25zdCBub2RlczogTm9kZVtdID0gcGFnZXMuc2xpY2UocmFuZ2VTdGFydEluZGV4LCByYW5nZUVuZEluZGV4KVxuXG4gIC8vIEFkZCBwcmV2IHNlcGFyYXRvciBpZiBuZWNlc3NhcnlcbiAgaWYgKGN1cnJlbnRQYWdlIC0gbnVtYmVyT2ZOZWlnaGJvcnMgLSAxID49IDIpIHtcbiAgICBub2Rlcy51bnNoaWZ0KHsgdHlwZTogJ1NlcGFyYXRvcicgfSlcbiAgfVxuXG4gIC8vIEFkZCBmaXJzdCBwYWdlIGlmIG5lY2Vzc2FyeVxuICBpZiAoY3VycmVudFBhZ2UgPiBudW1iZXJPZk5laWdoYm9ycyArIDEpIHtcbiAgICBub2Rlcy51bnNoaWZ0KHtcbiAgICAgIHR5cGU6ICdQYWdlJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGlzRmlyc3RQYWdlOiB0cnVlLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICB1cGRhdGVQYWdlLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLy8gQWRkIG5leHQgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeVxuICBpZiAoY3VycmVudFBhZ2UgKyBudW1iZXJPZk5laWdoYm9ycyArIDEgPCB0b3RhbFBhZ2VzKSB7XG4gICAgbm9kZXMucHVzaCh7IHR5cGU6ICdTZXBhcmF0b3InIH0pXG4gIH1cblxuICAvLyBBZGQgbGFzdCBwYWdlIGlmIG5lY2Vzc2FyeVxuICBpZiAocmFuZ2VFbmRJbmRleCA8IHRvdGFsUGFnZXMpIHtcbiAgICBub2Rlcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdQYWdlJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGlzTGFzdFBhZ2U6IHRydWUsXG4gICAgICAgIHBhZ2U6IHRvdGFsUGFnZXMsXG4gICAgICAgIHVwZGF0ZVBhZ2UsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvLyBBZGQgcHJldiBhbmQgbmV4dCBhcnJvd3MgYmFzZWQgb24gbmVjZXNzaXR5XG4gIG5vZGVzLnVuc2hpZnQoe1xuICAgIHR5cGU6ICdDbGlja2FibGVBcnJvdycsXG4gICAgcHJvcHM6IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JpZ2h0JyxcbiAgICAgIGlzRGlzYWJsZWQ6ICFoYXNOZXh0UGFnZSxcbiAgICAgIHVwZGF0ZVBhZ2U6ICgpID0+IHVwZGF0ZVBhZ2UobmV4dFBhZ2UgPz8gY3VycmVudFBhZ2UgKyAxKSxcbiAgICB9LFxuICB9KVxuXG4gIG5vZGVzLnVuc2hpZnQoe1xuICAgIHR5cGU6ICdDbGlja2FibGVBcnJvdycsXG4gICAgcHJvcHM6IHtcbiAgICAgIGRpcmVjdGlvbjogJ2xlZnQnLFxuICAgICAgaXNEaXNhYmxlZDogIWhhc1ByZXZQYWdlLFxuICAgICAgdXBkYXRlUGFnZTogKCkgPT4gdXBkYXRlUGFnZShwcmV2UGFnZSA/PyBNYXRoLm1heCgxLCBjdXJyZW50UGFnZSAtIDEpKSxcbiAgICB9LFxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICB7bm9kZXMubWFwKChub2RlLCBpKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFBhZ2UgaXNDdXJyZW50PXtjdXJyZW50UGFnZSA9PT0gbm9kZX0ga2V5PXtpfSBwYWdlPXtub2RlfSB1cGRhdGVQYWdlPXt1cGRhdGVQYWdlfSAvPlxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IE5vZGVUeXBlID0gbm9kZVR5cGVzW25vZGUudHlwZV1cblxuICAgICAgICByZXR1cm4gPE5vZGVUeXBlIGtleT17aX0gey4uLm5vZGUucHJvcHN9IC8+XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY2xpY2thYmxlLWFycm93J1xuXG5leHBvcnQgdHlwZSBDbGlja2FibGVBcnJvd1Byb3BzID0ge1xuICBkaXJlY3Rpb24/OiAnbGVmdCcgfCAncmlnaHQnXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIHVwZGF0ZVBhZ2U/OiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBDbGlja2FibGVBcnJvdzogUmVhY3QuRkM8Q2xpY2thYmxlQXJyb3dQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkaXJlY3Rpb24gPSAncmlnaHQnLCBpc0Rpc2FibGVkID0gZmFsc2UsIHVwZGF0ZVBhZ2UgfSA9IHByb3BzXG5cbiAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICBiYXNlQ2xhc3MsXG4gICAgaXNEaXNhYmxlZCAmJiBgJHtiYXNlQ2xhc3N9LS1pcy1kaXNhYmxlZGAsXG4gICAgZGlyZWN0aW9uICYmIGAke2Jhc2VDbGFzc30tLSR7ZGlyZWN0aW9ufWAsXG4gIF1cbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oJyAnKVxuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXshaXNEaXNhYmxlZCA/IHVwZGF0ZVBhZ2UgOiB1bmRlZmluZWR9XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8Q2hldnJvbkljb24gLz5cbiAgICA8L2J1dHRvbj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIFBhZ2VQcm9wcyA9IHtcbiAgaXNDdXJyZW50PzogYm9vbGVhblxuICBpc0ZpcnN0UGFnZT86IGJvb2xlYW5cbiAgaXNMYXN0UGFnZT86IGJvb2xlYW5cbiAgcGFnZT86IG51bWJlclxuICB1cGRhdGVQYWdlPzogKHBhZ2UpID0+IHZvaWRcbn1cblxuY29uc3QgYmFzZUNsYXNzID0gJ3BhZ2luYXRvcl9fcGFnZSdcblxuZXhwb3J0IGNvbnN0IFBhZ2U6IFJlYWN0LkZDPFBhZ2VQcm9wcz4gPSAoe1xuICBpc0N1cnJlbnQsXG4gIGlzRmlyc3RQYWdlID0gZmFsc2UsXG4gIGlzTGFzdFBhZ2UgPSBmYWxzZSxcbiAgcGFnZSA9IDEsXG4gIHVwZGF0ZVBhZ2UsXG59KSA9PiB7XG4gIGNvbnN0IGNsYXNzZXMgPSBbXG4gICAgYmFzZUNsYXNzLFxuICAgIGlzQ3VycmVudCAmJiBgJHtiYXNlQ2xhc3N9LS1pcy1jdXJyZW50YCxcbiAgICBpc0ZpcnN0UGFnZSAmJiBgJHtiYXNlQ2xhc3N9LS1pcy1maXJzdC1wYWdlYCxcbiAgICBpc0xhc3RQYWdlICYmIGAke2Jhc2VDbGFzc30tLWlzLWxhc3QtcGFnZWAsXG4gIF1cbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oJyAnKVxuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvbiBjbGFzc05hbWU9e2NsYXNzZXN9IG9uQ2xpY2s9eygpID0+IHVwZGF0ZVBhZ2UocGFnZSl9IHR5cGU9XCJidXR0b25cIj5cbiAgICAgIHtwYWdlfVxuICAgIDwvYnV0dG9uPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IFNlcGFyYXRvcjogUmVhY3QuRkMgPSAoKSA9PiA8c3BhbiBjbGFzc05hbWU9XCJwYWdpbmF0b3JfX3NlcGFyYXRvclwiPiZtZGFzaDs8L3NwYW4+XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgSlNPTkZpZWxkQ2xpZW50Q29tcG9uZW50LCBKc29uT2JqZWN0IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdHlwZSBPbk1vdW50IH0gZnJvbSAnQG1vbmFjby1lZGl0b3IvcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5cbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQ29kZUVkaXRvci9jb25zdGFudHMuanMnXG5pbXBvcnQgeyBDb2RlRWRpdG9yIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQ29kZUVkaXRvci9pbmRleC5qcydcbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB3aXRoQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvd2l0aENvbmRpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRpb24gfSBmcm9tICcuLi9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4uL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IG1lcmdlRmllbGRTdHlsZXMgfSBmcm9tICcuLi9tZXJnZUZpZWxkU3R5bGVzLmpzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2pzb24tZmllbGQnXG5cbmNvbnN0IEpTT05GaWVsZENvbXBvbmVudDogSlNPTkZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZDoge1xuICAgICAgYWRtaW46IHsgY2xhc3NOYW1lLCBkZXNjcmlwdGlvbiwgZWRpdG9yT3B0aW9ucywgbWF4SGVpZ2h0IH0gPSB7fSxcbiAgICAgIGpzb25TY2hlbWEsXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgIH0sXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBpbnNlcnRTcGFjZXMgPSBkZWZhdWx0T3B0aW9ucy5pbnNlcnRTcGFjZXMsIHRhYlNpemUgPSBkZWZhdWx0T3B0aW9ucy50YWJTaXplIH0gPVxuICAgIGVkaXRvck9wdGlvbnMgfHwge31cblxuICBjb25zdCBmb3JtYXRKU09OID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBKc29uT2JqZWN0IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnNlcnRTcGFjZXMgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgdGFiU2l6ZSkgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgJ1xcdCcpXG4gICAgfSxcbiAgICBbdGFiU2l6ZSwgaW5zZXJ0U3BhY2VzXSxcbiAgKVxuXG4gIGNvbnN0IFtqc29uRXJyb3IsIHNldEpzb25FcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KClcbiAgY29uc3QgaW5wdXRDaGFuZ2VGcm9tUmVmID0gUmVhY3QudXNlUmVmPCdmb3JtU3RhdGUnIHwgJ2ludGVybmFsRWRpdG9yJz4oJ2Zvcm1TdGF0ZScpXG4gIGNvbnN0IFtyZWNhbGN1bGF0ZWRIZWlnaHRBdCwgc2V0UmVjYWxjdWxhdGVkSGVpZ2h0QXRdID0gdXNlU3RhdGU8bnVtYmVyIHwgdW5kZWZpbmVkPihEYXRlLm5vdygpKVxuXG4gIGNvbnN0IG1lbW9pemVkVmFsaWRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLm9wdGlvbnMsIGpzb25FcnJvciwgcmVxdWlyZWQgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFt2YWxpZGF0ZSwgcmVxdWlyZWQsIGpzb25FcnJvcl0sXG4gIClcblxuICBjb25zdCB7XG4gICAgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIEVycm9yLCBMYWJlbCB9ID0ge30sXG4gICAgZGlzYWJsZWQsXG4gICAgaW5pdGlhbFZhbHVlLFxuICAgIHBhdGgsXG4gICAgc2V0VmFsdWUsXG4gICAgc2hvd0Vycm9yLFxuICAgIHZhbHVlLFxuICB9ID0gdXNlRmllbGQ8SnNvbk9iamVjdD4oe1xuICAgIHBvdGVudGlhbGx5U3RhbGVQYXRoOiBwYXRoRnJvbVByb3BzLFxuICAgIHZhbGlkYXRlOiBtZW1vaXplZFZhbGlkYXRlLFxuICB9KVxuXG4gIGNvbnN0IHN0cmluZ1ZhbHVlUmVmID0gUmVhY3QudXNlUmVmPHN0cmluZz4oZm9ybWF0SlNPTih2YWx1ZSA/PyBpbml0aWFsVmFsdWUpKVxuXG4gIGNvbnN0IGhhbmRsZU1vdW50ID0gdXNlQ2FsbGJhY2s8T25Nb3VudD4oXG4gICAgKGVkaXRvciwgbW9uYWNvKSA9PiB7XG4gICAgICBpZiAoIWpzb25TY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIG1vbmFjby5sYW5ndWFnZXMuanNvbi5qc29uRGVmYXVsdHMuc2V0RGlhZ25vc3RpY3NPcHRpb25zKHtcbiAgICAgICAgZW5hYmxlU2NoZW1hUmVxdWVzdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hczogW1xuICAgICAgICAgIC4uLihtb25hY28ubGFuZ3VhZ2VzLmpzb24uanNvbkRlZmF1bHRzLmRpYWdub3N0aWNzT3B0aW9ucy5zY2hlbWFzIHx8IFtdKSxcbiAgICAgICAgICBqc29uU2NoZW1hLFxuICAgICAgICBdLFxuICAgICAgICB2YWxpZGF0ZTogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHVyaSA9IGpzb25TY2hlbWEudXJpXG4gICAgICBjb25zdCBuZXdVcmkgPSB1cmkuaW5jbHVkZXMoJz8nKVxuICAgICAgICA/IGAke3VyaX0mJHtjcnlwdG8ucmFuZG9tVVVJRCA/IGNyeXB0by5yYW5kb21VVUlEKCkgOiB1dWlkdjQoKX1gXG4gICAgICAgIDogYCR7dXJpfT8ke2NyeXB0by5yYW5kb21VVUlEID8gY3J5cHRvLnJhbmRvbVVVSUQoKSA6IHV1aWR2NCgpfWBcblxuICAgICAgZWRpdG9yLnNldE1vZGVsKFxuICAgICAgICBtb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKGZvcm1hdEpTT04odmFsdWUpIHx8ICcnLCAnanNvbicsIG1vbmFjby5VcmkucGFyc2UobmV3VXJpKSksXG4gICAgICApXG4gICAgfSxcbiAgICBbanNvblNjaGVtYSwgZm9ybWF0SlNPTiwgdmFsdWVdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAocmVhZE9ubHkgfHwgZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpbnB1dENoYW5nZUZyb21SZWYuY3VycmVudCA9ICdpbnRlcm5hbEVkaXRvcidcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0VmFsdWUodmFsID8gSlNPTi5wYXJzZSh2YWwpIDogbnVsbClcbiAgICAgICAgc3RyaW5nVmFsdWVSZWYuY3VycmVudCA9IHZhbFxuICAgICAgICBzZXRKc29uRXJyb3IodW5kZWZpbmVkKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRWYWx1ZSh2YWwgPyB2YWwgOiBudWxsKVxuICAgICAgICBzdHJpbmdWYWx1ZVJlZi5jdXJyZW50ID0gdmFsXG4gICAgICAgIHNldEpzb25FcnJvcihlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlYWRPbmx5LCBkaXNhYmxlZCwgc2V0VmFsdWVdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRDaGFuZ2VGcm9tUmVmLmN1cnJlbnQgPT09ICdmb3JtU3RhdGUnKSB7XG4gICAgICBjb25zdCBuZXdTdHJpbmdWYWx1ZSA9IGZvcm1hdEpTT04odmFsdWUgPz8gaW5pdGlhbFZhbHVlKVxuICAgICAgaWYgKG5ld1N0cmluZ1ZhbHVlICE9PSBzdHJpbmdWYWx1ZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHN0cmluZ1ZhbHVlUmVmLmN1cnJlbnQgPSBuZXdTdHJpbmdWYWx1ZVxuICAgICAgICBzZXRSZWNhbGN1bGF0ZWRIZWlnaHRBdChEYXRlLm5vdygpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0Q2hhbmdlRnJvbVJlZi5jdXJyZW50ID0gJ2Zvcm1TdGF0ZSdcbiAgfSwgW2luaXRpYWxWYWx1ZSwgcGF0aCwgZm9ybWF0SlNPTiwgdmFsdWVdKVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgZmllbGRCYXNlQ2xhc3MsXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBzaG93RXJyb3IgJiYgJ2Vycm9yJyxcbiAgICAgICAgKHJlYWRPbmx5IHx8IGRpc2FibGVkKSAmJiAncmVhZC1vbmx5JyxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgc3R5bGU9e3N0eWxlc31cbiAgICA+XG4gICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgIEZhbGxiYWNrPXtcbiAgICAgICAgICA8RmllbGRMYWJlbCBsYWJlbD17bGFiZWx9IGxvY2FsaXplZD17bG9jYWxpemVkfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7ZmllbGRCYXNlQ2xhc3N9X193cmFwYH0+XG4gICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Vycm9yfVxuICAgICAgICAgIEZhbGxiYWNrPXs8RmllbGRFcnJvciBtZXNzYWdlPXtqc29uRXJyb3J9IHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICA8Q29kZUVkaXRvclxuICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZT1cImpzb25cIlxuICAgICAgICAgIG1heEhlaWdodD17bWF4SGVpZ2h0fVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgb25Nb3VudD17aGFuZGxlTW91bnR9XG4gICAgICAgICAgb3B0aW9ucz17ZWRpdG9yT3B0aW9uc31cbiAgICAgICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgcmVjYWxjdWxhdGVkSGVpZ2h0QXQ9e3JlY2FsY3VsYXRlZEhlaWdodEF0fVxuICAgICAgICAgIHZhbHVlPXtzdHJpbmdWYWx1ZVJlZi5jdXJyZW50fVxuICAgICAgICAgIHdyYXBwZXJQcm9wcz17e1xuICAgICAgICAgICAgaWQ6IGBmaWVsZC0ke3BhdGg/LnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIHtBZnRlcklucHV0fVxuICAgICAgPC9kaXY+XG4gICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudD17RGVzY3JpcHRpb259XG4gICAgICAgIEZhbGxiYWNrPXs8RmllbGREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259IHBhdGg9e3BhdGh9IC8+fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgSlNPTkZpZWxkID0gd2l0aENvbmRpdGlvbihKU09ORmllbGRDb21wb25lbnQpXG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgTnVtYmVyRmllbGRDbGllbnRDb21wb25lbnQsIE51bWJlckZpZWxkQ2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZWFjdFNlbGVjdC90eXBlcy5qcydcblxuaW1wb3J0IHsgUmVhY3RTZWxlY3QgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZWFjdFNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB3aXRoQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvd2l0aENvbmRpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vRmllbGRFcnJvci9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuXG5jb25zdCBOdW1iZXJGaWVsZENvbXBvbmVudDogTnVtYmVyRmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkOiB7XG4gICAgICBhZG1pbjoge1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJGcm9tUHJvcHMsXG4gICAgICAgIHN0ZXAgPSAxLFxuICAgICAgfSA9IHt9IGFzIE51bWJlckZpZWxkQ2xpZW50UHJvcHNbJ2ZpZWxkJ11bJ2FkbWluJ10sXG4gICAgICBoYXNNYW55ID0gZmFsc2UsXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIG1heCA9IEluZmluaXR5LFxuICAgICAgbWF4Um93cyA9IEluZmluaXR5LFxuICAgICAgbWluID0gLUluZmluaXR5LFxuICAgICAgcmVxdWlyZWQsXG4gICAgfSxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2VGcm9tUHJvcHMsXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgbWVtb2l6ZWRWYWxpZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodmFsdWUsIHsgLi4ub3B0aW9ucywgbWF4LCBtaW4sIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIG1pbiwgbWF4LCByZXF1aXJlZF0sXG4gIClcblxuICBjb25zdCB7XG4gICAgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIEVycm9yLCBMYWJlbCB9ID0ge30sXG4gICAgZGlzYWJsZWQsXG4gICAgcGF0aCxcbiAgICBzZXRWYWx1ZSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsdWUsXG4gIH0gPSB1c2VGaWVsZDxudW1iZXIgfCBudW1iZXJbXT4oe1xuICAgIHBvdGVudGlhbGx5U3RhbGVQYXRoOiBwYXRoRnJvbVByb3BzLFxuICAgIHZhbGlkYXRlOiBtZW1vaXplZFZhbGlkYXRlLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KGUudGFyZ2V0LnZhbHVlKVxuICAgICAgbGV0IG5ld1ZhbCA9IHZhbFxuXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbCkpIHtcbiAgICAgICAgbmV3VmFsID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9uQ2hhbmdlRnJvbVByb3BzKG5ld1ZhbClcbiAgICAgIH1cblxuICAgICAgc2V0VmFsdWUobmV3VmFsKVxuICAgIH0sXG4gICAgW29uQ2hhbmdlRnJvbVByb3BzLCBzZXRWYWx1ZV0sXG4gIClcblxuICBjb25zdCBbdmFsdWVUb1JlbmRlciwgc2V0VmFsdWVUb1JlbmRlcl0gPSB1c2VTdGF0ZTxcbiAgICB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiB7IHZhbHVlOiBudW1iZXIgfSB9W11cbiAgPihbXSkgLy8gT25seSBmb3IgaGFzTWFueVxuXG4gIGNvbnN0IGhhbmRsZUhhc01hbnlDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgIGlmICghKHJlYWRPbmx5IHx8IGRpc2FibGVkKSkge1xuICAgICAgICBsZXQgbmV3VmFsdWVcbiAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgIG5ld1ZhbHVlID0gW11cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9uKSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubWFwKChvcHRpb24pID0+IE51bWJlcihvcHRpb24udmFsdWU/LnZhbHVlIHx8IG9wdGlvbi52YWx1ZSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBbTnVtYmVyKHNlbGVjdGVkT3B0aW9uLnZhbHVlPy52YWx1ZSB8fCBzZWxlY3RlZE9wdGlvbi52YWx1ZSldXG4gICAgICAgIH1cblxuICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZWFkT25seSwgZGlzYWJsZWQsIHNldFZhbHVlXSxcbiAgKVxuXG4gIC8vIHVzZUVmZmVjdCB1cGRhdGUgdmFsdWVUb1JlbmRlcjpcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzTWFueSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc2V0VmFsdWVUb1JlbmRlcihcbiAgICAgICAgdmFsdWUubWFwKCh2YWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBgJHt2YWx9JHtpbmRleH1gLCAvLyBhcHBlbmQgaW5kZXggdG8gYXZvaWQgZHVwbGljYXRlIGtleXMgYnV0IGFsbG93IGR1cGxpY2F0ZSBudW1iZXJzXG4gICAgICAgICAgICBsYWJlbDogYCR7dmFsfWAsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gYCR7dmFsfSR7aW5kZXh9YCxcbiAgICAgICAgICAgICAgdmFsdWU6ICh2YWwgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KT8udmFsdWUgfHwgdmFsLFxuICAgICAgICAgICAgfSwgLy8gWW91J3JlIHByb2JhYmx5IHdvbmRlcmluZywgd2h5IHRoZSBoZWxsIGlzIHRoaXMgZG9uZSB0aGF0IHdheT8gV2VsbCwgUmVhY3Qtc2VsZWN0IGF1dG9tYXRpY2FsbHkgdXNlcyBcImxhYmVsLXZhbHVlXCIgYXMgYSBrZXksIHNvIHdlIHdpbGwgZ2V0IHRoYXQgcmVhY3QgZHVwbGljYXRlIGtleSB3YXJuaW5nIGlmIHdlIGp1c3QgcGFzcyBpbiB0aGUgdmFsdWUgYXMgbXVsdGlwbGUgdmFsdWVzIGNhbiBiZSB0aGUgc2FtZS4gU28gd2UgbmVlZCB0byBhcHBlbmQgdGhlIGluZGV4IHRvIHRoZSB0b1N0cmluZygpIG9mIHRoZSB2YWx1ZSB0byBhdm9pZCB0aGF0IHdhcm5pbmcsIGFzIGl0IHVzZXMgdGhhdCBhcyB0aGUga2V5LlxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuICB9LCBbdmFsdWUsIGhhc01hbnldKVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBnZXRUcmFuc2xhdGlvbihwbGFjZWhvbGRlckZyb21Qcm9wcywgaTE4bilcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBmaWVsZEJhc2VDbGFzcyxcbiAgICAgICAgJ251bWJlcicsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc2hvd0Vycm9yICYmICdlcnJvcicsXG4gICAgICAgIChyZWFkT25seSB8fCBkaXNhYmxlZCkgJiYgJ3JlYWQtb25seScsXG4gICAgICAgIGhhc01hbnkgJiYgJ2hhcy1tYW55JyxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgc3R5bGU9e3N0eWxlc31cbiAgICA+XG4gICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgIEZhbGxiYWNrPXtcbiAgICAgICAgICA8RmllbGRMYWJlbCBsYWJlbD17bGFiZWx9IGxvY2FsaXplZD17bG9jYWxpemVkfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7ZmllbGRCYXNlQ2xhc3N9X193cmFwYH0+XG4gICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Vycm9yfVxuICAgICAgICAgIEZhbGxiYWNrPXs8RmllbGRFcnJvciBwYXRoPXtwYXRofSBzaG93RXJyb3I9e3Nob3dFcnJvcn0gLz59XG4gICAgICAgIC8+XG4gICAgICAgIHtCZWZvcmVJbnB1dH1cbiAgICAgICAge2hhc01hbnkgPyAoXG4gICAgICAgICAgPFJlYWN0U2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2BmaWVsZC0ke3BhdGgucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICBmaWx0ZXJPcHRpb249eyhfLCByYXdJbnB1dCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc092ZXJIYXNNYW55ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID49IG1heFJvd3NcbiAgICAgICAgICAgICAgcmV0dXJuIGlzTnVtYmVyKHJhd0lucHV0KSAmJiAhaXNPdmVySGFzTWFueVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICAgICAgICBpc0NyZWF0YWJsZVxuICAgICAgICAgICAgaXNNdWx0aVxuICAgICAgICAgICAgaXNTb3J0YWJsZVxuICAgICAgICAgICAgbm9PcHRpb25zTWVzc2FnZT17KCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc092ZXJIYXNNYW55ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID49IG1heFJvd3NcbiAgICAgICAgICAgICAgaWYgKGlzT3Zlckhhc01hbnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpsaW1pdFJlYWNoZWQnLCB7IG1heDogbWF4Um93cywgdmFsdWU6IHZhbHVlLmxlbmd0aCArIDEgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8vIG51bWJlck9ubHlcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVIYXNNYW55Q2hhbmdlfVxuICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBzaG93RXJyb3I9e3Nob3dFcnJvcn1cbiAgICAgICAgICAgIHZhbHVlPXt2YWx1ZVRvUmVuZGVyIGFzIE9wdGlvbltdfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGlkPXtgZmllbGQtJHtwYXRoLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfVxuICAgICAgICAgICAgICBtYXg9e21heH1cbiAgICAgICAgICAgICAgbWluPXttaW59XG4gICAgICAgICAgICAgIG5hbWU9e3BhdGh9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIG9uV2hlZWw9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmJsdXIoKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHN0ZXA9e3N0ZXB9XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICB2YWx1ZT17dHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogJyd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7QWZ0ZXJJbnB1dH1cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RGVzY3JpcHRpb259XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gcGF0aD17cGF0aH0gLz59XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgTnVtYmVyRmllbGQgPSB3aXRoQ29uZGl0aW9uKE51bWJlckZpZWxkQ29tcG9uZW50KVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFBvaW50RmllbGRDbGllbnRDb21wb25lbnQsIFBvaW50RmllbGRWYWxpZGF0aW9uIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZEVycm9yL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy91c2VGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBtZXJnZUZpZWxkU3R5bGVzIH0gZnJvbSAnLi4vbWVyZ2VGaWVsZFN0eWxlcy5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdwb2ludCdcblxuZXhwb3J0IGNvbnN0IFBvaW50RmllbGRDb21wb25lbnQ6IFBvaW50RmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkOiB7XG4gICAgICBhZG1pbjogeyBjbGFzc05hbWUsIGRlc2NyaXB0aW9uLCBwbGFjZWhvbGRlciwgc3RlcCB9ID0ge30sXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgIH0sXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgbWVtb2l6ZWRWYWxpZGF0ZTogUG9pbnRGaWVsZFZhbGlkYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBwYXRoLFxuICAgIHNldFZhbHVlLFxuICAgIHNob3dFcnJvcixcbiAgICB2YWx1ZSA9IFtudWxsLCBudWxsXSxcbiAgfSA9IHVzZUZpZWxkPFtudW1iZXIsIG51bWJlcl0+KHtcbiAgICBwb3RlbnRpYWxseVN0YWxlUGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZSwgaW5kZXg6IDAgfCAxKSA9PiB7XG4gICAgICBsZXQgdmFsID0gcGFyc2VGbG9hdChlLnRhcmdldC52YWx1ZSlcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsKSkge1xuICAgICAgICB2YWwgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgfVxuICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBbLi4udmFsdWVdXG4gICAgICBjb29yZGluYXRlc1tpbmRleF0gPSB2YWxcbiAgICAgIHNldFZhbHVlKGNvb3JkaW5hdGVzKVxuICAgIH0sXG4gICAgW3NldFZhbHVlLCB2YWx1ZV0sXG4gIClcblxuICBjb25zdCBnZXRDb29yZGluYXRlRmllbGRMYWJlbCA9ICh0eXBlOiAnbGF0aXR1ZGUnIHwgJ2xvbmdpdHVkZScpID0+IHtcbiAgICBjb25zdCBzdWZmaXggPSB0eXBlID09PSAnbG9uZ2l0dWRlJyA/IHQoJ2ZpZWxkczpsb25naXR1ZGUnKSA6IHQoJ2ZpZWxkczpsYXRpdHVkZScpXG4gICAgY29uc3QgZmllbGRMYWJlbCA9IGxhYmVsID8gZ2V0VHJhbnNsYXRpb24obGFiZWwsIGkxOG4pIDogJydcblxuICAgIHJldHVybiBgJHtmaWVsZExhYmVsfSR7ZmllbGRMYWJlbCA/ICcgLSAnIDogJyd9JHtzdWZmaXh9YFxuICB9XG5cbiAgY29uc3Qgc3R5bGVzID0gdXNlTWVtbygoKSA9PiBtZXJnZUZpZWxkU3R5bGVzKGZpZWxkKSwgW2ZpZWxkXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBmaWVsZEJhc2VDbGFzcyxcbiAgICAgICAgYmFzZUNsYXNzLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHNob3dFcnJvciAmJiAnZXJyb3InLFxuICAgICAgICAocmVhZE9ubHkgfHwgZGlzYWJsZWQpICYmICdyZWFkLW9ubHknLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBzdHlsZT17c3R5bGVzfVxuICAgID5cbiAgICAgIDx1bCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgPGxpPlxuICAgICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgICAgICBGYWxsYmFjaz17XG4gICAgICAgICAgICAgIDxGaWVsZExhYmVsXG4gICAgICAgICAgICAgICAgbGFiZWw9e2dldENvb3JkaW5hdGVGaWVsZExhYmVsKCdsb25naXR1ZGUnKX1cbiAgICAgICAgICAgICAgICBsb2NhbGl6ZWQ9e2xvY2FsaXplZH1cbiAgICAgICAgICAgICAgICBwYXRoPXtwYXRofVxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICAgICAgey8qIGRpc2FibGUgZXNsaW50IHJ1bGUgYmVjYXVzZSB0aGUgbGFiZWwgaXMgZHluYW1pYyAqL31cbiAgICAgICAgICAgIHsvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvY29udHJvbC1oYXMtYXNzb2NpYXRlZC1sYWJlbCAqL31cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGlkPXtgZmllbGQtbG9uZ2l0dWRlLSR7cGF0aD8ucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICAgICAgICAgIG5hbWU9e2Ake3BhdGh9LmxvbmdpdHVkZWB9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGUsIDApfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0VHJhbnNsYXRpb24ocGxhY2Vob2xkZXIsIGkxOG4pfVxuICAgICAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ251bWJlcicgPyB2YWx1ZVswXSA6ICcnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtBZnRlcklucHV0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+XG4gICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtMYWJlbH1cbiAgICAgICAgICAgIEZhbGxiYWNrPXtcbiAgICAgICAgICAgICAgPEZpZWxkTGFiZWxcbiAgICAgICAgICAgICAgICBsYWJlbD17Z2V0Q29vcmRpbmF0ZUZpZWxkTGFiZWwoJ2xhdGl0dWRlJyl9XG4gICAgICAgICAgICAgICAgbG9jYWxpemVkPXtsb2NhbGl6ZWR9XG4gICAgICAgICAgICAgICAgcGF0aD17cGF0aH1cbiAgICAgICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtFcnJvcn1cbiAgICAgICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7QmVmb3JlSW5wdXR9XG4gICAgICAgICAgICB7LyogZGlzYWJsZSBlc2xpbnQgcnVsZSBiZWNhdXNlIHRoZSBsYWJlbCBpcyBkeW5hbWljICovfVxuICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9jb250cm9sLWhhcy1hc3NvY2lhdGVkLWxhYmVsICovfVxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtyZWFkT25seSB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgaWQ9e2BmaWVsZC1sYXRpdHVkZS0ke3BhdGg/LnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfVxuICAgICAgICAgICAgICBuYW1lPXtgJHtwYXRofS5sYXRpdHVkZWB9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGUsIDEpfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0VHJhbnNsYXRpb24ocGxhY2Vob2xkZXIsIGkxOG4pfVxuICAgICAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlICYmIHR5cGVvZiB2YWx1ZVsxXSA9PT0gJ251bWJlcicgPyB2YWx1ZVsxXSA6ICcnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtBZnRlcklucHV0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgRmFsbGJhY2s9ezxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gcGF0aD17cGF0aH0gLz59XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBQb2ludEZpZWxkID0gd2l0aENvbmRpdGlvbihQb2ludEZpZWxkQ29tcG9uZW50KVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFJhZGlvRmllbGRDbGllbnRDb21wb25lbnQsIFJhZGlvRmllbGRDbGllbnRQcm9wcyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IG9wdGlvbklzT2JqZWN0IH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdGlvbiB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZEVycm9yL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB3aXRoQ29uZGl0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvd2l0aENvbmRpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IG1lcmdlRmllbGRTdHlsZXMgfSBmcm9tICcuLi9tZXJnZUZpZWxkU3R5bGVzLmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBmaWVsZEJhc2VDbGFzcyB9IGZyb20gJy4uL3NoYXJlZC9pbmRleC5qcydcbmltcG9ydCB7IFJhZGlvIH0gZnJvbSAnLi9SYWRpby9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3JhZGlvLWdyb3VwJ1xuXG5jb25zdCBSYWRpb0dyb3VwRmllbGRDb21wb25lbnQ6IFJhZGlvRmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVNb2RpZnlpbmdGb3JtOiBkaXNhYmxlTW9kaWZ5aW5nRm9ybUZyb21Qcm9wcyxcbiAgICBmaWVsZCxcbiAgICBmaWVsZDoge1xuICAgICAgYWRtaW46IHtcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgbGF5b3V0ID0gJ2hvcml6b250YWwnLFxuICAgICAgfSA9IHt9IGFzIFJhZGlvRmllbGRDbGllbnRQcm9wc1snZmllbGQnXVsnYWRtaW4nXSxcbiAgICAgIGxhYmVsLFxuICAgICAgbG9jYWxpemVkLFxuICAgICAgb3B0aW9ucyA9IFtdLFxuICAgICAgcmVxdWlyZWQsXG4gICAgfSA9IHt9IGFzIFJhZGlvRmllbGRDbGllbnRQcm9wc1snZmllbGQnXSxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2VGcm9tUHJvcHMsXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgICB2YWx1ZTogdmFsdWVGcm9tUHJvcHMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgdXVpZCB9ID0gdXNlRm9ybSgpXG5cbiAgY29uc3QgbWVtb2l6ZWRWYWxpZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZSwgdmFsaWRhdGlvbk9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLnZhbGlkYXRpb25PcHRpb25zLCBvcHRpb25zLCByZXF1aXJlZCB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3ZhbGlkYXRlLCBvcHRpb25zLCByZXF1aXJlZF0sXG4gIClcblxuICBjb25zdCB7XG4gICAgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIEVycm9yLCBMYWJlbCB9ID0ge30sXG4gICAgZGlzYWJsZWQsXG4gICAgcGF0aCxcbiAgICBzZXRWYWx1ZSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsdWU6IHZhbHVlRnJvbUNvbnRleHQsXG4gIH0gPSB1c2VGaWVsZDxzdHJpbmc+KHtcbiAgICBwb3RlbnRpYWxseVN0YWxlUGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCB2YWx1ZSA9IHZhbHVlRnJvbUNvbnRleHQgfHwgdmFsdWVGcm9tUHJvcHNcblxuICBjb25zdCBzdHlsZXMgPSB1c2VNZW1vKCgpID0+IG1lcmdlRmllbGRTdHlsZXMoZmllbGQpLCBbZmllbGRdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGZpZWxkQmFzZUNsYXNzLFxuICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgYCR7YmFzZUNsYXNzfS0tbGF5b3V0LSR7bGF5b3V0fWAsXG4gICAgICAgIHNob3dFcnJvciAmJiAnZXJyb3InLFxuICAgICAgICAocmVhZE9ubHkgfHwgZGlzYWJsZWQpICYmIGAke2Jhc2VDbGFzc30tLXJlYWQtb25seWAsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIHN0eWxlPXtzdHlsZXN9XG4gICAgPlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Vycm9yfVxuICAgICAgICBGYWxsYmFjaz17PEZpZWxkRXJyb3IgcGF0aD17cGF0aH0gc2hvd0Vycm9yPXtzaG93RXJyb3J9IC8+fVxuICAgICAgLz5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtMYWJlbH1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIDxGaWVsZExhYmVsIGxhYmVsPXtsYWJlbH0gbG9jYWxpemVkPXtsb2NhbGl6ZWR9IHBhdGg9e3BhdGh9IHJlcXVpcmVkPXtyZXF1aXJlZH0gLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtmaWVsZEJhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICA8dWwgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9LS1ncm91cGB9IGlkPXtgZmllbGQtJHtwYXRoLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfT5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvblZhbHVlID0gJydcblxuICAgICAgICAgICAgaWYgKG9wdGlvbklzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb24udmFsdWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9wdGlvblZhbHVlID0gb3B0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBTdHJpbmcob3B0aW9uVmFsdWUpID09PSBTdHJpbmcodmFsdWUpXG5cbiAgICAgICAgICAgIGNvbnN0IGlkID0gYGZpZWxkLSR7cGF0aH0tJHtvcHRpb25WYWx1ZX0ke3V1aWQgPyBgLSR7dXVpZH1gIDogJyd9YFxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8bGkga2V5PXtgJHtwYXRofSAtICR7b3B0aW9uVmFsdWV9YH0+XG4gICAgICAgICAgICAgICAgPFJhZGlvXG4gICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkNoYW5nZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlRnJvbVByb3BzKG9wdGlvblZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZE9ubHkgfHwgZGlzYWJsZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUob3B0aW9uVmFsdWUsICEhZGlzYWJsZU1vZGlmeWluZ0Zvcm1Gcm9tUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvcHRpb249e29wdGlvbklzT2JqZWN0KG9wdGlvbikgPyBvcHRpb24gOiB7IGxhYmVsOiBvcHRpb24sIHZhbHVlOiBvcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgICAgICAgICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICB1dWlkPXt1dWlkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvdWw+XG4gICAgICAgIHtBZnRlcklucHV0fVxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBSYWRpb0dyb3VwRmllbGQ6IGFueSA9IHdpdGhDb25kaXRpb24oUmFkaW9Hcm91cEZpZWxkQ29tcG9uZW50KVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IE9wdGlvbk9iamVjdCwgUmFkaW9GaWVsZENsaWVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUVkaXREZXB0aCB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9FZGl0RGVwdGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmFkaW8taW5wdXQnXG5cbmV4cG9ydCBjb25zdCBSYWRpbzogUmVhY3QuRkM8e1xuICBpZDogc3RyaW5nXG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW5cbiAgb25DaGFuZ2U6IFJhZGlvRmllbGRDbGllbnRQcm9wc1snb25DaGFuZ2UnXVxuICBvcHRpb246IE9wdGlvbk9iamVjdFxuICBwYXRoOiBzdHJpbmdcbiAgcmVhZE9ubHk/OiBib29sZWFuXG4gIHV1aWQ/OiBzdHJpbmdcbn0+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaXNTZWxlY3RlZCwgb25DaGFuZ2UsIG9wdGlvbiwgcGF0aCwgcmVhZE9ubHksIHV1aWQgfSA9IHByb3BzXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IGVkaXREZXB0aCA9IHVzZUVkaXREZXB0aCgpXG5cbiAgY29uc3QgaWQgPSBgZmllbGQtJHtwYXRofS0ke29wdGlvbi52YWx1ZX0ke2VkaXREZXB0aCA+IDEgPyBgLSR7ZWRpdERlcHRofWAgOiAnJ30ke3V1aWQgPyBgLSR7dXVpZH1gIDogJyd9YFxuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGh0bWxGb3I9e2lkfT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBpc1NlbGVjdGVkICYmIGAke2Jhc2VDbGFzc30tLWlzLXNlbGVjdGVkYF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHl9XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIG5hbWU9e3BhdGh9XG4gICAgICAgICAgb25DaGFuZ2U9eygpID0+ICh0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbicgPyBvbkNoYW5nZShvcHRpb24udmFsdWUpIDogbnVsbCl9XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgICAgIGAke2Jhc2VDbGFzc31fX3N0eWxlZC1yYWRpb2AsXG4gICAgICAgICAgICByZWFkT25seSAmJiBgJHtiYXNlQ2xhc3N9X19zdHlsZWQtcmFkaW8tLWRpc2FibGVkYCxcbiAgICAgICAgICBdXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xhYmVsYH0+e2dldFRyYW5zbGF0aW9uKG9wdGlvbi5sYWJlbCwgaTE4bil9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9sYWJlbD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFJlbGF0aW9uc2hpcEZpZWxkQ2xpZW50Q29tcG9uZW50LCBWYWx1ZVdpdGhSZWxhdGlvbiB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy91c2VGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgeyBSZWxhdGlvbnNoaXBJbnB1dCB9IGZyb20gJy4vSW5wdXQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHsgUmVsYXRpb25zaGlwSW5wdXQgfVxuXG5jb25zdCBSZWxhdGlvbnNoaXBGaWVsZENvbXBvbmVudDogUmVsYXRpb25zaGlwRmllbGRDbGllbnRDb21wb25lbnQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkOiB7XG4gICAgICBhZG1pbjoge1xuICAgICAgICBhbGxvd0NyZWF0ZSA9IHRydWUsXG4gICAgICAgIGFsbG93RWRpdCA9IHRydWUsXG4gICAgICAgIGFwcGVhcmFuY2UgPSAnc2VsZWN0JyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgaXNTb3J0YWJsZSA9IHRydWUsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBzb3J0T3B0aW9ucyxcbiAgICAgIH0gPSB7fSxcbiAgICAgIGhhc01hbnksXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIHJlbGF0aW9uVG86IHJlbGF0aW9uVG9Qcm9wLFxuICAgICAgcmVxdWlyZWQsXG4gICAgfSxcbiAgICBwYXRoOiBwYXRoRnJvbVByb3BzLFxuICAgIHJlYWRPbmx5LFxuICAgIHZhbGlkYXRlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBtZW1vaXplZFZhbGlkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlLCB2YWxpZGF0aW9uT3B0aW9ucykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodmFsdWUsIHsgLi4udmFsaWRhdGlvbk9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBmaWx0ZXJPcHRpb25zLFxuICAgIGluaXRpYWxWYWx1ZSxcbiAgICBwYXRoLFxuICAgIHNldFZhbHVlLFxuICAgIHNob3dFcnJvcixcbiAgICB2YWx1ZSxcbiAgfSA9IHVzZUZpZWxkPFZhbHVlPih7XG4gICAgcG90ZW50aWFsbHlTdGFsZVBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgdmFsaWRhdGU6IG1lbW9pemVkVmFsaWRhdGUsXG4gIH0pXG5cbiAgY29uc3Qgc3R5bGVzID0gdXNlTWVtbygoKSA9PiBtZXJnZUZpZWxkU3R5bGVzKGZpZWxkKSwgW2ZpZWxkXSlcbiAgY29uc3QgaXNQb2x5bW9ycGhpYyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25Ub1Byb3ApXG4gIGNvbnN0IFtyZWxhdGlvblRvXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+XG4gICAgQXJyYXkuaXNBcnJheShyZWxhdGlvblRvUHJvcCkgPyByZWxhdGlvblRvUHJvcCA6IFtyZWxhdGlvblRvUHJvcF0sXG4gIClcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VIYXNNdWx0aSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXdWYWx1ZTogVmFsdWVXaXRoUmVsYXRpb25bXSkgPT4ge1xuICAgICAgaWYgKCFuZXdWYWx1ZSkge1xuICAgICAgICBzZXRWYWx1ZShudWxsLCBuZXdWYWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgZGlzYWJsZUZvcm1Nb2RpZmljYXRpb24gPSBmYWxzZVxuICAgICAgaWYgKGlzUG9seW1vcnBoaWMpIHtcbiAgICAgICAgZGlzYWJsZUZvcm1Nb2RpZmljYXRpb24gPVxuICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiZcbiAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IG5ld1ZhbHVlLmxlbmd0aCAmJlxuICAgICAgICAgICh2YWx1ZSBhcyBWYWx1ZVdpdGhSZWxhdGlvbltdKS5ldmVyeSgodmFsLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IG5ld1ZhbHVlW2lkeF1cbiAgICAgICAgICAgIHJldHVybiB2YWwudmFsdWUgPT09IG5ld1ZhbC52YWx1ZSAmJiB2YWwucmVsYXRpb25UbyA9PT0gbmV3VmFsLnJlbGF0aW9uVG9cbiAgICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzYWJsZUZvcm1Nb2RpZmljYXRpb24gPVxuICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiZcbiAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IG5ld1ZhbHVlLmxlbmd0aCAmJlxuICAgICAgICAgIHZhbHVlLmV2ZXJ5KCh2YWwsIGlkeCkgPT4gdmFsID09PSBuZXdWYWx1ZVtpZHhdLnZhbHVlKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhVG9TZXQgPSBuZXdWYWx1ZS5tYXAoKHZhbCkgPT4ge1xuICAgICAgICBpZiAoaXNQb2x5bW9ycGhpYykge1xuICAgICAgICAgIHJldHVybiB2YWxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsLnZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHNldFZhbHVlKGRhdGFUb1NldCwgZGlzYWJsZUZvcm1Nb2RpZmljYXRpb24pXG4gICAgfSxcbiAgICBbaXNQb2x5bW9ycGhpYywgc2V0VmFsdWUsIHZhbHVlXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVNpbmdsZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXdWYWx1ZTogVmFsdWVXaXRoUmVsYXRpb24pID0+IHtcbiAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgc2V0VmFsdWUobnVsbCwgbmV3VmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IGRpc2FibGVGb3JtTW9kaWZpY2F0aW9uID0gZmFsc2VcbiAgICAgIGlmIChpc1BvbHltb3JwaGljKSB7XG4gICAgICAgIGRpc2FibGVGb3JtTW9kaWZpY2F0aW9uID1cbiAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgIG5ld1ZhbHVlICYmXG4gICAgICAgICAgKHZhbHVlIGFzIFZhbHVlV2l0aFJlbGF0aW9uKS52YWx1ZSA9PT0gbmV3VmFsdWUudmFsdWUgJiZcbiAgICAgICAgICAodmFsdWUgYXMgVmFsdWVXaXRoUmVsYXRpb24pLnJlbGF0aW9uVG8gPT09IG5ld1ZhbHVlLnJlbGF0aW9uVG9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc2FibGVGb3JtTW9kaWZpY2F0aW9uID0gdmFsdWUgJiYgbmV3VmFsdWUgJiYgdmFsdWUgPT09IG5ld1ZhbHVlLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFUb1NldCA9IGlzUG9seW1vcnBoaWMgPyBuZXdWYWx1ZSA6IG5ld1ZhbHVlLnZhbHVlXG4gICAgICBzZXRWYWx1ZShkYXRhVG9TZXQsIGRpc2FibGVGb3JtTW9kaWZpY2F0aW9uKVxuICAgIH0sXG4gICAgW2lzUG9seW1vcnBoaWMsIHNldFZhbHVlLCB2YWx1ZV0sXG4gIClcblxuICBjb25zdCBtZW1vaXplZFZhbHVlOiBWYWx1ZVdpdGhSZWxhdGlvbiB8IFZhbHVlV2l0aFJlbGF0aW9uW10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGFzTWFueSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcCgodmFsKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpc1BvbHltb3JwaGljXG4gICAgICAgICAgICAgICAgPyB2YWxcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKSA/IHJlbGF0aW9uVG9bMF0gOiByZWxhdGlvblRvLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICApIGFzIFZhbHVlV2l0aFJlbGF0aW9uW11cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/IGlzUG9seW1vcnBoaWNcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgPyByZWxhdGlvblRvWzBdIDogcmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICkgYXMgVmFsdWVXaXRoUmVsYXRpb25cbiAgICB9XG4gIH0sIFtoYXNNYW55LCB2YWx1ZSwgaXNQb2x5bW9ycGhpYywgcmVsYXRpb25Ub10pXG5cbiAgY29uc3QgbWVtb2l6ZWRJbml0aWFsVmFsdWU6IFZhbHVlV2l0aFJlbGF0aW9uIHwgVmFsdWVXaXRoUmVsYXRpb25bXSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChoYXNNYW55ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBBcnJheS5pc0FycmF5KGluaXRpYWxWYWx1ZSlcbiAgICAgICAgICA/IGluaXRpYWxWYWx1ZS5tYXAoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXNQb2x5bW9ycGhpY1xuICAgICAgICAgICAgICAgID8gdmFsXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgPyByZWxhdGlvblRvWzBdIDogcmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBpbml0aWFsVmFsdWVcbiAgICAgICkgYXMgVmFsdWVXaXRoUmVsYXRpb25bXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICAgICA/IGlzUG9seW1vcnBoaWNcbiAgICAgICAgICAgID8gaW5pdGlhbFZhbHVlXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICByZWxhdGlvblRvOiBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pID8gcmVsYXRpb25Ub1swXSA6IHJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIDogaW5pdGlhbFZhbHVlXG4gICAgICApIGFzIFZhbHVlV2l0aFJlbGF0aW9uXG4gICAgfVxuICB9LCBbaW5pdGlhbFZhbHVlLCBpc1BvbHltb3JwaGljLCByZWxhdGlvblRvLCBoYXNNYW55XSlcblxuICByZXR1cm4gKFxuICAgIDxSZWxhdGlvbnNoaXBJbnB1dFxuICAgICAgQWZ0ZXJJbnB1dD17QWZ0ZXJJbnB1dH1cbiAgICAgIGFsbG93Q3JlYXRlPXthbGxvd0NyZWF0ZX1cbiAgICAgIGFsbG93RWRpdD17YWxsb3dFZGl0fVxuICAgICAgYXBwZWFyYW5jZT17YXBwZWFyYW5jZX1cbiAgICAgIEJlZm9yZUlucHV0PXtCZWZvcmVJbnB1dH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgRGVzY3JpcHRpb249e0Rlc2NyaXB0aW9ufVxuICAgICAgZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufVxuICAgICAgRXJyb3I9e0Vycm9yfVxuICAgICAgZmlsdGVyT3B0aW9ucz17ZmlsdGVyT3B0aW9uc31cbiAgICAgIGZvcm1hdERpc3BsYXllZE9wdGlvbnM9e1xuICAgICAgICBpc1BvbHltb3JwaGljID8gdW5kZWZpbmVkIDogKG9wdGlvbnMpID0+IG9wdGlvbnMubWFwKChvcHQpID0+IG9wdC5vcHRpb25zKS5mbGF0KClcbiAgICAgIH1cbiAgICAgIGlzU29ydGFibGU9e2lzU29ydGFibGV9XG4gICAgICBMYWJlbD17TGFiZWx9XG4gICAgICBsYWJlbD17bGFiZWx9XG4gICAgICBsb2NhbGl6ZWQ9e2xvY2FsaXplZH1cbiAgICAgIG1heFJlc3VsdHNQZXJSZXF1ZXN0PXsxMH1cbiAgICAgIG1heFJvd3M9e2ZpZWxkPy5tYXhSb3dzfVxuICAgICAgbWluUm93cz17ZmllbGQ/Lm1pblJvd3N9XG4gICAgICBwYXRoPXtwYXRofVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5IHx8IGRpc2FibGVkfVxuICAgICAgcmVsYXRpb25Ubz17cmVsYXRpb25Ub31cbiAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgIHNob3dFcnJvcj17c2hvd0Vycm9yfVxuICAgICAgc29ydE9wdGlvbnM9e3NvcnRPcHRpb25zIGFzIGFueX1cbiAgICAgIHN0eWxlPXtzdHlsZXN9XG4gICAgICB7Li4uKGhhc01hbnkgPT09IHRydWVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoYXNNYW55OiB0cnVlLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBtZW1vaXplZEluaXRpYWxWYWx1ZSBhcyBWYWx1ZVdpdGhSZWxhdGlvbltdLFxuICAgICAgICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZUhhc011bHRpLFxuICAgICAgICAgICAgdmFsdWU6IG1lbW9pemVkVmFsdWUgYXMgVmFsdWVXaXRoUmVsYXRpb25bXSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgaGFzTWFueTogZmFsc2UsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IG1lbW9pemVkSW5pdGlhbFZhbHVlIGFzIFZhbHVlV2l0aFJlbGF0aW9uLFxuICAgICAgICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZVNpbmdsZSxcbiAgICAgICAgICAgIHZhbHVlOiBtZW1vaXplZFZhbHVlIGFzIFZhbHVlV2l0aFJlbGF0aW9uLFxuICAgICAgICAgIH0pfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFJlbGF0aW9uc2hpcEZpZWxkID0gd2l0aENvbmRpdGlvbihSZWxhdGlvbnNoaXBGaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBEb2N1bWVudEV2ZW50LFxuICBGaWx0ZXJPcHRpb25zUmVzdWx0LFxuICBQYWdpbmF0ZWREb2NzLFxuICBWYWx1ZVdpdGhSZWxhdGlvbixcbiAgV2hlcmUsXG59IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGRlcXVhbCB9IGZyb20gJ2RlcXVhbC9saXRlJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwsIHdvcmRCb3VuZGFyaWVzUmVnZXggfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWR1Y2VyLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgRG9jdW1lbnREcmF3ZXJQcm9wcyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL3R5cGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBMaXN0RHJhd2VyUHJvcHMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9MaXN0RHJhd2VyL3R5cGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBSZWFjdFNlbGVjdEFkYXB0ZXJQcm9wcyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlYWN0U2VsZWN0L3R5cGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBIYXNNYW55VmFsdWVVbmlvbiwgT3B0aW9uLCBSZWxhdGlvbnNoaXBJbnB1dFByb3BzLCBVcGRhdGVSZXN1bHRzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgQWRkTmV3UmVsYXRpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9BZGROZXdSZWxhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50RHJhd2VyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRG9jdW1lbnREcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0RHJhd2VyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTGlzdERyYXdlci9pbmRleC5qcydcbmltcG9ydCB7IFJlYWN0U2VsZWN0IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVhY3RTZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZWRDYWxsYmFjayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZURlYm91bmNlZENhbGxiYWNrLmpzJ1xuaW1wb3J0IHsgdXNlRWZmZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VFZmZlY3RFdmVudC5qcydcbmltcG9ydCB7IHVzZVF1ZXVlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlUXVldWUuanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRFdmVudHMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRFdmVudHMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBzYW5pdGl6ZUZpbHRlck9wdGlvbnNRdWVyeSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zYW5pdGl6ZUZpbHRlck9wdGlvbnNRdWVyeS5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUmVsYXRpb25NYXAgfSBmcm9tICcuL2NyZWF0ZVJlbGF0aW9uTWFwLmpzJ1xuaW1wb3J0IHsgZmluZE9wdGlvbnNCeVZhbHVlIH0gZnJvbSAnLi9maW5kT3B0aW9uc0J5VmFsdWUuanMnXG5pbXBvcnQgeyBvcHRpb25zUmVkdWNlciB9IGZyb20gJy4vb3B0aW9uc1JlZHVjZXIuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IE11bHRpVmFsdWVMYWJlbCB9IGZyb20gJy4vc2VsZWN0LWNvbXBvbmVudHMvTXVsdGlWYWx1ZUxhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2luZ2xlVmFsdWUgfSBmcm9tICcuL3NlbGVjdC1jb21wb25lbnRzL1NpbmdsZVZhbHVlL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmVsYXRpb25zaGlwJ1xuXG5leHBvcnQgY29uc3QgUmVsYXRpb25zaGlwSW5wdXQ6IFJlYWN0LkZDPFJlbGF0aW9uc2hpcElucHV0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBBZnRlcklucHV0LFxuICAgIGFsbG93Q3JlYXRlID0gdHJ1ZSxcbiAgICBhbGxvd0VkaXQgPSB0cnVlLFxuICAgIGFwcGVhcmFuY2UgPSAnc2VsZWN0JyxcbiAgICBCZWZvcmVJbnB1dCxcbiAgICBjbGFzc05hbWUsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgRGVzY3JpcHRpb24sXG4gICAgRXJyb3IsXG4gICAgZmlsdGVyT3B0aW9ucyxcbiAgICBmb3JtYXREaXNwbGF5ZWRPcHRpb25zLFxuICAgIGhhc01hbnksXG4gICAgaW5pdGlhbFZhbHVlLFxuICAgIGlzU29ydGFibGUgPSB0cnVlLFxuICAgIGxhYmVsLFxuICAgIExhYmVsLFxuICAgIGxvY2FsaXplZCxcbiAgICBtYXhSZXN1bHRzUGVyUmVxdWVzdCA9IDEwLFxuICAgIG9uQ2hhbmdlLFxuICAgIHBhdGgsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgcmVhZE9ubHksXG4gICAgcmVsYXRpb25UbyxcbiAgICByZXF1aXJlZCxcbiAgICBzaG93RXJyb3IsXG4gICAgc29ydE9wdGlvbnMsXG4gICAgc3R5bGUsXG4gICAgdmFsdWUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgY29uZmlnLCBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3Qge1xuICAgIHJvdXRlczogeyBhcGkgfSxcbiAgICBzZXJ2ZXJVUkwsXG4gIH0gPSBjb25maWdcblxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuXG4gIGNvbnN0IFtjdXJyZW50bHlPcGVuUmVsYXRpb25zaGlwLCBzZXRDdXJyZW50bHlPcGVuUmVsYXRpb25zaGlwXSA9IHVzZVN0YXRlPFxuICAgIFBhcmFtZXRlcnM8UmVhY3RTZWxlY3RBZGFwdGVyUHJvcHNbJ2N1c3RvbVByb3BzJ11bJ29uRG9jdW1lbnRPcGVuJ10+WzBdXG4gID4oe1xuICAgIGlkOiB1bmRlZmluZWQsXG4gICAgY29sbGVjdGlvblNsdWc6IHVuZGVmaW5lZCxcbiAgICBoYXNSZWFkUGVybWlzc2lvbjogZmFsc2UsXG4gIH0pXG5cbiAgY29uc3QgW2xhc3RGdWxseUxvYWRlZFJlbGF0aW9uLCBzZXRMYXN0RnVsbHlMb2FkZWRSZWxhdGlvbl0gPSB1c2VTdGF0ZSgtMSlcbiAgY29uc3QgW2xhc3RMb2FkZWRQYWdlLCBzZXRMYXN0TG9hZGVkUGFnZV0gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pih7fSlcbiAgY29uc3QgW2Vycm9yTG9hZGluZywgc2V0RXJyb3JMb2FkaW5nXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2VuYWJsZVdvcmRCb3VuZGFyeVNlYXJjaCwgc2V0RW5hYmxlV29yZEJvdW5kYXJ5U2VhcmNoXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbWVudUlzT3Blbiwgc2V0TWVudUlzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgaGFzTG9hZGVkRmlyc3RQYWdlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCB7IHF1ZXVlVGFzayB9ID0gdXNlUXVldWUoKVxuXG4gIGNvbnN0IFtvcHRpb25zLCBkaXNwYXRjaE9wdGlvbnNdID0gdXNlUmVkdWNlcihvcHRpb25zUmVkdWNlciwgW10pXG5cbiAgY29uc3QgdmFsdWVSZWYgPSB1c2VSZWYodmFsdWUpXG5cbiAgY29uc3QgW0RvY3VtZW50RHJhd2VyLCAsIHsgZHJhd2VyU2x1ZywgaXNEcmF3ZXJPcGVuLCBvcGVuRHJhd2VyIH1dID0gdXNlRG9jdW1lbnREcmF3ZXIoe1xuICAgIGlkOiBjdXJyZW50bHlPcGVuUmVsYXRpb25zaGlwLmlkLFxuICAgIGNvbGxlY3Rpb25TbHVnOiBjdXJyZW50bHlPcGVuUmVsYXRpb25zaGlwLmNvbGxlY3Rpb25TbHVnLFxuICB9KVxuXG4gIC8vIEZpbHRlciBzZWxlY3RlZCB2YWx1ZXMgZnJvbSBkaXNwbGF5aW5nIGluIHRoZSBsaXN0IGRyYXdlclxuICBjb25zdCBsaXN0RHJhd2VyRmlsdGVyT3B0aW9ucyA9IHVzZU1lbW88RmlsdGVyT3B0aW9uc1Jlc3VsdD4oKCkgPT4ge1xuICAgIGxldCBuZXdGaWx0ZXJPcHRpb25zID0gZmlsdGVyT3B0aW9uc1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCB2YWx1ZXNCeVJlbGF0aW9uID0gKGhhc01hbnkgPT09IGZhbHNlID8gW3ZhbHVlXSA6IHZhbHVlKS5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XG4gICAgICAgIGlmICghYWNjW3ZhbC5yZWxhdGlvblRvXSkge1xuICAgICAgICAgIGFjY1t2YWwucmVsYXRpb25Ub10gPSBbXVxuICAgICAgICB9XG4gICAgICAgIGFjY1t2YWwucmVsYXRpb25Ub10ucHVzaCh2YWwudmFsdWUpXG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIHt9KVxuXG4gICAgICA7KEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgPyByZWxhdGlvblRvIDogW3JlbGF0aW9uVG9dKS5mb3JFYWNoKChyZWxhdGlvbikgPT4ge1xuICAgICAgICBuZXdGaWx0ZXJPcHRpb25zID0ge1xuICAgICAgICAgIC4uLihuZXdGaWx0ZXJPcHRpb25zIHx8IHt9KSxcbiAgICAgICAgICBbcmVsYXRpb25dOiB7XG4gICAgICAgICAgICAuLi4odHlwZW9mIGZpbHRlck9wdGlvbnM/LltyZWxhdGlvbl0gPT09ICdvYmplY3QnID8gZmlsdGVyT3B0aW9uc1tyZWxhdGlvbl0gOiB7fSksXG4gICAgICAgICAgICAuLi4odmFsdWVzQnlSZWxhdGlvbltyZWxhdGlvbl1cbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgICAgICBub3RfaW46IHZhbHVlc0J5UmVsYXRpb25bcmVsYXRpb25dLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZpbHRlck9wdGlvbnNcbiAgfSwgW2ZpbHRlck9wdGlvbnMsIHZhbHVlLCBoYXNNYW55LCByZWxhdGlvblRvXSlcblxuICBjb25zdCBbXG4gICAgTGlzdERyYXdlcixcbiAgICAsXG4gICAgeyBjbG9zZURyYXdlcjogY2xvc2VMaXN0RHJhd2VyLCBpc0RyYXdlck9wZW46IGlzTGlzdERyYXdlck9wZW4sIG9wZW5EcmF3ZXI6IG9wZW5MaXN0RHJhd2VyIH0sXG4gIF0gPSB1c2VMaXN0RHJhd2VyKHtcbiAgICBjb2xsZWN0aW9uU2x1Z3M6IHJlbGF0aW9uVG8sXG4gICAgZmlsdGVyT3B0aW9uczogbGlzdERyYXdlckZpbHRlck9wdGlvbnMsXG4gIH0pXG5cbiAgY29uc3Qgb25MaXN0U2VsZWN0ID0gdXNlQ2FsbGJhY2s8Tm9uTnVsbGFibGU8TGlzdERyYXdlclByb3BzWydvblNlbGVjdCddPj4oXG4gICAgKHsgY29sbGVjdGlvblNsdWcsIGRvYyB9KSA9PiB7XG4gICAgICBpZiAoaGFzTWFueSkge1xuICAgICAgICBvbkNoYW5nZShbXG4gICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVsYXRpb25UbzogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICB2YWx1ZTogZG9jLmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pXG4gICAgICB9IGVsc2UgaWYgKGhhc01hbnkgPT09IGZhbHNlKSB7XG4gICAgICAgIG9uQ2hhbmdlKHtcbiAgICAgICAgICByZWxhdGlvblRvOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICB2YWx1ZTogZG9jLmlkLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjbG9zZUxpc3REcmF3ZXIoKVxuICAgIH0sXG4gICAgW2hhc01hbnksIG9uQ2hhbmdlLCBjbG9zZUxpc3REcmF3ZXIsIHZhbHVlXSxcbiAgKVxuXG4gIGNvbnN0IG9wZW5EcmF3ZXJXaGVuUmVsYXRpb25DaGFuZ2VzID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IHVwZGF0ZVJlc3VsdHM6IFVwZGF0ZVJlc3VsdHMgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgZmlsdGVyT3B0aW9ucyxcbiAgICAgIGhhc01hbnk6IGhhc01hbnlBcmcsXG4gICAgICBsYXN0RnVsbHlMb2FkZWRSZWxhdGlvbjogbGFzdEZ1bGx5TG9hZGVkUmVsYXRpb25BcmcsXG4gICAgICBsYXN0TG9hZGVkUGFnZTogbGFzdExvYWRlZFBhZ2VBcmcsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBzZWFyY2g6IHNlYXJjaEFyZyxcbiAgICAgIHNvcnQsXG4gICAgICB2YWx1ZTogdmFsdWVBcmcsXG4gICAgfSkgPT4ge1xuICAgICAgaWYgKCFwZXJtaXNzaW9ucykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHF1ZXVlVGFzayhhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RGdWxseUxvYWRlZFJlbGF0aW9uVG9Vc2UgPVxuICAgICAgICAgIHR5cGVvZiBsYXN0RnVsbHlMb2FkZWRSZWxhdGlvbkFyZyAhPT0gJ3VuZGVmaW5lZCcgPyBsYXN0RnVsbHlMb2FkZWRSZWxhdGlvbkFyZyA6IC0xXG5cbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKSA/IHJlbGF0aW9uVG8gOiBbcmVsYXRpb25Ub11cbiAgICAgICAgY29uc3QgcmVsYXRpb25zVG9GZXRjaCA9XG4gICAgICAgICAgbGFzdEZ1bGx5TG9hZGVkUmVsYXRpb25Ub1VzZSA9PT0gLTFcbiAgICAgICAgICAgID8gcmVsYXRpb25zXG4gICAgICAgICAgICA6IHJlbGF0aW9ucy5zbGljZShsYXN0RnVsbHlMb2FkZWRSZWxhdGlvblRvVXNlICsgMSlcblxuICAgICAgICBsZXQgcmVzdWx0c0ZldGNoZWQgPSAwXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uTWFwID0gY3JlYXRlUmVsYXRpb25NYXAoXG4gICAgICAgICAgaGFzTWFueUFyZyA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgaGFzTWFueTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWxhdGlvblRvLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUFyZyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgaGFzTWFueTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVBcmcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgIClcblxuICAgICAgICBpZiAoIWVycm9yTG9hZGluZykge1xuICAgICAgICAgIGF3YWl0IHJlbGF0aW9uc1RvRmV0Y2gucmVkdWNlKGFzeW5jIChwcmlvclJlbGF0aW9uLCByZWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25GaWx0ZXJPcHRpb24gPSBmaWx0ZXJPcHRpb25zPy5bcmVsYXRpb25dXG5cbiAgICAgICAgICAgIGxldCBsYXN0TG9hZGVkUGFnZVRvVXNlXG4gICAgICAgICAgICBpZiAoc2VhcmNoICE9PSBzZWFyY2hBcmcpIHtcbiAgICAgICAgICAgICAgbGFzdExvYWRlZFBhZ2VUb1VzZSA9IDFcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxhc3RMb2FkZWRQYWdlVG9Vc2UgPSAobGFzdExvYWRlZFBhZ2VBcmdbcmVsYXRpb25dIHx8IDApICsgMVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgcHJpb3JSZWxhdGlvblxuXG4gICAgICAgICAgICBpZiAocmVsYXRpb25GaWx0ZXJPcHRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHNldExhc3RGdWxseUxvYWRlZFJlbGF0aW9uKHJlbGF0aW9ucy5pbmRleE9mKHJlbGF0aW9uKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHRzRmV0Y2hlZCA8IDEwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZzogcmVsYXRpb24gfSlcbiAgICAgICAgICAgICAgY29uc3QgZmllbGRUb1NlYXJjaCA9IGNvbGxlY3Rpb24/LmFkbWluPy51c2VBc1RpdGxlIHx8ICdpZCdcbiAgICAgICAgICAgICAgbGV0IGZpZWxkVG9Tb3J0ID0gY29sbGVjdGlvbj8uZGVmYXVsdFNvcnQgfHwgJ2lkJ1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvcnRPcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGZpZWxkVG9Tb3J0ID0gc29ydE9wdGlvbnNcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0T3B0aW9ucz8uW3JlbGF0aW9uXSkge1xuICAgICAgICAgICAgICAgIGZpZWxkVG9Tb3J0ID0gc29ydE9wdGlvbnNbcmVsYXRpb25dXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBxdWVyeToge1xuICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cbiAgICAgICAgICAgICAgICB3aGVyZTogV2hlcmVcbiAgICAgICAgICAgICAgfSA9IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICAgICAgICBkcmFmdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsaW1pdDogbWF4UmVzdWx0c1BlclJlcXVlc3QsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhZ2U6IGxhc3RMb2FkZWRQYWdlVG9Vc2UsXG4gICAgICAgICAgICAgICAgc2VsZWN0OiB7XG4gICAgICAgICAgICAgICAgICBbZmllbGRUb1NlYXJjaF06IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmaWVsZFRvU29ydCxcbiAgICAgICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgICAgYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm90X2luOiByZWxhdGlvbk1hcFtyZWxhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzZWFyY2hBcmcpIHtcbiAgICAgICAgICAgICAgICBxdWVyeS53aGVyZS5hbmQucHVzaCh7XG4gICAgICAgICAgICAgICAgICBbZmllbGRUb1NlYXJjaF06IHtcbiAgICAgICAgICAgICAgICAgICAgbGlrZTogc2VhcmNoQXJnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uRmlsdGVyT3B0aW9uICYmIHR5cGVvZiByZWxhdGlvbkZpbHRlck9wdGlvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkud2hlcmUuYW5kLnB1c2gocmVsYXRpb25GaWx0ZXJPcHRpb24pXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzYW5pdGl6ZUZpbHRlck9wdGlvbnNRdWVyeShxdWVyeS53aGVyZSlcblxuICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICAgIGFwaVJvdXRlOiBhcGksXG4gICAgICAgICAgICAgICAgICBwYXRoOiBgLyR7cmVsYXRpb259YCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBib2R5OiBxcy5zdHJpbmdpZnkocXVlcnkpLFxuICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGF5bG9hZC1IVFRQLU1ldGhvZC1PdmVycmlkZSc6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBQYWdpbmF0ZWREb2NzPHVua25vd24+ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICAgICAgc2V0TGFzdExvYWRlZFBhZ2UoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBbcmVsYXRpb25dOiBsYXN0TG9hZGVkUGFnZVRvVXNlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEubmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgIHNldExhc3RGdWxseUxvYWRlZFJlbGF0aW9uKHJlbGF0aW9ucy5pbmRleE9mKHJlbGF0aW9uKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5kb2NzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNGZXRjaGVkICs9IGRhdGEuZG9jcy5sZW5ndGhcblxuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FERCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgZG9jczogZGF0YS5kb2NzLFxuICAgICAgICAgICAgICAgICAgICBpMThuLFxuICAgICAgICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgICAgICBzZXRMYXN0RnVsbHlMb2FkZWRSZWxhdGlvbihyZWxhdGlvbnMuaW5kZXhPZihyZWxhdGlvbikpXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdBREQnLFxuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGRvY3M6IFtdLFxuICAgICAgICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgICAgICAgIGlkczogcmVsYXRpb25NYXBbcmVsYXRpb25dLFxuICAgICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldEVycm9yTG9hZGluZyh0KCdlcnJvcjp1bnNwZWNpZmljJykpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25TdWNjZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvblN1Y2Nlc3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgcXVldWVUYXNrLFxuICAgICAgcmVsYXRpb25UbyxcbiAgICAgIGVycm9yTG9hZGluZyxcbiAgICAgIHNlYXJjaCxcbiAgICAgIGdldEVudGl0eUNvbmZpZyxcbiAgICAgIHNvcnRPcHRpb25zLFxuICAgICAgbWF4UmVzdWx0c1BlclJlcXVlc3QsXG4gICAgICBsb2NhbGUsXG4gICAgICBhcGksXG4gICAgICBpMThuLFxuICAgICAgY29uZmlnLFxuICAgICAgdCxcbiAgICBdLFxuICApXG5cbiAgY29uc3QgdXBkYXRlU2VhcmNoID0gdXNlRGVib3VuY2VkQ2FsbGJhY2s8eyBzZWFyY2g6IHN0cmluZyB9ICYgSGFzTWFueVZhbHVlVW5pb24+KFxuICAgICh7IGhhc01hbnk6IGhhc01hbnlBcmcsIHNlYXJjaDogc2VhcmNoQXJnLCB2YWx1ZSB9KSA9PiB7XG4gICAgICB1cGRhdGVSZXN1bHRzRWZmZWN0RXZlbnQoe1xuICAgICAgICBmaWx0ZXJPcHRpb25zLFxuICAgICAgICBsYXN0TG9hZGVkUGFnZToge30sXG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hBcmcsXG4gICAgICAgIHNvcnQ6IHRydWUsXG4gICAgICAgIC4uLihoYXNNYW55QXJnID09PSB0cnVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGhhc01hbnk6IGhhc01hbnlBcmcsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBoYXNNYW55OiBoYXNNYW55QXJnLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgfSlcbiAgICAgIHNldFNlYXJjaChzZWFyY2hBcmcpXG4gICAgfSxcbiAgICAzMDAsXG4gIClcblxuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb25zOiB7IHNlYXJjaDogc3RyaW5nIH0gJiBIYXNNYW55VmFsdWVVbmlvbikgPT4ge1xuICAgICAgaWYgKHNlYXJjaCAhPT0gb3B0aW9ucy5zZWFyY2gpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpXG4gICAgICAgIHNldExhc3RMb2FkZWRQYWdlKHt9KVxuICAgICAgICB1cGRhdGVTZWFyY2gob3B0aW9ucylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZWFyY2gsIHVwZGF0ZVNlYXJjaF0sXG4gIClcblxuICBjb25zdCBoYW5kbGVWYWx1ZUNoYW5nZSA9IHVzZUVmZmVjdEV2ZW50KCh7IGhhc01hbnk6IGhhc01hbnlBcmcsIHZhbHVlIH06IEhhc01hbnlWYWx1ZVVuaW9uKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpb25NYXAgPSBjcmVhdGVSZWxhdGlvbk1hcChcbiAgICAgIGhhc01hbnlBcmcgPT09IHRydWVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoYXNNYW55OiBoYXNNYW55QXJnLFxuICAgICAgICAgICAgcmVsYXRpb25UbyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBoYXNNYW55OiBoYXNNYW55QXJnLFxuICAgICAgICAgICAgcmVsYXRpb25UbyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgKVxuXG4gICAgdm9pZCBPYmplY3QuZW50cmllcyhyZWxhdGlvbk1hcCkucmVkdWNlKGFzeW5jIChwcmlvclJlbGF0aW9uLCBbcmVsYXRpb24sIGlkc10pID0+IHtcbiAgICAgIGF3YWl0IHByaW9yUmVsYXRpb25cblxuICAgICAgY29uc3QgaWRzVG9Mb2FkID0gaWRzLmZpbHRlcigoaWQpID0+IHtcbiAgICAgICAgcmV0dXJuICFvcHRpb25zLmZpbmQoKG9wdGlvbkdyb3VwKSA9PlxuICAgICAgICAgIG9wdGlvbkdyb3VwPy5vcHRpb25zPy5maW5kKFxuICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBpZCAmJiBvcHRpb24ucmVsYXRpb25UbyA9PT0gcmVsYXRpb24sXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgaWYgKGlkc1RvTG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZzogcmVsYXRpb24gfSlcbiAgICAgICAgY29uc3QgZmllbGRUb1NlbGVjdCA9IGNvbGxlY3Rpb24/LmFkbWluPy51c2VBc1RpdGxlIHx8ICdpZCdcblxuICAgICAgICBjb25zdCBxdWVyeSA9IHtcbiAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICBkcmFmdDogdHJ1ZSxcbiAgICAgICAgICBsaW1pdDogaWRzVG9Mb2FkLmxlbmd0aCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgc2VsZWN0OiB7XG4gICAgICAgICAgICBbZmllbGRUb1NlbGVjdF06IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgaW46IGlkc1RvTG9hZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZXJyb3JMb2FkaW5nKSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgICAgICAgcGF0aDogYC8ke3JlbGF0aW9ufWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYm9keTogcXMuc3RyaW5naWZ5KHF1ZXJ5KSxcbiAgICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnWC1QYXlsb2FkLUhUVFAtTWV0aG9kLU92ZXJyaWRlJzogJ0dFVCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGRvY3MgPSBbXVxuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICBkb2NzID0gZGF0YS5kb2NzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlzcGF0Y2hPcHRpb25zKHtcbiAgICAgICAgICAgIHR5cGU6ICdBREQnLFxuICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGRvY3MsXG4gICAgICAgICAgICBpMThuLFxuICAgICAgICAgICAgaWRzOiBpZHNUb0xvYWQsXG4gICAgICAgICAgICBzb3J0OiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcbiAgfSlcblxuICBjb25zdCB7IG1vc3RSZWNlbnRVcGRhdGUgfSA9IHVzZURvY3VtZW50RXZlbnRzKClcblxuICBjb25zdCBoYW5kbGVEb2N1bWVudFVwZGF0ZUV2ZW50ID0gdXNlRWZmZWN0RXZlbnQoKG1vc3RSZWNlbnRVcGRhdGU6IERvY3VtZW50RXZlbnQpID0+IHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBkb2NJRCA9IG1vc3RSZWNlbnRVcGRhdGUuZG9jLmlkXG5cbiAgICBsZXQgaXNNYXRjaGluZ1VwZGF0ZSA9IGZhbHNlXG4gICAgaWYgKG1vc3RSZWNlbnRVcGRhdGUub3BlcmF0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgaWYgKGhhc01hbnkgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV1cbiAgICAgICAgaXNNYXRjaGluZ1VwZGF0ZSA9IGN1cnJlbnRWYWx1ZS5zb21lKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlID09PSBkb2NJRCAmJiBvcHRpb24ucmVsYXRpb25UbyA9PT0gbW9zdFJlY2VudFVwZGF0ZS5lbnRpdHlTbHVnXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGhhc01hbnkgPT09IGZhbHNlKSB7XG4gICAgICAgIGlzTWF0Y2hpbmdVcGRhdGUgPVxuICAgICAgICAgIHZhbHVlPy52YWx1ZSA9PT0gZG9jSUQgJiYgdmFsdWU/LnJlbGF0aW9uVG8gPT09IG1vc3RSZWNlbnRVcGRhdGUuZW50aXR5U2x1Z1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobW9zdFJlY2VudFVwZGF0ZS5vcGVyYXRpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICAvLyBcIkNyZWF0ZSBOZXdcIiBkcmF3ZXIgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGlzIGRyYXdlciBzaG91bGRcbiAgICAgIC8vIHNldCB0aGUgdmFsdWUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZG9jdW1lbnQuXG4gICAgICAvLyBTZWUgdGVzdCBcInNob3VsZCBjcmVhdGUgZG9jdW1lbnQgd2l0aGluIGRvY3VtZW50IGRyYXdlciA+IGhhcyBvbmVcIlxuICAgICAgaXNNYXRjaGluZ1VwZGF0ZSA9IG1vc3RSZWNlbnRVcGRhdGUuZHJhd2VyU2x1ZyA9PT0gZHJhd2VyU2x1Z1xuICAgIH1cblxuICAgIGlmICghaXNNYXRjaGluZ1VwZGF0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnOiBtb3N0UmVjZW50VXBkYXRlLmVudGl0eVNsdWcgfSlcblxuICAgIGRpc3BhdGNoT3B0aW9ucyh7XG4gICAgICB0eXBlOiAnVVBEQVRFJyxcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBjb25maWcsXG4gICAgICBkb2M6IG1vc3RSZWNlbnRVcGRhdGUuZG9jLFxuICAgICAgaTE4bixcbiAgICB9KVxuXG4gICAgaWYgKGhhc01hbnkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHZhbHVlID8gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKSA6IFtdXG5cbiAgICAgIGNvbnN0IHZhbHVlc1RvU2V0ID0gY3VycmVudFZhbHVlLm1hcCgob3B0aW9uOiBWYWx1ZVdpdGhSZWxhdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlbGF0aW9uVG86IG9wdGlvbi52YWx1ZSA9PT0gZG9jSUQgPyBtb3N0UmVjZW50VXBkYXRlLmVudGl0eVNsdWcgOiBvcHRpb24ucmVsYXRpb25UbyxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBvbkNoYW5nZSh2YWx1ZXNUb1NldClcbiAgICB9IGVsc2UgaWYgKGhhc01hbnkgPT09IGZhbHNlKSB7XG4gICAgICBvbkNoYW5nZSh7IHJlbGF0aW9uVG86IG1vc3RSZWNlbnRVcGRhdGUuZW50aXR5U2x1ZywgdmFsdWU6IGRvY0lEIH0pXG4gICAgfVxuICB9KVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gZG9jdW1lbnQgdXBkYXRlIGV2ZW50cy4gSWYgeW91IGVkaXQgYSByZWxhdGVkIGRvY3VtZW50IGZyb20gYSBkcmF3ZXIgYW5kIHNhdmUgaXQsIHRoaXMgZXZlbnRcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuIFdlIHRoZW4gbmVlZCB1cCB1cGRhdGUgdGhlIGxhYmVsIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlucHV0LCBhcyB0aGUgdXNlQXNMYWJlbCBmaWVsZCBjb3VsZCBoYXZlIGNoYW5nZWQuXG4gICAqXG4gICAqIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uU2F2ZSBjYWxsYmFjayBvbiB0aGUgZG9jdW1lbnQgZHJhd2VyLCBhcyB0aGUgb25TYXZlIGNhbGxiYWNrIGlzIG5vdCB0cmlnZ2VyZWRcbiAgICogd2hlbiB5b3Ugc2F2ZSBhIGRvY3VtZW50IGZyb20gYSBkcmF3ZXIgb3BlbmVkIGJ5IGEgKmRpZmZlcmVudCogcmVsYXRpb25zaGlwIChvciBhbnkgb3RoZXIpIGZpZWxkLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9zdFJlY2VudFVwZGF0ZSkge1xuICAgICAgaGFuZGxlRG9jdW1lbnRVcGRhdGVFdmVudChtb3N0UmVjZW50VXBkYXRlKVxuICAgIH1cbiAgfSwgW21vc3RSZWNlbnRVcGRhdGVdKVxuXG4gIGNvbnN0IG9uRHVwbGljYXRlID0gdXNlQ2FsbGJhY2s8RG9jdW1lbnREcmF3ZXJQcm9wc1snb25EdXBsaWNhdGUnXT4oXG4gICAgKGFyZ3MpID0+IHtcbiAgICAgIGRpc3BhdGNoT3B0aW9ucyh7XG4gICAgICAgIHR5cGU6ICdBREQnLFxuICAgICAgICBjb2xsZWN0aW9uOiBhcmdzLmNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZG9jczogW2FyZ3MuZG9jXSxcbiAgICAgICAgaTE4bixcbiAgICAgICAgc29ydDogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChoYXNNYW55KSB7XG4gICAgICAgIG9uQ2hhbmdlKFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICA/IHZhbHVlLmNvbmNhdCh7XG4gICAgICAgICAgICAgICAgcmVsYXRpb25UbzogYXJncy5jb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MuZG9jLmlkLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICApXG4gICAgICB9IGVsc2UgaWYgKGhhc01hbnkgPT09IGZhbHNlKSB7XG4gICAgICAgIG9uQ2hhbmdlKHtcbiAgICAgICAgICByZWxhdGlvblRvOiBhcmdzLmNvbGxlY3Rpb25Db25maWcuc2x1ZyxcbiAgICAgICAgICB2YWx1ZTogYXJncy5kb2MuaWQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbaTE4biwgY29uZmlnLCBoYXNNYW55LCBvbkNoYW5nZSwgdmFsdWVdLFxuICApXG5cbiAgY29uc3Qgb25EZWxldGUgPSB1c2VDYWxsYmFjazxEb2N1bWVudERyYXdlclByb3BzWydvbkRlbGV0ZSddPihcbiAgICAoYXJncykgPT4ge1xuICAgICAgZGlzcGF0Y2hPcHRpb25zKHtcbiAgICAgICAgaWQ6IGFyZ3MuaWQsXG4gICAgICAgIHR5cGU6ICdSRU1PVkUnLFxuICAgICAgICBjb2xsZWN0aW9uOiBhcmdzLmNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaTE4bixcbiAgICAgIH0pXG5cbiAgICAgIGlmIChoYXNNYW55KSB7XG4gICAgICAgIG9uQ2hhbmdlKFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICA/IHZhbHVlLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZSAhPT0gYXJncy5pZFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNoYW5nZShudWxsKVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9LFxuICAgIFtpMThuLCBjb25maWcsIGhhc01hbnksIG9uQ2hhbmdlLCB2YWx1ZV0sXG4gIClcblxuICBjb25zdCBmaWx0ZXJPcHRpb24gPSB1c2VDYWxsYmFjaygoaXRlbTogT3B0aW9uLCBzZWFyY2hGaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgIGlmICghc2VhcmNoRmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCByID0gd29yZEJvdW5kYXJpZXNSZWdleChzZWFyY2hGaWx0ZXIgfHwgJycpXG4gICAgLy8gYnJlYWtpbmcgdGhlIGxhYmVscyB0byBzZWFyY2ggaW50byBzbWFsbGVyIHBhcnRzIGluY3JlYXNlcyBwZXJmb3JtYW5jZVxuICAgIGNvbnN0IGJyZWFrQXBhcnRUaHJlc2hvbGQgPSAyNTBcbiAgICBsZXQgbGFiZWxTdHJpbmcgPSBTdHJpbmcoaXRlbS5sYWJlbClcbiAgICAvLyBzdHJpbmdzIGxlc3MgdGhhbiBicmVha0FwYXJ0VGhyZXNob2xkIGxlbmd0aCB3b24ndCBiZSBjaHVua2VkXG4gICAgd2hpbGUgKGxhYmVsU3RyaW5nLmxlbmd0aCA+IGJyZWFrQXBhcnRUaHJlc2hvbGQpIHtcbiAgICAgIC8vIHNsaWNpbmcgYnkgdGhlIG5leHQgc3BhY2UgYWZ0ZXIgdGhlIGxlbmd0aCBvZiB0aGUgc2VhcmNoIGlucHV0IHByZXZlbnRzIHNsaWNpbmcgdGhlIHN0cmluZyB1cCBieSBwYXJ0aWFsIHdvcmRzXG4gICAgICBjb25zdCBpbmRleE9mU3BhY2UgPSBsYWJlbFN0cmluZy5pbmRleE9mKCcgJywgc2VhcmNoRmlsdGVyLmxlbmd0aClcbiAgICAgIGlmIChcbiAgICAgICAgci50ZXN0KGxhYmVsU3RyaW5nLnNsaWNlKDAsIGluZGV4T2ZTcGFjZSA9PT0gLTEgPyBzZWFyY2hGaWx0ZXIubGVuZ3RoIDogaW5kZXhPZlNwYWNlICsgMSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGxhYmVsU3RyaW5nID0gbGFiZWxTdHJpbmcuc2xpY2UoaW5kZXhPZlNwYWNlID09PSAtMSA/IHNlYXJjaEZpbHRlci5sZW5ndGggOiBpbmRleE9mU3BhY2UgKyAxKVxuICAgIH1cbiAgICByZXR1cm4gci50ZXN0KGxhYmVsU3RyaW5nLnNsaWNlKC1icmVha0FwYXJ0VGhyZXNob2xkKSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgb25Eb2N1bWVudE9wZW4gPSB1c2VDYWxsYmFjazxSZWFjdFNlbGVjdEFkYXB0ZXJQcm9wc1snY3VzdG9tUHJvcHMnXVsnb25Eb2N1bWVudE9wZW4nXT4oXG4gICAgKHsgaWQsIGNvbGxlY3Rpb25TbHVnLCBoYXNSZWFkUGVybWlzc2lvbiwgb3BlbkluTmV3VGFiIH0pID0+IHtcbiAgICAgIGlmIChvcGVuSW5OZXdUYWIpIHtcbiAgICAgICAgaWYgKGhhc1JlYWRQZXJtaXNzaW9uICYmIGlkICYmIGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICAgICAgY29uc3QgZG9jVXJsID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgYWRtaW5Sb3V0ZTogY29uZmlnLnJvdXRlcy5hZG1pbixcbiAgICAgICAgICAgIHBhdGg6IGAvY29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uU2x1Z30vJHtpZH1gLFxuICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB3aW5kb3cub3Blbihkb2NVcmwsICdfYmxhbmsnKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcGVuRHJhd2VyV2hlblJlbGF0aW9uQ2hhbmdlcy5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgICAgIHNldEN1cnJlbnRseU9wZW5SZWxhdGlvbnNoaXAoe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgIGhhc1JlYWRQZXJtaXNzaW9uLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbmZpZy5yb3V0ZXMuYWRtaW4sIHNlcnZlclVSTF0sXG4gIClcblxuICBjb25zdCB1cGRhdGVSZXN1bHRzRWZmZWN0RXZlbnQ6IFVwZGF0ZVJlc3VsdHMgPSB1c2VFZmZlY3RFdmVudCgoYXJncykgPT4ge1xuICAgIHJldHVybiB1cGRhdGVSZXN1bHRzKGFyZ3MpXG4gIH0pXG5cbiAgLy8gV2hlbiAoYHJlbGF0aW9uVG9gIHx8IGBmaWx0ZXJPcHRpb25zYCB8fCBgbG9jYWxlYCkgY2hhbmdlcywgcmVzZXQgY29tcG9uZW50XG4gIC8vIE5vdGUgLSBlZmZlY3Qgc2hvdWxkIG5vdCBydW4gb24gZmlyc3QgcnVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gSWYgdGhlIG1lbnUgaXMgb3BlbiB3aGlsZSBmaWx0ZXJPcHRpb25zIGNoYW5nZXNcbiAgICAvLyBkdWUgdG8gbGF0ZW5jeSBvZiBmb3JtIHN0YXRlIGFuZCBmYXN0IGNsaWNraW5nIGludG8gdGhpcyBmaWVsZCxcbiAgICAvLyByZS1mZXRjaCBvcHRpb25zXG4gICAgaWYgKGhhc0xvYWRlZEZpcnN0UGFnZVJlZi5jdXJyZW50ICYmIG1lbnVJc09wZW4pIHtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKVxuICAgICAgdm9pZCB1cGRhdGVSZXN1bHRzRWZmZWN0RXZlbnQoe1xuICAgICAgICBmaWx0ZXJPcHRpb25zLFxuICAgICAgICBsYXN0TG9hZGVkUGFnZToge30sXG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIGhhc0xvYWRlZEZpcnN0UGFnZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKGhhc01hbnkgPT09IHRydWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgaGFzTWFueSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmVmLmN1cnJlbnQgYXMgVmFsdWVXaXRoUmVsYXRpb25bXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaGFzTWFueSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmVmLmN1cnJlbnQgYXMgVmFsdWVXaXRoUmVsYXRpb24sXG4gICAgICAgICAgICB9KSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG1lbnUgaXMgbm90IG9wZW4sIHN0aWxsIHJlc2V0IHRoZSBmaWVsZCBzdGF0ZVxuICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0byBnZXQgbmV3IG9wdGlvbnMgbmV4dCB0aW1lIHRoZSBtZW51IG9wZW5zXG4gICAgZGlzcGF0Y2hPcHRpb25zKHtcbiAgICAgIHR5cGU6ICdDTEVBUicsXG4gICAgICBleGVtcHRWYWx1ZXM6IHZhbHVlUmVmLmN1cnJlbnQsXG4gICAgfSlcblxuICAgIHNldExhc3RGdWxseUxvYWRlZFJlbGF0aW9uKC0xKVxuICAgIHNldExhc3RMb2FkZWRQYWdlKHt9KVxuICB9LCBbcmVsYXRpb25UbywgZmlsdGVyT3B0aW9ucywgbG9jYWxlLCBwYXRoLCBtZW51SXNPcGVuLCBoYXNNYW55XSlcblxuICBjb25zdCBwcmV2VmFsdWUgPSB1c2VSZWYodmFsdWUpXG4gIGNvbnN0IGlzRmlyc3RSZW5kZXJSZWYgPSB1c2VSZWYodHJ1ZSlcblxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBFbnN1cmUgd2UgaGF2ZSBhbiBvcHRpb24gZm9yIGVhY2ggdmFsdWVcbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGaXJzdFJlbmRlclJlZi5jdXJyZW50IHx8ICFkZXF1YWwodmFsdWUsIHByZXZWYWx1ZS5jdXJyZW50KSkge1xuICAgICAgaGFuZGxlVmFsdWVDaGFuZ2UoaGFzTWFueSA9PT0gdHJ1ZSA/IHsgaGFzTWFueSwgdmFsdWUgfSA6IHsgaGFzTWFueSwgdmFsdWUgfSlcbiAgICB9XG4gICAgaXNGaXJzdFJlbmRlclJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBwcmV2VmFsdWUuY3VycmVudCA9IHZhbHVlXG4gIH0sIFt2YWx1ZSwgaGFzTWFueV0pXG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBzd2l0Y2ggdG8gd29yZCBib3VuZGFyeSBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWxhdGlvbnMgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pID8gcmVsYXRpb25UbyA6IFtyZWxhdGlvblRvXVxuICAgIGNvbnN0IGlzSWRPbmx5ID0gcmVsYXRpb25zLnJlZHVjZSgoaWRPbmx5LCByZWxhdGlvbikgPT4ge1xuICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnOiByZWxhdGlvbiB9KVxuICAgICAgY29uc3QgZmllbGRUb1NlYXJjaCA9IGNvbGxlY3Rpb24/LmFkbWluPy51c2VBc1RpdGxlIHx8ICdpZCdcbiAgICAgIHJldHVybiBmaWVsZFRvU2VhcmNoID09PSAnaWQnICYmIGlkT25seVxuICAgIH0sIHRydWUpXG4gICAgc2V0RW5hYmxlV29yZEJvdW5kYXJ5U2VhcmNoKCFpc0lkT25seSlcbiAgfSwgW3JlbGF0aW9uVG8sIGdldEVudGl0eUNvbmZpZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BlbkRyYXdlcldoZW5SZWxhdGlvbkNoYW5nZXMuY3VycmVudCkge1xuICAgICAgb3BlbkRyYXdlcigpXG4gICAgICBvcGVuRHJhd2VyV2hlblJlbGF0aW9uQ2hhbmdlcy5jdXJyZW50ID0gZmFsc2VcbiAgICB9XG4gIH0sIFtvcGVuRHJhd2VyLCBjdXJyZW50bHlPcGVuUmVsYXRpb25zaGlwXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIG5lZWRlZCB0byBzeW5jIHRoZSByZWYgdmFsdWUgd2hlbiBvdGhlciBmaWVsZHMgaW5mbHVlbmNlIHRoZSB2YWx1ZVxuICAgIC8vIGkuZS4gd2hlbiBhIGRyYXdlciBpcyBvcGVuZWQgYW5kIHRoZSB2YWx1ZSBpcyBzZXRcbiAgICB2YWx1ZVJlZi5jdXJyZW50ID0gdmFsdWVcbiAgfSwgW3ZhbHVlXSlcblxuICBjb25zdCB2YWx1ZVRvUmVuZGVyID0gZmluZE9wdGlvbnNCeVZhbHVlKHsgYWxsb3dFZGl0LCBvcHRpb25zLCB2YWx1ZSB9KVxuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvUmVuZGVyKSAmJiB2YWx1ZVRvUmVuZGVyPy52YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgdmFsdWVUb1JlbmRlci52YWx1ZSA9IG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGZpZWxkQmFzZUNsYXNzLFxuICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc2hvd0Vycm9yICYmICdlcnJvcicsXG4gICAgICAgIGVycm9yTG9hZGluZyAmJiAnZXJyb3ItbG9hZGluZycsXG4gICAgICAgIHJlYWRPbmx5ICYmIGAke2Jhc2VDbGFzc30tLXJlYWQtb25seWAsXG4gICAgICAgICFyZWFkT25seSAmJiBhbGxvd0NyZWF0ZSAmJiBgJHtiYXNlQ2xhc3N9LS1hbGxvdy1jcmVhdGVgLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBpZD17YGZpZWxkLSR7cGF0aC5yZXBsYWNlKC9cXC4vZywgJ19fJyl9YH1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICA+XG4gICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudD17TGFiZWx9XG4gICAgICAgIEZhbGxiYWNrPXtcbiAgICAgICAgICA8RmllbGRMYWJlbCBsYWJlbD17bGFiZWx9IGxvY2FsaXplZD17bG9jYWxpemVkfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7ZmllbGRCYXNlQ2xhc3N9X193cmFwYH0+XG4gICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Vycm9yfVxuICAgICAgICAgIEZhbGxiYWNrPXs8RmllbGRFcnJvciBwYXRoPXtwYXRofSBzaG93RXJyb3I9e3Nob3dFcnJvcn0gLz59XG4gICAgICAgIC8+XG4gICAgICAgIHtCZWZvcmVJbnB1dH1cbiAgICAgICAge2Vycm9yTG9hZGluZyA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZXJyb3ItbG9hZGluZ2B9PntlcnJvckxvYWRpbmd9PC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgICAgIDxSZWFjdFNlbGVjdFxuICAgICAgICAgICAgICBiYWNrc3BhY2VSZW1vdmVzVmFsdWU9eyEoaXNEcmF3ZXJPcGVuIHx8IGlzTGlzdERyYXdlck9wZW4pfVxuICAgICAgICAgICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgICAgICAgICAgTXVsdGlWYWx1ZUxhYmVsLFxuICAgICAgICAgICAgICAgIFNpbmdsZVZhbHVlLFxuICAgICAgICAgICAgICAgIC4uLihhcHBlYXJhbmNlICE9PSAnc2VsZWN0JyAmJiB7IERyb3Bkb3duSW5kaWNhdG9yOiBudWxsIH0pLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBjdXN0b21Qcm9wcz17e1xuICAgICAgICAgICAgICAgIGRpc2FibGVLZXlEb3duOiBpc0RyYXdlck9wZW4gfHwgaXNMaXN0RHJhd2VyT3BlbixcbiAgICAgICAgICAgICAgICBkaXNhYmxlTW91c2VEb3duOiBpc0RyYXdlck9wZW4gfHwgaXNMaXN0RHJhd2VyT3BlbixcbiAgICAgICAgICAgICAgICBvbkRvY3VtZW50T3BlbixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5IHx8IGlzRHJhd2VyT3BlbiB8fCBpc0xpc3REcmF3ZXJPcGVufVxuICAgICAgICAgICAgICBmaWx0ZXJPcHRpb249e2VuYWJsZVdvcmRCb3VuZGFyeVNlYXJjaCA/IGZpbHRlck9wdGlvbiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9eyhvcHRpb246IFZhbHVlV2l0aFJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc01hbnkgJiYgQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKVxuICAgICAgICAgICAgICAgICAgPyBgJHtvcHRpb24ucmVsYXRpb25Ub31fJHtvcHRpb24udmFsdWV9YFxuICAgICAgICAgICAgICAgICAgOiAob3B0aW9uLnZhbHVlIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgaXNMb2FkaW5nPXthcHBlYXJhbmNlID09PSAnc2VsZWN0JyAmJiBpc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGlzTXVsdGk9e2hhc01hbnl9XG4gICAgICAgICAgICAgIGlzU2VhcmNoYWJsZT17YXBwZWFyYW5jZSA9PT0gJ3NlbGVjdCd9XG4gICAgICAgICAgICAgIGlzU29ydGFibGU9e2lzU29ydGFibGV9XG4gICAgICAgICAgICAgIG1lbnVJc09wZW49e2FwcGVhcmFuY2UgPT09ICdzZWxlY3QnID8gbWVudUlzT3BlbiA6IGZhbHNlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17XG4gICAgICAgICAgICAgICAgIXJlYWRPbmx5XG4gICAgICAgICAgICAgICAgICA/IChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNYW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKFtdKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHNlbGVjdGVkIGFzIFZhbHVlV2l0aFJlbGF0aW9uW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2Uoc2VsZWN0ZWQgYXMgVmFsdWVXaXRoUmVsYXRpb25bXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhc01hbnkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBzZWxlY3RlZCBhcyBWYWx1ZVdpdGhSZWxhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZShzZWxlY3RlZCBhcyBWYWx1ZVdpdGhSZWxhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25JbnB1dENoYW5nZT17KG5ld1NlYXJjaCkgPT5cbiAgICAgICAgICAgICAgICBoYW5kbGVJbnB1dENoYW5nZSh7XG4gICAgICAgICAgICAgICAgICBzZWFyY2g6IG5ld1NlYXJjaCxcbiAgICAgICAgICAgICAgICAgIC4uLihoYXNNYW55ID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNNYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvbk1lbnVDbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldE1lbnVJc09wZW4oZmFsc2UpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTWVudU9wZW49eygpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXBwZWFyYW5jZSA9PT0gJ2RyYXdlcicpIHtcbiAgICAgICAgICAgICAgICAgIG9wZW5MaXN0RHJhd2VyKClcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICAgICAgICBzZXRNZW51SXNPcGVuKHRydWUpXG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc0xvYWRlZEZpcnN0UGFnZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldElzTG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZXN1bHRzRWZmZWN0RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdExvYWRlZFBhZ2U6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzTG9hZGVkRmlyc3RQYWdlUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAuLi4oaGFzTWFueSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1lbnVTY3JvbGxUb0JvdHRvbT17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldElzTG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgIHVwZGF0ZVJlc3VsdHNFZmZlY3RFdmVudCh7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgbGFzdEZ1bGx5TG9hZGVkUmVsYXRpb24sXG4gICAgICAgICAgICAgICAgICBsYXN0TG9hZGVkUGFnZSxcbiAgICAgICAgICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAuLi4oaGFzTWFueSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc01hbnksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNNYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvcHRpb25zPXtcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybWF0RGlzcGxheWVkT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgPyBmb3JtYXREaXNwbGF5ZWRPcHRpb25zKG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICA6IG9wdGlvbnNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHNob3dFcnJvcj17c2hvd0Vycm9yfVxuICAgICAgICAgICAgICB2YWx1ZT17dmFsdWVUb1JlbmRlciA/PyBudWxsfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshcmVhZE9ubHkgJiYgYWxsb3dDcmVhdGUgJiYgKFxuICAgICAgICAgICAgICA8QWRkTmV3UmVsYXRpb25cbiAgICAgICAgICAgICAgICBwYXRoPXtwYXRofVxuICAgICAgICAgICAgICAgIHJlbGF0aW9uVG89e3JlbGF0aW9uVG99XG4gICAgICAgICAgICAgICAgey4uLihoYXNNYW55ID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNNYW55LFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNNYW55LFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtBZnRlcklucHV0fVxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge2N1cnJlbnRseU9wZW5SZWxhdGlvbnNoaXAuY29sbGVjdGlvblNsdWcgJiYgY3VycmVudGx5T3BlblJlbGF0aW9uc2hpcC5oYXNSZWFkUGVybWlzc2lvbiAmJiAoXG4gICAgICAgIDxEb2N1bWVudERyYXdlciBvbkRlbGV0ZT17b25EZWxldGV9IG9uRHVwbGljYXRlPXtvbkR1cGxpY2F0ZX0gLz5cbiAgICAgICl9XG4gICAgICB7YXBwZWFyYW5jZSA9PT0gJ2RyYXdlcicgJiYgIXJlYWRPbmx5ICYmIChcbiAgICAgICAgPExpc3REcmF3ZXIgYWxsb3dDcmVhdGU9e2FsbG93Q3JlYXRlfSBlbmFibGVSb3dTZWxlY3Rpb25zPXtmYWxzZX0gb25TZWxlY3Q9e29uTGlzdFNlbGVjdH0gLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyBoYXNBdXRvc2F2ZUVuYWJsZWQgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudERyYXdlckNvbnRleHRUeXBlIH0gZnJvbSAnLi4vRG9jdW1lbnREcmF3ZXIvUHJvdmlkZXIuanMnXG5pbXBvcnQgdHlwZSB7IFByb3BzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlUmVsYXRlZENvbGxlY3Rpb25zIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlUmVsYXRlZENvbGxlY3Rpb25zLmpzJ1xuaW1wb3J0IHsgUGx1c0ljb24gfSBmcm9tICcuLi8uLi9pY29ucy9QbHVzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9BdXRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlciB9IGZyb20gJy4uL0RvY3VtZW50RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgUG9wdXAgfSBmcm9tICcuLi9Qb3B1cC9pbmRleC5qcydcbmltcG9ydCAqIGFzIFBvcHVwTGlzdCBmcm9tICcuLi9Qb3B1cC9Qb3B1cEJ1dHRvbkxpc3QvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi9Ub29sdGlwL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmVsYXRpb25zaGlwLWFkZC1uZXcnXG5cbmV4cG9ydCBjb25zdCBBZGROZXdSZWxhdGlvbjogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgQnV0dG9uOiBCdXR0b25Gcm9tUHJvcHMsXG4gIGhhc01hbnksXG4gIG9uQ2hhbmdlLFxuICBwYXRoLFxuICByZWxhdGlvblRvLFxuICB1bnN0eWxlZCxcbiAgdmFsdWUsXG59KSA9PiB7XG4gIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9ucyA9IHVzZVJlbGF0ZWRDb2xsZWN0aW9ucyhyZWxhdGlvblRvKVxuICBjb25zdCB7IHBlcm1pc3Npb25zIH0gPSB1c2VBdXRoKClcbiAgY29uc3QgW3Nob3csIHNldFNob3ddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZENvbGxlY3Rpb24sIHNldFNlbGVjdGVkQ29sbGVjdGlvbl0gPSB1c2VTdGF0ZTxzdHJpbmc+KClcblxuICBjb25zdCByZWxhdGVkVG9NYW55ID0gcmVsYXRlZENvbGxlY3Rpb25zLmxlbmd0aCA+IDFcblxuICBjb25zdCBbY29sbGVjdGlvbkNvbmZpZywgc2V0Q29sbGVjdGlvbkNvbmZpZ10gPSB1c2VTdGF0ZTxDbGllbnRDb2xsZWN0aW9uQ29uZmlnPigoKSA9PlxuICAgICFyZWxhdGVkVG9NYW55ID8gcmVsYXRlZENvbGxlY3Rpb25zWzBdIDogdW5kZWZpbmVkLFxuICApXG5cbiAgY29uc3QgW3BvcHVwT3Blbiwgc2V0UG9wdXBPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgW3Nob3dUb29sdGlwLCBzZXRTaG93VG9vbHRpcF0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbRG9jdW1lbnREcmF3ZXIsIERvY3VtZW50RHJhd2VyVG9nZ2xlciwgeyBpc0RyYXdlck9wZW4sIHRvZ2dsZURyYXdlciB9XSA9IHVzZURvY3VtZW50RHJhd2VyKFxuICAgIHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnOiBjb2xsZWN0aW9uQ29uZmlnPy5zbHVnLFxuICAgIH0sXG4gIClcblxuICBjb25zdCBvblNhdmU6IERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGVbJ29uU2F2ZSddID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZG9jLCBvcGVyYXRpb24gfSkgPT4ge1xuICAgICAgLy8gaWYgYXV0b3NhdmUgaXMgZW5hYmxlZCwgdGhlIG9wZXJhdGlvbiB3aWxsIGJlICd1cGRhdGUnXG4gICAgICBpZiAoXG4gICAgICAgIG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgfHxcbiAgICAgICAgKG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgJiYgaGFzQXV0b3NhdmVFbmFibGVkKGNvbGxlY3Rpb25Db25maWcpKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGVuc3VyZSB0aGUgdmFsdWUgaXMgbm90IGFscmVhZHkgaW4gdGhlIGFycmF5XG4gICAgICAgIGxldCBpc05ld1ZhbHVlID0gZmFsc2VcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgIGlzTmV3VmFsdWUgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNOZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/ICF2YWx1ZS5zb21lKCh2KSA9PiB2ICYmIHYudmFsdWUgPT09IGRvYy5pZClcbiAgICAgICAgICAgIDogdmFsdWUudmFsdWUgIT09IGRvYy5pZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmV3VmFsdWUpIHtcbiAgICAgICAgICBpZiAoaGFzTWFueSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgb25DaGFuZ2UoW1xuICAgICAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IGNvbGxlY3Rpb25Db25maWc/LnNsdWcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRvYy5pZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKHtcbiAgICAgICAgICAgICAgcmVsYXRpb25UbzogY29sbGVjdGlvbkNvbmZpZz8uc2x1ZyxcbiAgICAgICAgICAgICAgdmFsdWU6IGRvYy5pZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0U2VsZWN0ZWRDb2xsZWN0aW9uKHVuZGVmaW5lZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb2xsZWN0aW9uQ29uZmlnLCBoYXNNYW55LCBvbkNoYW5nZSwgdmFsdWVdLFxuICApXG5cbiAgY29uc3Qgb25Qb3B1cFRvZ2dsZSA9IHVzZUNhbGxiYWNrKChzdGF0ZSkgPT4ge1xuICAgIHNldFBvcHVwT3BlbihzdGF0ZSlcbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGVybWlzc2lvbnMpIHtcbiAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHNldFNob3cocGVybWlzc2lvbnMuY29sbGVjdGlvbnNbcmVsYXRlZENvbGxlY3Rpb25zWzBdPy5zbHVnXT8uY3JlYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2hvdyhcbiAgICAgICAgICByZWxhdGVkQ29sbGVjdGlvbnMuc29tZShcbiAgICAgICAgICAgIChjb2xsZWN0aW9uKSA9PiBwZXJtaXNzaW9ucy5jb2xsZWN0aW9uc1tjb2xsZWN0aW9uPy5zbHVnXT8uY3JlYXRlLFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtwZXJtaXNzaW9ucywgcmVsYXRlZENvbGxlY3Rpb25zXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZWxhdGVkVG9NYW55ICYmIHNlbGVjdGVkQ29sbGVjdGlvbikge1xuICAgICAgc2V0Q29sbGVjdGlvbkNvbmZpZyhcbiAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25zLmZpbmQoKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24/LnNsdWcgPT09IHNlbGVjdGVkQ29sbGVjdGlvbiksXG4gICAgICApXG4gICAgfVxuICB9LCBbc2VsZWN0ZWRDb2xsZWN0aW9uLCByZWxhdGVkVG9NYW55LCByZWxhdGVkQ29sbGVjdGlvbnNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlbGF0ZWRUb01hbnkgJiYgY29sbGVjdGlvbkNvbmZpZykge1xuICAgICAgLy8gdGhlIGRyYXdlciBtdXN0IGJlIHJlbmRlcmVkIG9uIHRoZSBwYWdlIGJlZm9yZSBiZWZvcmUgb3BlbmluZyBpdFxuICAgICAgLy8gdGhpcyBpcyB3aHkgJ3NlbGVjdGVkQ29sbGVjdGlvbicgaXMgZGlmZmVyZW50IGZyb20gJ2NvbGxlY3Rpb25Db25maWcnXG4gICAgICB0b2dnbGVEcmF3ZXIoKVxuICAgICAgc2V0U2VsZWN0ZWRDb2xsZWN0aW9uKHVuZGVmaW5lZClcbiAgICB9XG4gIH0sIFt0b2dnbGVEcmF3ZXIsIHJlbGF0ZWRUb01hbnksIGNvbGxlY3Rpb25Db25maWddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlbGF0ZWRUb01hbnkgJiYgIWlzRHJhd2VyT3Blbikge1xuICAgICAgc2V0Q29sbGVjdGlvbkNvbmZpZyh1bmRlZmluZWQpXG4gICAgfVxuICB9LCBbaXNEcmF3ZXJPcGVuLCByZWxhdGVkVG9NYW55XSlcblxuICBjb25zdCBsYWJlbCA9IHQoJ2ZpZWxkczphZGROZXdMYWJlbCcsIHtcbiAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24ocmVsYXRlZENvbGxlY3Rpb25zWzBdPy5sYWJlbHMuc2luZ3VsYXIsIGkxOG4pLFxuICB9KVxuXG4gIGlmICghc2hvdykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9IGlkPXtgJHtwYXRofS1hZGQtbmV3YH0+XG4gICAgICB7cmVsYXRlZENvbGxlY3Rpb25zLmxlbmd0aCA9PT0gMSAmJiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICA8RG9jdW1lbnREcmF3ZXJUb2dnbGVyXG4gICAgICAgICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fYWRkLWJ1dHRvbmAsXG4gICAgICAgICAgICAgIHVuc3R5bGVkICYmIGAke2Jhc2VDbGFzc31fX2FkZC1idXR0b24tLXVuc3R5bGVkYCxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRTaG93VG9vbHRpcChmYWxzZSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFNob3dUb29sdGlwKHRydWUpfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRTaG93VG9vbHRpcChmYWxzZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0J1dHRvbkZyb21Qcm9wcyA/IChcbiAgICAgICAgICAgICAgQnV0dG9uRnJvbVByb3BzXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190b29sdGlwYH0gc2hvdz17c2hvd1Rvb2x0aXB9PlxuICAgICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8UGx1c0ljb24gLz5cbiAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Eb2N1bWVudERyYXdlclRvZ2dsZXI+XG4gICAgICAgICAgPERvY3VtZW50RHJhd2VyIG9uU2F2ZT17b25TYXZlfSAvPlxuICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgKX1cbiAgICAgIHtyZWxhdGVkQ29sbGVjdGlvbnMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIGJ1dHRvbj17XG4gICAgICAgICAgICAgIEJ1dHRvbkZyb21Qcm9wcyA/IChcbiAgICAgICAgICAgICAgICBCdXR0b25Gcm9tUHJvcHNcbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hZGQtYnV0dG9uYH1cbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9e3BvcHVwT3BlbiA/IHVuZGVmaW5lZCA6IHQoJ2ZpZWxkczphZGROZXcnKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8UGx1c0ljb24gLz5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnV0dG9uVHlwZT1cImN1c3RvbVwiXG4gICAgICAgICAgICBob3Jpem9udGFsQWxpZ249XCJjZW50ZXJcIlxuICAgICAgICAgICAgb25Ub2dnbGVPcGVuPXtvblBvcHVwVG9nZ2xlfVxuICAgICAgICAgICAgcmVuZGVyPXsoeyBjbG9zZTogY2xvc2VQb3B1cCB9KSA9PiAoXG4gICAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICAgICAge3JlbGF0ZWRDb2xsZWN0aW9ucy5tYXAoKHJlbGF0ZWRDb2xsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbnMuY29sbGVjdGlvbnNbcmVsYXRlZENvbGxlY3Rpb24/LnNsdWddPy5jcmVhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZWxhdGlvbi1idXR0b24tLSR7cmVsYXRlZENvbGxlY3Rpb24/LnNsdWd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cmVsYXRlZENvbGxlY3Rpb24/LnNsdWd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUG9wdXAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZENvbGxlY3Rpb24ocmVsYXRlZENvbGxlY3Rpb24/LnNsdWcpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRUcmFuc2xhdGlvbihyZWxhdGVkQ29sbGVjdGlvbj8ubGFiZWxzPy5zaW5ndWxhciwgaTE4bil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbkdyb3VwPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge2NvbGxlY3Rpb25Db25maWcgJiYgcGVybWlzc2lvbnMuY29sbGVjdGlvbnNbY29sbGVjdGlvbkNvbmZpZz8uc2x1Z10/LmNyZWF0ZSAmJiAoXG4gICAgICAgICAgICA8RG9jdW1lbnREcmF3ZXIgb25TYXZlPXtvblNhdmV9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSWQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgTGlzdERyYXdlclByb3BzLCBMaXN0VG9nZ2xlclByb3BzLCBVc2VMaXN0RHJhd2VyIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUVkaXREZXB0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9FZGl0RGVwdGgvaW5kZXguanMnXG5pbXBvcnQgeyBEcmF3ZXIsIERyYXdlclRvZ2dsZXIgfSBmcm9tICcuLi9EcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0RHJhd2VyQ29udGVudCB9IGZyb20gJy4vRHJhd2VyQ29udGVudC5qcydcblxuZXhwb3J0IGNvbnN0IGJhc2VDbGFzcyA9ICdsaXN0LWRyYXdlcidcbmV4cG9ydCBjb25zdCBmb3JtYXRMaXN0RHJhd2VyU2x1ZyA9ICh7XG4gIGRlcHRoLFxuICB1dWlkLFxufToge1xuICBkZXB0aDogbnVtYmVyXG4gIHV1aWQ6IHN0cmluZyAvLyBzdXBwbHkgd2hlbiBjcmVhdGluZyBhIG5ldyBkb2N1bWVudCBhbmQgbm8gaWQgaXMgYXZhaWxhYmxlXG59KSA9PiBgbGlzdC1kcmF3ZXJfJHtkZXB0aH1fJHt1dWlkfWBcblxuZXhwb3J0IGNvbnN0IExpc3REcmF3ZXJUb2dnbGVyOiBSZWFjdC5GQzxMaXN0VG9nZ2xlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBkcmF3ZXJTbHVnLFxuICBvbkNsaWNrLFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPERyYXdlclRvZ2dsZXJcbiAgICAgIGNsYXNzTmFtZT17W2NsYXNzTmFtZSwgYCR7YmFzZUNsYXNzfV9fdG9nZ2xlcmBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0RyYXdlclRvZ2dsZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IExpc3REcmF3ZXI6IFJlYWN0LkZDPExpc3REcmF3ZXJQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkcmF3ZXJTbHVnIH0gPSBwcm9wc1xuXG4gIHJldHVybiAoXG4gICAgPERyYXdlciBjbGFzc05hbWU9e2Jhc2VDbGFzc30gZ3V0dGVyPXtmYWxzZX0gSGVhZGVyPXtudWxsfSBzbHVnPXtkcmF3ZXJTbHVnfT5cbiAgICAgIDxMaXN0RHJhd2VyQ29udGVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9EcmF3ZXI+XG4gIClcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIExpc3REcmF3ZXIgY29tcG9uZW50LCB0aGUgTGlzdERyYXdlclRvZ2dsZXIgY29tcG9uZW50LCBhbmQgYW4gb2JqZWN0IHdpdGggc3RhdGUgYW5kIG1ldGhvZHMgZm9yIGNvbnRyb2xsaW5nIHRoZSBkcmF3ZXIuXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgdXNlTGlzdERyYXdlciB9IGZyb20gJ0BwYXlsb2FkY21zL3VpJ1xuICpcbiAqIC8vIGluc2lkZSBhIFJlYWN0IGNvbXBvbmVudFxuICogY29uc3QgW0xpc3REcmF3ZXIsIExpc3REcmF3ZXJUb2dnbGVyLCB7IGNsb3NlRHJhd2VyLCBvcGVuRHJhd2VyIH1dID0gdXNlTGlzdERyYXdlcih7XG4gKiAgIGNvbGxlY3Rpb25TbHVnczogWyd1c2VycyddLFxuICogICBzZWxlY3RlZENvbGxlY3Rpb246ICd1c2VycycsXG4gKiB9KVxuICpcbiAqIC8vIGluc2lkZSB0aGUgcmV0dXJuIHN0YXRlbWVudFxuICogcmV0dXJuIChcbiAqICAgIDw+XG4gKiAgICAgIDxMaXN0RHJhd2VyIC8+XG4gKiAgICAgIDxMaXN0RHJhd2VyVG9nZ2xlciBvbkNsaWNrPXtvcGVuRHJhd2VyfT5PcGVuIExpc3QgRHJhd2VyPC9MaXN0RHJhd2VyVG9nZ2xlcj5cbiAqICAgIDwvPlxuICogKVxuICovXG5leHBvcnQgY29uc3QgdXNlTGlzdERyYXdlcjogVXNlTGlzdERyYXdlciA9ICh7XG4gIGNvbGxlY3Rpb25TbHVnczogY29sbGVjdGlvblNsdWdzRnJvbVByb3BzLFxuICBmaWx0ZXJPcHRpb25zLFxuICBzZWxlY3RlZENvbGxlY3Rpb24sXG4gIHVwbG9hZHMsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHsgY29sbGVjdGlvbnMgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IGRyYXdlckRlcHRoID0gdXNlRWRpdERlcHRoKClcbiAgY29uc3QgdXVpZCA9IHVzZUlkKClcbiAgY29uc3QgeyBjbG9zZU1vZGFsLCBtb2RhbFN0YXRlLCBvcGVuTW9kYWwsIHRvZ2dsZU1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2NvbGxlY3Rpb25TbHVncywgc2V0Q29sbGVjdGlvblNsdWdzXSA9IHVzZVN0YXRlKGNvbGxlY3Rpb25TbHVnc0Zyb21Qcm9wcylcblxuICBjb25zdCBkcmF3ZXJTbHVnID0gZm9ybWF0TGlzdERyYXdlclNsdWcoe1xuICAgIGRlcHRoOiBkcmF3ZXJEZXB0aCxcbiAgICB1dWlkLFxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SXNPcGVuKEJvb2xlYW4obW9kYWxTdGF0ZVtkcmF3ZXJTbHVnXT8uaXNPcGVuKSlcbiAgfSwgW21vZGFsU3RhdGUsIGRyYXdlclNsdWddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb2xsZWN0aW9uU2x1Z3MgfHwgY29sbGVjdGlvblNsdWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZmlsdGVyZWRDb2xsZWN0aW9uU2x1Z3MgPSBjb2xsZWN0aW9ucy5maWx0ZXIoKHsgdXBsb2FkIH0pID0+IHtcbiAgICAgICAgaWYgKHVwbG9hZHMpIHtcbiAgICAgICAgICByZXR1cm4gQm9vbGVhbih1cGxvYWQpID09PSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG5cbiAgICAgIHNldENvbGxlY3Rpb25TbHVncyhmaWx0ZXJlZENvbGxlY3Rpb25TbHVncy5tYXAoKHsgc2x1ZyB9KSA9PiBzbHVnKSlcbiAgICB9XG4gIH0sIFtjb2xsZWN0aW9uU2x1Z3MsIHVwbG9hZHMsIGNvbGxlY3Rpb25zXSlcblxuICBjb25zdCB0b2dnbGVEcmF3ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlTW9kYWwoZHJhd2VyU2x1ZylcbiAgfSwgW3RvZ2dsZU1vZGFsLCBkcmF3ZXJTbHVnXSlcblxuICBjb25zdCBjbG9zZURyYXdlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZU1vZGFsKGRyYXdlclNsdWcpXG4gIH0sIFtkcmF3ZXJTbHVnLCBjbG9zZU1vZGFsXSlcblxuICBjb25zdCBvcGVuRHJhd2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9wZW5Nb2RhbChkcmF3ZXJTbHVnKVxuICB9LCBbZHJhd2VyU2x1Zywgb3Blbk1vZGFsXSlcblxuICBjb25zdCBNZW1vaXplZERyYXdlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiAocHJvcHMpID0+IChcbiAgICAgIDxMaXN0RHJhd2VyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xvc2VEcmF3ZXI9e2Nsb3NlRHJhd2VyfVxuICAgICAgICBjb2xsZWN0aW9uU2x1Z3M9e2NvbGxlY3Rpb25TbHVnc31cbiAgICAgICAgZHJhd2VyU2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgZmlsdGVyT3B0aW9ucz17ZmlsdGVyT3B0aW9uc31cbiAgICAgICAga2V5PXtkcmF3ZXJTbHVnfVxuICAgICAgICBzZWxlY3RlZENvbGxlY3Rpb249e3NlbGVjdGVkQ29sbGVjdGlvbn1cbiAgICAgICAgdXBsb2Fkcz17dXBsb2Fkc31cbiAgICAgIC8+XG4gICAgKVxuICB9LCBbZHJhd2VyU2x1ZywgY29sbGVjdGlvblNsdWdzLCB1cGxvYWRzLCBjbG9zZURyYXdlciwgc2VsZWN0ZWRDb2xsZWN0aW9uLCBmaWx0ZXJPcHRpb25zXSlcblxuICBjb25zdCBNZW1vaXplZERyYXdlclRvZ2dsZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKHByb3BzKSA9PiA8TGlzdERyYXdlclRvZ2dsZXIgey4uLnByb3BzfSBkcmF3ZXJTbHVnPXtkcmF3ZXJTbHVnfSAvPlxuICB9LCBbZHJhd2VyU2x1Z10pXG5cbiAgY29uc3QgTWVtb2l6ZWREcmF3ZXJTdGF0ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNsb3NlRHJhd2VyLFxuICAgICAgY29sbGVjdGlvblNsdWdzLFxuICAgICAgZHJhd2VyRGVwdGgsXG4gICAgICBkcmF3ZXJTbHVnLFxuICAgICAgaXNEcmF3ZXJPcGVuOiBpc09wZW4sXG4gICAgICBvcGVuRHJhd2VyLFxuICAgICAgc2V0Q29sbGVjdGlvblNsdWdzLFxuICAgICAgdG9nZ2xlRHJhd2VyLFxuICAgIH0pLFxuICAgIFtcbiAgICAgIGRyYXdlckRlcHRoLFxuICAgICAgZHJhd2VyU2x1ZyxcbiAgICAgIGlzT3BlbixcbiAgICAgIHRvZ2dsZURyYXdlcixcbiAgICAgIGNsb3NlRHJhd2VyLFxuICAgICAgb3BlbkRyYXdlcixcbiAgICAgIHNldENvbGxlY3Rpb25TbHVncyxcbiAgICAgIGNvbGxlY3Rpb25TbHVncyxcbiAgICBdLFxuICApXG5cbiAgcmV0dXJuIFtNZW1vaXplZERyYXdlciwgTWVtb2l6ZWREcmF3ZXJUb2dnbGVyLCBNZW1vaXplZERyYXdlclN0YXRlXVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25TbHVnLCBMaXN0UXVlcnkgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGhvaXN0UXVlcnlQYXJhbXNUb0FuZCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgTGlzdERyYXdlckNvbnRleHRQcm9wcywgTGlzdERyYXdlckNvbnRleHRUeXBlIH0gZnJvbSAnLi4vTGlzdERyYXdlci9Qcm92aWRlci5qcydcbmltcG9ydCB0eXBlIHtcbiAgTGlzdERyYXdlclByb3BzLFxuICBSZW5kZXJMaXN0U2VydmVyRm5BcmdzLFxuICBSZW5kZXJMaXN0U2VydmVyRm5SZXR1cm5UeXBlLFxufSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWZmZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VFZmZlY3RFdmVudC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VTZXJ2ZXJGdW5jdGlvbnMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VydmVyRnVuY3Rpb25zL2luZGV4LmpzJ1xuaW1wb3J0IHsgTGlzdERyYXdlckNvbnRleHRQcm92aWRlciB9IGZyb20gJy4uL0xpc3REcmF3ZXIvUHJvdmlkZXIuanMnXG5pbXBvcnQgeyBMb2FkaW5nT3ZlcmxheSB9IGZyb20gJy4uL0xvYWRpbmcvaW5kZXguanMnXG5pbXBvcnQgeyB0eXBlIE9wdGlvbiB9IGZyb20gJy4uL1JlYWN0U2VsZWN0L2luZGV4LmpzJ1xuXG5leHBvcnQgY29uc3QgTGlzdERyYXdlckNvbnRlbnQ6IFJlYWN0LkZDPExpc3REcmF3ZXJQcm9wcz4gPSAoe1xuICBhbGxvd0NyZWF0ZSA9IHRydWUsXG4gIGNvbGxlY3Rpb25TbHVncyxcbiAgZGlzYWJsZVF1ZXJ5UHJlc2V0cyxcbiAgZHJhd2VyU2x1ZyxcbiAgZW5hYmxlUm93U2VsZWN0aW9ucyxcbiAgZmlsdGVyT3B0aW9ucyxcbiAgb25CdWxrU2VsZWN0LFxuICBvblNlbGVjdCxcbiAgb3ZlcnJpZGVFbnRpdHlWaXNpYmlsaXR5ID0gdHJ1ZSxcbiAgc2VsZWN0ZWRDb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1Z0Zyb21Qcm9wcyxcbn0pID0+IHtcbiAgY29uc3QgeyBjbG9zZU1vZGFsLCBpc01vZGFsT3BlbiB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IHsgc2VydmVyRnVuY3Rpb24gfSA9IHVzZVNlcnZlckZ1bmN0aW9ucygpXG4gIGNvbnN0IFtMaXN0Vmlldywgc2V0TGlzdFZpZXddID0gdXNlU3RhdGU8UmVhY3QuUmVhY3ROb2RlPih1bmRlZmluZWQpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHsgY29sbGVjdGlvbnMgfSxcbiAgICBnZXRFbnRpdHlDb25maWcsXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IGlzT3BlbiA9IGlzTW9kYWxPcGVuKGRyYXdlclNsdWcpXG5cbiAgY29uc3QgZW5hYmxlZENvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZmlsdGVyKCh7IHNsdWcgfSkgPT4ge1xuICAgIHJldHVybiBjb2xsZWN0aW9uU2x1Z3MuaW5jbHVkZXMoc2x1ZylcbiAgfSlcblxuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPE9wdGlvbjxzdHJpbmc+PigoKSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFNlbGVjdGlvbiA9IGNvbGxlY3Rpb25TbHVnRnJvbVByb3BzIHx8IGVuYWJsZWRDb2xsZWN0aW9uc1swXT8uc2x1Z1xuICAgIGNvbnN0IGZvdW5kID0gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWc6IGluaXRpYWxTZWxlY3Rpb24gfSlcblxuICAgIHJldHVybiBmb3VuZFxuICAgICAgPyB7XG4gICAgICAgICAgbGFiZWw6IGZvdW5kLmxhYmVscyxcbiAgICAgICAgICB2YWx1ZTogZm91bmQuc2x1ZyxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgfSlcblxuICBjb25zdCBbRG9jdW1lbnREcmF3ZXIsIERvY3VtZW50RHJhd2VyVG9nZ2xlciwgeyBkcmF3ZXJTbHVnOiBkb2N1bWVudERyYXdlclNsdWcgfV0gPVxuICAgIHVzZURvY3VtZW50RHJhd2VyKHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnOiBzZWxlY3RlZE9wdGlvbi52YWx1ZSxcbiAgICB9KVxuXG4gIGNvbnN0IHVwZGF0ZVNlbGVjdGVkT3B0aW9uID0gdXNlRWZmZWN0RXZlbnQoKGNvbGxlY3Rpb25TbHVnOiBDb2xsZWN0aW9uU2x1ZykgPT4ge1xuICAgIGlmIChjb2xsZWN0aW9uU2x1ZyAmJiBjb2xsZWN0aW9uU2x1ZyAhPT0gc2VsZWN0ZWRPcHRpb24/LnZhbHVlKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbih7XG4gICAgICAgIGxhYmVsOiBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KT8ubGFiZWxzLFxuICAgICAgICB2YWx1ZTogY29sbGVjdGlvblNsdWcsXG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKGNvbGxlY3Rpb25TbHVnRnJvbVByb3BzKVxuICB9LCBbY29sbGVjdGlvblNsdWdGcm9tUHJvcHNdKVxuXG4gIC8qKlxuICAgKiBUaGlzIHBlcmZvcm1zIGEgZnVsbCBzZXJ2ZXIgcm91bmQgdHJpcCB0byBnZXQgdGhlIGxpc3QgdmlldyBmb3IgdGhlIHNlbGVjdGVkIGNvbGxlY3Rpb24uXG4gICAqIE9uIHRoZSBzZXJ2ZXIsIHRoZSBkYXRhIGlzIGZyZXNobHkgcXVlcmllZCBmb3IgdGhlIGxpc3QgdmlldyBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIGZ1bGx5IHJlbmRlcmVkLlxuICAgKiBUaGlzIHdvcmsgaW5jbHVkZXMgYnVpbGRpbmcgY29sdW1uIHN0YXRlLCByZW5kZXJpbmcgY3VzdG9tIGNvbXBvbmVudHMsIGV0Yy5cbiAgICovXG4gIGNvbnN0IHJlZnJlc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoeyBzbHVnLCBxdWVyeSB9OiB7IHF1ZXJ5PzogTGlzdFF1ZXJ5OyBzbHVnOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3UXVlcnk6IExpc3RRdWVyeSA9IHsgLi4uKHF1ZXJ5IHx8IHt9KSwgd2hlcmU6IHsgLi4uKHF1ZXJ5Py53aGVyZSB8fCB7fSkgfSB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9uID0gZmlsdGVyT3B0aW9ucz8uW3NsdWddXG5cbiAgICAgICAgaWYgKGZpbHRlck9wdGlvbnMgJiYgdHlwZW9mIGZpbHRlck9wdGlvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgbmV3UXVlcnkud2hlcmUgPSBob2lzdFF1ZXJ5UGFyYW1zVG9BbmQobmV3UXVlcnkud2hlcmUsIGZpbHRlck9wdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzbHVnKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZW5kZXJMaXN0U2VydmVyRm5SZXR1cm5UeXBlID0gKGF3YWl0IHNlcnZlckZ1bmN0aW9uKHtcbiAgICAgICAgICAgIG5hbWU6ICdyZW5kZXItbGlzdCcsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnOiBzbHVnLFxuICAgICAgICAgICAgICBkaXNhYmxlQnVsa0RlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZUJ1bGtFZGl0OiB0cnVlLFxuICAgICAgICAgICAgICBkaXNhYmxlUXVlcnlQcmVzZXRzLFxuICAgICAgICAgICAgICBkcmF3ZXJTbHVnLFxuICAgICAgICAgICAgICBlbmFibGVSb3dTZWxlY3Rpb25zLFxuICAgICAgICAgICAgICBvdmVycmlkZUVudGl0eVZpc2liaWxpdHksXG4gICAgICAgICAgICAgIHF1ZXJ5OiBuZXdRdWVyeSxcbiAgICAgICAgICAgIH0gc2F0aXNmaWVzIFJlbmRlckxpc3RTZXJ2ZXJGbkFyZ3MsXG4gICAgICAgICAgfSkpIGFzIFJlbmRlckxpc3RTZXJ2ZXJGblJldHVyblR5cGVcblxuICAgICAgICAgIHNldExpc3RWaWV3KHJlc3VsdD8uTGlzdCB8fCBudWxsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldExpc3RWaWV3KG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZW5kZXJpbmcgTGlzdCBWaWV3OiAnLCBfZXJyKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgY2xvc2VNb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBzZXJ2ZXJGdW5jdGlvbixcbiAgICAgIGNsb3NlTW9kYWwsXG4gICAgICBkcmF3ZXJTbHVnLFxuICAgICAgaXNPcGVuLFxuICAgICAgZW5hYmxlUm93U2VsZWN0aW9ucyxcbiAgICAgIGZpbHRlck9wdGlvbnMsXG4gICAgICBvdmVycmlkZUVudGl0eVZpc2liaWxpdHksXG4gICAgICBkaXNhYmxlUXVlcnlQcmVzZXRzLFxuICAgIF0sXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghTGlzdFZpZXcpIHtcbiAgICAgIHZvaWQgcmVmcmVzaCh7IHNsdWc6IHNlbGVjdGVkT3B0aW9uPy52YWx1ZSB9KVxuICAgIH1cbiAgfSwgW3JlZnJlc2gsIExpc3RWaWV3LCBzZWxlY3RlZE9wdGlvbi52YWx1ZV0pXG5cbiAgY29uc3Qgb25DcmVhdGVOZXcgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBkb2MgfSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvblNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvblNlbGVjdCh7XG4gICAgICAgICAgY29sbGVjdGlvblNsdWc6IHNlbGVjdGVkT3B0aW9uPy52YWx1ZSxcbiAgICAgICAgICBkb2MsXG4gICAgICAgICAgZG9jSUQ6IGRvYy5pZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2xvc2VNb2RhbChkb2N1bWVudERyYXdlclNsdWcpXG4gICAgICBjbG9zZU1vZGFsKGRyYXdlclNsdWcpXG4gICAgfSxcbiAgICBbY2xvc2VNb2RhbCwgZG9jdW1lbnREcmF3ZXJTbHVnLCBkcmF3ZXJTbHVnLCBvblNlbGVjdCwgc2VsZWN0ZWRPcHRpb24udmFsdWVdLFxuICApXG5cbiAgY29uc3Qgb25RdWVyeUNoYW5nZTogTGlzdERyYXdlckNvbnRleHRQcm9wc1snb25RdWVyeUNoYW5nZSddID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXJ5KSA9PiB7XG4gICAgICB2b2lkIHJlZnJlc2goeyBzbHVnOiBzZWxlY3RlZE9wdGlvbj8udmFsdWUsIHF1ZXJ5IH0pXG4gICAgfSxcbiAgICBbcmVmcmVzaCwgc2VsZWN0ZWRPcHRpb24udmFsdWVdLFxuICApXG5cbiAgY29uc3Qgc2V0TXlTZWxlY3RlZE9wdGlvbjogTGlzdERyYXdlckNvbnRleHRQcm9wc1snc2V0U2VsZWN0ZWRPcHRpb24nXSA9IHVzZUNhbGxiYWNrKFxuICAgIChpbmNvbWluZ1NlbGVjdGlvbikgPT4ge1xuICAgICAgc2V0U2VsZWN0ZWRPcHRpb24oaW5jb21pbmdTZWxlY3Rpb24pXG4gICAgICB2b2lkIHJlZnJlc2goeyBzbHVnOiBpbmNvbWluZ1NlbGVjdGlvbj8udmFsdWUgfSlcbiAgICB9LFxuICAgIFtyZWZyZXNoXSxcbiAgKVxuXG4gIGNvbnN0IHJlZnJlc2hTZWxmOiBMaXN0RHJhd2VyQ29udGV4dFR5cGVbJ3JlZnJlc2gnXSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChpbmNvbWluZ0NvbGxlY3Rpb25TbHVnKSA9PiB7XG4gICAgICBpZiAoaW5jb21pbmdDb2xsZWN0aW9uU2x1Zykge1xuICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbih7XG4gICAgICAgICAgbGFiZWw6IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnOiBpbmNvbWluZ0NvbGxlY3Rpb25TbHVnIH0pPy5sYWJlbHMsXG4gICAgICAgICAgdmFsdWU6IGluY29taW5nQ29sbGVjdGlvblNsdWcsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHJlZnJlc2goeyBzbHVnOiBzZWxlY3RlZE9wdGlvbi52YWx1ZSB8fCBpbmNvbWluZ0NvbGxlY3Rpb25TbHVnIH0pXG4gICAgfSxcbiAgICBbZ2V0RW50aXR5Q29uZmlnLCByZWZyZXNoLCBzZWxlY3RlZE9wdGlvbi52YWx1ZV0sXG4gIClcblxuICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgcmV0dXJuIDxMb2FkaW5nT3ZlcmxheSAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdERyYXdlckNvbnRleHRQcm92aWRlclxuICAgICAgYWxsb3dDcmVhdGU9e2FsbG93Q3JlYXRlfVxuICAgICAgY3JlYXRlTmV3RHJhd2VyU2x1Zz17ZG9jdW1lbnREcmF3ZXJTbHVnfVxuICAgICAgRG9jdW1lbnREcmF3ZXJUb2dnbGVyPXtEb2N1bWVudERyYXdlclRvZ2dsZXJ9XG4gICAgICBkcmF3ZXJTbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgZW5hYmxlZENvbGxlY3Rpb25zPXtjb2xsZWN0aW9uU2x1Z3N9XG4gICAgICBvbkJ1bGtTZWxlY3Q9e29uQnVsa1NlbGVjdH1cbiAgICAgIG9uUXVlcnlDaGFuZ2U9e29uUXVlcnlDaGFuZ2V9XG4gICAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gICAgICByZWZyZXNoPXtyZWZyZXNoU2VsZn1cbiAgICAgIHNlbGVjdGVkT3B0aW9uPXtzZWxlY3RlZE9wdGlvbn1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uPXtzZXRNeVNlbGVjdGVkT3B0aW9ufVxuICAgID5cbiAgICAgIHtMaXN0Vmlld31cbiAgICAgIDxEb2N1bWVudERyYXdlciBvblNhdmU9e29uQ3JlYXRlTmV3fSAvPlxuICAgIDwvTGlzdERyYXdlckNvbnRleHRQcm92aWRlcj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbi8qKlxuICogUmV0dXJucyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGNhbGwgdGhlIHBhc3NlZCBmdW5jdGlvbiB3aGVuIGl0IGhhc24ndCBiZWVuIGNhbGxlZCBmb3IgdGhlIHdhaXQgcGVyaW9kXG4gKiBAcGFyYW0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gd2FpdCBXYWl0IHBlcmlvZCBhZnRlciBmdW5jdGlvbiBoYXNuJ3QgYmVlbiBjYWxsZWQgZm9yXG4gKiBAcmV0dXJucyBBIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgaXMgZGVib3VuY2VkXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VEZWJvdW5jZWRDYWxsYmFjayA9IDxURnVuY3Rpb25BcmdzID0gYW55PihmdW5jLCB3YWl0KSA9PiB7XG4gIC8vIFVzZSBhIHJlZiB0byBzdG9yZSB0aGUgdGltZW91dCBiZXR3ZWVuIHJlbmRlcnNcbiAgLy8gYW5kIHByZXZlbnQgY2hhbmdlcyB0byBpdCBmcm9tIGNhdXNpbmcgcmUtcmVuZGVyc1xuICBjb25zdCB0aW1lb3V0ID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+Pih1bmRlZmluZWQpXG5cbiAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgICguLi5hcmdzOiBURnVuY3Rpb25BcmdzW10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dC5jdXJyZW50KVxuICAgICAgICBmdW5jKC4uLmFyZ3MpXG4gICAgICB9XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0LmN1cnJlbnQpXG4gICAgICB0aW1lb3V0LmN1cnJlbnQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KVxuICAgIH0sXG4gICAgW2Z1bmMsIHdhaXRdLFxuICApXG59XG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbnR5cGUgUXVldWVkRnVuY3Rpb24gPSAoKSA9PiBQcm9taXNlPHZvaWQ+XG5cbnR5cGUgUXVldWVkVGFza09wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGFmdGVyIHRoZSBxdWV1ZSBoYXMgcHJvY2Vzc2VkIGEgZnVuY3Rpb25cbiAgICogVXNlZCB0byBwZXJmb3JtIHNpZGUgZWZmZWN0cyBhZnRlciBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFmdGVyUHJvY2Vzcz86ICgpID0+IHZvaWRcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IHRoZSBxdWV1ZSBmcm9tIHByb2Nlc3NpbmcgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zXG4gICAqIENhbiBhbHNvIGJlIHVzZWQgdG8gcGVyZm9ybSBzaWRlIGVmZmVjdHMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBgZmFsc2VgLCB0aGUgcXVldWUgd2lsbCBub3QgcHJvY2Vzc1xuICAgKi9cbiAgYmVmb3JlUHJvY2Vzcz86ICgpID0+IGJvb2xlYW4gfCB2b2lkXG59XG5cbnR5cGUgUXVldWVUYXNrID0gKGZuOiBRdWV1ZWRGdW5jdGlvbiwgb3B0aW9ucz86IFF1ZXVlZFRhc2tPcHRpb25zKSA9PiB2b2lkXG5cbi8qKlxuICogQSBSZWFjdCBob29rIHRoYXQgYWxsb3dzIHlvdSB0byBxdWV1ZSB1cCBmdW5jdGlvbnMgdG8gYmUgZXhlY3V0ZWQgaW4gb3JkZXIuXG4gKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIGVuc3VyZSBsb25nIHJ1bm5pbmcgbmV0d29ya3MgcmVxdWVzdHMgYXJlIHByb2Nlc3NlZCBzZXF1ZW50aWFsbHkuXG4gKiBCdWlsZHMgdXAgYSBcInF1ZXVlXCIgb2YgZnVuY3Rpb25zIHRvIGJlIGV4ZWN1dGVkIGluIG9yZGVyLCBvbmx5IGV2ZXIgcHJvY2Vzc2luZyB0aGUgbGFzdCBmdW5jdGlvbiBpbiB0aGUgcXVldWUuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGxvbmcgcXVldWUgb2YgdGFza3MgZG9lc24ndCBjYXVzZSBhIGJhY2tsb2cgb2YgdGFza3MgdG8gYmUgcHJvY2Vzc2VkLlxuICogRS5nLiBpZiB5b3UgcXVldWUgYSB0YXNrIGFuZCBpdCBiZWdpbnMgcnVubmluZywgdGhlbiB5b3UgcXVldWUgOSBtb3JlIHRhc2tzOlxuICogICAxLiBUaGUgY3VycmVudGx5IHRhc2sgd2lsbCBmaW5pc2hcbiAqICAgMi4gVGhlIG5leHQgdGFzayBpbiB0aGUgcXVldWUgd2lsbCBydW5cbiAqICAgMy4gQWxsIHJlbWFpbmluZyB0YXNrcyB3aWxsIGJlIGRpc2NhcmRlZFxuICogQHJldHVybnMge3F1ZXVlVGFza30gQSBmdW5jdGlvbiB1c2VkIHRvIHF1ZXVlIGEgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICogY29uc3QgeyBxdWV1ZVRhc2sgfSA9IHVzZVF1ZXVlKClcbiAqIHF1ZXVlVGFzayhhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5leGFtcGxlLmNvbScpXG4gKiB9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUXVldWUoKToge1xuICBxdWV1ZVRhc2s6IFF1ZXVlVGFza1xufSB7XG4gIGNvbnN0IHF1ZXVlID0gdXNlUmVmPFF1ZXVlZEZ1bmN0aW9uW10+KFtdKVxuXG4gIGNvbnN0IGlzUHJvY2Vzc2luZyA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBxdWV1ZVRhc2sgPSB1c2VDYWxsYmFjazxRdWV1ZVRhc2s+KChmbiwgb3B0aW9ucykgPT4ge1xuICAgIHF1ZXVlLmN1cnJlbnQucHVzaChmbilcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmcuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQWxsb3cgdGhlIGNvbnN1bWVyIHRvIHByZXZlbnQgdGhlIHF1ZXVlIGZyb20gcHJvY2Vzc2luZyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnNcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucz8uYmVmb3JlUHJvY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBzaG91bGRDb250aW51ZSA9IG9wdGlvbnMuYmVmb3JlUHJvY2VzcygpXG5cbiAgICAgICAgaWYgKHNob3VsZENvbnRpbnVlID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChxdWV1ZS5jdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbGF0ZXN0VGFzayA9IHF1ZXVlLmN1cnJlbnQucG9wKCkgLy8gT25seSBwcm9jZXNzIHRoZSBsYXN0IHRhc2sgaW4gdGhlIHF1ZXVlXG4gICAgICAgIHF1ZXVlLmN1cnJlbnQgPSBbXSAvLyBEaXNjYXJkIGFsbCBvdGhlciB0YXNrc1xuXG4gICAgICAgIGlzUHJvY2Vzc2luZy5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgbGF0ZXN0VGFzaygpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHF1ZXVlZCBmdW5jdGlvbjonLCBlcnIpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlzUHJvY2Vzc2luZy5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucz8uYWZ0ZXJQcm9jZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvcHRpb25zLmFmdGVyUHJvY2VzcygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdm9pZCBwcm9jZXNzUXVldWUoKVxuICB9LCBbXSlcblxuICByZXR1cm4geyBxdWV1ZVRhc2sgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RXZlbnQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBDb250ZXh0ID0gY3JlYXRlQ29udGV4dDx7XG4gIG1vc3RSZWNlbnRVcGRhdGU6IERvY3VtZW50RXZlbnQgfCBudWxsXG4gIHJlcG9ydFVwZGF0ZTogKGV2ZW50OiBEb2N1bWVudEV2ZW50KSA9PiB2b2lkXG59Pih7XG4gIG1vc3RSZWNlbnRVcGRhdGU6IG51bGwsXG4gIHJlcG9ydFVwZGF0ZTogKCkgPT4gbnVsbCxcbn0pXG5cbmV4cG9ydCBjb25zdCBEb2N1bWVudEV2ZW50c1Byb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IFttb3N0UmVjZW50VXBkYXRlLCByZXBvcnRVcGRhdGVdID0gdXNlU3RhdGU8RG9jdW1lbnRFdmVudD4obnVsbClcblxuICByZXR1cm4gPENvbnRleHQgdmFsdWU9e3sgbW9zdFJlY2VudFVwZGF0ZSwgcmVwb3J0VXBkYXRlIH19PntjaGlsZHJlbn08L0NvbnRleHQ+XG59XG5cbi8qKlxuICogVGhlIHVzZURvY3VtZW50RXZlbnRzIGhvb2sgcHJvdmlkZXMgYSB3YXkgb2Ygc3Vic2NyaWJpbmcgdG8gY3Jvc3MtZG9jdW1lbnQgZXZlbnRzLFxuICogc3VjaCBhcyB1cGRhdGVzIG1hZGUgdG8gbmVzdGVkIGRvY3VtZW50cyB3aXRoaW4gYSBkcmF3ZXIuXG4gKiBUaGlzIGhvb2sgd2lsbCByZXBvcnQgZG9jdW1lbnQgZXZlbnRzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBkb2N1bWVudCBjdXJyZW50bHkgYmVpbmcgZWRpdGVkLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vcGF5bG9hZGNtcy5jb20vZG9jcy9hZG1pbi9yZWFjdC1ob29rcyN1c2Vkb2N1bWVudGV2ZW50c1xuICovXG5leHBvcnQgY29uc3QgdXNlRG9jdW1lbnRFdmVudHMgPSAoKSA9PiB1c2UoQ29udGV4dClcbiIsImltcG9ydCB0eXBlIHsgV2hlcmUgfSBmcm9tICdwYXlsb2FkJ1xuXG5leHBvcnQgY29uc3Qgc2FuaXRpemVGaWx0ZXJPcHRpb25zUXVlcnkgPSAocXVlcnk6IFdoZXJlKTogV2hlcmUgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyeSkge1xuICAgIGNvbnN0IHZhbHVlID0gcXVlcnlba2V5XVxuICAgIGlmICgoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdhbmQnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnb3InKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCB2YWwgb2YgdmFsdWUpIHtcbiAgICAgICAgc2FuaXRpemVGaWx0ZXJPcHRpb25zUXVlcnkodmFsKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB2YWx1ZSAmJlxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ2luJyBpbiB2YWx1ZSAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZS5pbikgJiZcbiAgICAgIHZhbHVlLmluLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAge1xuICAgICAgICBxdWVyeVtrZXldID0geyBleGlzdHM6IGZhbHNlIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVlcnlcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBIYXNNYW55VmFsdWVVbmlvbiB9IGZyb20gJy4vdHlwZXMuanMnXG5cbnR5cGUgUmVsYXRpb25NYXAgPSB7XG4gIFtyZWxhdGlvbjogc3RyaW5nXTogKG51bWJlciB8IHN0cmluZylbXVxufVxuXG50eXBlIENyZWF0ZVJlbGF0aW9uTWFwID0gKFxuICBhcmdzOiB7XG4gICAgcmVsYXRpb25Ubzogc3RyaW5nW11cbiAgfSAmIEhhc01hbnlWYWx1ZVVuaW9uLFxuKSA9PiBSZWxhdGlvbk1hcFxuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVsYXRpb25NYXA6IENyZWF0ZVJlbGF0aW9uTWFwID0gKHsgaGFzTWFueSwgcmVsYXRpb25UbywgdmFsdWUgfSkgPT4ge1xuICBjb25zdCByZWxhdGlvbk1hcDogUmVsYXRpb25NYXAgPSByZWxhdGlvblRvLnJlZHVjZSgobWFwLCBjdXJyZW50KSA9PiB7XG4gICAgcmV0dXJuIHsgLi4ubWFwLCBbY3VycmVudF06IFtdIH1cbiAgfSwge30pXG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlbGF0aW9uTWFwXG4gIH1cblxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBhZGQgPSAocmVsYXRpb246IHN0cmluZywgaWQ6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCh0eXBlb2YgaWQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpZCA9PT0gJ251bWJlcicpICYmIHR5cGVvZiByZWxhdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHJlbGF0aW9uTWFwW3JlbGF0aW9uXSkge1xuICAgICAgICAgIHJlbGF0aW9uTWFwW3JlbGF0aW9uXS5wdXNoKGlkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uTWFwW3JlbGF0aW9uXSA9IFtpZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzTWFueSA9PT0gdHJ1ZSkge1xuICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICBhZGQodmFsLnJlbGF0aW9uVG8sIHZhbC52YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkKHZhbHVlLnJlbGF0aW9uVG8sIHZhbHVlLnZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWxhdGlvbk1hcFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFZhbHVlV2l0aFJlbGF0aW9uIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZWFjdFNlbGVjdC90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgT3B0aW9uR3JvdXAgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGFsbG93RWRpdDogYm9vbGVhblxuICBvcHRpb25zOiBPcHRpb25Hcm91cFtdXG4gIHZhbHVlOiBWYWx1ZVdpdGhSZWxhdGlvbiB8IFZhbHVlV2l0aFJlbGF0aW9uW11cbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRPcHRpb25zQnlWYWx1ZSA9ICh7IGFsbG93RWRpdCwgb3B0aW9ucywgdmFsdWUgfTogQXJncyk6IE9wdGlvbiB8IE9wdGlvbltdID0+IHtcbiAgaWYgKHZhbHVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHZhbCkgPT4ge1xuICAgICAgICBsZXQgbWF0Y2hlZE9wdGlvbjogT3B0aW9uXG5cbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRHcm91cCkgPT4ge1xuICAgICAgICAgIGlmICghbWF0Y2hlZE9wdGlvbikge1xuICAgICAgICAgICAgbWF0Y2hlZE9wdGlvbiA9IG9wdEdyb3VwLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IHZhbC52YWx1ZSAmJiBvcHRpb24ucmVsYXRpb25UbyA9PT0gdmFsLnJlbGF0aW9uVG9cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uID8geyBhbGxvd0VkaXQsIC4uLm1hdGNoZWRPcHRpb24gfSA6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBsZXQgbWF0Y2hlZE9wdGlvbjogT3B0aW9uXG5cbiAgICBvcHRpb25zLmZvckVhY2goKG9wdEdyb3VwKSA9PiB7XG4gICAgICBpZiAoIW1hdGNoZWRPcHRpb24pIHtcbiAgICAgICAgbWF0Y2hlZE9wdGlvbiA9IG9wdEdyb3VwLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUudmFsdWUgJiYgb3B0aW9uLnJlbGF0aW9uVG8gPT09IHZhbHVlLnJlbGF0aW9uVG9cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG1hdGNoZWRPcHRpb24gPyB7IGFsbG93RWRpdCwgLi4ubWF0Y2hlZE9wdGlvbiB9IDogdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiwgT3B0aW9uLCBPcHRpb25Hcm91cCB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IGZvcm1hdERvY1RpdGxlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2Zvcm1hdERvY1RpdGxlL2luZGV4LmpzJ1xuXG5jb25zdCByZWR1Y2VUb0lEcyA9IChvcHRpb25zKSA9PlxuICBvcHRpb25zLnJlZHVjZSgoaWRzLCBvcHRpb24pID0+IHtcbiAgICBpZiAob3B0aW9uLm9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBbLi4uaWRzLCAuLi5yZWR1Y2VUb0lEcyhvcHRpb24ub3B0aW9ucyldXG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5pZHMsIHsgaWQ6IG9wdGlvbi52YWx1ZSwgcmVsYXRpb25Ubzogb3B0aW9uLnJlbGF0aW9uVG8gfV1cbiAgfSwgW10pXG5cbmNvbnN0IHNvcnRPcHRpb25zID0gKG9wdGlvbnM6IE9wdGlvbltdKTogT3B0aW9uW10gPT5cbiAgb3B0aW9ucy5zb3J0KChhOiBPcHRpb24sIGI6IE9wdGlvbikgPT4ge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBhPy5sYWJlbD8ubG9jYWxlQ29tcGFyZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIGI/LmxhYmVsPy5sb2NhbGVDb21wYXJlID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICByZXR1cm4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfSlcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnNSZWR1Y2VyID0gKHN0YXRlOiBPcHRpb25Hcm91cFtdLCBhY3Rpb246IEFjdGlvbik6IE9wdGlvbkdyb3VwW10gPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnQUREJzoge1xuICAgICAgY29uc3QgeyBjb2xsZWN0aW9uLCBjb25maWcsIGRvY3MsIGkxOG4sIGlkcyA9IFtdLCBzb3J0IH0gPSBhY3Rpb25cbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gY29sbGVjdGlvbi5zbHVnXG4gICAgICBjb25zdCBsb2FkZWRJRHMgPSByZWR1Y2VUb0lEcyhzdGF0ZSlcbiAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4uc3RhdGVdXG4gICAgICBjb25zdCBvcHRpb25zVG9BZGRUbyA9IG5ld09wdGlvbnMuZmluZChcbiAgICAgICAgKG9wdGlvbkdyb3VwKSA9PiBvcHRpb25Hcm91cC5sYWJlbCA9PT0gY29sbGVjdGlvbi5sYWJlbHMucGx1cmFsLFxuICAgICAgKVxuICAgICAgY29uc3QgbmV3U3ViT3B0aW9ucyA9IGRvY3MucmVkdWNlKChkb2NTdWJPcHRpb25zLCBkb2MpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxvYWRlZElEcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGRvYy5pZCAmJiBpdGVtLnJlbGF0aW9uVG8gPT09IHJlbGF0aW9uKS5sZW5ndGggPT09XG4gICAgICAgICAgMFxuICAgICAgICApIHtcbiAgICAgICAgICBsb2FkZWRJRHMucHVzaCh7IGlkOiBkb2MuaWQsIHJlbGF0aW9uVG86IHJlbGF0aW9uIH0pXG5cbiAgICAgICAgICBjb25zdCBkb2NUaXRsZSA9IGZvcm1hdERvY1RpdGxlKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc6IGNvbGxlY3Rpb24sXG4gICAgICAgICAgICBkYXRhOiBkb2MsXG4gICAgICAgICAgICBkYXRlRm9ybWF0OiBjb25maWcuYWRtaW4uZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgIGZhbGxiYWNrOiBgJHtpMThuLnQoJ2dlbmVyYWw6dW50aXRsZWQnKX0gLSBJRDogJHtkb2MuaWR9YCxcbiAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5kb2NTdWJPcHRpb25zLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogZG9jVGl0bGUsXG4gICAgICAgICAgICAgIHJlbGF0aW9uVG86IHJlbGF0aW9uLFxuICAgICAgICAgICAgICB2YWx1ZTogZG9jLmlkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9jU3ViT3B0aW9uc1xuICAgICAgfSwgW10pXG5cbiAgICAgIGlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbG9hZGVkSURzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQgJiYgaXRlbS5yZWxhdGlvblRvID09PSByZWxhdGlvbikubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGxvYWRlZElEcy5wdXNoKHsgaWQsIHJlbGF0aW9uVG86IHJlbGF0aW9uIH0pXG4gICAgICAgICAgbmV3U3ViT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGFsbG93RWRpdDogZmFsc2UsXG4gICAgICAgICAgICBsYWJlbDogYCR7aTE4bi50KCdnZW5lcmFsOnVudGl0bGVkJyl9IC0gSUQ6ICR7aWR9YCxcbiAgICAgICAgICAgIHJlbGF0aW9uVG86IHJlbGF0aW9uLFxuICAgICAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChvcHRpb25zVG9BZGRUbykge1xuICAgICAgICBjb25zdCBzdWJPcHRpb25zID0gWy4uLm9wdGlvbnNUb0FkZFRvLm9wdGlvbnMsIC4uLm5ld1N1Yk9wdGlvbnNdXG5cbiAgICAgICAgb3B0aW9uc1RvQWRkVG8ub3B0aW9ucyA9IHNvcnQgPyBzb3J0T3B0aW9ucyhzdWJPcHRpb25zKSA6IHN1Yk9wdGlvbnNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld09wdGlvbnMucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGNvbGxlY3Rpb24ubGFiZWxzLnBsdXJhbCwgaTE4biksXG4gICAgICAgICAgb3B0aW9uczogc29ydCA/IHNvcnRPcHRpb25zKG5ld1N1Yk9wdGlvbnMpIDogbmV3U3ViT3B0aW9ucyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld09wdGlvbnNcbiAgICB9XG5cbiAgICBjYXNlICdDTEVBUic6IHtcbiAgICAgIGNvbnN0IGV4ZW1wdFZhbHVlcyA9IGFjdGlvbi5leGVtcHRWYWx1ZXNcbiAgICAgICAgPyBBcnJheS5pc0FycmF5KGFjdGlvbi5leGVtcHRWYWx1ZXMpXG4gICAgICAgICAgPyBhY3Rpb24uZXhlbXB0VmFsdWVzXG4gICAgICAgICAgOiBbYWN0aW9uLmV4ZW1wdFZhbHVlc11cbiAgICAgICAgOiBbXVxuXG4gICAgICBjb25zdCBjbGVhcmVkU3RhdGVXaXRoRXhlbXB0VmFsdWVzID0gc3RhdGUuZmlsdGVyKChvcHRpb25Hcm91cCkgPT4ge1xuICAgICAgICBjb25zdCBjbGVhcmVkT3B0aW9ucyA9IG9wdGlvbkdyb3VwLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICBpZiAoZXhlbXB0VmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhlbXB0VmFsdWVzLnNvbWUoKGV4ZW1wdFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBleGVtcHRWYWx1ZSAmJiBvcHRpb24udmFsdWUgPT09IGV4ZW1wdFZhbHVlLnZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9KVxuXG4gICAgICAgIG9wdGlvbkdyb3VwLm9wdGlvbnMgPSBjbGVhcmVkT3B0aW9uc1xuXG4gICAgICAgIHJldHVybiBjbGVhcmVkT3B0aW9ucy5sZW5ndGggPiAwXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gY2xlYXJlZFN0YXRlV2l0aEV4ZW1wdFZhbHVlc1xuICAgIH1cblxuICAgIGNhc2UgJ1JFTU9WRSc6IHtcbiAgICAgIGNvbnN0IHsgaWQsIGNvbGxlY3Rpb24gfSA9IGFjdGlvblxuXG4gICAgICBjb25zdCBuZXdPcHRpb25zID0gWy4uLnN0YXRlXVxuXG4gICAgICBjb25zdCBpbmRleE9mR3JvdXAgPSBuZXdPcHRpb25zLmZpbmRJbmRleChcbiAgICAgICAgKG9wdGlvbkdyb3VwKSA9PiBvcHRpb25Hcm91cC5sYWJlbCA9PT0gY29sbGVjdGlvbi5sYWJlbHMucGx1cmFsLFxuICAgICAgKVxuXG4gICAgICBpZiAoaW5kZXhPZkdyb3VwID09PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3T3B0aW9uc1xuICAgICAgfVxuXG4gICAgICBuZXdPcHRpb25zW2luZGV4T2ZHcm91cF0gPSB7XG4gICAgICAgIC4uLm5ld09wdGlvbnNbaW5kZXhPZkdyb3VwXSxcbiAgICAgICAgb3B0aW9uczogbmV3T3B0aW9uc1tpbmRleE9mR3JvdXBdLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSAhPT0gaWQpLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3T3B0aW9uc1xuICAgIH1cblxuICAgIGNhc2UgJ1VQREFURSc6IHtcbiAgICAgIGNvbnN0IHsgY29sbGVjdGlvbiwgY29uZmlnLCBkb2MsIGkxOG4gfSA9IGFjdGlvblxuICAgICAgY29uc3QgcmVsYXRpb24gPSBjb2xsZWN0aW9uLnNsdWdcbiAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4uc3RhdGVdXG5cbiAgICAgIGNvbnN0IGRvY1RpdGxlID0gZm9ybWF0RG9jVGl0bGUoe1xuICAgICAgICBjb2xsZWN0aW9uQ29uZmlnOiBjb2xsZWN0aW9uLFxuICAgICAgICBkYXRhOiBkb2MsXG4gICAgICAgIGRhdGVGb3JtYXQ6IGNvbmZpZy5hZG1pbi5kYXRlRm9ybWF0LFxuICAgICAgICBmYWxsYmFjazogYCR7aTE4bi50KCdnZW5lcmFsOnVudGl0bGVkJyl9IC0gSUQ6ICR7ZG9jLmlkfWAsXG4gICAgICAgIGkxOG4sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBmb3VuZE9wdGlvbkdyb3VwID0gbmV3T3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0aW9uR3JvdXApID0+IG9wdGlvbkdyb3VwLmxhYmVsID09PSBjb2xsZWN0aW9uLmxhYmVscy5wbHVyYWwsXG4gICAgICApXG4gICAgICBjb25zdCBmb3VuZE9wdGlvbiA9IGZvdW5kT3B0aW9uR3JvdXA/Lm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBkb2MuaWQpXG5cbiAgICAgIGlmIChmb3VuZE9wdGlvbikge1xuICAgICAgICBmb3VuZE9wdGlvbi5sYWJlbCA9IGRvY1RpdGxlXG4gICAgICAgIGZvdW5kT3B0aW9uLnJlbGF0aW9uVG8gPSByZWxhdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3T3B0aW9uc1xuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IE11bHRpVmFsdWVQcm9wcyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY29tcG9uZW50cyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IHR5cGUgeyBSZWFjdFNlbGVjdEFkYXB0ZXJQcm9wcyB9IGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL1JlYWN0U2VsZWN0L3R5cGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuLi8uLi90eXBlcy5qcydcblxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL1Rvb2x0aXAvaW5kZXguanMnXG5pbXBvcnQgeyBFZGl0SWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2ljb25zL0VkaXQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmVsYXRpb25zaGlwLS1tdWx0aS12YWx1ZS1sYWJlbCdcblxuZXhwb3J0IGNvbnN0IE11bHRpVmFsdWVMYWJlbDogUmVhY3QuRkM8XG4gIHtcbiAgICBzZWxlY3RQcm9wczoge1xuICAgICAgLy8gVE9ETyBGaXggdGhpcyAtIG1vZHVsZVJlc29sdXRpb24gMTYgYnJlYWtzIG91ciBkZWNsYXJlIG1vZHVsZVxuICAgICAgY3VzdG9tUHJvcHM6IFJlYWN0U2VsZWN0QWRhcHRlclByb3BzWydjdXN0b21Qcm9wcyddXG4gICAgfVxuICB9ICYgTXVsdGlWYWx1ZVByb3BzPE9wdGlvbj5cbj4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGRhdGE6IHsgYWxsb3dFZGl0LCBsYWJlbCwgcmVsYXRpb25UbywgdmFsdWUgfSxcbiAgICBzZWxlY3RQcm9wczogeyBjdXN0b21Qcm9wczogeyBkcmFnZ2FibGVQcm9wcywgb25Eb2N1bWVudE9wZW4gfSA9IHt9IH0gPSB7fSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IFtzaG93VG9vbHRpcCwgc2V0U2hvd1Rvb2x0aXBdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBoYXNSZWFkUGVybWlzc2lvbiA9IEJvb2xlYW4ocGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5bcmVsYXRpb25Ub10/LnJlYWQpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfSB0aXRsZT17bGFiZWwgfHwgJyd9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfT5cbiAgICAgICAgPGNvbXBvbmVudHMuTXVsdGlWYWx1ZUxhYmVsXG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgIGlubmVyUHJvcHM9e3tcbiAgICAgICAgICAgIGNsYXNzTmFtZTogYCR7YmFzZUNsYXNzfV9fdGV4dGAsXG4gICAgICAgICAgICAuLi4oZHJhZ2dhYmxlUHJvcHMgfHwge30pLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtyZWxhdGlvblRvICYmIGhhc1JlYWRQZXJtaXNzaW9uICYmIGFsbG93RWRpdCAhPT0gZmFsc2UgJiYgKFxuICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YEVkaXQgJHtsYWJlbH1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcmF3ZXItdG9nZ2xlcmB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgc2V0U2hvd1Rvb2x0aXAoZmFsc2UpXG4gICAgICAgICAgICAgIG9uRG9jdW1lbnRPcGVuKHtcbiAgICAgICAgICAgICAgICBpZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWc6IHJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgICAgaGFzUmVhZFBlcm1pc3Npb24sXG4gICAgICAgICAgICAgICAgb3BlbkluTmV3VGFiOiBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9IC8vIHByZXZlbnRzIHJlYWN0LXNlbGVjdCBkcm9wZG93biBmcm9tIG9wZW5pbmdcbiAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0U2hvd1Rvb2x0aXAodHJ1ZSl9XG4gICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldFNob3dUb29sdGlwKGZhbHNlKX1cbiAgICAgICAgICAgIG9uVG91Y2hFbmQ9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfSAvLyBwcmV2ZW50cyByZWFjdC1zZWxlY3QgZHJvcGRvd24gZnJvbSBvcGVuaW5nXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VG9vbHRpcCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3Rvb2x0aXBgfSBzaG93PXtzaG93VG9vbHRpcH0+XG4gICAgICAgICAgICAgIHt0KCdnZW5lcmFsOmVkaXRMYWJlbCcsIHsgbGFiZWw6ICcnIH0pfVxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPEVkaXRJY29uIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faWNvbmB9IC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgU2luZ2xlVmFsdWVQcm9wcyB9IGZyb20gJ3JlYWN0LXNlbGVjdCdcblxuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY29tcG9uZW50cyBhcyBTZWxlY3RDb21wb25lbnRzIH0gZnJvbSAncmVhY3Qtc2VsZWN0J1xuXG5pbXBvcnQgdHlwZSB7IFJlYWN0U2VsZWN0QWRhcHRlclByb3BzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvUmVhY3RTZWxlY3QvdHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7IE9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvVG9vbHRpcC9pbmRleC5qcydcbmltcG9ydCB7IEVkaXRJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vaWNvbnMvRWRpdC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdyZWxhdGlvbnNoaXAtLXNpbmdsZS12YWx1ZSdcblxuZXhwb3J0IGNvbnN0IFNpbmdsZVZhbHVlOiBSZWFjdC5GQzxcbiAge1xuICAgIHNlbGVjdFByb3BzOiB7XG4gICAgICAvLyBUT0RPIEZpeCB0aGlzIC0gbW9kdWxlUmVzb2x1dGlvbiAxNiBicmVha3Mgb3VyIGRlY2xhcmUgbW9kdWxlXG4gICAgICBjdXN0b21Qcm9wczogUmVhY3RTZWxlY3RBZGFwdGVyUHJvcHNbJ2N1c3RvbVByb3BzJ11cbiAgICB9XG4gIH0gJiBTaW5nbGVWYWx1ZVByb3BzPE9wdGlvbj5cbj4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGRhdGE6IHsgYWxsb3dFZGl0LCBsYWJlbCwgcmVsYXRpb25UbywgdmFsdWUgfSxcbiAgICBzZWxlY3RQcm9wczogeyBjdXN0b21Qcm9wczogeyBvbkRvY3VtZW50T3BlbiB9ID0ge30gfSA9IHt9LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbc2hvd1Rvb2x0aXAsIHNldFNob3dUb29sdGlwXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IGhhc1JlYWRQZXJtaXNzaW9uID0gQm9vbGVhbihwZXJtaXNzaW9ucz8uY29sbGVjdGlvbnM/LltyZWxhdGlvblRvXT8ucmVhZClcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb21wb25lbnRzLlNpbmdsZVZhbHVlIHsuLi5wcm9wc30gY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xhYmVsYH0gdGl0bGU9e2xhYmVsIHx8ICcnfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xhYmVsLXRleHRgfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGV4dGB9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICB7cmVsYXRpb25UbyAmJiBoYXNSZWFkUGVybWlzc2lvbiAmJiBhbGxvd0VkaXQgIT09IGZhbHNlICYmIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6ZWRpdExhYmVsJywgeyBsYWJlbCB9KX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RyYXdlci10b2dnbGVyYH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFNob3dUb29sdGlwKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgb25Eb2N1bWVudE9wZW4oe1xuICAgICAgICAgICAgICAgICAgICBpZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnOiByZWxhdGlvblRvLFxuICAgICAgICAgICAgICAgICAgICBoYXNSZWFkUGVybWlzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgb3BlbkluTmV3VGFiOiBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXksXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX0gLy8gcHJldmVudHMgcmVhY3Qtc2VsZWN0IGRyb3Bkb3duIGZyb20gb3BlbmluZ1xuICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0U2hvd1Rvb2x0aXAodHJ1ZSl9XG4gICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRTaG93VG9vbHRpcChmYWxzZSl9XG4gICAgICAgICAgICAgICAgb25Ub3VjaEVuZD17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9IC8vIHByZXZlbnRzIHJlYWN0LXNlbGVjdCBkcm9wZG93biBmcm9tIG9wZW5pbmd0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUb29sdGlwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdG9vbHRpcGB9IHNob3c9e3Nob3dUb29sdGlwfT5cbiAgICAgICAgICAgICAgICAgIHt0KCdnZW5lcmFsOmVkaXQnKX1cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgPEVkaXRJY29uIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VsZWN0Q29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFJpY2hUZXh0RmllbGRDbGllbnRQcm9wcyB9IGZyb20gJ3BheWxvYWQnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IFJpY2hUZXh0RmllbGQ6IFJlYWN0LkZDPFJpY2hUZXh0RmllbGRDbGllbnRQcm9wcz4gPSAoKSA9PiB7XG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgUm93RmllbGRDbGllbnRDb21wb25lbnQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFJlbmRlckZpZWxkcyB9IGZyb20gJy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IFJvd1Byb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlci5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3JvdydcblxuY29uc3QgUm93RmllbGRDb21wb25lbnQ6IFJvd0ZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWVsZDogeyBhZG1pbjogeyBjbGFzc05hbWUsIHN0eWxlIH0gPSB7fSwgZmllbGRzIH0sXG4gICAgZm9yY2VSZW5kZXIgPSBmYWxzZSxcbiAgICBpbmRleFBhdGggPSAnJyxcbiAgICBwYXJlbnRQYXRoID0gJycsXG4gICAgcGFyZW50U2NoZW1hUGF0aCA9ICcnLFxuICAgIHBlcm1pc3Npb25zLFxuICAgIHJlYWRPbmx5LFxuICB9ID0gcHJvcHNcblxuICByZXR1cm4gKFxuICAgIDxSb3dQcm92aWRlcj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtbZmllbGRCYXNlQ2xhc3MsIGJhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgICAgICBzdHlsZT17c3R5bGUgfHwgdW5kZWZpbmVkfVxuICAgICAgPlxuICAgICAgICA8UmVuZGVyRmllbGRzXG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWVsZHNgfVxuICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgIGZvcmNlUmVuZGVyPXtmb3JjZVJlbmRlcn1cbiAgICAgICAgICBtYXJnaW5zPXtmYWxzZX1cbiAgICAgICAgICBwYXJlbnRJbmRleFBhdGg9e2luZGV4UGF0aH1cbiAgICAgICAgICBwYXJlbnRQYXRoPXtwYXJlbnRQYXRofVxuICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9e3BhcmVudFNjaGVtYVBhdGh9XG4gICAgICAgICAgcGVybWlzc2lvbnM9e3Blcm1pc3Npb25zfVxuICAgICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvUm93UHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFJvd0ZpZWxkID0gd2l0aENvbmRpdGlvbihSb3dGaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBPcHRpb24sXG4gIE9wdGlvbk9iamVjdCxcbiAgU2VsZWN0RmllbGRDbGllbnRDb21wb25lbnQsXG4gIFNlbGVjdEZpZWxkQ2xpZW50UHJvcHMsXG59IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFJlYWN0U2VsZWN0QWRhcHRlclByb3BzIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVhY3RTZWxlY3QvdHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdElucHV0UHJvcHMgfSBmcm9tICcuL0lucHV0LmpzJ1xuXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgd2l0aENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL3dpdGhDb25kaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBtZXJnZUZpZWxkU3R5bGVzIH0gZnJvbSAnLi4vbWVyZ2VGaWVsZFN0eWxlcy5qcydcbmltcG9ydCB7IFNlbGVjdElucHV0IH0gZnJvbSAnLi9JbnB1dC5qcydcblxuZXhwb3J0IGNvbnN0IGZvcm1hdE9wdGlvbnMgPSAob3B0aW9uczogT3B0aW9uW10pOiBPcHRpb25PYmplY3RbXSA9PlxuICBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIChvcHRpb24udmFsdWUgfHwgb3B0aW9uLnZhbHVlID09PSAnJykpIHtcbiAgICAgIHJldHVybiBvcHRpb25cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IG9wdGlvbixcbiAgICAgIHZhbHVlOiBvcHRpb24sXG4gICAgfSBhcyBPcHRpb25PYmplY3RcbiAgfSlcblxuY29uc3QgU2VsZWN0RmllbGRDb21wb25lbnQ6IFNlbGVjdEZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZDoge1xuICAgICAgbmFtZSxcbiAgICAgIGFkbWluOiB7XG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGlzQ2xlYXJhYmxlID0gdHJ1ZSxcbiAgICAgICAgaXNTb3J0YWJsZSA9IHRydWUsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgfSA9IHt9IGFzIFNlbGVjdEZpZWxkQ2xpZW50UHJvcHNbJ2ZpZWxkJ11bJ2FkbWluJ10sXG4gICAgICBoYXNNYW55ID0gZmFsc2UsXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNGcm9tUHJvcHMgPSBbXSxcbiAgICAgIHJlcXVpcmVkLFxuICAgIH0sXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlRnJvbVByb3BzLFxuICAgIHBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgcmVhZE9ubHksXG4gICAgdmFsaWRhdGUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IG9wdGlvbnMgPSBSZWFjdC51c2VNZW1vKCgpID0+IGZvcm1hdE9wdGlvbnMob3B0aW9uc0Zyb21Qcm9wcyksIFtvcHRpb25zRnJvbVByb3BzXSlcblxuICBjb25zdCBtZW1vaXplZFZhbGlkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlLCB2YWxpZGF0aW9uT3B0aW9ucykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodmFsdWUsIHsgLi4udmFsaWRhdGlvbk9wdGlvbnMsIGhhc01hbnksIG9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkLCBoYXNNYW55LCBvcHRpb25zXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBwYXRoLFxuICAgIHNlbGVjdEZpbHRlck9wdGlvbnMsXG4gICAgc2V0VmFsdWUsXG4gICAgc2hvd0Vycm9yLFxuICAgIHZhbHVlLFxuICB9ID0gdXNlRmllbGQoe1xuICAgIHBvdGVudGlhbGx5U3RhbGVQYXRoOiBwYXRoRnJvbVByb3BzLFxuICAgIHZhbGlkYXRlOiBtZW1vaXplZFZhbGlkYXRlLFxuICB9KVxuXG4gIGNvbnN0IG9uQ2hhbmdlOiBSZWFjdFNlbGVjdEFkYXB0ZXJQcm9wc1snb25DaGFuZ2UnXSA9IHVzZUNhbGxiYWNrKFxuICAgIChzZWxlY3RlZE9wdGlvbjogT3B0aW9uT2JqZWN0IHwgT3B0aW9uT2JqZWN0W10pID0+IHtcbiAgICAgIGlmICghcmVhZE9ubHkgfHwgZGlzYWJsZWQpIHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSA9IG51bGxcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uICYmIGhhc01hbnkpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZE9wdGlvbikpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBbXVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhQXJyYXkuaXNBcnJheShzZWxlY3RlZE9wdGlvbikpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25DaGFuZ2VGcm9tUHJvcHMobmV3VmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZWFkT25seSwgZGlzYWJsZWQsIGhhc01hbnksIHNldFZhbHVlLCBvbkNoYW5nZUZyb21Qcm9wc10sXG4gIClcblxuICBjb25zdCBzdHlsZXMgPSB1c2VNZW1vKCgpID0+IG1lcmdlRmllbGRTdHlsZXMoZmllbGQpLCBbZmllbGRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdElucHV0XG4gICAgICBBZnRlcklucHV0PXtBZnRlcklucHV0fVxuICAgICAgQmVmb3JlSW5wdXQ9e0JlZm9yZUlucHV0fVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBEZXNjcmlwdGlvbj17RGVzY3JpcHRpb259XG4gICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259XG4gICAgICBFcnJvcj17RXJyb3J9XG4gICAgICBmaWx0ZXJPcHRpb249e1xuICAgICAgICBzZWxlY3RGaWx0ZXJPcHRpb25zXG4gICAgICAgICAgPyAoeyBsYWJlbCwgdmFsdWUgfSwgc2VhcmNoKSA9PlxuICAgICAgICAgICAgICBzZWxlY3RGaWx0ZXJPcHRpb25zPy5zb21lKFxuICAgICAgICAgICAgICAgIChvcHRpb24pID0+ICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJyA/IG9wdGlvbiA6IG9wdGlvbi52YWx1ZSkgPT09IHZhbHVlLFxuICAgICAgICAgICAgICApICYmIGxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGhhc01hbnk9e2hhc01hbnl9XG4gICAgICBpc0NsZWFyYWJsZT17aXNDbGVhcmFibGV9XG4gICAgICBpc1NvcnRhYmxlPXtpc1NvcnRhYmxlfVxuICAgICAgTGFiZWw9e0xhYmVsfVxuICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgbG9jYWxpemVkPXtsb2NhbGl6ZWR9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIHBhdGg9e3BhdGh9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgZGlzYWJsZWR9XG4gICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICBzaG93RXJyb3I9e3Nob3dFcnJvcn1cbiAgICAgIHN0eWxlPXtzdHlsZXN9XG4gICAgICB2YWx1ZT17dmFsdWUgYXMgc3RyaW5nIHwgc3RyaW5nW119XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgU2VsZWN0RmllbGQgPSB3aXRoQ29uZGl0aW9uKFNlbGVjdEZpZWxkQ29tcG9uZW50KVxuXG5leHBvcnQgeyBTZWxlY3RJbnB1dCwgdHlwZSBTZWxlY3RJbnB1dFByb3BzIH1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBMYWJlbEZ1bmN0aW9uLCBPcHRpb25PYmplY3QsIFN0YXRpY0Rlc2NyaXB0aW9uLCBTdGF0aWNMYWJlbCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFJlYWN0U2VsZWN0QWRhcHRlclByb3BzIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVhY3RTZWxlY3QvdHlwZXMuanMnXG5cbmltcG9ydCB7IFJlYWN0U2VsZWN0IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVhY3RTZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCB0eXBlIFNlbGVjdElucHV0UHJvcHMgPSB7XG4gIHJlYWRvbmx5IEFmdGVySW5wdXQ/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgQmVmb3JlSW5wdXQ/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHJlYWRvbmx5IERlc2NyaXB0aW9uPzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogU3RhdGljRGVzY3JpcHRpb25cbiAgcmVhZG9ubHkgRXJyb3I/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgZmlsdGVyT3B0aW9uPzogUmVhY3RTZWxlY3RBZGFwdGVyUHJvcHNbJ2ZpbHRlck9wdGlvbiddXG4gIHJlYWRvbmx5IGhhc01hbnk/OiBib29sZWFuXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nXG4gIHJlYWRvbmx5IGlzQ2xlYXJhYmxlPzogYm9vbGVhblxuICByZWFkb25seSBpc1NvcnRhYmxlPzogYm9vbGVhblxuICByZWFkb25seSBMYWJlbD86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBsYWJlbD86IFN0YXRpY0xhYmVsXG4gIHJlYWRvbmx5IGxvY2FsaXplZD86IGJvb2xlYW5cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG4gIHJlYWRvbmx5IG9uQ2hhbmdlPzogUmVhY3RTZWxlY3RBZGFwdGVyUHJvcHNbJ29uQ2hhbmdlJ11cbiAgcmVhZG9ubHkgb25JbnB1dENoYW5nZT86IFJlYWN0U2VsZWN0QWRhcHRlclByb3BzWydvbklucHV0Q2hhbmdlJ11cbiAgcmVhZG9ubHkgb3B0aW9ucz86IE9wdGlvbk9iamVjdFtdXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZ1xuICByZWFkb25seSBwbGFjZWhvbGRlcj86IExhYmVsRnVuY3Rpb24gfCBzdHJpbmdcbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuXG4gIHJlYWRvbmx5IHJlcXVpcmVkPzogYm9vbGVhblxuICByZWFkb25seSBzaG93RXJyb3I/OiBib29sZWFuXG4gIHJlYWRvbmx5IHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBjb25zdCBTZWxlY3RJbnB1dDogUmVhY3QuRkM8U2VsZWN0SW5wdXRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIEFmdGVySW5wdXQsXG4gICAgQmVmb3JlSW5wdXQsXG4gICAgY2xhc3NOYW1lLFxuICAgIERlc2NyaXB0aW9uLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIEVycm9yLFxuICAgIGZpbHRlck9wdGlvbixcbiAgICBoYXNNYW55ID0gZmFsc2UsXG4gICAgaXNDbGVhcmFibGUgPSB0cnVlLFxuICAgIGlzU29ydGFibGUgPSB0cnVlLFxuICAgIGxhYmVsLFxuICAgIExhYmVsLFxuICAgIGxvY2FsaXplZCxcbiAgICBvbkNoYW5nZSxcbiAgICBvbklucHV0Q2hhbmdlLFxuICAgIG9wdGlvbnMsXG4gICAgcGF0aCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICByZWFkT25seSxcbiAgICByZXF1aXJlZCxcbiAgICBzaG93RXJyb3IsXG4gICAgc3R5bGUsXG4gICAgdmFsdWUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGxldCB2YWx1ZVRvUmVuZGVyXG5cbiAgaWYgKGhhc01hbnkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB2YWx1ZVRvUmVuZGVyID0gdmFsdWUubWFwKCh2YWwpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IG1hdGNoaW5nT3B0aW9uID8gZ2V0VHJhbnNsYXRpb24obWF0Y2hpbmdPcHRpb24ubGFiZWwsIGkxOG4pIDogdmFsLFxuICAgICAgICB2YWx1ZTogbWF0Y2hpbmdPcHRpb24/LnZhbHVlID8/IHZhbCxcbiAgICAgIH1cbiAgICB9KVxuICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZSlcbiAgICB2YWx1ZVRvUmVuZGVyID0ge1xuICAgICAgbGFiZWw6IG1hdGNoaW5nT3B0aW9uID8gZ2V0VHJhbnNsYXRpb24obWF0Y2hpbmdPcHRpb24ubGFiZWwsIGkxOG4pIDogdmFsdWUsXG4gICAgICB2YWx1ZTogbWF0Y2hpbmdPcHRpb24/LnZhbHVlID8/IHZhbHVlLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB2YWx1ZSBpcyBub3QgcHJlc2VudCB0aGVuIHJlbmRlciBub3RoaW5nLCBhbGxvd2luZyBzZWxlY3QgZmllbGRzIHRvIHJlc2V0IHRvIHRoZWlyIGluaXRpYWwgJ1NlbGVjdCBhbiBvcHRpb24nIHN0YXRlXG4gICAgdmFsdWVUb1JlbmRlciA9IG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGZpZWxkQmFzZUNsYXNzLFxuICAgICAgICAnc2VsZWN0JyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBzaG93RXJyb3IgJiYgJ2Vycm9yJyxcbiAgICAgICAgcmVhZE9ubHkgJiYgJ3JlYWQtb25seScsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIGlkPXtgZmllbGQtJHtwYXRoLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgID5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtMYWJlbH1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIDxGaWVsZExhYmVsIGxhYmVsPXtsYWJlbH0gbG9jYWxpemVkPXtsb2NhbGl6ZWR9IHBhdGg9e3BhdGh9IHJlcXVpcmVkPXtyZXF1aXJlZH0gLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtmaWVsZEJhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICA8UmVhY3RTZWxlY3RcbiAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHl9XG4gICAgICAgICAgZmlsdGVyT3B0aW9uPXtmaWx0ZXJPcHRpb259XG4gICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgIGlzQ2xlYXJhYmxlPXtpc0NsZWFyYWJsZX1cbiAgICAgICAgICBpc011bHRpPXtoYXNNYW55fVxuICAgICAgICAgIGlzU29ydGFibGU9e2lzU29ydGFibGV9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIG9uSW5wdXRDaGFuZ2U9e29uSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihvcHRpb24ubGFiZWwsIGkxOG4pLFxuICAgICAgICAgIH0pKX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc2hvd0Vycm9yPXtzaG93RXJyb3J9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlVG9SZW5kZXIgYXMgT3B0aW9uT2JqZWN0fVxuICAgICAgICAvPlxuICAgICAgICB7QWZ0ZXJJbnB1dH1cbiAgICAgIDwvZGl2PlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Rlc2NyaXB0aW9ufVxuICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBDbGllbnRDb21wb25lbnRQcm9wcyxcbiAgQ2xpZW50VGFiLFxuICBEb2N1bWVudFByZWZlcmVuY2VzLFxuICBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zLFxuICBTdGF0aWNEZXNjcmlwdGlvbixcbiAgVGFic0ZpZWxkQ2xpZW50Q29tcG9uZW50LFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IGdldEZpZWxkUGF0aHMsIHRvS2ViYWJDYXNlIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ29sbGFwc2libGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Db2xsYXBzaWJsZS9wcm92aWRlci5qcydcbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm1GaWVsZHMgfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyRmllbGRzIH0gZnJvbSAnLi4vLi4vZm9ybXMvUmVuZGVyRmllbGRzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy91c2VGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZVByZWZlcmVuY2VzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1ByZWZlcmVuY2VzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vRmllbGREZXNjcmlwdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGFic1Byb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlci5qcydcbmltcG9ydCB7IFRhYkNvbXBvbmVudCB9IGZyb20gJy4vVGFiL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICd0YWJzLWZpZWxkJ1xuXG5leHBvcnQgeyBUYWJzUHJvdmlkZXIgfVxuXG5jb25zdCBUYWJzRmllbGRDb21wb25lbnQ6IFRhYnNGaWVsZENsaWVudENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgZmllbGQ6IHsgYWRtaW46IHsgY2xhc3NOYW1lIH0gPSB7fSwgdGFicyA9IFtdIH0sXG4gICAgZm9yY2VSZW5kZXIgPSBmYWxzZSxcbiAgICBpbmRleFBhdGggPSAnJyxcbiAgICBwYXJlbnRQYXRoID0gJycsXG4gICAgcGFyZW50U2NoZW1hUGF0aCA9ICcnLFxuICAgIHBhdGggPSAnJyxcbiAgICBwZXJtaXNzaW9ucyxcbiAgICByZWFkT25seSxcbiAgICBzY2hlbWFQYXRoID0gJycsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgZ2V0UHJlZmVyZW5jZSwgc2V0UHJlZmVyZW5jZSB9ID0gdXNlUHJlZmVyZW5jZXMoKVxuICBjb25zdCB7IHByZWZlcmVuY2VzS2V5IH0gPSB1c2VEb2N1bWVudEluZm8oKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBpc1dpdGhpbkNvbGxhcHNpYmxlIH0gPSB1c2VDb2xsYXBzaWJsZSgpXG5cbiAgY29uc3QgdGFiU3RhdGVzID0gdXNlRm9ybUZpZWxkcygoW2ZpZWxkc10pID0+IHtcbiAgICByZXR1cm4gdGFicy5tYXAoKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGFiPy5pZFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgcGFzc2VzQ29uZGl0aW9uOiBmaWVsZHM/LltpZF0/LnBhc3Nlc0NvbmRpdGlvbiA/PyB0cnVlLFxuICAgICAgICB0YWIsXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBjb25zdCBbYWN0aXZlVGFiSW5kZXgsIHNldEFjdGl2ZVRhYkluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4oXG4gICAgKCkgPT4gdGFiU3RhdGVzLmZpbHRlcigoeyBwYXNzZXNDb25kaXRpb24gfSkgPT4gcGFzc2VzQ29uZGl0aW9uKT8uWzBdPy5pbmRleCA/PyAwLFxuICApXG5cbiAgY29uc3QgdGFic1ByZWZLZXkgPSBgdGFicy0ke2luZGV4UGF0aH1gXG5cbiAgY29uc3QgYWN0aXZlVGFiSW5mbyA9IHRhYlN0YXRlc1thY3RpdmVUYWJJbmRleF1cbiAgY29uc3QgYWN0aXZlVGFiQ29uZmlnID0gYWN0aXZlVGFiSW5mbz8udGFiXG4gIGNvbnN0IGFjdGl2ZVRhYkRlc2NyaXB0aW9uID0gYWN0aXZlVGFiQ29uZmlnPy5hZG1pbj8uZGVzY3JpcHRpb24gPz8gYWN0aXZlVGFiQ29uZmlnPy5kZXNjcmlwdGlvblxuXG4gIGNvbnN0IGFjdGl2ZVRhYlN0YXRpY0Rlc2NyaXB0aW9uID1cbiAgICB0eXBlb2YgYWN0aXZlVGFiRGVzY3JpcHRpb24gPT09ICdmdW5jdGlvbidcbiAgICAgID8gYWN0aXZlVGFiRGVzY3JpcHRpb24oeyBpMThuLCB0OiBpMThuLnQgfSlcbiAgICAgIDogYWN0aXZlVGFiRGVzY3JpcHRpb25cblxuICBjb25zdCBoYXNWaXNpYmxlVGFicyA9IHRhYlN0YXRlcy5zb21lKCh7IHBhc3Nlc0NvbmRpdGlvbiB9KSA9PiBwYXNzZXNDb25kaXRpb24pXG5cbiAgY29uc3QgaGFuZGxlVGFiQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGluY29taW5nVGFiSW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgc2V0QWN0aXZlVGFiSW5kZXgoaW5jb21pbmdUYWJJbmRleClcblxuICAgICAgY29uc3QgZXhpc3RpbmdQcmVmZXJlbmNlczogRG9jdW1lbnRQcmVmZXJlbmNlcyA9IGF3YWl0IGdldFByZWZlcmVuY2UocHJlZmVyZW5jZXNLZXkpXG5cbiAgICAgIGlmIChwcmVmZXJlbmNlc0tleSkge1xuICAgICAgICB2b2lkIHNldFByZWZlcmVuY2UocHJlZmVyZW5jZXNLZXksIHtcbiAgICAgICAgICAuLi5leGlzdGluZ1ByZWZlcmVuY2VzLFxuICAgICAgICAgIC4uLihwYXRoXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLihleGlzdGluZ1ByZWZlcmVuY2VzPy5maWVsZHMgfHwge30pLFxuICAgICAgICAgICAgICAgICAgW3BhdGhdOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nUHJlZmVyZW5jZXM/LmZpZWxkcz8uW3BhdGhdLFxuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogaW5jb21pbmdUYWJJbmRleCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5leGlzdGluZ1ByZWZlcmVuY2VzPy5maWVsZHMsXG4gICAgICAgICAgICAgICAgICBbdGFic1ByZWZLZXldOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nUHJlZmVyZW5jZXM/LmZpZWxkcz8uW3RhYnNQcmVmS2V5XSxcbiAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg6IGluY29taW5nVGFiSW5kZXgsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2dldFByZWZlcmVuY2UsIHByZWZlcmVuY2VzS2V5LCBzZXRQcmVmZXJlbmNlLCBwYXRoLCB0YWJzUHJlZktleV0sXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcmVmZXJlbmNlc0tleSkge1xuICAgICAgY29uc3QgZ2V0SW5pdGlhbFByZWYgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUHJlZmVyZW5jZXM6IERvY3VtZW50UHJlZmVyZW5jZXMgPSBhd2FpdCBnZXRQcmVmZXJlbmNlKHByZWZlcmVuY2VzS2V5KVxuICAgICAgICBjb25zdCBpbml0aWFsSW5kZXggPSBwYXRoXG4gICAgICAgICAgPyBleGlzdGluZ1ByZWZlcmVuY2VzPy5maWVsZHM/LltwYXRoXT8udGFiSW5kZXhcbiAgICAgICAgICA6IGV4aXN0aW5nUHJlZmVyZW5jZXM/LmZpZWxkcz8uW3RhYnNQcmVmS2V5XT8udGFiSW5kZXhcblxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHR5cGVvZiBpbml0aWFsSW5kZXggPT09ICdudW1iZXInICYmIGluaXRpYWxJbmRleCA8IHRhYlN0YXRlcy5sZW5ndGggPyBpbml0aWFsSW5kZXggOiAwXG4gICAgICAgIHNldEFjdGl2ZVRhYkluZGV4KG5ld0luZGV4KVxuICAgICAgfVxuICAgICAgdm9pZCBnZXRJbml0aWFsUHJlZigpXG4gICAgfVxuICB9LCBbcGF0aCwgZ2V0UHJlZmVyZW5jZSwgcHJlZmVyZW5jZXNLZXksIHRhYnNQcmVmS2V5LCB0YWJzLCBwYXJlbnRQYXRoLCBwYXJlbnRTY2hlbWFQYXRoXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhY3RpdmVUYWJJbmZvPy5wYXNzZXNDb25kaXRpb24gPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBuZXh0VGFiID0gdGFiU3RhdGVzLmZpbmQoKHsgcGFzc2VzQ29uZGl0aW9uIH0pID0+IHBhc3Nlc0NvbmRpdGlvbilcbiAgICAgIGlmIChuZXh0VGFiKSB7XG4gICAgICAgIHZvaWQgaGFuZGxlVGFiQ2hhbmdlKG5leHRUYWIuaW5kZXgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbYWN0aXZlVGFiSW5mbywgdGFiU3RhdGVzLCBoYW5kbGVUYWJDaGFuZ2VdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGZpZWxkQmFzZUNsYXNzLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgaXNXaXRoaW5Db2xsYXBzaWJsZSAmJiBgJHtiYXNlQ2xhc3N9LS13aXRoaW4tY29sbGFwc2libGVgLFxuICAgICAgICAhaGFzVmlzaWJsZVRhYnMgJiYgYCR7YmFzZUNsYXNzfS0taGlkZGVuYCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgID5cbiAgICAgIDxUYWJzUHJvdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190YWJzLXdyYXBgfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGFic2B9PlxuICAgICAgICAgICAge3RhYlN0YXRlcy5tYXAoKHsgaW5kZXgsIHBhc3Nlc0NvbmRpdGlvbiwgdGFiIH0pID0+IChcbiAgICAgICAgICAgICAgPFRhYkNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGhpZGRlbj17IXBhc3Nlc0NvbmRpdGlvbn1cbiAgICAgICAgICAgICAgICBpc0FjdGl2ZT17YWN0aXZlVGFiSW5kZXggPT09IGluZGV4fVxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgcGFyZW50UGF0aD17cGF0aH1cbiAgICAgICAgICAgICAgICBzZXRJc0FjdGl2ZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdm9pZCBoYW5kbGVUYWJDaGFuZ2UoaW5kZXgpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0YWI9e3RhYn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnQtd3JhcGB9PlxuICAgICAgICAgIHthY3RpdmVUYWJDb25maWcgJiYgKFxuICAgICAgICAgICAgPFRhYkNvbnRlbnRcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2FjdGl2ZVRhYlN0YXRpY0Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICBmaWVsZD17YWN0aXZlVGFiQ29uZmlnfVxuICAgICAgICAgICAgICBmb3JjZVJlbmRlcj17Zm9yY2VSZW5kZXJ9XG4gICAgICAgICAgICAgIGhpZGRlbj17ZmFsc2V9XG4gICAgICAgICAgICAgIHBhcmVudEluZGV4UGF0aD17aW5kZXhQYXRofVxuICAgICAgICAgICAgICBwYXJlbnRQYXRoPXtwYXRofVxuICAgICAgICAgICAgICBwYXJlbnRTY2hlbWFQYXRoPXtzY2hlbWFQYXRofVxuICAgICAgICAgICAgICBwYXRoPXtwYXRofVxuICAgICAgICAgICAgICBwZXJtaXNzaW9ucz17XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgJiYgdHlwZW9mIHBlcm1pc3Npb25zID09PSAnb2JqZWN0JyAmJiAnbmFtZScgaW4gYWN0aXZlVGFiQ29uZmlnXG4gICAgICAgICAgICAgICAgICA/IHBlcm1pc3Npb25zW2FjdGl2ZVRhYkNvbmZpZy5uYW1lXSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGVybWlzc2lvbnNbYWN0aXZlVGFiQ29uZmlnLm5hbWVdID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAnZmllbGRzJyBpbiBwZXJtaXNzaW9uc1thY3RpdmVUYWJDb25maWcubmFtZV1cbiAgICAgICAgICAgICAgICAgICAgPyBwZXJtaXNzaW9uc1thY3RpdmVUYWJDb25maWcubmFtZV0uZmllbGRzXG4gICAgICAgICAgICAgICAgICAgIDogcGVybWlzc2lvbnNbYWN0aXZlVGFiQ29uZmlnLm5hbWVdXG4gICAgICAgICAgICAgICAgICA6IHBlcm1pc3Npb25zXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5fVxuICAgICAgICAgICAgICB0YWJJbmRleD17YWN0aXZlVGFiSW5kZXh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9UYWJzUHJvdmlkZXI+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFRhYnNGaWVsZCA9IHdpdGhDb25kaXRpb24oVGFic0ZpZWxkQ29tcG9uZW50KVxuXG50eXBlIEFjdGl2ZVRhYlByb3BzID0ge1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogU3RhdGljRGVzY3JpcHRpb25cbiAgcmVhZG9ubHkgZmllbGQ6IENsaWVudFRhYlxuICByZWFkb25seSBoaWRkZW46IGJvb2xlYW5cbiAgcmVhZG9ubHkgbGFiZWw/OiBzdHJpbmdcbiAgcmVhZG9ubHkgcGFyZW50SW5kZXhQYXRoOiBzdHJpbmdcbiAgcmVhZG9ubHkgcGFyZW50UGF0aDogc3RyaW5nXG4gIHJlYWRvbmx5IHBhcmVudFNjaGVtYVBhdGg6IHN0cmluZ1xuICByZWFkb25seSBwYXRoOiBzdHJpbmdcbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM6IFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnNcbiAgcmVhZG9ubHkgcmVhZE9ubHk6IGJvb2xlYW5cbiAgcmVhZG9ubHkgdGFiSW5kZXg6IG51bWJlclxufSAmIFBpY2s8Q2xpZW50Q29tcG9uZW50UHJvcHMsICdmb3JjZVJlbmRlcic+XG5cbmZ1bmN0aW9uIFRhYkNvbnRlbnQoe1xuICBkZXNjcmlwdGlvbixcbiAgZmllbGQsXG4gIGZvcmNlUmVuZGVyLFxuICBoaWRkZW4sXG4gIGxhYmVsLFxuICBwYXJlbnRJbmRleFBhdGgsXG4gIHBhcmVudFBhdGgsXG4gIHBhcmVudFNjaGVtYVBhdGgsXG4gIHBlcm1pc3Npb25zLFxuICByZWFkT25seSxcbiAgdGFiSW5kZXgsXG59OiBBY3RpdmVUYWJQcm9wcykge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCB7IGN1c3RvbUNvbXBvbmVudHM6IHsgQWZ0ZXJJbnB1dCwgQmVmb3JlSW5wdXQsIERlc2NyaXB0aW9uLCBGaWVsZCB9ID0ge30gfSA9IHVzZUZpZWxkKClcblxuICBpZiAoRmllbGQpIHtcbiAgICByZXR1cm4gRmllbGRcbiAgfVxuXG4gIGNvbnN0IHsgaW5kZXhQYXRoLCBwYXRoLCBzY2hlbWFQYXRoIH0gPSBnZXRGaWVsZFBhdGhzKHtcbiAgICBmaWVsZCxcbiAgICBpbmRleDogdGFiSW5kZXgsXG4gICAgcGFyZW50SW5kZXhQYXRoLFxuICAgIHBhcmVudFBhdGgsXG4gICAgcGFyZW50U2NoZW1hUGF0aCxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBoaWRkZW4gJiYgYCR7YmFzZUNsYXNzfV9fdGFiLS1oaWRkZW5gLFxuICAgICAgICBgJHtiYXNlQ2xhc3N9X190YWJgLFxuICAgICAgICBsYWJlbCAmJiBgJHtiYXNlQ2xhc3N9X190YWJDb25maWdMYWJlbC0ke3RvS2ViYWJDYXNlKGdldFRyYW5zbGF0aW9uKGxhYmVsLCBpMThuKSl9YCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgID5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIDxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gbWFyZ2luUGxhY2VtZW50PVwiYm90dG9tXCIgcGF0aD17cGFyZW50UGF0aH0gLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIHtCZWZvcmVJbnB1dH1cbiAgICAgIDxSZW5kZXJGaWVsZHNcbiAgICAgICAgZmllbGRzPXtmaWVsZC5maWVsZHN9XG4gICAgICAgIGZvcmNlUmVuZGVyPXtmb3JjZVJlbmRlcn1cbiAgICAgICAgcGFyZW50SW5kZXhQYXRoPXtpbmRleFBhdGh9XG4gICAgICAgIHBhcmVudFBhdGg9e3BhdGh9XG4gICAgICAgIHBhcmVudFNjaGVtYVBhdGg9e3NjaGVtYVBhdGh9XG4gICAgICAgIHBlcm1pc3Npb25zPXtwZXJtaXNzaW9uc31cbiAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5fVxuICAgICAgLz5cbiAgICAgIHtBZnRlcklucHV0fVxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IGRlcXVhbCB9IGZyb20gJ2RlcXVhbC9saXRlJyAvLyBsaXRlOiBubyBuZWVkIGZvciBNYXAgYW5kIFNldCBzdXBwb3J0XG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tICdvYmplY3QtdG8tZm9ybWRhdGEnXG5pbXBvcnQgeyB0eXBlIEZvcm1TdGF0ZSwgdHlwZSBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJ3BheWxvYWQnXG5pbXBvcnQge1xuICBkZWVwQ29weU9iamVjdFNpbXBsZVdpdGhvdXRSZWFjdENvbXBvbmVudHMsXG4gIGdldERhdGFCeVBhdGggYXMgZ2V0RGF0YUJ5UGF0aEZ1bmMsXG4gIGdldFNpYmxpbmdEYXRhIGFzIGdldFNpYmxpbmdEYXRhRnVuYyxcbiAgaGFzRHJhZnRWYWxpZGF0aW9uRW5hYmxlZCxcbiAgcmVkdWNlRmllbGRzVG9WYWx1ZXMsXG4gIHdhaXQsXG59IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZHVjZXIsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIENyZWF0ZUZvcm1EYXRhLFxuICBDb250ZXh0IGFzIEZvcm1Db250ZXh0VHlwZSxcbiAgRm9ybVByb3BzLFxuICBHZXREYXRhQnlQYXRoLFxuICBTdWJtaXQsXG4gIFN1Ym1pdE9wdGlvbnMsXG59IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IEZpZWxkRXJyb3JzVG9hc3QgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Ub2FzdHMvZmllbGRFcnJvcnMuanMnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZWRFZmZlY3QgfSBmcm9tICcuLi8uLi9ob29rcy91c2VEZWJvdW5jZWRFZmZlY3QuanMnXG5pbXBvcnQgeyB1c2VFZmZlY3RFdmVudCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUVmZmVjdEV2ZW50LmpzJ1xuaW1wb3J0IHsgdXNlUXVldWUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VRdWV1ZS5qcydcbmltcG9ydCB7IHVzZVRocm90dGxlZEVmZmVjdCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRocm90dGxlZEVmZmVjdC5qcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZU9wZXJhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9PcGVyYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VSb3V0ZVRyYW5zaXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUm91dGVUcmFuc2l0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlU2VydmVyRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlcnZlckZ1bmN0aW9ucy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVXBsb2FkSGFuZGxlcnMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVXBsb2FkSGFuZGxlcnMvaW5kZXguanMnXG5pbXBvcnQgeyBhYm9ydEFuZElnbm9yZSwgaGFuZGxlQWJvcnRSZWYgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvYWJvcnRBbmRJZ25vcmUuanMnXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcGkuanMnXG5pbXBvcnQge1xuICBCYWNrZ3JvdW5kUHJvY2Vzc2luZ0NvbnRleHQsXG4gIERvY3VtZW50Rm9ybUNvbnRleHQsXG4gIEZvcm1Db250ZXh0LFxuICBGb3JtRmllbGRzQ29udGV4dCxcbiAgRm9ybVdhdGNoQ29udGV4dCxcbiAgSW5pdGlhbGl6aW5nQ29udGV4dCxcbiAgTW9kaWZpZWRDb250ZXh0LFxuICBQcm9jZXNzaW5nQ29udGV4dCxcbiAgU3VibWl0dGVkQ29udGV4dCxcbiAgdXNlRG9jdW1lbnRGb3JtLFxufSBmcm9tICcuL2NvbnRleHQuanMnXG5pbXBvcnQgeyBlcnJvck1lc3NhZ2VzIH0gZnJvbSAnLi9lcnJvck1lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgZmllbGRSZWR1Y2VyIH0gZnJvbSAnLi9maWVsZFJlZHVjZXIuanMnXG5pbXBvcnQgeyBpbml0Q29udGV4dFN0YXRlIH0gZnJvbSAnLi9pbml0Q29udGV4dFN0YXRlLmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZm9ybSdcblxuZXhwb3J0IGNvbnN0IEZvcm06IFJlYWN0LkZDPEZvcm1Qcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBpZCwgY29sbGVjdGlvblNsdWcsIGRvY0NvbmZpZywgZG9jUGVybWlzc2lvbnMsIGdldERvY1ByZWZlcmVuY2VzLCBnbG9iYWxTbHVnIH0gPVxuICAgIHVzZURvY3VtZW50SW5mbygpXG5cbiAgY29uc3QgdmFsaWRhdGVEcmFmdHMgPSBoYXNEcmFmdFZhbGlkYXRpb25FbmFibGVkKGRvY0NvbmZpZylcblxuICBjb25zdCB7XG4gICAgYWN0aW9uLFxuICAgIGJlZm9yZVN1Ym1pdCxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkRnJvbVByb3BzLFxuICAgIGRpc2FibGVTdWNjZXNzU3RhdHVzLFxuICAgIGRpc2FibGVWYWxpZGF0aW9uT25TdWJtaXQsXG4gICAgLy8gZmllbGRzOiBmaWVsZHNGcm9tUHJvcHMgPSBjb2xsZWN0aW9uPy5maWVsZHMgfHwgZ2xvYmFsPy5maWVsZHMsXG4gICAgZWwsXG4gICAgaGFuZGxlUmVzcG9uc2UsXG4gICAgaW5pdGlhbFN0YXRlLCAvLyBmdWxseSBmb3JtZWQgaW5pdGlhbCBmaWVsZCBzdGF0ZVxuICAgIGlzRG9jdW1lbnRGb3JtLFxuICAgIGlzSW5pdGlhbGl6aW5nOiBpbml0aWFsaXppbmdGcm9tUHJvcHMsXG4gICAgb25DaGFuZ2UsXG4gICAgb25TdWJtaXQsXG4gICAgb25TdWNjZXNzLFxuICAgIHJlZGlyZWN0LFxuICAgIHN1Ym1pdHRlZDogc3VibWl0dGVkRnJvbVByb3BzLFxuICAgIHV1aWQsXG4gICAgd2FpdEZvckF1dG9jb21wbGV0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgbWV0aG9kID0gJ21ldGhvZCcgaW4gcHJvcHMgPyBwcm9wcz8ubWV0aG9kIDogdW5kZWZpbmVkXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcblxuICBjb25zdCBkb2N1bWVudEZvcm0gPSB1c2VEb2N1bWVudEZvcm0oKVxuXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyByZWZyZXNoQ29va2llLCB1c2VyIH0gPSB1c2VBdXRoKClcbiAgY29uc3Qgb3BlcmF0aW9uID0gdXNlT3BlcmF0aW9uKClcbiAgY29uc3QgeyBxdWV1ZVRhc2sgfSA9IHVzZVF1ZXVlKClcblxuICBjb25zdCB7IGdldEZvcm1TdGF0ZSB9ID0gdXNlU2VydmVyRnVuY3Rpb25zKClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcbiAgY29uc3QgeyBnZXRVcGxvYWRIYW5kbGVyIH0gPSB1c2VVcGxvYWRIYW5kbGVycygpXG5cbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgW2Rpc2FibGVkLCBzZXREaXNhYmxlZF0gPSB1c2VTdGF0ZShkaXNhYmxlZEZyb21Qcm9wcyB8fCBmYWxzZSlcbiAgY29uc3QgW2lzTW91bnRlZCwgc2V0SXNNb3VudGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IFtzdWJtaXR0ZWQsIHNldFN1Ym1pdHRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAvKipcbiAgICogVHJhY2tzIHdldGhlciB0aGUgZm9ybSBzdGF0ZSBwYXNzZXMgdmFsaWRhdGlvbi5cbiAgICogRm9yIGV4YW1wbGUgdGhlIHN0YXRlIGNvdWxkIGJlIHN1Ym1pdHRlZCBidXQgaW52YWxpZCBhcyBmaWVsZCBlcnJvcnMgaGF2ZSBiZWVuIHJldHVybmVkLlxuICAgKi9cbiAgY29uc3QgW2lzVmFsaWQsIHNldElzVmFsaWRdID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2luaXRpYWxpemluZywgc2V0SW5pdGlhbGl6aW5nXSA9IHVzZVN0YXRlKGluaXRpYWxpemluZ0Zyb21Qcm9wcylcblxuICBjb25zdCBbcHJvY2Vzc2luZywgc2V0UHJvY2Vzc2luZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmb3JtIGlzIHByb2Nlc3NpbmcgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGJhY2tncm91bmQsIGUuZy4gYXV0b3NhdmUgaXMgcnVubmluZy5cbiAgICogVXNlZnVsIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGRpc2FibGUgdGhlIGZvcm0gb3IgcXVldWUgb3RoZXIgcHJvY2Vzc2VzIHdoaWxlIGluIGZsaWdodCwgZS5nLiBkaXNhYmxlIG1hbnVhbCBzdWJtaXRzIHdoaWxlIGFuIGF1dG9zYXZlIGlzIHJ1bm5pbmcuXG4gICAqL1xuICBjb25zdCBbYmFja2dyb3VuZFByb2Nlc3NpbmcsIF9zZXRCYWNrZ3JvdW5kUHJvY2Vzc2luZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAvKipcbiAgICogQSByZWYgdGhhdCBjYW4gYmUgcmVhZCB3aXRoaW4gdGhlIGBzZXRNb2RpZmllZGAgaW50ZXJjZXB0b3IuXG4gICAqIERlcGVuZGVudHMgb2YgdGhpcyBzdGF0ZSBjYW4gcmVhZCBpdCBpbW1lZGlhdGVseSB3aXRob3V0IG5lZWRpbmcgdG8gd2FpdCBmb3IgYSByZW5kZXIgY3ljbGUuXG4gICAqL1xuICBjb25zdCBiYWNrZ3JvdW5kUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihiYWNrZ3JvdW5kUHJvY2Vzc2luZylcblxuICAvKipcbiAgICogRmxhZyB0byB0cmFjayBpZiB0aGUgZm9ybSB3YXMgbW9kaWZpZWQgX2R1cmluZyBhIHN1Ym1pc3Npb25fLCBlLmcuIHdoaWxlIGF1dG9zYXZlIGlzIHJ1bm5pbmcuXG4gICAqIFVzZWZ1bCBpbiBvcmRlciB0byBhdm9pZCByZXNldHRpbmcgYG1vZGlmaWVkYCB0byBmYWxzZSB3cm9uZ2Z1bGx5IGFmdGVyIGEgc3VibWl0LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIgbW9kaWZpZXMgYSBmaWVsZCB3aGlsZSB0aGUgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgKGF1dG9zYXZlKSBpcyBydW5uaW5nLFxuICAgKiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFmdGVyIHRoZSBzdWJtaXQgY29tcGxldGVzLCB0aGUgYG1vZGlmaWVkYCBzdGF0ZSByZW1haW5zIHRydWUuXG4gICAqL1xuICBjb25zdCBtb2RpZmllZFdoaWxlUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcblxuICAvKipcbiAgICogSW50ZXJjZXB0IHRoZSBgc2V0QmFja2dyb3VuZFByb2Nlc3NpbmdgIG1ldGhvZCB0byBrZWVwIHRoZSByZWYgaW4gc3luYy5cbiAgICogU2VlIHRoZSBgYmFja2dyb3VuZFByb2Nlc3NpbmdSZWZgIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjb25zdCBzZXRCYWNrZ3JvdW5kUHJvY2Vzc2luZyA9IHVzZUNhbGxiYWNrKChiYWNrZ3JvdW5kUHJvY2Vzc2luZzogYm9vbGVhbikgPT4ge1xuICAgIGJhY2tncm91bmRQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBiYWNrZ3JvdW5kUHJvY2Vzc2luZ1xuICAgIF9zZXRCYWNrZ3JvdW5kUHJvY2Vzc2luZyhiYWNrZ3JvdW5kUHJvY2Vzc2luZylcbiAgfSwgW10pXG5cbiAgY29uc3QgW21vZGlmaWVkLCBfc2V0TW9kaWZpZWRdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgLyoqXG4gICAqIEludGVyY2VwdCB0aGUgYHNldE1vZGlmaWVkYCBtZXRob2QgdG8gdHJhY2sgd2hldGhlciB0aGUgZXZlbnQgaGFwcGVuZWQgZHVyaW5nIGJhY2tncm91bmQgcHJvY2Vzc2luZy5cbiAgICogU2VlIHRoZSBgbW9kaWZpZWRXaGlsZVByb2Nlc3NpbmdSZWZgIHJlZiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgY29uc3Qgc2V0TW9kaWZpZWQgPSB1c2VDYWxsYmFjaygobW9kaWZpZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoYmFja2dyb3VuZFByb2Nlc3NpbmdSZWYuY3VycmVudCkge1xuICAgICAgbW9kaWZpZWRXaGlsZVByb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG5cbiAgICBfc2V0TW9kaWZpZWQobW9kaWZpZWQpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGZvcm1SZWYgPSB1c2VSZWY8SFRNTEZvcm1FbGVtZW50PihudWxsKVxuICBjb25zdCBjb250ZXh0UmVmID0gdXNlUmVmKHt9IGFzIEZvcm1Db250ZXh0VHlwZSlcbiAgY29uc3QgYWJvcnRSZXNldEZvcm1SZWYgPSB1c2VSZWY8QWJvcnRDb250cm9sbGVyPihudWxsKVxuICBjb25zdCBpc0ZpcnN0UmVuZGVyUmVmID0gdXNlUmVmKHRydWUpXG5cbiAgY29uc3QgZmllbGRzUmVkdWNlciA9IHVzZVJlZHVjZXIoZmllbGRSZWR1Y2VyLCB7fSwgKCkgPT4gaW5pdGlhbFN0YXRlKVxuXG4gIGNvbnN0IFtmb3JtU3RhdGUsIGRpc3BhdGNoRmllbGRzXSA9IGZpZWxkc1JlZHVjZXJcblxuICBjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzID0gZm9ybVN0YXRlXG5cbiAgY29uc3QgcHJldkZvcm1TdGF0ZSA9IHVzZVJlZihmb3JtU3RhdGUpXG5cbiAgY29uc3QgdmFsaWRhdGVGb3JtID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZEZpZWxkU3RhdGUgPSB7fVxuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuXG4gICAgY29uc3QgZGF0YSA9IGNvbnRleHRSZWYuY3VycmVudC5nZXREYXRhKClcblxuICAgIGNvbnN0IHZhbGlkYXRpb25Qcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMpLm1hcChcbiAgICAgIGFzeW5jIChbcGF0aCwgZmllbGRdKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZpZWxkID0gZmllbGRcbiAgICAgICAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aCA/IHBhdGguc3BsaXQoJy4nKSA6IFtdXG5cbiAgICAgICAgaWYgKGZpZWxkLnBhc3Nlc0NvbmRpdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBsZXQgdmFsaWRhdGlvblJlc3VsdDogYm9vbGVhbiB8IHN0cmluZyA9IHZhbGlkYXRlZEZpZWxkLnZhbGlkXG5cbiAgICAgICAgICBpZiAoJ3ZhbGlkYXRlJyBpbiBmaWVsZCAmJiB0eXBlb2YgZmllbGQudmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVRvVmFsaWRhdGUgPSBmaWVsZC52YWx1ZVxuXG4gICAgICAgICAgICBpZiAoZmllbGQ/LnJvd3MgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5yb3dzKSkge1xuICAgICAgICAgICAgICB2YWx1ZVRvVmFsaWRhdGUgPSBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0RGF0YUJ5UGF0aChwYXRoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgZmllbGQudmFsaWRhdGUodmFsdWVUb1ZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgIC4uLmZpZWxkLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGFyZW50IGRvY3VtZW50IGZvcm0sIHdlIGNhbiBnZXQgdGhlIGRhdGEgZnJvbSB0aGF0IGZvcm1cbiAgICAgICAgICAgICAgYmxvY2tEYXRhOiB1bmRlZmluZWQsIC8vIFdpbGwgYmUgZXhwZW5zaXZlIHRvIGdldCAtIG5vdCB3b3J0aCB0byBwYXNzIHRvIGNsaWVudC1zaWRlIHZhbGlkYXRpb24sIGFzIHRoaXMgY2FuIGJlIG9idGFpbmVkIGJ5IHRoZSB1c2VyIHVzaW5nIGB1c2VGb3JtRmllbGRzKClgXG4gICAgICAgICAgICAgIGRhdGE6IGRvY3VtZW50Rm9ybT8uZ2V0RGF0YSA/IGRvY3VtZW50Rm9ybS5nZXREYXRhKCkgOiBkYXRhLFxuICAgICAgICAgICAgICBldmVudDogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgcGF0aDogcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgICBwcmVmZXJlbmNlczoge30gYXMgYW55LFxuICAgICAgICAgICAgICByZXE6IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBQYXlsb2FkUmVxdWVzdCxcbiAgICAgICAgICAgICAgc2libGluZ0RhdGE6IGNvbnRleHRSZWYuY3VycmVudC5nZXRTaWJsaW5nRGF0YShwYXRoKSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvblJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVkRmllbGQuZXJyb3JNZXNzYWdlID0gdmFsaWRhdGlvblJlc3VsdFxuICAgICAgICAgICAgICB2YWxpZGF0ZWRGaWVsZC52YWxpZCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWxpZGF0ZWRGaWVsZC52YWxpZCA9IHRydWVcbiAgICAgICAgICAgICAgdmFsaWRhdGVkRmllbGQuZXJyb3JNZXNzYWdlID0gdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbGlkYXRlZEZpZWxkLnZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGVkRmllbGRTdGF0ZVtwYXRoXSA9IHZhbGlkYXRlZEZpZWxkXG4gICAgICB9LFxuICAgIClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcylcblxuICAgIGlmICghZGVxdWFsKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHZhbGlkYXRlZEZpZWxkU3RhdGUpKSB7XG4gICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRVBMQUNFX1NUQVRFJywgc3RhdGU6IHZhbGlkYXRlZEZpZWxkU3RhdGUgfSlcbiAgICB9XG5cbiAgICBzZXRJc1ZhbGlkKGlzVmFsaWQpXG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9LCBbY29sbGVjdGlvblNsdWcsIGNvbmZpZywgZGlzcGF0Y2hGaWVsZHMsIGlkLCBvcGVyYXRpb24sIHQsIHVzZXIsIGRvY3VtZW50Rm9ybV0pXG5cbiAgY29uc3Qgc3VibWl0ID0gdXNlQ2FsbGJhY2s8U3VibWl0PihcbiAgICBhc3luYyAob3B0aW9ucywgZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhY2NlcHRWYWx1ZXMgPSB0cnVlLFxuICAgICAgICBhY3Rpb246IGFjdGlvbkFyZyA9IGFjdGlvbixcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGlzYWJsZUZvcm1XaGlsZVByb2Nlc3NpbmcgPSB0cnVlLFxuICAgICAgICBkaXNhYmxlU3VjY2Vzc1N0YXR1czogZGlzYWJsZVN1Y2Nlc3NTdGF0dXNGcm9tQXJncyxcbiAgICAgICAgbWV0aG9kOiBtZXRob2RUb1VzZSA9IG1ldGhvZCxcbiAgICAgICAgb3ZlcnJpZGVzOiBvdmVycmlkZXNGcm9tQXJncyA9IHt9LFxuICAgICAgICBza2lwVmFsaWRhdGlvbixcbiAgICAgIH0gPSBvcHRpb25zIHx8ICh7fSBhcyBTdWJtaXRPcHRpb25zKVxuXG4gICAgICBjb25zdCBkaXNhYmxlVG9hc3QgPSBkaXNhYmxlU3VjY2Vzc1N0YXR1c0Zyb21BcmdzID8/IGRpc2FibGVTdWNjZXNzU3RhdHVzXG5cbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBjcmVhdGUgbmV3IHRvYXN0IHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIG1hbnVhbGx5IGxhdGVyXG4gICAgICBsZXQgZXJyb3JUb2FzdCwgc3VjY2Vzc1RvYXN0XG5cbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHN1Y2Nlc3NUb2FzdCA9IHJlc29sdmVcbiAgICAgICAgZXJyb3JUb2FzdCA9IHJlamVjdFxuICAgICAgfSlcblxuICAgICAgY29uc3QgaGFzRm9ybVN1Ym1pdEFjdGlvbiA9XG4gICAgICAgIGFjdGlvbkFyZyB8fCB0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nXG5cbiAgICAgIGlmIChyZWRpcmVjdCB8fCBkaXNhYmxlVG9hc3QgfHwgIWhhc0Zvcm1TdWJtaXRBY3Rpb24pIHtcbiAgICAgICAgLy8gRG8gbm90IHNob3cgc3VibWl0dGluZyB0b2FzdCwgYXMgdGhlIHByb21pc2UgdG9hc3QgbWF5IG5ldmVyIGRpc2FwcGVhciB1bmRlciB0aGVzZSBjb25kaXRpb25zLlxuICAgICAgICAvLyBJbnN0ZWFkLCBtYWtlIHN1Y2Nlc3NUb2FzdCgpIG9yIGVycm9yVG9hc3QoKSB0aHJvdyB0b2FzdC5zdWNjZXNzIC8gdG9hc3QuZXJyb3JcbiAgICAgICAgc3VjY2Vzc1RvYXN0ID0gKGRhdGEpID0+IHRvYXN0LnN1Y2Nlc3MoZGF0YSlcbiAgICAgICAgZXJyb3JUb2FzdCA9IChkYXRhKSA9PiB0b2FzdC5lcnJvcihkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QucHJvbWlzZShwcm9taXNlLCB7XG4gICAgICAgICAgZXJyb3I6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YSBhcyBzdHJpbmdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxvYWRpbmc6IHQoJ2dlbmVyYWw6c3VibWl0dGluZycpLFxuICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YSBhcyBzdHJpbmdcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuXG4gICAgICBpZiAoZGlzYWJsZUZvcm1XaGlsZVByb2Nlc3NpbmcpIHtcbiAgICAgICAgc2V0UHJvY2Vzc2luZyh0cnVlKVxuICAgICAgICBzZXREaXNhYmxlZCh0cnVlKVxuICAgICAgfVxuXG4gICAgICBpZiAod2FpdEZvckF1dG9jb21wbGV0ZSkge1xuICAgICAgICBhd2FpdCB3YWl0KDEwMClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHRydWUpXG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6YWJsZUZvcm1TdGF0ZSA9IGRlZXBDb3B5T2JqZWN0U2ltcGxlV2l0aG91dFJlYWN0Q29tcG9uZW50cyhcbiAgICAgICAgY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcyxcbiAgICAgICAge1xuICAgICAgICAgIGV4Y2x1ZGVGaWxlczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgLy8gRXhlY3V0ZSBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmVmb3JlU3VibWl0KSkge1xuICAgICAgICBsZXQgcmV2YWxpZGF0ZWRGb3JtU3RhdGU6IEZvcm1TdGF0ZVxuXG4gICAgICAgIGF3YWl0IGJlZm9yZVN1Ym1pdC5yZWR1Y2UoYXN5bmMgKHByaW9yT25DaGFuZ2UsIGJlZm9yZVN1Ym1pdEZuKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcHJpb3JPbkNoYW5nZVxuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmVmb3JlU3VibWl0Rm4oe1xuICAgICAgICAgICAgZm9ybVN0YXRlOiBzZXJpYWxpemFibGVGb3JtU3RhdGUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldmFsaWRhdGVkRm9ybVN0YXRlID0gcmVzdWx0XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBPYmplY3QuZW50cmllcyhyZXZhbGlkYXRlZEZvcm1TdGF0ZSkuZXZlcnkoXG4gICAgICAgICAgKFssIGZpZWxkXSkgPT4gZmllbGQudmFsaWQgIT09IGZhbHNlLFxuICAgICAgICApXG5cbiAgICAgICAgc2V0SXNWYWxpZChpc1ZhbGlkKVxuXG4gICAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICAgIHNldFByb2Nlc3NpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0U3VibWl0dGVkKHRydWUpXG4gICAgICAgICAgc2V0RGlzYWJsZWQoZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBzdGF0ZTogcmV2YWxpZGF0ZWRGb3JtU3RhdGUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1ZhbGlkID1cbiAgICAgICAgc2tpcFZhbGlkYXRpb24gfHwgZGlzYWJsZVZhbGlkYXRpb25PblN1Ym1pdCA/IHRydWUgOiBhd2FpdCBjb250ZXh0UmVmLmN1cnJlbnQudmFsaWRhdGVGb3JtKClcblxuICAgICAgc2V0SXNWYWxpZChpc1ZhbGlkKVxuXG4gICAgICAvLyBJZiBub3QgdmFsaWQsIHByZXZlbnQgc3VibWlzc2lvblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIGVycm9yVG9hc3QodCgnZXJyb3I6Y29ycmVjdEludmFsaWRGaWVsZHMnKSlcbiAgICAgICAgc2V0UHJvY2Vzc2luZyhmYWxzZSlcbiAgICAgICAgc2V0U3VibWl0dGVkKHRydWUpXG4gICAgICAgIHNldERpc2FibGVkKGZhbHNlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IG92ZXJyaWRlcyA9IHt9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzRnJvbUFyZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3ZlcnJpZGVzID0gb3ZlcnJpZGVzRnJvbUFyZ3MoY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcylcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG92ZXJyaWRlc0Zyb21BcmdzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvdmVycmlkZXMgPSBvdmVycmlkZXNGcm9tQXJnc1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBzdWJtaXQgaGFuZGxlciBjb21lcyB0aHJvdWdoIHZpYSBwcm9wcywgcnVuIHRoYXRcbiAgICAgIGlmIChvblN1Ym1pdCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZXMpKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uU3VibWl0KGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRm9ybVN1Ym1pdEFjdGlvbikge1xuICAgICAgICAvLyBObyBhY3Rpb24gcHJvdmlkZWQsIHNvIHdlIHNob3VsZCByZXR1cm4uIEFuIGV4YW1wbGUgd2hlcmUgdGhpcyBoYXBwZW5zIGFyZSBsZXhpY2FsIGxpbmsgZHJhd2Vycy4gVXBvbiBzdWJtaXR0aW5nIHRoZSBkcmF3ZXIsIHdlXG4gICAgICAgIC8vIHdhbnQgdG8gY2xvc2UgaXQgd2l0aG91dCBzdWJtaXR0aW5nIHRoZSBmb3JtLiBTdHVmZiBsaWtlIHZhbGlkYXRpb24gd291bGQgYmUgaGFuZGxlZCBieSBsZXhpY2FsIGJlZm9yZSB0aGlzLCB0aHJvdWdoIGJlZm9yZVN1Ym1pdFxuICAgICAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuICAgICAgICBzZXRTdWJtaXR0ZWQodHJ1ZSlcbiAgICAgICAgc2V0RGlzYWJsZWQoZmFsc2UpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IGNvbnRleHRSZWYuY3VycmVudC5jcmVhdGVGb3JtRGF0YShvdmVycmlkZXMsIHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIG1lcmdlT3ZlcnJpZGVEYXRhOiBCb29sZWFuKHR5cGVvZiBvdmVycmlkZXNGcm9tQXJncyAhPT0gJ2Z1bmN0aW9uJyksXG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IHJlc1xuXG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uQXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlcyA9IGF3YWl0IHJlcXVlc3RzW21ldGhvZFRvVXNlLnRvTG93ZXJDYXNlKCldKGFjdGlvbkFyZywge1xuICAgICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXMgPSBhd2FpdCBhY3Rpb24oZm9ybURhdGEpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1vZGlmaWVkV2hpbGVQcm9jZXNzaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBzZXRNb2RpZmllZChmYWxzZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RpZmllZFdoaWxlUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHNldERpc2FibGVkKGZhbHNlKVxuXG4gICAgICAgIGlmICh0eXBlb2YgaGFuZGxlUmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBoYW5kbGVSZXNwb25zZShyZXMsIHN1Y2Nlc3NUb2FzdCwgZXJyb3JUb2FzdClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKVxuICAgICAgICBjb25zdCBpc0pTT04gPSBjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgIT09IC0xXG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IGpzb246IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuXG4gICAgICAgIGlmIChpc0pTT04pIHtcbiAgICAgICAgICBqc29uID0gYXdhaXQgcmVzLmpzb24oKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9uU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgbmV3Rm9ybVN0YXRlID0gYXdhaXQgb25TdWNjZXNzKGpzb24sIHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgZm9ybVN0YXRlOiBzZXJpYWxpemFibGVGb3JtU3RhdGUsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAobmV3Rm9ybVN0YXRlKSB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnTUVSR0VfU0VSVkVSX1NUQVRFJyxcbiAgICAgICAgICAgICAgICBhY2NlcHRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgcHJldlN0YXRlUmVmOiBwcmV2Rm9ybVN0YXRlLFxuICAgICAgICAgICAgICAgIHNlcnZlclN0YXRlOiBuZXdGb3JtU3RhdGUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0U3VibWl0dGVkKGZhbHNlKVxuICAgICAgICAgIHNldFByb2Nlc3NpbmcoZmFsc2UpXG5cbiAgICAgICAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgICAgICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+IHJvdXRlci5wdXNoKHJlZGlyZWN0KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKCFkaXNhYmxlVG9hc3QpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NUb2FzdChqc29uLm1lc3NhZ2UgfHwgdCgnZ2VuZXJhbDpzdWJtaXNzaW9uU3VjY2Vzc2Z1bCcpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuICAgICAgICAgIHNldFN1Ym1pdHRlZCh0cnVlKVxuXG4gICAgICAgICAgLy8gV2hlbiB0aGVyZSB3YXMgYW4gZXJyb3Igc3VibWl0dGluZyBhIGRyYWZ0LFxuICAgICAgICAgIC8vIHNldCB0aGUgZm9ybSBzdGF0ZSB0byB1bnN1Ym1pdHRlZCwgdG8gbm90IHRyaWdnZXIgdmlzaWJsZSBmb3JtIHZhbGlkYXRpb24gb24gY2hhbmdlcyBhZnRlciB0aGUgZmFpbGVkIHN1Ym1pdC5cbiAgICAgICAgICAvLyBBbHNvIGtlZXAgdGhlIGZvcm0gYXMgbW9kaWZpZWQgc28gdGhlIHNhdmUgYnV0dG9uIHJlbWFpbnMgZW5hYmxlZCBmb3IgcmV0cnkuXG4gICAgICAgICAgaWYgKG92ZXJyaWRlc0Zyb21BcmdzWydfc3RhdHVzJ10gPT09ICdkcmFmdCcpIHtcbiAgICAgICAgICAgIHNldE1vZGlmaWVkKHRydWUpXG5cbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVEcmFmdHMpIHtcbiAgICAgICAgICAgICAgc2V0U3VibWl0dGVkKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uY29udGV4dFJlZi5jdXJyZW50IH0gLy8gdHJpZ2dlcnMgcmVyZW5kZXIgb2YgYWxsIGNvbXBvbmVudHMgdGhhdCBzdWJzY3JpYmUgdG8gZm9ybVxuXG4gICAgICAgICAgaWYgKGpzb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JUb2FzdChqc29uLm1lc3NhZ2UpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uLmVycm9ycykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZEVycm9ycywgbm9uRmllbGRFcnJvcnNdID0ganNvbi5lcnJvcnMucmVkdWNlKFxuICAgICAgICAgICAgICAoW2ZpZWxkRXJycywgbm9uRmllbGRFcnJzXSwgZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RmllbGRFcnJzID0gW11cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb25GaWVsZEVycnMgPSBbXVxuXG4gICAgICAgICAgICAgICAgaWYgKGVycj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgbmV3Tm9uRmllbGRFcnJzLnB1c2goZXJyKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycj8uZGF0YT8uZXJyb3JzKSkge1xuICAgICAgICAgICAgICAgICAgZXJyLmRhdGE/LmVycm9ycy5mb3JFYWNoKChkYXRhRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFFcnJvcj8ucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpZWxkRXJycy5wdXNoKGRhdGFFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdOb25GaWVsZEVycnMucHVzaChkYXRhRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIFsuLi5maWVsZEVycnMsIC4uLm5ld0ZpZWxkRXJyc10sXG4gICAgICAgICAgICAgICAgICBbLi4ubm9uRmllbGRFcnJzLCAuLi5uZXdOb25GaWVsZEVycnNdLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1tdLCBbXV0sXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIHNldElzVmFsaWQoZmFsc2UpXG5cbiAgICAgICAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgICAgICAgdHlwZTogJ0FERF9TRVJWRVJfRVJST1JTJyxcbiAgICAgICAgICAgICAgZXJyb3JzOiBmaWVsZEVycm9ycyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIG5vbkZpZWxkRXJyb3JzLmZvckVhY2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBlcnJvclRvYXN0KDxGaWVsZEVycm9yc1RvYXN0IGVycm9yTWVzc2FnZT17ZXJyLm1lc3NhZ2UgfHwgdCgnZXJyb3I6dW5rbm93bicpfSAvPilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvck1lc3NhZ2VzPy5bcmVzLnN0YXR1c10gfHwgcmVzPy5zdGF0dXNUZXh0IHx8IHQoJ2Vycm9yOnVua25vd24nKVxuXG4gICAgICAgICAgZXJyb3JUb2FzdChtZXNzYWdlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgZm9ybVN0YXRlOiBjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzLCByZXMgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgZm9ybScsIGVycikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHNldFByb2Nlc3NpbmcoZmFsc2UpXG4gICAgICAgIHNldFN1Ym1pdHRlZCh0cnVlKVxuICAgICAgICBzZXREaXNhYmxlZChmYWxzZSlcbiAgICAgICAgZXJyb3JUb2FzdChlcnIubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGJlZm9yZVN1Ym1pdCxcbiAgICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uLFxuICAgICAgYWN0aW9uLFxuICAgICAgZGlzYWJsZVN1Y2Nlc3NTdGF0dXMsXG4gICAgICBkaXNhYmxlVmFsaWRhdGlvbk9uU3VibWl0LFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNwYXRjaEZpZWxkcyxcbiAgICAgIGhhbmRsZVJlc3BvbnNlLFxuICAgICAgbWV0aG9kLFxuICAgICAgb25TdWJtaXQsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICByZWRpcmVjdCxcbiAgICAgIHJvdXRlcixcbiAgICAgIHQsXG4gICAgICBpMThuLFxuICAgICAgdmFsaWRhdGVEcmFmdHMsXG4gICAgICB3YWl0Rm9yQXV0b2NvbXBsZXRlLFxuICAgICAgc2V0TW9kaWZpZWQsXG4gICAgICBzZXRTdWJtaXR0ZWQsXG4gICAgXSxcbiAgKVxuXG4gIGNvbnN0IGdldEZpZWxkcyA9IHVzZUNhbGxiYWNrKCgpID0+IGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIFtdKVxuXG4gIGNvbnN0IGdldEZpZWxkID0gdXNlQ2FsbGJhY2soKHBhdGg6IHN0cmluZykgPT4gY29udGV4dFJlZi5jdXJyZW50LmZpZWxkc1twYXRoXSwgW10pXG5cbiAgY29uc3QgZ2V0RGF0YSA9IHVzZUNhbGxiYWNrKCgpID0+IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHRydWUpLCBbXSlcblxuICBjb25zdCBnZXRTaWJsaW5nRGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXRoOiBzdHJpbmcpID0+IGdldFNpYmxpbmdEYXRhRnVuYyhjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzLCBwYXRoKSxcbiAgICBbXSxcbiAgKVxuXG4gIGNvbnN0IGdldERhdGFCeVBhdGggPSB1c2VDYWxsYmFjazxHZXREYXRhQnlQYXRoPihcbiAgICAocGF0aDogc3RyaW5nKSA9PiBnZXREYXRhQnlQYXRoRnVuYyhjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzLCBwYXRoKSxcbiAgICBbXSxcbiAgKVxuXG4gIGNvbnN0IGNyZWF0ZUZvcm1EYXRhID0gdXNlQ2FsbGJhY2s8Q3JlYXRlRm9ybURhdGE+KFxuICAgIGFzeW5jIChvdmVycmlkZXMsIHsgZGF0YTogZGF0YUZyb21BcmdzLCBtZXJnZU92ZXJyaWRlRGF0YSA9IHRydWUgfSkgPT4ge1xuICAgICAgbGV0IGRhdGEgPSBkYXRhRnJvbUFyZ3MgfHwgcmVkdWNlRmllbGRzVG9WYWx1ZXMoY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcywgdHJ1ZSlcblxuICAgICAgbGV0IGZpbGUgPSBkYXRhPy5maWxlXG5cbiAgICAgIGlmIChkb2NDb25maWcgJiYgJ3VwbG9hZCcgaW4gZG9jQ29uZmlnICYmIGRvY0NvbmZpZy51cGxvYWQgJiYgZmlsZSkge1xuICAgICAgICBkZWxldGUgZGF0YS5maWxlXG5cbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGdldFVwbG9hZEhhbmRsZXIoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuXG4gICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGxldCBmaWxlbmFtZSA9IGZpbGUubmFtZVxuICAgICAgICAgIGNvbnN0IGNsaWVudFVwbG9hZENvbnRleHQgPSBhd2FpdCBoYW5kbGVyKHtcbiAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICB1cGRhdGVGaWxlbmFtZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIGZpbGVuYW1lID0gdmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGZpbGUgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBjbGllbnRVcGxvYWRDb250ZXh0LFxuICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICAgIG1pbWVUeXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWVyZ2VPdmVycmlkZURhdGEpIHtcbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IG92ZXJyaWRlc1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhVG9TZXJpYWxpemU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBfcGF5bG9hZDogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgICB9XG5cbiAgICAgIGlmIChkb2NDb25maWcgJiYgJ3VwbG9hZCcgaW4gZG9jQ29uZmlnICYmIGRvY0NvbmZpZy51cGxvYWQgJiYgZmlsZSkge1xuICAgICAgICBkYXRhVG9TZXJpYWxpemUuZmlsZSA9IGZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gbnVsbEFzVW5kZWZpbmVkcyBpcyBpbXBvcnRhbnQgdG8gYWxsb3cgdXBsb2FkcyBhbmQgcmVsYXRpb25zaGlwIGZpZWxkcyB0byBjbGVhciB0aGVtc2VsdmVzXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHNlcmlhbGl6ZShkYXRhVG9TZXJpYWxpemUsIHtcbiAgICAgICAgaW5kaWNlczogdHJ1ZSxcbiAgICAgICAgbnVsbHNBc1VuZGVmaW5lZHM6IGZhbHNlLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgfSxcbiAgICBbY29sbGVjdGlvblNsdWcsIGRvY0NvbmZpZywgZ2V0VXBsb2FkSGFuZGxlcl0sXG4gIClcblxuICBjb25zdCByZXNldCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChkYXRhOiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gaGFuZGxlQWJvcnRSZWYoYWJvcnRSZXNldEZvcm1SZWYpXG5cbiAgICAgIGNvbnN0IGRvY1ByZWZlcmVuY2VzID0gYXdhaXQgZ2V0RG9jUHJlZmVyZW5jZXMoKVxuXG4gICAgICBjb25zdCB7IHN0YXRlOiBuZXdTdGF0ZSB9ID0gYXdhaXQgZ2V0Rm9ybVN0YXRlKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkb2NQZXJtaXNzaW9ucyxcbiAgICAgICAgZG9jUHJlZmVyZW5jZXMsXG4gICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICByZW5kZXJBbGxGaWVsZHM6IHRydWUsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvbGxlY3Rpb25TbHVnID8gY29sbGVjdGlvblNsdWcgOiBnbG9iYWxTbHVnLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uaW5pdENvbnRleHRTdGF0ZSB9IGFzIEZvcm1Db250ZXh0VHlwZVxuICAgICAgc2V0TW9kaWZpZWQoZmFsc2UpXG4gICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRVBMQUNFX1NUQVRFJywgc3RhdGU6IG5ld1N0YXRlIH0pXG5cbiAgICAgIGFib3J0UmVzZXRGb3JtUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfSxcbiAgICBbXG4gICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgIGRpc3BhdGNoRmllbGRzLFxuICAgICAgZ2xvYmFsU2x1ZyxcbiAgICAgIGlkLFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgZ2V0Rm9ybVN0YXRlLFxuICAgICAgZG9jUGVybWlzc2lvbnMsXG4gICAgICBnZXREb2NQcmVmZXJlbmNlcyxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHNldE1vZGlmaWVkLFxuICAgIF0sXG4gIClcblxuICBjb25zdCByZXBsYWNlU3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhdGU6IEZvcm1TdGF0ZSkgPT4ge1xuICAgICAgY29udGV4dFJlZi5jdXJyZW50ID0geyAuLi5pbml0Q29udGV4dFN0YXRlIH0gYXMgRm9ybUNvbnRleHRUeXBlXG4gICAgICBzZXRNb2RpZmllZChmYWxzZSlcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBzdGF0ZSB9KVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzLCBzZXRNb2RpZmllZF0sXG4gIClcblxuICBjb25zdCBhZGRGaWVsZFJvdzogRm9ybUNvbnRleHRUeXBlWydhZGRGaWVsZFJvdyddID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgYmxvY2tUeXBlLCBwYXRoLCByb3dJbmRleDogcm93SW5kZXhBcmcsIHN1YkZpZWxkU3RhdGUgfSkgPT4ge1xuICAgICAgY29uc3QgbmV3Um93czogdW5rbm93bltdID0gZ2V0RGF0YUJ5UGF0aChwYXRoKSB8fCBbXVxuICAgICAgY29uc3Qgcm93SW5kZXggPSByb3dJbmRleEFyZyA9PT0gdW5kZWZpbmVkID8gbmV3Um93cy5sZW5ndGggOiByb3dJbmRleEFyZ1xuXG4gICAgICAvLyBkaXNwYXRjaCBBRERfUk9XIGFkZHMgYSBibGFuayByb3cgdG8gbG9jYWwgZm9ybSBzdGF0ZS5cbiAgICAgIC8vIFRoaXMgcGVyZm9ybXMgbm8gZm9ybSBzdGF0ZSByZXF1ZXN0LCBhcyB0aGUgZGVib3VuY2VkIG9uQ2hhbmdlIGVmZmVjdCB3aWxsIGRvIHRoYXQgZm9yIHVzLlxuICAgICAgZGlzcGF0Y2hGaWVsZHMoe1xuICAgICAgICB0eXBlOiAnQUREX1JPVycsXG4gICAgICAgIGJsb2NrVHlwZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcm93SW5kZXgsXG4gICAgICAgIHN1YkZpZWxkU3RhdGUsXG4gICAgICB9KVxuXG4gICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzLCBnZXREYXRhQnlQYXRoLCBzZXRNb2RpZmllZF0sXG4gIClcblxuICBjb25zdCBtb3ZlRmllbGRSb3c6IEZvcm1Db250ZXh0VHlwZVsnbW92ZUZpZWxkUm93J10gPSB1c2VDYWxsYmFjayhcbiAgICAoeyBtb3ZlRnJvbUluZGV4LCBtb3ZlVG9JbmRleCwgcGF0aCB9KSA9PiB7XG4gICAgICBkaXNwYXRjaEZpZWxkcyh7XG4gICAgICAgIHR5cGU6ICdNT1ZFX1JPVycsXG4gICAgICAgIG1vdmVGcm9tSW5kZXgsXG4gICAgICAgIG1vdmVUb0luZGV4LFxuICAgICAgICBwYXRoLFxuICAgICAgfSlcblxuICAgICAgc2V0TW9kaWZpZWQodHJ1ZSlcbiAgICB9LFxuICAgIFtkaXNwYXRjaEZpZWxkcywgc2V0TW9kaWZpZWRdLFxuICApXG5cbiAgY29uc3QgcmVtb3ZlRmllbGRSb3c6IEZvcm1Db250ZXh0VHlwZVsncmVtb3ZlRmllbGRSb3cnXSA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHBhdGgsIHJvd0luZGV4IH0pID0+IHtcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFTU9WRV9ST1cnLCBwYXRoLCByb3dJbmRleCB9KVxuXG4gICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzLCBzZXRNb2RpZmllZF0sXG4gIClcblxuICBjb25zdCByZXBsYWNlRmllbGRSb3c6IEZvcm1Db250ZXh0VHlwZVsncmVwbGFjZUZpZWxkUm93J10gPSB1c2VDYWxsYmFjayhcbiAgICAoeyBibG9ja1R5cGUsIHBhdGgsIHJvd0luZGV4OiByb3dJbmRleEFyZywgc3ViRmllbGRTdGF0ZSB9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50Um93czogdW5rbm93bltdID0gZ2V0RGF0YUJ5UGF0aChwYXRoKVxuICAgICAgY29uc3Qgcm93SW5kZXggPSByb3dJbmRleEFyZyA9PT0gdW5kZWZpbmVkID8gY3VycmVudFJvd3MubGVuZ3RoIDogcm93SW5kZXhBcmdcblxuICAgICAgZGlzcGF0Y2hGaWVsZHMoe1xuICAgICAgICB0eXBlOiAnUkVQTEFDRV9ST1cnLFxuICAgICAgICBibG9ja1R5cGUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBzdWJGaWVsZFN0YXRlLFxuICAgICAgfSlcblxuICAgICAgc2V0TW9kaWZpZWQodHJ1ZSlcbiAgICB9LFxuICAgIFtkaXNwYXRjaEZpZWxkcywgZ2V0RGF0YUJ5UGF0aCwgc2V0TW9kaWZpZWRdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhYm9ydE9uQ2hhbmdlID0gYWJvcnRSZXNldEZvcm1SZWYuY3VycmVudFxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGFib3J0QW5kSWdub3JlKGFib3J0T25DaGFuZ2UpXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsaXppbmdGcm9tUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0SW5pdGlhbGl6aW5nKGluaXRpYWxpemluZ0Zyb21Qcm9wcylcbiAgICB9XG4gIH0sIFtpbml0aWFsaXppbmdGcm9tUHJvcHNdKVxuXG4gIGNvbnRleHRSZWYuY3VycmVudC5zdWJtaXQgPSBzdWJtaXRcbiAgY29udGV4dFJlZi5jdXJyZW50LmdldEZpZWxkcyA9IGdldEZpZWxkc1xuICBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0RmllbGQgPSBnZXRGaWVsZFxuICBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0RGF0YSA9IGdldERhdGFcbiAgY29udGV4dFJlZi5jdXJyZW50LmdldFNpYmxpbmdEYXRhID0gZ2V0U2libGluZ0RhdGFcbiAgY29udGV4dFJlZi5jdXJyZW50LmdldERhdGFCeVBhdGggPSBnZXREYXRhQnlQYXRoXG4gIGNvbnRleHRSZWYuY3VycmVudC52YWxpZGF0ZUZvcm0gPSB2YWxpZGF0ZUZvcm1cbiAgY29udGV4dFJlZi5jdXJyZW50LmNyZWF0ZUZvcm1EYXRhID0gY3JlYXRlRm9ybURhdGFcbiAgY29udGV4dFJlZi5jdXJyZW50LnNldE1vZGlmaWVkID0gc2V0TW9kaWZpZWRcbiAgY29udGV4dFJlZi5jdXJyZW50LnNldFByb2Nlc3NpbmcgPSBzZXRQcm9jZXNzaW5nXG4gIGNvbnRleHRSZWYuY3VycmVudC5zZXRCYWNrZ3JvdW5kUHJvY2Vzc2luZyA9IHNldEJhY2tncm91bmRQcm9jZXNzaW5nXG5cbiAgY29udGV4dFJlZi5jdXJyZW50LnNldFN1Ym1pdHRlZCA9IHNldFN1Ym1pdHRlZFxuICBjb250ZXh0UmVmLmN1cnJlbnQuc2V0SXNWYWxpZCA9IHNldElzVmFsaWRcbiAgY29udGV4dFJlZi5jdXJyZW50LmRpc2FibGVkID0gZGlzYWJsZWRcbiAgY29udGV4dFJlZi5jdXJyZW50LnNldERpc2FibGVkID0gc2V0RGlzYWJsZWRcbiAgY29udGV4dFJlZi5jdXJyZW50LmZvcm1SZWYgPSBmb3JtUmVmXG4gIGNvbnRleHRSZWYuY3VycmVudC5yZXNldCA9IHJlc2V0XG4gIGNvbnRleHRSZWYuY3VycmVudC5yZXBsYWNlU3RhdGUgPSByZXBsYWNlU3RhdGVcbiAgY29udGV4dFJlZi5jdXJyZW50LmRpc3BhdGNoRmllbGRzID0gZGlzcGF0Y2hGaWVsZHNcbiAgY29udGV4dFJlZi5jdXJyZW50LmFkZEZpZWxkUm93ID0gYWRkRmllbGRSb3dcbiAgY29udGV4dFJlZi5jdXJyZW50LnJlbW92ZUZpZWxkUm93ID0gcmVtb3ZlRmllbGRSb3dcbiAgY29udGV4dFJlZi5jdXJyZW50Lm1vdmVGaWVsZFJvdyA9IG1vdmVGaWVsZFJvd1xuICBjb250ZXh0UmVmLmN1cnJlbnQucmVwbGFjZUZpZWxkUm93ID0gcmVwbGFjZUZpZWxkUm93XG4gIGNvbnRleHRSZWYuY3VycmVudC51dWlkID0gdXVpZFxuICBjb250ZXh0UmVmLmN1cnJlbnQuaW5pdGlhbGl6aW5nID0gaW5pdGlhbGl6aW5nXG4gIGNvbnRleHRSZWYuY3VycmVudC5pc1ZhbGlkID0gaXNWYWxpZFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SXNNb3VudGVkKHRydWUpXG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkaXNhYmxlZEZyb21Qcm9wcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBzZXREaXNhYmxlZChkaXNhYmxlZEZyb21Qcm9wcylcbiAgICB9XG4gIH0sIFtkaXNhYmxlZEZyb21Qcm9wc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHN1Ym1pdHRlZEZyb21Qcm9wcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBzZXRTdWJtaXR0ZWQoc3VibWl0dGVkRnJvbVByb3BzKVxuICAgIH1cbiAgfSwgW3N1Ym1pdHRlZEZyb21Qcm9wc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IC4uLmluaXRDb250ZXh0U3RhdGUgfSBhcyBGb3JtQ29udGV4dFR5cGVcbiAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLFxuICAgICAgICBvcHRpbWl6ZTogZmFsc2UsXG4gICAgICAgIHNhbml0aXplOiB0cnVlLFxuICAgICAgICBzdGF0ZTogaW5pdGlhbFN0YXRlLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtpbml0aWFsU3RhdGUsIGRpc3BhdGNoRmllbGRzXSlcblxuICB1c2VUaHJvdHRsZWRFZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgcmVmcmVzaENvb2tpZSgpXG4gICAgfSxcbiAgICAxNTAwMCxcbiAgICBbZm9ybVN0YXRlXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUxvY2FsZUNoYW5nZSA9IHVzZUVmZmVjdEV2ZW50KCgpID0+IHtcbiAgICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IC4uLmNvbnRleHRSZWYuY3VycmVudCB9IC8vIHRyaWdnZXJzIHJlcmVuZGVyIG9mIGFsbCBjb21wb25lbnRzIHRoYXQgc3Vic2NyaWJlIHRvIGZvcm1cbiAgICBzZXRNb2RpZmllZChmYWxzZSlcbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGhhbmRsZUxvY2FsZUNoYW5nZSgpXG4gIH0sIFtsb2NhbGVdKVxuXG4gIGNvbnN0IGNsYXNzZXMgPSBbY2xhc3NOYW1lLCBiYXNlQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcblxuICBjb25zdCBleGVjdXRlT25DaGFuZ2UgPSB1c2VFZmZlY3RFdmVudCgoc3VibWl0dGVkOiBib29sZWFuKSA9PiB7XG4gICAgcXVldWVUYXNrKGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9uQ2hhbmdlKSkge1xuICAgICAgICBsZXQgc2VydmVyU3RhdGU6IEZvcm1TdGF0ZVxuXG4gICAgICAgIGZvciAoY29uc3Qgb25DaGFuZ2VGbiBvZiBvbkNoYW5nZSkge1xuICAgICAgICAgIC8vIEVkaXQgdmlldyBkZWZhdWx0IG9uQ2hhbmdlIGlzIGluIHBhY2thZ2VzL3VpL3NyYy92aWV3cy9FZGl0L2luZGV4LnRzeC4gVGhpcyBvbkNoYW5nZSB1c3VhbGx5IHNlbmRzIGEgZm9ybSBzdGF0ZSByZXF1ZXN0XG4gICAgICAgICAgc2VydmVyU3RhdGUgPSBhd2FpdCBvbkNoYW5nZUZuKHtcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogZGVlcENvcHlPYmplY3RTaW1wbGVXaXRob3V0UmVhY3RDb21wb25lbnRzKGZvcm1TdGF0ZSwge1xuICAgICAgICAgICAgICBleGNsdWRlRmlsZXM6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHN1Ym1pdHRlZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGlzcGF0Y2hGaWVsZHMoe1xuICAgICAgICAgIHR5cGU6ICdNRVJHRV9TRVJWRVJfU1RBVEUnLFxuICAgICAgICAgIHByZXZTdGF0ZVJlZjogcHJldkZvcm1TdGF0ZSxcbiAgICAgICAgICBzZXJ2ZXJTdGF0ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIHVzZURlYm91bmNlZEVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBpZiAoKGlzRmlyc3RSZW5kZXJSZWYuY3VycmVudCB8fCAhZGVxdWFsKGZvcm1TdGF0ZSwgcHJldkZvcm1TdGF0ZS5jdXJyZW50KSkgJiYgbW9kaWZpZWQpIHtcbiAgICAgICAgZXhlY3V0ZU9uQ2hhbmdlKHN1Ym1pdHRlZClcbiAgICAgIH1cblxuICAgICAgcHJldkZvcm1TdGF0ZS5jdXJyZW50ID0gZm9ybVN0YXRlXG4gICAgICBpc0ZpcnN0UmVuZGVyUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW21vZGlmaWVkLCBzdWJtaXR0ZWQsIGZvcm1TdGF0ZV0sXG4gICAgMjUwLFxuICApXG5cbiAgY29uc3QgRG9jdW1lbnRGb3JtQ29udGV4dENvbXBvbmVudDogUmVhY3QuRkM8YW55PiA9IGlzRG9jdW1lbnRGb3JtXG4gICAgPyBEb2N1bWVudEZvcm1Db250ZXh0XG4gICAgOiBSZWFjdC5GcmFnbWVudFxuXG4gIGNvbnN0IGRvY3VtZW50Rm9ybUNvbnRleHRQcm9wcyA9IGlzRG9jdW1lbnRGb3JtXG4gICAgPyB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0UmVmLmN1cnJlbnQsXG4gICAgICB9XG4gICAgOiB7fVxuXG4gIGNvbnN0IEVsOiAnZm9ybScgPSAoZWwgYXMgdW5rbm93biBhcyAnZm9ybScpIHx8ICdmb3JtJ1xuXG4gIHJldHVybiAoXG4gICAgPEVsXG4gICAgICBhY3Rpb249e3R5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicgPyB2b2lkIGFjdGlvbiA6IGFjdGlvbn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgIC8qKlxuICAgICAgICogZGF0YS1mb3JtLXJlYWR5IHNpZ25hbHMgaWYgdGhlIGZvcm0gaXMgcmVhZHkgdG8gYmUgdXNlZC4gVGhpcyBpcyB1c2VkIGJ5IG91ciBlMmUgdGVzdHNcbiAgICAgICAqIHRvIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGJlIHJlYWR5IGJlZm9yZSBpbnRlcmFjdGluZyB3aXRoIGl0LCByZWR1Y2luZyBmbGFraW5lc3MgaWYgdGhlIHRlc3QgaXMgcnVuIGluXG4gICAgICAgKiBzbG93IG5ldHdvcmsgY29uZGl0aW9ucy5cbiAgICAgICAqL1xuICAgICAgZGF0YS1mb3JtLXJlYWR5PXshcHJvY2Vzc2luZyAmJiBpc01vdW50ZWQgJiYgIWluaXRpYWxpemluZ31cbiAgICAgIG1ldGhvZD17bWV0aG9kfVxuICAgICAgbm9WYWxpZGF0ZVxuICAgICAgb25TdWJtaXQ9eyhlKSA9PiB2b2lkIGNvbnRleHRSZWYuY3VycmVudC5zdWJtaXQoe30sIGUpfVxuICAgICAgcmVmPXtmb3JtUmVmfVxuICAgID5cbiAgICAgIDxEb2N1bWVudEZvcm1Db250ZXh0Q29tcG9uZW50IHsuLi5kb2N1bWVudEZvcm1Db250ZXh0UHJvcHN9PlxuICAgICAgICA8Rm9ybUNvbnRleHQgdmFsdWU9e2NvbnRleHRSZWYuY3VycmVudH0+XG4gICAgICAgICAgPEZvcm1XYXRjaENvbnRleHRcbiAgICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICAgIGZpZWxkczogZm9ybVN0YXRlLFxuICAgICAgICAgICAgICAuLi5jb250ZXh0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdWJtaXR0ZWRDb250ZXh0IHZhbHVlPXtzdWJtaXR0ZWR9PlxuICAgICAgICAgICAgICA8SW5pdGlhbGl6aW5nQ29udGV4dCB2YWx1ZT17IWlzTW91bnRlZCB8fCAoaXNNb3VudGVkICYmIGluaXRpYWxpemluZyl9PlxuICAgICAgICAgICAgICAgIDxQcm9jZXNzaW5nQ29udGV4dCB2YWx1ZT17cHJvY2Vzc2luZ30+XG4gICAgICAgICAgICAgICAgICA8QmFja2dyb3VuZFByb2Nlc3NpbmdDb250ZXh0IHZhbHVlPXtiYWNrZ3JvdW5kUHJvY2Vzc2luZ30+XG4gICAgICAgICAgICAgICAgICAgIDxNb2RpZmllZENvbnRleHQgdmFsdWU9e21vZGlmaWVkfT5cbiAgICAgICAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBlc2xpbnQtcmVhY3Qvbm8tY29udGV4dC1wcm92aWRlciAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2ZpZWxkc1JlZHVjZXJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybUZpZWxkc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvTW9kaWZpZWRDb250ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9CYWNrZ3JvdW5kUHJvY2Vzc2luZ0NvbnRleHQ+XG4gICAgICAgICAgICAgICAgPC9Qcm9jZXNzaW5nQ29udGV4dD5cbiAgICAgICAgICAgICAgPC9Jbml0aWFsaXppbmdDb250ZXh0PlxuICAgICAgICAgICAgPC9TdWJtaXR0ZWRDb250ZXh0PlxuICAgICAgICAgIDwvRm9ybVdhdGNoQ29udGV4dD5cbiAgICAgICAgPC9Gb3JtQ29udGV4dD5cbiAgICAgIDwvRG9jdW1lbnRGb3JtQ29udGV4dENvbXBvbmVudD5cbiAgICA8L0VsPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIERvY3VtZW50Rm9ybUNvbnRleHQsXG4gIEZvcm1Db250ZXh0LFxuICBGb3JtRmllbGRzQ29udGV4dCxcbiAgRm9ybVdhdGNoQ29udGV4dCxcbiAgTW9kaWZpZWRDb250ZXh0LFxuICBQcm9jZXNzaW5nQ29udGV4dCxcbiAgU3VibWl0dGVkQ29udGV4dCxcbiAgdXNlQWxsRm9ybUZpZWxkcyxcbiAgdXNlRG9jdW1lbnRGb3JtLFxuICB1c2VGb3JtLFxuICB1c2VGb3JtRmllbGRzLFxuICB1c2VGb3JtTW9kaWZpZWQsXG4gIHVzZUZvcm1Qcm9jZXNzaW5nLFxuICB1c2VGb3JtU3VibWl0dGVkLFxuICB1c2VXYXRjaEZvcm0sXG59IGZyb20gJy4vY29udGV4dC5qcydcblxuZXhwb3J0IHsgRm9ybVByb3BzIH1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmZ1bmN0aW9uIGdyb3VwU2ltaWxhckVycm9ycyhpdGVtczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXVxuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGl0ZW0uc3BsaXQoJyDihpIgJylcbiAgICAgIGxldCBpbnNlcnRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEZpbmQgYSBwbGFjZSB3aGVyZSBhIHNpbWlsYXIgcGF0aCBleGlzdHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0uc3RhcnRzV2l0aChwYXJ0c1swXSkpIHtcbiAgICAgICAgICByZXN1bHQuc3BsaWNlKGkgKyAxLCAwLCBpdGVtKVxuICAgICAgICAgIGluc2VydGVkID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm8gc2ltaWxhciBwYXRoIHdhcyBmb3VuZCwgYWRkIHRvIHRoZSBlbmRcbiAgICAgIGlmICghaW5zZXJ0ZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFcnJvcnNGcm9tTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB7XG4gIGVycm9ycz86IHN0cmluZ1tdXG4gIG1lc3NhZ2U6IHN0cmluZ1xufSB7XG4gIGNvbnN0IGNvbG9uSW5kZXggPSBtZXNzYWdlLmluZGV4T2YoJzonKVxuICBjb25zdCBpbnRybyA9IGNvbG9uSW5kZXggPj0gMCA/IG1lc3NhZ2Uuc2xpY2UoMCwgY29sb25JbmRleCkgOiBtZXNzYWdlXG4gIGNvbnN0IGVycm9yc1N0cmluZyA9IGNvbG9uSW5kZXggPj0gMCA/IG1lc3NhZ2Uuc2xpY2UoY29sb25JbmRleCArIDEpIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFlcnJvcnNTdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogaW50cm8sXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXJyb3JzID0gZXJyb3JzU3RyaW5nLnNwbGl0KCcsJykubWFwKChlcnJvcikgPT4gZXJyb3IucmVwbGFjZUFsbCgnID4gJywgJyDihpIgJykudHJpbSgpKVxuXG4gIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9ycyxcbiAgICAgIG1lc3NhZ2U6IGAke2ludHJvfTogYCxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVycm9yczogZ3JvdXBTaW1pbGFyRXJyb3JzKGVycm9ycyksXG4gICAgbWVzc2FnZTogYCR7aW50cm99ICgke2Vycm9ycy5sZW5ndGh9KTpgLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWVsZEVycm9yc1RvYXN0KHsgZXJyb3JNZXNzYWdlIH0pIHtcbiAgY29uc3QgW3sgZXJyb3JzLCBtZXNzYWdlIH1dID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gY3JlYXRlRXJyb3JzRnJvbU1lc3NhZ2UoZXJyb3JNZXNzYWdlKSlcblxuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICB7bWVzc2FnZX1cbiAgICAgIHtBcnJheS5pc0FycmF5KGVycm9ycykgJiYgZXJyb3JzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgIGVycm9ycy5sZW5ndGggPT09IDEgPyAoXG4gICAgICAgICAgPHNwYW4gZGF0YS10ZXN0aWQ9XCJmaWVsZC1lcnJvclwiPntlcnJvcnNbMF19PC9zcGFuPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDx1bCBkYXRhLXRlc3RpZD1cImZpZWxkLWVycm9yc1wiPlxuICAgICAgICAgICAge2Vycm9ycy5tYXAoKGVycm9yLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17aW5kZXh9PntlcnJvcn08L2xpPlxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgKVxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBEZXBlbmRlbmN5TGlzdCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWJvdW5jZWRFZmZlY3QoZWZmZWN0OiAoKSA9PiB2b2lkLCBkZXBzOiBEZXBlbmRlbmN5TGlzdCwgZGVsYXk6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBbZGVib3VuY2VkRWZmZWN0LCBzZXREZWJvdW5jZWRFZmZlY3RdID0gdXNlU3RhdGU8KCkgPT4gdm9pZD4oKCkgPT4gZWZmZWN0KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0RGVib3VuY2VkRWZmZWN0KCgpID0+IGVmZmVjdClcbiAgICB9LCBkZWxheSlcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaGFuZGxlcilcbiAgICB9XG4gIH0sIFsuLi5kZXBzLCBkZWxheV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkZWJvdW5jZWRFZmZlY3QoKVxuICB9LCBbZGVib3VuY2VkRWZmZWN0XSlcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBVcGxvYWRDb2xsZWN0aW9uU2x1ZyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG50eXBlIFVwbG9hZEhhbmRsZXIgPSAoYXJnczoge1xuICBmaWxlOiBGaWxlXG4gIHVwZGF0ZUZpbGVuYW1lOiAoZmlsZW5hbWU6IHN0cmluZykgPT4gdm9pZFxufSkgPT4gUHJvbWlzZTx1bmtub3duPlxuXG5leHBvcnQgdHlwZSBVcGxvYWRIYW5kbGVyc0NvbnRleHQgPSB7XG4gIGdldFVwbG9hZEhhbmRsZXI6IChhcmdzOiB7IGNvbGxlY3Rpb25TbHVnOiBVcGxvYWRDb2xsZWN0aW9uU2x1ZyB9KSA9PiBudWxsIHwgVXBsb2FkSGFuZGxlclxuICBzZXRVcGxvYWRIYW5kbGVyOiAoYXJnczoge1xuICAgIGNvbGxlY3Rpb25TbHVnOiBVcGxvYWRDb2xsZWN0aW9uU2x1Z1xuICAgIGhhbmRsZXI6IFVwbG9hZEhhbmRsZXJcbiAgfSkgPT4gdW5rbm93blxufVxuXG5jb25zdCBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxudWxsIHwgVXBsb2FkSGFuZGxlcnNDb250ZXh0PihudWxsKVxuXG5leHBvcnQgY29uc3QgVXBsb2FkSGFuZGxlcnNQcm92aWRlciA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgW3VwbG9hZEhhbmRsZXJzLCBzZXRVcGxvYWRIYW5kbGVyc10gPSB1c2VTdGF0ZTxNYXA8VXBsb2FkQ29sbGVjdGlvblNsdWcsIFVwbG9hZEhhbmRsZXI+PihcbiAgICAoKSA9PiBuZXcgTWFwKCksXG4gIClcblxuICBjb25zdCBnZXRVcGxvYWRIYW5kbGVyOiBVcGxvYWRIYW5kbGVyc0NvbnRleHRbJ2dldFVwbG9hZEhhbmRsZXInXSA9ICh7IGNvbGxlY3Rpb25TbHVnIH0pID0+IHtcbiAgICByZXR1cm4gdXBsb2FkSGFuZGxlcnMuZ2V0KGNvbGxlY3Rpb25TbHVnKVxuICB9XG5cbiAgY29uc3Qgc2V0VXBsb2FkSGFuZGxlcjogVXBsb2FkSGFuZGxlcnNDb250ZXh0WydzZXRVcGxvYWRIYW5kbGVyJ10gPSAoe1xuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGhhbmRsZXIsXG4gIH0pID0+IHtcbiAgICBzZXRVcGxvYWRIYW5kbGVycygodXBsb2FkSGFuZGxlcnMpID0+IHtcbiAgICAgIGNvbnN0IGNsb25lID0gbmV3IE1hcCh1cGxvYWRIYW5kbGVycylcbiAgICAgIGNsb25lLnNldChjb2xsZWN0aW9uU2x1ZywgaGFuZGxlcilcbiAgICAgIHJldHVybiBjbG9uZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gPENvbnRleHQgdmFsdWU9e3sgZ2V0VXBsb2FkSGFuZGxlciwgc2V0VXBsb2FkSGFuZGxlciB9fT57Y2hpbGRyZW59PC9Db250ZXh0PlxufVxuXG5leHBvcnQgY29uc3QgdXNlVXBsb2FkSGFuZGxlcnMgPSAoKTogVXBsb2FkSGFuZGxlcnNDb250ZXh0ID0+IHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZShDb250ZXh0KVxuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VVcGxvYWRIYW5kbGVycyBtdXN0IGJlIHVzZWQgd2l0aGluIFVwbG9hZEhhbmRsZXJzUHJvdmlkZXInKVxuICB9XG5cbiAgcmV0dXJuIGNvbnRleHRcbn1cbiIsIid1c2UgY2xpZW50J1xuZXhwb3J0IGNvbnN0IGVycm9yTWVzc2FnZXMgPSB7XG4gIDQxMzogJ1lvdXIgcmVxdWVzdCB3YXMgdG9vIGxhcmdlIHRvIHN1Ym1pdCBzdWNjZXNzZnVsbHkuJyxcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBGb3JtRmllbGQsIEZvcm1TdGF0ZSwgUm93IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IE9iamVjdElkSW1wb3J0IGZyb20gJ2Jzb24tb2JqZWN0aWQnXG5pbXBvcnQgeyBkZXF1YWwgfSBmcm9tICdkZXF1YWwvbGl0ZScgLy8gbGl0ZTogbm8gbmVlZCBmb3IgTWFwIGFuZCBTZXQgc3VwcG9ydFxuaW1wb3J0IHsgZGVlcENvcHlPYmplY3RTaW1wbGVXaXRob3V0UmVhY3RDb21wb25lbnRzIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbmltcG9ydCB0eXBlIHsgRmllbGRBY3Rpb24gfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBtZXJnZVNlcnZlckZvcm1TdGF0ZSB9IGZyb20gJy4vbWVyZ2VTZXJ2ZXJGb3JtU3RhdGUuanMnXG5pbXBvcnQgeyBmbGF0dGVuUm93cywgc2VwYXJhdGVSb3dzIH0gZnJvbSAnLi9yb3dzLmpzJ1xuXG5jb25zdCBPYmplY3RJZCA9ICdkZWZhdWx0JyBpbiBPYmplY3RJZEltcG9ydCA/IE9iamVjdElkSW1wb3J0LmRlZmF1bHQgOiBPYmplY3RJZEltcG9ydFxuXG4vKipcbiAqIFJlZHVjZXIgd2hpY2ggbW9kaWZpZXMgdGhlIGZvcm0gZmllbGQgc3RhdGUgKGFsbCB0aGUgY3VycmVudCBkYXRhIG9mIHRoZSBmaWVsZHMgaW4gdGhlIGZvcm0pLiBXaGVuIGNhbGxlZCB1c2luZyBkaXNwYXRjaCwgaXQgd2lsbCByZXR1cm4gYSBuZXcgc3RhdGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmllbGRSZWR1Y2VyKHN0YXRlOiBGb3JtU3RhdGUsIGFjdGlvbjogRmllbGRBY3Rpb24pOiBGb3JtU3RhdGUge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnQUREX1JPVyc6IHtcbiAgICAgIGNvbnN0IHsgYmxvY2tUeXBlLCBwYXRoLCByb3dJbmRleDogcm93SW5kZXhGcm9tQXJncywgc3ViRmllbGRTdGF0ZSA9IHt9IH0gPSBhY3Rpb25cblxuICAgICAgY29uc3Qgcm93SW5kZXggPVxuICAgICAgICB0eXBlb2Ygcm93SW5kZXhGcm9tQXJncyA9PT0gJ251bWJlcicgPyByb3dJbmRleEZyb21BcmdzIDogc3RhdGVbcGF0aF0/LnJvd3M/Lmxlbmd0aCB8fCAwXG5cbiAgICAgIGNvbnN0IHdpdGhOZXdSb3cgPSBbLi4uKHN0YXRlW3BhdGhdPy5yb3dzIHx8IFtdKV1cblxuICAgICAgY29uc3QgbmV3Um93OiBSb3cgPSB7XG4gICAgICAgIGlkOiAoc3ViRmllbGRTdGF0ZT8uaWQ/LnZhbHVlIGFzIHN0cmluZykgfHwgbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKSxcbiAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYmxvY2tUeXBlKSB7XG4gICAgICAgIG5ld1Jvdy5ibG9ja1R5cGUgPSBibG9ja1R5cGVcbiAgICAgIH1cblxuICAgICAgd2l0aE5ld1Jvdy5zcGxpY2Uocm93SW5kZXgsIDAsIG5ld1JvdylcblxuICAgICAgaWYgKGJsb2NrVHlwZSkge1xuICAgICAgICBzdWJGaWVsZFN0YXRlLmJsb2NrVHlwZSA9IHtcbiAgICAgICAgICBpbml0aWFsVmFsdWU6IGJsb2NrVHlwZSxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogYmxvY2tUeXBlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBuZXcgcm93IHRvIGFycmF5IF9maWVsZCBzdGF0ZV9cbiAgICAgIGNvbnN0IHsgcmVtYWluaW5nRmllbGRzLCByb3dzOiBzaWJsaW5nUm93cyB9ID0gc2VwYXJhdGVSb3dzKHBhdGgsIHN0YXRlKVxuXG4gICAgICBzaWJsaW5nUm93cy5zcGxpY2Uocm93SW5kZXgsIDAsIHN1YkZpZWxkU3RhdGUpXG5cbiAgICAgIGNvbnN0IG5ld1N0YXRlOiBGb3JtU3RhdGUgPSB7XG4gICAgICAgIC4uLnJlbWFpbmluZ0ZpZWxkcyxcbiAgICAgICAgLi4uZmxhdHRlblJvd3MocGF0aCwgc2libGluZ1Jvd3MpLFxuICAgICAgICBbYCR7cGF0aH0uJHtyb3dJbmRleH0uaWRgXToge1xuICAgICAgICAgIGluaXRpYWxWYWx1ZTogbmV3Um93LmlkLFxuICAgICAgICAgIHBhc3Nlc0NvbmRpdGlvbjogdHJ1ZSxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogbmV3Um93LmlkLFxuICAgICAgICB9LFxuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICAuLi5zdGF0ZVtwYXRoXSxcbiAgICAgICAgICBkaXNhYmxlRm9ybURhdGE6IHRydWUsXG4gICAgICAgICAgcm93czogd2l0aE5ld1JvdyxcbiAgICAgICAgICB2YWx1ZTogc2libGluZ1Jvd3MubGVuZ3RoLFxuICAgICAgICB9LFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3U3RhdGVcbiAgICB9XG5cbiAgICBjYXNlICdBRERfU0VSVkVSX0VSUk9SUyc6IHtcbiAgICAgIGxldCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gICAgICBjb25zdCBlcnJvclBhdGhzOiB7IGZpZWxkRXJyb3JQYXRoOiBzdHJpbmc7IHBhcmVudFBhdGg6IHN0cmluZyB9W10gPSBbXVxuXG4gICAgICBhY3Rpb24uZXJyb3JzLmZvckVhY2goKHsgbWVzc2FnZSwgcGF0aDogZmllbGRQYXRoIH0pID0+IHtcbiAgICAgICAgbmV3U3RhdGVbZmllbGRQYXRoXSA9IHtcbiAgICAgICAgICAuLi4obmV3U3RhdGVbZmllbGRQYXRoXSB8fCB7XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IG51bGwsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBmaWVsZFBhdGguc3BsaXQoJy4nKVxuICAgICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGVycm9yUGF0aHMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZEVycm9yUGF0aDogZmllbGRQYXRoLFxuICAgICAgICAgICAgcGFyZW50UGF0aDogc2VnbWVudHMuc2xpY2UoMCwgc2VnbWVudHMubGVuZ3RoIC0gMSkuam9pbignLicpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIG5ld1N0YXRlID0gT2JqZWN0LmVudHJpZXMobmV3U3RhdGUpLnJlZHVjZSgoYWNjLCBbcGF0aCwgZmllbGRTdGF0ZV0pID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvclBhdGhzID0gZXJyb3JQYXRocy5yZWR1Y2UoKGVycm9yQUNDLCB7IGZpZWxkRXJyb3JQYXRoLCBwYXJlbnRQYXRoIH0pID0+IHtcbiAgICAgICAgICBpZiAocGFyZW50UGF0aC5zdGFydHNXaXRoKHBhdGgpKSB7XG4gICAgICAgICAgICBlcnJvckFDQy5wdXNoKGZpZWxkRXJyb3JQYXRoKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXJyb3JBQ0NcbiAgICAgICAgfSwgW10pXG5cbiAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuXG4gICAgICAgIGlmIChmaWVsZEVycm9yUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5ld0Vycm9yUGF0aHMgPSBBcnJheS5pc0FycmF5KGZpZWxkU3RhdGUuZXJyb3JQYXRocykgPyBmaWVsZFN0YXRlLmVycm9yUGF0aHMgOiBbXVxuXG4gICAgICAgICAgZmllbGRFcnJvclBhdGhzLmZvckVhY2goKGZpZWxkRXJyb3JQYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5ld0Vycm9yUGF0aHMuaW5jbHVkZXMoZmllbGRFcnJvclBhdGgpKSB7XG4gICAgICAgICAgICAgIG5ld0Vycm9yUGF0aHMucHVzaChmaWVsZEVycm9yUGF0aClcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIGFjY1twYXRoXSA9IHtcbiAgICAgICAgICAgICAgLi4uZmllbGRTdGF0ZSxcbiAgICAgICAgICAgICAgZXJyb3JQYXRoczogbmV3RXJyb3JQYXRocyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgICAgICBhY2NbcGF0aF0gPSBmaWVsZFN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCB7fSlcblxuICAgICAgcmV0dXJuIG5ld1N0YXRlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHVwbGljYXRlcyBhIHJvdyBpbiBhbiBhcnJheSBvciBibG9ja3MgZmllbGQuXG4gICAgICogSXQgbmVlZHMgdG8gbWFuaXB1bGF0ZSB0d28gZGlzdGluY3QgcGFydHMgb2YgdGhlIGZvcm0gc3RhdGU6XG4gICAgICogICAtIFRoZSBgcm93c2AgcHJvcGVydHkgb2YgdGhlIHBhcmVudCBmaWVsZCwgZS5nLiBgYXJyYXkucm93c2AsIGBibG9ja3Mucm93c2AsIGV0Yy5cbiAgICAgKiAgIC0gVGhlIHJvdydzIHN0YXRlLCBlLmcuIGBhcnJheS4wLmlkYCwgYGFycmF5LjAudGV4dGAsIGV0Yy5cbiAgICAgKi9cbiAgICBjYXNlICdEVVBMSUNBVEVfUk9XJzoge1xuICAgICAgY29uc3QgeyBwYXRoLCByb3dJbmRleCB9ID0gYWN0aW9uXG4gICAgICBjb25zdCB7IHJlbWFpbmluZ0ZpZWxkcywgcm93cyB9ID0gc2VwYXJhdGVSb3dzKHBhdGgsIHN0YXRlKVxuXG4gICAgICAvLyAxLiBEdXBsaWNhdGUgdGhlIGByb3dzYCBwcm9wZXJ0eSBvZiB0aGUgcGFyZW50IGZpZWxkLCBlLmcuIGBhcnJheS5yb3dzYCwgYGJsb2Nrcy5yb3dzYCwgZXRjLlxuICAgICAgY29uc3QgbmV3Um93cyA9IFsuLi4oc3RhdGVbcGF0aF0ucm93cyB8fCBbXSldXG5cbiAgICAgIGNvbnN0IG5ld1JvdyA9IGRlZXBDb3B5T2JqZWN0U2ltcGxlV2l0aG91dFJlYWN0Q29tcG9uZW50cyhuZXdSb3dzW3Jvd0luZGV4XSlcblxuICAgICAgY29uc3QgbmV3Um93SUQgPSBuZXcgT2JqZWN0SWQoKS50b0hleFN0cmluZygpXG5cbiAgICAgIGlmIChuZXdSb3cuaWQpIHtcbiAgICAgICAgbmV3Um93LmlkID0gbmV3Um93SURcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1Jvd3Nbcm93SW5kZXhdPy5jdXN0b21Db21wb25lbnRzPy5Sb3dMYWJlbCkge1xuICAgICAgICBuZXdSb3cuY3VzdG9tQ29tcG9uZW50cyA9IHtcbiAgICAgICAgICBSb3dMYWJlbDogbmV3Um93c1tyb3dJbmRleF0uY3VzdG9tQ29tcG9uZW50cy5Sb3dMYWJlbCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBEdXBsaWNhdGUgdGhlIHJvdydzIHN0YXRlLCBlLmcuIGBhcnJheS4wLmlkYCwgYGFycmF5LjAudGV4dGAsIGV0Yy5cbiAgICAgIGNvbnN0IG5ld1Jvd1N0YXRlID0gZGVlcENvcHlPYmplY3RTaW1wbGVXaXRob3V0UmVhY3RDb21wb25lbnRzKHJvd3Nbcm93SW5kZXhdKVxuXG4gICAgICAvLyBFbnN1cmUgdGhhdCBgaWRgIGluIGZvcm0gc3RhdGUgZXhhY3RseSBtYXRjaGVzIHRoZSByb3cgaWQgb24gdGhlIHBhcmVudCBmaWVsZFxuICAgICAgaWYgKG5ld1Jvd1N0YXRlLmlkKSB7XG4gICAgICAgIG5ld1Jvd1N0YXRlLmlkLnZhbHVlID0gbmV3Um93SURcbiAgICAgICAgbmV3Um93U3RhdGUuaWQuaW5pdGlhbFZhbHVlID0gbmV3Um93SURcbiAgICAgIH1cblxuICAgICAgLy8gR2VuZXJhdGUgbmV3IGlkcyBmb3IgYWxsIG5lc3RlZCBpZCBmaWVsZHMsIGUuZy4gYGFycmF5LjAubmVzdGVkQXJyYXkuMC5pZGBcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5ld1Jvd1N0YXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5LmVuZHNXaXRoKCcuaWQnKSkpIHtcbiAgICAgICAgY29uc3QgaWRTdGF0ZSA9IG5ld1Jvd1N0YXRlW2tleV1cblxuICAgICAgICBjb25zdCBuZXdOZXN0ZWRGaWVsZElEID0gbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKVxuXG4gICAgICAgIGlmIChpZFN0YXRlICYmIHR5cGVvZiBpZFN0YXRlLnZhbHVlID09PSAnc3RyaW5nJyAmJiBPYmplY3RJZC5pc1ZhbGlkKGlkU3RhdGUudmFsdWUpKSB7XG4gICAgICAgICAgbmV3Um93U3RhdGVba2V5XS52YWx1ZSA9IG5ld05lc3RlZEZpZWxkSURcbiAgICAgICAgICBuZXdSb3dTdGF0ZVtrZXldLmluaXRpYWxWYWx1ZSA9IG5ld05lc3RlZEZpZWxkSURcblxuICAgICAgICAgIC8vIEFwcGx5IHRoZSBJRCB0byBpdHMgY29ycmVzcG9uZGluZyBwYXJlbnQgZmllbGQncyByb3dzLCBlLmcuIGBhcnJheS4wLm5lc3RlZEFycmF5LnJvd3NbMF0uaWRgXG4gICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBrZXkuc3BsaXQoJy4nKVxuICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0sIDEwKVxuICAgICAgICAgIGNvbnN0IHBhcmVudEZpZWxkUGF0aCA9IHNlZ21lbnRzLnNsaWNlKDAsIHNlZ21lbnRzLmxlbmd0aCAtIDIpLmpvaW4oJy4nKVxuICAgICAgICAgIGNvbnN0IHBhcmVudEZpZWxkUm93cyA9IG5ld1Jvd1N0YXRlPy5bcGFyZW50RmllbGRQYXRoXT8ucm93c1xuXG4gICAgICAgICAgaWYgKG5ld1Jvd1N0YXRlW3BhcmVudEZpZWxkUGF0aF0gJiYgQXJyYXkuaXNBcnJheShwYXJlbnRGaWVsZFJvd3MpKSB7XG4gICAgICAgICAgICBpZiAoIXBhcmVudEZpZWxkUm93c1tyb3dJbmRleF0pIHtcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRSb3dzW3Jvd0luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICBpZDogbmV3TmVzdGVkRmllbGRJRCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRSb3dzW3Jvd0luZGV4XS5pZCA9IG5ld05lc3RlZEZpZWxkSURcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlcmUgYXJlIHN1YmZpZWxkc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKG5ld1Jvd1N0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBuZXcgb2JqZWN0IGNvbnRhaW5pbmcgc3ViZmllbGQgbmFtZXMgdG8gdW5mbGF0dGVuZWRSb3dzIGFycmF5XG4gICAgICAgIHJvd3Muc3BsaWNlKHJvd0luZGV4ICsgMSwgMCwgbmV3Um93U3RhdGUpXG4gICAgICAgIG5ld1Jvd3Muc3BsaWNlKHJvd0luZGV4ICsgMSwgMCwgbmV3Um93KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ucmVtYWluaW5nRmllbGRzLFxuICAgICAgICAuLi5mbGF0dGVuUm93cyhwYXRoLCByb3dzKSxcbiAgICAgICAgW3BhdGhdOiB7XG4gICAgICAgICAgLi4uc3RhdGVbcGF0aF0sXG4gICAgICAgICAgZGlzYWJsZUZvcm1EYXRhOiB0cnVlLFxuICAgICAgICAgIHJvd3M6IG5ld1Jvd3MsXG4gICAgICAgICAgdmFsdWU6IHJvd3MubGVuZ3RoLFxuICAgICAgICB9LFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3U3RhdGVcbiAgICB9XG5cbiAgICBjYXNlICdNRVJHRV9TRVJWRVJfU1RBVEUnOiB7XG4gICAgICBjb25zdCB7IGFjY2VwdFZhbHVlcywgcHJldlN0YXRlUmVmLCBzZXJ2ZXJTdGF0ZSB9ID0gYWN0aW9uXG5cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gbWVyZ2VTZXJ2ZXJGb3JtU3RhdGUoe1xuICAgICAgICBhY2NlcHRWYWx1ZXMsXG4gICAgICAgIGN1cnJlbnRTdGF0ZTogc3RhdGUgfHwge30sXG4gICAgICAgIGluY29taW5nU3RhdGU6IHNlcnZlclN0YXRlLFxuICAgICAgfSlcblxuICAgICAgcHJldlN0YXRlUmVmLmN1cnJlbnQgPSBuZXdTdGF0ZVxuXG4gICAgICByZXR1cm4gbmV3U3RhdGVcbiAgICB9XG5cbiAgICBjYXNlICdNT1ZFX1JPVyc6IHtcbiAgICAgIGNvbnN0IHsgbW92ZUZyb21JbmRleCwgbW92ZVRvSW5kZXgsIHBhdGggfSA9IGFjdGlvblxuXG4gICAgICAvLyBIYW5kbGUgbW92aW5nIHJvd3Mgb24gdGhlIHRvcC1sZXZlbCwgaS5lLiBgYXJyYXkuMC50ZXh0YCAtPiBgYXJyYXkuMS50ZXh0YFxuICAgICAgY29uc3QgeyByZW1haW5pbmdGaWVsZHMsIHJvd3M6IHRvcExldmVsUm93cyB9ID0gc2VwYXJhdGVSb3dzKHBhdGgsIHN0YXRlKVxuICAgICAgY29uc3QgY29weU9mTW92aW5nUm93ID0gdG9wTGV2ZWxSb3dzW21vdmVGcm9tSW5kZXhdXG4gICAgICB0b3BMZXZlbFJvd3Muc3BsaWNlKG1vdmVGcm9tSW5kZXgsIDEpXG4gICAgICB0b3BMZXZlbFJvd3Muc3BsaWNlKG1vdmVUb0luZGV4LCAwLCBjb3B5T2ZNb3ZpbmdSb3cpXG5cbiAgICAgIC8vIG1vZGlmeSBhcnJheS9ibG9jayBpbnRlcm5hbCByb3cgc3RhdGUgKGkuZS4gY29sbGFwc2VkLCBibG9ja1R5cGUpXG4gICAgICBjb25zdCByb3dzV2l0aGluRmllbGQgPSBbLi4uKHN0YXRlW3BhdGhdPy5yb3dzIHx8IFtdKV1cbiAgICAgIGNvbnN0IGNvcHlPZk1vdmluZ1JvdzIgPSB7IC4uLnJvd3NXaXRoaW5GaWVsZFttb3ZlRnJvbUluZGV4XSB9XG4gICAgICByb3dzV2l0aGluRmllbGQuc3BsaWNlKG1vdmVGcm9tSW5kZXgsIDEpXG4gICAgICByb3dzV2l0aGluRmllbGQuc3BsaWNlKG1vdmVUb0luZGV4LCAwLCBjb3B5T2ZNb3ZpbmdSb3cyKVxuXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ucmVtYWluaW5nRmllbGRzLFxuICAgICAgICAuLi5mbGF0dGVuUm93cyhwYXRoLCB0b3BMZXZlbFJvd3MpLFxuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICAuLi5zdGF0ZVtwYXRoXSxcbiAgICAgICAgICByb3dzOiByb3dzV2l0aGluRmllbGQsXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdTdGF0ZVxuICAgIH1cblxuICAgIGNhc2UgJ1JFTU9WRSc6IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9XG4gICAgICBpZiAobmV3U3RhdGVbYWN0aW9uLnBhdGhdKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdTdGF0ZVthY3Rpb24ucGF0aF1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdTdGF0ZVxuICAgIH1cblxuICAgIGNhc2UgJ1JFTU9WRV9ST1cnOiB7XG4gICAgICBjb25zdCB7IHBhdGgsIHJvd0luZGV4IH0gPSBhY3Rpb25cbiAgICAgIGNvbnN0IHsgcmVtYWluaW5nRmllbGRzLCByb3dzIH0gPSBzZXBhcmF0ZVJvd3MocGF0aCwgc3RhdGUpXG4gICAgICBjb25zdCByb3dzTWV0YWRhdGEgPSBbLi4uKHN0YXRlW3BhdGhdPy5yb3dzIHx8IFtdKV1cblxuICAgICAgcm93cy5zcGxpY2Uocm93SW5kZXgsIDEpXG4gICAgICByb3dzTWV0YWRhdGEuc3BsaWNlKHJvd0luZGV4LCAxKVxuXG4gICAgICBjb25zdCBuZXdTdGF0ZTogRm9ybVN0YXRlID0ge1xuICAgICAgICAuLi5yZW1haW5pbmdGaWVsZHMsXG4gICAgICAgIFtwYXRoXToge1xuICAgICAgICAgIC4uLnN0YXRlW3BhdGhdLFxuICAgICAgICAgIGRpc2FibGVGb3JtRGF0YTogcm93cy5sZW5ndGggPiAwLFxuICAgICAgICAgIHJvd3M6IHJvd3NNZXRhZGF0YSxcbiAgICAgICAgICB2YWx1ZTogcm93cy5sZW5ndGgsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmZsYXR0ZW5Sb3dzKHBhdGgsIHJvd3MpLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3U3RhdGVcbiAgICB9XG5cbiAgICBjYXNlICdSRVBMQUNFX1JPVyc6IHtcbiAgICAgIGNvbnN0IHsgYmxvY2tUeXBlLCBwYXRoLCByb3dJbmRleDogcm93SW5kZXhBcmcsIHN1YkZpZWxkU3RhdGUgPSB7fSB9ID0gYWN0aW9uXG5cbiAgICAgIGNvbnN0IHsgcmVtYWluaW5nRmllbGRzLCByb3dzOiBzaWJsaW5nUm93cyB9ID0gc2VwYXJhdGVSb3dzKHBhdGgsIHN0YXRlKVxuICAgICAgY29uc3Qgcm93SW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dJbmRleEFyZywgc2libGluZ1Jvd3M/Lmxlbmd0aCAtIDEgfHwgMCkpXG5cbiAgICAgIGNvbnN0IHJvd3NNZXRhZGF0YSA9IFsuLi4oc3RhdGVbcGF0aF0/LnJvd3MgfHwgW10pXVxuICAgICAgcm93c01ldGFkYXRhW3Jvd0luZGV4XSA9IHtcbiAgICAgICAgaWQ6IG5ldyBPYmplY3RJZCgpLnRvSGV4U3RyaW5nKCksXG4gICAgICAgIGJsb2NrVHlwZTogYmxvY2tUeXBlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJsb2NrVHlwZSkge1xuICAgICAgICBzdWJGaWVsZFN0YXRlLmJsb2NrVHlwZSA9IHtcbiAgICAgICAgICBpbml0aWFsVmFsdWU6IGJsb2NrVHlwZSxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogYmxvY2tUeXBlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHJlcGxhY2UgZm9ybSBfZmllbGQgc3RhdGVfXG4gICAgICBzaWJsaW5nUm93c1tyb3dJbmRleF0gPSBzdWJGaWVsZFN0YXRlXG5cbiAgICAgIGNvbnN0IG5ld1N0YXRlOiBGb3JtU3RhdGUgPSB7XG4gICAgICAgIC4uLnJlbWFpbmluZ0ZpZWxkcyxcbiAgICAgICAgLi4uZmxhdHRlblJvd3MocGF0aCwgc2libGluZ1Jvd3MpLFxuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICAuLi5zdGF0ZVtwYXRoXSxcbiAgICAgICAgICBkaXNhYmxlRm9ybURhdGE6IHRydWUsXG4gICAgICAgICAgcm93czogcm93c01ldGFkYXRhLFxuICAgICAgICAgIHZhbHVlOiBzaWJsaW5nUm93cy5sZW5ndGgsXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdTdGF0ZVxuICAgIH1cblxuICAgIGNhc2UgJ1JFUExBQ0VfU1RBVEUnOiB7XG4gICAgICBpZiAoYWN0aW9uLm9wdGltaXplICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBPbmx5IHVwZGF0ZSBmaWVsZHMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICAgICAgLy8gYnkgY29tcGFyaW5nIG9sZCB2YWx1ZSAvIGluaXRpYWxWYWx1ZSB0byBuZXdcbiAgICAgICAgLy8gLi5cbiAgICAgICAgLy8gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50IGZvciBzYXZpbmdcbiAgICAgICAgLy8gbGFyZ2UgZG9jdW1lbnRzIHdpdGggaHVuZHJlZHMgb2YgZmllbGRzXG4gICAgICAgIGNvbnN0IG5ld1N0YXRlOiBGb3JtU3RhdGUgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3QgW3BhdGgsIG5ld0ZpZWxkXSBvZiBPYmplY3QuZW50cmllcyhhY3Rpb24uc3RhdGUpKSB7XG4gICAgICAgICAgY29uc3Qgb2xkRmllbGQgPSBzdGF0ZVtwYXRoXVxuXG4gICAgICAgICAgaWYgKG5ld0ZpZWxkLnZhbGlkICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgbmV3RmllbGQudmFsaWQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXdGaWVsZC5wYXNzZXNDb25kaXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBuZXdGaWVsZC5wYXNzZXNDb25kaXRpb24gPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkZXF1YWwob2xkRmllbGQsIG5ld0ZpZWxkKSkge1xuICAgICAgICAgICAgbmV3U3RhdGVbcGF0aF0gPSBuZXdGaWVsZFxuICAgICAgICAgIH0gZWxzZSBpZiAob2xkRmllbGQpIHtcbiAgICAgICAgICAgIG5ld1N0YXRlW3BhdGhdID0gb2xkRmllbGRcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3U3RhdGVcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgaW4gNC4wIC0gdGhpcyBpcyBhIHRlbXBvcmFyeSBmaXggdG8gcHJldmVudCBhIGJyZWFraW5nIGNoYW5nZVxuICAgICAgaWYgKGFjdGlvbi5zYW5pdGl6ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC52YWx1ZXMoYWN0aW9uLnN0YXRlKSkge1xuICAgICAgICAgIGlmIChmaWVsZC52YWxpZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGZpZWxkLnZhbGlkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGQucGFzc2VzQ29uZGl0aW9uICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgZmllbGQucGFzc2VzQ29uZGl0aW9uID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gSWYgd2UncmUgbm90IG9wdGltaXppbmcsIGp1c3Qgc2V0IHRoZSBzdGF0ZSB0byB0aGUgbmV3IHN0YXRlXG4gICAgICByZXR1cm4gYWN0aW9uLnN0YXRlXG4gICAgfVxuXG4gICAgY2FzZSAnU0VUX0FMTF9ST1dTX0NPTExBUFNFRCc6IHtcbiAgICAgIGNvbnN0IHsgcGF0aCwgdXBkYXRlZFJvd3MgfSA9IGFjdGlvblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW3BhdGhdOiB7XG4gICAgICAgICAgLi4uc3RhdGVbcGF0aF0sXG4gICAgICAgICAgcm93czogdXBkYXRlZFJvd3MsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnU0VUX1JPV19DT0xMQVBTRUQnOiB7XG4gICAgICBjb25zdCB7IHBhdGgsIHVwZGF0ZWRSb3dzIH0gPSBhY3Rpb25cblxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICAuLi5zdGF0ZVtwYXRoXSxcbiAgICAgICAgICByb3dzOiB1cGRhdGVkUm93cyxcbiAgICAgICAgfSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld1N0YXRlXG4gICAgfVxuXG4gICAgY2FzZSAnVVBEQVRFJzoge1xuICAgICAgY29uc3QgbmV3RmllbGQgPSBPYmplY3QuZW50cmllcyhhY3Rpb24pLnJlZHVjZShcbiAgICAgICAgKGZpZWxkLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICdkaXNhYmxlRm9ybURhdGEnLFxuICAgICAgICAgICAgICAnZXJyb3JNZXNzYWdlJyxcbiAgICAgICAgICAgICAgJ2luaXRpYWxWYWx1ZScsXG4gICAgICAgICAgICAgICdyb3dzJyxcbiAgICAgICAgICAgICAgJ3ZhbGlkJyxcbiAgICAgICAgICAgICAgJ3ZhbGlkYXRlJyxcbiAgICAgICAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgICAgIF0uaW5jbHVkZXMoa2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZmllbGQsXG4gICAgICAgICAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICAgICAgICAgICAgLi4uKGtleSA9PT0gJ3ZhbHVlJyA/IHsgaXNNb2RpZmllZDogdHJ1ZSB9IDoge30pLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWVsZFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZT8uW2FjdGlvbi5wYXRoXSB8fCAoe30gYXMgRm9ybUZpZWxkKSxcbiAgICAgIClcblxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBbYWN0aW9uLnBhdGhdOiBuZXdGaWVsZCxcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgYGlzTW9kaWZpZWRgIGluIGFsbCBvdGhlciBmaWVsZHNcbiAgICAgIGlmICgndmFsdWUnIGluIGFjdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3RhdGUpKSB7XG4gICAgICAgICAgaWYgKHBhdGggIT09IGFjdGlvbi5wYXRoICYmICdpc01vZGlmaWVkJyBpbiBmaWVsZCkge1xuICAgICAgICAgICAgZGVsZXRlIG5ld1N0YXRlW3BhdGhdLmlzTW9kaWZpZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld1N0YXRlXG4gICAgfVxuXG4gICAgY2FzZSAnVVBEQVRFX01BTlknOiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gICAgICBPYmplY3QuZW50cmllcyhhY3Rpb24uZm9ybVN0YXRlKS5mb3JFYWNoKChbcGF0aCwgZmllbGRdKSA9PiB7XG4gICAgICAgIG5ld1N0YXRlW3BhdGhdID0gZmllbGRcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBuZXdTdGF0ZVxuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IEZvcm1TdGF0ZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGRlcXVhbCB9IGZyb20gJ2RlcXVhbC9saXRlJyAvLyBsaXRlOiBubyBuZWVkIGZvciBNYXAgYW5kIFNldCBzdXBwb3J0XG5cbi8qKlxuICogSWYgdHJ1ZSwgd2lsbCBhY2NlcHQgYWxsIHZhbHVlcyBmcm9tIHRoZSBzZXJ2ZXIsIG92ZXJyaWRpbmcgYW55IGN1cnJlbnQgdmFsdWVzIGluIGxvY2FsIHN0YXRlLlxuICogQ2FuIGFsc28gcHJvdmlkZSBhbiBvcHRpb25zIG9iamVjdCBmb3IgbW9yZSBncmFudWxhciBjb250cm9sLlxuICovXG5leHBvcnQgdHlwZSBBY2NlcHRWYWx1ZXMgPVxuICB8IHtcbiAgICAgIC8qKlxuICAgICAgICogV2hlbiBgZmFsc2VgLCB3aWxsIGFjY2VwdCB0aGUgdmFsdWVzIGZyb20gdGhlIHNlcnZlciBfVU5MRVNTXyB0aGUgdmFsdWUgaGFzIGJlZW4gbW9kaWZpZWQgbG9jYWxseSBzaW5jZSB0aGUgcmVxdWVzdCB3YXMgbWFkZS5cbiAgICAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciBhdXRvc2F2ZSwgZm9yIGV4YW1wbGUsIHdoZXJlIGhvb2tzIG1heSBoYXZlIG1vZGlmaWVkIHRoZSBmaWVsZCdzIHZhbHVlIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgeW91IHdlcmUgc3RpbGwgbWFraW5nIGNoYW5nZXMuXG4gICAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgICAqL1xuICAgICAgb3ZlcnJpZGVMb2NhbENoYW5nZXM/OiBib29sZWFuXG4gICAgfVxuICB8IGJvb2xlYW5cblxudHlwZSBBcmdzID0ge1xuICBhY2NlcHRWYWx1ZXM/OiBBY2NlcHRWYWx1ZXNcbiAgY3VycmVudFN0YXRlPzogRm9ybVN0YXRlXG4gIGluY29taW5nU3RhdGU6IEZvcm1TdGF0ZVxufVxuXG4vKipcbiAqIFBhcnNlcyBhbiBhcnJheSBmaWVsZCBwYXRoIHRvIGV4dHJhY3QgdGhlIGFycmF5IHBhdGgsIHJvdyBpbmRleCwgYW5kIGZpZWxkIHBhdGguXG4gKiBIYW5kbGVzIG5lc3RlZCBhcnJheXMgYnkgZmluZGluZyB0aGUgZGVlcGVzdCBudW1lcmljIGluZGV4LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIGZpZWxkIHBhdGggdG8gcGFyc2UgKGUuZy4sICdhcnJheS4xLnRleHQnIG9yICdibG9ja3MuMC5pdGVtcy4xLnRpdGxlJylcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFycmF5UGF0aCwgcm93SW5kZXgsIGFuZCBmaWVsZFBhdGgsIG9yIG51bGwgaWYgbm90IGFuIGFycmF5IGZpZWxkXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlQXJyYXlGaWVsZFBhdGgoJ2FycmF5LjEudGV4dCcpXG4gKiAvLyBSZXR1cm5zOiB7IGFycmF5UGF0aDogJ2FycmF5Jywgcm93SW5kZXg6IDEsIGZpZWxkUGF0aDogJ3RleHQnIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VBcnJheUZpZWxkUGF0aCgnYmxvY2tzLjAuaXRlbXMuMS50aXRsZScpXG4gKiAvLyBSZXR1cm5zOiB7IGFycmF5UGF0aDogJ2Jsb2Nrcy4wLml0ZW1zJywgcm93SW5kZXg6IDEsIGZpZWxkUGF0aDogJ3RpdGxlJyB9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXJyYXlGaWVsZFBhdGgocGF0aDogc3RyaW5nKToge1xuICBhcnJheVBhdGg6IHN0cmluZ1xuICBmaWVsZFBhdGg6IHN0cmluZ1xuICByb3dJbmRleDogbnVtYmVyXG59IHwgbnVsbCB7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpXG5cbiAgLy8gRmluZCB0aGUgbGFzdCBudW1lcmljIGluZGV4IChpbmRpY2F0ZXMgYXJyYXkgcm93KVxuICBsZXQgbGFzdE51bWVyaWNJbmRleCA9IC0xXG4gIGZvciAobGV0IGkgPSBzZWdtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmICgvXlxcZCskLy50ZXN0KHNlZ21lbnRzW2ldKSkge1xuICAgICAgbGFzdE51bWVyaWNJbmRleCA9IGlcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gTm90IGFuIGFycmF5IGZpZWxkIGlmIG5vIG51bWVyaWMgaW5kZXggb3Igbm90aGluZyBhZnRlciBpdFxuICBpZiAobGFzdE51bWVyaWNJbmRleCA9PT0gLTEgfHwgbGFzdE51bWVyaWNJbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFycmF5UGF0aDogc2VnbWVudHMuc2xpY2UoMCwgbGFzdE51bWVyaWNJbmRleCkuam9pbignLicpLFxuICAgIGZpZWxkUGF0aDogc2VnbWVudHMuc2xpY2UobGFzdE51bWVyaWNJbmRleCArIDEpLmpvaW4oJy4nKSxcbiAgICByb3dJbmRleDogcGFyc2VJbnQoc2VnbWVudHNbbGFzdE51bWVyaWNJbmRleF0sIDEwKSxcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgZm9ybSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIGludGVsbGlnZW50bHkgbWVyZ2VzIGl0IGludG8gdGhlIGNsaWVudCBzdGF0ZS5cbiAqIFRoZSBzZXJ2ZXIgY29udGFpbnMgZXh0cmEgcHJvcGVydGllcyB0aGF0IHRoZSBjbGllbnQgbWF5IG5vdCBoYXZlLCBlLmcuIGN1c3RvbSBjb21wb25lbnRzIGFuZCBlcnJvciBzdGF0ZXMuXG4gKiBXZSB0eXBpY2FsbHkgZG8gbm90IHdhbnQgdG8gbWVyZ2UgcHJvcGVydGllcyB0aGF0IHJlbHkgb24gdXNlciBpbnB1dCwgaG93ZXZlciwgc3VjaCBhcyB2YWx1ZXMsIHVubGVzcyBleHBsaWNpdGx5IHJlcXVlc3RlZC5cbiAqIERvaW5nIHRoaXMgd291bGQgY2F1c2UgdGhlIGNsaWVudCB0byBsb3NlIGFueSBsb2NhbCBjaGFuZ2VzIHRvIHRob3NlIGZpZWxkcy5cbiAqXG4gKiBOb3RlOiBMb2NhbCBzdGF0ZSBpcyB0aGUgc291cmNlIG9mIHRydXRoLCBub3QgdGhlIG5ldyBzZXJ2ZXIgc3RhdGUgdGhhdCBpcyBnZXR0aW5nIG1lcmdlZCBpbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXJyYXkgcm93XG4gKiBtYW5pcHVsYXRpb24gc3BlY2lmaWNhbGx5LCB3aGVyZSB0aGUgdXNlciBtYXkgaGF2ZSBhZGRlZCwgcmVtb3ZlZCwgb3IgcmVvcmRlcmVkIHJvd3Mgd2hpbGUgYSByZXF1ZXN0IHdhcyBwZW5kaW5nIGFuZCBpcyBub3cgc3RhbGUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHNvbWUgZGVmYXVsdHMsIGFzIHdlbGwgYXMgY2xlYW5zIHVwIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBjbGllbnQuXG4gKiBlLmcuIGl0IHdpbGwgc2V0IGB2YWxpZGAgYW5kIGBwYXNzZXNDb25kaXRpb25gIHRvIHRydWUgaWYgdW5kZWZpbmVkLCBhbmQgcmVtb3ZlIGBhZGRlZEJ5U2VydmVyYCBmcm9tIHRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1lcmdlU2VydmVyRm9ybVN0YXRlID0gKHtcbiAgYWNjZXB0VmFsdWVzLFxuICBjdXJyZW50U3RhdGUgPSB7fSxcbiAgaW5jb21pbmdTdGF0ZSxcbn06IEFyZ3MpOiBGb3JtU3RhdGUgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uY3VycmVudFN0YXRlIH1cblxuICBmb3IgKGNvbnN0IFtwYXRoLCBpbmNvbWluZ0ZpZWxkXSBvZiBPYmplY3QuZW50cmllcyhpbmNvbWluZ1N0YXRlIHx8IHt9KSkge1xuICAgIGlmICghKHBhdGggaW4gY3VycmVudFN0YXRlKSAmJiAhaW5jb21pbmdGaWVsZC5hZGRlZEJ5U2VydmVyKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGl0J3MgYSBuZXcgZmllbGQgYWRkZWQgYnkgdGhlIHNlcnZlciwgYWx3YXlzIGFjY2VwdCB0aGUgdmFsdWUuXG4gICAgICogT3RoZXJ3aXNlOlxuICAgICAqICAgYS4gYWNjZXB0IGFsbCB2YWx1ZXMgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCwgZS5nLiBvbiBzdWJtaXRcbiAgICAgKiAgIGIuIG9ubHkgYWNjZXB0IHZhbHVlcyBmb3IgdW5tb2RpZmllZCBmaWVsZHMsIGUuZy4gb24gYXV0b3NhdmVcbiAgICAgKi9cbiAgICBsZXQgc2hvdWxkQWNjZXB0VmFsdWUgPVxuICAgICAgaW5jb21pbmdGaWVsZC5hZGRlZEJ5U2VydmVyIHx8XG4gICAgICBhY2NlcHRWYWx1ZXMgPT09IHRydWUgfHxcbiAgICAgICh0eXBlb2YgYWNjZXB0VmFsdWVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBhY2NlcHRWYWx1ZXMgIT09IG51bGwgJiZcbiAgICAgICAgLy8gTm90ZTogTXVzdCBiZSBleHBsaWNpdGx5IGBmYWxzZWAsIGFsbG93IGBudWxsYCBvciBgdW5kZWZpbmVkYCB0byBtZWFuIHRydWVcbiAgICAgICAgYWNjZXB0VmFsdWVzLm92ZXJyaWRlTG9jYWxDaGFuZ2VzID09PSBmYWxzZSAmJlxuICAgICAgICAhY3VycmVudFN0YXRlW3BhdGhdPy5pc01vZGlmaWVkKVxuXG4gICAgLyoqXG4gICAgICogRm9yIGFycmF5IHJvdyBmaWVsZHMsIHZlcmlmeSB0aGUgcm93IElEcyBtYXRjaCBhdCB0aGUgZ2l2ZW4gaW5kZXggYmVmb3JlIGFjY2VwdGluZ1xuICAgICAqIHNlcnZlciB2YWx1ZXMuIElmIHJvd3Mgd2VyZSByZW9yZGVyZWQgb3IgZGVsZXRlZCB3aGlsZSB0aGUgcmVxdWVzdCB3YXMgaW4tZmxpZ2h0LFxuICAgICAqIHRoZSBzYW1lIGluZGV4IG1heSByZWZlciB0byBkaWZmZXJlbnQgcm93cywgYW5kIGFjY2VwdGluZyB0aGUgc2VydmVyIHZhbHVlIHdvdWxkXG4gICAgICogb3ZlcndyaXRlIHRoZSB3cm9uZyByb3cncyBkYXRhLlxuICAgICAqXG4gICAgICogVGhpcyBndWFyZCBvbmx5IGFwcGxpZXMgZHVyaW5nIGF1dG9zYXZlLiBPbiBleHBsaWNpdCBzYXZlIChhY2NlcHRWYWx1ZXMgPT09IHRydWUpLFxuICAgICAqIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaXMgYXV0aG9yaXRhdGl2ZSBhbmQgdGhpcyBjaGVjayBpcyBieXBhc3NlZC5cbiAgICAgKi9cbiAgICBpZiAoc2hvdWxkQWNjZXB0VmFsdWUgJiYgIWluY29taW5nRmllbGQuYWRkZWRCeVNlcnZlciAmJiBhY2NlcHRWYWx1ZXMgIT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQXJyYXlGaWVsZFBhdGgocGF0aClcbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgY29uc3QgeyBhcnJheVBhdGgsIHJvd0luZGV4IH0gPSBwYXJzZWRcbiAgICAgICAgY29uc3QgY2xpZW50Um93SWQgPSBjdXJyZW50U3RhdGVbYXJyYXlQYXRoXT8ucm93cz8uW3Jvd0luZGV4XT8uaWRcbiAgICAgICAgY29uc3Qgc2VydmVyUm93SWQgPSBpbmNvbWluZ1N0YXRlW2FycmF5UGF0aF0/LnJvd3M/Lltyb3dJbmRleF0/LmlkXG5cbiAgICAgICAgaWYgKGNsaWVudFJvd0lkID09PSB1bmRlZmluZWQgfHwgKHNlcnZlclJvd0lkICYmIGNsaWVudFJvd0lkICE9PSBzZXJ2ZXJSb3dJZCkpIHtcbiAgICAgICAgICBzaG91bGRBY2NlcHRWYWx1ZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkSW5jb21pbmdGaWVsZCA9IGluY29taW5nRmllbGRcblxuICAgIGlmICghc2hvdWxkQWNjZXB0VmFsdWUpIHtcbiAgICAgIC8qKlxuICAgICAgICogTm90ZTogZG8gbm90IGRlbGV0ZSBwcm9wZXJ0aWVzIG9mZiBgaW5jb21pbmdGaWVsZGAgYXMgdGhpcyB3aWxsIG11dGF0ZSB0aGUgb3JpZ2luYWwgb2JqZWN0XG4gICAgICAgKiBJbnN0ZWFkLCBvbWl0IHRoZW0gZnJvbSB0aGUgZGVzdHJ1Y3R1cmVkIG9iamVjdCBieSBleGNsdWRpbmcgc3BlY2lmaWMga2V5c1xuICAgICAgICogVGhpcyB3aWxsIGFsc28gZW5zdXJlIHdlIGRvbid0IHNldCBgdW5kZWZpbmVkYCBpbnRvIHRoZSByZXN1bHQgdW5uZWNlc3NhcmlseVxuICAgICAgICovXG4gICAgICBjb25zdCB7IGluaXRpYWxWYWx1ZSwgdmFsdWUsIC4uLnJlc3QgfSA9IGluY29taW5nRmllbGRcbiAgICAgIHNhbml0aXplZEluY29taW5nRmllbGQgPSByZXN0XG4gICAgfVxuXG4gICAgbmV3U3RhdGVbcGF0aF0gPSB7XG4gICAgICAuLi5jdXJyZW50U3RhdGVbcGF0aF0sXG4gICAgICAuLi5zYW5pdGl6ZWRJbmNvbWluZ0ZpZWxkLFxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGN1cnJlbnRTdGF0ZVtwYXRoXSAmJlxuICAgICAgJ2Vycm9yUGF0aHMnIGluIGN1cnJlbnRTdGF0ZVtwYXRoXSAmJlxuICAgICAgISgnZXJyb3JQYXRocycgaW4gaW5jb21pbmdGaWVsZClcbiAgICApIHtcbiAgICAgIG5ld1N0YXRlW3BhdGhdLmVycm9yUGF0aHMgPSBbXVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZXBseSBtZXJnZSB0aGUgcm93cyBhcnJheSB0byBlbnN1cmUgY2hhbmdlcyB0byBsb2NhbCBzdGF0ZSBhcmUgbm90IGxvc3Qgd2hpbGUgdGhlIHJlcXVlc3Qgd2FzIHBlbmRpbmdcbiAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIHNlcnZlciByZXNwb25zZSBjb3VsZCBjb21lIGJhY2sgd2l0aCBhIHJvdyB3aGljaCBoYXMgYmVlbiBkZWxldGVkIG9uIHRoZSBjbGllbnRcbiAgICAgKiBMb29wIG92ZXIgdGhlIGluY29taW5nIHJvd3MsIGlmIGl0IGV4aXN0cyBpbiBjbGllbnQgc2lkZSBmb3JtIHN0YXRlLCBtZXJnZSBpbiBhbnkgbmV3IHByb3BlcnRpZXMgZnJvbSB0aGUgc2VydmVyXG4gICAgICogTm90ZTogcmVhZCBgY3VycmVudFN0YXRlYCBhbmQgbm90IGBuZXdTdGF0ZWAgaGVyZSwgYXMgdGhlIGByb3dzYCBwcm9wZXJ0eSBoYXZlIGFscmVhZHkgYmVlbiBtZXJnZWQgYWJvdmVcbiAgICAgKlxuICAgICAqIE9uIGV4cGxpY2l0IHNhdmUgKGFjY2VwdFZhbHVlcyA9PT0gdHJ1ZSksIHRoZSBzZXJ2ZXIgaXMgYXV0aG9yaXRhdGl2ZSAtIGFjY2VwdCBzZXJ2ZXIgcm93IG9yZGVyLlxuICAgICAqIE9uIGF1dG9zYXZlIChhY2NlcHRWYWx1ZXMgIT09IHRydWUpLCB0aGUgY2xpZW50IGlzIHNvdXJjZSBvZiB0cnV0aCAtIHVzZSBJRC1iYXNlZCBtYXRjaGluZy5cbiAgICAgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNvbWluZ0ZpZWxkLnJvd3MpICYmIHBhdGggaW4gY3VycmVudFN0YXRlKSB7XG4gICAgICBpZiAoYWNjZXB0VmFsdWVzID09PSB0cnVlKSB7XG4gICAgICAgIC8vIEV4cGxpY2l0IHNhdmU6IHNlcnZlciBpcyBhdXRob3JpdGF0aXZlLCB1c2UgaW5kZXgtYmFzZWQgbWVyZ2luZ1xuICAgICAgICBuZXdTdGF0ZVtwYXRoXS5yb3dzID0gaW5jb21pbmdGaWVsZC5yb3dzLm1hcCgoc2VydmVyUm93LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAuLi4oY3VycmVudFN0YXRlW3BhdGhdPy5yb3dzPy5baW5kZXhdIHx8IHt9KSxcbiAgICAgICAgICAuLi5zZXJ2ZXJSb3csXG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXV0b3NhdmU6IGNsaWVudCBpcyBzb3VyY2Ugb2YgdHJ1dGgsIHVzZSBJRC1iYXNlZCBtYXRjaGluZ1xuICAgICAgICBuZXdTdGF0ZVtwYXRoXS5yb3dzID0gWy4uLihjdXJyZW50U3RhdGVbcGF0aF0/LnJvd3MgfHwgW10pXSAvLyBzaGFsbG93IGNvcHkgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGFycmF5XG5cbiAgICAgICAgaW5jb21pbmdGaWVsZC5yb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4SW5DdXJyZW50U3RhdGUgPSBjdXJyZW50U3RhdGVbcGF0aF0ucm93cz8uZmluZEluZGV4KFxuICAgICAgICAgICAgKGV4aXN0aW5nUm93KSA9PiBleGlzdGluZ1Jvdy5pZCA9PT0gcm93LmlkLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGlmIChpbmRleEluQ3VycmVudFN0YXRlID4gLTEpIHtcbiAgICAgICAgICAgIG5ld1N0YXRlW3BhdGhdLnJvd3NbaW5kZXhJbkN1cnJlbnRTdGF0ZV0gPSB7XG4gICAgICAgICAgICAgIC4uLmN1cnJlbnRTdGF0ZVtwYXRoXS5yb3dzW2luZGV4SW5DdXJyZW50U3RhdGVdLFxuICAgICAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3cuYWRkZWRCeVNlcnZlcikge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOb3RlOiBUaGlzIGlzIGEga25vd24gbGltaXRhdGlvbiBvZiBjb21wdXRlZCBhcnJheSBhbmQgYmxvY2sgcm93c1xuICAgICAgICAgICAgICogSWYgYSBuZXcgcm93IHdhcyBhZGRlZCBieSB0aGUgc2VydmVyLCB3ZSBhcHBlbmQgaXQgdG8gdGhlIF9lbmRfIG9mIHRoaXMgYXJyYXlcbiAgICAgICAgICAgICAqIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2xpZW50IGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCBpdCBoYXMgYXJyYXlzIG9yZGVyZWQgaW4gYSBjZXJ0YWluIHBvc2l0aW9uXG4gICAgICAgICAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIHVzZXIgbWF5IGhhdmUgcmUtb3JkZXJlZCByb3dzIGNsaWVudC1zaWRlIHdoaWxlIGEgbG9uZyBydW5uaW5nIHJlcXVlc3QgaXMgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IHdlIF9jYW5ub3RfIHNsaWNlIGEgbmV3IHJvdyBpbnRvIHRoZSBzZWNvbmQgcG9zaXRpb24gb24gdGhlIHNlcnZlciwgZm9yIGV4YW1wbGVcbiAgICAgICAgICAgICAqIEJ5IHRoZSB0aW1lIGl0IGdldHMgYmFjayB0byB0aGUgY2xpZW50LCBpdHMgaW5kZXggaXMgc3RhbGVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfVxuICAgICAgICAgICAgZGVsZXRlIG5ld1Jvdy5hZGRlZEJ5U2VydmVyXG4gICAgICAgICAgICBuZXdTdGF0ZVtwYXRoXS5yb3dzLnB1c2gobmV3Um93KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3luYyB0aGUgdmFsdWUgZmllbGQgdG8gbWF0Y2ggdGhlIGFjdHVhbCByb3cgY291bnQgYWZ0ZXIgbWVyZ2luZy5cbiAgICAgICAgICogQ2xpZW50IGlzIHNvdXJjZSBvZiB0cnV0aCBmb3Igcm93IGNvdW50IHdoZW4gcm93cyB3ZXJlIGFkZGVkL3JlbW92ZWQgZHVyaW5nIHRoZSByZXF1ZXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKCd2YWx1ZScgaW4gaW5jb21pbmdGaWVsZCAmJiBuZXdTdGF0ZVtwYXRoXS5yb3dzLmxlbmd0aCAhPT0gaW5jb21pbmdGaWVsZC52YWx1ZSkge1xuICAgICAgICAgIG5ld1N0YXRlW3BhdGhdLnZhbHVlID0gbmV3U3RhdGVbcGF0aF0ucm93cy5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGB2YWxpZGAgaXMgYHVuZGVmaW5lZGAsIG1hcmsgaXQgYXMgYHRydWVgXG4gICAgaWYgKGluY29taW5nRmllbGQudmFsaWQgIT09IGZhbHNlKSB7XG4gICAgICBuZXdTdGF0ZVtwYXRoXS52YWxpZCA9IHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBgcGFzc2VzQ29uZGl0aW9uYCBpcyBgdW5kZWZpbmVkYCwgbWFyayBpdCBhcyBgdHJ1ZWBcbiAgICBpZiAoaW5jb21pbmdGaWVsZC5wYXNzZXNDb25kaXRpb24gIT09IGZhbHNlKSB7XG4gICAgICBuZXdTdGF0ZVtwYXRoXS5wYXNzZXNDb25kaXRpb24gPSB0cnVlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5kZWZpbmVkIHZhbHVlcyBmb3IgYmxvY2tzRmlsdGVyT3B0aW9ucyBjb21pbmcgYmFjayBzaG91bGQgYmUgdHJlYXRlZCBhcyBcImFsbCBibG9ja3MgYWxsb3dlZFwiIGFuZFxuICAgICAqIHNob3VsZCBhbHdheXMgYmUgbWVyZ2VkIGluLlxuICAgICAqIFdpdGhvdXQgdGhpcywgYW4gdW5kZWZpbmVkIHZhbHVlIGNvbWluZyBiYWNrIHdpbGwgaW5jb3JyZWN0bHkgYmUgaWdub3JlZCwgYW5kIHRoZSBwcmV2aW91cyBmaWx0ZXIgd2lsbCByZW1haW4uXG4gICAgICovXG4gICAgaWYgKCFpbmNvbWluZ0ZpZWxkLmJsb2Nrc0ZpbHRlck9wdGlvbnMpIHtcbiAgICAgIGRlbGV0ZSBuZXdTdGF0ZVtwYXRoXS5ibG9ja3NGaWx0ZXJPcHRpb25zXG4gICAgfVxuXG4gICAgLy8gU3RyaXAgYXdheSB0aGUgYGFkZGVkQnlTZXJ2ZXJgIHByb3BlcnR5IGZyb20gdGhlIGNsaWVudFxuICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcGFzc2VkIGJhY2sgdG8gdGhlIHNlcnZlclxuICAgIGRlbGV0ZSBuZXdTdGF0ZVtwYXRoXS5hZGRlZEJ5U2VydmVyXG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIG9iamVjdCByZWZlcmVuY2UgaWYgdGhlIHN0YXRlIGlzIHVuY2hhbmdlZFxuICAvLyBUaGlzIHdpbGwgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVycyBhbmQgZGVwZW5kZW5jeSB1cGRhdGVzXG4gIHJldHVybiBkZXF1YWwobmV3U3RhdGUsIGN1cnJlbnRTdGF0ZSkgPyBjdXJyZW50U3RhdGUgOiBuZXdTdGF0ZVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IEZvcm1TdGF0ZSB9IGZyb20gJ3BheWxvYWQnXG5cbnR5cGUgUmVzdWx0ID0ge1xuICByZW1haW5pbmdGaWVsZHM6IEZvcm1TdGF0ZVxuICByb3dzOiBGb3JtU3RhdGVbXVxufVxuXG5leHBvcnQgY29uc3Qgc2VwYXJhdGVSb3dzID0gKHBhdGg6IHN0cmluZywgZmllbGRzOiBGb3JtU3RhdGUpOiBSZXN1bHQgPT4ge1xuICBjb25zdCByZW1haW5pbmdGaWVsZHM6IEZvcm1TdGF0ZSA9IHt9XG5cbiAgY29uc3Qgcm93cyA9IE9iamVjdC5lbnRyaWVzKGZpZWxkcykucmVkdWNlKChpbmNvbWluZ1Jvd3MsIFtmaWVsZFBhdGgsIGZpZWxkXSkgPT4ge1xuICAgIGNvbnN0IG5ld1Jvd3MgPSBpbmNvbWluZ1Jvd3NcblxuICAgIGlmIChmaWVsZFBhdGguaW5kZXhPZihgJHtwYXRofS5gKSA9PT0gMCkge1xuICAgICAgY29uc3QgW3Jvd0luZGV4XSA9IGZpZWxkUGF0aC5yZXBsYWNlKGAke3BhdGh9LmAsICcnKS5zcGxpdCgnLicpXG4gICAgICBpZiAoIW5ld1Jvd3Nbcm93SW5kZXhdKSB7XG4gICAgICAgIG5ld1Jvd3Nbcm93SW5kZXhdID0ge31cbiAgICAgIH1cbiAgICAgIG5ld1Jvd3Nbcm93SW5kZXhdW2ZpZWxkUGF0aC5yZXBsYWNlKGAke3BhdGh9LiR7U3RyaW5nKHJvd0luZGV4KX0uYCwgJycpXSA9IHsgLi4uZmllbGQgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1haW5pbmdGaWVsZHNbZmllbGRQYXRoXSA9IGZpZWxkXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1Jvd3NcbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICByZW1haW5pbmdGaWVsZHMsXG4gICAgcm93cyxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmxhdHRlblJvd3MgPSAocGF0aDogc3RyaW5nLCByb3dzOiBGb3JtU3RhdGVbXSk6IEZvcm1TdGF0ZSA9PiB7XG4gIHJldHVybiByb3dzLnJlZHVjZShcbiAgICAoZmllbGRzLCByb3csIGkpID0+ICh7XG4gICAgICAuLi5maWVsZHMsXG4gICAgICAuLi5PYmplY3QuZW50cmllcyhyb3cpLnJlZHVjZSgoc3ViRmllbGRzLCBbc3ViUGF0aCwgc3ViRmllbGRdKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3ViRmllbGRzLFxuICAgICAgICAgIFtgJHtwYXRofS4ke2l9LiR7c3ViUGF0aH1gXTogeyAuLi5zdWJGaWVsZCB9LFxuICAgICAgICB9XG4gICAgICB9LCB7fSksXG4gICAgfSksXG4gICAge30sXG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBEYXRhLCBGb3JtRmllbGQsIEZvcm1TdGF0ZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dCxcbiAgQ3JlYXRlRm9ybURhdGEsXG4gIERpc3BhdGNoRmllbGRzLFxuICBHZXRTaWJsaW5nRGF0YSxcbiAgUmVzZXQsXG4gIFNldE1vZGlmaWVkLFxuICBTZXRQcm9jZXNzaW5nLFxuICBTZXRTdWJtaXR0ZWQsXG4gIFN1Ym1pdCxcbiAgVmFsaWRhdGVGb3JtLFxufSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5jb25zdCBzdWJtaXQ6IFN1Ym1pdCA9ICgpID0+IHVuZGVmaW5lZFxuY29uc3QgZ2V0U2libGluZ0RhdGE6IEdldFNpYmxpbmdEYXRhID0gKCkgPT4gdW5kZWZpbmVkXG5jb25zdCBkaXNwYXRjaEZpZWxkczogRGlzcGF0Y2hGaWVsZHMgPSAoKSA9PiB1bmRlZmluZWRcbmNvbnN0IHZhbGlkYXRlRm9ybTogVmFsaWRhdGVGb3JtID0gKCkgPT4gdW5kZWZpbmVkXG5jb25zdCBjcmVhdGVGb3JtRGF0YTogQ3JlYXRlRm9ybURhdGEgPSAoKSA9PiB1bmRlZmluZWRcblxuY29uc3Qgc2V0TW9kaWZpZWQ6IFNldE1vZGlmaWVkID0gKCkgPT4gdW5kZWZpbmVkXG5jb25zdCBzZXRQcm9jZXNzaW5nOiBTZXRQcm9jZXNzaW5nID0gKCkgPT4gdW5kZWZpbmVkXG5jb25zdCBzZXRCYWNrZ3JvdW5kUHJvY2Vzc2luZzogU2V0UHJvY2Vzc2luZyA9ICgpID0+IHVuZGVmaW5lZFxuY29uc3Qgc2V0U3VibWl0dGVkOiBTZXRTdWJtaXR0ZWQgPSAoKSA9PiB1bmRlZmluZWRcbmNvbnN0IHJlc2V0OiBSZXNldCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgaW5pdENvbnRleHRTdGF0ZTogQ29udGV4dCA9IHtcbiAgYWRkRmllbGRSb3c6ICgpID0+IHVuZGVmaW5lZCxcbiAgYnVpbGRSb3dFcnJvcnM6ICgpID0+IHVuZGVmaW5lZCxcbiAgY3JlYXRlRm9ybURhdGEsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGlzcGF0Y2hGaWVsZHMsXG4gIGZpZWxkczoge30sXG4gIGZvcm1SZWY6IG51bGwsXG4gIGdldERhdGE6ICgpOiBEYXRhID0+IHVuZGVmaW5lZCxcbiAgZ2V0RGF0YUJ5UGF0aDogKCkgPT4gdW5kZWZpbmVkLFxuICBnZXRGaWVsZDogKCk6IEZvcm1GaWVsZCA9PiB1bmRlZmluZWQsXG4gIGdldEZpZWxkczogKCk6IEZvcm1TdGF0ZSA9PiAoe30pLFxuICBnZXRTaWJsaW5nRGF0YSxcbiAgaW5pdGlhbGl6aW5nOiB1bmRlZmluZWQsXG4gIGlzVmFsaWQ6IHRydWUsXG4gIG1vdmVGaWVsZFJvdzogKCkgPT4gdW5kZWZpbmVkLFxuICByZW1vdmVGaWVsZFJvdzogKCkgPT4gdW5kZWZpbmVkLFxuICByZXBsYWNlRmllbGRSb3c6ICgpID0+IHVuZGVmaW5lZCxcbiAgcmVwbGFjZVN0YXRlOiAoKSA9PiB1bmRlZmluZWQsXG4gIHJlc2V0LFxuICBzZXRCYWNrZ3JvdW5kUHJvY2Vzc2luZyxcbiAgc2V0RGlzYWJsZWQ6ICgpID0+IHVuZGVmaW5lZCxcbiAgc2V0SXNWYWxpZDogKCkgPT4gdW5kZWZpbmVkLFxuICBzZXRNb2RpZmllZCxcbiAgc2V0UHJvY2Vzc2luZyxcbiAgc2V0U3VibWl0dGVkLFxuICBzdWJtaXQsXG5cbiAgdmFsaWRhdGVGb3JtLFxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50VGFiIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgRXJyb3JQaWxsIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvRXJyb3JQaWxsL2luZGV4LmpzJ1xuaW1wb3J0IHsgV2F0Y2hDaGlsZEVycm9ycyB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL1dhdGNoQ2hpbGRFcnJvcnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAndGFicy1maWVsZF9fdGFiLWJ1dHRvbidcblxudHlwZSBUYWJQcm9wcyA9IHtcbiAgcmVhZG9ubHkgaGlkZGVuPzogYm9vbGVhblxuICByZWFkb25seSBpc0FjdGl2ZT86IGJvb2xlYW5cbiAgcmVhZG9ubHkgcGFyZW50UGF0aDogc3RyaW5nXG4gIHJlYWRvbmx5IHNldElzQWN0aXZlOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHRhYjogQ2xpZW50VGFiXG59XG5cbmV4cG9ydCBjb25zdCBUYWJDb21wb25lbnQ6IFJlYWN0LkZDPFRhYlByb3BzPiA9ICh7XG4gIGhpZGRlbixcbiAgaXNBY3RpdmUsXG4gIHBhcmVudFBhdGgsXG4gIHNldElzQWN0aXZlLFxuICB0YWIsXG59KSA9PiB7XG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBbZXJyb3JDb3VudCwgc2V0RXJyb3JDb3VudF0gPSB1c2VTdGF0ZSh1bmRlZmluZWQpXG5cbiAgY29uc3QgcGF0aCA9IFtcbiAgICAvLyByZW1vdmVzIHBhcmVudCAndGFicycgcGF0aCBzZWdtZW50LCBpLmUuIGBfaW5kZXgtMGBcbiAgICAuLi4ocGFyZW50UGF0aCA/IHBhcmVudFBhdGguc3BsaXQoJy4nKS5zbGljZSgwLCAtMSkgOiBbXSksXG4gICAgLi4uKHRhYkhhc05hbWUodGFiKSA/IFt0YWIubmFtZV0gOiBbXSksXG4gIF1cblxuICBjb25zdCBmaWVsZEhhc0Vycm9ycyA9IGVycm9yQ291bnQgPiAwXG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8V2F0Y2hDaGlsZEVycm9ycyBmaWVsZHM9e3RhYi5maWVsZHN9IHBhdGg9e3BhdGh9IHNldEVycm9yQ291bnQ9e3NldEVycm9yQ291bnR9IC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgICBmaWVsZEhhc0Vycm9ycyAmJiBgJHtiYXNlQ2xhc3N9LS1oYXMtZXJyb3JgLFxuICAgICAgICAgIGlzQWN0aXZlICYmIGAke2Jhc2VDbGFzc30tLWFjdGl2ZWAsXG4gICAgICAgICAgaGlkZGVuICYmIGAke2Jhc2VDbGFzc30tLWhpZGRlbmAsXG4gICAgICAgIF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgb25DbGljaz17c2V0SXNBY3RpdmV9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgPlxuICAgICAgICB7dGFiLmxhYmVsID8gZ2V0VHJhbnNsYXRpb24odGFiLmxhYmVsLCBpMThuKSA6IHRhYkhhc05hbWUodGFiKSA/IHRhYi5uYW1lIDogJyd9XG4gICAgICAgIHtmaWVsZEhhc0Vycm9ycyAmJiA8RXJyb3JQaWxsIGNvdW50PXtlcnJvckNvdW50fSBpMThuPXtpMThufSAvPn1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBUZXh0RmllbGRDbGllbnRDb21wb25lbnQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZWFjdFNlbGVjdC90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgVGV4dElucHV0UHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgd2l0aENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL3dpdGhDb25kaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IG1lcmdlRmllbGRTdHlsZXMgfSBmcm9tICcuLi9tZXJnZUZpZWxkU3R5bGVzLmpzJ1xuaW1wb3J0IHsgaXNGaWVsZFJUTCB9IGZyb20gJy4uL3NoYXJlZC9pbmRleC5qcydcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4vSW5wdXQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHsgVGV4dElucHV0LCBUZXh0SW5wdXRQcm9wcyB9XG5cbmNvbnN0IFRleHRGaWVsZENvbXBvbmVudDogVGV4dEZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZDoge1xuICAgICAgYWRtaW46IHsgYXV0b0NvbXBsZXRlLCBjbGFzc05hbWUsIGRlc2NyaXB0aW9uLCBwbGFjZWhvbGRlciwgcnRsIH0gPSB7fSxcbiAgICAgIGhhc01hbnksXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIG1heFJvd3MsXG4gICAgICBtaW5MZW5ndGgsXG4gICAgICBtaW5Sb3dzLFxuICAgICAgcmVxdWlyZWQsXG4gICAgfSxcbiAgICBpbnB1dFJlZixcbiAgICBwYXRoOiBwYXRoRnJvbVByb3BzLFxuICAgIHJlYWRPbmx5LFxuICAgIHZhbGlkYXRlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBsb2NhbGUgPSB1c2VMb2NhbGUoKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHsgbG9jYWxpemF0aW9uOiBsb2NhbGl6YXRpb25Db25maWcgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgbWVtb2l6ZWRWYWxpZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodmFsdWUsIHsgLi4ub3B0aW9ucywgbWF4TGVuZ3RoLCBtaW5MZW5ndGgsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIG1pbkxlbmd0aCwgbWF4TGVuZ3RoLCByZXF1aXJlZF0sXG4gIClcblxuICBjb25zdCB7XG4gICAgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIEVycm9yLCBMYWJlbCB9ID0ge30sXG4gICAgZGlzYWJsZWQsXG4gICAgcGF0aCxcbiAgICBzZXRWYWx1ZSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsdWUsXG4gIH0gPSB1c2VGaWVsZCh7XG4gICAgcG90ZW50aWFsbHlTdGFsZVBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgdmFsaWRhdGU6IG1lbW9pemVkVmFsaWRhdGUsXG4gIH0pXG5cbiAgY29uc3QgcmVuZGVyUlRMID0gaXNGaWVsZFJUTCh7XG4gICAgZmllbGRMb2NhbGl6ZWQ6IGxvY2FsaXplZCxcbiAgICBmaWVsZFJUTDogcnRsLFxuICAgIGxvY2FsZSxcbiAgICBsb2NhbGl6YXRpb25Db25maWc6IGxvY2FsaXphdGlvbkNvbmZpZyB8fCB1bmRlZmluZWQsXG4gIH0pXG5cbiAgY29uc3QgW3ZhbHVlVG9SZW5kZXIsIHNldFZhbHVlVG9SZW5kZXJdID0gdXNlU3RhdGU8XG4gICAgeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogeyB2YWx1ZTogbnVtYmVyIH0gfVtdXG4gID4oW10pIC8vIE9ubHkgZm9yIGhhc01hbnlcblxuICBjb25zdCBoYW5kbGVIYXNNYW55Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICBpZiAoIShyZWFkT25seSB8fCBkaXNhYmxlZCkpIHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlXG4gICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IFtdXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZE9wdGlvbikpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnZhbHVlIHx8IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IFtzZWxlY3RlZE9wdGlvbi52YWx1ZT8udmFsdWUgfHwgc2VsZWN0ZWRPcHRpb24udmFsdWVdXG4gICAgICAgIH1cblxuICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZWFkT25seSwgc2V0VmFsdWUsIGRpc2FibGVkXSxcbiAgKVxuXG4gIC8vIHVzZUVmZmVjdCB1cGRhdGUgdmFsdWVUb1JlbmRlcjpcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzTWFueSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc2V0VmFsdWVUb1JlbmRlcihcbiAgICAgICAgdmFsdWUubWFwKCh2YWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBgJHt2YWx9JHtpbmRleH1gLCAvLyBhcHBlbmQgaW5kZXggdG8gYXZvaWQgZHVwbGljYXRlIGtleXMgYnV0IGFsbG93IGR1cGxpY2F0ZSBudW1iZXJzXG4gICAgICAgICAgICBsYWJlbDogYCR7dmFsfWAsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAvLyBSZWFjdC1zZWxlY3QgYXV0b21hdGljYWxseSB1c2VzIFwibGFiZWwtdmFsdWVcIiBhcyBhIGtleSwgc28gd2Ugd2lsbCBnZXQgdGhhdCByZWFjdCBkdXBsaWNhdGUga2V5IHdhcm5pbmcgaWYgd2UganVzdCBwYXNzIGluIHRoZSB2YWx1ZSBhcyBtdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIHRoZSBzYW1lLiBTbyB3ZSBuZWVkIHRvIGFwcGVuZCB0aGUgaW5kZXggdG8gdGhlIHRvU3RyaW5nKCkgb2YgdGhlIHZhbHVlIHRvIGF2b2lkIHRoYXQgd2FybmluZywgYXMgaXQgdXNlcyB0aGF0IGFzIHRoZSBrZXkuXG4gICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiBgJHt2YWx9JHtpbmRleH1gLFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsPy52YWx1ZSB8fCB2YWwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfVxuICB9LCBbdmFsdWUsIGhhc01hbnldKVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dElucHV0XG4gICAgICBBZnRlcklucHV0PXtBZnRlcklucHV0fVxuICAgICAgQmVmb3JlSW5wdXQ9e0JlZm9yZUlucHV0fVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBEZXNjcmlwdGlvbj17RGVzY3JpcHRpb259XG4gICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259XG4gICAgICBFcnJvcj17RXJyb3J9XG4gICAgICBoYXNNYW55PXtoYXNNYW55fVxuICAgICAgaHRtbEF0dHJpYnV0ZXM9e3tcbiAgICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUgfHwgdW5kZWZpbmVkLFxuICAgICAgfX1cbiAgICAgIGlucHV0UmVmPXtpbnB1dFJlZn1cbiAgICAgIExhYmVsPXtMYWJlbH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIGxvY2FsaXplZD17bG9jYWxpemVkfVxuICAgICAgbWF4Um93cz17bWF4Um93c31cbiAgICAgIG1pblJvd3M9e21pblJvd3N9XG4gICAgICBvbkNoYW5nZT17XG4gICAgICAgIGhhc01hbnlcbiAgICAgICAgICA/IGhhbmRsZUhhc01hbnlDaGFuZ2VcbiAgICAgICAgICA6IChlKSA9PiB7XG4gICAgICAgICAgICAgIHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGF0aD17cGF0aH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIHJlYWRPbmx5PXtyZWFkT25seSB8fCBkaXNhYmxlZH1cbiAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgIHJ0bD17cmVuZGVyUlRMfVxuICAgICAgc2hvd0Vycm9yPXtzaG93RXJyb3J9XG4gICAgICBzdHlsZT17c3R5bGVzfVxuICAgICAgdmFsdWU9eyh2YWx1ZSBhcyBzdHJpbmcpIHx8ICcnfVxuICAgICAgdmFsdWVUb1JlbmRlcj17dmFsdWVUb1JlbmRlciBhcyBPcHRpb25bXX1cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBUZXh0RmllbGQgPSB3aXRoQ29uZGl0aW9uKFRleHRGaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VFdmVudCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBSZWFjdFNlbGVjdEFkYXB0ZXJQcm9wcyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlYWN0U2VsZWN0L3R5cGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBUZXh0SW5wdXRQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFJlYWN0U2VsZWN0IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVhY3RTZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBUZXh0SW5wdXQ6IFJlYWN0LkZDPFRleHRJbnB1dFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgQWZ0ZXJJbnB1dCxcbiAgICBCZWZvcmVJbnB1dCxcbiAgICBjbGFzc05hbWUsXG4gICAgRGVzY3JpcHRpb24sXG4gICAgZGVzY3JpcHRpb24sXG4gICAgRXJyb3IsXG4gICAgaGFzTWFueSxcbiAgICBodG1sQXR0cmlidXRlcyxcbiAgICBpbnB1dFJlZixcbiAgICBMYWJlbCxcbiAgICBsYWJlbCxcbiAgICBsb2NhbGl6ZWQsXG4gICAgbWF4Um93cyxcbiAgICBvbkNoYW5nZSxcbiAgICBvbktleURvd24sXG4gICAgcGF0aCxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJGcm9tUHJvcHMsXG4gICAgcmVhZE9ubHksXG4gICAgcmVxdWlyZWQsXG4gICAgcnRsLFxuICAgIHNob3dFcnJvcixcbiAgICBzdHlsZSxcbiAgICB2YWx1ZSxcbiAgICB2YWx1ZVRvUmVuZGVyLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBlZGl0YWJsZVByb3BzOiBSZWFjdFNlbGVjdEFkYXB0ZXJQcm9wc1snY3VzdG9tUHJvcHMnXVsnZWRpdGFibGVQcm9wcyddID0gKFxuICAgIGRhdGEsXG4gICAgY2xhc3NOYW1lLFxuICAgIHNlbGVjdFByb3BzLFxuICApID0+IHtcbiAgICBjb25zdCBlZGl0YWJsZUNsYXNzTmFtZSA9IGAke2NsYXNzTmFtZX0tLWVkaXRhYmxlYFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9uQmx1cjogKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSdcbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGVudEVkaXRhYmxlID0gJ3RydWUnXG4gICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmFkZChlZGl0YWJsZUNsYXNzTmFtZSlcbiAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5mb2N1cygpXG4gICAgICB9LFxuICAgICAgb25LZXlEb3duOiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZXZlbnQubmF0aXZlRXZlbnQuaXNDb21wb3NpbmcgJiZcbiAgICAgICAgICAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1RhYicgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnXG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKGVkaXRhYmxlQ2xhc3NOYW1lKVxuICAgICAgICAgIGRhdGEudmFsdWUudmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LmlubmVyVGV4dFxuICAgICAgICAgIGRhdGEubGFiZWwgPSBldmVudC5jdXJyZW50VGFyZ2V0LmlubmVyVGV4dFxuXG4gICAgICAgICAgaWYgKGRhdGEudmFsdWUudmFsdWUucmVwbGFjZUFsbCgnXFxuJywgJycpKSB7XG4gICAgICAgICAgICBzZWxlY3RQcm9wcy5vbkNoYW5nZShzZWxlY3RQcm9wcy52YWx1ZSwge1xuICAgICAgICAgICAgICBhY3Rpb246ICdjcmVhdGUtb3B0aW9uJyxcbiAgICAgICAgICAgICAgb3B0aW9uOiBkYXRhLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0UHJvcHMudmFsdWUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IHNlbGVjdFByb3BzLnZhbHVlLmZpbHRlcigodikgPT4gdi5pZCAhPT0gZGF0YS5pZClcbiAgICAgICAgICAgICAgc2VsZWN0UHJvcHMub25DaGFuZ2UobmV3VmFsdWVzLCB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncG9wLXZhbHVlJyxcbiAgICAgICAgICAgICAgICByZW1vdmVkVmFsdWU6IGRhdGEsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gZ2V0VHJhbnNsYXRpb24ocGxhY2Vob2xkZXJGcm9tUHJvcHMsIGkxOG4pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgZmllbGRCYXNlQ2xhc3MsXG4gICAgICAgICd0ZXh0JyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBzaG93RXJyb3IgJiYgJ2Vycm9yJyxcbiAgICAgICAgcmVhZE9ubHkgJiYgJ3JlYWQtb25seScsXG4gICAgICAgIGhhc01hbnkgJiYgJ2hhcy1tYW55JyxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgID5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtMYWJlbH1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIDxGaWVsZExhYmVsIGxhYmVsPXtsYWJlbH0gbG9jYWxpemVkPXtsb2NhbGl6ZWR9IHBhdGg9e3BhdGh9IHJlcXVpcmVkPXtyZXF1aXJlZH0gLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtmaWVsZEJhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICB7aGFzTWFueSA/IChcbiAgICAgICAgICA8UmVhY3RTZWxlY3RcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGZpZWxkLSR7cGF0aC5yZXBsYWNlKC9cXC4vZywgJ19fJyl9YH1cbiAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgRHJvcGRvd25JbmRpY2F0b3I6IG51bGwgfX1cbiAgICAgICAgICAgIGN1c3RvbVByb3BzPXt7XG4gICAgICAgICAgICAgIGVkaXRhYmxlUHJvcHMsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5fVxuICAgICAgICAgICAgLy8gcHJldmVudCBhZGRpbmcgYWRkaXRpb25hbCBvcHRpb25zIGlmIG1heFJvd3MgaXMgcmVhY2hlZFxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXsoKSA9PlxuICAgICAgICAgICAgICAhbWF4Um93cyA/IHRydWUgOiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIG1heFJvd3MgJiYgdmFsdWUubGVuZ3RoID49IG1heFJvd3MpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0NsZWFyYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBpc0NyZWF0YWJsZVxuICAgICAgICAgICAgaXNNdWx0aVxuICAgICAgICAgICAgaXNTb3J0YWJsZVxuICAgICAgICAgICAgbWVudUlzT3Blbj17ZmFsc2V9XG4gICAgICAgICAgICBub09wdGlvbnNNZXNzYWdlPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzT3Zlckhhc01hbnkgPSBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPj0gbWF4Um93c1xuICAgICAgICAgICAgICBpZiAoaXNPdmVySGFzTWFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmxpbWl0UmVhY2hlZCcsIHsgbWF4OiBtYXhSb3dzLCB2YWx1ZTogdmFsdWUubGVuZ3RoICsgMSB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBzaG93RXJyb3I9e3Nob3dFcnJvcn1cbiAgICAgICAgICAgIHZhbHVlPXt2YWx1ZVRvUmVuZGVyfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBkYXRhLXJ0bD17cnRsfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5fVxuICAgICAgICAgICAgaWQ9e2BmaWVsZC0ke3BhdGg/LnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfVxuICAgICAgICAgICAgbmFtZT17cGF0aH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZSBhcyAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWR9XG4gICAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgICB7Li4uKGh0bWxBdHRyaWJ1dGVzID8/IHt9KX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7QWZ0ZXJJbnB1dH1cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RGVzY3JpcHRpb259XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gcGF0aD17cGF0aH0gLz59XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFRleHRhcmVhRmllbGRDbGllbnRDb21wb25lbnQsIFRleHRhcmVhRmllbGRWYWxpZGF0aW9uIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBUZXh0QXJlYUlucHV0UHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgd2l0aENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL3dpdGhDb25kaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IGlzRmllbGRSVEwgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXguanMnXG5pbXBvcnQgeyBUZXh0YXJlYUlucHV0IH0gZnJvbSAnLi9JbnB1dC5qcydcblxuZXhwb3J0IHsgVGV4dGFyZWFJbnB1dCwgVGV4dEFyZWFJbnB1dFByb3BzIH1cblxuY29uc3QgVGV4dGFyZWFGaWVsZENvbXBvbmVudDogVGV4dGFyZWFGaWVsZENsaWVudENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGQ6IHtcbiAgICAgIGFkbWluOiB7IGNsYXNzTmFtZSwgZGVzY3JpcHRpb24sIHBsYWNlaG9sZGVyLCByb3dzLCBydGwgfSA9IHt9LFxuICAgICAgbGFiZWwsXG4gICAgICBsb2NhbGl6ZWQsXG4gICAgICBtYXhMZW5ndGgsXG4gICAgICBtaW5MZW5ndGgsXG4gICAgICByZXF1aXJlZCxcbiAgICB9LFxuICAgIHBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgcmVhZE9ubHksXG4gICAgdmFsaWRhdGUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHsgbG9jYWxpemF0aW9uIH0sXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IGxvY2FsZSA9IHVzZUxvY2FsZSgpXG5cbiAgY29uc3QgaXNSVEwgPSBpc0ZpZWxkUlRMKHtcbiAgICBmaWVsZExvY2FsaXplZDogbG9jYWxpemVkLFxuICAgIGZpZWxkUlRMOiBydGwsXG4gICAgbG9jYWxlLFxuICAgIGxvY2FsaXphdGlvbkNvbmZpZzogbG9jYWxpemF0aW9uIHx8IHVuZGVmaW5lZCxcbiAgfSlcblxuICBjb25zdCBtZW1vaXplZFZhbGlkYXRlOiBUZXh0YXJlYUZpZWxkVmFsaWRhdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodmFsdWUsIHsgLi4ub3B0aW9ucywgbWF4TGVuZ3RoLCBtaW5MZW5ndGgsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkLCBtYXhMZW5ndGgsIG1pbkxlbmd0aF0sXG4gIClcblxuICBjb25zdCB7XG4gICAgY3VzdG9tQ29tcG9uZW50czogeyBBZnRlcklucHV0LCBCZWZvcmVJbnB1dCwgRGVzY3JpcHRpb24sIEVycm9yLCBMYWJlbCB9ID0ge30sXG4gICAgZGlzYWJsZWQsXG4gICAgcGF0aCxcbiAgICBzZXRWYWx1ZSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsdWUsXG4gIH0gPSB1c2VGaWVsZDxzdHJpbmc+KHtcbiAgICBwb3RlbnRpYWxseVN0YWxlUGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBzdHlsZXMgPSB1c2VNZW1vKCgpID0+IG1lcmdlRmllbGRTdHlsZXMoZmllbGQpLCBbZmllbGRdKVxuXG4gIHJldHVybiAoXG4gICAgPFRleHRhcmVhSW5wdXRcbiAgICAgIEFmdGVySW5wdXQ9e0FmdGVySW5wdXR9XG4gICAgICBCZWZvcmVJbnB1dD17QmVmb3JlSW5wdXR9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIERlc2NyaXB0aW9uPXtEZXNjcmlwdGlvbn1cbiAgICAgIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn1cbiAgICAgIEVycm9yPXtFcnJvcn1cbiAgICAgIExhYmVsPXtMYWJlbH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIGxvY2FsaXplZD17bG9jYWxpemVkfVxuICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgIHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgfX1cbiAgICAgIHBhdGg9e3BhdGh9XG4gICAgICBwbGFjZWhvbGRlcj17Z2V0VHJhbnNsYXRpb24ocGxhY2Vob2xkZXIsIGkxOG4pfVxuICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5IHx8IGRpc2FibGVkfVxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgcm93cz17cm93c31cbiAgICAgIHJ0bD17aXNSVEx9XG4gICAgICBzaG93RXJyb3I9e3Nob3dFcnJvcn1cbiAgICAgIHN0eWxlPXtzdHlsZXN9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgVGV4dGFyZWFGaWVsZCA9IHdpdGhDb25kaXRpb24oVGV4dGFyZWFGaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFRleHRBcmVhSW5wdXRQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRpb24gfSBmcm9tICcuLi8uLi9maWVsZHMvRmllbGREZXNjcmlwdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkRXJyb3IgfSBmcm9tICcuLi8uLi9maWVsZHMvRmllbGRFcnJvci9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi9maWVsZHMvRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IFRleHRhcmVhSW5wdXQ6IFJlYWN0LkZDPFRleHRBcmVhSW5wdXRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIEFmdGVySW5wdXQsXG4gICAgQmVmb3JlSW5wdXQsXG4gICAgY2xhc3NOYW1lLFxuICAgIERlc2NyaXB0aW9uLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIEVycm9yLFxuICAgIExhYmVsLFxuICAgIGxhYmVsLFxuICAgIGxvY2FsaXplZCxcbiAgICBvbkNoYW5nZSxcbiAgICBwYXRoLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHJlYWRPbmx5LFxuICAgIHJlcXVpcmVkLFxuICAgIHJvd3MsXG4gICAgcnRsLFxuICAgIHNob3dFcnJvcixcbiAgICBzdHlsZSxcbiAgICB2YWx1ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgZmllbGRCYXNlQ2xhc3MsXG4gICAgICAgICd0ZXh0YXJlYScsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc2hvd0Vycm9yICYmICdlcnJvcicsXG4gICAgICAgIHJlYWRPbmx5ICYmICdyZWFkLW9ubHknLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0xhYmVsfVxuICAgICAgICBGYWxsYmFjaz17XG4gICAgICAgICAgPEZpZWxkTGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9e2BmaWVsZC0ke3BhdGgucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICBsb2NhbGl6ZWQ9e2xvY2FsaXplZH1cbiAgICAgICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtmaWVsZEJhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHRhcmVhLW91dGVyXCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBkYXRhLXJ0bD17cnRsfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5fVxuICAgICAgICAgICAgaWQ9e2BmaWVsZC0ke3BhdGgucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICAgICAgICBuYW1lPXtwYXRofVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldFRyYW5zbGF0aW9uKHBsYWNlaG9sZGVyLCBpMThuKX1cbiAgICAgICAgICAgIHJvd3M9e3Jvd3N9XG4gICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnLS1yb3dzJzogcm93cyxcbiAgICAgICAgICAgICAgfSBhcyBDU1NQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtBZnRlcklucHV0fVxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkRGVzY3JpcHRpb24gZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBwYXRoPXtwYXRofSAvPn1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgVUlGaWVsZDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBVcGxvYWRGaWVsZENsaWVudFByb3BzLCBWYWx1ZVdpdGhSZWxhdGlvbiB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEJ1bGtVcGxvYWRQcm92aWRlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0J1bGtVcGxvYWQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgd2l0aENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL3dpdGhDb25kaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uL21lcmdlRmllbGRTdHlsZXMuanMnXG5pbXBvcnQgeyBVcGxvYWRJbnB1dCB9IGZyb20gJy4vSW5wdXQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHsgVXBsb2FkSW5wdXQgfSBmcm9tICcuL0lucHV0LmpzJ1xuZXhwb3J0IHR5cGUgeyBVcGxvYWRJbnB1dFByb3BzIH0gZnJvbSAnLi9JbnB1dC5qcydcblxuZXhwb3J0IGNvbnN0IGJhc2VDbGFzcyA9ICd1cGxvYWQnXG5cbmV4cG9ydCBmdW5jdGlvbiBVcGxvYWRDb21wb25lbnQocHJvcHM6IFVwbG9hZEZpZWxkQ2xpZW50UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkOiB7XG4gICAgICBhZG1pbjogeyBhbGxvd0NyZWF0ZSwgY2xhc3NOYW1lLCBkZXNjcmlwdGlvbiwgaXNTb3J0YWJsZSB9ID0ge30sXG4gICAgICBoYXNNYW55LFxuICAgICAgbGFiZWwsXG4gICAgICBsb2NhbGl6ZWQsXG4gICAgICBtYXhSb3dzLFxuICAgICAgcmVsYXRpb25UbzogcmVsYXRpb25Ub0Zyb21Qcm9wcyxcbiAgICAgIHJlcXVpcmVkLFxuICAgIH0sXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICB2YWxpZGF0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgZGlzcGxheVByZXZpZXcgPSBmaWVsZC5kaXNwbGF5UHJldmlld1xuXG4gIGNvbnN0IG1lbW9pemVkVmFsaWRhdGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIHJlcXVpcmVkXSxcbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBjdXN0b21Db21wb25lbnRzOiB7IEFmdGVySW5wdXQsIEJlZm9yZUlucHV0LCBEZXNjcmlwdGlvbiwgRXJyb3IsIExhYmVsIH0gPSB7fSxcbiAgICBkaXNhYmxlZCxcbiAgICBmaWx0ZXJPcHRpb25zLFxuICAgIHBhdGgsXG4gICAgc2V0VmFsdWUsXG4gICAgc2hvd0Vycm9yLFxuICAgIHZhbHVlLFxuICB9ID0gdXNlRmllbGQ8c3RyaW5nIHwgc3RyaW5nW10+KHtcbiAgICBwb3RlbnRpYWxseVN0YWxlUGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBpc1BvbHltb3JwaGljID0gQXJyYXkuaXNBcnJheShyZWxhdGlvblRvRnJvbVByb3BzKVxuXG4gIGNvbnN0IG1lbW9pemVkVmFsdWU6XG4gICAgfCAobnVtYmVyIHwgc3RyaW5nKVtdXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgVmFsdWVXaXRoUmVsYXRpb25cbiAgICB8IFZhbHVlV2l0aFJlbGF0aW9uW10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGFzTWFueSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcCgodmFsKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpc1BvbHltb3JwaGljXG4gICAgICAgICAgICAgICAgPyB2YWxcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogQXJyYXkuaXNBcnJheShyZWxhdGlvblRvRnJvbVByb3BzKVxuICAgICAgICAgICAgICAgICAgICAgID8gcmVsYXRpb25Ub0Zyb21Qcm9wc1swXVxuICAgICAgICAgICAgICAgICAgICAgIDogcmVsYXRpb25Ub0Zyb21Qcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgKSBhcyBWYWx1ZVdpdGhSZWxhdGlvbltdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZhbHVlIGNvbWVzIGluIGFzIHN0cmluZyB3aGVuIG5vdCBwb2x5bW9ycGhpYyBhbmQgd2l0aCB0aGUgb2JqZWN0IHdpdGggdGhlIHJpZ2h0IHJlbGF0aW9uVG8gd2hlbiBpdCBpcyBwb2x5bW9ycGhpY1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICB9LCBbaGFzTWFueSwgdmFsdWUsIGlzUG9seW1vcnBoaWMsIHJlbGF0aW9uVG9Gcm9tUHJvcHNdKVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8QnVsa1VwbG9hZFByb3ZpZGVyIGRyYXdlclNsdWdQcmVmaXg9e3BhdGhGcm9tUHJvcHN9PlxuICAgICAgPFVwbG9hZElucHV0XG4gICAgICAgIEFmdGVySW5wdXQ9e0FmdGVySW5wdXR9XG4gICAgICAgIGFsbG93Q3JlYXRlPXthbGxvd0NyZWF0ZSAhPT0gZmFsc2V9XG4gICAgICAgIGFwaT17Y29uZmlnLnJvdXRlcy5hcGl9XG4gICAgICAgIEJlZm9yZUlucHV0PXtCZWZvcmVJbnB1dH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIERlc2NyaXB0aW9uPXtEZXNjcmlwdGlvbn1cbiAgICAgICAgZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufVxuICAgICAgICBkaXNwbGF5UHJldmlldz17ZGlzcGxheVByZXZpZXd9XG4gICAgICAgIEVycm9yPXtFcnJvcn1cbiAgICAgICAgZmlsdGVyT3B0aW9ucz17ZmlsdGVyT3B0aW9uc31cbiAgICAgICAgaGFzTWFueT17aGFzTWFueX1cbiAgICAgICAgaXNTb3J0YWJsZT17aXNTb3J0YWJsZX1cbiAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICBMYWJlbD17TGFiZWx9XG4gICAgICAgIGxvY2FsaXplZD17bG9jYWxpemVkfVxuICAgICAgICBtYXhSb3dzPXttYXhSb3dzfVxuICAgICAgICBvbkNoYW5nZT17c2V0VmFsdWV9XG4gICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgIHJlYWRPbmx5PXtyZWFkT25seSB8fCBkaXNhYmxlZH1cbiAgICAgICAgcmVsYXRpb25Ubz17cmVsYXRpb25Ub0Zyb21Qcm9wc31cbiAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICBzZXJ2ZXJVUkw9e2NvbmZpZy5zZXJ2ZXJVUkx9XG4gICAgICAgIHNob3dFcnJvcj17c2hvd0Vycm9yfVxuICAgICAgICBzdHlsZT17c3R5bGVzfVxuICAgICAgICB2YWx1ZT17bWVtb2l6ZWRWYWx1ZX1cbiAgICAgIC8+XG4gICAgPC9CdWxrVXBsb2FkUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFVwbG9hZEZpZWxkID0gd2l0aENvbmRpdGlvbihVcGxvYWRDb21wb25lbnQpXG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uU2x1ZywgSnNvbk9iamVjdCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgdmFsaWRhdGVNaW1lVHlwZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB7IHVzZUVmZmVjdEV2ZW50IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRWZmZWN0RXZlbnQuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgRWRpdERlcHRoUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRWRpdERlcHRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBVcGxvYWRDb250cm9sc1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1VwbG9hZENvbnRyb2xzL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyLCB1c2VEcmF3ZXJEZXB0aCB9IGZyb20gJy4uL0RyYXdlci9pbmRleC5qcydcbmltcG9ydCB7IEFkZEZpbGVzVmlldyB9IGZyb20gJy4vQWRkRmlsZXNWaWV3L2luZGV4LmpzJ1xuaW1wb3J0IHsgQWRkaW5nRmlsZXNWaWV3IH0gZnJvbSAnLi9BZGRpbmdGaWxlc1ZpZXcvaW5kZXguanMnXG5pbXBvcnQgeyBGb3Jtc01hbmFnZXJQcm92aWRlciwgdHlwZSBJbml0aWFsRm9ybXMsIHVzZUZvcm1zTWFuYWdlciB9IGZyb20gJy4vRm9ybXNNYW5hZ2VyL2luZGV4LmpzJ1xuXG5jb25zdCBkcmF3ZXJTbHVnID0gJ2J1bGstdXBsb2FkLWRyYXdlci1zbHVnJ1xuXG5mdW5jdGlvbiBEcmF3ZXJDb250ZW50KCkge1xuICBjb25zdCB7IGFkZEZpbGVzLCBmb3JtcywgaXNJbml0aWFsaXppbmcgfSA9IHVzZUZvcm1zTWFuYWdlcigpXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IGNvbGxlY3Rpb25TbHVnLCBkcmF3ZXJTbHVnIH0gPSB1c2VCdWxrVXBsb2FkKClcbiAgY29uc3QgeyBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHVwbG9hZENvbGxlY3Rpb24gPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuICBjb25zdCB1cGxvYWRDb25maWcgPSB1cGxvYWRDb2xsZWN0aW9uPy51cGxvYWRcbiAgY29uc3QgdXBsb2FkTWltZVR5cGVzID0gdXBsb2FkQ29uZmlnPy5taW1lVHlwZXNcblxuICBjb25zdCBvbkRyb3AgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoYWNjZXB0ZWRGaWxlczogRmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVUcmFuc2ZlciA9IG5ldyBEYXRhVHJhbnNmZXIoKVxuICAgICAgZm9yIChjb25zdCBjYW5kaWRhdGVGaWxlIG9mIGFjY2VwdGVkRmlsZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHVwbG9hZE1pbWVUeXBlcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgdXBsb2FkTWltZVR5cGVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIHZhbGlkYXRlTWltZVR5cGUoY2FuZGlkYXRlRmlsZS50eXBlLCB1cGxvYWRNaW1lVHlwZXMpXG4gICAgICAgICkge1xuICAgICAgICAgIGZpbGVUcmFuc2Zlci5pdGVtcy5hZGQoY2FuZGlkYXRlRmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZpbGVUcmFuc2Zlci5maWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6aW52YWxpZEZpbGVUeXBlJykpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2b2lkIGFkZEZpbGVzKGZpbGVUcmFuc2Zlci5maWxlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRGaWxlcywgdCwgdXBsb2FkTWltZVR5cGVzXSxcbiAgKVxuXG4gIGlmICghY29sbGVjdGlvblNsdWcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaWYgKCFmb3Jtcy5sZW5ndGggJiYgIWlzSW5pdGlhbGl6aW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxBZGRGaWxlc1ZpZXdcbiAgICAgICAgYWNjZXB0TWltZVR5cGVzPXt1cGxvYWRNaW1lVHlwZXM/LmpvaW4oJywgJyl9XG4gICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBjbG9zZU1vZGFsKGRyYXdlclNsdWcpfVxuICAgICAgICBvbkRyb3A9e29uRHJvcH1cbiAgICAgIC8+XG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiA8QWRkaW5nRmlsZXNWaWV3IC8+XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQnVsa1VwbG9hZFByb3BzID0ge1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCdWxrVXBsb2FkRHJhd2VyKCkge1xuICBjb25zdCB7XG4gICAgZHJhd2VyU2x1ZyxcbiAgICBvbkNhbmNlbCxcbiAgICBzZXRJbml0aWFsRmlsZXMsXG4gICAgc2V0SW5pdGlhbEZvcm1zLFxuICAgIHNldE9uQ2FuY2VsLFxuICAgIHNldE9uU3VjY2VzcyxcbiAgICBzZXRTZWxlY3RhYmxlQ29sbGVjdGlvbnMsXG4gICAgc2V0U3VjY2Vzc2Z1bGx5VXBsb2FkZWQsXG4gICAgc3VjY2Vzc2Z1bGx5VXBsb2FkZWQsXG4gIH0gPSB1c2VCdWxrVXBsb2FkKClcbiAgY29uc3QgeyBtb2RhbFN0YXRlIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHByZXZpb3VzTW9kYWxTdGF0ZVJlZiA9IFJlYWN0LnVzZVJlZihtb2RhbFN0YXRlKVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gdHJpZ2dlciBvbkNhbmNlbCB3aGVuIHRoZSBkcmF3ZXIgaXMgY2xvc2VkICg9PiBmb3JtcyByZXNldCwgYXMgRm9ybXNNYW5hZ2VyIGlzIHVubW91bnRlZClcbiAgICovXG4gIGNvbnN0IG9uTW9kYWxTdGF0ZUNoYW5nZWQgPSB1c2VFZmZlY3RFdmVudCgobW9kYWxTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzTW9kYWxTdGF0ZSA9IHByZXZpb3VzTW9kYWxTdGF0ZVJlZi5jdXJyZW50W2RyYXdlclNsdWddXG4gICAgY29uc3QgY3VycmVudE1vZGFsU3RhdGUgPSBtb2RhbFN0YXRlW2RyYXdlclNsdWddXG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRNb2RhbFN0YXRlID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJldmlvdXNNb2RhbFN0YXRlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzTW9kYWxTdGF0ZT8uaXNPcGVuICE9PSBjdXJyZW50TW9kYWxTdGF0ZT8uaXNPcGVuKSB7XG4gICAgICBpZiAoIWN1cnJlbnRNb2RhbFN0YXRlPy5pc09wZW4pIHtcbiAgICAgICAgaWYgKCFzdWNjZXNzZnVsbHlVcGxvYWRlZCkge1xuICAgICAgICAgIC8vIEl0J3Mgb25seSBjYW5jZWxsZWQgaWYgc3VjY2Vzc2Z1bGx5VXBsb2FkZWQgaXMgbm90IHNldC4gT3RoZXJ3aXNlLCB0aGlzIHdvdWxkIHNpbXBseSBiZSBhIG1vZGFsIGNsb3NlIGFmdGVyIHN1Y2Nlc3NcbiAgICAgICAgICAvLyA9PiBkbyBub3QgY2FsbCBjYW5jZWwsIGp1c3QgcmVzZXQgZXZlcnl0aGluZ1xuICAgICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uQ2FuY2VsKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNldCBldmVyeXRoaW5nIHRvIGRlZmF1bHRzXG4gICAgICAgIHNldEluaXRpYWxGaWxlcyh1bmRlZmluZWQpXG4gICAgICAgIHNldEluaXRpYWxGb3Jtcyh1bmRlZmluZWQpXG4gICAgICAgIHNldE9uQ2FuY2VsKCgpID0+ICgpID0+IG51bGwpXG4gICAgICAgIHNldE9uU3VjY2VzcygoKSA9PiAoKSA9PiBudWxsKVxuICAgICAgICBzZXRTZWxlY3RhYmxlQ29sbGVjdGlvbnMobnVsbClcbiAgICAgICAgc2V0U3VjY2Vzc2Z1bGx5VXBsb2FkZWQoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzTW9kYWxTdGF0ZVJlZi5jdXJyZW50ID0gbW9kYWxTdGF0ZVxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25Nb2RhbFN0YXRlQ2hhbmdlZChtb2RhbFN0YXRlKVxuICB9LCBbbW9kYWxTdGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8RHJhd2VyIGd1dHRlcj17ZmFsc2V9IEhlYWRlcj17bnVsbH0gc2x1Zz17ZHJhd2VyU2x1Z30+XG4gICAgICA8Rm9ybXNNYW5hZ2VyUHJvdmlkZXI+XG4gICAgICAgIDxVcGxvYWRDb250cm9sc1Byb3ZpZGVyPlxuICAgICAgICAgIDxFZGl0RGVwdGhQcm92aWRlcj5cbiAgICAgICAgICAgIDxEcmF3ZXJDb250ZW50IC8+XG4gICAgICAgICAgPC9FZGl0RGVwdGhQcm92aWRlcj5cbiAgICAgICAgPC9VcGxvYWRDb250cm9sc1Byb3ZpZGVyPlxuICAgICAgPC9Gb3Jtc01hbmFnZXJQcm92aWRlcj5cbiAgICA8L0RyYXdlcj5cbiAgKVxufVxuXG5leHBvcnQgdHlwZSBCdWxrVXBsb2FkQ29udGV4dCA9IHtcbiAgY29sbGVjdGlvblNsdWc6IENvbGxlY3Rpb25TbHVnXG4gIGRyYXdlclNsdWc6IHN0cmluZ1xuICBpbml0aWFsRmlsZXM6IEZpbGVMaXN0XG4gIC8qKlxuICAgKiBMaWtlIGluaXRpYWxGaWxlcywgYnV0IGFsbG93cyBtYW51YWxseSBwcm92aWRpbmcgaW5pdGlhbCBmb3JtIHN0YXRlIG9yIHRoZSBmb3JtIElEIGZvciBlYWNoIGZpbGVcbiAgICovXG4gIGluaXRpYWxGb3JtczogSW5pdGlhbEZvcm1zXG4gIG1heEZpbGVzOiBudW1iZXJcbiAgb25DYW5jZWw6ICgpID0+IHZvaWRcbiAgb25TdWNjZXNzOiAoXG4gICAgdXBsb2FkZWRGb3JtczogQXJyYXk8e1xuICAgICAgY29sbGVjdGlvblNsdWc6IENvbGxlY3Rpb25TbHVnXG4gICAgICBkb2M6IEpzb25PYmplY3RcbiAgICAgIC8qKlxuICAgICAgICogSUQgb2YgdGhlIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgZG9jdW1lbnRcbiAgICAgICAqL1xuICAgICAgZm9ybUlEOiBzdHJpbmdcbiAgICB9PixcbiAgICBlcnJvckNvdW50OiBudW1iZXIsXG4gICkgPT4gdm9pZFxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgY29sbGVjdGlvbiBzbHVncyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiB0aGUgY29sbGVjdGlvbiBkcm9wZG93biAoaWYgYXBwbGljYWJsZSlcbiAgICogQGRlZmF1bHQgbnVsbCAtIGNvbGxlY3Rpb24gY2Fubm90IGJlIHNlbGVjdGVkXG4gICAqL1xuICBzZWxlY3RhYmxlQ29sbGVjdGlvbnM/OiBudWxsIHwgc3RyaW5nW11cbiAgc2V0Q29sbGVjdGlvblNsdWc6IChzbHVnOiBzdHJpbmcpID0+IHZvaWRcbiAgc2V0SW5pdGlhbEZpbGVzOiAoZmlsZXM6IEZpbGVMaXN0KSA9PiB2b2lkXG4gIHNldEluaXRpYWxGb3JtczogKFxuICAgIGZvcm1zOiAoKGZvcm1zOiBJbml0aWFsRm9ybXMgfCB1bmRlZmluZWQpID0+IEluaXRpYWxGb3JtcyB8IHVuZGVmaW5lZCkgfCBJbml0aWFsRm9ybXMsXG4gICkgPT4gdm9pZFxuICBzZXRNYXhGaWxlczogKG1heEZpbGVzOiBudW1iZXIpID0+IHZvaWRcbiAgc2V0T25DYW5jZWw6IChvbkNhbmNlbDogQnVsa1VwbG9hZENvbnRleHRbJ29uQ2FuY2VsJ10pID0+IHZvaWRcbiAgc2V0T25TdWNjZXNzOiAob25TdWNjZXNzOiBCdWxrVXBsb2FkQ29udGV4dFsnb25TdWNjZXNzJ10pID0+IHZvaWRcbiAgLyoqXG4gICAqIFNldCB0aGUgY29sbGVjdGlvbnMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIGNvbGxlY3Rpb24gZHJvcGRvd24gKGlmIGFwcGxpY2FibGUpXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGwgLSBjb2xsZWN0aW9uIGNhbm5vdCBiZSBzZWxlY3RlZFxuICAgKi9cbiAgc2V0U2VsZWN0YWJsZUNvbGxlY3Rpb25zOiAoY29sbGVjdGlvbnM6IG51bGwgfCBzdHJpbmdbXSkgPT4gdm9pZFxuICBzZXRTdWNjZXNzZnVsbHlVcGxvYWRlZDogKHN1Y2Nlc3NmdWxseVVwbG9hZGVkOiBib29sZWFuKSA9PiB2b2lkXG4gIHN1Y2Nlc3NmdWxseVVwbG9hZGVkOiBib29sZWFuXG59XG5cbmNvbnN0IENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEJ1bGtVcGxvYWRDb250ZXh0Pih7XG4gIGNvbGxlY3Rpb25TbHVnOiAnJyxcbiAgZHJhd2VyU2x1ZzogJycsXG4gIGluaXRpYWxGaWxlczogdW5kZWZpbmVkLFxuICBpbml0aWFsRm9ybXM6IFtdLFxuICBtYXhGaWxlczogdW5kZWZpbmVkLFxuICBvbkNhbmNlbDogKCkgPT4gbnVsbCxcbiAgb25TdWNjZXNzOiAoKSA9PiBudWxsLFxuICBzZWxlY3RhYmxlQ29sbGVjdGlvbnM6IG51bGwsXG4gIHNldENvbGxlY3Rpb25TbHVnOiAoKSA9PiBudWxsLFxuICBzZXRJbml0aWFsRmlsZXM6ICgpID0+IG51bGwsXG4gIHNldEluaXRpYWxGb3JtczogKCkgPT4gbnVsbCxcbiAgc2V0TWF4RmlsZXM6ICgpID0+IG51bGwsXG4gIHNldE9uQ2FuY2VsOiAoKSA9PiBudWxsLFxuICBzZXRPblN1Y2Nlc3M6ICgpID0+IG51bGwsXG4gIHNldFNlbGVjdGFibGVDb2xsZWN0aW9uczogKCkgPT4gbnVsbCxcbiAgc2V0U3VjY2Vzc2Z1bGx5VXBsb2FkZWQ6ICgpID0+IGZhbHNlLFxuICBzdWNjZXNzZnVsbHlVcGxvYWRlZDogZmFsc2UsXG59KVxuZXhwb3J0IGZ1bmN0aW9uIEJ1bGtVcGxvYWRQcm92aWRlcih7XG4gIGNoaWxkcmVuLFxuICBkcmF3ZXJTbHVnUHJlZml4LFxufToge1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGRyYXdlclNsdWdQcmVmaXg/OiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGFibGVDb2xsZWN0aW9ucywgc2V0U2VsZWN0YWJsZUNvbGxlY3Rpb25zXSA9IFJlYWN0LnVzZVN0YXRlPG51bGwgfCBzdHJpbmdbXT4obnVsbClcbiAgY29uc3QgW2NvbGxlY3Rpb24sIHNldENvbGxlY3Rpb25dID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nPigpXG4gIGNvbnN0IFtvblN1Y2Nlc3NGdW5jdGlvbiwgc2V0T25TdWNjZXNzRnVuY3Rpb25dID0gUmVhY3QudXNlU3RhdGU8QnVsa1VwbG9hZENvbnRleHRbJ29uU3VjY2VzcyddPigpXG4gIGNvbnN0IFtvbkNhbmNlbEZ1bmN0aW9uLCBzZXRPbkNhbmNlbEZ1bmN0aW9uXSA9IFJlYWN0LnVzZVN0YXRlPEJ1bGtVcGxvYWRDb250ZXh0WydvbkNhbmNlbCddPigpXG4gIGNvbnN0IFtpbml0aWFsRmlsZXMsIHNldEluaXRpYWxGaWxlc10gPSBSZWFjdC51c2VTdGF0ZTxGaWxlTGlzdD4odW5kZWZpbmVkKVxuICBjb25zdCBbaW5pdGlhbEZvcm1zLCBzZXRJbml0aWFsRm9ybXNdID0gUmVhY3QudXNlU3RhdGU8SW5pdGlhbEZvcm1zPih1bmRlZmluZWQpXG4gIGNvbnN0IFttYXhGaWxlcywgc2V0TWF4RmlsZXNdID0gUmVhY3QudXNlU3RhdGU8bnVtYmVyPih1bmRlZmluZWQpXG4gIGNvbnN0IFtzdWNjZXNzZnVsbHlVcGxvYWRlZCwgc2V0U3VjY2Vzc2Z1bGx5VXBsb2FkZWRdID0gUmVhY3QudXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpXG5cbiAgY29uc3QgZHJhd2VyU2x1ZyA9IGAke2RyYXdlclNsdWdQcmVmaXggPyBgJHtkcmF3ZXJTbHVnUHJlZml4fS1gIDogJyd9JHt1c2VCdWxrVXBsb2FkRHJhd2VyU2x1ZygpfWBcblxuICBjb25zdCBzZXRPblN1Y2Nlc3M6IEJ1bGtVcGxvYWRDb250ZXh0WydzZXRPblN1Y2Nlc3MnXSA9IChvblN1Y2Nlc3MpID0+IHtcbiAgICBzZXRPblN1Y2Nlc3NGdW5jdGlvbigoKSA9PiBvblN1Y2Nlc3MpXG4gIH1cbiAgY29uc3Qgc2V0T25DYW5jZWw6IEJ1bGtVcGxvYWRDb250ZXh0WydzZXRPbkNhbmNlbCddID0gKG9uQ2FuY2VsKSA9PiB7XG4gICAgc2V0T25DYW5jZWxGdW5jdGlvbigoKSA9PiBvbkNhbmNlbClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbnRleHRcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnOiBjb2xsZWN0aW9uLFxuICAgICAgICBkcmF3ZXJTbHVnLFxuICAgICAgICBpbml0aWFsRmlsZXMsXG4gICAgICAgIGluaXRpYWxGb3JtcyxcbiAgICAgICAgbWF4RmlsZXMsXG4gICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvbkNhbmNlbEZ1bmN0aW9uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uU3VjY2VzczogKG5ld0RvY3MsIGVycm9yQ291bnQpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9uU3VjY2Vzc0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvblN1Y2Nlc3NGdW5jdGlvbihuZXdEb2NzLCBlcnJvckNvdW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0YWJsZUNvbGxlY3Rpb25zLFxuICAgICAgICBzZXRDb2xsZWN0aW9uU2x1Zzogc2V0Q29sbGVjdGlvbixcbiAgICAgICAgc2V0SW5pdGlhbEZpbGVzLFxuICAgICAgICBzZXRJbml0aWFsRm9ybXMsXG4gICAgICAgIHNldE1heEZpbGVzLFxuICAgICAgICBzZXRPbkNhbmNlbCxcbiAgICAgICAgc2V0T25TdWNjZXNzLFxuICAgICAgICBzZXRTZWxlY3RhYmxlQ29sbGVjdGlvbnMsXG4gICAgICAgIHNldFN1Y2Nlc3NmdWxseVVwbG9hZGVkLFxuICAgICAgICBzdWNjZXNzZnVsbHlVcGxvYWRlZCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDxCdWxrVXBsb2FkRHJhd2VyIC8+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgIDwvQ29udGV4dD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlQnVsa1VwbG9hZCA9ICgpID0+IFJlYWN0LnVzZShDb250ZXh0KVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQnVsa1VwbG9hZERyYXdlclNsdWcoKSB7XG4gIGNvbnN0IGRlcHRoID0gdXNlRHJhd2VyRGVwdGgoKVxuXG4gIHJldHVybiBgJHtkcmF3ZXJTbHVnfS0ke2RlcHRoIHx8IDF9YFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBVcGxvYWRDb250cm9sc0NvbnRleHQgPSB7XG4gIHNldFVwbG9hZENvbnRyb2xGaWxlOiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBzZXRVcGxvYWRDb250cm9sRmlsZU5hbWU6IChuYW1lOiBzdHJpbmcpID0+IHZvaWRcbiAgc2V0VXBsb2FkQ29udHJvbEZpbGVVcmw6ICh1cmw6IHN0cmluZykgPT4gdm9pZFxuICB1cGxvYWRDb250cm9sRmlsZTogRmlsZSB8IG51bGxcbiAgdXBsb2FkQ29udHJvbEZpbGVOYW1lOiBudWxsIHwgc3RyaW5nXG4gIHVwbG9hZENvbnRyb2xGaWxlVXJsOiBzdHJpbmdcbn1cblxuY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8VXBsb2FkQ29udHJvbHNDb250ZXh0Pih1bmRlZmluZWQpXG5cbmV4cG9ydCBjb25zdCBVcGxvYWRDb250cm9sc1Byb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IFt1cGxvYWRDb250cm9sRmlsZU5hbWUsIHNldFVwbG9hZENvbnRyb2xGaWxlTmFtZV0gPSB1c2VTdGF0ZTxudWxsIHwgc3RyaW5nPihudWxsKVxuICBjb25zdCBbdXBsb2FkQ29udHJvbEZpbGVVcmwsIHNldFVwbG9hZENvbnRyb2xGaWxlVXJsXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpXG4gIGNvbnN0IFt1cGxvYWRDb250cm9sRmlsZSwgc2V0VXBsb2FkQ29udHJvbEZpbGVdID0gdXNlU3RhdGU8RmlsZSB8IG51bGw+KG51bGwpXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dFxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2V0VXBsb2FkQ29udHJvbEZpbGUsXG4gICAgICAgIHNldFVwbG9hZENvbnRyb2xGaWxlTmFtZSxcbiAgICAgICAgc2V0VXBsb2FkQ29udHJvbEZpbGVVcmwsXG4gICAgICAgIHVwbG9hZENvbnRyb2xGaWxlLFxuICAgICAgICB1cGxvYWRDb250cm9sRmlsZU5hbWUsXG4gICAgICAgIHVwbG9hZENvbnRyb2xGaWxlVXJsLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db250ZXh0PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCB1c2VVcGxvYWRDb250cm9scyA9ICgpOiBVcGxvYWRDb250cm9sc0NvbnRleHQgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlKENvbnRleHQpXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlVXBsb2FkQ29udHJvbHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBVcGxvYWRDb250cm9sc1Byb3ZpZGVyJylcbiAgfVxuICByZXR1cm4gY29udGV4dFxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBEcm9wem9uZSB9IGZyb20gJy4uLy4uL0Ryb3B6b25lL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VySGVhZGVyIH0gZnJvbSAnLi4vSGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdidWxrLXVwbG9hZC0tYWRkLWZpbGVzJ1xuXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBhY2NlcHRNaW1lVHlwZXM/OiBzdHJpbmdcbiAgcmVhZG9ubHkgb25DYW5jZWw6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgb25Ecm9wOiAoYWNjZXB0ZWRGaWxlczogRmlsZUxpc3QpID0+IHZvaWRcbn1cbmV4cG9ydCBmdW5jdGlvbiBBZGRGaWxlc1ZpZXcoeyBhY2NlcHRNaW1lVHlwZXMsIG9uQ2FuY2VsLCBvbkRyb3AgfTogUHJvcHMpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPERyYXdlckhlYWRlciBvbkNsb3NlPXtvbkNhbmNlbH0gdGl0bGU9e3QoJ3VwbG9hZDphZGRGaWxlcycpfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Ryb3BBcmVhYH0+XG4gICAgICAgIDxEcm9wem9uZSBtdWx0aXBsZUZpbGVzIG9uQ2hhbmdlPXtvbkRyb3B9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwic3VidGxlXCJcbiAgICAgICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuY2xpY2soKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dCgndXBsb2FkOnNlbGVjdEZpbGUnKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGFjY2VwdD17YWNjZXB0TWltZVR5cGVzfVxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGlkZGVuLWlucHV0YH1cbiAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG9uRHJvcChlLnRhcmdldC5maWxlcylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJhZ0FuZERyb3BUZXh0YH0+XG4gICAgICAgICAgICB7dCgnZ2VuZXJhbDpvcicpfSB7dCgndXBsb2FkOmRyYWdBbmREcm9wJyl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L0Ryb3B6b25lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgaGFuZGxlRHJhZ092ZXIgPSAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKVxuICBlLnN0b3BQcm9wYWdhdGlvbigpXG59XG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdkcm9wem9uZSdcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBkaXNhYmxlZD86IGJvb2xlYW5cbiAgcmVhZG9ubHkgZHJvcHpvbmVTdHlsZT86ICdkZWZhdWx0JyB8ICdub25lJ1xuICByZWFkb25seSBtdWx0aXBsZUZpbGVzPzogYm9vbGVhblxuICByZWFkb25seSBvbkNoYW5nZTogKGU6IEZpbGVMaXN0KSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wem9uZSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGRyb3B6b25lU3R5bGUgPSAnZGVmYXVsdCcsXG4gIG11bHRpcGxlRmlsZXMsXG4gIG9uQ2hhbmdlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgZHJvcFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2RyYWdnaW5nLCBzZXREcmFnZ2luZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBhZGRGaWxlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChmaWxlczogRmlsZUxpc3QpID0+IHtcbiAgICAgIGlmICghbXVsdGlwbGVGaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGRhdGFUcmFuc2ZlciA9IG5ldyBEYXRhVHJhbnNmZXIoKVxuICAgICAgICBkYXRhVHJhbnNmZXIuaXRlbXMuYWRkKGZpbGVzWzBdKVxuICAgICAgICBvbkNoYW5nZShkYXRhVHJhbnNmZXIuZmlsZXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNoYW5nZShmaWxlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIFttdWx0aXBsZUZpbGVzLCBvbkNoYW5nZV0sXG4gIClcblxuICBjb25zdCBoYW5kbGVQYXN0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlOiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgIGlmIChlLmNsaXBib2FyZERhdGEuZmlsZXMgJiYgZS5jbGlwYm9hcmREYXRhLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWRkRmlsZXMoZS5jbGlwYm9hcmREYXRhLmZpbGVzKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZEZpbGVzXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbnRlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgc2V0RHJhZ2dpbmcodHJ1ZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gUmVhY3QudXNlQ2FsbGJhY2soKGU6IERyYWdFdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXREcmFnZ2luZyhmYWxzZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlRHJvcCA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgc2V0RHJhZ2dpbmcoZmFsc2UpXG5cbiAgICAgIGlmIChlLmRhdGFUcmFuc2Zlci5maWxlcyAmJiBlLmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFkZEZpbGVzKGUuZGF0YVRyYW5zZmVyLmZpbGVzKVxuICAgICAgICBzZXREcmFnZ2luZyhmYWxzZSlcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmNsZWFyRGF0YSgpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEZpcmVmb3ggdGhyb3dzIE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIHdoZW4gY2FsbGluZyBjbGVhckRhdGEoKSBvbiBhIHByb3RlY3RlZCBEYXRhVHJhbnNmZXIgZHVyaW5nIGRyb3AgZXZlbnRzXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci9jbGVhckRhdGEjZXhjZXB0aW9uc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkRmlsZXNdLFxuICApXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkaXYgPSBkcm9wUmVmLmN1cnJlbnRcblxuICAgIGlmIChkaXYgJiYgIWRpc2FibGVkKSB7XG4gICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgaGFuZGxlRHJhZ0VudGVyKVxuICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIGhhbmRsZURyYWdMZWF2ZSlcbiAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIGhhbmRsZURyYWdPdmVyKVxuICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBoYW5kbGVEcm9wKVxuICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgaGFuZGxlUGFzdGUpXG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCBoYW5kbGVEcmFnRW50ZXIpXG4gICAgICAgIGRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBoYW5kbGVEcmFnTGVhdmUpXG4gICAgICAgIGRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIGhhbmRsZURyYWdPdmVyKVxuICAgICAgICBkaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIGhhbmRsZURyb3ApXG4gICAgICAgIGRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXN0ZScsIGhhbmRsZVBhc3RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiBudWxsXG4gIH0sIFtkaXNhYmxlZCwgaGFuZGxlRHJhZ0VudGVyLCBoYW5kbGVEcmFnTGVhdmUsIGhhbmRsZURyb3AsIGhhbmRsZVBhc3RlXSlcblxuICBjb25zdCBjbGFzc2VzID0gW1xuICAgIGJhc2VDbGFzcyxcbiAgICBjbGFzc05hbWUsXG4gICAgZHJhZ2dpbmcgPyAnZHJhZ2dpbmcnIDogJycsXG4gICAgYGRyb3B6b25lU3R5bGUtLSR7ZHJvcHpvbmVTdHlsZX1gLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzfSByZWY9e2Ryb3BSZWZ9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBEcmF3ZXJDbG9zZUJ1dHRvbiB9IGZyb20gJy4uL0RyYXdlckNsb3NlQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdidWxrLXVwbG9hZC0tZHJhd2VyLWhlYWRlcidcblxudHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgb25DbG9zZTogKCkgPT4gdm9pZFxuICByZWFkb25seSB0aXRsZTogc3RyaW5nXG59XG5leHBvcnQgZnVuY3Rpb24gRHJhd2VySGVhZGVyKHsgb25DbG9zZSwgdGl0bGUgfTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIDxoMiB0aXRsZT17dGl0bGV9Pnt0aXRsZX08L2gyPlxuICAgICAgPERyYXdlckNsb3NlQnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZHJhd2VyLWNsb3NlLWJ1dHRvbidcblxudHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgb25DbGljazogKCkgPT4gdm9pZFxufVxuZXhwb3J0IGZ1bmN0aW9uIERyYXdlckNsb3NlQnV0dG9uKHsgb25DbGljayB9OiBQcm9wcykge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxidXR0b24gYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpjbG9zZScpfSBjbGFzc05hbWU9e2Jhc2VDbGFzc30gb25DbGljaz17b25DbGlja30gdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPFhJY29uIC8+XG4gICAgPC9idXR0b24+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgcmVkdWNlRmllbGRzVG9WYWx1ZXMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9BdXRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IERvY3VtZW50SW5mb1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQWN0aW9uc0JhciB9IGZyb20gJy4uL0FjdGlvbnNCYXIvaW5kZXguanMnXG5pbXBvcnQgeyBkaXNjYXJkQnVsa1VwbG9hZE1vZGFsU2x1ZywgRGlzY2FyZFdpdGhvdXRTYXZpbmcgfSBmcm9tICcuLi9EaXNjYXJkV2l0aG91dFNhdmluZy9pbmRleC5qcydcbmltcG9ydCB7IEVkaXRGb3JtIH0gZnJvbSAnLi4vRWRpdEZvcm0vaW5kZXguanMnXG5pbXBvcnQgeyBGaWxlU2lkZWJhciB9IGZyb20gJy4uL0ZpbGVTaWRlYmFyL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybXNNYW5hZ2VyIH0gZnJvbSAnLi4vRm9ybXNNYW5hZ2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VySGVhZGVyIH0gZnJvbSAnLi4vSGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdidWxrLXVwbG9hZC0tZmlsZS1tYW5hZ2VyJ1xuXG5leHBvcnQgZnVuY3Rpb24gQWRkaW5nRmlsZXNWaWV3KCkge1xuICBjb25zdCB7XG4gICAgYWN0aXZlSW5kZXgsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZG9jUGVybWlzc2lvbnMsXG4gICAgZG9jdW1lbnRTbG90cyxcbiAgICBmb3JtcyxcbiAgICBoYXNQdWJsaXNoUGVybWlzc2lvbixcbiAgICBoYXNTYXZlUGVybWlzc2lvbixcbiAgICBoYXNTdWJtaXR0ZWQsXG4gICAgcmVzZXRVcGxvYWRFZGl0cyxcbiAgICB1cGRhdGVVcGxvYWRFZGl0cyxcbiAgfSA9IHVzZUZvcm1zTWFuYWdlcigpXG4gIGNvbnN0IGFjdGl2ZUZvcm0gPSBmb3Jtc1thY3RpdmVJbmRleF1cbiAgY29uc3QgeyBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IHVzZXIgfSA9IHVzZUF1dGgoKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICA8RmlsZVNpZGViYXIgLz5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2VkaXRWaWV3YH0+XG4gICAgICAgIDxEcmF3ZXJIZWFkZXJcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBvcGVuTW9kYWwoZGlzY2FyZEJ1bGtVcGxvYWRNb2RhbFNsdWcpfVxuICAgICAgICAgIHRpdGxlPXtnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5zaW5ndWxhciwgaTE4bil9XG4gICAgICAgIC8+XG4gICAgICAgIHthY3RpdmVGb3JtID8gKFxuICAgICAgICAgIDxEb2N1bWVudEluZm9Qcm92aWRlclxuICAgICAgICAgICAgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25TbHVnfVxuICAgICAgICAgICAgY3VycmVudEVkaXRvcj17dXNlcn1cbiAgICAgICAgICAgIGRvY1Blcm1pc3Npb25zPXtkb2NQZXJtaXNzaW9uc31cbiAgICAgICAgICAgIGhhc1B1Ymxpc2hlZERvYz17ZmFsc2V9XG4gICAgICAgICAgICBoYXNQdWJsaXNoUGVybWlzc2lvbj17aGFzUHVibGlzaFBlcm1pc3Npb259XG4gICAgICAgICAgICBoYXNTYXZlUGVybWlzc2lvbj17aGFzU2F2ZVBlcm1pc3Npb259XG4gICAgICAgICAgICBpZD17bnVsbH1cbiAgICAgICAgICAgIGluaXRpYWxEYXRhPXtyZWR1Y2VGaWVsZHNUb1ZhbHVlcyhhY3RpdmVGb3JtLmZvcm1TdGF0ZSwgdHJ1ZSl9XG4gICAgICAgICAgICBpbml0aWFsU3RhdGU9e2FjdGl2ZUZvcm0uZm9ybVN0YXRlfVxuICAgICAgICAgICAgaXNMb2NrZWQ9e2ZhbHNlfVxuICAgICAgICAgICAga2V5PXtgJHthY3RpdmVJbmRleH0tJHtmb3Jtcy5sZW5ndGh9YH1cbiAgICAgICAgICAgIGxhc3RVcGRhdGVUaW1lPXswfVxuICAgICAgICAgICAgbW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZD17ZmFsc2V9XG4gICAgICAgICAgICB1bnB1Ymxpc2hlZFZlcnNpb25Db3VudD17MH1cbiAgICAgICAgICAgIFVwbG9hZD17ZG9jdW1lbnRTbG90cy5VcGxvYWR9XG4gICAgICAgICAgICB2ZXJzaW9uQ291bnQ9ezB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFjdGlvbnNCYXIgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ30gLz5cbiAgICAgICAgICAgIDxFZGl0Rm9ybVxuICAgICAgICAgICAgICByZXNldFVwbG9hZEVkaXRzPXtyZXNldFVwbG9hZEVkaXRzfVxuICAgICAgICAgICAgICBzdWJtaXR0ZWQ9e2hhc1N1Ym1pdHRlZH1cbiAgICAgICAgICAgICAgdXBkYXRlVXBsb2FkRWRpdHM9e3VwZGF0ZVVwbG9hZEVkaXRzfVxuICAgICAgICAgICAgICB1cGxvYWRFZGl0cz17YWN0aXZlRm9ybT8udXBsb2FkRWRpdHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRG9jdW1lbnRJbmZvUHJvdmlkZXI+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxEaXNjYXJkV2l0aG91dFNhdmluZyAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBDaGV2cm9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL0NoZXZyb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBFZGl0TWFueUJ1bGtVcGxvYWRzIH0gZnJvbSAnLi4vRWRpdE1hbnkvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb3Jtc01hbmFnZXIgfSBmcm9tICcuLi9Gb3Jtc01hbmFnZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2J1bGstdXBsb2FkLS1hY3Rpb25zLWJhcidcblxudHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgY29sbGVjdGlvbkNvbmZpZzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uc0Jhcih7IGNvbGxlY3Rpb25Db25maWcgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBhY3RpdmVJbmRleCwgZm9ybXMsIHNldEFjdGl2ZUluZGV4IH0gPSB1c2VGb3Jtc01hbmFnZXIoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX25hdmlnYXRpb25gfT5cbiAgICAgICAgPHAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sb2NhdGlvblRleHRgfT5cbiAgICAgICAgICA8c3Ryb25nPnthY3RpdmVJbmRleCArIDF9PC9zdHJvbmc+XG4gICAgICAgICAge2AgJHt0KCdnZW5lcmFsOm9mJyl9IGB9XG4gICAgICAgICAgPHN0cm9uZz57Zm9ybXMubGVuZ3RofTwvc3Ryb25nPlxuICAgICAgICA8L3A+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRyb2xzYH0+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpwcmV2aW91cycpfVxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJub25lXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gYWN0aXZlSW5kZXggLSAxXG4gICAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlSW5kZXgoZm9ybXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVJbmRleChuZXh0SW5kZXgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvbkljb24gZGlyZWN0aW9uPVwibGVmdFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpuZXh0Jyl9XG4gICAgICAgICAgICBidXR0b25TdHlsZT1cIm5vbmVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBhY3RpdmVJbmRleCArIDFcbiAgICAgICAgICAgICAgaWYgKG5leHRJbmRleCA9PT0gZm9ybXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlSW5kZXgoMClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVJbmRleChuZXh0SW5kZXgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvbkljb24gZGlyZWN0aW9uPVwicmlnaHRcIiAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPEVkaXRNYW55QnVsa1VwbG9hZHMgY29sbGVjdGlvbj17Y29sbGVjdGlvbkNvbmZpZ30gLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8QWN0aW9ucyBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NhdmVCdXR0b25zYH0gLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG50eXBlIEFjdGlvbnNQcm9wcyA9IHtcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5leHBvcnQgZnVuY3Rpb24gQWN0aW9ucyh7IGNsYXNzTmFtZSB9OiBBY3Rpb25zUHJvcHMpIHtcbiAgY29uc3QgeyBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNvbGxlY3Rpb25TbHVnLCBoYXNQdWJsaXNoUGVybWlzc2lvbiwgaGFzU2F2ZVBlcm1pc3Npb24sIHNhdmVBbGxEb2NzIH0gPSB1c2VGb3Jtc01hbmFnZXIoKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e1tgJHtiYXNlQ2xhc3N9X19idXR0b25zYCwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT5cbiAgICAgIHtjb2xsZWN0aW9uQ29uZmlnPy52ZXJzaW9ucz8uZHJhZnRzICYmIGhhc1NhdmVQZXJtaXNzaW9uID8gKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgc2F2ZUFsbERvY3MoeyBvdmVycmlkZXM6IHsgX3N0YXR1czogJ2RyYWZ0JyB9IH0pfVxuICAgICAgICA+XG4gICAgICAgICAge3QoJ3ZlcnNpb246c2F2ZURyYWZ0Jyl9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7Y29sbGVjdGlvbkNvbmZpZz8udmVyc2lvbnM/LmRyYWZ0cyAmJiBoYXNQdWJsaXNoUGVybWlzc2lvbiA/IChcbiAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB2b2lkIHNhdmVBbGxEb2NzKHsgb3ZlcnJpZGVzOiB7IF9zdGF0dXM6ICdwdWJsaXNoZWQnIH0gfSl9PlxuICAgICAgICAgIHt0KCd2ZXJzaW9uOnB1Ymxpc2gnKX1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICApIDogbnVsbH1cblxuICAgICAgeyFjb2xsZWN0aW9uQ29uZmlnPy52ZXJzaW9ucz8uZHJhZnRzICYmIGhhc1NhdmVQZXJtaXNzaW9uID8gKFxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHZvaWQgc2F2ZUFsbERvY3MoKX0+e3QoJ2dlbmVyYWw6c2F2ZScpfTwvQnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IEVkaXREZXB0aFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyLCBEcmF3ZXJUb2dnbGVyIH0gZnJvbSAnLi4vLi4vRHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybXNNYW5hZ2VyIH0gZnJvbSAnLi4vRm9ybXNNYW5hZ2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRWRpdE1hbnlCdWxrVXBsb2Fkc0RyYXdlckNvbnRlbnQgfSBmcm9tICcuL0RyYXdlckNvbnRlbnQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IGJhc2VDbGFzcyA9ICdlZGl0LW1hbnktYnVsay11cGxvYWRzJ1xuXG5leHBvcnQgdHlwZSBFZGl0TWFueUJ1bGtVcGxvYWRzUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb246IENsaWVudENvbGxlY3Rpb25Db25maWdcbn1cblxuZXhwb3J0IGNvbnN0IEVkaXRNYW55QnVsa1VwbG9hZHM6IFJlYWN0LkZDPEVkaXRNYW55QnVsa1VwbG9hZHNQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjb2xsZWN0aW9uOiB7IHNsdWcgfSA9IHt9LCBjb2xsZWN0aW9uIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgcGVybWlzc2lvbnMgfSA9IHVzZUF1dGgoKVxuXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGZvcm1zIH0gPSB1c2VGb3Jtc01hbmFnZXIoKSAvLyBBY2Nlc3MgZm9ybXMgbWFuYWdlZCBpbiBidWxrIHVwbG9hZHNcblxuICBjb25zdCBjb2xsZWN0aW9uUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucz8uY29sbGVjdGlvbnM/LltzbHVnXVxuICBjb25zdCBoYXNVcGRhdGVQZXJtaXNzaW9uID0gY29sbGVjdGlvblBlcm1pc3Npb25zPy51cGRhdGVcblxuICBjb25zdCBkcmF3ZXJTbHVnID0gYGVkaXQtJHtzbHVnfS1idWxrLXVwbG9hZHNgXG5cbiAgaWYgKCFoYXNVcGRhdGVQZXJtaXNzaW9uKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICA8RHJhd2VyVG9nZ2xlclxuICAgICAgICBhcmlhLWxhYmVsPXt0KCdnZW5lcmFsOmVkaXRBbGwnKX1cbiAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190b2dnbGVgfVxuICAgICAgICBzbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgPlxuICAgICAgICB7dCgnZ2VuZXJhbDplZGl0QWxsJyl9XG4gICAgICA8L0RyYXdlclRvZ2dsZXI+XG4gICAgICA8RWRpdERlcHRoUHJvdmlkZXI+XG4gICAgICAgIDxEcmF3ZXIgSGVhZGVyPXtudWxsfSBzbHVnPXtkcmF3ZXJTbHVnfT5cbiAgICAgICAgICA8RWRpdE1hbnlCdWxrVXBsb2Fkc0RyYXdlckNvbnRlbnRcbiAgICAgICAgICAgIGNvbGxlY3Rpb249e2NvbGxlY3Rpb259XG4gICAgICAgICAgICBkcmF3ZXJTbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgICAgICAgZm9ybXM9e2Zvcm1zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRHJhd2VyPlxuICAgICAgPC9FZGl0RGVwdGhQcm92aWRlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29sbGVjdGlvblNsdWcsXG4gIERhdGEsXG4gIERvY3VtZW50U2xvdHMsXG4gIEZvcm1TdGF0ZSxcbiAgSnNvbk9iamVjdCxcbiAgU2FuaXRpemVkRG9jdW1lbnRQZXJtaXNzaW9ucyxcbiAgVXBsb2FkRWRpdHMsXG59IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi9yZWR1Y2VyLmpzJ1xuXG5pbXBvcnQgeyBmaWVsZFJlZHVjZXIgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9Gb3JtL2ZpZWxkUmVkdWNlci5qcydcbmltcG9ydCB7IHVzZUVmZmVjdEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRWZmZWN0RXZlbnQuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVNlcnZlckZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9TZXJ2ZXJGdW5jdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVVwbG9hZEhhbmRsZXJzIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1VwbG9hZEhhbmRsZXJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgaGFzU2F2ZVBlcm1pc3Npb24gYXMgZ2V0SGFzU2F2ZVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaGFzU2F2ZVBlcm1pc3Npb24uanMnXG5pbXBvcnQgeyBMb2FkaW5nT3ZlcmxheSB9IGZyb20gJy4uLy4uL0xvYWRpbmcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2FkaW5nT3ZlcmxheSB9IGZyb20gJy4uLy4uL0xvYWRpbmdPdmVybGF5L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQnVsa1VwbG9hZCB9IGZyb20gJy4uL2luZGV4LmpzJ1xuaW1wb3J0IHsgY3JlYXRlRm9ybURhdGEgfSBmcm9tICcuL2NyZWF0ZUZvcm1EYXRhLmpzJ1xuaW1wb3J0IHsgZm9ybXNNYW5hZ2VtZW50UmVkdWNlciB9IGZyb20gJy4vcmVkdWNlci5qcydcblxudHlwZSBGb3Jtc01hbmFnZXJDb250ZXh0ID0ge1xuICByZWFkb25seSBhY3RpdmVJbmRleDogU3RhdGVbJ2FjdGl2ZUluZGV4J11cbiAgcmVhZG9ubHkgYWRkRmlsZXM6IChmaWxlbGlzdDogRmlsZUxpc3QpID0+IFByb21pc2U8dm9pZD5cbiAgcmVhZG9ubHkgYnVsa1VwZGF0ZUZvcm06IChcbiAgICB1cGRhdGVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBhZnRlclN0YXRlVXBkYXRlPzogKCkgPT4gdm9pZCxcbiAgKSA9PiBQcm9taXNlPHZvaWQ+XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25TbHVnOiBzdHJpbmdcbiAgcmVhZG9ubHkgZG9jUGVybWlzc2lvbnM/OiBTYW5pdGl6ZWREb2N1bWVudFBlcm1pc3Npb25zXG4gIHJlYWRvbmx5IGRvY3VtZW50U2xvdHM6IERvY3VtZW50U2xvdHNcbiAgcmVhZG9ubHkgZm9ybXM6IFN0YXRlWydmb3JtcyddXG4gIGdldEZvcm1EYXRhUmVmOiBSZWFjdC5SZWZPYmplY3Q8KCkgPT4gRGF0YT5cbiAgcmVhZG9ubHkgaGFzUHVibGlzaFBlcm1pc3Npb246IGJvb2xlYW5cbiAgcmVhZG9ubHkgaGFzU2F2ZVBlcm1pc3Npb246IGJvb2xlYW5cbiAgcmVhZG9ubHkgaGFzU3VibWl0dGVkOiBib29sZWFuXG4gIHJlYWRvbmx5IGlzSW5pdGlhbGl6aW5nOiBib29sZWFuXG4gIHJlYWRvbmx5IHJlbW92ZUZpbGU6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHJlc2V0VXBsb2FkRWRpdHM/OiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHNhdmVBbGxEb2NzOiAoeyBvdmVycmlkZXMgfT86IHsgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkgPT4gUHJvbWlzZTx2b2lkPlxuICByZWFkb25seSBzZXRBY3RpdmVJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0Rm9ybVRvdGFsRXJyb3JDb3VudDogKHtcbiAgICBlcnJvckNvdW50LFxuICAgIGluZGV4LFxuICB9OiB7XG4gICAgZXJyb3JDb3VudDogbnVtYmVyXG4gICAgaW5kZXg6IG51bWJlclxuICB9KSA9PiB2b2lkXG4gIHJlYWRvbmx5IHRvdGFsRXJyb3JDb3VudD86IG51bWJlclxuICByZWFkb25seSB1cGRhdGVVcGxvYWRFZGl0czogKGFyZ3M6IFVwbG9hZEVkaXRzKSA9PiB2b2lkXG59XG5cbmNvbnN0IENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEZvcm1zTWFuYWdlckNvbnRleHQ+KHtcbiAgYWN0aXZlSW5kZXg6IDAsXG4gIGFkZEZpbGVzOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSxcbiAgYnVsa1VwZGF0ZUZvcm06ICgpID0+IG51bGwsXG4gIGNvbGxlY3Rpb25TbHVnOiAnJyxcbiAgZG9jUGVybWlzc2lvbnM6IHVuZGVmaW5lZCxcbiAgZG9jdW1lbnRTbG90czoge30sXG4gIGZvcm1zOiBbXSxcbiAgZ2V0Rm9ybURhdGFSZWY6IHsgY3VycmVudDogKCkgPT4gKHt9KSB9LFxuICBoYXNQdWJsaXNoUGVybWlzc2lvbjogZmFsc2UsXG4gIGhhc1NhdmVQZXJtaXNzaW9uOiBmYWxzZSxcbiAgaGFzU3VibWl0dGVkOiBmYWxzZSxcbiAgaXNJbml0aWFsaXppbmc6IGZhbHNlLFxuICByZW1vdmVGaWxlOiAoKSA9PiB7fSxcbiAgc2F2ZUFsbERvY3M6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxuICBzZXRBY3RpdmVJbmRleDogKCkgPT4gMCxcbiAgc2V0Rm9ybVRvdGFsRXJyb3JDb3VudDogKCkgPT4ge30sXG4gIHRvdGFsRXJyb3JDb3VudDogMCxcbiAgdXBkYXRlVXBsb2FkRWRpdHM6ICgpID0+IHt9LFxufSlcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBTdGF0ZSA9IHtcbiAgYWN0aXZlSW5kZXg6IDAsXG4gIGZvcm1zOiBbXSxcbiAgdG90YWxFcnJvckNvdW50OiAwLFxufVxuXG5leHBvcnQgdHlwZSBJbml0aWFsRm9ybXMgPSBBcnJheTx7XG4gIGZpbGU6IEZpbGVcbiAgZm9ybUlEPzogc3RyaW5nXG4gIGluaXRpYWxTdGF0ZT86IEZvcm1TdGF0ZSB8IG51bGxcbn0+XG5cbnR5cGUgRm9ybXNNYW5hZ2VyUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1zTWFuYWdlclByb3ZpZGVyKHsgY2hpbGRyZW4gfTogRm9ybXNNYW5hZ2VyUHJvcHMpIHtcbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHtcbiAgICByb3V0ZXM6IHsgYXBpIH0sXG4gIH0gPSBjb25maWdcbiAgY29uc3QgeyBjb2RlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCB7IGdldERvY3VtZW50U2xvdHMsIGdldEZvcm1TdGF0ZSB9ID0gdXNlU2VydmVyRnVuY3Rpb25zKClcbiAgY29uc3QgeyBnZXRVcGxvYWRIYW5kbGVyIH0gPSB1c2VVcGxvYWRIYW5kbGVycygpXG5cbiAgY29uc3QgW2RvY3VtZW50U2xvdHMsIHNldERvY3VtZW50U2xvdHNdID0gUmVhY3QudXNlU3RhdGU8RG9jdW1lbnRTbG90cz4oe30pXG4gIGNvbnN0IFtoYXNTdWJtaXR0ZWQsIHNldEhhc1N1Ym1pdHRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2RvY1Blcm1pc3Npb25zLCBzZXREb2NQZXJtaXNzaW9uc10gPSBSZWFjdC51c2VTdGF0ZTxTYW5pdGl6ZWREb2N1bWVudFBlcm1pc3Npb25zPigpXG4gIGNvbnN0IFtoYXNTYXZlUGVybWlzc2lvbiwgc2V0SGFzU2F2ZVBlcm1pc3Npb25dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoYXNQdWJsaXNoUGVybWlzc2lvbiwgc2V0SGFzUHVibGlzaFBlcm1pc3Npb25dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoYXNJbml0aWFsaXplZFN0YXRlLCBzZXRIYXNJbml0aWFsaXplZFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzSW5pdGlhbGl6ZWREb2NQZXJtaXNzaW9ucywgc2V0SGFzSW5pdGlhbGl6ZWREb2NQZXJtaXNzaW9uc10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzSW5pdGlhbGl6aW5nLCBzZXRJc0luaXRpYWxpemluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSBSZWFjdC51c2VSZWR1Y2VyKGZvcm1zTWFuYWdlbWVudFJlZHVjZXIsIGluaXRpYWxTdGF0ZSlcbiAgY29uc3QgeyBhY3RpdmVJbmRleCwgZm9ybXMsIHRvdGFsRXJyb3JDb3VudCB9ID0gc3RhdGVcblxuICBjb25zdCBmb3Jtc1JlZiA9IFJlYWN0LnVzZVJlZihmb3JtcylcbiAgZm9ybXNSZWYuY3VycmVudCA9IGZvcm1zXG5cbiAgY29uc3QgeyB0b2dnbGVMb2FkaW5nT3ZlcmxheSB9ID0gdXNlTG9hZGluZ092ZXJsYXkoKVxuICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3Qge1xuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGRyYXdlclNsdWcsXG4gICAgaW5pdGlhbEZpbGVzLFxuICAgIGluaXRpYWxGb3JtcyxcbiAgICBvblN1Y2Nlc3MsXG4gICAgc2V0SW5pdGlhbEZpbGVzLFxuICAgIHNldEluaXRpYWxGb3JtcyxcbiAgICBzZXRTdWNjZXNzZnVsbHlVcGxvYWRlZCxcbiAgfSA9IHVzZUJ1bGtVcGxvYWQoKVxuXG4gIGNvbnN0IFtpc1VwbG9hZGluZywgc2V0SXNVcGxvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtsb2FkaW5nVGV4dCwgc2V0TG9hZGluZ1RleHRdID0gUmVhY3QudXNlU3RhdGUoJycpXG5cbiAgY29uc3QgaGFzSW5pdGlhbGl6ZWRXaXRoRmlsZXMgPSBSZWFjdC51c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGluaXRpYWxTdGF0ZVJlZiA9IFJlYWN0LnVzZVJlZjxGb3JtU3RhdGU+KG51bGwpXG4gIGNvbnN0IGdldEZvcm1EYXRhUmVmID0gUmVhY3QudXNlUmVmPCgpID0+IERhdGE+KCgpID0+ICh7fSkpXG5cbiAgY29uc3QgYmFzZUFQSVBhdGggPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgYXBpUm91dGU6IGFwaSxcbiAgICBwYXRoOiAnJyxcbiAgfSlcblxuICBjb25zdCBhY3Rpb25VUkwgPSBgJHtiYXNlQVBJUGF0aH0vJHtjb2xsZWN0aW9uU2x1Z31gXG5cbiAgY29uc3QgaW5pdGlhbGl6ZVNoYXJlZERvY1Blcm1pc3Npb25zID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGxvY2FsZTogY29kZSB8fCB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgY29uc3QgZG9jQWNjZXNzVVJMID0gYC8ke2NvbGxlY3Rpb25TbHVnfS9hY2Nlc3NgXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7YmFzZUFQSVBhdGh9JHtkb2NBY2Nlc3NVUkx9PyR7cXMuc3RyaW5naWZ5KHBhcmFtcyl9YCwge1xuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgfSlcblxuICAgIGNvbnN0IGpzb246IFNhbml0aXplZERvY3VtZW50UGVybWlzc2lvbnMgPSBhd2FpdCByZXMuanNvbigpXG4gICAgY29uc3QgcHVibGlzaGVkQWNjZXNzSlNPTiA9IGF3YWl0IGZldGNoKFxuICAgICAgYCR7YmFzZUFQSVBhdGh9JHtkb2NBY2Nlc3NVUkx9PyR7cXMuc3RyaW5naWZ5KHBhcmFtcyl9YCxcbiAgICAgIHtcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIF9zdGF0dXM6ICdwdWJsaXNoZWQnLFxuICAgICAgICB9KSxcbiAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgfSxcbiAgICApLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSlcblxuICAgIHNldERvY1Blcm1pc3Npb25zKGpzb24pXG5cbiAgICBzZXRIYXNTYXZlUGVybWlzc2lvbihcbiAgICAgIGdldEhhc1NhdmVQZXJtaXNzaW9uKHtcbiAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgIGRvY1Blcm1pc3Npb25zOiBqc29uLFxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgc2V0SGFzUHVibGlzaFBlcm1pc3Npb24ocHVibGlzaGVkQWNjZXNzSlNPTj8udXBkYXRlKVxuICAgIHNldEhhc0luaXRpYWxpemVkRG9jUGVybWlzc2lvbnModHJ1ZSlcbiAgfSwgW2Jhc2VBUElQYXRoLCBjb2RlLCBjb2xsZWN0aW9uU2x1ZywgaTE4bi5sYW5ndWFnZV0pXG5cbiAgY29uc3QgaW5pdGlhbGl6ZVNoYXJlZEZvcm1TdGF0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXIpID0+IHtcbiAgICAgIGlmIChhYm9ydENvbnRyb2xsZXI/LnNpZ25hbCkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoJ2Fib3J0aW5nIHByZXZpb3VzIGZldGNoIGZvciBpbml0aWFsIGZvcm0gc3RhdGUgd2l0aG91dCBmaWxlcycpXG4gICAgICB9XG5cbiAgICAgIC8vIEZFVENIIEFORCBTRVQgVEhFIERPQ1VNRU5UIFNMT1RTIEhFUkUhXG4gICAgICBjb25zdCBkb2N1bWVudFNsb3RzID0gYXdhaXQgZ2V0RG9jdW1lbnRTbG90cyh7IGNvbGxlY3Rpb25TbHVnIH0pXG4gICAgICBzZXREb2N1bWVudFNsb3RzKGRvY3VtZW50U2xvdHMpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdGU6IGZvcm1TdGF0ZVdpdGhvdXRGaWxlcyB9ID0gYXdhaXQgZ2V0Rm9ybVN0YXRlKHtcbiAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICBkb2NQZXJtaXNzaW9ucyxcbiAgICAgICAgICBkb2NQcmVmZXJlbmNlczogeyBmaWVsZHM6IHt9IH0sXG4gICAgICAgICAgbG9jYWxlOiBjb2RlLFxuICAgICAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICAgICAgcmVuZGVyQWxsRmllbGRzOiB0cnVlLFxuICAgICAgICAgIHNjaGVtYVBhdGg6IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgIHNraXBWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICBpbml0aWFsU3RhdGVSZWYuY3VycmVudCA9IGZvcm1TdGF0ZVdpdGhvdXRGaWxlc1xuICAgICAgICBzZXRIYXNJbml0aWFsaXplZFN0YXRlKHRydWUpXG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9LFxuICAgIFtnZXREb2N1bWVudFNsb3RzLCBjb2xsZWN0aW9uU2x1ZywgZ2V0Rm9ybVN0YXRlLCBkb2NQZXJtaXNzaW9ucywgY29kZV0sXG4gIClcblxuICBjb25zdCBzZXRBY3RpdmVJbmRleDogRm9ybXNNYW5hZ2VyQ29udGV4dFsnc2V0QWN0aXZlSW5kZXgnXSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50Rm9ybXNEYXRhID0gZ2V0Rm9ybURhdGFSZWYuY3VycmVudCgpXG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ1JFUExBQ0UnLFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleCxcbiAgICAgICAgICBmb3JtczogZm9ybXMubWFwKChmb3JtLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gYWN0aXZlSW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvckNvdW50OiBmb3JtLmVycm9yQ291bnQsXG4gICAgICAgICAgICAgICAgZm9ybUlEOiBmb3JtLmZvcm1JRCxcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGU6IGN1cnJlbnRGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgdXBsb2FkRWRpdHM6IGZvcm0udXBsb2FkRWRpdHMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2Zvcm1zLCBhY3RpdmVJbmRleF0sXG4gIClcblxuICBjb25zdCBhZGRGaWxlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChmaWxlczogRmlsZUxpc3QpID0+IHtcbiAgICAgIGlmIChmb3Jtcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gc2F2ZSB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgZm9ybSBiZWZvcmUgYWRkaW5nIG5ldyBmaWxlc1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ1VQREFURV9GT1JNJyxcbiAgICAgICAgICBlcnJvckNvdW50OiBmb3Jtc1thY3RpdmVJbmRleF0uZXJyb3JDb3VudCxcbiAgICAgICAgICBmb3JtU3RhdGU6IGdldEZvcm1EYXRhUmVmLmN1cnJlbnQoKSxcbiAgICAgICAgICBpbmRleDogYWN0aXZlSW5kZXgsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRvZ2dsZUxvYWRpbmdPdmVybGF5KHsgaXNMb2FkaW5nOiB0cnVlLCBrZXk6ICdhZGRpbmdEb2NzJyB9KVxuICAgICAgaWYgKCFoYXNJbml0aWFsaXplZFN0YXRlKSB7XG4gICAgICAgIGF3YWl0IGluaXRpYWxpemVTaGFyZWRGb3JtU3RhdGUoKVxuICAgICAgfVxuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnQUREX0ZPUk1TJyxcbiAgICAgICAgZm9ybXM6IEFycmF5LmZyb20oZmlsZXMpLm1hcCgoZmlsZSkgPT4gKHtcbiAgICAgICAgICBmaWxlLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogaW5pdGlhbFN0YXRlUmVmLmN1cnJlbnQsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pXG4gICAgICB0b2dnbGVMb2FkaW5nT3ZlcmxheSh7IGlzTG9hZGluZzogZmFsc2UsIGtleTogJ2FkZGluZ0RvY3MnIH0pXG4gICAgfSxcbiAgICBbaW5pdGlhbGl6ZVNoYXJlZEZvcm1TdGF0ZSwgaGFzSW5pdGlhbGl6ZWRTdGF0ZSwgdG9nZ2xlTG9hZGluZ092ZXJsYXksIGFjdGl2ZUluZGV4LCBmb3Jtc10sXG4gIClcblxuICBjb25zdCBhZGRGaWxlc0VmZmVjdEV2ZW50ID0gdXNlRWZmZWN0RXZlbnQoYWRkRmlsZXMpXG5cbiAgY29uc3QgYWRkSW5pdGlhbEZvcm1zID0gdXNlRWZmZWN0RXZlbnQoYXN5bmMgKGluaXRpYWxGb3JtczogSW5pdGlhbEZvcm1zKSA9PiB7XG4gICAgdG9nZ2xlTG9hZGluZ092ZXJsYXkoeyBpc0xvYWRpbmc6IHRydWUsIGtleTogJ2FkZGluZ0RvY3MnIH0pXG5cbiAgICBpZiAoIWhhc0luaXRpYWxpemVkU3RhdGUpIHtcbiAgICAgIGF3YWl0IGluaXRpYWxpemVTaGFyZWRGb3JtU3RhdGUoKVxuICAgIH1cblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdBRERfRk9STVMnLFxuICAgICAgZm9ybXM6IGluaXRpYWxGb3Jtcy5tYXAoKGZvcm0pID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGluaXRpYWxTdGF0ZTogZm9ybT8uaW5pdGlhbFN0YXRlIHx8IGluaXRpYWxTdGF0ZVJlZi5jdXJyZW50LFxuICAgICAgfSkpLFxuICAgIH0pXG5cbiAgICB0b2dnbGVMb2FkaW5nT3ZlcmxheSh7IGlzTG9hZGluZzogZmFsc2UsIGtleTogJ2FkZGluZ0RvY3MnIH0pXG4gIH0pXG5cbiAgY29uc3QgcmVtb3ZlRmlsZTogRm9ybXNNYW5hZ2VyQ29udGV4dFsncmVtb3ZlRmlsZSddID0gUmVhY3QudXNlQ2FsbGJhY2soKGluZGV4KSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnUkVNT1ZFX0ZPUk0nLCBpbmRleCB9KVxuICB9LCBbXSlcblxuICBjb25zdCBzZXRGb3JtVG90YWxFcnJvckNvdW50OiBGb3Jtc01hbmFnZXJDb250ZXh0WydzZXRGb3JtVG90YWxFcnJvckNvdW50J10gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoeyBlcnJvckNvdW50LCBpbmRleCB9KSA9PiB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdVUERBVEVfRVJST1JfQ09VTlQnLFxuICAgICAgICBjb3VudDogZXJyb3JDb3VudCxcbiAgICAgICAgaW5kZXgsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW10sXG4gIClcblxuICBjb25zdCBzYXZlQWxsRG9jczogRm9ybXNNYW5hZ2VyQ29udGV4dFsnc2F2ZUFsbERvY3MnXSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IG92ZXJyaWRlcyB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGb3Jtc0RhdGEgPSBnZXRGb3JtRGF0YVJlZi5jdXJyZW50KClcbiAgICAgIGNvbnN0IGN1cnJlbnRGb3JtcyA9IFsuLi5mb3Jtc11cbiAgICAgIGN1cnJlbnRGb3Jtc1thY3RpdmVJbmRleF0gPSB7XG4gICAgICAgIGVycm9yQ291bnQ6IGN1cnJlbnRGb3Jtc1thY3RpdmVJbmRleF0uZXJyb3JDb3VudCxcbiAgICAgICAgZm9ybUlEOiBjdXJyZW50Rm9ybXNbYWN0aXZlSW5kZXhdLmZvcm1JRCxcbiAgICAgICAgZm9ybVN0YXRlOiBjdXJyZW50Rm9ybXNEYXRhLFxuICAgICAgICB1cGxvYWRFZGl0czogY3VycmVudEZvcm1zW2FjdGl2ZUluZGV4XS51cGxvYWRFZGl0cyxcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGl2ZUZvcm1JRCA9IGN1cnJlbnRGb3Jtc1thY3RpdmVJbmRleF0/LmZvcm1JRFxuICAgICAgY29uc3QgbmV3RG9jczogQXJyYXk8e1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZzogQ29sbGVjdGlvblNsdWdcbiAgICAgICAgZG9jOiBKc29uT2JqZWN0XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJRCBvZiB0aGUgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBkb2N1bWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZm9ybUlEOiBzdHJpbmdcbiAgICAgIH0+ID0gW11cblxuICAgICAgc2V0SXNVcGxvYWRpbmcodHJ1ZSlcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Rm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmb3JtID0gY3VycmVudEZvcm1zW2ldXG4gICAgICAgICAgY29uc3QgZmlsZVZhbHVlID0gZm9ybS5mb3JtU3RhdGU/LmZpbGU/LnZhbHVlXG5cbiAgICAgICAgICBzZXRMb2FkaW5nVGV4dCh0KCdnZW5lcmFsOnVwbG9hZGluZ0J1bGsnLCB7IGN1cnJlbnQ6IGkgKyAxLCB0b3RhbDogY3VycmVudEZvcm1zLmxlbmd0aCB9KSlcblxuICAgICAgICAgIGNvbnN0IGFjdGlvblVSTFdpdGhQYXJhbXMgPSBgJHthY3Rpb25VUkx9JHtxcy5zdHJpbmdpZnkoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxvY2FsZTogY29kZSxcbiAgICAgICAgICAgICAgdXBsb2FkRWRpdHM6IGZvcm0/LnVwbG9hZEVkaXRzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZFF1ZXJ5UHJlZml4OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApfWBcblxuICAgICAgICAgIGNvbnN0IHJlcSA9IGF3YWl0IGZldGNoKGFjdGlvblVSTFdpdGhQYXJhbXMsIHtcbiAgICAgICAgICAgIGJvZHk6IGF3YWl0IGNyZWF0ZUZvcm1EYXRhKFxuICAgICAgICAgICAgICBmb3JtLmZvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGVzLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgZ2V0VXBsb2FkSGFuZGxlcih7IGNvbGxlY3Rpb25TbHVnIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcS5qc29uKClcblxuICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDEgJiYganNvbj8uZG9jKSB7XG4gICAgICAgICAgICBuZXdEb2NzLnB1c2goe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgZG9jOiBqc29uLmRvYyxcbiAgICAgICAgICAgICAgZm9ybUlEOiBmb3JtLmZvcm1JRCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc2hvdWxkIGV4cG9zZSBzb21lIHNvcnQgb2YgaGVscGVyIGZvciB0aGlzXG4gICAgICAgICAgY29uc3QgW2ZpZWxkRXJyb3JzLCBub25GaWVsZEVycm9yc10gPSAoanNvbj8uZXJyb3JzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgICAgICAoW2ZpZWxkRXJycywgbm9uRmllbGRFcnJzXSwgZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0ZpZWxkRXJyczogYW55W10gPSBbXVxuICAgICAgICAgICAgICBjb25zdCBuZXdOb25GaWVsZEVycnM6IGFueVtdID0gW11cblxuICAgICAgICAgICAgICBpZiAoZXJyPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgbmV3Tm9uRmllbGRFcnJzLnB1c2goZXJyKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyPy5kYXRhPy5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgZXJyLmRhdGE/LmVycm9ycy5mb3JFYWNoKChkYXRhRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhRXJyb3I/LnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RmllbGRFcnJzLnB1c2goZGF0YUVycm9yKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9uRmllbGRFcnJzLnB1c2goZGF0YUVycm9yKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIFsuLi5maWVsZEVycnMsIC4uLm5ld0ZpZWxkRXJyc10sXG4gICAgICAgICAgICAgICAgWy4uLm5vbkZpZWxkRXJycywgLi4ubmV3Tm9uRmllbGRFcnJzXSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtbXSwgW11dLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGNvbnN0IG1pc3NpbmdGaWxlID0gIWZpbGVWYWx1ZSAmJiByZXEuc3RhdHVzID09PSA0MDBcbiAgICAgICAgICBjb25zdCBleGNlZWRzTGltaXQgPSBmaWxlVmFsdWUgJiYgcmVxLnN0YXR1cyA9PT0gNDEzXG4gICAgICAgICAgY29uc3QgbWlzc2luZ0ZpbGVuYW1lID1cbiAgICAgICAgICAgIGZpbGVWYWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGZpbGVWYWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICduYW1lJyBpbiBmaWxlVmFsdWUgJiZcbiAgICAgICAgICAgICghZmlsZVZhbHVlLm5hbWUgfHwgZmlsZVZhbHVlLm5hbWUgPT09ICcnKVxuXG4gICAgICAgICAgaWYgKG1pc3NpbmdGaWxlIHx8IGV4Y2VlZHNMaW1pdCB8fCBtaXNzaW5nRmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRGb3Jtc1tpXS5mb3JtU3RhdGUuZmlsZS52YWxpZCA9IGZhbHNlXG5cbiAgICAgICAgICAgIC8vIEZpbGUvQmxvYiBvYmplY3RzIGNhbm5vdCBiZSBzZXJpYWxpemVkIHZpYSB0aGUgUlNDIGZsaWdodCBwcm90b2NvbCxcbiAgICAgICAgICAgIC8vIHNvIHJlcGxhY2Ugd2l0aCBhIHBsYWluIG9iamVjdCBiZWZvcmUgY2FsbGluZyB0aGUgc2VydmVyIGZ1bmN0aW9uLlxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWxlVmFsdWUgPSBjdXJyZW50Rm9ybXNbaV0uZm9ybVN0YXRlLmZpbGU/LnZhbHVlXG4gICAgICAgICAgICBjb25zdCBmb3JtU3RhdGVGb3JTZXJ2ZXIgPSB7IC4uLmN1cnJlbnRGb3Jtc1tpXS5mb3JtU3RhdGUgfVxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRmlsZVZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICBmb3JtU3RhdGVGb3JTZXJ2ZXIuZmlsZSA9IHtcbiAgICAgICAgICAgICAgICAuLi5mb3JtU3RhdGVGb3JTZXJ2ZXIuZmlsZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBuYW1lOiBvcmlnaW5hbEZpbGVWYWx1ZS5uYW1lIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTmVlZCB0byBnZXQgdGhlIGZpZWxkIHN0YXRlIHRvIGV4dHJhY3QgY291bnQgc2luY2UgZmllbGQgZXJyb3JzXG4gICAgICAgICAgICAvLyBhcmUgbm90IHJldHVybmVkIHdoZW4gZmlsZSBpcyBtaXNzaW5nIG9yIGV4Y2VlZHMgbGltaXRcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhdGU6IG5ld1N0YXRlIH0gPSBhd2FpdCBnZXRGb3JtU3RhdGUoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgZG9jUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIGRvY1ByZWZlcmVuY2VzOiBudWxsLFxuICAgICAgICAgICAgICBmb3JtU3RhdGU6IGZvcm1TdGF0ZUZvclNlcnZlcixcbiAgICAgICAgICAgICAgb3BlcmF0aW9uOiAndXBkYXRlJyxcbiAgICAgICAgICAgICAgc2NoZW1hUGF0aDogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAobmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsRmlsZVZhbHVlIGluc3RhbmNlb2YgRmlsZSAmJiBuZXdTdGF0ZS5maWxlKSB7XG4gICAgICAgICAgICAgICAgbmV3U3RhdGUuZmlsZSA9IHsgLi4ubmV3U3RhdGUuZmlsZSwgdmFsdWU6IG9yaWdpbmFsRmlsZVZhbHVlIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1cnJlbnRGb3Jtc1tpXSA9IHtcbiAgICAgICAgICAgICAgICBlcnJvckNvdW50OiBPYmplY3QudmFsdWVzKG5ld1N0YXRlKS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAoYWNjLCB2YWx1ZSkgPT4gKHZhbHVlPy52YWxpZCA9PT0gZmFsc2UgPyBhY2MgKyAxIDogYWNjKSxcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmb3JtSUQ6IGN1cnJlbnRGb3Jtc1tpXS5mb3JtSUQsXG4gICAgICAgICAgICAgICAgZm9ybVN0YXRlOiBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2FzdC5lcnJvcihub25GaWVsZEVycm9yc1swXT8ubWVzc2FnZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEZvcm1zW2ldID0ge1xuICAgICAgICAgICAgICBlcnJvckNvdW50OiBmaWVsZEVycm9ycy5sZW5ndGgsXG4gICAgICAgICAgICAgIGZvcm1JRDogY3VycmVudEZvcm1zW2ldLmZvcm1JRCxcbiAgICAgICAgICAgICAgZm9ybVN0YXRlOiBmaWVsZFJlZHVjZXIoY3VycmVudEZvcm1zW2ldLmZvcm1TdGF0ZSwge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdBRERfU0VSVkVSX0VSUk9SUycsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBmaWVsZEVycm9ycyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgLy8gc3dhbGxvd1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldEhhc1N1Ym1pdHRlZCh0cnVlKVxuICAgICAgc2V0TG9hZGluZ1RleHQoJycpXG4gICAgICBzZXRJc1VwbG9hZGluZyhmYWxzZSlcblxuICAgICAgY29uc3QgcmVtYWluaW5nRm9ybXMgPSBbXVxuXG4gICAgICBjdXJyZW50Rm9ybXMuZm9yRWFjaCgoeyBlcnJvckNvdW50IH0sIGkpID0+IHtcbiAgICAgICAgaWYgKGVycm9yQ291bnQpIHtcbiAgICAgICAgICByZW1haW5pbmdGb3Jtcy5wdXNoKGN1cnJlbnRGb3Jtc1tpXSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgc3VjY2Vzc0NvdW50ID0gTWF0aC5tYXgoMCwgY3VycmVudEZvcm1zLmxlbmd0aCAtIHJlbWFpbmluZ0Zvcm1zLmxlbmd0aClcbiAgICAgIGNvbnN0IGVycm9yQ291bnQgPSBjdXJyZW50Rm9ybXMubGVuZ3RoIC0gc3VjY2Vzc0NvdW50XG5cbiAgICAgIGlmIChzdWNjZXNzQ291bnQpIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcyhgU3VjY2Vzc2Z1bGx5IHNhdmVkICR7c3VjY2Vzc0NvdW50fSBmaWxlc2ApXG4gICAgICAgIHNldFN1Y2Nlc3NmdWxseVVwbG9hZGVkKHRydWUpXG5cbiAgICAgICAgaWYgKHR5cGVvZiBvblN1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvblN1Y2Nlc3MobmV3RG9jcywgZXJyb3JDb3VudClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JDb3VudCkge1xuICAgICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIHNhdmUgJHtlcnJvckNvdW50fSBmaWxlc2ApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZU1vZGFsKGRyYXdlclNsdWcpXG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ1JFUExBQ0UnLFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIGFjdGl2ZUluZGV4OiByZW1haW5pbmdGb3Jtcy5yZWR1Y2UoKGFjYywgeyBmb3JtSUQgfSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1JRCA9PT0gYWN0aXZlRm9ybUlEKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgfSwgMCksXG4gICAgICAgICAgZm9ybXM6IHJlbWFpbmluZ0Zvcm1zLFxuICAgICAgICAgIHRvdGFsRXJyb3JDb3VudDogcmVtYWluaW5nRm9ybXMucmVkdWNlKChhY2MsIHsgZXJyb3JDb3VudCB9KSA9PiBhY2MgKyBlcnJvckNvdW50LCAwKSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChyZW1haW5pbmdGb3Jtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2V0SW5pdGlhbEZpbGVzKHVuZGVmaW5lZClcbiAgICAgICAgc2V0SW5pdGlhbEZvcm1zKHVuZGVmaW5lZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGZvcm1zLFxuICAgICAgYWN0aXZlSW5kZXgsXG4gICAgICB0LFxuICAgICAgYWN0aW9uVVJMLFxuICAgICAgY29kZSxcbiAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgZ2V0VXBsb2FkSGFuZGxlcixcbiAgICAgIGdldEZvcm1TdGF0ZSxcbiAgICAgIGRvY1Blcm1pc3Npb25zLFxuICAgICAgc2V0U3VjY2Vzc2Z1bGx5VXBsb2FkZWQsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBjbG9zZU1vZGFsLFxuICAgICAgZHJhd2VyU2x1ZyxcbiAgICAgIHNldEluaXRpYWxGaWxlcyxcbiAgICAgIHNldEluaXRpYWxGb3JtcyxcbiAgICBdLFxuICApXG5cbiAgY29uc3QgYnVsa1VwZGF0ZUZvcm0gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICBhc3luYyAodXBkYXRlZEZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGFmdGVyU3RhdGVVcGRhdGU/OiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHVwZGF0ZWRGaWVsZHMpLmZvckVhY2goKFtwYXRoLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAoZm9ybXNbaV0uZm9ybVN0YXRlW3BhdGhdKSB7XG4gICAgICAgICAgICBmb3Jtc1tpXS5mb3JtU3RhdGVbcGF0aF0udmFsdWUgPSB2YWx1ZVxuXG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgIHR5cGU6ICdVUERBVEVfRk9STScsXG4gICAgICAgICAgICAgIGVycm9yQ291bnQ6IGZvcm1zW2ldLmVycm9yQ291bnQsXG4gICAgICAgICAgICAgIGZvcm1TdGF0ZTogZm9ybXNbaV0uZm9ybVN0YXRlLFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0eXBlb2YgYWZ0ZXJTdGF0ZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGFmdGVyU3RhdGVVcGRhdGUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc1N1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IHsgc3RhdGUgfSA9IGF3YWl0IGdldEZvcm1TdGF0ZSh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIGRvY1Blcm1pc3Npb25zLFxuICAgICAgICAgICAgZG9jUHJlZmVyZW5jZXM6IG51bGwsXG4gICAgICAgICAgICBmb3JtU3RhdGU6IGZvcm1zW2ldLmZvcm1TdGF0ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICAgICAgICBzY2hlbWFQYXRoOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3QgbmV3Rm9ybUVycm9yQ291bnQgPSBPYmplY3QudmFsdWVzKHN0YXRlKS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCB2YWx1ZSkgPT4gKHZhbHVlPy52YWxpZCA9PT0gZmFsc2UgPyBhY2MgKyAxIDogYWNjKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ1VQREFURV9GT1JNJyxcbiAgICAgICAgICAgIGVycm9yQ291bnQ6IG5ld0Zvcm1FcnJvckNvdW50LFxuICAgICAgICAgICAgZm9ybVN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb2xsZWN0aW9uU2x1ZywgZG9jUGVybWlzc2lvbnMsIGZvcm1zLCBnZXRGb3JtU3RhdGUsIGhhc1N1Ym1pdHRlZF0sXG4gIClcblxuICBjb25zdCB1cGRhdGVVcGxvYWRFZGl0cyA9IFJlYWN0LnVzZUNhbGxiYWNrPEZvcm1zTWFuYWdlckNvbnRleHRbJ3VwZGF0ZVVwbG9hZEVkaXRzJ10+KFxuICAgICh1cGxvYWRFZGl0cykgPT4ge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnVVBEQVRFX0ZPUk0nLFxuICAgICAgICBlcnJvckNvdW50OiBmb3Jtc1thY3RpdmVJbmRleF0uZXJyb3JDb3VudCxcbiAgICAgICAgZm9ybVN0YXRlOiBmb3Jtc1thY3RpdmVJbmRleF0uZm9ybVN0YXRlLFxuICAgICAgICBpbmRleDogYWN0aXZlSW5kZXgsXG4gICAgICAgIHVwbG9hZEVkaXRzLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthY3RpdmVJbmRleCwgZm9ybXNdLFxuICApXG5cbiAgY29uc3QgcmVzZXRVcGxvYWRFZGl0cyA9IFJlYWN0LnVzZUNhbGxiYWNrPEZvcm1zTWFuYWdlckNvbnRleHRbJ3Jlc2V0VXBsb2FkRWRpdHMnXT4oKCkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdSRVBMQUNFJyxcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIGZvcm1zOiBmb3Jtcy5tYXAoKGZvcm0pID0+ICh7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICB1cGxvYWRFZGl0czoge30sXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfSwgW2Zvcm1zXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29sbGVjdGlvblNsdWcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWhhc0luaXRpYWxpemVkU3RhdGUpIHtcbiAgICAgIHZvaWQgaW5pdGlhbGl6ZVNoYXJlZEZvcm1TdGF0ZSgpXG4gICAgfVxuXG4gICAgaWYgKCFoYXNJbml0aWFsaXplZERvY1Blcm1pc3Npb25zKSB7XG4gICAgICB2b2lkIGluaXRpYWxpemVTaGFyZWREb2NQZXJtaXNzaW9ucygpXG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxGaWxlcyB8fCBpbml0aWFsRm9ybXMpIHtcbiAgICAgIGlmICghaGFzSW5pdGlhbGl6ZWRTdGF0ZSB8fCAhaGFzSW5pdGlhbGl6ZWREb2NQZXJtaXNzaW9ucykge1xuICAgICAgICBzZXRJc0luaXRpYWxpemluZyh0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SXNJbml0aWFsaXppbmcoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaGFzSW5pdGlhbGl6ZWRTdGF0ZSAmJlxuICAgICAgKGluaXRpYWxGb3Jtcz8ubGVuZ3RoIHx8IGluaXRpYWxGaWxlcz8ubGVuZ3RoKSAmJlxuICAgICAgIWhhc0luaXRpYWxpemVkV2l0aEZpbGVzLmN1cnJlbnRcbiAgICApIHtcbiAgICAgIGlmIChpbml0aWFsRm9ybXM/Lmxlbmd0aCkge1xuICAgICAgICB2b2lkIGFkZEluaXRpYWxGb3Jtcyhpbml0aWFsRm9ybXMpXG4gICAgICB9XG4gICAgICBpZiAoaW5pdGlhbEZpbGVzPy5sZW5ndGgpIHtcbiAgICAgICAgdm9pZCBhZGRGaWxlc0VmZmVjdEV2ZW50KGluaXRpYWxGaWxlcylcbiAgICAgIH1cbiAgICAgIGhhc0luaXRpYWxpemVkV2l0aEZpbGVzLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIHJldHVyblxuICB9LCBbXG4gICAgaW5pdGlhbEZpbGVzLFxuICAgIGluaXRpYWxpemVTaGFyZWRGb3JtU3RhdGUsXG4gICAgaW5pdGlhbGl6ZVNoYXJlZERvY1Blcm1pc3Npb25zLFxuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGhhc0luaXRpYWxpemVkU3RhdGUsXG4gICAgaGFzSW5pdGlhbGl6ZWREb2NQZXJtaXNzaW9ucyxcbiAgICBpbml0aWFsRm9ybXMsXG4gIF0pXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dFxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgYWN0aXZlSW5kZXg6IHN0YXRlLmFjdGl2ZUluZGV4LFxuICAgICAgICBhZGRGaWxlcyxcbiAgICAgICAgYnVsa1VwZGF0ZUZvcm0sXG4gICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICBkb2NQZXJtaXNzaW9ucyxcbiAgICAgICAgZG9jdW1lbnRTbG90cyxcbiAgICAgICAgZm9ybXMsXG4gICAgICAgIGdldEZvcm1EYXRhUmVmLFxuICAgICAgICBoYXNQdWJsaXNoUGVybWlzc2lvbixcbiAgICAgICAgaGFzU2F2ZVBlcm1pc3Npb24sXG4gICAgICAgIGhhc1N1Ym1pdHRlZCxcbiAgICAgICAgaXNJbml0aWFsaXppbmcsXG4gICAgICAgIHJlbW92ZUZpbGUsXG4gICAgICAgIHJlc2V0VXBsb2FkRWRpdHMsXG4gICAgICAgIHNhdmVBbGxEb2NzLFxuICAgICAgICBzZXRBY3RpdmVJbmRleCxcbiAgICAgICAgc2V0Rm9ybVRvdGFsRXJyb3JDb3VudCxcbiAgICAgICAgdG90YWxFcnJvckNvdW50LFxuICAgICAgICB1cGRhdGVVcGxvYWRFZGl0cyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2lzVXBsb2FkaW5nICYmIChcbiAgICAgICAgPExvYWRpbmdPdmVybGF5XG4gICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb249XCIyNTBtc1wiXG4gICAgICAgICAgbG9hZGluZ1RleHQ9e2xvYWRpbmdUZXh0fVxuICAgICAgICAgIG92ZXJsYXlUeXBlPVwiZnVsbHNjcmVlblwiXG4gICAgICAgICAgc2hvd1xuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbnRleHQ+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZvcm1zTWFuYWdlcigpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZShDb250ZXh0KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uU2x1ZywgRm9ybVN0YXRlIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgc2VyaWFsaXplIH0gZnJvbSAnb2JqZWN0LXRvLWZvcm1kYXRhJ1xuaW1wb3J0IHsgcmVkdWNlRmllbGRzVG9WYWx1ZXMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcblxuaW1wb3J0IHR5cGUgeyBVcGxvYWRIYW5kbGVyc0NvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVXBsb2FkSGFuZGxlcnMvaW5kZXguanMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGb3JtRGF0YShcbiAgZm9ybVN0YXRlOiBGb3JtU3RhdGUgPSB7fSxcbiAgb3ZlcnJpZGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gIGNvbGxlY3Rpb25TbHVnOiBDb2xsZWN0aW9uU2x1ZyxcbiAgdXBsb2FkSGFuZGxlcjogUmV0dXJuVHlwZTxVcGxvYWRIYW5kbGVyc0NvbnRleHRbJ2dldFVwbG9hZEhhbmRsZXInXT4sXG4pIHtcbiAgY29uc3QgZGF0YSA9IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGZvcm1TdGF0ZSwgdHJ1ZSlcbiAgbGV0IGZpbGUgPSBkYXRhPy5maWxlXG5cbiAgaWYgKGZpbGUpIHtcbiAgICBkZWxldGUgZGF0YS5maWxlXG4gIH1cblxuICBpZiAoZmlsZSAmJiB0eXBlb2YgdXBsb2FkSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxldCBmaWxlbmFtZSA9IGZpbGUubmFtZVxuXG4gICAgY29uc3QgY2xpZW50VXBsb2FkQ29udGV4dCA9IGF3YWl0IHVwbG9hZEhhbmRsZXIoe1xuICAgICAgZmlsZSxcbiAgICAgIHVwZGF0ZUZpbGVuYW1lOiAodmFsdWUpID0+IHtcbiAgICAgICAgZmlsZW5hbWUgPSB2YWx1ZVxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgZmlsZSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGNsaWVudFVwbG9hZENvbnRleHQsXG4gICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgbWltZVR5cGU6IGZpbGUudHlwZSxcbiAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgZGF0YVdpdGhPdmVycmlkZXMgPSB7XG4gICAgLi4uZGF0YSxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH1cblxuICBjb25zdCBkYXRhVG9TZXJpYWxpemUgPSB7XG4gICAgX3BheWxvYWQ6IEpTT04uc3RyaW5naWZ5KGRhdGFXaXRoT3ZlcnJpZGVzKSxcbiAgICBmaWxlLFxuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZShkYXRhVG9TZXJpYWxpemUsIHsgaW5kaWNlczogdHJ1ZSwgbnVsbHNBc1VuZGVmaW5lZHM6IGZhbHNlIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEZvcm1TdGF0ZSwgVXBsb2FkRWRpdHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuXG5pbXBvcnQgdHlwZSB7IEluaXRpYWxGb3JtcyB9IGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB0eXBlIFN0YXRlID0ge1xuICBhY3RpdmVJbmRleDogbnVtYmVyXG4gIGZvcm1zOiB7XG4gICAgZXJyb3JDb3VudDogbnVtYmVyXG4gICAgZm9ybUlEOiBzdHJpbmdcbiAgICBmb3JtU3RhdGU6IEZvcm1TdGF0ZVxuICAgIHVwbG9hZEVkaXRzPzogVXBsb2FkRWRpdHNcbiAgfVtdXG4gIHRvdGFsRXJyb3JDb3VudDogbnVtYmVyXG59XG5cbnR5cGUgQWN0aW9uID1cbiAgfCB7XG4gICAgICBjb3VudDogbnVtYmVyXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgICB0eXBlOiAnVVBEQVRFX0VSUk9SX0NPVU5UJ1xuICAgIH1cbiAgfCB7XG4gICAgICBlcnJvckNvdW50OiBudW1iZXJcbiAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlXG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgICB0eXBlOiAnVVBEQVRFX0ZPUk0nXG4gICAgICB1cGRhdGVkRmllbGRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIHVwbG9hZEVkaXRzPzogVXBsb2FkRWRpdHNcbiAgICB9XG4gIHwge1xuICAgICAgZm9ybXM6IEluaXRpYWxGb3Jtc1xuICAgICAgdHlwZTogJ0FERF9GT1JNUydcbiAgICB9XG4gIHwge1xuICAgICAgaW5kZXg6IG51bWJlclxuICAgICAgdHlwZTogJ1JFTU9WRV9GT1JNJ1xuICAgIH1cbiAgfCB7XG4gICAgICBpbmRleDogbnVtYmVyXG4gICAgICB0eXBlOiAnU0VUX0FDVElWRV9JTkRFWCdcbiAgICB9XG4gIHwge1xuICAgICAgc3RhdGU6IFBhcnRpYWw8U3RhdGU+XG4gICAgICB0eXBlOiAnUkVQTEFDRSdcbiAgICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3Jtc01hbmFnZW1lbnRSZWR1Y2VyKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiBTdGF0ZSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdBRERfRk9STVMnOiB7XG4gICAgICBjb25zdCBuZXdGb3JtczogU3RhdGVbJ2Zvcm1zJ10gPSBbXVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3Rpb24uZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmV3Rm9ybXNbaV0gPSB7XG4gICAgICAgICAgZXJyb3JDb3VudDogMCxcbiAgICAgICAgICBmb3JtSUQ6IGFjdGlvbi5mb3Jtc1tpXS5mb3JtSUQgPz8gKGNyeXB0by5yYW5kb21VVUlEID8gY3J5cHRvLnJhbmRvbVVVSUQoKSA6IHV1aWR2NCgpKSxcbiAgICAgICAgICBmb3JtU3RhdGU6IHtcbiAgICAgICAgICAgIC4uLihhY3Rpb24uZm9ybXNbaV0uaW5pdGlhbFN0YXRlIHx8IHt9KSxcbiAgICAgICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBhY3Rpb24uZm9ybXNbaV0uZmlsZSxcbiAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBhY3Rpb24uZm9ybXNbaV0uZmlsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGxvYWRFZGl0czoge30sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICBmb3JtczogWy4uLm5ld0Zvcm1zLCAuLi5zdGF0ZS5mb3Jtc10sXG4gICAgICB9XG4gICAgfVxuICAgIGNhc2UgJ1JFTU9WRV9GT1JNJzoge1xuICAgICAgY29uc3QgcmVtYWluaW5nRm9ybVN0YXRlcyA9IFsuLi5zdGF0ZS5mb3Jtc11cbiAgICAgIGNvbnN0IFtyZW1vdmVkRm9ybV0gPSByZW1haW5pbmdGb3JtU3RhdGVzLnNwbGljZShhY3Rpb24uaW5kZXgsIDEpXG5cbiAgICAgIGNvbnN0IGFmZmVjdGVkQnlTaGlmdCA9IHN0YXRlLmFjdGl2ZUluZGV4ID49IGFjdGlvbi5pbmRleFxuICAgICAgY29uc3QgbmV4dEluZGV4ID1cbiAgICAgICAgc3RhdGUuYWN0aXZlSW5kZXggPT09IGFjdGlvbi5pbmRleFxuICAgICAgICAgID8gYWN0aW9uLmluZGV4XG4gICAgICAgICAgOiBhZmZlY3RlZEJ5U2hpZnRcbiAgICAgICAgICAgID8gc3RhdGUuYWN0aXZlSW5kZXggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLmFjdGl2ZUluZGV4XG4gICAgICBjb25zdCBib3VuZGVkQWN0aXZlSW5kZXggPSBNYXRoLm1pbihyZW1haW5pbmdGb3JtU3RhdGVzLmxlbmd0aCAtIDEsIG5leHRJbmRleClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZUluZGV4OiBhZmZlY3RlZEJ5U2hpZnQgPyBib3VuZGVkQWN0aXZlSW5kZXggOiBzdGF0ZS5hY3RpdmVJbmRleCxcbiAgICAgICAgZm9ybXM6IHJlbWFpbmluZ0Zvcm1TdGF0ZXMsXG4gICAgICAgIHRvdGFsRXJyb3JDb3VudDogc3RhdGUudG90YWxFcnJvckNvdW50IC0gcmVtb3ZlZEZvcm0uZXJyb3JDb3VudCxcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSAnUkVQTEFDRSc6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAuLi5hY3Rpb24uc3RhdGUsXG4gICAgICB9XG4gICAgfVxuICAgIGNhc2UgJ1NFVF9BQ1RJVkVfSU5ERVgnOiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlSW5kZXg6IGFjdGlvbi5pbmRleCxcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSAnVVBEQVRFX0VSUk9SX0NPVU5UJzoge1xuICAgICAgY29uc3QgZm9ybXMgPSBbLi4uc3RhdGUuZm9ybXNdXG4gICAgICBmb3Jtc1thY3Rpb24uaW5kZXhdLmVycm9yQ291bnQgPSBhY3Rpb24uY291bnRcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZvcm1zLFxuICAgICAgICB0b3RhbEVycm9yQ291bnQ6IGZvcm1zLnJlZHVjZSgoYWNjLCBmb3JtKSA9PiBhY2MgKyBmb3JtLmVycm9yQ291bnQsIDApLFxuICAgICAgfVxuICAgIH1cbiAgICBjYXNlICdVUERBVEVfRk9STSc6IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRGb3JtcyA9IFsuLi5zdGF0ZS5mb3Jtc11cbiAgICAgIHVwZGF0ZWRGb3Jtc1thY3Rpb24uaW5kZXhdLmVycm9yQ291bnQgPSBhY3Rpb24uZXJyb3JDb3VudFxuXG4gICAgICAvLyBNZXJnZSB0aGUgZXhpc3RpbmcgZm9ybVN0YXRlIHdpdGggdGhlIG5ldyBmb3JtU3RhdGVcbiAgICAgIHVwZGF0ZWRGb3Jtc1thY3Rpb24uaW5kZXhdID0ge1xuICAgICAgICAuLi51cGRhdGVkRm9ybXNbYWN0aW9uLmluZGV4XSxcbiAgICAgICAgZm9ybVN0YXRlOiB7XG4gICAgICAgICAgLi4udXBkYXRlZEZvcm1zW2FjdGlvbi5pbmRleF0uZm9ybVN0YXRlLFxuICAgICAgICAgIC4uLmFjdGlvbi5mb3JtU3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHVwbG9hZEVkaXRzOiB7XG4gICAgICAgICAgLi4udXBkYXRlZEZvcm1zW2FjdGlvbi5pbmRleF0udXBsb2FkRWRpdHMsXG4gICAgICAgICAgLi4uYWN0aW9uLnVwbG9hZEVkaXRzLFxuICAgICAgICB9LFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZm9ybXM6IHVwZGF0ZWRGb3JtcyxcbiAgICAgICAgdG90YWxFcnJvckNvdW50OiB1cGRhdGVkRm9ybXMucmVkdWNlKChhY2MsIGZvcm0pID0+IGFjYyArIGZvcm0uZXJyb3JDb3VudCwgMCksXG4gICAgICB9XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50Q29sbGVjdGlvbkNvbmZpZywgU2VsZWN0VHlwZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB1bmZsYXR0ZW4gfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IEZvcm1Qcm9wcyB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL0Zvcm0vaW5kZXguanMnXG5pbXBvcnQgdHlwZSB7IE9uRmllbGRTZWxlY3QgfSBmcm9tICcuLi8uLi9GaWVsZFNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB0eXBlIHsgRmllbGRPcHRpb24gfSBmcm9tICcuLi8uLi9GaWVsZFNlbGVjdC9yZWR1Y2VGaWVsZE9wdGlvbnMuanMnXG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vRm9ybXNNYW5hZ2VyL3JlZHVjZXIuanMnXG5pbXBvcnQgdHlwZSB7IEVkaXRNYW55QnVsa1VwbG9hZHNQcm9wcyB9IGZyb20gJy4vaW5kZXguanMnXG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9Gb3JtL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRQYXRoQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgUmVuZGVyRmllbGQgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9SZW5kZXJGaWVsZHMvUmVuZGVyRmllbGQuanMnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VTZXJ2ZXJGdW5jdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvU2VydmVyRnVuY3Rpb25zL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBhYm9ydEFuZElnbm9yZSwgaGFuZGxlQWJvcnRSZWYgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvYWJvcnRBbmRJZ25vcmUuanMnXG5pbXBvcnQgeyBGaWVsZFNlbGVjdCB9IGZyb20gJy4uLy4uL0ZpZWxkU2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybXNNYW5hZ2VyIH0gZnJvbSAnLi4vRm9ybXNNYW5hZ2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgYmFzZUNsYXNzIH0gZnJvbSAnLi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0ICcuLi8uLi8uLi9mb3Jtcy9SZW5kZXJGaWVsZHMvaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IEVkaXRNYW55QnVsa1VwbG9hZHNEcmF3ZXJDb250ZW50OiBSZWFjdC5GQzxcbiAge1xuICAgIGNvbGxlY3Rpb246IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgICBkcmF3ZXJTbHVnOiBzdHJpbmdcbiAgICBmb3JtczogU3RhdGVbJ2Zvcm1zJ11cbiAgfSAmIEVkaXRNYW55QnVsa1VwbG9hZHNQcm9wc1xuPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29sbGVjdGlvbjogeyBmaWVsZHMsIGxhYmVsczogeyBwbHVyYWwsIHNpbmd1bGFyIH0gfSA9IHt9LFxuICAgIGNvbGxlY3Rpb24sXG4gICAgZHJhd2VyU2x1ZyxcbiAgICBmb3JtcyxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW2lzSW5pdGlhbGl6aW5nLCBzZXRJc0luaXRpYWxpemluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyBidWxrVXBkYXRlRm9ybSB9ID0gdXNlRm9ybXNNYW5hZ2VyKClcbiAgY29uc3QgeyBnZXRGb3JtU3RhdGUgfSA9IHVzZVNlcnZlckZ1bmN0aW9ucygpXG4gIGNvbnN0IGFib3J0Rm9ybVN0YXRlUmVmID0gUmVhY3QudXNlUmVmPEFib3J0Q29udHJvbGxlcj4obnVsbClcblxuICBjb25zdCBbc2VsZWN0ZWRGaWVsZHMsIHNldFNlbGVjdGVkRmllbGRzXSA9IHVzZVN0YXRlPEZpZWxkT3B0aW9uW10+KFtdKVxuICBjb25zdCBjb2xsZWN0aW9uUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucz8uY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uLnNsdWddXG5cbiAgY29uc3Qgc2VsZWN0ID0gdXNlTWVtbzxTZWxlY3RUeXBlPigoKSA9PiB7XG4gICAgcmV0dXJuIHVuZmxhdHRlbihcbiAgICAgIHNlbGVjdGVkRmllbGRzLnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcbiAgICAgICAgYWNjW29wdGlvbi52YWx1ZS5wYXRoXSA9IHRydWVcbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwge30gYXMgU2VsZWN0VHlwZSksXG4gICAgKVxuICB9LCBbc2VsZWN0ZWRGaWVsZHNdKVxuXG4gIGNvbnN0IG9uQ2hhbmdlOiBGb3JtUHJvcHNbJ29uQ2hhbmdlJ11bMF0gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoeyBmb3JtU3RhdGU6IHByZXZGb3JtU3RhdGUsIHN1Ym1pdHRlZCB9KSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gaGFuZGxlQWJvcnRSZWYoYWJvcnRGb3JtU3RhdGVSZWYpXG5cbiAgICAgIGNvbnN0IHsgc3RhdGUgfSA9IGF3YWl0IGdldEZvcm1TdGF0ZSh7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnOiBjb2xsZWN0aW9uLnNsdWcsXG4gICAgICAgIGRvY1Blcm1pc3Npb25zOiBjb2xsZWN0aW9uUGVybWlzc2lvbnMsXG4gICAgICAgIGRvY1ByZWZlcmVuY2VzOiBudWxsLFxuICAgICAgICBmb3JtU3RhdGU6IHByZXZGb3JtU3RhdGUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvbGxlY3Rpb24uc2x1ZyxcbiAgICAgICAgc2VsZWN0LFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBza2lwVmFsaWRhdGlvbjogIXN1Ym1pdHRlZCxcbiAgICAgIH0pXG5cbiAgICAgIGFib3J0Rm9ybVN0YXRlUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0sXG4gICAgW2dldEZvcm1TdGF0ZSwgY29sbGVjdGlvbiwgY29sbGVjdGlvblBlcm1pc3Npb25zLCBzZWxlY3RdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhYm9ydEZvcm1TdGF0ZSA9IGFib3J0Rm9ybVN0YXRlUmVmLmN1cnJlbnRcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhYm9ydEFuZElnbm9yZShhYm9ydEZvcm1TdGF0ZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdDogRm9ybVByb3BzWydvblN1Ym1pdCddID0gdXNlQ2FsbGJhY2soXG4gICAgKGZvcm1TdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgcGFpcmVkRGF0YSA9IHNlbGVjdGVkRmllbGRzLnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TdGF0ZVtvcHRpb24udmFsdWUucGF0aF0pIHtcbiAgICAgICAgICBhY2Nbb3B0aW9uLnZhbHVlLnBhdGhdID0gZm9ybVN0YXRlW29wdGlvbi52YWx1ZS5wYXRoXS52YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIHt9KVxuXG4gICAgICB2b2lkIGJ1bGtVcGRhdGVGb3JtKHBhaXJlZERhdGEsICgpID0+IGNsb3NlTW9kYWwoZHJhd2VyU2x1ZykpXG4gICAgfSxcbiAgICBbY2xvc2VNb2RhbCwgZHJhd2VyU2x1ZywgYnVsa1VwZGF0ZUZvcm0sIHNlbGVjdGVkRmllbGRzXSxcbiAgKVxuXG4gIGNvbnN0IG9uRmllbGRTZWxlY3QgPSB1c2VDYWxsYmFjazxPbkZpZWxkU2VsZWN0PihcbiAgICBhc3luYyAoeyBkaXNwYXRjaEZpZWxkcywgZm9ybVN0YXRlLCBzZWxlY3RlZCB9KSA9PiB7XG4gICAgICBzZXRJc0luaXRpYWxpemluZyh0cnVlKVxuXG4gICAgICBzZXRTZWxlY3RlZEZpZWxkcyhzZWxlY3RlZCB8fCBbXSlcblxuICAgICAgY29uc3QgeyBzdGF0ZSB9ID0gYXdhaXQgZ2V0Rm9ybVN0YXRlKHtcbiAgICAgICAgY29sbGVjdGlvblNsdWc6IGNvbGxlY3Rpb24uc2x1ZyxcbiAgICAgICAgZG9jUGVybWlzc2lvbnM6IGNvbGxlY3Rpb25QZXJtaXNzaW9ucyxcbiAgICAgICAgZG9jUHJlZmVyZW5jZXM6IG51bGwsXG4gICAgICAgIGZvcm1TdGF0ZSxcbiAgICAgICAgb3BlcmF0aW9uOiAndXBkYXRlJyxcbiAgICAgICAgc2NoZW1hUGF0aDogY29sbGVjdGlvbi5zbHVnLFxuICAgICAgICBzZWxlY3Q6IHVuZmxhdHRlbihcbiAgICAgICAgICBzZWxlY3RlZC5yZWR1Y2UoKGFjYywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBhY2Nbb3B0aW9uLnZhbHVlLnBhdGhdID0gdHJ1ZVxuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgIH0sIHt9IGFzIFNlbGVjdFR5cGUpLFxuICAgICAgICApLFxuICAgICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgdHlwZTogJ1VQREFURV9NQU5ZJyxcbiAgICAgICAgZm9ybVN0YXRlOiBzdGF0ZSxcbiAgICAgIH0pXG5cbiAgICAgIHNldElzSW5pdGlhbGl6aW5nKGZhbHNlKVxuICAgIH0sXG4gICAgW2dldEZvcm1TdGF0ZSwgY29sbGVjdGlvbiwgY29sbGVjdGlvblBlcm1pc3Npb25zXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX21haW5gfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJgfT5cbiAgICAgICAgPGgyIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyX190aXRsZWB9PlxuICAgICAgICAgIHt0KCdnZW5lcmFsOmVkaXRpbmdMYWJlbCcsIHtcbiAgICAgICAgICAgIGNvdW50OiBmb3Jtcy5sZW5ndGgsXG4gICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oZm9ybXMubGVuZ3RoID4gMSA/IHBsdXJhbCA6IHNpbmd1bGFyLCBpMThuKSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6Y2xvc2UnKX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcl9fY2xvc2VgfVxuICAgICAgICAgIGlkPXtgY2xvc2UtZHJhd2VyX18ke2RyYXdlclNsdWd9YH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZU1vZGFsKGRyYXdlclNsdWcpfVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8Rm9ybVxuICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Zvcm1gfVxuICAgICAgICBpc0luaXRpYWxpemluZz17aXNJbml0aWFsaXppbmd9XG4gICAgICAgIG9uQ2hhbmdlPXtbb25DaGFuZ2VdfVxuICAgICAgICBvblN1Ym1pdD17aGFuZGxlU3VibWl0fVxuICAgICAgPlxuICAgICAgICA8RmllbGRTZWxlY3RcbiAgICAgICAgICBmaWVsZHM9e2ZpZWxkc31cbiAgICAgICAgICBvbkNoYW5nZT17b25GaWVsZFNlbGVjdH1cbiAgICAgICAgICBwZXJtaXNzaW9ucz17Y29sbGVjdGlvblBlcm1pc3Npb25zLmZpZWxkc31cbiAgICAgICAgLz5cbiAgICAgICAge3NlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZW5kZXItZmllbGRzXCI+XG4gICAgICAgICAgICA8RmllbGRQYXRoQ29udGV4dCB2YWx1ZT17dW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAge3NlbGVjdGVkRmllbGRzLm1hcCgob3B0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgZmllbGQsIGZpZWxkUGVybWlzc2lvbnMsIHBhdGggfSxcbiAgICAgICAgICAgICAgICB9ID0gb3B0aW9uXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPFJlbmRlckZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudEZpZWxkQ29uZmlnPXtmaWVsZH1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXhQYXRoPVwiXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtwYXRofS0ke2l9YH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aD1cIlwiXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9XCJcIlxuICAgICAgICAgICAgICAgICAgICBwYXRoPXtwYXRofVxuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucz17ZmllbGRQZXJtaXNzaW9uc31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvRmllbGRQYXRoQ29udGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NpZGViYXItd3JhcGB9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zaWRlYmFyYH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2lkZWJhci1zdGlja3ktd3JhcGB9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZG9jdW1lbnQtYWN0aW9uc2B9PlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiPnt0KCdnZW5lcmFsOmFwcGx5Q2hhbmdlcycpfTwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRm9ybT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkLCBGb3JtU3RhdGUsIFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBGaWVsZEFjdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vdHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7IEZpZWxkT3B0aW9uIH0gZnJvbSAnLi9yZWR1Y2VGaWVsZE9wdGlvbnMuanMnXG5cbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi9maWVsZHMvRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGZpbHRlck91dFVwbG9hZEZpZWxkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9maWx0ZXJPdXRVcGxvYWRGaWVsZHMuanMnXG5pbXBvcnQgeyBSZWFjdFNlbGVjdCB9IGZyb20gJy4uL1JlYWN0U2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVkdWNlRmllbGRPcHRpb25zIH0gZnJvbSAnLi9yZWR1Y2VGaWVsZE9wdGlvbnMuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZpZWxkLXNlbGVjdCdcblxuZXhwb3J0IHR5cGUgT25GaWVsZFNlbGVjdCA9ICh7XG4gIGRpc3BhdGNoRmllbGRzLFxuICBmb3JtU3RhdGUsXG4gIHNlbGVjdGVkLFxufToge1xuICBkaXNwYXRjaEZpZWxkczogUmVhY3QuRGlzcGF0Y2g8RmllbGRBY3Rpb24+XG4gIGZvcm1TdGF0ZTogRm9ybVN0YXRlXG4gIHNlbGVjdGVkOiBGaWVsZE9wdGlvbltdXG59KSA9PiB2b2lkXG5cbmV4cG9ydCB0eXBlIEZpZWxkU2VsZWN0UHJvcHMgPSB7XG4gIHJlYWRvbmx5IGZpZWxkczogQ2xpZW50RmllbGRbXVxuICByZWFkb25seSBvbkNoYW5nZTogT25GaWVsZFNlbGVjdFxuICByZWFkb25seSBwZXJtaXNzaW9uczpcbiAgICB8IHtcbiAgICAgICAgW2ZpZWxkTmFtZTogc3RyaW5nXTogU2FuaXRpemVkRmllbGRQZXJtaXNzaW9uc1xuICAgICAgfVxuICAgIHwgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9uc1xufVxuXG5leHBvcnQgY29uc3QgRmllbGRTZWxlY3Q6IFJlYWN0LkZDPEZpZWxkU2VsZWN0UHJvcHM+ID0gKHsgZmllbGRzLCBvbkNoYW5nZSwgcGVybWlzc2lvbnMgfSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBkaXNwYXRjaEZpZWxkcywgZ2V0RmllbGRzIH0gPSB1c2VGb3JtKClcblxuICBjb25zdCBbb3B0aW9uc10gPSB1c2VTdGF0ZTxGaWVsZE9wdGlvbltdPigoKSA9PlxuICAgIHJlZHVjZUZpZWxkT3B0aW9ucyh7XG4gICAgICBmaWVsZHM6IGZpbHRlck91dFVwbG9hZEZpZWxkcyhmaWVsZHMpLFxuICAgICAgZm9ybVN0YXRlOiBnZXRGaWVsZHMoKSxcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgIH0pLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIDxGaWVsZExhYmVsIGxhYmVsPXt0KCdmaWVsZHM6c2VsZWN0RmllbGRzVG9FZGl0Jyl9IC8+XG4gICAgICA8UmVhY3RTZWxlY3RcbiAgICAgICAgZ2V0T3B0aW9uVmFsdWU9eyhvcHRpb24pID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbi52YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3BhdGgnIGluIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udmFsdWUucGF0aClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udmFsdWUpXG4gICAgICAgIH19XG4gICAgICAgIGlzTXVsdGlcbiAgICAgICAgb25DaGFuZ2U9eyhzZWxlY3RlZDogRmllbGRPcHRpb25bXSkgPT5cbiAgICAgICAgICBvbkNoYW5nZSh7IGRpc3BhdGNoRmllbGRzLCBmb3JtU3RhdGU6IGdldEZpZWxkcygpLCBzZWxlY3RlZCB9KVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IEZpZWxkV2l0aFBhdGhDbGllbnQgfSBmcm9tICdwYXlsb2FkJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyT3V0VXBsb2FkRmllbGRzID0gKGZpZWxkczogRmllbGRXaXRoUGF0aENsaWVudFtdKTogRmllbGRXaXRoUGF0aENsaWVudFtdID0+IHtcbiAgLy8gTGlzdCBvZiByZXNlcnZlZCB1cGxvYWQgZmllbGQgbmFtZXNcbiAgY29uc3QgYmFzZVVwbG9hZEZpZWxkTmFtZXMgPSBbXG4gICAgJ2ZpbGUnLFxuICAgICdtaW1lVHlwZScsXG4gICAgJ3RodW1ibmFpbFVSTCcsXG4gICAgJ3dpZHRoJyxcbiAgICAnaGVpZ2h0JyxcbiAgICAnZmlsZXNpemUnLFxuICAgICdmaWxlbmFtZScsXG4gICAgJ3VybCcsXG4gICAgJ2ZvY2FsWCcsXG4gICAgJ2ZvY2FsWScsXG4gICAgJ3NpemVzJyxcbiAgXVxuXG4gIHJldHVybiBmaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gIWJhc2VVcGxvYWRGaWVsZE5hbWVzLmluY2x1ZGVzKCduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lKSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2xpZW50RmllbGQsIEZvcm1TdGF0ZSwgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9ucyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7XG4gIGZpZWxkQWZmZWN0c0RhdGEsXG4gIGZpZWxkSGFzU3ViRmllbGRzLFxuICBmaWVsZElzSGlkZGVuT3JEaXNhYmxlZCxcbiAgZ2V0RmllbGRQZXJtaXNzaW9ucyxcbn0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbmltcG9ydCB7IGNyZWF0ZU5lc3RlZENsaWVudEZpZWxkUGF0aCB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY3JlYXRlTmVzdGVkQ2xpZW50RmllbGRQYXRoLmpzJ1xuaW1wb3J0IHsgY29tYmluZUZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29tYmluZUZpZWxkTGFiZWwuanMnXG5cbmV4cG9ydCB0eXBlIFNlbGVjdGVkRmllbGQgPSB7XG4gIGZpZWxkOiBDbGllbnRGaWVsZFxuICBmaWVsZFBlcm1pc3Npb25zOiBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zXG4gIHBhdGg6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBGaWVsZE9wdGlvbiA9IHtcbiAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZVxuICB2YWx1ZTogU2VsZWN0ZWRGaWVsZFxufVxuXG5leHBvcnQgY29uc3QgaWdub3JlRnJvbUJ1bGtFZGl0ID0gKGZpZWxkOiBDbGllbnRGaWVsZCk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihcbiAgICAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgfHwgZmllbGQudHlwZSA9PT0gJ3VpJykgJiZcbiAgICAgIChmaWVsZC5hZG1pbi5kaXNhYmxlQnVsa0VkaXQgfHxcbiAgICAgICAgZmllbGQudW5pcXVlIHx8XG4gICAgICAgIGZpZWxkSXNIaWRkZW5PckRpc2FibGVkKGZpZWxkKSB8fFxuICAgICAgICAoJ3JlYWRPbmx5JyBpbiBmaWVsZCAmJiBmaWVsZC5yZWFkT25seSkpLFxuICApXG5cbmV4cG9ydCBjb25zdCByZWR1Y2VGaWVsZE9wdGlvbnMgPSAoe1xuICBmaWVsZHMsXG4gIGZvcm1TdGF0ZSxcbiAgbGFiZWxQcmVmaXggPSBudWxsLFxuICBwYXJlbnRQYXRoID0gJycsXG4gIHBhdGggPSAnJyxcbiAgcGVybWlzc2lvbnMsXG59OiB7XG4gIHJlYWRvbmx5IGZpZWxkczogQ2xpZW50RmllbGRbXVxuICByZWFkb25seSBmb3JtU3RhdGU/OiBGb3JtU3RhdGVcbiAgcmVhZG9ubHkgbGFiZWxQcmVmaXg/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgcGFyZW50UGF0aD86IHN0cmluZ1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOlxuICAgIHwge1xuICAgICAgICBbZmllbGROYW1lOiBzdHJpbmddOiBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zXG4gICAgICB9XG4gICAgfCBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zXG59KTogRmllbGRPcHRpb25bXSA9PiB7XG4gIGlmICghZmllbGRzKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBjb25zdCBDdXN0b21MYWJlbCA9IGZvcm1TdGF0ZT8uW3BhdGhdPy5jdXN0b21Db21wb25lbnRzPy5MYWJlbFxuXG4gIHJldHVybiBmaWVsZHM/LnJlZHVjZSgoZmllbGRzVG9Vc2UsIGZpZWxkKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3BlcmF0aW9uOiBoYXNPcGVyYXRpb25QZXJtaXNzaW9uLFxuICAgICAgcGVybWlzc2lvbnM6IGZpZWxkUGVybWlzc2lvbnMsXG4gICAgICByZWFkOiBoYXNSZWFkUGVybWlzc2lvbixcbiAgICB9ID0gZ2V0RmllbGRQZXJtaXNzaW9ucyh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICBwYXJlbnROYW1lOiBwYXJlbnRQYXRoPy5pbmNsdWRlcygnLicpXG4gICAgICAgID8gcGFyZW50UGF0aC5zcGxpdCgnLicpW3BhcmVudFBhdGguc3BsaXQoJy4nKS5sZW5ndGggLSAxXVxuICAgICAgICA6IHBhcmVudFBhdGgsXG4gICAgICBwZXJtaXNzaW9ucyxcbiAgICB9KVxuXG4gICAgLy8gZXNjYXBlIGZvciBhIHZhcmlldHkgb2YgcmVhc29ucywgaW5jbHVkZSB1aSBmaWVsZHMgYXMgdGhleSBoYXZlIGBuYW1lYC5cbiAgICBpZiAoXG4gICAgICAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgfHwgZmllbGQudHlwZSA9PT0gJ3VpJykgJiZcbiAgICAgIChmaWVsZC5hZG1pbj8uZGlzYWJsZUJ1bGtFZGl0IHx8XG4gICAgICAgIGZpZWxkLnVuaXF1ZSB8fFxuICAgICAgICBmaWVsZElzSGlkZGVuT3JEaXNhYmxlZChmaWVsZCkgfHxcbiAgICAgICAgKCdyZWFkT25seScgaW4gZmllbGQgJiYgZmllbGQucmVhZE9ubHkpIHx8XG4gICAgICAgICFoYXNPcGVyYXRpb25QZXJtaXNzaW9uIHx8XG4gICAgICAgICFoYXNSZWFkUGVybWlzc2lvbilcbiAgICApIHtcbiAgICAgIHJldHVybiBmaWVsZHNUb1VzZVxuICAgIH1cblxuICAgIGlmICghKGZpZWxkLnR5cGUgPT09ICdhcnJheScgfHwgZmllbGQudHlwZSA9PT0gJ2Jsb2NrcycpICYmIGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmllbGRzVG9Vc2UsXG4gICAgICAgIC4uLnJlZHVjZUZpZWxkT3B0aW9ucyh7XG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgbGFiZWxQcmVmaXg6IGNvbWJpbmVGaWVsZExhYmVsKHsgQ3VzdG9tTGFiZWwsIGZpZWxkLCBwcmVmaXg6IGxhYmVsUHJlZml4IH0pLFxuICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgcGF0aDogY3JlYXRlTmVzdGVkQ2xpZW50RmllbGRQYXRoKHBhdGgsIGZpZWxkKSxcbiAgICAgICAgICBwZXJtaXNzaW9uczogZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgfSksXG4gICAgICBdXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJyAmJiAndGFicycgaW4gZmllbGQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmZpZWxkc1RvVXNlLFxuICAgICAgICAuLi5maWVsZC50YWJzLnJlZHVjZSgodGFiRmllbGRzLCB0YWIpID0+IHtcbiAgICAgICAgICBpZiAoJ2ZpZWxkcycgaW4gdGFiKSB7XG4gICAgICAgICAgICBjb25zdCBpc05hbWVkVGFiID0gJ25hbWUnIGluIHRhYiAmJiB0YWIubmFtZVxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4udGFiRmllbGRzLFxuICAgICAgICAgICAgICAuLi5yZWR1Y2VGaWVsZE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgIGZpZWxkczogdGFiLmZpZWxkcyxcbiAgICAgICAgICAgICAgICBsYWJlbFByZWZpeCxcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgIHBhdGg6IGlzTmFtZWRUYWIgPyBjcmVhdGVOZXN0ZWRDbGllbnRGaWVsZFBhdGgocGF0aCwgZmllbGQpIDogcGF0aCxcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczogZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbXSksXG4gICAgICBdXG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0dGVkRmllbGQ6IEZpZWxkT3B0aW9uID0ge1xuICAgICAgbGFiZWw6IGNvbWJpbmVGaWVsZExhYmVsKHsgQ3VzdG9tTGFiZWwsIGZpZWxkLCBwcmVmaXg6IGxhYmVsUHJlZml4IH0pLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpZWxkUGVybWlzc2lvbnM6IGZpZWxkUGVybWlzc2lvbnMgYXMgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgcGF0aDogY3JlYXRlTmVzdGVkQ2xpZW50RmllbGRQYXRoKHBhdGgsIGZpZWxkKSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5maWVsZHNUb1VzZSwgZm9ybWF0dGVkRmllbGRdXG4gIH0sIFtdKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmVzdGVkQ2xpZW50RmllbGRQYXRoID0gKHBhcmVudFBhdGg6IHN0cmluZywgZmllbGQ6IENsaWVudEZpZWxkKTogc3RyaW5nID0+IHtcbiAgaWYgKHBhcmVudFBhdGgpIHtcbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIGAke3BhcmVudFBhdGh9LiR7ZmllbGQubmFtZX1gXG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRQYXRoXG4gIH1cblxuICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICByZXR1cm4gZmllbGQubmFtZVxuICB9XG5cbiAgcmV0dXJuICcnXG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LmpzJ1xuXG5leHBvcnQgY29uc3QgY29tYmluZUZpZWxkTGFiZWwgPSAoe1xuICBDdXN0b21MYWJlbCxcbiAgZmllbGQsXG4gIHByZWZpeCxcbn06IHtcbiAgQ3VzdG9tTGFiZWw/OiBSZWFjdC5SZWFjdE5vZGVcbiAgZmllbGQ/OiBDbGllbnRGaWVsZFxuICBwcmVmaXg/OiBSZWFjdC5SZWFjdE5vZGVcbn0pOiBSZWFjdC5SZWFjdE5vZGUgPT4ge1xuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIHtwcmVmaXggPyAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyB9fT57cHJlZml4fTwvc3Bhbj5cbiAgICAgICAgICB7JyA+ICd9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snIH19PlxuICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtDdXN0b21MYWJlbH1cbiAgICAgICAgICBGYWxsYmFjaz17PEZpZWxkTGFiZWwgbGFiZWw9eydsYWJlbCcgaW4gZmllbGQgJiYgZmllbGQubGFiZWx9IC8+fVxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgIDwvRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gJy4uLy4uL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQnVsa1VwbG9hZCB9IGZyb20gJy4uL2luZGV4LmpzJ1xuZXhwb3J0IGNvbnN0IGRpc2NhcmRCdWxrVXBsb2FkTW9kYWxTbHVnID0gJ2J1bGstdXBsb2FkLS1kaXNjYXJkLXdpdGhvdXQtc2F2aW5nJ1xuXG5leHBvcnQgZnVuY3Rpb24gRGlzY2FyZFdpdGhvdXRTYXZpbmcoKSB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyBkcmF3ZXJTbHVnIH0gPSB1c2VCdWxrVXBsb2FkKClcblxuICBjb25zdCBvbkNhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZU1vZGFsKGRpc2NhcmRCdWxrVXBsb2FkTW9kYWxTbHVnKVxuICB9LCBbY2xvc2VNb2RhbF0pXG5cbiAgY29uc3Qgb25Db25maXJtID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwoZHJhd2VyU2x1ZylcbiAgICBjbG9zZU1vZGFsKGRpc2NhcmRCdWxrVXBsb2FkTW9kYWxTbHVnKVxuICB9LCBbY2xvc2VNb2RhbCwgZHJhd2VyU2x1Z10pXG5cbiAgcmV0dXJuIChcbiAgICA8Q29uZmlybWF0aW9uTW9kYWxcbiAgICAgIGJvZHk9e3QoJ2dlbmVyYWw6Y2hhbmdlc05vdFNhdmVkJyl9XG4gICAgICBjYW5jZWxMYWJlbD17dCgnZ2VuZXJhbDpzdGF5T25UaGlzUGFnZScpfVxuICAgICAgY29uZmlybUxhYmVsPXt0KCdnZW5lcmFsOmxlYXZlQW55d2F5Jyl9XG4gICAgICBoZWFkaW5nPXt0KCdnZW5lcmFsOmxlYXZlV2l0aG91dFNhdmluZycpfVxuICAgICAgbW9kYWxTbHVnPXtkaXNjYXJkQnVsa1VwbG9hZE1vZGFsU2x1Z31cbiAgICAgIG9uQ2FuY2VsPXtvbkNhbmNlbH1cbiAgICAgIG9uQ29uZmlybT17b25Db25maXJtfVxuICAgIC8+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IEVkaXRGb3JtUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBGb3JtLCB1c2VGb3JtIH0gZnJvbSAnLi4vLi4vLi4vZm9ybXMvRm9ybS9pbmRleC5qcydcbmltcG9ydCB7IHR5cGUgRm9ybVByb3BzIH0gZnJvbSAnLi4vLi4vLi4vZm9ybXMvRm9ybS90eXBlcy5qcydcbmltcG9ydCB7IFdhdGNoQ2hpbGRFcnJvcnMgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9XYXRjaENoaWxkRXJyb3JzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50RXZlbnRzIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50RXZlbnRzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IE9wZXJhdGlvblByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL09wZXJhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVNlcnZlckZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9TZXJ2ZXJGdW5jdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyBhYm9ydEFuZElnbm9yZSwgaGFuZGxlQWJvcnRSZWYgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvYWJvcnRBbmRJZ25vcmUuanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlckNvbnRleHQgfSBmcm9tICcuLi8uLi9Eb2N1bWVudERyYXdlci9Qcm92aWRlci5qcydcbmltcG9ydCB7IERvY3VtZW50RmllbGRzIH0gZnJvbSAnLi4vLi4vRG9jdW1lbnRGaWVsZHMvaW5kZXguanMnXG5pbXBvcnQgeyBNb3ZlRG9jVG9Gb2xkZXIgfSBmcm9tICcuLi8uLi9Gb2xkZXJWaWV3L01vdmVEb2NUb0ZvbGRlci9pbmRleC5qcydcbmltcG9ydCB7IFVwbG9hZF92NCB9IGZyb20gJy4uLy4uL1VwbG9hZC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm1zTWFuYWdlciB9IGZyb20gJy4uL0Zvcm1zTWFuYWdlci9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29sbGVjdGlvbi1lZGl0J1xuXG4vLyBUaGlzIGNvbXBvbmVudCByZWNlaXZlcyBwcm9wcyBvbmx5IG9uIF9wYWdlc19cbi8vIFdoZW4gcmVuZGVyZWQgd2l0aGluIGEgZHJhd2VyLCBwcm9wcyBhcmUgZW1wdHlcbi8vIFRoaXMgaXMgc29sZWx5IHRvIHN1cHBvcnQgY3VzdG9tIGVkaXQgdmlld3Mgd2hpY2ggZ2V0IHNlcnZlci1yZW5kZXJlZFxuXG5leHBvcnQgZnVuY3Rpb24gRWRpdEZvcm0oe1xuICByZXNldFVwbG9hZEVkaXRzLFxuICBzdWJtaXR0ZWQsXG4gIHVwZGF0ZVVwbG9hZEVkaXRzLFxuICB1cGxvYWRFZGl0cyxcbn06IEVkaXRGb3JtUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbixcbiAgICBjb2xsZWN0aW9uU2x1ZzogZG9jU2x1ZyxcbiAgICBkb2NQZXJtaXNzaW9ucyxcbiAgICBnZXREb2NQcmVmZXJlbmNlcyxcbiAgICBoYXNTYXZlUGVybWlzc2lvbixcbiAgICBpbml0aWFsU3RhdGUsXG4gICAgaXNJbml0aWFsaXppbmcsXG4gICAgVXBsb2FkOiBDdXN0b21VcGxvYWQsXG4gIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIGNvbnN0IHsgZHJhd2VyU2x1Zywgb25TYXZlOiBvblNhdmVGcm9tQ29udGV4dCB9ID0gdXNlRG9jdW1lbnREcmF3ZXJDb250ZXh0KClcblxuICBjb25zdCB7IGdldEZvcm1TdGF0ZSB9ID0gdXNlU2VydmVyRnVuY3Rpb25zKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7IGZvbGRlcnMgfSxcbiAgICBnZXRFbnRpdHlDb25maWcsXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IGFib3J0T25DaGFuZ2VSZWYgPSBSZWFjdC51c2VSZWY8QWJvcnRDb250cm9sbGVyPihudWxsKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZzogZG9jU2x1ZyB9KVxuICBjb25zdCB7IHJlcG9ydFVwZGF0ZSB9ID0gdXNlRG9jdW1lbnRFdmVudHMoKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gY29sbGVjdGlvbkNvbmZpZy5zbHVnXG5cbiAgY29uc3QgW3NjaGVtYVBhdGhdID0gUmVhY3QudXNlU3RhdGUoY29sbGVjdGlvblNsdWcpXG5cbiAgY29uc3Qgb25TYXZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGpzb24pID0+IHtcbiAgICAgIHJlcG9ydFVwZGF0ZSh7XG4gICAgICAgIGRvYzoganNvbj8uZG9jIHx8IGpzb24/LnJlc3VsdCxcbiAgICAgICAgZHJhd2VyU2x1ZyxcbiAgICAgICAgZW50aXR5U2x1ZzogY29sbGVjdGlvblNsdWcsXG4gICAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICAgIHVwZGF0ZWRBdDoganNvbj8ucmVzdWx0Py51cGRhdGVkQXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSlcblxuICAgICAgaWYgKHR5cGVvZiBvblNhdmVGcm9tQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2b2lkIG9uU2F2ZUZyb21Db250ZXh0KHtcbiAgICAgICAgICAuLi5qc29uLFxuICAgICAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXNldFVwbG9hZEVkaXRzKClcbiAgICB9LFxuICAgIFtjb2xsZWN0aW9uU2x1Zywgb25TYXZlRnJvbUNvbnRleHQsIHJlcG9ydFVwZGF0ZSwgcmVzZXRVcGxvYWRFZGl0cywgZHJhd2VyU2x1Z10sXG4gIClcblxuICBjb25zdCBvbkNoYW5nZTogTm9uTnVsbGFibGU8Rm9ybVByb3BzWydvbkNoYW5nZSddPlswXSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGZvcm1TdGF0ZTogcHJldkZvcm1TdGF0ZSwgc3VibWl0dGVkIH0pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBoYW5kbGVBYm9ydFJlZihhYm9ydE9uQ2hhbmdlUmVmKVxuXG4gICAgICBjb25zdCBkb2NQcmVmZXJlbmNlcyA9IGF3YWl0IGdldERvY1ByZWZlcmVuY2VzKClcblxuICAgICAgY29uc3QgeyBzdGF0ZTogbmV3Rm9ybVN0YXRlIH0gPSBhd2FpdCBnZXRGb3JtU3RhdGUoe1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgZG9jUGVybWlzc2lvbnMsXG4gICAgICAgIGRvY1ByZWZlcmVuY2VzLFxuICAgICAgICBmb3JtU3RhdGU6IHByZXZGb3JtU3RhdGUsXG4gICAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICAgIHNjaGVtYVBhdGgsXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIHNraXBWYWxpZGF0aW9uOiAhc3VibWl0dGVkLFxuICAgICAgfSlcblxuICAgICAgYWJvcnRPbkNoYW5nZVJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICByZXR1cm4gbmV3Rm9ybVN0YXRlXG4gICAgfSxcbiAgICBbY29sbGVjdGlvblNsdWcsIHNjaGVtYVBhdGgsIGdldERvY1ByZWZlcmVuY2VzLCBnZXRGb3JtU3RhdGUsIGRvY1Blcm1pc3Npb25zXSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWJvcnRPbkNoYW5nZSA9IGFib3J0T25DaGFuZ2VSZWYuY3VycmVudFxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGFib3J0QW5kSWdub3JlKGFib3J0T25DaGFuZ2UpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gKFxuICAgIDxPcGVyYXRpb25Qcm92aWRlciBvcGVyYXRpb249XCJjcmVhdGVcIj5cbiAgICAgIDxGb3JtXG4gICAgICAgIGFjdGlvbj17YWN0aW9ufVxuICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Zvcm1gfVxuICAgICAgICBkaXNhYmxlZD17aXNJbml0aWFsaXppbmcgfHwgIWhhc1NhdmVQZXJtaXNzaW9ufVxuICAgICAgICBpbml0aWFsU3RhdGU9e2lzSW5pdGlhbGl6aW5nID8gdW5kZWZpbmVkIDogaW5pdGlhbFN0YXRlfVxuICAgICAgICBpc0luaXRpYWxpemluZz17aXNJbml0aWFsaXppbmd9XG4gICAgICAgIG1ldGhvZD1cIlBPU1RcIlxuICAgICAgICBvbkNoYW5nZT17W29uQ2hhbmdlXX1cbiAgICAgICAgb25TdWNjZXNzPXtvblNhdmV9XG4gICAgICAgIHN1Ym1pdHRlZD17c3VibWl0dGVkfVxuICAgICAgPlxuICAgICAgICA8RG9jdW1lbnRGaWVsZHNcbiAgICAgICAgICBCZWZvcmVGaWVsZHM9e1xuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICB7Q3VzdG9tVXBsb2FkIHx8IChcbiAgICAgICAgICAgICAgICA8VXBsb2FkX3Y0XG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvbkNvbmZpZy5zbHVnfVxuICAgICAgICAgICAgICAgICAgY3VzdG9tQWN0aW9ucz17W1xuICAgICAgICAgICAgICAgICAgICBmb2xkZXJzICYmIGNvbGxlY3Rpb25Db25maWcuZm9sZGVycyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPE1vdmVEb2NUb0ZvbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU6ICdwaWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJDb2xsZWN0aW9uU2x1Zz17Zm9sZGVycy5zbHVnfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyRmllbGROYW1lPXtmb2xkZXJzLmZpZWxkTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT1cIm1vdmUtZG9jLXRvLWZvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlPXtpbml0aWFsU3RhdGV9XG4gICAgICAgICAgICAgICAgICByZXNldFVwbG9hZEVkaXRzPXtyZXNldFVwbG9hZEVkaXRzfVxuICAgICAgICAgICAgICAgICAgdXBkYXRlVXBsb2FkRWRpdHM9e3VwZGF0ZVVwbG9hZEVkaXRzfVxuICAgICAgICAgICAgICAgICAgdXBsb2FkQ29uZmlnPXtjb2xsZWN0aW9uQ29uZmlnLnVwbG9hZH1cbiAgICAgICAgICAgICAgICAgIHVwbG9hZEVkaXRzPXt1cGxvYWRFZGl0c31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgICAgZG9jUGVybWlzc2lvbnM9e2RvY1Blcm1pc3Npb25zfVxuICAgICAgICAgIGZpZWxkcz17Y29sbGVjdGlvbkNvbmZpZy5maWVsZHN9XG4gICAgICAgICAgc2NoZW1hUGF0aFNlZ21lbnRzPXtbY29sbGVjdGlvbkNvbmZpZy5zbHVnXX1cbiAgICAgICAgLz5cbiAgICAgICAgPFJlcG9ydEFsbEVycm9ycyAvPlxuICAgICAgICA8R2V0RmllbGRQcm94eSAvPlxuICAgICAgPC9Gb3JtPlxuICAgIDwvT3BlcmF0aW9uUHJvdmlkZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gR2V0RmllbGRQcm94eSgpIHtcbiAgY29uc3QgeyBnZXRGaWVsZCwgZ2V0RmllbGRzIH0gPSB1c2VGb3JtKClcbiAgY29uc3QgeyBnZXRGb3JtRGF0YVJlZiB9ID0gdXNlRm9ybXNNYW5hZ2VyKClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1jb21waWxlci9yZWFjdC1jb21waWxlciAtLSBUT0RPOiBmaXhcbiAgICBnZXRGb3JtRGF0YVJlZi5jdXJyZW50ID0gZ2V0RmllbGRzXG4gIH0sIFtnZXRGaWVsZHMsIGdldEZpZWxkLCBnZXRGb3JtRGF0YVJlZl0pXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gUmVwb3J0QWxsRXJyb3JzKCkge1xuICBjb25zdCB7IGRvY0NvbmZpZyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgeyBhY3RpdmVJbmRleCwgZm9ybXMsIHNldEZvcm1Ub3RhbEVycm9yQ291bnQgfSA9IHVzZUZvcm1zTWFuYWdlcigpXG4gIGNvbnN0IGVycm9yQ291bnRSZWYgPSBSZWFjdC51c2VSZWYoMClcblxuICBjb25zdCBmaWxlSXNWYWxpZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gZm9ybXNbYWN0aXZlSW5kZXhdXG4gICAgcmV0dXJuIGN1cnJlbnRGb3JtPy5mb3JtU3RhdGU/LmZpbGU/LnZhbGlkID8/IHRydWVcbiAgfSwgW2FjdGl2ZUluZGV4LCBmb3Jtc10pXG5cbiAgY29uc3QgcmVwb3J0Rm9ybUVycm9yQ291bnQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZmllbGRFcnJvckNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgIGxldCBuZXdFcnJvckNvdW50ID0gZmllbGRFcnJvckNvdW50XG4gICAgICAvLyBJZiB0aGUgZmlsZSBpcyBpbnZhbGlkLCBjb3VudCB0aGF0IGFzIGFuIGVycm9yXG4gICAgICBpZiAoIWZpbGVJc1ZhbGlkKSB7XG4gICAgICAgIG5ld0Vycm9yQ291bnQgKz0gMVxuICAgICAgfVxuICAgICAgaWYgKG5ld0Vycm9yQ291bnQgPT09IGVycm9yQ291bnRSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHNldEZvcm1Ub3RhbEVycm9yQ291bnQoeyBlcnJvckNvdW50OiBuZXdFcnJvckNvdW50LCBpbmRleDogYWN0aXZlSW5kZXggfSlcbiAgICAgIGVycm9yQ291bnRSZWYuY3VycmVudCA9IG5ld0Vycm9yQ291bnRcbiAgICB9LFxuICAgIFthY3RpdmVJbmRleCwgc2V0Rm9ybVRvdGFsRXJyb3JDb3VudCwgZmlsZUlzVmFsaWRdLFxuICApXG5cbiAgaWYgKCFkb2NDb25maWcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8V2F0Y2hDaGlsZEVycm9ycyBmaWVsZHM9e2RvY0NvbmZpZy5maWVsZHN9IHBhdGg9e1tdfSBzZXRFcnJvckNvdW50PXtyZXBvcnRGb3JtRXJyb3JDb3VudH0gLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkLCBTYW5pdGl6ZWREb2N1bWVudFBlcm1pc3Npb25zIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZmllbGRJc1NpZGViYXIgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFJlbmRlckZpZWxkcyB9IGZyb20gJy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9pbmRleC5qcydcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uL0d1dHRlci9pbmRleC5qcydcbmltcG9ydCB7IFRyYXNoQmFubmVyIH0gZnJvbSAnLi4vVHJhc2hCYW5uZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RvY3VtZW50LWZpZWxkcydcblxudHlwZSBBcmdzID0ge1xuICByZWFkb25seSBBZnRlckZpZWxkcz86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBCZWZvcmVGaWVsZHM/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgRGVzY3JpcHRpb24/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgZG9jUGVybWlzc2lvbnM6IFNhbml0aXplZERvY3VtZW50UGVybWlzc2lvbnNcbiAgcmVhZG9ubHkgZmllbGRzOiBDbGllbnRGaWVsZFtdXG4gIHJlYWRvbmx5IGZvcmNlU2lkZWJhcldyYXA/OiBib29sZWFuXG4gIHJlYWRvbmx5IGlzVHJhc2hlZD86IGJvb2xlYW5cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuXG4gIHJlYWRvbmx5IHNjaGVtYVBhdGhTZWdtZW50czogc3RyaW5nW11cbn1cblxuZXhwb3J0IGNvbnN0IERvY3VtZW50RmllbGRzOiBSZWFjdC5GQzxBcmdzPiA9ICh7XG4gIEFmdGVyRmllbGRzLFxuICBCZWZvcmVGaWVsZHMsXG4gIGRvY1Blcm1pc3Npb25zLFxuICBmaWVsZHMsXG4gIGZvcmNlU2lkZWJhcldyYXAsXG4gIGlzVHJhc2hlZCA9IGZhbHNlLFxuICByZWFkT25seSxcbiAgc2NoZW1hUGF0aFNlZ21lbnRzLFxufSkgPT4ge1xuICBjb25zdCB7IGhhc1NpZGViYXJGaWVsZHMsIG1haW5GaWVsZHMsIHNpZGViYXJGaWVsZHMgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKFxuICAgICAgKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkSXNTaWRlYmFyKGZpZWxkKSkge1xuICAgICAgICAgIGFjYy5zaWRlYmFyRmllbGRzLnB1c2goZmllbGQpXG4gICAgICAgICAgYWNjLm1haW5GaWVsZHMucHVzaChudWxsKVxuICAgICAgICAgIGFjYy5oYXNTaWRlYmFyRmllbGRzID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5tYWluRmllbGRzLnB1c2goZmllbGQpXG4gICAgICAgICAgYWNjLnNpZGViYXJGaWVsZHMucHVzaChudWxsKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhhc1NpZGViYXJGaWVsZHM6IGZhbHNlLFxuICAgICAgICBtYWluRmllbGRzOiBbXSBhcyBDbGllbnRGaWVsZFtdLFxuICAgICAgICBzaWRlYmFyRmllbGRzOiBbXSBhcyBDbGllbnRGaWVsZFtdLFxuICAgICAgfSxcbiAgICApXG4gIH0sIFtmaWVsZHNdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgaGFzU2lkZWJhckZpZWxkcyA/IGAke2Jhc2VDbGFzc30tLWhhcy1zaWRlYmFyYCA6IGAke2Jhc2VDbGFzc30tLW5vLXNpZGViYXJgLFxuICAgICAgICBmb3JjZVNpZGViYXJXcmFwICYmIGAke2Jhc2VDbGFzc30tLWZvcmNlLXNpZGViYXItd3JhcGAsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbWFpbmB9PlxuICAgICAgICA8R3V0dGVyIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZWRpdGB9PlxuICAgICAgICAgIHtpc1RyYXNoZWQgJiYgPFRyYXNoQmFubmVyIC8+fVxuICAgICAgICAgIHtCZWZvcmVGaWVsZHN9XG4gICAgICAgICAgPFJlbmRlckZpZWxkc1xuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWVsZHNgfVxuICAgICAgICAgICAgZmllbGRzPXttYWluRmllbGRzfVxuICAgICAgICAgICAgZm9yY2VSZW5kZXJcbiAgICAgICAgICAgIHBhcmVudEluZGV4UGF0aD1cIlwiXG4gICAgICAgICAgICBwYXJlbnRQYXRoPVwiXCJcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9e3NjaGVtYVBhdGhTZWdtZW50cy5qb2luKCcuJyl9XG4gICAgICAgICAgICBwZXJtaXNzaW9ucz17ZG9jUGVybWlzc2lvbnM/LmZpZWxkc31cbiAgICAgICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtBZnRlckZpZWxkc31cbiAgICAgICAgPC9HdXR0ZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtoYXNTaWRlYmFyRmllbGRzID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2lkZWJhci13cmFwYH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NpZGViYXJgfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zaWRlYmFyLWZpZWxkc2B9PlxuICAgICAgICAgICAgICA8UmVuZGVyRmllbGRzXG4gICAgICAgICAgICAgICAgZmllbGRzPXtzaWRlYmFyRmllbGRzfVxuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyXG4gICAgICAgICAgICAgICAgcGFyZW50SW5kZXhQYXRoPVwiXCJcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoPVwiXCJcbiAgICAgICAgICAgICAgICBwYXJlbnRTY2hlbWFQYXRoPXtzY2hlbWFQYXRoU2VnbWVudHMuam9pbignLicpfVxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zPXtkb2NQZXJtaXNzaW9ucz8uZmllbGRzfVxuICAgICAgICAgICAgICAgIHJlYWRPbmx5PXtyZWFkT25seX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFRyYXNoSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1RyYXNoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAndHJhc2gtYmFubmVyJ1xuXG5leHBvcnQgY29uc3QgVHJhc2hCYW5uZXI6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBjb2xsZWN0aW9uU2x1ZyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnIH0pXG5cbiAgY29uc3QgeyBsYWJlbHMgfSA9IGNvbGxlY3Rpb25Db25maWdcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICA8VHJhc2hJY29uIC8+XG4gICAgICA8cD5cbiAgICAgICAge2kxOG4udCgnZ2VuZXJhbDpkb2N1bWVudElzVHJhc2hlZCcsIHtcbiAgICAgICAgICBsYWJlbDogYCR7Z2V0VHJhbnNsYXRpb24obGFiZWxzPy5zaW5ndWxhciwgaTE4bil9YCxcbiAgICAgICAgfSl9XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFzaEljb24oeyBjbGFzc05hbWUgfTogeyBjbGFzc05hbWU/OiBzdHJpbmcgfSkge1xuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIGNsYXNzTmFtZT17W2NsYXNzTmFtZSwgJ2ljb24gaWNvbi0tdHJhc2gnXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICB3aWR0aD1cIjIwXCJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgID5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNNC4xNDk5IDYuMUgxNS44NDk5TTE0LjU0OTkgNi4xVjE1LjJDMTQuNTQ5OSAxNS44NSAxMy44OTk5IDE2LjUgMTMuMjQ5OSAxNi41SDYuNzQ5OUM2LjA5OTkgMTYuNSA1LjQ0OTkgMTUuODUgNS40NDk5IDE1LjJWNi4xTTcuMzk5OSA2LjFWNC44QzcuMzk5OSA0LjE1IDguMDQ5OSAzLjUgOC42OTk5IDMuNUgxMS4yOTk5QzExLjk0OTkgMy41IDEyLjU5OTkgNC4xNSAxMi41OTk5IDQuOFY2LjFNOC42OTk5IDkuMzVWMTMuMjVNMTEuMjk5OSA5LjM1VjEzLjI1XCJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IHR5cGUgRm9sZGVyT3JEb2N1bWVudCwgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyB1c2VJZCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB0eXBlIHsgUHJvcHMgYXMgQnV0dG9uUHJvcHMgfSBmcm9tICcuLi8uLi9CdXR0b24vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZUZvcm0sIHVzZUZvcm1GaWVsZHMgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyBGb2xkZXJJY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvRm9sZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IGZvcm1hdERyYXdlclNsdWcsIHVzZURyYXdlckRlcHRoIH0gZnJvbSAnLi4vLi4vRHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBNb3ZlSXRlbXNUb0ZvbGRlckRyYXdlciB9IGZyb20gJy4uL0RyYXdlcnMvTW92ZVRvRm9sZGVyL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbW92ZS1kb2MtdG8tZm9sZGVyJ1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJ1dHRvbiBzaG93biBvbiB0aGUgZWRpdCBkb2N1bWVudCB2aWV3LiBJdCB1c2VzIHRoZSBtb3JlIGdlbmVyaWMgYE1vdmVEb2NUb0ZvbGRlckJ1dHRvbmAgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gTW92ZURvY1RvRm9sZGVyKHtcbiAgYnV0dG9uUHJvcHMsXG4gIGNsYXNzTmFtZSA9ICcnLFxuICBmb2xkZXJDb2xsZWN0aW9uU2x1ZyxcbiAgZm9sZGVyRmllbGROYW1lLFxufToge1xuICByZWFkb25seSBidXR0b25Qcm9wcz86IFBhcnRpYWw8QnV0dG9uUHJvcHM+XG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBmb2xkZXJDb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gIHJlYWRvbmx5IGZvbGRlckZpZWxkTmFtZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBkaXNwYXRjaEZpZWxkID0gdXNlRm9ybUZpZWxkcygoW18sIGRpc3BhdGNoXSkgPT4gZGlzcGF0Y2gpXG4gIGNvbnN0IGN1cnJlbnRQYXJlbnRGb2xkZXIgPSB1c2VGb3JtRmllbGRzKFxuICAgIChbZmllbGRzXSkgPT4gKGZpZWxkcyAmJiBmaWVsZHM/Lltmb2xkZXJGaWVsZE5hbWVdKSB8fCBudWxsLFxuICApXG4gIGNvbnN0IGZyb21Gb2xkZXJJRCA9IGN1cnJlbnRQYXJlbnRGb2xkZXI/LnZhbHVlXG4gIGNvbnN0IHsgaWQsIGNvbGxlY3Rpb25TbHVnLCBpbml0aWFsRGF0YSwgdGl0bGUgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IHsgc2V0TW9kaWZpZWQgfSA9IHVzZUZvcm0oKVxuICBjb25zdCBbZnJvbUZvbGRlck5hbWUsIHNldEZyb21Gb2xkZXJOYW1lXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IGAke3QoJ2dlbmVyYWw6bG9hZGluZycpfS4uLmApXG5cbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IG1vZGFsSUQgPSB1c2VJZCgpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaEZvbGRlckxhYmVsKCkge1xuICAgICAgaWYgKGZyb21Gb2xkZXJJRCAmJiAodHlwZW9mIGZyb21Gb2xkZXJJRCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGZyb21Gb2xkZXJJRCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgYXBpUm91dGU6IGNvbmZpZy5yb3V0ZXMuYXBpLFxuICAgICAgICAgICAgcGF0aDogYC8ke2ZvbGRlckNvbGxlY3Rpb25TbHVnfS8ke2Zyb21Gb2xkZXJJRH1gLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGZvbGRlckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgc2V0RnJvbUZvbGRlck5hbWUoZm9sZGVyRGF0YT8ubmFtZSB8fCB0KCdmb2xkZXI6bm9Gb2xkZXInKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEZyb21Gb2xkZXJOYW1lKHQoJ2ZvbGRlcjpub0ZvbGRlcicpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZvaWQgZmV0Y2hGb2xkZXJMYWJlbCgpXG4gIH0sIFtmb2xkZXJDb2xsZWN0aW9uU2x1ZywgY29uZmlnLnJvdXRlcy5hcGksIGZyb21Gb2xkZXJJRCwgdF0pXG5cbiAgcmV0dXJuIChcbiAgICA8TW92ZURvY1RvRm9sZGVyQnV0dG9uXG4gICAgICBidXR0b25Qcm9wcz17YnV0dG9uUHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uU2x1Z31cbiAgICAgIGRvY0RhdGE9e2luaXRpYWxEYXRhIGFzIEZvbGRlck9yRG9jdW1lbnRbJ3ZhbHVlJ119XG4gICAgICBkb2NJRD17aWR9XG4gICAgICBkb2NUaXRsZT17dGl0bGV9XG4gICAgICBmb2xkZXJDb2xsZWN0aW9uU2x1Zz17Zm9sZGVyQ29sbGVjdGlvblNsdWd9XG4gICAgICBmb2xkZXJGaWVsZE5hbWU9e2ZvbGRlckZpZWxkTmFtZX1cbiAgICAgIGZyb21Gb2xkZXJJRD17ZnJvbUZvbGRlcklEIGFzIG51bWJlciB8IHN0cmluZ31cbiAgICAgIGZyb21Gb2xkZXJOYW1lPXtmcm9tRm9sZGVyTmFtZX1cbiAgICAgIG1vZGFsU2x1Zz17YG1vdmUtdG8tZm9sZGVyLSR7bW9kYWxJRH1gfVxuICAgICAgb25Db25maXJtPXsoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50UGFyZW50Rm9sZGVyLnZhbHVlICE9PSBpZCkge1xuICAgICAgICAgIGRpc3BhdGNoRmllbGQoe1xuICAgICAgICAgICAgdHlwZTogJ1VQREFURScsXG4gICAgICAgICAgICBwYXRoOiBmb2xkZXJGaWVsZE5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgc2tpcENvbmZpcm1Nb2RhbD17IWN1cnJlbnRQYXJlbnRGb2xkZXI/LnZhbHVlfVxuICAgIC8+XG4gIClcbn1cblxudHlwZSBNb3ZlRG9jVG9Gb2xkZXJCdXR0b25Qcm9wcyA9IHtcbiAgcmVhZG9ubHkgYnV0dG9uUHJvcHM/OiBQYXJ0aWFsPEJ1dHRvblByb3BzPlxuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgY29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICByZWFkb25seSBkb2NEYXRhOiBGb2xkZXJPckRvY3VtZW50Wyd2YWx1ZSddXG4gIHJlYWRvbmx5IGRvY0lEOiBudW1iZXIgfCBzdHJpbmdcbiAgcmVhZG9ubHkgZG9jVGl0bGU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgZm9sZGVyQ29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICByZWFkb25seSBmb2xkZXJGaWVsZE5hbWU6IHN0cmluZ1xuICByZWFkb25seSBmcm9tRm9sZGVySUQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgcmVhZG9ubHkgZnJvbUZvbGRlck5hbWU6IHN0cmluZ1xuICByZWFkb25seSBtb2RhbFNsdWc6IHN0cmluZ1xuICByZWFkb25seSBvbkNvbmZpcm0/OiAoYXJnczogeyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWRcbiAgcmVhZG9ubHkgc2tpcENvbmZpcm1Nb2RhbD86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgbW9yZSBnZW5lcmljIGJ1dHRvbiB0aGF0IGNhbiBiZSB1c2VkIGluIG90aGVyIGNvbnRleHRzLCBzdWNoIGFzIHRhYmxlIGNlbGxzIGFuZCB0aGUgZWRpdCB2aWV3LlxuICovXG5leHBvcnQgY29uc3QgTW92ZURvY1RvRm9sZGVyQnV0dG9uID0gKHtcbiAgYnV0dG9uUHJvcHMsXG4gIGNsYXNzTmFtZSxcbiAgY29sbGVjdGlvblNsdWcsXG4gIGRvY0RhdGEsXG4gIGRvY0lELFxuICBkb2NUaXRsZSxcbiAgZm9sZGVyQ29sbGVjdGlvblNsdWcsXG4gIGZvbGRlckZpZWxkTmFtZSxcbiAgZnJvbUZvbGRlcklELFxuICBmcm9tRm9sZGVyTmFtZSxcbiAgbW9kYWxTbHVnLFxuICBvbkNvbmZpcm0sXG4gIHNraXBDb25maXJtTW9kYWwsXG59OiBNb3ZlRG9jVG9Gb2xkZXJCdXR0b25Qcm9wcykgPT4ge1xuICBjb25zdCB7IGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IGRyYXdlckRlcHRoID0gdXNlRHJhd2VyRGVwdGgoKVxuICBjb25zdCBkcmF3ZXJTbHVnID0gZm9ybWF0RHJhd2VyU2x1Zyh7IHNsdWc6IG1vZGFsU2x1ZywgZGVwdGg6IGRyYXdlckRlcHRoIH0pXG5cbiAgY29uc3QgdGl0bGVUb1JlbmRlciA9XG4gICAgZG9jVGl0bGUgfHwgZ2V0VHJhbnNsYXRpb24oZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWcgfSkubGFiZWxzLnNpbmd1bGFyLCBpMThuKVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgYnV0dG9uU3R5bGU9XCJzdWJ0bGVcIlxuICAgICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgICAgaWNvbj17PEZvbGRlckljb24gLz59XG4gICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgb3Blbk1vZGFsKGRyYXdlclNsdWcpXG4gICAgICAgIH19XG4gICAgICAgIHsuLi5idXR0b25Qcm9wc31cbiAgICAgID5cbiAgICAgICAge2Zyb21Gb2xkZXJOYW1lfVxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxNb3ZlSXRlbXNUb0ZvbGRlckRyYXdlclxuICAgICAgICBhY3Rpb249XCJtb3ZlSXRlbVRvRm9sZGVyXCJcbiAgICAgICAgZHJhd2VyU2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgLy90b2RvIHRoaXMgc2hvdWxkIGluaGVyaXRcbiAgICAgICAgZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9ucz17W2NvbGxlY3Rpb25TbHVnXX1cbiAgICAgICAgZm9sZGVyQ29sbGVjdGlvblNsdWc9e2ZvbGRlckNvbGxlY3Rpb25TbHVnfVxuICAgICAgICBmb2xkZXJGaWVsZE5hbWU9e2ZvbGRlckZpZWxkTmFtZX1cbiAgICAgICAgZnJvbUZvbGRlcklEPXtmcm9tRm9sZGVySUR9XG4gICAgICAgIGZyb21Gb2xkZXJOYW1lPXtmcm9tRm9sZGVyTmFtZX1cbiAgICAgICAgaXRlbXNUb01vdmU9e1tcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpdGVtS2V5OiBgJHtjb2xsZWN0aW9uU2x1Z30tJHtkb2NJRH1gLFxuICAgICAgICAgICAgcmVsYXRpb25UbzogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICB2YWx1ZTogeyAuLi5kb2NEYXRhLCBpZDogZG9jSUQgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdfVxuICAgICAgICBvbkNvbmZpcm09e2FzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgICAgaWYgKGZyb21Gb2xkZXJJRCAhPT0gYXJncy5pZCAmJiB0eXBlb2Ygb25Db25maXJtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBvbkNvbmZpcm0oYXJncylcblxuICAgICAgICAgICAgICBpZiAoYXJncy5pZCkge1xuICAgICAgICAgICAgICAgIC8vIG1vdmVkIHRvIGZvbGRlclxuICAgICAgICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICB0KCdmb2xkZXI6aXRlbUhhc0JlZW5Nb3ZlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9sZGVyTmFtZTogYFwiJHthcmdzLm5hbWV9XCJgLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVUb1JlbmRlcixcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBtb3ZlZCB0byByb290XG4gICAgICAgICAgICAgICAgdG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgIHQoJ2ZvbGRlcjppdGVtSGFzQmVlbk1vdmVkVG9Sb290Jywge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVUb1JlbmRlcixcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICAvLyB0b2RvOiBhZGQgZXJyb3IgdG9hc3Q/XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvc2VNb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgICB9fVxuICAgICAgICBza2lwQ29uZmlybU1vZGFsPXtza2lwQ29uZmlybU1vZGFsfVxuICAgICAgICB0aXRsZT17dGl0bGVUb1JlbmRlcn1cbiAgICAgIC8+XG4gICAgPC8+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBmdW5jdGlvbiBGb2xkZXJJY29uKHsgY2xhc3NOYW1lIH06IHsgY2xhc3NOYW1lPzogc3RyaW5nIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnXG4gICAgICBjbGFzc05hbWU9e1tjbGFzc05hbWUsICdpY29uIGljb24tLWZvbGRlciddLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgIHdpZHRoPVwiMTZcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0xMy4zMzMzIDEzLjMzMzNDMTMuNjg2OSAxMy4zMzMzIDE0LjAyNiAxMy4xOTI5IDE0LjI3NjEgMTIuOTQyOEMxNC41MjYxIDEyLjY5MjggMTQuNjY2NiAxMi4zNTM2IDE0LjY2NjYgMTJWNS4zMzMzM0MxNC42NjY2IDQuOTc5NzEgMTQuNTI2MSA0LjY0MDU3IDE0LjI3NjEgNC4zOTA1MkMxNC4wMjYgNC4xNDA0OCAxMy42ODY5IDQgMTMuMzMzMyA0SDguMDY2NTlDNy44NDM1OSA0LjAwMjE5IDcuNjIzNjIgMy45NDg0MSA3LjQyNjc5IDMuODQzNTlDNy4yMjk5NiAzLjczODc3IDcuMDYyNTYgMy41ODYyNSA2LjkzOTkyIDMuNEw2LjM5OTkyIDIuNkM2LjI3ODUxIDIuNDE1NjUgNi4xMTMyMyAyLjI2NDMyIDUuOTE4OTIgMi4xNTk2QzUuNzI0NiAyLjA1NDg4IDUuNTA3MzIgMi4wMDAwNCA1LjI4NjU5IDJIMi42NjY1OUMyLjMxMjk2IDIgMS45NzM4MiAyLjE0MDQ4IDEuNzIzNzggMi4zOTA1MkMxLjQ3MzczIDIuNjQwNTcgMS4zMzMyNSAyLjk3OTcxIDEuMzMzMjUgMy4zMzMzM1YxMkMxLjMzMzI1IDEyLjM1MzYgMS40NzM3MyAxMi42OTI4IDEuNzIzNzggMTIuOTQyOEMxLjk3MzgyIDEzLjE5MjkgMi4zMTI5NiAxMy4zMzMzIDIuNjY2NTkgMTMuMzMzM0gxMy4zMzMzWlwiXG4gICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvblNsdWcsIERvY3VtZW50IH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB0eXBlIHsgRm9sZGVyQnJlYWRjcnVtYiwgRm9sZGVyT3JEb2N1bWVudCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgZXh0cmFjdElEIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IEZvbGRlclByb3ZpZGVyLCB1c2VGb2xkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvRm9sZGVycy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlQ2FjaGUgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvUm91dGVDYWNoZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVNlcnZlckZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9TZXJ2ZXJGdW5jdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlciB9IGZyb20gJy4uLy4uLy4uL0RvY3VtZW50RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyIH0gZnJvbSAnLi4vLi4vLi4vRHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyQWN0aW9uSGVhZGVyIH0gZnJvbSAnLi4vLi4vLi4vRHJhd2VyQWN0aW9uSGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyQ29udGVudENvbnRhaW5lciB9IGZyb20gJy4uLy4uLy4uL0RyYXdlckNvbnRlbnRDb250YWluZXIvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0Q3JlYXRlTmV3RG9jSW5Gb2xkZXJCdXR0b24gfSBmcm9tICcuLi8uLi8uLi9MaXN0SGVhZGVyL1RpdGxlQWN0aW9ucy9MaXN0Q3JlYXRlTmV3RG9jSW5Gb2xkZXJCdXR0b24uanMnXG5pbXBvcnQgeyBMb2FkaW5nT3ZlcmxheSB9IGZyb20gJy4uLy4uLy4uL0xvYWRpbmcvaW5kZXguanMnXG5pbXBvcnQgeyBOb0xpc3RSZXN1bHRzIH0gZnJvbSAnLi4vLi4vLi4vTm9MaXN0UmVzdWx0cy9pbmRleC5qcydcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGb2xkZXJCcmVhZGNydW1icyB9IGZyb20gJy4uLy4uL0JyZWFkY3J1bWJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29sb3JlZEZvbGRlckljb24gfSBmcm9tICcuLi8uLi9Db2xvcmVkRm9sZGVySWNvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbW92ZS1mb2xkZXItZHJhd2VyJ1xuY29uc3QgYmFzZU1vZGFsU2x1ZyA9ICdtb3ZlLWZvbGRlci1kcmF3ZXInXG5jb25zdCBjb25maXJtTW9kYWxTbHVnID0gYCR7YmFzZU1vZGFsU2x1Z30tY29uZmlybS1tb3ZlYFxuXG50eXBlIEFjdGlvblByb3BzID1cbiAgfCB7XG4gICAgICByZWFkb25seSBhY3Rpb246ICdtb3ZlSXRlbXNUb0ZvbGRlcidcbiAgICB9XG4gIHwge1xuICAgICAgcmVhZG9ubHkgYWN0aW9uOiAnbW92ZUl0ZW1Ub0ZvbGRlcidcbiAgICAgIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmdcbiAgICB9XG5leHBvcnQgdHlwZSBNb3ZlVG9Gb2xkZXJEcmF3ZXJQcm9wcyA9IHtcbiAgcmVhZG9ubHkgZHJhd2VyU2x1Zzogc3RyaW5nXG4gIHJlYWRvbmx5IGZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25TbHVnW11cbiAgcmVhZG9ubHkgZm9sZGVyQ29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICByZWFkb25seSBmb2xkZXJGaWVsZE5hbWU6IHN0cmluZ1xuICByZWFkb25seSBmcm9tRm9sZGVySUQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgcmVhZG9ubHkgZnJvbUZvbGRlck5hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgaXRlbXNUb01vdmU6IEZvbGRlck9yRG9jdW1lbnRbXVxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY29uZmlybXMgdGhlIG1vdmVcbiAgICpcbiAgICogQHBhcmFtIGZvbGRlcklEIC0gVGhlIElEIG9mIHRoZSBmb2xkZXIgdG8gbW92ZSB0aGUgaXRlbXMgdG9cbiAgICovXG4gIHJlYWRvbmx5IG9uQ29uZmlybTogKGFyZ3M6IHtcbiAgICBpZDogbnVsbCB8IG51bWJlciB8IHN0cmluZ1xuICAgIG5hbWU6IG51bGwgfCBzdHJpbmdcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWRcbiAgcmVhZG9ubHkgcG9wdWxhdGVNb3ZlVG9Gb2xkZXJEcmF3ZXI/OiAoZm9sZGVySUQ6IG51bGwgfCBudW1iZXIgfCBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkXG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIHRvIHNraXAgdGhlIGNvbmZpcm1hdGlvbiBtb2RhbFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcENvbmZpcm1Nb2RhbD86IGJvb2xlYW5cbn0gJiBBY3Rpb25Qcm9wc1xuXG5leHBvcnQgZnVuY3Rpb24gTW92ZUl0ZW1zVG9Gb2xkZXJEcmF3ZXIocHJvcHM6IE1vdmVUb0ZvbGRlckRyYXdlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPERyYXdlciBndXR0ZXI9e2ZhbHNlfSBIZWFkZXI9e251bGx9IHNsdWc9e3Byb3BzLmRyYXdlclNsdWd9PlxuICAgICAgPExvYWRGb2xkZXJEYXRhIHsuLi5wcm9wc30gLz5cbiAgICA8L0RyYXdlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBMb2FkRm9sZGVyRGF0YShwcm9wczogTW92ZVRvRm9sZGVyRHJhd2VyUHJvcHMpIHtcbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IFtzdWJmb2xkZXJzLCBzZXRTdWJmb2xkZXJzXSA9IFJlYWN0LnVzZVN0YXRlPEZvbGRlck9yRG9jdW1lbnRbXT4oW10pXG4gIGNvbnN0IFtkb2N1bWVudHMsIHNldERvY3VtZW50c10gPSBSZWFjdC51c2VTdGF0ZTxGb2xkZXJPckRvY3VtZW50W10+KFtdKVxuICBjb25zdCBbYnJlYWRjcnVtYnMsIHNldEJyZWFkY3J1bWJzXSA9IFJlYWN0LnVzZVN0YXRlPEZvbGRlckJyZWFkY3J1bWJbXT4oW10pXG4gIGNvbnN0IFtGb2xkZXJSZXN1bHRzQ29tcG9uZW50LCBzZXRGb2xkZXJSZXN1bHRzQ29tcG9uZW50XSA9IFJlYWN0LnVzZVN0YXRlPFJlYWN0LlJlYWN0Tm9kZT4obnVsbClcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZm9sZGVySUQsIHNldEZvbGRlcklEXSA9IFJlYWN0LnVzZVN0YXRlPG51bGwgfCBudW1iZXIgfCBzdHJpbmc+KHByb3BzLmZyb21Gb2xkZXJJRCB8fCBudWxsKVxuICBjb25zdCBoYXNMb2FkZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHsgZ2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudEFuZERhdGEgfSA9IHVzZVNlcnZlckZ1bmN0aW9ucygpXG5cbiAgY29uc3QgcG9wdWxhdGVNb3ZlVG9Gb2xkZXJEcmF3ZXIgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICBhc3luYyAoZm9sZGVySURUb1BvcHVsYXRlOiBudWxsIHwgbnVtYmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRGb2xkZXJSZXN1bHRzQ29tcG9uZW50QW5kRGF0YSh7XG4gICAgICAgICAgYnJvd3NlQnlGb2xkZXI6IGZhbHNlLFxuICAgICAgICAgIGNvbGxlY3Rpb25zVG9EaXNwbGF5OiBbcHJvcHMuZm9sZGVyQ29sbGVjdGlvblNsdWddLFxuICAgICAgICAgIGRpc3BsYXlBczogJ2dyaWQnLFxuICAgICAgICAgIC8vIHRvZG86IHNob3VsZCBiZSBhYmxlIHRvIHBhc3MgdW5kZWZpbmVkLCBlbXB0eSBhcnJheSBvciBudWxsIGFuZCBnZXQgYWxsIGZvbGRlcnMuIE5lZWQgdG8gbG9vayBhdCBBUEkgZm9yIHRoaXMgaW4gdGhlIHNlcnZlciBmdW5jdGlvblxuICAgICAgICAgIGZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnM6IHByb3BzLmZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnMsXG4gICAgICAgICAgZm9sZGVySUQ6IGZvbGRlcklEVG9Qb3B1bGF0ZSxcbiAgICAgICAgICBzb3J0OiAnbmFtZScsXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2V0QnJlYWRjcnVtYnMocmVzdWx0LmJyZWFkY3J1bWJzIHx8IFtdKVxuICAgICAgICBzZXRTdWJmb2xkZXJzKHJlc3VsdD8uc3ViZm9sZGVycyB8fCBbXSlcbiAgICAgICAgc2V0RG9jdW1lbnRzKHJlc3VsdD8uZG9jdW1lbnRzIHx8IFtdKVxuICAgICAgICBzZXRGb2xkZXJSZXN1bHRzQ29tcG9uZW50KHJlc3VsdC5Gb2xkZXJSZXN1bHRzQ29tcG9uZW50IHx8IG51bGwpXG4gICAgICAgIHNldEZvbGRlcklEKGZvbGRlcklEVG9Qb3B1bGF0ZSlcbiAgICAgICAgc2V0SGFzTG9hZGVkKHRydWUpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldEJyZWFkY3J1bWJzKFtdKVxuICAgICAgICBzZXRTdWJmb2xkZXJzKFtdKVxuICAgICAgICBzZXREb2N1bWVudHMoW10pXG4gICAgICB9XG5cbiAgICAgIGhhc0xvYWRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH0sXG4gICAgW2dldEZvbGRlclJlc3VsdHNDb21wb25lbnRBbmREYXRhLCBwcm9wcy5mb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zLCBwcm9wcy5mb2xkZXJDb2xsZWN0aW9uU2x1Z10sXG4gIClcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaGFzTG9hZGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHZvaWQgcG9wdWxhdGVNb3ZlVG9Gb2xkZXJEcmF3ZXIocHJvcHMuZnJvbUZvbGRlcklEKVxuICAgIH1cbiAgfSwgW3BvcHVsYXRlTW92ZVRvRm9sZGVyRHJhd2VyLCBwcm9wcy5mcm9tRm9sZGVySURdKVxuXG4gIGlmICghaGFzTG9hZGVkKSB7XG4gICAgcmV0dXJuIDxMb2FkaW5nT3ZlcmxheSAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9sZGVyUHJvdmlkZXJcbiAgICAgIGFsbENvbGxlY3Rpb25Gb2xkZXJTbHVncz17W3Byb3BzLmZvbGRlckNvbGxlY3Rpb25TbHVnXX1cbiAgICAgIGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzPXtcbiAgICAgICAgcGVybWlzc2lvbnMuY29sbGVjdGlvbnNbcHJvcHMuZm9sZGVyQ29sbGVjdGlvblNsdWddPy5jcmVhdGVcbiAgICAgICAgICA/IFtwcm9wcy5mb2xkZXJDb2xsZWN0aW9uU2x1Z11cbiAgICAgICAgICA6IFtdXG4gICAgICB9XG4gICAgICBhbGxvd011bHRpU2VsZWN0aW9uPXtmYWxzZX1cbiAgICAgIGJyZWFkY3J1bWJzPXticmVhZGNydW1ic31cbiAgICAgIGRvY3VtZW50cz17ZG9jdW1lbnRzfVxuICAgICAgZm9sZGVyRmllbGROYW1lPXtwcm9wcy5mb2xkZXJGaWVsZE5hbWV9XG4gICAgICBmb2xkZXJJRD17Zm9sZGVySUR9XG4gICAgICBGb2xkZXJSZXN1bHRzQ29tcG9uZW50PXtGb2xkZXJSZXN1bHRzQ29tcG9uZW50fVxuICAgICAga2V5PXtmb2xkZXJJRH1cbiAgICAgIG9uSXRlbUNsaWNrPXthc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICBhd2FpdCBwb3B1bGF0ZU1vdmVUb0ZvbGRlckRyYXdlcihpdGVtLnZhbHVlLmlkKVxuICAgICAgfX1cbiAgICAgIHN1YmZvbGRlcnM9e3N1YmZvbGRlcnN9XG4gICAgPlxuICAgICAgPENvbnRlbnQgey4uLnByb3BzfSBwb3B1bGF0ZU1vdmVUb0ZvbGRlckRyYXdlcj17cG9wdWxhdGVNb3ZlVG9Gb2xkZXJEcmF3ZXJ9IC8+XG4gICAgPC9Gb2xkZXJQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZW50KHtcbiAgZHJhd2VyU2x1ZyxcbiAgZnJvbUZvbGRlcklELFxuICBmcm9tRm9sZGVyTmFtZSxcbiAgaXRlbXNUb01vdmUsXG4gIG9uQ29uZmlybSxcbiAgcG9wdWxhdGVNb3ZlVG9Gb2xkZXJEcmF3ZXIsXG4gIHNraXBDb25maXJtTW9kYWwsXG4gIC4uLnByb3BzXG59OiBNb3ZlVG9Gb2xkZXJEcmF3ZXJQcm9wcykge1xuICBjb25zdCB7IGNsZWFyUm91dGVDYWNoZSB9ID0gdXNlUm91dGVDYWNoZSgpXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgaXNNb2RhbE9wZW4sIG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCBbY291bnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gaXRlbXNUb01vdmUubGVuZ3RoKVxuICBjb25zdCBbZm9sZGVyQWRkZWRUb1VuZGVybHlpbmdGb2xkZXIsIHNldEZvbGRlckFkZGVkVG9VbmRlcmx5aW5nRm9sZGVyXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3Qge1xuICAgIGJyZWFkY3J1bWJzLFxuICAgIGZvbGRlckNvbGxlY3Rpb25Db25maWcsXG4gICAgZm9sZGVyQ29sbGVjdGlvblNsdWcsXG4gICAgZm9sZGVyRmllbGROYW1lLFxuICAgIGZvbGRlcklELFxuICAgIEZvbGRlclJlc3VsdHNDb21wb25lbnQsXG4gICAgZm9sZGVyVHlwZSxcbiAgICBnZXRTZWxlY3RlZEl0ZW1zLFxuICAgIHN1YmZvbGRlcnMsXG4gIH0gPSB1c2VGb2xkZXIoKVxuICBjb25zdCBbRm9sZGVyRG9jdW1lbnREcmF3ZXIsICwgeyBjbG9zZURyYXdlcjogY2xvc2VGb2xkZXJEcmF3ZXIsIG9wZW5EcmF3ZXI6IG9wZW5Gb2xkZXJEcmF3ZXIgfV0gPVxuICAgIHVzZURvY3VtZW50RHJhd2VyKHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnOiBmb2xkZXJDb2xsZWN0aW9uU2x1ZyxcbiAgICB9KVxuXG4gIGNvbnN0IGdldFNlbGVjdGVkRm9sZGVyID0gUmVhY3QudXNlQ2FsbGJhY2soKCk6IHtcbiAgICBpZDogbnVsbCB8IG51bWJlciB8IHN0cmluZ1xuICAgIG5hbWU6IG51bGwgfCBzdHJpbmdcbiAgfSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXRTZWxlY3RlZEl0ZW1zKClcblxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGxhc3RDcnVtYiA9IGJyZWFkY3J1bWJzPy5bYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV1cbiAgICAgIC8vIHVzZSB0aGUgYnJlYWRjcnVtYlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGxhc3RDcnVtYj8uaWQgfHwgbnVsbCxcbiAgICAgICAgbmFtZTogbGFzdENydW1iPy5uYW1lIHx8IG51bGwsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSB0aGUgc2VsZWN0ZWQgaXRlbVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHNlbGVjdGVkWzBdLnZhbHVlLmlkLFxuICAgICAgICBuYW1lOiBzZWxlY3RlZFswXS52YWx1ZS5fZm9sZGVyT3JEb2N1bWVudFRpdGxlLFxuICAgICAgfVxuICAgIH1cbiAgfSwgW2JyZWFkY3J1bWJzLCBnZXRTZWxlY3RlZEl0ZW1zXSlcblxuICBjb25zdCBvbkNyZWF0ZVN1Y2Nlc3MgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICBhc3luYyAoeyBjb2xsZWN0aW9uU2x1ZywgZG9jIH06IHsgY29sbGVjdGlvblNsdWc6IENvbGxlY3Rpb25TbHVnOyBkb2M6IERvY3VtZW50IH0pID0+IHtcbiAgICAgIGF3YWl0IHBvcHVsYXRlTW92ZVRvRm9sZGVyRHJhd2VyKGZvbGRlcklEKVxuICAgICAgaWYgKFxuICAgICAgICBjb2xsZWN0aW9uU2x1ZyA9PT0gZm9sZGVyQ29sbGVjdGlvblNsdWcgJiZcbiAgICAgICAgKChkb2M/LmZvbGRlciAmJiBmcm9tRm9sZGVySUQgPT09IGV4dHJhY3RJRChkb2M/LmZvbGRlcikpIHx8XG4gICAgICAgICAgKCFmcm9tRm9sZGVySUQgJiYgIWRvYz8uZm9sZGVyKSlcbiAgICAgICkge1xuICAgICAgICAvLyBpZiB0aGUgZm9sZGVyIHdlIGNyZWF0ZWQgaXMgaW4gdGhlIHNhbWUgZm9sZGVyIGFzIHRoZSBvbmUgd2UgYXJlIG1vdmluZyBmcm9tXG4gICAgICAgIC8vIHNldCB2YXJpYWJsZSBzbyB3ZSBjYW4gY2xlYXIgdGhlIHJvdXRlIGNhY2hlIHdoZW4gd2UgY2xvc2UgdGhlIGRyYXdlclxuICAgICAgICBzZXRGb2xkZXJBZGRlZFRvVW5kZXJseWluZ0ZvbGRlcih0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3BvcHVsYXRlTW92ZVRvRm9sZGVyRHJhd2VyLCBmb2xkZXJJRCwgZnJvbUZvbGRlcklELCBmb2xkZXJDb2xsZWN0aW9uU2x1Z10sXG4gIClcblxuICBjb25zdCBvbkNvbmZpcm1Nb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb25Db25maXJtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2b2lkIG9uQ29uZmlybShnZXRTZWxlY3RlZEZvbGRlcigpKVxuICAgIH1cbiAgfSwgW2dldFNlbGVjdGVkRm9sZGVyLCBvbkNvbmZpcm1dKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc01vZGFsT3BlbihkcmF3ZXJTbHVnKSAmJiBmb2xkZXJBZGRlZFRvVW5kZXJseWluZ0ZvbGRlcikge1xuICAgICAgLy8gaWYgd2UgYWRkZWQgYSBmb2xkZXIgdG8gdGhlIHVuZGVybHlpbmcgZm9sZGVyLCBjbGVhciB0aGUgcm91dGUgY2FjaGVcbiAgICAgIC8vIHNvIHRoYXQgdGhlIGZvbGRlciB2aWV3IHdpbGwgYmUgcmVsb2FkZWQgd2l0aCB0aGUgbmV3IGZvbGRlclxuICAgICAgc2V0Rm9sZGVyQWRkZWRUb1VuZGVybHlpbmdGb2xkZXIoZmFsc2UpXG4gICAgICBjbGVhclJvdXRlQ2FjaGUoKVxuICAgIH1cbiAgfSwgW2RyYXdlclNsdWcsIGlzTW9kYWxPcGVuLCBjbGVhclJvdXRlQ2FjaGUsIGZvbGRlckFkZGVkVG9VbmRlcmx5aW5nRm9sZGVyXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPERyYXdlckFjdGlvbkhlYWRlclxuICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgIGNsb3NlTW9kYWwoZHJhd2VyU2x1ZylcbiAgICAgICAgfX1cbiAgICAgICAgb25TYXZlPXsoKSA9PiB7XG4gICAgICAgICAgaWYgKHNraXBDb25maXJtTW9kYWwpIHtcbiAgICAgICAgICAgIG9uQ29uZmlybU1vdmUoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcGVuTW9kYWwoY29uZmlybU1vZGFsU2x1ZylcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIHNhdmVMYWJlbD17dCgnZ2VuZXJhbDpzZWxlY3QnKX1cbiAgICAgICAgdGl0bGU9e1xuICAgICAgICAgIDxEcmF3ZXJIZWFkaW5nXG4gICAgICAgICAgICBhY3Rpb249e3Byb3BzLmFjdGlvbn1cbiAgICAgICAgICAgIGNvdW50PXtjb3VudH1cbiAgICAgICAgICAgIGZyb21Gb2xkZXJOYW1lPXtmcm9tRm9sZGVySUQgPyBmcm9tRm9sZGVyTmFtZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHRpdGxlPXtwcm9wcy5hY3Rpb24gPT09ICdtb3ZlSXRlbVRvRm9sZGVyJyA/IHByb3BzLnRpdGxlIDogdW5kZWZpbmVkfVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIC8+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19icmVhZGNydW1icy1zZWN0aW9uYH0+XG4gICAgICAgIDxGb2xkZXJCcmVhZGNydW1ic1xuICAgICAgICAgIGJyZWFkY3J1bWJzPXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgICBuYW1lOiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19mb2xkZXItYnJlYWRjcnVtYnMtcm9vdGB9PlxuICAgICAgICAgICAgICAgICAgPENvbG9yZWRGb2xkZXJJY29uIC8+XG4gICAgICAgICAgICAgICAgICB7dCgnZm9sZGVyOmZvbGRlcnMnKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGJyZWFkY3J1bWJzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHBvcHVsYXRlTW92ZVRvRm9sZGVyRHJhd2VyKG51bGwpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uYnJlYWRjcnVtYnMubWFwKChjcnVtYiwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGlkOiBjcnVtYi5pZCxcbiAgICAgICAgICAgICAgbmFtZTogY3J1bWIubmFtZSxcbiAgICAgICAgICAgICAgb25DbGljazpcbiAgICAgICAgICAgICAgICBpbmRleCAhPT0gYnJlYWRjcnVtYnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdm9pZCBwb3B1bGF0ZU1vdmVUb0ZvbGRlckRyYXdlcihjcnVtYi5pZClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgICAge3N1YmZvbGRlcnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwaWxsXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hZGQtZm9sZGVyLWJ1dHRvbmB9XG4gICAgICAgICAgICAgIG1hcmdpbj17ZmFsc2V9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvcGVuRm9sZGVyRHJhd2VyKClcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2ZpZWxkczphZGRMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5sYWJlbHM/LnNpbmd1bGFyLCBpMThuKSxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxGb2xkZXJEb2N1bWVudERyYXdlclxuICAgICAgICAgICAgICBpbml0aWFsRGF0YT17e1xuICAgICAgICAgICAgICAgIFtmb2xkZXJGaWVsZE5hbWVdOiBmb2xkZXJJRCxcbiAgICAgICAgICAgICAgICBmb2xkZXJUeXBlLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvblNhdmU9eyhyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB2b2lkIG9uQ3JlYXRlU3VjY2Vzcyh7XG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZzogZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5zbHVnLFxuICAgICAgICAgICAgICAgICAgZG9jOiByZXN1bHQuZG9jLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgY2xvc2VGb2xkZXJEcmF3ZXIoKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICByZWRpcmVjdEFmdGVyQ3JlYXRlPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPERyYXdlckNvbnRlbnRDb250YWluZXIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ib2R5LXNlY3Rpb25gfT5cbiAgICAgICAge3N1YmZvbGRlcnMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICBGb2xkZXJSZXN1bHRzQ29tcG9uZW50XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE5vTGlzdFJlc3VsdHNcbiAgICAgICAgICAgIEFjdGlvbnM9e1tcbiAgICAgICAgICAgICAgPExpc3RDcmVhdGVOZXdEb2NJbkZvbGRlckJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvbkxhYmVsPXtgJHt0KCdnZW5lcmFsOmNyZWF0ZScpfSAke2dldFRyYW5zbGF0aW9uKGZvbGRlckNvbGxlY3Rpb25Db25maWcubGFiZWxzPy5zaW5ndWxhciwgaTE4bikudG9Mb3dlckNhc2UoKX1gfVxuICAgICAgICAgICAgICAgIGJ1dHRvblNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWdzPXtbZm9sZGVyQ29sbGVjdGlvblNsdWddfVxuICAgICAgICAgICAgICAgIGZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnM9e3Byb3BzLmZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnN9XG4gICAgICAgICAgICAgICAga2V5PVwiY3JlYXRlLWZvbGRlclwiXG4gICAgICAgICAgICAgICAgb25DcmVhdGVTdWNjZXNzPXtvbkNyZWF0ZVN1Y2Nlc3N9XG4gICAgICAgICAgICAgICAgc2x1Z1ByZWZpeD1cImNyZWF0ZS1uZXctZm9sZGVyLWZyb20tZHJhd2VyLS1uby1yZXN1bHRzXCJcbiAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgTWVzc2FnZT17XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGgzPntpMThuLnQoJ2dlbmVyYWw6bm9SZXN1bHRzRm91bmQnKX08L2gzPlxuICAgICAgICAgICAgICAgIDxwPntpMThuLnQoJ2dlbmVyYWw6bm9SZXN1bHRzRGVzY3JpcHRpb24nKX08L3A+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L0RyYXdlckNvbnRlbnRDb250YWluZXI+XG5cbiAgICAgIHshc2tpcENvbmZpcm1Nb2RhbCAmJiAoXG4gICAgICAgIDxDb25maXJtYXRpb25Nb2RhbFxuICAgICAgICAgIGJvZHk9e1xuICAgICAgICAgICAgPENvbmZpcm1hdGlvbk1lc3NhZ2VcbiAgICAgICAgICAgICAgYWN0aW9uPXtwcm9wcy5hY3Rpb259XG4gICAgICAgICAgICAgIGNvdW50PXtjb3VudH1cbiAgICAgICAgICAgICAgZnJvbUZvbGRlck5hbWU9e2Zyb21Gb2xkZXJOYW1lfVxuICAgICAgICAgICAgICB0aXRsZT17cHJvcHMuYWN0aW9uID09PSAnbW92ZUl0ZW1Ub0ZvbGRlcicgPyBwcm9wcy50aXRsZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgdG9Gb2xkZXJOYW1lPXtnZXRTZWxlY3RlZEZvbGRlcigpLm5hbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25maXJtaW5nTGFiZWw9e3QoJ2dlbmVyYWw6bW92aW5nJyl9XG4gICAgICAgICAgY29uZmlybUxhYmVsPXt0KCdnZW5lcmFsOm1vdmUnKX1cbiAgICAgICAgICBoZWFkaW5nPXt0KCdnZW5lcmFsOmNvbmZpcm1Nb3ZlJyl9XG4gICAgICAgICAgbW9kYWxTbHVnPXtjb25maXJtTW9kYWxTbHVnfVxuICAgICAgICAgIG9uQ29uZmlybT17b25Db25maXJtTW92ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gRHJhd2VySGVhZGluZyhcbiAgcHJvcHM6IHsgY291bnQ/OiBudW1iZXIgfSAmIEFjdGlvblByb3BzICYgUGljazxNb3ZlVG9Gb2xkZXJEcmF3ZXJQcm9wcywgJ2Zyb21Gb2xkZXJOYW1lJz4sXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBzd2l0Y2ggKHByb3BzLmFjdGlvbikge1xuICAgIGNhc2UgJ21vdmVJdGVtVG9Gb2xkZXInOlxuICAgICAgLy8gbW92aW5nIGN1cnJlbnQgZm9sZGVyIGZyb20gbGlzdCB2aWV3IGFjdGlvbnMgbWVudVxuICAgICAgLy8gb3IgbW92aW5nIGl0ZW0gZnJvbSBlZGl0IHZpZXdcbiAgICAgIGlmIChwcm9wcy5mcm9tRm9sZGVyTmFtZSkge1xuICAgICAgICAvLyBtb3ZlIGZyb20gZm9sZGVyXG4gICAgICAgIHJldHVybiB0KCdmb2xkZXI6bW92aW5nRnJvbUZvbGRlcicsIHtcbiAgICAgICAgICBmcm9tRm9sZGVyOiBwcm9wcy5mcm9tRm9sZGVyTmFtZSxcbiAgICAgICAgICB0aXRsZTogcHJvcHMudGl0bGUsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtb3ZlIGZyb20gcm9vdFxuICAgICAgICByZXR1cm4gdCgnZm9sZGVyOnNlbGVjdEZvbGRlckZvckl0ZW0nLCB7XG4gICAgICAgICAgdGl0bGU6IHByb3BzLnRpdGxlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgY2FzZSAnbW92ZUl0ZW1zVG9Gb2xkZXInOlxuICAgICAgaWYgKHByb3BzLmZyb21Gb2xkZXJOYW1lKSB7XG4gICAgICAgIC8vIG1vdmUgZnJvbSBmb2xkZXJcbiAgICAgICAgcmV0dXJuIHQoJ2ZvbGRlcjptb3ZpbmdGcm9tRm9sZGVyJywge1xuICAgICAgICAgIGZyb21Gb2xkZXI6IHByb3BzLmZyb21Gb2xkZXJOYW1lLFxuICAgICAgICAgIHRpdGxlOiBgJHtwcm9wcy5jb3VudH0gJHtwcm9wcy5jb3VudCA+IDEgPyB0KCdnZW5lcmFsOml0ZW1zJykgOiB0KCdnZW5lcmFsOml0ZW0nKX1gLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbW92ZSBmcm9tIHJvb3RcbiAgICAgICAgcmV0dXJuIHQoJ2ZvbGRlcjpzZWxlY3RGb2xkZXJGb3JJdGVtJywge1xuICAgICAgICAgIHRpdGxlOiBgJHtwcm9wcy5jb3VudH0gJHtwcm9wcy5jb3VudCA+IDEgPyB0KCdnZW5lcmFsOml0ZW1zJykgOiB0KCdnZW5lcmFsOml0ZW0nKX1gLFxuICAgICAgICB9KVxuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1lc3NhZ2UoXG4gIHByb3BzOiB7IGNvdW50PzogbnVtYmVyOyB0b0ZvbGRlck5hbWU/OiBzdHJpbmcgfSAmIEFjdGlvblByb3BzICZcbiAgICBQaWNrPE1vdmVUb0ZvbGRlckRyYXdlclByb3BzLCAnZnJvbUZvbGRlck5hbWUnPixcbikge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBzd2l0Y2ggKHByb3BzLmFjdGlvbikge1xuICAgIGNhc2UgJ21vdmVJdGVtVG9Gb2xkZXInOlxuICAgICAgLy8gbW92aW5nIGN1cnJlbnQgZm9sZGVyIGZyb20gbGlzdCB2aWV3IGFjdGlvbnMgbWVudVxuICAgICAgLy8gb3IgbW92aW5nIGl0ZW0gZnJvbSBlZGl0IHZpZXdcbiAgICAgIGlmIChwcm9wcy50b0ZvbGRlck5hbWUpIHtcbiAgICAgICAgLy8gbW92ZSB0byBkZXN0aW5hdGlvblxuICAgICAgICAvLyBZb3UgYXJlIGFib3V0IHRvIG1vdmUge3t0aXRsZX19IHRvIHt7dG9Gb2xkZXJ9fS4gQXJlIHlvdSBzdXJlP1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxUcmFuc2xhdGlvblxuICAgICAgICAgICAgZWxlbWVudHM9e3tcbiAgICAgICAgICAgICAgMTogKHsgY2hpbGRyZW4gfSkgPT4gPHN0cm9uZz57Y2hpbGRyZW59PC9zdHJvbmc+LFxuICAgICAgICAgICAgICAyOiAoeyBjaGlsZHJlbiB9KSA9PiA8c3Ryb25nPntjaGlsZHJlbn08L3N0cm9uZz4sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaTE4bktleT1cImZvbGRlcjptb3ZlSXRlbVRvRm9sZGVyQ29uZmlybWF0aW9uXCJcbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICB2YXJpYWJsZXM9e3tcbiAgICAgICAgICAgICAgdGl0bGU6IHByb3BzLnRpdGxlLFxuICAgICAgICAgICAgICB0b0ZvbGRlcjogcHJvcHMudG9Gb2xkZXJOYW1lLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtb3ZlIHRvIHJvb3RcbiAgICAgICAgLy8gWW91IGFyZSBhYm91dCB0byBtb3ZlIHt7dGl0bGV9fSB0byB0aGUgcm9vdCBmb2xkZXIuIEFyZSB5b3Ugc3VyZT9cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VHJhbnNsYXRpb25cbiAgICAgICAgICAgIGVsZW1lbnRzPXt7XG4gICAgICAgICAgICAgIDE6ICh7IGNoaWxkcmVuIH0pID0+IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBpMThuS2V5PVwiZm9sZGVyOm1vdmVJdGVtVG9Sb290Q29uZmlybWF0aW9uXCJcbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICB2YXJpYWJsZXM9e3tcbiAgICAgICAgICAgICAgdGl0bGU6IHByb3BzLnRpdGxlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG5cbiAgICBjYXNlICdtb3ZlSXRlbXNUb0ZvbGRlcic6XG4gICAgICAvLyBtb3ZpbmcgbWFueSAoZG9jdW1lbnRzL2ZvbGRlcnMpIGZyb20gbGlzdCB2aWV3XG4gICAgICBpZiAocHJvcHMudG9Gb2xkZXJOYW1lKSB7XG4gICAgICAgIC8vIG1vdmUgdG8gZGVzdGluYXRpb25cbiAgICAgICAgLy8gWW91IGFyZSBhYm91dCB0byBtb3ZlIHt7Y291bnR9fSB7e2xhYmVsfX0gdG8ge3t0b0ZvbGRlcn19LiBBcmUgeW91IHN1cmU/XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFRyYW5zbGF0aW9uXG4gICAgICAgICAgICBlbGVtZW50cz17e1xuICAgICAgICAgICAgICAxOiAoeyBjaGlsZHJlbiB9KSA9PiA8c3Ryb25nPntjaGlsZHJlbn08L3N0cm9uZz4sXG4gICAgICAgICAgICAgIDI6ICh7IGNoaWxkcmVuIH0pID0+IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBpMThuS2V5PVwiZm9sZGVyOm1vdmVJdGVtc1RvRm9sZGVyQ29uZmlybWF0aW9uXCJcbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICB2YXJpYWJsZXM9e3tcbiAgICAgICAgICAgICAgY291bnQ6IHByb3BzLmNvdW50LFxuICAgICAgICAgICAgICBsYWJlbDogcHJvcHMuY291bnQgPiAxID8gdCgnZ2VuZXJhbDppdGVtcycpIDogdCgnZ2VuZXJhbDppdGVtJyksXG4gICAgICAgICAgICAgIHRvRm9sZGVyOiBwcm9wcy50b0ZvbGRlck5hbWUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1vdmUgdG8gcm9vdFxuICAgICAgICAvLyBZb3UgYXJlIGFib3V0IHRvIG1vdmUge3tjb3VudH19IHt7bGFiZWx9fSB0byB0aGUgcm9vdCBmb2xkZXIuIEFyZSB5b3Ugc3VyZT9cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8VHJhbnNsYXRpb25cbiAgICAgICAgICAgIGVsZW1lbnRzPXt7XG4gICAgICAgICAgICAgIDE6ICh7IGNoaWxkcmVuIH0pID0+IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBpMThuS2V5PVwiZm9sZGVyOm1vdmVJdGVtc1RvUm9vdENvbmZpcm1hdGlvblwiXG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgdmFyaWFibGVzPXt7XG4gICAgICAgICAgICAgIGNvdW50OiBwcm9wcy5jb3VudCxcbiAgICAgICAgICAgICAgbGFiZWw6IHByb3BzLmNvdW50ID4gMSA/IHQoJ2dlbmVyYWw6aXRlbXMnKSA6IHQoJ2dlbmVyYWw6aXRlbScpLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gIH1cbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcsIENvbGxlY3Rpb25TbHVnLCBGb2xkZXJTb3J0S2V5cyB9IGZyb20gJ3BheWxvYWQnXG5pbXBvcnQgdHlwZSB7IEZvbGRlckJyZWFkY3J1bWIsIEZvbGRlckRvY3VtZW50SXRlbUtleSwgRm9sZGVyT3JEb2N1bWVudCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5pbXBvcnQgeyB1c2VSb3V0ZXIsIHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IGV4dHJhY3RJRCwgZm9ybWF0QWRtaW5VUkwsIGZvcm1hdEZvbGRlck9yRG9jdW1lbnRJdGVtIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHsgdXNlRHJhd2VyRGVwdGggfSBmcm9tICcuLi8uLi9lbGVtZW50cy9EcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBwYXJzZVNlYXJjaFBhcmFtcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9wYXJzZVNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4uL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBncm91cEl0ZW1JRHNCeVJlbGF0aW9uIH0gZnJvbSAnLi9ncm91cEl0ZW1JRHNCeVJlbGF0aW9uLmpzJ1xuXG50eXBlIEZvbGRlclF1ZXJ5UGFyYW1zID0ge1xuICBwYWdlPzogc3RyaW5nXG4gIHJlbGF0aW9uVG8/OiBDb2xsZWN0aW9uU2x1Z1tdXG4gIHNlYXJjaD86IHN0cmluZ1xuICBzb3J0Pzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEZpbGVDYXJkRGF0YSA9IHtcbiAgZmlsZW5hbWU6IHN0cmluZ1xuICBpZDogbnVtYmVyIHwgc3RyaW5nXG4gIG1pbWVUeXBlOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHVybDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEZvbGRlckNvbnRleHRWYWx1ZSA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb2xsZWN0aW9uIHNsdWdzIHRoYXQgYSB2aWV3IGNhbiBiZSBmaWx0ZXJlZCBieVxuICAgKiBVc2VkIGluIHRoZSBicm93c2UtYnktZm9sZGVyIHZpZXdcbiAgICovXG4gIGFjdGl2ZUNvbGxlY3Rpb25Gb2xkZXJTbHVnczogQ29sbGVjdGlvblNsdWdbXVxuICAvKipcbiAgICogRm9sZGVyIGVuYWJsZWQgY29sbGVjdGlvbiBzbHVncyB0aGF0IGNhbiBiZSBwb3B1bGF0ZWQgd2l0aGluIHRoZSBwcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkgYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzPzogQ29sbGVjdGlvblNsdWdbXVxuICBhbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVnczogQ29sbGVjdGlvblNsdWdbXVxuICBicmVhZGNydW1icz86IEZvbGRlckJyZWFkY3J1bWJbXVxuICBjaGVja0lmSXRlbUlzRGlzYWJsZWQ6IChpdGVtOiBGb2xkZXJPckRvY3VtZW50KSA9PiBib29sZWFuXG4gIGNsZWFyU2VsZWN0aW9uczogKCkgPT4gdm9pZFxuICBjdXJyZW50Rm9sZGVyPzogRm9sZGVyT3JEb2N1bWVudCB8IG51bGxcbiAgZG9jdW1lbnRzPzogRm9sZGVyT3JEb2N1bWVudFtdXG4gIGRyYWdPdmVybGF5SXRlbT86IEZvbGRlck9yRG9jdW1lbnQgfCB1bmRlZmluZWRcbiAgZm9jdXNlZFJvd0luZGV4OiBudW1iZXJcbiAgZm9sZGVyQ29sbGVjdGlvbkNvbmZpZzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICBmb2xkZXJDb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gIGZvbGRlckZpZWxkTmFtZTogc3RyaW5nXG4gIGZvbGRlcklEPzogbnVtYmVyIHwgc3RyaW5nXG4gIEZvbGRlclJlc3VsdHNDb21wb25lbnQ6IFJlYWN0LlJlYWN0Tm9kZVxuICBmb2xkZXJUeXBlOiBDb2xsZWN0aW9uU2x1Z1tdIHwgdW5kZWZpbmVkXG4gIGdldEZvbGRlclJvdXRlOiAodG9Gb2xkZXJJRD86IG51bWJlciB8IHN0cmluZykgPT4gc3RyaW5nXG4gIGdldFNlbGVjdGVkSXRlbXM/OiAoKSA9PiBGb2xkZXJPckRvY3VtZW50W11cbiAgaXNEcmFnZ2luZzogYm9vbGVhblxuICBpdGVtS2V5c1RvTW92ZT86IFNldDxGb2xkZXJEb2N1bWVudEl0ZW1LZXk+XG4gIG1vdmVUb0ZvbGRlcjogKGFyZ3M6IHtcbiAgICBpdGVtc1RvTW92ZTogRm9sZGVyT3JEb2N1bWVudFtdXG4gICAgdG9Gb2xkZXJJRD86IG51bWJlciB8IHN0cmluZ1xuICB9KSA9PiBQcm9taXNlPHZvaWQ+XG4gIG9uSXRlbUNsaWNrOiAoYXJnczogeyBldmVudDogUmVhY3QuTW91c2VFdmVudDsgaW5kZXg6IG51bWJlcjsgaXRlbTogRm9sZGVyT3JEb2N1bWVudCB9KSA9PiB2b2lkXG4gIG9uSXRlbUtleVByZXNzOiAoYXJnczoge1xuICAgIGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50XG4gICAgaW5kZXg6IG51bWJlclxuICAgIGl0ZW06IEZvbGRlck9yRG9jdW1lbnRcbiAgfSkgPT4gdm9pZFxuICByZWZpbmVGb2xkZXJEYXRhOiAoYXJnczogeyBxdWVyeT86IEZvbGRlclF1ZXJ5UGFyYW1zOyB1cGRhdGVVUkw6IGJvb2xlYW4gfSkgPT4gdm9pZFxuICBzZWFyY2g6IHN0cmluZ1xuICBzZWxlY3RlZEZvbGRlckNvbGxlY3Rpb25zPzogQ29sbGVjdGlvblNsdWdbXVxuICByZWFkb25seSBzZWxlY3RlZEl0ZW1LZXlzOiBTZXQ8Rm9sZGVyRG9jdW1lbnRJdGVtS2V5PlxuICBzZXRCcmVhZGNydW1iczogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Rm9sZGVyQnJlYWRjcnVtYltdPj5cbiAgc2V0Rm9jdXNlZFJvd0luZGV4OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxudW1iZXI+PlxuICBzZXRJc0RyYWdnaW5nOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cbiAgc29ydDogRm9sZGVyU29ydEtleXNcbiAgc3ViZm9sZGVycz86IEZvbGRlck9yRG9jdW1lbnRbXVxufVxuXG5jb25zdCBDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxGb2xkZXJDb250ZXh0VmFsdWU+KHtcbiAgYWN0aXZlQ29sbGVjdGlvbkZvbGRlclNsdWdzOiBbXSxcbiAgYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzOiBbXSxcbiAgYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3M6IFtdLFxuICBicmVhZGNydW1iczogW10sXG4gIGNoZWNrSWZJdGVtSXNEaXNhYmxlZDogKCkgPT4gZmFsc2UsXG4gIGNsZWFyU2VsZWN0aW9uczogKCkgPT4ge30sXG4gIGN1cnJlbnRGb2xkZXI6IG51bGwsXG4gIGRvY3VtZW50czogW10sXG4gIGRyYWdPdmVybGF5SXRlbTogdW5kZWZpbmVkLFxuICBmb2N1c2VkUm93SW5kZXg6IC0xLFxuICBmb2xkZXJDb2xsZWN0aW9uQ29uZmlnOiBudWxsLFxuICBmb2xkZXJDb2xsZWN0aW9uU2x1ZzogJycsXG4gIGZvbGRlckZpZWxkTmFtZTogJ2ZvbGRlcicsXG4gIGZvbGRlcklEOiB1bmRlZmluZWQsXG4gIEZvbGRlclJlc3VsdHNDb21wb25lbnQ6IG51bGwsXG4gIGZvbGRlclR5cGU6IHVuZGVmaW5lZCxcbiAgZ2V0Rm9sZGVyUm91dGU6ICgpID0+ICcnLFxuICBnZXRTZWxlY3RlZEl0ZW1zOiAoKSA9PiBbXSxcbiAgaXNEcmFnZ2luZzogZmFsc2UsXG4gIGl0ZW1LZXlzVG9Nb3ZlOiB1bmRlZmluZWQsXG4gIG1vdmVUb0ZvbGRlcjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCksXG4gIG9uSXRlbUNsaWNrOiAoKSA9PiB1bmRlZmluZWQsXG4gIG9uSXRlbUtleVByZXNzOiAoKSA9PiB1bmRlZmluZWQsXG4gIHJlZmluZUZvbGRlckRhdGE6ICgpID0+IHVuZGVmaW5lZCxcbiAgc2VhcmNoOiAnJyxcbiAgc2VsZWN0ZWRGb2xkZXJDb2xsZWN0aW9uczogdW5kZWZpbmVkLFxuICBzZWxlY3RlZEl0ZW1LZXlzOiBuZXcgU2V0PEZvbGRlckRvY3VtZW50SXRlbUtleT4oKSxcbiAgc2V0QnJlYWRjcnVtYnM6ICgpID0+IHt9LFxuICBzZXRGb2N1c2VkUm93SW5kZXg6ICgpID0+IC0xLFxuICBzZXRJc0RyYWdnaW5nOiAoKSA9PiBmYWxzZSxcbiAgc29ydDogJ25hbWUnLFxuICBzdWJmb2xkZXJzOiBbXSxcbn0pXG5cbmV4cG9ydCB0eXBlIEZvbGRlclByb3ZpZGVyUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgY29sbGVjdGlvbiBzbHVncyB0aGF0IGFyZSBiZWluZyB2aWV3ZWRcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZUNvbGxlY3Rpb25Gb2xkZXJTbHVncz86IENvbGxlY3Rpb25TbHVnW11cbiAgLyoqXG4gICAqIEZvbGRlciBlbmFibGVkIGNvbGxlY3Rpb24gc2x1Z3MgdGhhdCBjYW4gYmUgcG9wdWxhdGVkIHdpdGhpbiB0aGUgcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGFsbENvbGxlY3Rpb25Gb2xkZXJTbHVnczogQ29sbGVjdGlvblNsdWdbXVxuICAvKipcbiAgICogQXJyYXkgb2Ygc2x1Z3MgdGhhdCBjYW4gYmUgY3JlYXRlZCBpbiB0aGUgZm9sZGVyIHZpZXdcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzOiBDb2xsZWN0aW9uU2x1Z1tdXG4gIHJlYWRvbmx5IGFsbG93TXVsdGlTZWxlY3Rpb24/OiBib29sZWFuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBmb2xkZXIgcm91dGUgcGF0aFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgL2NvbGxlY3Rpb25zLzpjb2xsZWN0aW9uU2x1Zy86Zm9sZGVyQ29sbGVjdGlvblNsdWdgXG4gICAqIG9yXG4gICAqIGAvYnJvd3NlLWJ5LWZvbGRlcmBcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VGb2xkZXJQYXRoPzogYC8ke3N0cmluZ31gXG4gIC8qKlxuICAgKiBCcmVhZGNydW1icyBmb3IgdGhlIGN1cnJlbnQgZm9sZGVyXG4gICAqL1xuICByZWFkb25seSBicmVhZGNydW1icz86IEZvbGRlckJyZWFkY3J1bWJbXVxuICAvKipcbiAgICogQ2hpbGRyZW4gdG8gcmVuZGVyIGluc2lkZSB0aGUgcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIEFsbCBkb2N1bWVudHMgaW4gdGhlIGN1cnJlbnQgZm9sZGVyXG4gICAqL1xuICByZWFkb25seSBkb2N1bWVudHM6IEZvbGRlck9yRG9jdW1lbnRbXVxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRoYXQgY29udGFpbnMgdGhlIGZvbGRlciByZWxhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyRmllbGROYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgY3VycmVudCBmb2xkZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcklEPzogbnVtYmVyIHwgc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHRvIHJlbmRlciB0aGUgZm9sZGVyIHJlc3VsdHNcbiAgICovXG4gIHJlYWRvbmx5IEZvbGRlclJlc3VsdHNDb21wb25lbnQ6IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGFuIGl0ZW0gaXMgY2xpY2tlZFxuICAgKi9cbiAgcmVhZG9ubHkgb25JdGVtQ2xpY2s/OiAoaXRtZTogRm9sZGVyT3JEb2N1bWVudCkgPT4gdm9pZFxuICAvKipcbiAgICogVGhlIGludGlhbCBzZWFyY2ggcXVlcnlcbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaD86IHN0cmluZ1xuICAvKipcbiAgICogVGhlIHNvcnQgb3JkZXIgb2YgdGhlIGRvY3VtZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgbmFtZWAgZm9yIGRlc2NlbmRpbmdcbiAgICogYC1uYW1lYCBmb3IgYXNjZW5kaW5nXG4gICAqL1xuICByZWFkb25seSBzb3J0PzogRm9sZGVyU29ydEtleXNcbiAgLyoqXG4gICAqIEFsbCBzdWJmb2xkZXJzIGluIHRoZSBjdXJyZW50IGZvbGRlclxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZm9sZGVyczogRm9sZGVyT3JEb2N1bWVudFtdXG59XG5leHBvcnQgZnVuY3Rpb24gRm9sZGVyUHJvdmlkZXIoe1xuICBhY3RpdmVDb2xsZWN0aW9uRm9sZGVyU2x1Z3M6IGFjdGl2ZUNvbGxlY3Rpb25TbHVncyxcbiAgYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzID0gW10sXG4gIGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzLFxuICBhbGxvd011bHRpU2VsZWN0aW9uID0gdHJ1ZSxcbiAgYmFzZUZvbGRlclBhdGgsXG4gIGJyZWFkY3J1bWJzOiBfYnJlYWRjcnVtYnNGcm9tUHJvcHMgPSBbXSxcbiAgY2hpbGRyZW4sXG4gIGRvY3VtZW50cyxcbiAgZm9sZGVyRmllbGROYW1lLFxuICBmb2xkZXJJRCxcbiAgRm9sZGVyUmVzdWx0c0NvbXBvbmVudDogSW5pdGlhbEZvbGRlclJlc3VsdHNDb21wb25lbnQsXG4gIG9uSXRlbUNsaWNrOiBvbkl0ZW1DbGlja0Zyb21Qcm9wcyxcbiAgc2VhcmNoLFxuICBzb3J0ID0gJ25hbWUnLFxuICBzdWJmb2xkZXJzLFxufTogRm9sZGVyUHJvdmlkZXJQcm9wcykge1xuICBjb25zdCBwYXJlbnRGb2xkZXJDb250ZXh0ID0gdXNlRm9sZGVyKClcbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgcm91dGVzIH0gPSBjb25maWdcbiAgY29uc3QgZHJhd2VyRGVwdGggPSB1c2VEcmF3ZXJEZXB0aCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICBjb25zdCB7IHN0YXJ0Um91dGVUcmFuc2l0aW9uIH0gPSB1c2VSb3V0ZVRyYW5zaXRpb24oKVxuICBjb25zdCBsb2NhbGUgPSB1c2VMb2NhbGUoKVxuICBjb25zdCBsb2NhbGVDb2RlID0gbG9jYWxlID8gbG9jYWxlLmNvZGUgOiB1bmRlZmluZWRcblxuICBjb25zdCBjdXJyZW50bHlTZWxlY3RlZEluZGV4ZXMgPSBSZWFjdC51c2VSZWYobmV3IFNldDxudW1iZXI+KCkpXG5cbiAgY29uc3QgW3NlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMsIHNldFNlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnNdID0gUmVhY3QudXNlU3RhdGU8XG4gICAgQ29sbGVjdGlvblNsdWdbXVxuICA+KFtdKVxuICBjb25zdCBbRm9sZGVyUmVzdWx0c0NvbXBvbmVudCwgc2V0Rm9sZGVyUmVzdWx0c0NvbXBvbmVudF0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICBJbml0aWFsRm9sZGVyUmVzdWx0c0NvbXBvbmVudCB8fCAoKCkgPT4gbnVsbCksXG4gIClcbiAgY29uc3QgW2ZvbGRlckNvbGxlY3Rpb25Db25maWddID0gUmVhY3QudXNlU3RhdGUoKCkgPT5cbiAgICBjb25maWcuY29sbGVjdGlvbnMuZmluZChcbiAgICAgIChjb2xsZWN0aW9uKSA9PiBjb25maWcuZm9sZGVycyAmJiBjb2xsZWN0aW9uLnNsdWcgPT09IGNvbmZpZy5mb2xkZXJzLnNsdWcsXG4gICAgKSxcbiAgKVxuICBjb25zdCBmb2xkZXJDb2xsZWN0aW9uU2x1ZyA9IGZvbGRlckNvbGxlY3Rpb25Db25maWcuc2x1Z1xuXG4gIGNvbnN0IHJhd1NlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpXG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gcGFyc2VTZWFyY2hQYXJhbXMocmF3U2VhcmNoUGFyYW1zKSwgW3Jhd1NlYXJjaFBhcmFtc10pXG4gIGNvbnN0IFtjdXJyZW50UXVlcnksIHNldEN1cnJlbnRRdWVyeV0gPSBSZWFjdC51c2VTdGF0ZTxGb2xkZXJRdWVyeVBhcmFtcz4oc2VhcmNoUGFyYW1zKVxuXG4gIGNvbnN0IFtpc0RyYWdnaW5nLCBzZXRJc0RyYWdnaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRJdGVtS2V5cywgc2V0U2VsZWN0ZWRJdGVtS2V5c10gPSBSZWFjdC51c2VTdGF0ZTxTZXQ8Rm9sZGVyRG9jdW1lbnRJdGVtS2V5Pj4oXG4gICAgKCkgPT4gbmV3IFNldCgpLFxuICApXG4gIGNvbnN0IFtmb2N1c2VkUm93SW5kZXgsIHNldEZvY3VzZWRSb3dJbmRleF0gPSBSZWFjdC51c2VTdGF0ZSgtMSlcbiAgLy8gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IGRhdGEgdG8gZGlzcGxheSBvbiB0aGUgZHJhZyBvdmVybGF5XG4gIGNvbnN0IFtkcmFnT3ZlcmxheUl0ZW0sIHNldERyYWdPdmVybGF5SXRlbV0gPSBSZWFjdC51c2VTdGF0ZTxGb2xkZXJPckRvY3VtZW50IHwgdW5kZWZpbmVkPigpXG4gIGNvbnN0IFticmVhZGNydW1icywgc2V0QnJlYWRjcnVtYnNdID1cbiAgICBSZWFjdC51c2VTdGF0ZTxGb2xkZXJDb250ZXh0VmFsdWVbJ2JyZWFkY3J1bWJzJ10+KF9icmVhZGNydW1ic0Zyb21Qcm9wcylcbiAgY29uc3QgbGFzdENsaWNrVGltZSA9IFJlYWN0LnVzZVJlZjxudWxsIHwgbnVtYmVyPihudWxsKVxuICBjb25zdCB0b3RhbENvdW50ID0gc3ViZm9sZGVycy5sZW5ndGggKyBkb2N1bWVudHMubGVuZ3RoXG5cbiAgY29uc3QgY2xlYXJTZWxlY3Rpb25zID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEZvY3VzZWRSb3dJbmRleCgtMSlcbiAgICBzZXRTZWxlY3RlZEl0ZW1LZXlzKG5ldyBTZXQoKSlcbiAgICBzZXREcmFnT3ZlcmxheUl0ZW0odW5kZWZpbmVkKVxuICAgIGN1cnJlbnRseVNlbGVjdGVkSW5kZXhlcy5jdXJyZW50ID0gbmV3IFNldCgpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IG1lcmdlUXVlcnkgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAobmV3UXVlcnk6IFBhcnRpYWw8Rm9sZGVyUXVlcnlQYXJhbXM+ID0ge30pOiBQYXJ0aWFsPEZvbGRlclF1ZXJ5UGFyYW1zPiA9PiB7XG4gICAgICBsZXQgcGFnZSA9ICdwYWdlJyBpbiBuZXdRdWVyeSA/IG5ld1F1ZXJ5LnBhZ2UgOiBjdXJyZW50UXVlcnk/LnBhZ2VcblxuICAgICAgaWYgKCdzZWFyY2gnIGluIG5ld1F1ZXJ5KSB7XG4gICAgICAgIHBhZ2UgPSAnMSdcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVyZ2VkUXVlcnkgPSB7XG4gICAgICAgIC4uLmN1cnJlbnRRdWVyeSxcbiAgICAgICAgLi4ubmV3UXVlcnksXG4gICAgICAgIGxvY2FsZTogbG9jYWxlQ29kZSxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgcmVsYXRpb25UbzogJ3JlbGF0aW9uVG8nIGluIG5ld1F1ZXJ5ID8gbmV3UXVlcnkucmVsYXRpb25UbyA6IGN1cnJlbnRRdWVyeT8ucmVsYXRpb25UbyxcbiAgICAgICAgc2VhcmNoOiAnc2VhcmNoJyBpbiBuZXdRdWVyeSA/IG5ld1F1ZXJ5LnNlYXJjaCA6IGN1cnJlbnRRdWVyeT8uc2VhcmNoLFxuICAgICAgICBzb3J0OiAnc29ydCcgaW4gbmV3UXVlcnkgPyBuZXdRdWVyeS5zb3J0IDogKGN1cnJlbnRRdWVyeT8uc29ydCA/PyB1bmRlZmluZWQpLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2VkUXVlcnlcbiAgICB9LFxuICAgIFtjdXJyZW50UXVlcnksIGxvY2FsZUNvZGVdLFxuICApXG5cbiAgY29uc3QgcmVmaW5lRm9sZGVyRGF0YTogRm9sZGVyQ29udGV4dFZhbHVlWydyZWZpbmVGb2xkZXJEYXRhJ10gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoeyBxdWVyeSwgdXBkYXRlVVJMIH0pID0+IHtcbiAgICAgIGlmICh1cGRhdGVVUkwpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBtZXJnZVF1ZXJ5KHF1ZXJ5KVxuXG4gICAgICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+XG4gICAgICAgICAgcm91dGVyLnJlcGxhY2UoXG4gICAgICAgICAgICBgJHtxcy5zdHJpbmdpZnkoeyAuLi5xdWVyeVBhcmFtcywgcmVsYXRpb25UbzogSlNPTi5zdHJpbmdpZnkocXVlcnlQYXJhbXMucmVsYXRpb25UbykgfSwgeyBhZGRRdWVyeVByZWZpeDogdHJ1ZSB9KX1gLFxuICAgICAgICAgICksXG4gICAgICAgIClcblxuICAgICAgICBzZXRDdXJyZW50UXVlcnkocXVlcnlQYXJhbXMpXG4gICAgICB9XG4gICAgfSxcbiAgICBbbWVyZ2VRdWVyeSwgcm91dGVyLCBzdGFydFJvdXRlVHJhbnNpdGlvbl0sXG4gIClcblxuICBjb25zdCBnZXRGb2xkZXJSb3V0ZTogRm9sZGVyQ29udGV4dFZhbHVlWydnZXRGb2xkZXJSb3V0ZSddID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRvRm9sZGVySUQpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gcXMuc3RyaW5naWZ5KG1lcmdlUXVlcnkoeyBwYWdlOiAnMScsIHNlYXJjaDogJycgfSksIHtcbiAgICAgICAgYWRkUXVlcnlQcmVmaXg6IHRydWUsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgYWRtaW5Sb3V0ZTogY29uZmlnLnJvdXRlcy5hZG1pbixcbiAgICAgICAgcGF0aDogYCR7YmFzZUZvbGRlclBhdGh9JHt0b0ZvbGRlcklEID8gYC8ke3RvRm9sZGVySUR9YCA6ICcnfSR7cXVlcnlQYXJhbXN9YCxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYmFzZUZvbGRlclBhdGgsIGNvbmZpZy5yb3V0ZXMuYWRtaW4sIG1lcmdlUXVlcnldLFxuICApXG5cbiAgY29uc3QgZ2V0SXRlbSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpdGVtS2V5OiBGb2xkZXJEb2N1bWVudEl0ZW1LZXkpID0+IHtcbiAgICAgIHJldHVybiBbLi4uc3ViZm9sZGVycywgLi4uZG9jdW1lbnRzXS5maW5kKChkb2MpID0+IGRvYy5pdGVtS2V5ID09PSBpdGVtS2V5KVxuICAgIH0sXG4gICAgW2RvY3VtZW50cywgc3ViZm9sZGVyc10sXG4gIClcblxuICBjb25zdCBnZXRTZWxlY3RlZEl0ZW1zID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHNlbGVjdGVkSXRlbUtleXMpLnJlZHVjZSgoYWNjLCBpdGVtS2V5KSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gZ2V0SXRlbShpdGVtS2V5KVxuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgYWNjLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBbXSlcbiAgfSwgW3NlbGVjdGVkSXRlbUtleXMsIGdldEl0ZW1dKVxuXG4gIGNvbnN0IG5hdmlnYXRlQWZ0ZXJTZWxlY3Rpb24gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoeyBjb2xsZWN0aW9uU2x1ZywgZG9jSUQgfTogeyBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nOyBkb2NJRD86IG51bWJlciB8IHN0cmluZyB9KSA9PiB7XG4gICAgICBpZiAoZHJhd2VyRGVwdGggPT09IDEpIHtcbiAgICAgICAgLy8gbm90IGluIGEgZHJhd2VyIChkZWZhdWx0IGlzIDEpXG4gICAgICAgIGlmIChjb2xsZWN0aW9uU2x1ZyA9PT0gZm9sZGVyQ29sbGVjdGlvblNsdWcpIHtcbiAgICAgICAgICAvLyBjbGlja2VkIG9uIGZvbGRlciwgdGFrZSB0aGUgdXNlciB0byB0aGUgZm9sZGVyIHZpZXdcbiAgICAgICAgICBzdGFydFJvdXRlVHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgICAgICByb3V0ZXIucHVzaChnZXRGb2xkZXJSb3V0ZShkb2NJRCkpXG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbnMoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvblNsdWcpIHtcbiAgICAgICAgICAvLyBjbGlja2VkIG9uIGRvY3VtZW50LCB0YWtlIHRoZSB1c2VyIHRvIHRoZSBkb2N1bWV0IHZpZXdcbiAgICAgICAgICBzdGFydFJvdXRlVHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgICAgICByb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IGNvbmZpZy5yb3V0ZXMuYWRtaW4sXG4gICAgICAgICAgICAgICAgcGF0aDogYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25TbHVnfS8ke2RvY0lEfWAsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb25zKClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhclNlbGVjdGlvbnMoKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbUNsaWNrRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9uSXRlbUNsaWNrRnJvbVByb3BzKGdldEl0ZW0oYCR7Y29sbGVjdGlvblNsdWd9LSR7ZG9jSUR9YCkpXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBjbGVhclNlbGVjdGlvbnMsXG4gICAgICBjb25maWcucm91dGVzLmFkbWluLFxuICAgICAgZHJhd2VyRGVwdGgsXG4gICAgICBmb2xkZXJDb2xsZWN0aW9uU2x1ZyxcbiAgICAgIGdldEZvbGRlclJvdXRlLFxuICAgICAgZ2V0SXRlbSxcbiAgICAgIG9uSXRlbUNsaWNrRnJvbVByb3BzLFxuICAgICAgcm91dGVyLFxuICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24sXG4gICAgXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNoaWZ0U2VsZWN0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGFsbEl0ZW1zID0gWy4uLnN1YmZvbGRlcnMsIC4uLmRvY3VtZW50c11cblxuICAgICAgLy8gRmluZCBleGlzdGluZyBzZWxlY3Rpb24gYm91bmRhcmllc1xuICAgICAgY29uc3QgZXhpc3RpbmdJbmRleGVzID0gYWxsSXRlbXMucmVkdWNlKChhY2MsIGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtS2V5cy5oYXMoaXRlbS5pdGVtS2V5KSkge1xuICAgICAgICAgIGFjYy5wdXNoKGlkeClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBbXSlcblxuICAgICAgaWYgKGV4aXN0aW5nSW5kZXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gTm8gZXhpc3Rpbmcgc2VsZWN0aW9uLCBqdXN0IHNlbGVjdCB0YXJnZXRcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRJbmRleF1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZEluZGV4ID0gTWF0aC5taW4oLi4uZXhpc3RpbmdJbmRleGVzKVxuICAgICAgY29uc3QgbGFzdFNlbGVjdGVkSW5kZXggPSBNYXRoLm1heCguLi5leGlzdGluZ0luZGV4ZXMpXG4gICAgICBjb25zdCBpc1dpdGhpbkJvdW5kcyA9IHRhcmdldEluZGV4ID49IGZpcnN0U2VsZWN0ZWRJbmRleCAmJiB0YXJnZXRJbmRleCA8PSBsYXN0U2VsZWN0ZWRJbmRleFxuXG4gICAgICAvLyBDaG9vc2UgYW5jaG9yIGJhc2VkIG9uIHdoZXRoZXIgd2UncmUgY29udHJhY3Rpbmcgb3IgZXh0ZW5kaW5nXG4gICAgICBsZXQgYW5jaG9ySW5kZXggPSB0YXJnZXRJbmRleFxuICAgICAgaWYgKGlzV2l0aGluQm91bmRzKSB7XG4gICAgICAgIC8vIENvbnRyYWN0aW5nOiBpZiB0YXJnZXQgaXMgYXQgYSBib3VuZGFyeSwgdXNlIHRhcmdldCBhcyBhbmNob3JcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgZnVydGhlc3QgYm91bmRhcnkgdG8gbWFpbnRhaW4gb3Bwb3NpdGUgZWRnZVxuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPT09IGZpcnN0U2VsZWN0ZWRJbmRleCB8fCB0YXJnZXRJbmRleCA9PT0gbGFzdFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICBhbmNob3JJbmRleCA9IHRhcmdldEluZGV4XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VUb0ZpcnN0ID0gTWF0aC5hYnModGFyZ2V0SW5kZXggLSBmaXJzdFNlbGVjdGVkSW5kZXgpXG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VUb0xhc3QgPSBNYXRoLmFicyh0YXJnZXRJbmRleCAtIGxhc3RTZWxlY3RlZEluZGV4KVxuICAgICAgICAgIGFuY2hvckluZGV4ID0gZGlzdGFuY2VUb0ZpcnN0ID49IGRpc3RhbmNlVG9MYXN0ID8gZmlyc3RTZWxlY3RlZEluZGV4IDogbGFzdFNlbGVjdGVkSW5kZXhcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRXh0ZW5kaW5nOiB1c2UgY2xvc2VzdCBib3VuZGFyeVxuICAgICAgICBjb25zdCBkaXN0YW5jZVRvRmlyc3QgPSBNYXRoLmFicyh0YXJnZXRJbmRleCAtIGZpcnN0U2VsZWN0ZWRJbmRleClcbiAgICAgICAgY29uc3QgZGlzdGFuY2VUb0xhc3QgPSBNYXRoLmFicyh0YXJnZXRJbmRleCAtIGxhc3RTZWxlY3RlZEluZGV4KVxuICAgICAgICBhbmNob3JJbmRleCA9IGRpc3RhbmNlVG9GaXJzdCA8PSBkaXN0YW5jZVRvTGFzdCA/IGZpcnN0U2VsZWN0ZWRJbmRleCA6IGxhc3RTZWxlY3RlZEluZGV4XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSByYW5nZSBmcm9tIGFuY2hvciB0byB0YXJnZXRcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBNYXRoLm1pbihhbmNob3JJbmRleCwgdGFyZ2V0SW5kZXgpXG4gICAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWF4KGFuY2hvckluZGV4LCB0YXJnZXRJbmRleClcbiAgICAgIGNvbnN0IG5ld1JhbmdlSW5kZXhlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIHsgbGVuZ3RoOiBlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxIH0sXG4gICAgICAgIChfLCBpKSA9PiBzdGFydEluZGV4ICsgaSxcbiAgICAgIClcblxuICAgICAgaWYgKGlzV2l0aGluQm91bmRzKSB7XG4gICAgICAgIC8vIENvbnRyYWN0aW5nOiByZXBsYWNlIHdpdGggbmV3IHJhbmdlXG4gICAgICAgIHJldHVybiBuZXdSYW5nZUluZGV4ZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEV4dGVuZGluZzogdW5pb24gd2l0aCBleGlzdGluZ1xuICAgICAgICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLmV4aXN0aW5nSW5kZXhlcywgLi4ubmV3UmFuZ2VJbmRleGVzXSldXG4gICAgICB9XG4gICAgfSxcbiAgICBbc3ViZm9sZGVycywgZG9jdW1lbnRzLCBzZWxlY3RlZEl0ZW1LZXlzXSxcbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVNlbGVjdGlvbnMgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoeyBpbmRleGVzIH06IHsgaW5kZXhlczogbnVtYmVyW10gfSkgPT4ge1xuICAgICAgY29uc3QgYWxsSXRlbXMgPSBbLi4uc3ViZm9sZGVycywgLi4uZG9jdW1lbnRzXVxuICAgICAgY29uc3QgeyBuZXdTZWxlY3RlZEZvbGRlckNvbGxlY3Rpb25zLCBuZXdTZWxlY3RlZEl0ZW1LZXlzIH0gPSBhbGxJdGVtcy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGluZGV4ZXMuaW5jbHVkZXMoaW5kZXgpKSB7XG4gICAgICAgICAgICBhY2MubmV3U2VsZWN0ZWRJdGVtS2V5cy5hZGQoaXRlbS5pdGVtS2V5KVxuICAgICAgICAgICAgaWYgKGl0ZW0ucmVsYXRpb25UbyA9PT0gZm9sZGVyQ29sbGVjdGlvblNsdWcpIHtcbiAgICAgICAgICAgICAgaXRlbS52YWx1ZS5mb2xkZXJUeXBlPy5mb3JFYWNoKChjb2xsZWN0aW9uU2x1ZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWNjLm5ld1NlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMuaW5jbHVkZXMoY29sbGVjdGlvblNsdWcpKSB7XG4gICAgICAgICAgICAgICAgICBhY2MubmV3U2VsZWN0ZWRGb2xkZXJDb2xsZWN0aW9ucy5wdXNoKGNvbGxlY3Rpb25TbHVnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICghYWNjLm5ld1NlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMuaW5jbHVkZXMoaXRlbS5yZWxhdGlvblRvKSkge1xuICAgICAgICAgICAgICAgIGFjYy5uZXdTZWxlY3RlZEZvbGRlckNvbGxlY3Rpb25zLnB1c2goaXRlbS5yZWxhdGlvblRvKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5ld1NlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnM6IFtdIHNhdGlzZmllcyBDb2xsZWN0aW9uU2x1Z1tdLFxuICAgICAgICAgIG5ld1NlbGVjdGVkSXRlbUtleXM6IG5ldyBTZXQ8Rm9sZGVyRG9jdW1lbnRJdGVtS2V5PigpLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBzZXRTZWxlY3RlZEZvbGRlckNvbGxlY3Rpb25zKG5ld1NlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMpXG4gICAgICBzZXRTZWxlY3RlZEl0ZW1LZXlzKG5ld1NlbGVjdGVkSXRlbUtleXMpXG4gICAgfSxcbiAgICBbZG9jdW1lbnRzLCBmb2xkZXJDb2xsZWN0aW9uU2x1Zywgc3ViZm9sZGVyc10sXG4gIClcblxuICBjb25zdCBvbkl0ZW1LZXlQcmVzczogRm9sZGVyQ29udGV4dFZhbHVlWydvbkl0ZW1LZXlQcmVzcyddID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHsgZXZlbnQsIGl0ZW06IGN1cnJlbnRJdGVtIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgY29kZSwgY3RybEtleSwgbWV0YUtleSwgc2hpZnRLZXkgfSA9IGV2ZW50XG4gICAgICBjb25zdCBpc1NoaWZ0UHJlc3NlZCA9IHNoaWZ0S2V5XG4gICAgICBjb25zdCBpc0N0cmxQcmVzc2VkID0gY3RybEtleSB8fCBtZXRhS2V5XG4gICAgICBjb25zdCBpc0N1cnJlbnRseVNlbGVjdGVkID0gc2VsZWN0ZWRJdGVtS2V5cy5oYXMoY3VycmVudEl0ZW0uaXRlbUtleSlcbiAgICAgIGNvbnN0IGFsbEl0ZW1zID0gWy4uLnN1YmZvbGRlcnMsIC4uLmRvY3VtZW50c11cbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSW5kZXggPSBhbGxJdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaXRlbUtleSA9PT0gY3VycmVudEl0ZW0uaXRlbUtleSlcblxuICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICAgIGlmIChjdXJyZW50SXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc0JhY2t3YXJkID0gY29kZSA9PT0gJ0Fycm93TGVmdCcgfHwgY29kZSA9PT0gJ0Fycm93VXAnXG4gICAgICAgICAgY29uc3QgbmV3SXRlbUluZGV4ID0gaXNCYWNrd2FyZCA/IGN1cnJlbnRJdGVtSW5kZXggLSAxIDogY3VycmVudEl0ZW1JbmRleCArIDFcblxuICAgICAgICAgIGlmIChuZXdJdGVtSW5kZXggPCAwIHx8IG5ld0l0ZW1JbmRleCA+IHRvdGFsQ291bnQgLSAxKSB7XG4gICAgICAgICAgICAvLyBvdXQgb2YgYm91bmRzLCBrZWVwIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRGb2N1c2VkUm93SW5kZXgobmV3SXRlbUluZGV4KVxuXG4gICAgICAgICAgaWYgKGlzQ3RybFByZXNzZWQpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU2hpZnRQcmVzc2VkICYmIGFsbG93TXVsdGlTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXhlcyA9IGhhbmRsZVNoaWZ0U2VsZWN0aW9uKG5ld0l0ZW1JbmRleClcbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbnMoeyBpbmRleGVzOiBzZWxlY3RlZEluZGV4ZXMgfSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gd2l0aG91dCBzaGlmdFxuICAgICAgICAgIGlmICghaXNTaGlmdFByZXNzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBhbGxJdGVtc1tuZXdJdGVtSW5kZXhdXG4gICAgICAgICAgICBzZXRTZWxlY3RlZEl0ZW1LZXlzKG5ldyBTZXQoW25ld0l0ZW0uaXRlbUtleV0pKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbUtleXMuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgc2V0Rm9jdXNlZFJvd0luZGV4KHVuZGVmaW5lZClcbiAgICAgICAgICAgIG5hdmlnYXRlQWZ0ZXJTZWxlY3Rpb24oe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZzogY3VycmVudEl0ZW0ucmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgZG9jSUQ6IGV4dHJhY3RJRChjdXJyZW50SXRlbS52YWx1ZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICAgIGNsZWFyU2VsZWN0aW9ucygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdLZXlBJzoge1xuICAgICAgICAgIGlmIChhbGxvd011bHRpU2VsZWN0aW9uICYmIGlzQ3RybFByZXNzZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIHNldEZvY3VzZWRSb3dJbmRleCh0b3RhbENvdW50IC0gMSlcbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbnMoe1xuICAgICAgICAgICAgICBpbmRleGVzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbENvdW50IH0sIChfLCBpKSA9PiBpKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3BhY2UnOiB7XG4gICAgICAgICAgaWYgKGFsbG93TXVsdGlTZWxlY3Rpb24gJiYgaXNTaGlmdFByZXNzZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIGNvbnN0IGFsbEl0ZW1zID0gWy4uLnN1YmZvbGRlcnMsIC4uLmRvY3VtZW50c11cbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbnMoe1xuICAgICAgICAgICAgICBpbmRleGVzOiBhbGxJdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbUtleSA9PT0gY3VycmVudEl0ZW0uaXRlbUtleSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudGx5U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goaWR4KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJdGVtS2V5cy5oYXMoaXRlbS5pdGVtS2V5KSkge1xuICAgICAgICAgICAgICAgICAgYWNjLnB1c2goaWR4KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbnMoe1xuICAgICAgICAgICAgICBpbmRleGVzOiBpc0N1cnJlbnRseVNlbGVjdGVkID8gW10gOiBbY3VycmVudEl0ZW1JbmRleF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1RhYic6IHtcbiAgICAgICAgICBpZiAoYWxsb3dNdWx0aVNlbGVjdGlvbiAmJiBpc1NoaWZ0UHJlc3NlZCkge1xuICAgICAgICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEl0ZW1JbmRleCAtIDFcbiAgICAgICAgICAgIGlmIChwcmV2SW5kZXggPCAwICYmIHNlbGVjdGVkSXRlbUtleXM/LnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIHNldEZvY3VzZWRSb3dJbmRleChwcmV2SW5kZXgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGN1cnJlbnRJdGVtSW5kZXggKyAxXG4gICAgICAgICAgICBpZiAobmV4dEluZGV4ID09PSB0b3RhbENvdW50ICYmIHNlbGVjdGVkSXRlbUtleXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgc2V0Rm9jdXNlZFJvd0luZGV4KHRvdGFsQ291bnQgLSAxKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWxlY3RlZEl0ZW1LZXlzLFxuICAgICAgc3ViZm9sZGVycyxcbiAgICAgIGRvY3VtZW50cyxcbiAgICAgIGFsbG93TXVsdGlTZWxlY3Rpb24sXG4gICAgICBoYW5kbGVTaGlmdFNlbGVjdGlvbixcbiAgICAgIHVwZGF0ZVNlbGVjdGlvbnMsXG4gICAgICBuYXZpZ2F0ZUFmdGVyU2VsZWN0aW9uLFxuICAgICAgY2xlYXJTZWxlY3Rpb25zLFxuICAgICAgdG90YWxDb3VudCxcbiAgICBdLFxuICApXG5cbiAgY29uc3Qgb25JdGVtQ2xpY2s6IEZvbGRlckNvbnRleHRWYWx1ZVsnb25JdGVtQ2xpY2snXSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh7IGV2ZW50LCBpdGVtOiBjbGlja2VkSXRlbSB9KSA9PiB7XG4gICAgICBsZXQgZG91YmxlQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gICAgICBjb25zdCBpc0N0cmxQcmVzc2VkID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5XG4gICAgICBjb25zdCBpc1NoaWZ0UHJlc3NlZCA9IGV2ZW50LnNoaWZ0S2V5XG4gICAgICBjb25zdCBpc0N1cnJlbnRseVNlbGVjdGVkID0gc2VsZWN0ZWRJdGVtS2V5cy5oYXMoY2xpY2tlZEl0ZW0uaXRlbUtleSlcbiAgICAgIGNvbnN0IGFsbEl0ZW1zID0gWy4uLnN1YmZvbGRlcnMsIC4uLmRvY3VtZW50c11cbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSW5kZXggPSBhbGxJdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaXRlbUtleSA9PT0gY2xpY2tlZEl0ZW0uaXRlbUtleSlcblxuICAgICAgaWYgKGFsbG93TXVsdGlTZWxlY3Rpb24gJiYgaXNDdHJsUHJlc3NlZCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGxldCBvdmVybGF5SXRlbUtleTogRm9sZGVyRG9jdW1lbnRJdGVtS2V5IHwgdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBhbGxJdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0uaXRlbUtleSA9PT0gY2xpY2tlZEl0ZW0uaXRlbUtleSkge1xuICAgICAgICAgICAgaWYgKGlzQ3VycmVudGx5U2VsZWN0ZWQgJiYgZXZlbnQudHlwZSAhPT0gJ3BvaW50ZXJtb3ZlJykge1xuICAgICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhY2MucHVzaChpZHgpXG4gICAgICAgICAgICAgIG92ZXJsYXlJdGVtS2V5ID0gaXRlbS5pdGVtS2V5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZEl0ZW1LZXlzLmhhcyhpdGVtLml0ZW1LZXkpKSB7XG4gICAgICAgICAgICBhY2MucHVzaChpZHgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSwgW10pXG5cbiAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyh7IGluZGV4ZXMgfSlcblxuICAgICAgICBpZiAob3ZlcmxheUl0ZW1LZXkpIHtcbiAgICAgICAgICBzZXREcmFnT3ZlcmxheUl0ZW0oZ2V0SXRlbShvdmVybGF5SXRlbUtleSkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWxsb3dNdWx0aVNlbGVjdGlvbiAmJiBpc1NoaWZ0UHJlc3NlZCkge1xuICAgICAgICBpZiAoY3VycmVudEl0ZW1JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ZXMgPSBoYW5kbGVTaGlmdFNlbGVjdGlvbihjdXJyZW50SXRlbUluZGV4KVxuICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbnMoeyBpbmRleGVzOiBzZWxlY3RlZEluZGV4ZXMgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhbGxvd011bHRpU2VsZWN0aW9uICYmIGV2ZW50LnR5cGUgPT09ICdwb2ludGVybW92ZScpIHtcbiAgICAgICAgLy8gb24gZHJhZyBzdGFydCBvZiBhbiB1bnNlbGVjdGVkIGl0ZW1cbiAgICAgICAgaWYgKCFpc0N1cnJlbnRseVNlbGVjdGVkKSB7XG4gICAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyh7XG4gICAgICAgICAgICBpbmRleGVzOiBhbGxJdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLml0ZW1LZXkgPT09IGNsaWNrZWRJdGVtLml0ZW1LZXkpIHtcbiAgICAgICAgICAgICAgICBhY2MucHVzaChpZHgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgc2V0RHJhZ092ZXJsYXlJdGVtKGdldEl0ZW0oY2xpY2tlZEl0ZW0uaXRlbUtleSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb3JtYWwgY2xpY2sgLSBzZWxlY3Qgc2luZ2xlIGl0ZW1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuICAgICAgICBkb3VibGVDbGlja2VkID1cbiAgICAgICAgICBub3cgLSBsYXN0Q2xpY2tUaW1lLmN1cnJlbnQgPCA0MDAgJiYgZHJhZ092ZXJsYXlJdGVtPy5pdGVtS2V5ID09PSBjbGlja2VkSXRlbS5pdGVtS2V5XG4gICAgICAgIGxhc3RDbGlja1RpbWUuY3VycmVudCA9IG5vd1xuICAgICAgICBpZiAoIWRvdWJsZUNsaWNrZWQpIHtcbiAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25zKHtcbiAgICAgICAgICAgIGluZGV4ZXM6IGlzQ3VycmVudGx5U2VsZWN0ZWQgJiYgc2VsZWN0ZWRJdGVtS2V5cy5zaXplID09PSAxID8gW10gOiBbY3VycmVudEl0ZW1JbmRleF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBzZXREcmFnT3ZlcmxheUl0ZW0oZ2V0SXRlbShjbGlja2VkSXRlbS5pdGVtS2V5KSlcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdWJsZUNsaWNrZWQpIHtcbiAgICAgICAgbmF2aWdhdGVBZnRlclNlbGVjdGlvbih7XG4gICAgICAgICAgY29sbGVjdGlvblNsdWc6IGNsaWNrZWRJdGVtLnJlbGF0aW9uVG8sXG4gICAgICAgICAgZG9jSUQ6IGV4dHJhY3RJRChjbGlja2VkSXRlbS52YWx1ZSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWxlY3RlZEl0ZW1LZXlzLFxuICAgICAgc3ViZm9sZGVycyxcbiAgICAgIGRvY3VtZW50cyxcbiAgICAgIGFsbG93TXVsdGlTZWxlY3Rpb24sXG4gICAgICBkcmFnT3ZlcmxheUl0ZW0sXG4gICAgICBnZXRJdGVtLFxuICAgICAgdXBkYXRlU2VsZWN0aW9ucyxcbiAgICAgIG5hdmlnYXRlQWZ0ZXJTZWxlY3Rpb24sXG4gICAgICBoYW5kbGVTaGlmdFNlbGVjdGlvbixcbiAgICBdLFxuICApXG5cbiAgLyoqXG4gICAqIE1ha2VzIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIgdG8gdXBkYXRlIHRoZSBmb2xkZXIgZmllbGQgb24gcGFzc2VkIGluIGRvY3VtZW50c1xuICAgKlxuICAgKiBNaWdodCByZXdyaXRlIHRoaXMgaW4gdGhlIGZ1dHVyZSB0byByZXR1cm4gdGhlIHByb21pc2VzIHNvIGVycm9ycyBjYW4gYmUgaGFuZGxlZCBjb250ZXh0dWFsbHlcbiAgICovXG4gIGNvbnN0IG1vdmVUb0ZvbGRlcjogRm9sZGVyQ29udGV4dFZhbHVlWydtb3ZlVG9Gb2xkZXInXSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICBjb25zdCB7IGl0ZW1zVG9Nb3ZlOiBpdGVtcywgdG9Gb2xkZXJJRCB9ID0gYXJnc1xuICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vdmluZ0N1cnJlbnRGb2xkZXIgPVxuICAgICAgICBpdGVtcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgaXRlbXNbMF0ucmVsYXRpb25UbyA9PT0gZm9sZGVyQ29sbGVjdGlvblNsdWcgJiZcbiAgICAgICAgaXRlbXNbMF0udmFsdWUuaWQgPT09IGZvbGRlcklEXG5cbiAgICAgIGlmIChtb3ZpbmdDdXJyZW50Rm9sZGVyKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gcXMuc3RyaW5naWZ5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgbG9jYWxlOiBsb2NhbGVDb2RlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkUXVlcnlQcmVmaXg6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCByZXEgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICBhcGlSb3V0ZTogcm91dGVzLmFwaSxcbiAgICAgICAgICAgIHBhdGg6IGAvJHtmb2xkZXJDb2xsZWN0aW9uU2x1Z30vJHtmb2xkZXJJRH0ke3F1ZXJ5UGFyYW1zfWAsXG4gICAgICAgICAgfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBbZm9sZGVyRmllbGROYW1lXTogdG9Gb2xkZXJJRCB8fCBudWxsIH0pLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBpZiAocmVxLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgdG9hc3QuZXJyb3IodCgnZ2VuZXJhbDplcnJvcicpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IFtjb2xsZWN0aW9uU2x1ZywgaWRzXSBvZiBPYmplY3QuZW50cmllcyhncm91cEl0ZW1JRHNCeVJlbGF0aW9uKGl0ZW1zKSkpIHtcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHFzLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgICAgIGxpbWl0OiAwLFxuICAgICAgICAgICAgICBsb2NhbGU6IGxvY2FsZUNvZGUsXG4gICAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICAgIGluOiBpZHMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZFF1ZXJ5UHJlZml4OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZldGNoKFxuICAgICAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICAgICAgYXBpUm91dGU6IHJvdXRlcy5hcGksXG4gICAgICAgICAgICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnfSR7cXVlcnlQYXJhbXN9YCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IFtmb2xkZXJGaWVsZE5hbWVdOiB0b0ZvbGRlcklEIHx8IG51bGwgfSksXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0b2FzdC5lcnJvcih0KCdnZW5lcmFsOmVycm9yJykpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNsZWFyU2VsZWN0aW9ucygpXG4gICAgfSxcbiAgICBbZm9sZGVySUQsIGNsZWFyU2VsZWN0aW9ucywgZm9sZGVyQ29sbGVjdGlvblNsdWcsIGZvbGRlckZpZWxkTmFtZSwgcm91dGVzLmFwaSwgdCwgbG9jYWxlQ29kZV0sXG4gIClcblxuICBjb25zdCBjaGVja0lmSXRlbUlzRGlzYWJsZWQ6IEZvbGRlckNvbnRleHRWYWx1ZVsnY2hlY2tJZkl0ZW1Jc0Rpc2FibGVkJ10gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoaXRlbSkgPT4ge1xuICAgICAgZnVuY3Rpb24gZm9sZGVyQWNjZXB0c0l0ZW0oe1xuICAgICAgICBpdGVtLFxuICAgICAgICBzZWxlY3RlZEZvbGRlckNvbGxlY3Rpb25zLFxuICAgICAgfToge1xuICAgICAgICBpdGVtOiBGb2xkZXJPckRvY3VtZW50XG4gICAgICAgIHNlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnM6IHN0cmluZ1tdXG4gICAgICB9KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXRlbS52YWx1ZS5mb2xkZXJUeXBlIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkoaXRlbS52YWx1ZS5mb2xkZXJUeXBlKSAmJiBpdGVtLnZhbHVlLmZvbGRlclR5cGUubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBFbmFibGUgZm9sZGVyIHRoYXQgYWNjZXB0IGFsbCBjb2xsZWN0aW9uc1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gSWYgbm8gY29sbGVjdGlvbnMgYXJlIHNlbGVjdGVkLCBlbmFibGUgZm9sZGVycyB0aGF0IGFjY2VwdCBhbGwgY29sbGVjdGlvbnNcbiAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLnZhbHVlLmZvbGRlclR5cGUgfHwgaXRlbS52YWx1ZS5mb2xkZXJUeXBlLmxlbmd0aCA+IDApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaXNhYmxlIGZvbGRlcnMgdGhhdCBkbyBub3QgYWNjZXB0IGFsbCBvZiB0aGUgc2VsZWN0ZWQgY29sbGVjdGlvbnNcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMuc29tZSgoc2x1ZykgPT4ge1xuICAgICAgICAgIHJldHVybiAhaXRlbS52YWx1ZS5mb2xkZXJUeXBlLmluY2x1ZGVzKHNsdWcpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RyYWdnaW5nKSB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBzZWxlY3RlZEl0ZW1LZXlzLmhhcyhpdGVtLml0ZW1LZXkpXG4gICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnJlbGF0aW9uVG8gPT09IGZvbGRlckNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICAgICAgcmV0dXJuIGZvbGRlckFjY2VwdHNJdGVtKHsgaXRlbSwgc2VsZWN0ZWRGb2xkZXJDb2xsZWN0aW9ucyB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vbiBmb2xkZXIgaXRlbXMgYXJlIGRpc2FibGVkIG9uIGRyYWdcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcmVudEZvbGRlckNvbnRleHQ/LnNlbGVjdGVkSXRlbUtleXM/LnNpemUpIHtcbiAgICAgICAgLy8gRGlzYWJsZSBzZWxlY3RlZCBpdGVtcyBmcm9tIGJlaW5nIG5hdmlnYXRlZCB0byBpbiBtb3ZlIHRvIGRyYXdlclxuICAgICAgICBpZiAocGFyZW50Rm9sZGVyQ29udGV4dC5zZWxlY3RlZEl0ZW1LZXlzLmhhcyhpdGVtLml0ZW1LZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICAvLyBNb3ZpbmcgaXRlbXMgdG8gZm9sZGVyXG4gICAgICAgIGlmIChpdGVtLnJlbGF0aW9uVG8gPT09IGZvbGRlckNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICAgICAgcmV0dXJuIGZvbGRlckFjY2VwdHNJdGVtKHtcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBzZWxlY3RlZEZvbGRlckNvbGxlY3Rpb25zOiBwYXJlbnRGb2xkZXJDb250ZXh0LnNlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgaXRlbSBpcyBub3QgYSBmb2xkZXIsIGl0IGlzIGRpc2FibGVkIG9uIG1vdmVcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHNlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMsXG4gICAgICBpc0RyYWdnaW5nLFxuICAgICAgc2VsZWN0ZWRJdGVtS2V5cyxcbiAgICAgIGZvbGRlckNvbGxlY3Rpb25TbHVnLFxuICAgICAgcGFyZW50Rm9sZGVyQ29udGV4dD8uc2VsZWN0ZWRGb2xkZXJDb2xsZWN0aW9ucyxcbiAgICAgIHBhcmVudEZvbGRlckNvbnRleHQ/LnNlbGVjdGVkSXRlbUtleXMsXG4gICAgXSxcbiAgKVxuXG4gIC8vIElmIGEgbmV3IGNvbXBvbmVudCBpcyBwcm92aWRlZCwgdXBkYXRlIHRoZSBzdGF0ZSBzbyBjaGlsZHJlbiBjYW4gcmUtcmVuZGVyIHdpdGggdGhlIG5ldyBjb21wb25lbnRcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoSW5pdGlhbEZvbGRlclJlc3VsdHNDb21wb25lbnQpIHtcbiAgICAgIHNldEZvbGRlclJlc3VsdHNDb21wb25lbnQoSW5pdGlhbEZvbGRlclJlc3VsdHNDb21wb25lbnQpXG4gICAgfVxuICB9LCBbSW5pdGlhbEZvbGRlclJlc3VsdHNDb21wb25lbnRdKVxuXG4gIHJldHVybiAoXG4gICAgPENvbnRleHRcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGFjdGl2ZUNvbGxlY3Rpb25Gb2xkZXJTbHVnczogYWN0aXZlQ29sbGVjdGlvblNsdWdzIHx8IGFsbENvbGxlY3Rpb25Gb2xkZXJTbHVncyxcbiAgICAgICAgYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzLFxuICAgICAgICBhbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVncyxcbiAgICAgICAgYnJlYWRjcnVtYnMsXG4gICAgICAgIGNoZWNrSWZJdGVtSXNEaXNhYmxlZCxcbiAgICAgICAgY2xlYXJTZWxlY3Rpb25zLFxuICAgICAgICBjdXJyZW50Rm9sZGVyOlxuICAgICAgICAgIGJyZWFkY3J1bWJzPy5bYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV0/LmlkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZm9ybWF0Rm9sZGVyT3JEb2N1bWVudEl0ZW0oe1xuICAgICAgICAgICAgICAgIGZvbGRlckZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBpc1VwbG9hZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVsYXRpb25UbzogZm9sZGVyQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgdXNlQXNUaXRsZTogZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5hZG1pbi51c2VBc1RpdGxlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBicmVhZGNydW1ic1ticmVhZGNydW1icy5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgZG9jdW1lbnRzLFxuICAgICAgICBkcmFnT3ZlcmxheUl0ZW0sXG4gICAgICAgIGZvY3VzZWRSb3dJbmRleCxcbiAgICAgICAgZm9sZGVyQ29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgZm9sZGVyQ29sbGVjdGlvblNsdWcsXG4gICAgICAgIGZvbGRlckZpZWxkTmFtZSxcbiAgICAgICAgZm9sZGVySUQsXG4gICAgICAgIEZvbGRlclJlc3VsdHNDb21wb25lbnQsXG4gICAgICAgIGZvbGRlclR5cGU6IGJyZWFkY3J1bWJzPy5bYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV0/LmZvbGRlclR5cGUsXG4gICAgICAgIGdldEZvbGRlclJvdXRlLFxuICAgICAgICBnZXRTZWxlY3RlZEl0ZW1zLFxuICAgICAgICBpc0RyYWdnaW5nLFxuICAgICAgICBpdGVtS2V5c1RvTW92ZTogcGFyZW50Rm9sZGVyQ29udGV4dC5zZWxlY3RlZEl0ZW1LZXlzLFxuICAgICAgICBtb3ZlVG9Gb2xkZXIsXG4gICAgICAgIG9uSXRlbUNsaWNrLFxuICAgICAgICBvbkl0ZW1LZXlQcmVzcyxcbiAgICAgICAgcmVmaW5lRm9sZGVyRGF0YSxcbiAgICAgICAgc2VhcmNoLFxuICAgICAgICBzZWxlY3RlZEZvbGRlckNvbGxlY3Rpb25zLFxuICAgICAgICBzZWxlY3RlZEl0ZW1LZXlzLFxuICAgICAgICBzZXRCcmVhZGNydW1icyxcbiAgICAgICAgc2V0Rm9jdXNlZFJvd0luZGV4LFxuICAgICAgICBzZXRJc0RyYWdnaW5nLFxuICAgICAgICBzb3J0LFxuICAgICAgICBzdWJmb2xkZXJzLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db250ZXh0PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb2xkZXIoKTogRm9sZGVyQ29udGV4dFZhbHVlIHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZShDb250ZXh0KVxuXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUZvbGRlciBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRm9sZGVyUHJvdmlkZXInKVxuICB9XG5cbiAgcmV0dXJuIGNvbnRleHRcbn1cbiIsImltcG9ydCB0eXBlIHsgRm9sZGVyT3JEb2N1bWVudCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBJdGVtSURzQnlSZWxhdGlvbihpdGVtczogRm9sZGVyT3JEb2N1bWVudFtdKSB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoXG4gICAgKGFjYywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFhY2NbaXRlbS5yZWxhdGlvblRvXSkge1xuICAgICAgICBhY2NbaXRlbS5yZWxhdGlvblRvXSA9IFtdXG4gICAgICB9XG4gICAgICBhY2NbaXRlbS5yZWxhdGlvblRvXS5wdXNoKGl0ZW0udmFsdWUuaWQpXG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LFxuICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIChudW1iZXIgfCBzdHJpbmcpW10+LFxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlUGF0aG5hbWUsIHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VFZmZlY3RFdmVudCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUVmZmVjdEV2ZW50LmpzJ1xuXG5leHBvcnQgdHlwZSBSb3V0ZUNhY2hlQ29udGV4dCA9IHtcbiAgY2FjaGluZ0VuYWJsZWQ6IGJvb2xlYW5cbiAgY2xlYXJSb3V0ZUNhY2hlOiAoKSA9PiB2b2lkXG59XG5cbmNvbnN0IENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFJvdXRlQ2FjaGVDb250ZXh0Pih7XG4gIGNhY2hpbmdFbmFibGVkOiB0cnVlLFxuICBjbGVhclJvdXRlQ2FjaGU6ICgpID0+IHt9LFxufSlcblxuZXhwb3J0IGNvbnN0IFJvdXRlQ2FjaGU6IFJlYWN0LkZDPHsgY2FjaGluZ0VuYWJsZWQ/OiBib29sZWFuOyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+ID0gKHtcbiAgY2FjaGluZ0VuYWJsZWQgPSB0cnVlLFxuICBjaGlsZHJlbixcbn0pID0+IHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VQYXRobmFtZSgpXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG5cbiAgLyoqXG4gICAqIE5leHQuanMgY2FjaGVzIHBhZ2VzIGluIG1lbW9yeSBpbiB0aGVpciB7QGxpbmsgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2d1aWRlcy9jYWNoaW5nI2NsaWVudC1zaWRlLXJvdXRlci1jYWNoZSBDbGllbnQtc2lkZSBSb3V0ZXIgQ2FjaGV9LFxuICAgKiBjYXVzaW5nIGZvcndhcmQvYmFjayBicm93c2VyIG5hdmlnYXRpb24gdG8gc2hvdyBzdGFsZSBkYXRhIGZyb20gYSBwcmV2aW91cyB2aXNpdC5cbiAgICogVGhlIHByb2JsZW0gaXMgdGhpcyBiZmNhY2hlLWxpa2UgYmVoYXZpb3IgaGFzIG5vIG9wdC1vdXQsIGV2ZW4gaWYgdGhlIHBhZ2UgaXMgZHluYW1pYywgcmVxdWlyZXMgYXV0aGVudGljYXRpb24sIGV0Yy5cbiAgICogVGhlIHdvcmthcm91bmQgaXMgdG8gZm9yY2UgYSByZWZyZXNoIHdoZW4gbmF2aWdhdGluZyB2aWEgdGhlIGJyb3dzZXIgY29udHJvbHMuXG4gICAqIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgaWYvd2hlbiBOZXh0LmpzIHN1cHBvcnRzIHRoaXMgbmF0aXZlbHkuXG4gICAqL1xuICBjb25zdCBjbGVhckFmdGVyUGF0aG5hbWVDaGFuZ2UgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3QgY2xlYXJSb3V0ZUNhY2hlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJvdXRlci5yZWZyZXNoKClcbiAgfSwgW3JvdXRlcl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVQb3BTdGF0ZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyQWZ0ZXJQYXRobmFtZUNoYW5nZS5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGhhbmRsZVBvcFN0YXRlKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGhhbmRsZVBvcFN0YXRlKVxuICAgIH1cbiAgfSwgW3JvdXRlcl0pXG5cbiAgY29uc3QgaGFuZGxlUGF0aG5hbWVDaGFuZ2UgPSB1c2VFZmZlY3RFdmVudCgocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChjYWNoaW5nRW5hYmxlZCB8fCBjbGVhckFmdGVyUGF0aG5hbWVDaGFuZ2UuY3VycmVudCkge1xuICAgICAgY2xlYXJBZnRlclBhdGhuYW1lQ2hhbmdlLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgY2xlYXJSb3V0ZUNhY2hlKClcbiAgICB9XG4gIH0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYW5kbGVQYXRobmFtZUNoYW5nZShwYXRobmFtZSlcbiAgfSwgW3BhdGhuYW1lXSlcblxuICByZXR1cm4gPENvbnRleHQgdmFsdWU9e3sgY2FjaGluZ0VuYWJsZWQsIGNsZWFyUm91dGVDYWNoZSB9fT57Y2hpbGRyZW59PC9Db250ZXh0PlxufVxuXG5leHBvcnQgY29uc3QgdXNlUm91dGVDYWNoZSA9ICgpID0+IHVzZShDb250ZXh0KVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgRm9ybVN1Ym1pdCB9IGZyb20gJy4uLy4uL2Zvcm1zL1N1Ym1pdC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdkcmF3ZXItYWN0aW9uLWhlYWRlcidcblxudHlwZSBEcmF3ZXJBY3Rpb25IZWFkZXJBcmdzID0ge1xuICByZWFkb25seSBjYW5jZWxMYWJlbD86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgb25DYW5jZWw/OiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IG9uU2F2ZT86ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2F2ZUxhYmVsPzogc3RyaW5nXG4gIHJlYWRvbmx5IHRpdGxlOiBSZWFjdC5SZWFjdE5vZGUgfCBzdHJpbmdcbn1cbmV4cG9ydCBjb25zdCBEcmF3ZXJBY3Rpb25IZWFkZXIgPSAoe1xuICBjYW5jZWxMYWJlbCxcbiAgY2xhc3NOYW1lLFxuICBvbkNhbmNlbCxcbiAgb25TYXZlLFxuICBzYXZlTGFiZWwsXG4gIHRpdGxlLFxufTogRHJhd2VyQWN0aW9uSGVhZGVyQXJncykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfT5cbiAgICAgICAgPGgxIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGl0bGVgfT57dGl0bGV9PC9oMT5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PlxuICAgICAgICAgIDxCdXR0b24gYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpjYW5jZWwnKX0gYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXtvbkNhbmNlbH0+XG4gICAgICAgICAgICB7Y2FuY2VsTGFiZWwgfHwgdCgnZ2VuZXJhbDpjYW5jZWwnKX1cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxGb3JtU3VibWl0IGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6YXBwbHlDaGFuZ2VzJyl9IG9uQ2xpY2s9e29uU2F2ZX0+XG4gICAgICAgICAgICB7c2F2ZUxhYmVsIHx8IHQoJ2dlbmVyYWw6YXBwbHlDaGFuZ2VzJyl9XG4gICAgICAgICAgPC9Gb3JtU3VibWl0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0J1dHRvbi90eXBlcy5qcydcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHtcbiAgdXNlRm9ybSxcbiAgdXNlRm9ybUJhY2tncm91bmRQcm9jZXNzaW5nLFxuICB1c2VGb3JtSW5pdGlhbGl6aW5nLFxuICB1c2VGb3JtUHJvY2Vzc2luZyxcbn0gZnJvbSAnLi4vRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdmb3JtLXN1Ym1pdCdcblxuZXhwb3J0IGNvbnN0IEZvcm1TdWJtaXQ6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgdHlwZSA9ICdzdWJtaXQnLFxuICAgIGJ1dHRvbklkOiBpZCxcbiAgICBjaGlsZHJlbixcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRGcm9tUHJvcHMsXG4gICAgb25DbGljayxcbiAgICBwcm9ncmFtbWF0aWNTdWJtaXQsXG4gICAgcmVmLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBwcm9jZXNzaW5nID0gdXNlRm9ybVByb2Nlc3NpbmcoKVxuICBjb25zdCBiYWNrZ3JvdW5kUHJvY2Vzc2luZyA9IHVzZUZvcm1CYWNrZ3JvdW5kUHJvY2Vzc2luZygpXG4gIGNvbnN0IGluaXRpYWxpemluZyA9IHVzZUZvcm1Jbml0aWFsaXppbmcoKVxuICBjb25zdCB7IGRpc2FibGVkLCBzdWJtaXQgfSA9IHVzZUZvcm0oKVxuXG4gIGNvbnN0IGNhblNhdmUgPSAhKFxuICAgIGRpc2FibGVkRnJvbVByb3BzIHx8XG4gICAgaW5pdGlhbGl6aW5nIHx8XG4gICAgcHJvY2Vzc2luZyB8fFxuICAgIGJhY2tncm91bmRQcm9jZXNzaW5nIHx8XG4gICAgZGlzYWJsZWRcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID1cbiAgICBvbkNsaWNrID8/XG4gICAgKHByb2dyYW1tYXRpY1N1Ym1pdFxuICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgdm9pZCBzdWJtaXQoKVxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICBkaXNhYmxlZD17Y2FuU2F2ZSA/IHVuZGVmaW5lZCA6IHRydWV9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZHJhd2VyLWNvbnRlbnQtY29udGFpbmVyJ1xuXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZ1xufVxuZXhwb3J0IGZ1bmN0aW9uIERyYXdlckNvbnRlbnRDb250YWluZXIoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IFByb3BzKSB7XG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT57Y2hpbGRyZW59PC9kaXY+XG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBDb2xsZWN0aW9uU2x1ZyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb2xkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRm9sZGVycy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRG9jdW1lbnREcmF3ZXIsIHVzZURvY3VtZW50RHJhd2VyIH0gZnJvbSAnLi4vLi4vRG9jdW1lbnREcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBQb3B1cCwgUG9wdXBMaXN0IH0gZnJvbSAnLi4vLi4vUG9wdXAvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdjcmVhdGUtbmV3LWRvYy1pbi1mb2xkZXInXG5cbmV4cG9ydCBmdW5jdGlvbiBMaXN0Q3JlYXRlTmV3RG9jSW5Gb2xkZXJCdXR0b24oe1xuICBidXR0b25MYWJlbCxcbiAgYnV0dG9uU2l6ZSA9ICdzbWFsbCcsXG4gIGJ1dHRvblN0eWxlID0gJ3BpbGwnLFxuICBjb2xsZWN0aW9uU2x1Z3MsXG4gIGZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnMsXG4gIG9uQ3JlYXRlU3VjY2VzcyxcbiAgc2x1Z1ByZWZpeCxcbn06IHtcbiAgYnV0dG9uTGFiZWw6IHN0cmluZ1xuICBidXR0b25TaXplPzogJ2xhcmdlJyB8ICdtZWRpdW0nIHwgJ3NtYWxsJyB8ICd4c21hbGwnXG4gIGJ1dHRvblN0eWxlPzpcbiAgICB8ICdlcnJvcidcbiAgICB8ICdpY29uLWxhYmVsJ1xuICAgIHwgJ25vbmUnXG4gICAgfCAncGlsbCdcbiAgICB8ICdwcmltYXJ5J1xuICAgIHwgJ3NlY29uZGFyeSdcbiAgICB8ICdzdWJ0bGUnXG4gICAgfCAndGFiJ1xuICAgIHwgJ3RyYW5zcGFyZW50J1xuICBjb2xsZWN0aW9uU2x1Z3M6IENvbGxlY3Rpb25TbHVnW11cbiAgZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvblNsdWdbXVxuICBvbkNyZWF0ZVN1Y2Nlc3M6IChhcmdzOiB7XG4gICAgY29sbGVjdGlvblNsdWc6IENvbGxlY3Rpb25TbHVnXG4gICAgZG9jOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICBzbHVnUHJlZml4OiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgbmV3RG9jSW5Gb2xkZXJEcmF3ZXJTbHVnID0gYCR7c2x1Z1ByZWZpeH0tbmV3LWRvYy1pbi1mb2xkZXItZHJhd2VyYFxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjbG9zZU1vZGFsLCBvcGVuTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgZm9sZGVyQ29sbGVjdGlvbkNvbmZpZywgZm9sZGVyQ29sbGVjdGlvblNsdWcsIGZvbGRlckZpZWxkTmFtZSwgZm9sZGVySUQgfSA9IHVzZUZvbGRlcigpXG4gIGNvbnN0IFtGb2xkZXJEb2N1bWVudERyYXdlciwgLCB7IGNsb3NlRHJhd2VyOiBjbG9zZUZvbGRlckRyYXdlciwgb3BlbkRyYXdlcjogb3BlbkZvbGRlckRyYXdlciB9XSA9XG4gICAgdXNlRG9jdW1lbnREcmF3ZXIoe1xuICAgICAgY29sbGVjdGlvblNsdWc6IGZvbGRlckNvbGxlY3Rpb25TbHVnLFxuICAgIH0pXG4gIGNvbnN0IFtjcmVhdGVDb2xsZWN0aW9uU2x1Zywgc2V0Q3JlYXRlQ29sbGVjdGlvblNsdWddID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPigpXG4gIGNvbnN0IFtlbmFibGVkQ29sbGVjdGlvbnNdID0gUmVhY3QudXNlU3RhdGU8Q2xpZW50Q29sbGVjdGlvbkNvbmZpZ1tdPigoKSA9PlxuICAgIGNvbGxlY3Rpb25TbHVncy5yZWR1Y2UoKGFjYywgY29sbGVjdGlvblNsdWcpID0+IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBjb25maWcuY29sbGVjdGlvbnMuZmluZCgoeyBzbHVnIH0pID0+IHNsdWcgPT09IGNvbGxlY3Rpb25TbHVnKVxuICAgICAgaWYgKGNvbGxlY3Rpb25Db25maWcpIHtcbiAgICAgICAgYWNjLnB1c2goY29sbGVjdGlvbkNvbmZpZylcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBbXSksXG4gIClcblxuICBpZiAoZW5hYmxlZENvbGxlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHtlbmFibGVkQ29sbGVjdGlvbnMubGVuZ3RoID09PSAxID8gKFxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IDEgb3B0aW9uLCBkbyBub3QgcmVuZGVyIGEgcG9wdXBcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGJ1dHRvblN0eWxlPXtidXR0b25TdHlsZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2J1dHRvbmB9XG4gICAgICAgICAgZWw9XCJkaXZcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkQ29sbGVjdGlvbnNbMF0uc2x1ZyA9PT0gZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5zbHVnKSB7XG4gICAgICAgICAgICAgIG9wZW5Gb2xkZXJEcmF3ZXIoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0Q3JlYXRlQ29sbGVjdGlvblNsdWcoZW5hYmxlZENvbGxlY3Rpb25zWzBdLnNsdWcpXG4gICAgICAgICAgICAgIG9wZW5Nb2RhbChuZXdEb2NJbkZvbGRlckRyYXdlclNsdWcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzaXplPXtidXR0b25TaXplfVxuICAgICAgICA+XG4gICAgICAgICAge2J1dHRvbkxhYmVsfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxQb3B1cFxuICAgICAgICAgIGJ1dHRvbj17XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGJ1dHRvblN0eWxlPXtidXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wb3B1cC1idXR0b25gfVxuICAgICAgICAgICAgICBlbD1cImRpdlwiXG4gICAgICAgICAgICAgIGljb249XCJjaGV2cm9uXCJcbiAgICAgICAgICAgICAgc2l6ZT17YnV0dG9uU2l6ZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2J1dHRvbkxhYmVsfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1dHRvblR5cGU9XCJkZWZhdWx0XCJcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjdGlvbi1wb3B1cGB9XG4gICAgICAgID5cbiAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvbkdyb3VwPlxuICAgICAgICAgICAge2VuYWJsZWRDb2xsZWN0aW9ucy5tYXAoKGNvbGxlY3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLnNsdWcgPT09IGZvbGRlckNvbGxlY3Rpb25Db25maWcuc2x1Zykge1xuICAgICAgICAgICAgICAgICAgICAgIG9wZW5Gb2xkZXJEcmF3ZXIoKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHNldENyZWF0ZUNvbGxlY3Rpb25TbHVnKGNvbGxlY3Rpb24uc2x1ZylcbiAgICAgICAgICAgICAgICAgICAgICBvcGVuTW9kYWwobmV3RG9jSW5Gb2xkZXJEcmF3ZXJTbHVnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uLmxhYmVscy5zaW5ndWxhciwgaTE4bil9XG4gICAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgPC9Qb3B1cD5cbiAgICAgICl9XG5cbiAgICAgIHtjcmVhdGVDb2xsZWN0aW9uU2x1ZyAmJiAoXG4gICAgICAgIDxEb2N1bWVudERyYXdlclxuICAgICAgICAgIGNvbGxlY3Rpb25TbHVnPXtjcmVhdGVDb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgICBkcmF3ZXJTbHVnPXtuZXdEb2NJbkZvbGRlckRyYXdlclNsdWd9XG4gICAgICAgICAgaW5pdGlhbERhdGE9e3tcbiAgICAgICAgICAgIFtmb2xkZXJGaWVsZE5hbWVdOiBmb2xkZXJJRCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2F2ZT17YXN5bmMgKHsgZG9jIH0pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IG9uQ3JlYXRlU3VjY2Vzcyh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnOiBjcmVhdGVDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgZG9jLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNsb3NlTW9kYWwobmV3RG9jSW5Gb2xkZXJEcmF3ZXJTbHVnKVxuICAgICAgICAgIH19XG4gICAgICAgICAgcmVkaXJlY3RBZnRlckNyZWF0ZT17ZmFsc2V9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7Y29sbGVjdGlvblNsdWdzLmluY2x1ZGVzKGZvbGRlckNvbGxlY3Rpb25Db25maWcuc2x1ZykgJiYgKFxuICAgICAgICA8Rm9sZGVyRG9jdW1lbnREcmF3ZXJcbiAgICAgICAgICBpbml0aWFsRGF0YT17e1xuICAgICAgICAgICAgW2ZvbGRlckZpZWxkTmFtZV06IGZvbGRlcklELFxuICAgICAgICAgICAgZm9sZGVyVHlwZTogY3JlYXRlQ29sbGVjdGlvblNsdWdcbiAgICAgICAgICAgICAgPyBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zIHx8IFtjcmVhdGVDb2xsZWN0aW9uU2x1Z11cbiAgICAgICAgICAgICAgOiBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TYXZlPXthc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBvbkNyZWF0ZVN1Y2Nlc3Moe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZzogZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5zbHVnLFxuICAgICAgICAgICAgICBkb2M6IHJlc3VsdC5kb2MsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY2xvc2VGb2xkZXJEcmF3ZXIoKVxuICAgICAgICAgIH19XG4gICAgICAgICAgcmVkaXJlY3RBZnRlckNyZWF0ZT17ZmFsc2V9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2xpZW50VHJhbnNsYXRpb25LZXlzLCBURnVuY3Rpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBSZWN1cnNpdmVUcmFuc2xhdGlvbjogUmVhY3QuRkM8e1xuICBlbGVtZW50cz86IFJlY29yZDxzdHJpbmcsIFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9Pj5cbiAgdHJhbnNsYXRpb25TdHJpbmc6IHN0cmluZ1xufT4gPSAoeyBlbGVtZW50cywgdHJhbnNsYXRpb25TdHJpbmcgfSkgPT4ge1xuICBjb25zdCByZWdleCA9IC8oPFtePl0rPi4qPzxcXC9bXj5dKz4pL2dcbiAgY29uc3Qgc2VjdGlvbnMgPSB0cmFuc2xhdGlvblN0cmluZy5zcGxpdChyZWdleClcblxuICByZXR1cm4gKFxuICAgIDxzcGFuPlxuICAgICAge3NlY3Rpb25zLm1hcCgoc2VjdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIHNlY3Rpb24uc3RhcnRzV2l0aCgnPCcpICYmIHNlY3Rpb24uZW5kc1dpdGgoJz4nKSkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnRLZXkgPSBzZWN0aW9uWzFdXG4gICAgICAgICAgY29uc3QgRWxlbWVudCA9IGVsZW1lbnRzW2VsZW1lbnRLZXldXG5cbiAgICAgICAgICBpZiAoRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGA8JHtlbGVtZW50S2V5fT4oLio/KTxcXC8ke2VsZW1lbnRLZXl9PmAsICdnJylcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2VjdGlvbi5yZXBsYWNlKHJlZ2V4LCAoXywgZ3JvdXApID0+IGdyb3VwKVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8RWxlbWVudCBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICA8UmVjdXJzaXZlVHJhbnNsYXRpb24gdHJhbnNsYXRpb25TdHJpbmc9e2NoaWxkcmVufSAvPlxuICAgICAgICAgICAgICA8L0VsZW1lbnQ+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlY3Rpb25cbiAgICAgIH0pfVxuICAgIDwvc3Bhbj5cbiAgKVxufVxuXG5leHBvcnQgdHlwZSBUcmFuc2xhdGlvblByb3BzID0ge1xuICBlbGVtZW50cz86IFJlY29yZDxzdHJpbmcsIFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9Pj5cbiAgaTE4bktleTogQ2xpZW50VHJhbnNsYXRpb25LZXlzXG4gIHQ6IFRGdW5jdGlvblxuICB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxufVxuXG5leHBvcnQgY29uc3QgVHJhbnNsYXRpb246IFJlYWN0LkZDPFRyYW5zbGF0aW9uUHJvcHM+ID0gKHsgZWxlbWVudHMsIGkxOG5LZXksIHQsIHZhcmlhYmxlcyB9KSA9PiB7XG4gIGNvbnN0IHN0cmluZ1dpdGhWYXJpYWJsZXMgPSB0KGkxOG5LZXksIHZhcmlhYmxlcyB8fCB7fSlcblxuICBpZiAoIWVsZW1lbnRzKSB7XG4gICAgcmV0dXJuIHN0cmluZ1dpdGhWYXJpYWJsZXNcbiAgfVxuXG4gIHJldHVybiA8UmVjdXJzaXZlVHJhbnNsYXRpb24gZWxlbWVudHM9e2VsZW1lbnRzfSB0cmFuc2xhdGlvblN0cmluZz17c3RyaW5nV2l0aFZhcmlhYmxlc30gLz5cbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IEZvbGRlckJyZWFkY3J1bWIgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQ2hldnJvbkljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9DaGV2cm9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdmb2xkZXJCcmVhZGNydW1icydcblxudHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgYnJlYWRjcnVtYnM6IHtcbiAgICBpZDogbnVsbCB8IG51bWJlciB8IHN0cmluZ1xuICAgIG5hbWU6IFJlYWN0LlJlYWN0Tm9kZSB8IHN0cmluZ1xuICAgIG9uQ2xpY2s6ICgpID0+IHZvaWRcbiAgfVtdXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZvbGRlckJyZWFkY3J1bWJzKHsgYnJlYWRjcnVtYnMsIGNsYXNzTmFtZSB9OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9ICR7Y2xhc3NOYW1lIHx8ICcnfWAudHJpbSgpfT5cbiAgICAgIHticmVhZGNydW1icz8ubWFwKChjcnVtYiwgaW5kZXgpID0+IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NydW1iYH0ga2V5PXtpbmRleH0+XG4gICAgICAgICAge2NydW1iLm9uQ2xpY2sgPyAoXG4gICAgICAgICAgICA8RHJvcHBhYmxlQnJlYWRjcnVtYlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NydW1iLWl0ZW1gfVxuICAgICAgICAgICAgICBpZD17Y3J1bWIuaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NydW1iLm9uQ2xpY2t9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjcnVtYi5uYW1lfVxuICAgICAgICAgICAgPC9Ecm9wcGFibGVCcmVhZGNydW1iPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICBjcnVtYi5uYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YnJlYWRjcnVtYnMubGVuZ3RoID4gMCAmJiBpbmRleCAhPT0gYnJlYWRjcnVtYnMubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICA8Q2hldnJvbkljb24gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jcnVtYi1jaGV2cm9uYH0gZGlyZWN0aW9uPVwicmlnaHRcIiAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3BwYWJsZUJyZWFkY3J1bWIoe1xuICBpZCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgb25DbGljazogKCkgPT4gdm9pZFxufSAmIFBpY2s8Rm9sZGVyQnJlYWRjcnVtYiwgJ2lkJz4pIHtcbiAgY29uc3QgeyBpc092ZXIsIHNldE5vZGVSZWYgfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQ6IGBmb2xkZXItJHtpZH1gLFxuICAgIGRhdGE6IHtcbiAgICAgIGlkLFxuICAgICAgdHlwZTogJ2ZvbGRlcicsXG4gICAgfSxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17Wydkcm9wcGFibGUtYnV0dG9uJywgY2xhc3NOYW1lLCBpc092ZXIgJiYgJ2Ryb3BwYWJsZS1idXR0b24tLWhvdmVyJ11cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKVxufVxuIiwiaW1wb3J0IHsgRm9sZGVySWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL0ZvbGRlci9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuZXhwb3J0IGZ1bmN0aW9uIENvbG9yZWRGb2xkZXJJY29uKCkge1xuICByZXR1cm4gPEZvbGRlckljb24gY2xhc3NOYW1lPVwiY29sb3JlZC1mb2xkZXItaWNvblwiIC8+XG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgRm9ybVN0YXRlLCBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnLCBVcGxvYWRFZGl0cyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwsIGlzSW1hZ2UgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB7IEZpZWxkRXJyb3IgfSBmcm9tICcuLi8uLi9maWVsZHMvRmllbGRFcnJvci9pbmRleC5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vLi4vZmllbGRzL3NoYXJlZC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm0sIHVzZUZvcm1Qcm9jZXNzaW5nIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IEVkaXREZXB0aFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgVXBsb2FkQ29udHJvbHNQcm92aWRlciwgdXNlVXBsb2FkQ29udHJvbHMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVXBsb2FkQ29udHJvbHMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VVcGxvYWRFZGl0cyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9VcGxvYWRFZGl0cy9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4uL0RyYXdlci9pbmRleC5qcydcbmltcG9ydCB7IERyb3B6b25lIH0gZnJvbSAnLi4vRHJvcHpvbmUvaW5kZXguanMnXG5pbXBvcnQgeyBFZGl0VXBsb2FkIH0gZnJvbSAnLi4vRWRpdFVwbG9hZC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgRmlsZURldGFpbHMgfSBmcm9tICcuLi9GaWxlRGV0YWlscy9pbmRleC5qcydcbmltcG9ydCB7IFByZXZpZXdTaXplcyB9IGZyb20gJy4uL1ByZXZpZXdTaXplcy9pbmRleC5qcydcbmltcG9ydCB7IFRodW1ibmFpbCB9IGZyb20gJy4uL1RodW1ibmFpbC9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZpbGUtZmllbGQnXG5leHBvcnQgY29uc3QgZWRpdERyYXdlclNsdWcgPSAnZWRpdC11cGxvYWQnXG5leHBvcnQgY29uc3Qgc2l6ZVByZXZpZXdTbHVnID0gJ3ByZXZpZXctc2l6ZXMnXG5cbmNvbnN0IHZhbGlkYXRlID0gKHZhbHVlKSA9PiB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnQSBmaWxlIGlzIHJlcXVpcmVkLidcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiAoIXZhbHVlLm5hbWUgfHwgdmFsdWUubmFtZSA9PT0gJycpKSB7XG4gICAgcmV0dXJuICdBIGZpbGUgbmFtZSBpcyByZXF1aXJlZC4nXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG50eXBlIFVwbG9hZEFjdGlvbnNBcmdzID0ge1xuICByZWFkb25seSBjdXN0b21BY3Rpb25zPzogUmVhY3QuUmVhY3ROb2RlW11cbiAgcmVhZG9ubHkgZW5hYmxlQWRqdXN0bWVudHM6IGJvb2xlYW5cbiAgcmVhZG9ubHkgZW5hYmxlUHJldmlld1NpemVzOiBib29sZWFuXG4gIHJlYWRvbmx5IG1pbWVUeXBlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFVwbG9hZEFjdGlvbnMgPSAoe1xuICBjdXN0b21BY3Rpb25zLFxuICBlbmFibGVBZGp1c3RtZW50cyxcbiAgZW5hYmxlUHJldmlld1NpemVzLFxuICBtaW1lVHlwZSxcbn06IFVwbG9hZEFjdGlvbnNBcmdzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IGZpbGVUeXBlSXNBZGp1c3RhYmxlID1cbiAgICBpc0ltYWdlKG1pbWVUeXBlKSAmJiBtaW1lVHlwZSAhPT0gJ2ltYWdlL3N2Zyt4bWwnICYmIG1pbWVUeXBlICE9PSAnaW1hZ2UvanhsJ1xuXG4gIGlmICghZmlsZVR5cGVJc0FkanVzdGFibGUgJiYgKCFjdXN0b21BY3Rpb25zIHx8IGN1c3RvbUFjdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X191cGxvYWQtYWN0aW9uc2B9PlxuICAgICAge2ZpbGVUeXBlSXNBZGp1c3RhYmxlICYmIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIHtlbmFibGVQcmV2aWV3U2l6ZXMgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInBpbGxcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3ByZXZpZXdTaXplc2B9XG4gICAgICAgICAgICAgIG1hcmdpbj17ZmFsc2V9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvcGVuTW9kYWwoc2l6ZVByZXZpZXdTbHVnKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgndXBsb2FkOnByZXZpZXdTaXplcycpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZW5hYmxlQWRqdXN0bWVudHMgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInBpbGxcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2VkaXRgfVxuICAgICAgICAgICAgICBtYXJnaW49e2ZhbHNlfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgb3Blbk1vZGFsKGVkaXREcmF3ZXJTbHVnKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgndXBsb2FkOmVkaXRJbWFnZScpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICl9XG5cbiAgICAgIHtjdXN0b21BY3Rpb25zICYmXG4gICAgICAgIGN1c3RvbUFjdGlvbnMubWFwKChDdXN0b21BY3Rpb24sIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gPFJlYWN0LkZyYWdtZW50IGtleT17aX0+e0N1c3RvbUFjdGlvbn08L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgdHlwZSBVcGxvYWRQcm9wcyA9IHtcbiAgcmVhZG9ubHkgY29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICByZWFkb25seSBjdXN0b21BY3Rpb25zPzogUmVhY3QuUmVhY3ROb2RlW11cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogRm9ybVN0YXRlXG4gIHJlYWRvbmx5IG9uQ2hhbmdlPzogKGZpbGU/OiBGaWxlKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHVwbG9hZENvbmZpZzogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZ1sndXBsb2FkJ11cbiAgcmVhZG9ubHkgVXBsb2FkQ29udHJvbHM/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGNvbnN0IFVwbG9hZDogUmVhY3QuRkM8VXBsb2FkUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgcmVzZXRVcGxvYWRFZGl0cywgdXBkYXRlVXBsb2FkRWRpdHMsIHVwbG9hZEVkaXRzIH0gPSB1c2VVcGxvYWRFZGl0cygpXG4gIHJldHVybiAoXG4gICAgPFVwbG9hZENvbnRyb2xzUHJvdmlkZXI+XG4gICAgICA8VXBsb2FkX3Y0XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgcmVzZXRVcGxvYWRFZGl0cz17cmVzZXRVcGxvYWRFZGl0c31cbiAgICAgICAgdXBkYXRlVXBsb2FkRWRpdHM9e3VwZGF0ZVVwbG9hZEVkaXRzfVxuICAgICAgICB1cGxvYWRFZGl0cz17dXBsb2FkRWRpdHN9XG4gICAgICAvPlxuICAgIDwvVXBsb2FkQ29udHJvbHNQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgdHlwZSBVcGxvYWRQcm9wc192NCA9IHtcbiAgcmVhZG9ubHkgcmVzZXRVcGxvYWRFZGl0cz86ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdXBkYXRlVXBsb2FkRWRpdHM/OiAoYXJnczogVXBsb2FkRWRpdHMpID0+IHZvaWRcbiAgcmVhZG9ubHkgdXBsb2FkRWRpdHM/OiBVcGxvYWRFZGl0c1xufSAmIFVwbG9hZFByb3BzXG5cbmV4cG9ydCBjb25zdCBVcGxvYWRfdjQ6IFJlYWN0LkZDPFVwbG9hZFByb3BzX3Y0PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgY3VzdG9tQWN0aW9ucyxcbiAgICBpbml0aWFsU3RhdGUsXG4gICAgb25DaGFuZ2UsXG4gICAgcmVzZXRVcGxvYWRFZGl0cyxcbiAgICB1cGRhdGVVcGxvYWRFZGl0cyxcbiAgICB1cGxvYWRDb25maWcsXG4gICAgVXBsb2FkQ29udHJvbHMsXG4gICAgdXBsb2FkRWRpdHMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHtcbiAgICBzZXRVcGxvYWRDb250cm9sRmlsZSxcbiAgICBzZXRVcGxvYWRDb250cm9sRmlsZU5hbWUsXG4gICAgc2V0VXBsb2FkQ29udHJvbEZpbGVVcmwsXG4gICAgdXBsb2FkQ29udHJvbEZpbGUsXG4gICAgdXBsb2FkQ29udHJvbEZpbGVOYW1lLFxuICAgIHVwbG9hZENvbnRyb2xGaWxlVXJsLFxuICB9ID0gdXNlVXBsb2FkQ29udHJvbHMoKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIHJvdXRlczogeyBhcGkgfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBzZXRNb2RpZmllZCB9ID0gdXNlRm9ybSgpXG4gIGNvbnN0IHsgaWQsIGRhdGEsIGRvY1Blcm1pc3Npb25zLCBzZXRVcGxvYWRTdGF0dXMgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IGlzRm9ybVN1Ym1pdHRpbmcgPSB1c2VGb3JtUHJvY2Vzc2luZygpXG4gIGNvbnN0IHsgZXJyb3JNZXNzYWdlLCBzZXRWYWx1ZSwgc2hvd0Vycm9yLCB2YWx1ZSB9ID0gdXNlRmllbGQ8RmlsZT4oe1xuICAgIHBhdGg6ICdmaWxlJyxcbiAgICB2YWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBbZmlsZVNyYywgc2V0RmlsZVNyY10gPSB1c2VTdGF0ZTxudWxsIHwgc3RyaW5nPihudWxsKVxuICBjb25zdCBbcmVtb3ZlZEZpbGUsIHNldFJlbW92ZWRGaWxlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZmlsZW5hbWUsIHNldEZpbGVuYW1lXSA9IHVzZVN0YXRlPHN0cmluZz4odmFsdWU/Lm5hbWUgfHwgJycpXG4gIGNvbnN0IFtzaG93VXJsSW5wdXQsIHNldFNob3dVcmxJbnB1dF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2ZpbGVVcmwsIHNldEZpbGVVcmxdID0gdXNlU3RhdGU8c3RyaW5nPignJylcblxuICBjb25zdCB1cmxJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IHVzZVNlcnZlclNpZGVGZXRjaCA9XG4gICAgdHlwZW9mIHVwbG9hZENvbmZpZz8ucGFzdGVVUkwgPT09ICdvYmplY3QnICYmIHVwbG9hZENvbmZpZy5wYXN0ZVVSTC5hbGxvd0xpc3Q/Lmxlbmd0aCA+IDBcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZmlsZSwgaXNOZXdGaWxlID0gdHJ1ZSB9OiB7IGZpbGU6IEZpbGUgfCBudWxsOyBpc05ld0ZpbGU/OiBib29sZWFuIH0pID0+IHtcbiAgICAgIGlmIChpc05ld0ZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgc2V0RmlsZVNyYyhVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKVxuICAgICAgfVxuXG4gICAgICBzZXRWYWx1ZShmaWxlKVxuICAgICAgc2V0U2hvd1VybElucHV0KGZhbHNlKVxuICAgICAgc2V0VXBsb2FkQ29udHJvbEZpbGVVcmwoJycpXG4gICAgICBzZXRVcGxvYWRDb250cm9sRmlsZU5hbWUobnVsbClcbiAgICAgIHNldFVwbG9hZENvbnRyb2xGaWxlKG51bGwpXG5cbiAgICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25DaGFuZ2UoZmlsZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgc2V0VmFsdWUsIHNldFVwbG9hZENvbnRyb2xGaWxlLCBzZXRVcGxvYWRDb250cm9sRmlsZU5hbWUsIHNldFVwbG9hZENvbnRyb2xGaWxlVXJsXSxcbiAgKVxuXG4gIGNvbnN0IHJlbmFtZUZpbGUgPSAoZmlsZVRvQ2hhbmdlOiBGaWxlLCBuZXdOYW1lOiBzdHJpbmcpOiBGaWxlID0+IHtcbiAgICAvLyBDcmVhdGluZyBhIG5ldyBGaWxlIG9iamVjdCB3aXRoIHVwZGF0ZWQgcHJvcGVydGllc1xuICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbZmlsZVRvQ2hhbmdlXSwgbmV3TmFtZSwge1xuICAgICAgdHlwZTogZmlsZVRvQ2hhbmdlLnR5cGUsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGZpbGVUb0NoYW5nZS5sYXN0TW9kaWZpZWQsXG4gICAgfSlcbiAgICByZXR1cm4gbmV3RmlsZVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZU5hbWVDaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlTmFtZSA9IGUudGFyZ2V0LnZhbHVlXG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBoYW5kbGVGaWxlQ2hhbmdlKHsgZmlsZTogcmVuYW1lRmlsZSh2YWx1ZSwgdXBkYXRlZEZpbGVOYW1lKSwgaXNOZXdGaWxlOiBmYWxzZSB9KVxuICAgICAgICBzZXRGaWxlbmFtZSh1cGRhdGVkRmlsZU5hbWUpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlRmlsZUNoYW5nZSwgdmFsdWVdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChmaWxlczogRmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVUb1VwbG9hZCA9IGZpbGVzPy5bMF1cbiAgICAgIGhhbmRsZUZpbGVDaGFuZ2UoeyBmaWxlOiBmaWxlVG9VcGxvYWQgfSlcbiAgICB9LFxuICAgIFtoYW5kbGVGaWxlQ2hhbmdlXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVSZW1vdmFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFJlbW92ZWRGaWxlKHRydWUpXG4gICAgaGFuZGxlRmlsZUNoYW5nZSh7IGZpbGU6IG51bGwgfSlcbiAgICBzZXRGaWxlU3JjKCcnKVxuICAgIHNldEZpbGVVcmwoJycpXG4gICAgcmVzZXRVcGxvYWRFZGl0cygpXG4gICAgc2V0U2hvd1VybElucHV0KGZhbHNlKVxuICAgIHNldFVwbG9hZENvbnRyb2xGaWxlVXJsKCcnKVxuICAgIHNldFVwbG9hZENvbnRyb2xGaWxlTmFtZShudWxsKVxuICAgIHNldFVwbG9hZENvbnRyb2xGaWxlKG51bGwpXG4gIH0sIFtcbiAgICBoYW5kbGVGaWxlQ2hhbmdlLFxuICAgIHJlc2V0VXBsb2FkRWRpdHMsXG4gICAgc2V0VXBsb2FkQ29udHJvbEZpbGUsXG4gICAgc2V0VXBsb2FkQ29udHJvbEZpbGVOYW1lLFxuICAgIHNldFVwbG9hZENvbnRyb2xGaWxlVXJsLFxuICBdKVxuXG4gIGNvbnN0IG9uRWRpdHNTYXZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGFyZ3M6IFVwbG9hZEVkaXRzKSA9PiB7XG4gICAgICBzZXRNb2RpZmllZCh0cnVlKVxuICAgICAgdXBkYXRlVXBsb2FkRWRpdHMoYXJncylcbiAgICB9LFxuICAgIFtzZXRNb2RpZmllZCwgdXBkYXRlVXBsb2FkRWRpdHNdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlVXJsU3VibWl0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlsZVVybCB8fCB1cGxvYWRDb25maWc/LnBhc3RlVVJMID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0VXBsb2FkU3RhdHVzKCd1cGxvYWRpbmcnKVxuICAgIHRyeSB7XG4gICAgICAvLyBBdHRlbXB0IGNsaWVudC1zaWRlIGZldGNoXG4gICAgICBjb25zdCBjbGllbnRSZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGVVcmwpXG5cbiAgICAgIGlmICghY2xpZW50UmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZXRjaCBmYWlsZWQgd2l0aCBzdGF0dXM6ICR7Y2xpZW50UmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBjbGllbnRSZXNwb25zZS5ibG9iKClcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gdXBsb2FkQ29udHJvbEZpbGVOYW1lIHx8IGRlY29kZVVSSUNvbXBvbmVudChmaWxlVXJsLnNwbGl0KCcvJykucG9wKCkgfHwgJycpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlTmFtZSwgeyB0eXBlOiBibG9iLnR5cGUgfSlcblxuICAgICAgaGFuZGxlRmlsZUNoYW5nZSh7IGZpbGUgfSlcbiAgICAgIHNldFVwbG9hZFN0YXR1cygnaWRsZScpXG4gICAgICByZXR1cm4gLy8gRXhpdCBpZiBjbGllbnQtc2lkZSBmZXRjaCBzdWNjZWVkc1xuICAgIH0gY2F0Y2ggKF9jbGllbnRFcnJvcikge1xuICAgICAgaWYgKCF1c2VTZXJ2ZXJTaWRlRmV0Y2gpIHtcbiAgICAgICAgLy8gSWYgc2VydmVyLXNpZGUgZmV0Y2ggaXMgbm90IGVuYWJsZWQsIHNob3cgY2xpZW50LXNpZGUgZXJyb3JcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCB0aGUgZmlsZS4nKVxuICAgICAgICBzZXRVcGxvYWRTdGF0dXMoJ2ZhaWxlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEF0dGVtcHQgc2VydmVyLXNpZGUgZmV0Y2ggaWYgY2xpZW50LXNpZGUgZmV0Y2ggZmFpbHMgYW5kIHVzZVNlcnZlclNpZGVGZXRjaCBpcyB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhc3RlVVJMOiBgLyR7c3RyaW5nfWAgPSBgLyR7Y29sbGVjdGlvblNsdWd9L3Bhc3RlLXVybCR7aWQgPyBgLyR7aWR9P2AgOiAnPyd9c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVVcmwpfWBcbiAgICAgIGNvbnN0IHNlcnZlclJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICAgIHBhdGg6IHBhc3RlVVJMLFxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgaWYgKCFzZXJ2ZXJSZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZldGNoIGZhaWxlZCB3aXRoIHN0YXR1czogJHtzZXJ2ZXJSZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHNlcnZlclJlc3BvbnNlLmJsb2IoKVxuICAgICAgY29uc3QgZmlsZU5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZVVybC5zcGxpdCgnLycpLnBvcCgpIHx8ICcnKVxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZU5hbWUsIHsgdHlwZTogYmxvYi50eXBlIH0pXG5cbiAgICAgIGhhbmRsZUZpbGVDaGFuZ2UoeyBmaWxlIH0pXG4gICAgICBzZXRVcGxvYWRTdGF0dXMoJ2lkbGUnKVxuICAgIH0gY2F0Y2ggKF9zZXJ2ZXJFcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoJ1RoZSBwcm92aWRlZCBVUkwgaXMgbm90IGFsbG93ZWQuJylcbiAgICAgIHNldFVwbG9hZFN0YXR1cygnZmFpbGVkJylcbiAgICB9XG4gIH0sIFtcbiAgICBhcGksXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZmlsZVVybCxcbiAgICBoYW5kbGVGaWxlQ2hhbmdlLFxuICAgIGlkLFxuICAgIHNldFVwbG9hZFN0YXR1cyxcbiAgICB1cGxvYWRDb25maWcsXG4gICAgdXBsb2FkQ29udHJvbEZpbGVOYW1lLFxuICAgIHVzZVNlcnZlclNpZGVGZXRjaCxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsU3RhdGU/LmZpbGU/LnZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgc2V0RmlsZVNyYyhVUkwuY3JlYXRlT2JqZWN0VVJMKGluaXRpYWxTdGF0ZS5maWxlLnZhbHVlKSlcbiAgICAgIHNldFJlbW92ZWRGaWxlKGZhbHNlKVxuICAgIH1cbiAgfSwgW2luaXRpYWxTdGF0ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvd1VybElucHV0ICYmIHVybElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIHVybElucHV0UmVmLmN1cnJlbnQuZm9jdXMoKSAvLyBGb2N1cyBvbiB0aGUgcmVtb3RlLXVybCBpbnB1dCBmaWVsZCB3aGVuIHNob3dVcmxJbnB1dCBpcyB0cnVlXG4gICAgfVxuICB9LCBbc2hvd1VybElucHV0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0Zvcm1TdWJtaXR0aW5nKSB7XG4gICAgICBzZXRSZW1vdmVkRmlsZShmYWxzZSlcbiAgICB9XG4gIH0sIFtpc0Zvcm1TdWJtaXR0aW5nXSlcblxuICBjb25zdCBjYW5SZW1vdmVVcGxvYWQgPSBkb2NQZXJtaXNzaW9ucz8udXBkYXRlXG5cbiAgY29uc3QgaGFzSW1hZ2VTaXplcyA9IHVwbG9hZENvbmZpZz8uaW1hZ2VTaXplcz8ubGVuZ3RoID4gMFxuICBjb25zdCBoYXNSZXNpemVPcHRpb25zID0gQm9vbGVhbih1cGxvYWRDb25maWc/LnJlc2l6ZU9wdGlvbnMpXG4gIC8vIEV4cGxpY2l0eSBjaGVjayBpZiBzZXQgdG8gdHJ1ZSwgZGVmYXVsdCBpcyB1bmRlZmluZWRcbiAgY29uc3QgZm9jYWxQb2ludEVuYWJsZWQgPSB1cGxvYWRDb25maWc/LmZvY2FsUG9pbnQgPT09IHRydWVcblxuICBjb25zdCB7IGNyb3A6IHNob3dDcm9wID0gdHJ1ZSwgZm9jYWxQb2ludCA9IHRydWUgfSA9IHVwbG9hZENvbmZpZ1xuXG4gIGNvbnN0IHNob3dGb2NhbFBvaW50ID0gZm9jYWxQb2ludCAmJiAoaGFzSW1hZ2VTaXplcyB8fCBoYXNSZXNpemVPcHRpb25zIHx8IGZvY2FsUG9pbnRFbmFibGVkKVxuXG4gIGNvbnN0IGFjY2VwdE1pbWVUeXBlcyA9IHVwbG9hZENvbmZpZy5taW1lVHlwZXM/LmpvaW4oJywgJylcblxuICBjb25zdCBpbWFnZUNhY2hlVGFnID0gdXBsb2FkQ29uZmlnPy5jYWNoZVRhZ3MgJiYgZGF0YT8udXBkYXRlZEF0XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDb250cm9sRmlsZVVybCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh1cGxvYWRDb250cm9sRmlsZVVybCkge1xuICAgICAgICBzZXRGaWxlVXJsKHVwbG9hZENvbnRyb2xGaWxlVXJsKVxuICAgICAgICBhd2FpdCBoYW5kbGVVcmxTdWJtaXQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZvaWQgaGFuZGxlQ29udHJvbEZpbGVVcmwoKVxuICB9LCBbdXBsb2FkQ29udHJvbEZpbGVVcmwsIGhhbmRsZVVybFN1Ym1pdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDb250cm9sRmlsZSA9ICgpID0+IHtcbiAgICAgIGlmICh1cGxvYWRDb250cm9sRmlsZSkge1xuICAgICAgICBoYW5kbGVGaWxlQ2hhbmdlKHsgZmlsZTogdXBsb2FkQ29udHJvbEZpbGUgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2b2lkIGhhbmRsZUNvbnRyb2xGaWxlKClcbiAgfSwgW3VwbG9hZENvbnRyb2xGaWxlLCBoYW5kbGVGaWxlQ2hhbmdlXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtbZmllbGRCYXNlQ2xhc3MsIGJhc2VDbGFzc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICA8RmllbGRFcnJvciBtZXNzYWdlPXtlcnJvck1lc3NhZ2V9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPlxuICAgICAge2RhdGEgJiYgZGF0YS5maWxlbmFtZSAmJiAhcmVtb3ZlZEZpbGUgJiYgKFxuICAgICAgICA8RmlsZURldGFpbHNcbiAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvblNsdWd9XG4gICAgICAgICAgY3VzdG9tVXBsb2FkQWN0aW9ucz17Y3VzdG9tQWN0aW9uc31cbiAgICAgICAgICBkb2M9e2RhdGF9XG4gICAgICAgICAgZW5hYmxlQWRqdXN0bWVudHM9e3Nob3dDcm9wIHx8IHNob3dGb2NhbFBvaW50fVxuICAgICAgICAgIGhhbmRsZVJlbW92ZT17Y2FuUmVtb3ZlVXBsb2FkID8gaGFuZGxlRmlsZVJlbW92YWwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgaGFzSW1hZ2VTaXplcz17aGFzSW1hZ2VTaXplc31cbiAgICAgICAgICBoaWRlUmVtb3ZlRmlsZT17dXBsb2FkQ29uZmlnLmhpZGVSZW1vdmVGaWxlfVxuICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2ltYWdlQ2FjaGVUYWd9XG4gICAgICAgICAgdXBsb2FkQ29uZmlnPXt1cGxvYWRDb25maWd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgeygoIXVwbG9hZENvbmZpZy5oaWRlRmlsZUlucHV0T25DcmVhdGUgJiYgIWRhdGE/LmZpbGVuYW1lKSB8fCByZW1vdmVkRmlsZSkgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdXBsb2FkYH0+XG4gICAgICAgICAgeyF2YWx1ZSAmJiAhc2hvd1VybElucHV0ICYmIChcbiAgICAgICAgICAgIDxEcm9wem9uZSBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdGlvbn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcm9wem9uZUNvbnRlbnRgfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJvcHpvbmVCdXR0b25zYH0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwicGlsbFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRSZWYuY3VycmVudC5jbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dCgndXBsb2FkOnNlbGVjdEZpbGUnKX1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD17YWNjZXB0TWltZVR5cGVzfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hpZGRlbi1pbnB1dGB9XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlblxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRmlsZVNlbGVjdGlvbihlLnRhcmdldC5maWxlcylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7dXBsb2FkQ29uZmlnPy5wYXN0ZVVSTCAhPT0gZmFsc2UgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19vclRleHRgfT57dCgnZ2VuZXJhbDpvcicpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93VXJsSW5wdXQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VXBsb2FkQ29udHJvbEZpbGVVcmwoJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFVwbG9hZENvbnRyb2xGaWxlKG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFVwbG9hZENvbnRyb2xGaWxlTmFtZShudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ3VwbG9hZDpwYXN0ZVVSTCcpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAge1VwbG9hZENvbnRyb2xzID8gVXBsb2FkQ29udHJvbHMgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJhZ0FuZERyb3BUZXh0YH0+XG4gICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpvcicpfSB7dCgndXBsb2FkOmRyYWdBbmREcm9wJyl9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvRHJvcHpvbmU+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd1VybElucHV0ICYmIChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3JlbW90ZS1maWxlLXdyYXBgfT5cbiAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L2NvbnRyb2wtaGFzLWFzc29jaWF0ZWQtbGFiZWwgKi99XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3JlbW90ZS1maWxlYH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRGaWxlVXJsKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHJlZj17dXJsSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17ZmlsZVVybH1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmaWxlVXJsfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FkZC1maWxlLXdyYXBgfT5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hZGQtZmlsZWB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB2b2lkIGhhbmRsZVVybFN1Ym1pdCgpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dCgndXBsb2FkOmFkZEZpbGUnKX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwiaWNvbi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZW1vdmVgfVxuICAgICAgICAgICAgICAgIGljb249XCJ4XCJcbiAgICAgICAgICAgICAgICBpY29uU3R5bGU9XCJ3aXRoLWJvcmRlclwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0U2hvd1VybElucHV0KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0VXBsb2FkQ29udHJvbEZpbGVVcmwoJycpXG4gICAgICAgICAgICAgICAgICBzZXRVcGxvYWRDb250cm9sRmlsZShudWxsKVxuICAgICAgICAgICAgICAgICAgc2V0VXBsb2FkQ29udHJvbEZpbGVOYW1lKG51bGwpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICByb3VuZFxuICAgICAgICAgICAgICAgIHRvb2x0aXA9e3QoJ2dlbmVyYWw6Y2FuY2VsJyl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3ZhbHVlICYmIGZpbGVTcmMgJiYgKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGh1bWJuYWlsLXdyYXBgfT5cbiAgICAgICAgICAgICAgICA8VGh1bWJuYWlsXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvblNsdWd9XG4gICAgICAgICAgICAgICAgICBmaWxlU3JjPXtpc0ltYWdlKHZhbHVlLnR5cGUpID8gZmlsZVNyYyA6IG51bGx9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlLWFkanVzdG1lbnRzYH0+XG4gICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9jb250cm9sLWhhcy1hc3NvY2lhdGVkLWxhYmVsICovfVxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlbmFtZWB9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZU5hbWVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17ZmlsZW5hbWUgfHwgdmFsdWUubmFtZX1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmaWxlbmFtZSB8fCB2YWx1ZS5uYW1lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFVwbG9hZEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIGN1c3RvbUFjdGlvbnM9e2N1c3RvbUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgICBlbmFibGVBZGp1c3RtZW50cz17c2hvd0Nyb3AgfHwgc2hvd0ZvY2FsUG9pbnR9XG4gICAgICAgICAgICAgICAgICBlbmFibGVQcmV2aWV3U2l6ZXM9e2hhc0ltYWdlU2l6ZXMgJiYgZGF0YT8uZmlsZW5hbWUgJiYgIXJlbW92ZWRGaWxlfVxuICAgICAgICAgICAgICAgICAgbWltZVR5cGU9e3ZhbHVlLnR5cGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVtb3ZlYH1cbiAgICAgICAgICAgICAgICBpY29uPVwieFwiXG4gICAgICAgICAgICAgICAgaWNvblN0eWxlPVwid2l0aC1ib3JkZXJcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUZpbGVSZW1vdmFsfVxuICAgICAgICAgICAgICAgIHJvdW5kXG4gICAgICAgICAgICAgICAgdG9vbHRpcD17dCgnZ2VuZXJhbDpjYW5jZWwnKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyh2YWx1ZSB8fCBkYXRhPy5maWxlbmFtZSkgJiYgKFxuICAgICAgICA8RWRpdERlcHRoUHJvdmlkZXI+XG4gICAgICAgICAgPERyYXdlciBIZWFkZXI9e251bGx9IHNsdWc9e2VkaXREcmF3ZXJTbHVnfT5cbiAgICAgICAgICAgIDxFZGl0VXBsb2FkXG4gICAgICAgICAgICAgIGZpbGVOYW1lPXt2YWx1ZT8ubmFtZSB8fCBkYXRhPy5maWxlbmFtZX1cbiAgICAgICAgICAgICAgZmlsZVNyYz17ZGF0YT8udXJsIHx8IGZpbGVTcmN9XG4gICAgICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2ltYWdlQ2FjaGVUYWd9XG4gICAgICAgICAgICAgIGluaXRpYWxDcm9wPXt1cGxvYWRFZGl0cz8uY3JvcCA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGluaXRpYWxGb2NhbFBvaW50PXt7XG4gICAgICAgICAgICAgICAgeDogdXBsb2FkRWRpdHM/LmZvY2FsUG9pbnQ/LnggfHwgZGF0YT8uZm9jYWxYIHx8IDUwLFxuICAgICAgICAgICAgICAgIHk6IHVwbG9hZEVkaXRzPy5mb2NhbFBvaW50Py55IHx8IGRhdGE/LmZvY2FsWSB8fCA1MCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25TYXZlPXtvbkVkaXRzU2F2ZX1cbiAgICAgICAgICAgICAgc2hvd0Nyb3A9e3Nob3dDcm9wfVxuICAgICAgICAgICAgICBzaG93Rm9jYWxQb2ludD17c2hvd0ZvY2FsUG9pbnR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRHJhd2VyPlxuICAgICAgICA8L0VkaXREZXB0aFByb3ZpZGVyPlxuICAgICAgKX1cbiAgICAgIHtkYXRhICYmIGhhc0ltYWdlU2l6ZXMgJiYgKFxuICAgICAgICA8RHJhd2VyXG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wcmV2aWV3RHJhd2VyYH1cbiAgICAgICAgICBob3ZlclRpdGxlXG4gICAgICAgICAgc2x1Zz17c2l6ZVByZXZpZXdTbHVnfVxuICAgICAgICAgIHRpdGxlPXt0KCd1cGxvYWQ6c2l6ZXNGb3InLCB7IGxhYmVsOiBkYXRhLmZpbGVuYW1lIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPFByZXZpZXdTaXplcyBkb2M9e2RhdGF9IGltYWdlQ2FjaGVUYWc9e2ltYWdlQ2FjaGVUYWd9IHVwbG9hZENvbmZpZz17dXBsb2FkQ29uZmlnfSAvPlxuICAgICAgICA8L0RyYXdlcj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IFVwbG9hZEVkaXRzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0Q3JvcCBmcm9tICdyZWFjdC1pbWFnZS1jcm9wJ1xuaW1wb3J0ICdyZWFjdC1pbWFnZS1jcm9wL2Rpc3QvUmVhY3RDcm9wLmNzcydcblxuaW1wb3J0IHsgZWRpdERyYXdlclNsdWcgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9VcGxvYWQvaW5kZXguanMnXG5pbXBvcnQgeyBQbHVzSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1BsdXMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZWRpdC11cGxvYWQnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZ1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgcmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+XG4gIHZhbHVlOiBzdHJpbmdcbn1cblxuY29uc3QgSW5wdXQ6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IG5hbWUsIG9uQ2hhbmdlLCByZWYsIHZhbHVlIH0gPSBwcm9wc1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2lucHV0YH0+XG4gICAgICB7bmFtZX1cbiAgICAgIDxpbnB1dFxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbnR5cGUgRm9jYWxQb3NpdGlvbiA9IHtcbiAgeDogbnVtYmVyXG4gIHk6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBFZGl0VXBsb2FkUHJvcHMgPSB7XG4gIGZpbGVOYW1lOiBzdHJpbmdcbiAgZmlsZVNyYzogc3RyaW5nXG4gIGltYWdlQ2FjaGVUYWc/OiBzdHJpbmdcbiAgaW5pdGlhbENyb3A/OiBVcGxvYWRFZGl0c1snY3JvcCddXG4gIGluaXRpYWxGb2NhbFBvaW50PzogRm9jYWxQb3NpdGlvblxuICBvblNhdmU/OiAodXBsb2FkRWRpdHM6IFVwbG9hZEVkaXRzKSA9PiB2b2lkXG4gIHNob3dDcm9wPzogYm9vbGVhblxuICBzaG93Rm9jYWxQb2ludD86IGJvb2xlYW5cbn1cblxuY29uc3QgZGVmYXVsdENyb3A6IFVwbG9hZEVkaXRzWydjcm9wJ10gPSB7XG4gIGhlaWdodDogMTAwLFxuICB1bml0OiAnJScsXG4gIHdpZHRoOiAxMDAsXG4gIHg6IDAsXG4gIHk6IDAsXG59XG5cbmV4cG9ydCBjb25zdCBFZGl0VXBsb2FkOiBSZWFjdC5GQzxFZGl0VXBsb2FkUHJvcHM+ID0gKHtcbiAgZmlsZU5hbWUsXG4gIGZpbGVTcmMsXG4gIGltYWdlQ2FjaGVUYWcsXG4gIGluaXRpYWxDcm9wLFxuICBpbml0aWFsRm9jYWxQb2ludCxcbiAgb25TYXZlLFxuICBzaG93Q3JvcCxcbiAgc2hvd0ZvY2FsUG9pbnQsXG59KSA9PiB7XG4gIGNvbnN0IHsgY2xvc2VNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBbY3JvcCwgc2V0Q3JvcF0gPSB1c2VTdGF0ZTxVcGxvYWRFZGl0c1snY3JvcCddPigoKSA9PiAoe1xuICAgIC4uLmRlZmF1bHRDcm9wLFxuICAgIC4uLihpbml0aWFsQ3JvcCB8fCB7fSksXG4gIH0pKVxuXG4gIGNvbnN0IGRlZmF1bHRGb2NhbFBvc2l0aW9uOiBGb2NhbFBvc2l0aW9uID0ge1xuICAgIHg6IDUwLFxuICAgIHk6IDUwLFxuICB9XG5cbiAgY29uc3QgW2ZvY2FsUG9zaXRpb24sIHNldEZvY2FsUG9zaXRpb25dID0gdXNlU3RhdGU8Rm9jYWxQb3NpdGlvbj4oKCkgPT4gKHtcbiAgICAuLi5kZWZhdWx0Rm9jYWxQb3NpdGlvbixcbiAgICAuLi5pbml0aWFsRm9jYWxQb2ludCxcbiAgfSkpXG5cbiAgY29uc3QgW2NoZWNrQm91bmRzLCBzZXRDaGVja0JvdW5kc10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcbiAgY29uc3QgW3VuY3JvcHBlZFBpeGVsSGVpZ2h0LCBzZXRVbmNyb3BwZWRQaXhlbEhlaWdodF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gIGNvbnN0IFt1bmNyb3BwZWRQaXhlbFdpZHRoLCBzZXRVbmNyb3BwZWRQaXhlbFdpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuICBjb25zdCBmb2NhbFdyYXBSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgaW1hZ2VSZWYgPSB1c2VSZWY8SFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBjcm9wUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgY29uc3QgaGVpZ2h0SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdpZHRoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgW2ltYWdlTG9hZGVkLCBzZXRJbWFnZUxvYWRlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcblxuICBjb25zdCBvbkltYWdlTG9hZCA9IChlKSA9PiB7XG4gICAgLy8gc2V0IHRoZSBkZWZhdWx0IGltYWdlIGhlaWdodC93aWR0aCBvbiBsb2FkXG4gICAgc2V0VW5jcm9wcGVkUGl4ZWxIZWlnaHQoZS5jdXJyZW50VGFyZ2V0Lm5hdHVyYWxIZWlnaHQpXG4gICAgc2V0VW5jcm9wcGVkUGl4ZWxXaWR0aChlLmN1cnJlbnRUYXJnZXQubmF0dXJhbFdpZHRoKVxuICAgIHNldEltYWdlTG9hZGVkKHRydWUpXG4gIH1cblxuICBjb25zdCBmaW5lVHVuZUNyb3AgPSAoeyBkaW1lbnNpb24sIHZhbHVlIH06IHsgZGltZW5zaW9uOiAnaGVpZ2h0JyB8ICd3aWR0aCc7IHZhbHVlOiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IGludFZhbHVlID0gcGFyc2VJbnQodmFsdWUpXG5cbiAgICBjb25zdCBwZXJjZW50YWdlID1cbiAgICAgIDEwMCAqIChpbnRWYWx1ZSAvIChkaW1lbnNpb24gPT09ICd3aWR0aCcgPyB1bmNyb3BwZWRQaXhlbFdpZHRoIDogdW5jcm9wcGVkUGl4ZWxIZWlnaHQpKVxuXG4gICAgaWYgKHBlcmNlbnRhZ2UgPD0gMCB8fCBwZXJjZW50YWdlID4gMTAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHNldENyb3Aoe1xuICAgICAgLi4uY3JvcCxcbiAgICAgIFtkaW1lbnNpb25dOiBwZXJjZW50YWdlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBmaW5lVHVuZUZvY2FsUG9zaXRpb24gPSAoe1xuICAgIGNvb3JkaW5hdGUsXG4gICAgdmFsdWUsXG4gIH06IHtcbiAgICBjb29yZGluYXRlOiAneCcgfCAneSdcbiAgICB2YWx1ZTogc3RyaW5nXG4gIH0pID0+IHtcbiAgICBjb25zdCBpbnRWYWx1ZSA9IHBhcnNlSW50KHZhbHVlKVxuICAgIGlmIChpbnRWYWx1ZSA+PSAwICYmIGludFZhbHVlIDw9IDEwMCkge1xuICAgICAgc2V0Rm9jYWxQb3NpdGlvbigocHJldlBvc2l0aW9uKSA9PiAoeyAuLi5wcmV2UG9zaXRpb24sIFtjb29yZGluYXRlXTogaW50VmFsdWUgfSkpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2F2ZUVkaXRzID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb25TYXZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvblNhdmUoe1xuICAgICAgICBjcm9wOiBjcm9wID8gY3JvcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9jYWxQb2ludDogZm9jYWxQb3NpdGlvbixcbiAgICAgICAgaGVpZ2h0SW5QaXhlbHM6IE51bWJlcihoZWlnaHRJbnB1dFJlZj8uY3VycmVudD8udmFsdWUgPz8gdW5jcm9wcGVkUGl4ZWxIZWlnaHQpLFxuICAgICAgICB3aWR0aEluUGl4ZWxzOiBOdW1iZXIod2lkdGhJbnB1dFJlZj8uY3VycmVudD8udmFsdWUgPz8gdW5jcm9wcGVkUGl4ZWxXaWR0aCksXG4gICAgICB9KVxuICAgIH1cbiAgICBjbG9zZU1vZGFsKGVkaXREcmF3ZXJTbHVnKVxuICB9XG5cbiAgY29uc3Qgb25EcmFnRW5kID0gUmVhY3QudXNlQ2FsbGJhY2soKHsgeCwgeSB9KSA9PiB7XG4gICAgc2V0Rm9jYWxQb3NpdGlvbih7IHgsIHkgfSlcbiAgICBzZXRDaGVja0JvdW5kcyhmYWxzZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgY2VudGVyRm9jYWxQb2ludCA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gZm9jYWxXcmFwUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBib3VuZHNSZWN0ID0gc2hvd0Nyb3BcbiAgICAgID8gY3JvcFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICA6IGltYWdlUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCB4Q2VudGVyID1cbiAgICAgICgoYm91bmRzUmVjdC5sZWZ0IC0gY29udGFpbmVyUmVjdC5sZWZ0ICsgYm91bmRzUmVjdC53aWR0aCAvIDIpIC8gY29udGFpbmVyUmVjdC53aWR0aCkgKiAxMDBcbiAgICBjb25zdCB5Q2VudGVyID1cbiAgICAgICgoYm91bmRzUmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCArIGJvdW5kc1JlY3QuaGVpZ2h0IC8gMikgLyBjb250YWluZXJSZWN0LmhlaWdodCkgKiAxMDBcbiAgICBzZXRGb2NhbFBvc2l0aW9uKHsgeDogeENlbnRlciwgeTogeUNlbnRlciB9KVxuICB9XG5cbiAgY29uc3QgZmlsZVNyY1RvVXNlID0gaW1hZ2VDYWNoZVRhZyA/IGAke2ZpbGVTcmN9PyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltYWdlQ2FjaGVUYWcpfWAgOiBmaWxlU3JjXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJgfT5cbiAgICAgICAgPGgyIHRpdGxlPXtgJHt0KCdnZW5lcmFsOmVkaXRpbmcnKX0gJHtmaWxlTmFtZX1gfT5cbiAgICAgICAgICB7dCgnZ2VuZXJhbDplZGl0aW5nJyl9IHtmaWxlTmFtZX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjdGlvbnNgfT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdnZW5lcmFsOmNhbmNlbCcpfVxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jYW5jZWxgfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2VNb2RhbChlZGl0RHJhd2VyU2x1Zyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6Y2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDphcHBseUNoYW5nZXMnKX1cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NhdmVgfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFpbWFnZUxvYWRlZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3NhdmVFZGl0c31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dCgnZ2VuZXJhbDphcHBseUNoYW5nZXMnKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190b29sV3JhcGB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY3JvcGB9PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZm9jYWwtd3JhcHBlcmB9XG4gICAgICAgICAgICByZWY9e2ZvY2FsV3JhcFJlZn1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGFzcGVjdFJhdGlvOiBgJHt1bmNyb3BwZWRQaXhlbFdpZHRoIC8gdW5jcm9wcGVkUGl4ZWxIZWlnaHR9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3Nob3dDcm9wID8gKFxuICAgICAgICAgICAgICA8UmVhY3RDcm9wXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZWFjdENyb3BgfVxuICAgICAgICAgICAgICAgIGNyb3A9e2Nyb3B9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhfLCBjKSA9PiBzZXRDcm9wKGMpfVxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9eygpID0+IHNldENoZWNrQm91bmRzKHRydWUpfVxuICAgICAgICAgICAgICAgIHJlbmRlclNlbGVjdGlvbkFkZG9uPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Nyb3Atd2luZG93YH0gcmVmPXtjcm9wUmVmfSAvPlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBhbHQ9e3QoJ3VwbG9hZDpzZXRDcm9wQXJlYScpfVxuICAgICAgICAgICAgICAgICAgb25Mb2FkPXtvbkltYWdlTG9hZH1cbiAgICAgICAgICAgICAgICAgIHJlZj17aW1hZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICBzcmM9e2ZpbGVTcmNUb1VzZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1JlYWN0Q3JvcD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBhbHQ9e3QoJ3VwbG9hZDpzZXRGb2NhbFBvaW50Jyl9XG4gICAgICAgICAgICAgICAgb25Mb2FkPXtvbkltYWdlTG9hZH1cbiAgICAgICAgICAgICAgICByZWY9e2ltYWdlUmVmfVxuICAgICAgICAgICAgICAgIHNyYz17ZmlsZVNyY1RvVXNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtzaG93Rm9jYWxQb2ludCAmJiAoXG4gICAgICAgICAgICAgIDxEcmFnZ2FibGVFbGVtZW50XG4gICAgICAgICAgICAgICAgYm91bmRzUmVmPXtzaG93Q3JvcCA/IGNyb3BSZWYgOiBpbWFnZVJlZn1cbiAgICAgICAgICAgICAgICBjaGVja0JvdW5kcz17c2hvd0Nyb3AgPyBjaGVja0JvdW5kcyA6IGZhbHNlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZm9jYWxQb2ludGB9XG4gICAgICAgICAgICAgICAgY29udGFpbmVyUmVmPXtmb2NhbFdyYXBSZWZ9XG4gICAgICAgICAgICAgICAgaW5pdGlhbFBvc2l0aW9uPXtmb2NhbFBvc2l0aW9ufVxuICAgICAgICAgICAgICAgIG9uRHJhZ0VuZD17b25EcmFnRW5kfVxuICAgICAgICAgICAgICAgIHNldENoZWNrQm91bmRzPXtzaG93Q3JvcCA/IHNldENoZWNrQm91bmRzIDogZmFsc2V9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGx1c0ljb24gLz5cbiAgICAgICAgICAgICAgPC9EcmFnZ2FibGVFbGVtZW50PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoc2hvd0Nyb3AgfHwgc2hvd0ZvY2FsUG9pbnQpICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2lkZWJhcmB9PlxuICAgICAgICAgICAge3Nob3dDcm9wICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2dyb3VwV3JhcGB9PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGl0bGVXcmFwYH0+XG4gICAgICAgICAgICAgICAgICAgIDxoMz57dCgndXBsb2FkOmNyb3AnKX08L2gzPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3Jlc2V0YH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3JvcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0OiAnJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdnZW5lcmFsOnJlc2V0Jyl9XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kZXNjcmlwdGlvbmB9PlxuICAgICAgICAgICAgICAgICAge3QoJ3VwbG9hZDpjcm9wVG9vbERlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dHNXcmFwYH0+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbmFtZT17YCR7dCgndXBsb2FkOndpZHRoJyl9IChweClgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiBmaW5lVHVuZUNyb3AoeyBkaW1lbnNpb246ICd3aWR0aCcsIHZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICByZWY9e3dpZHRoSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXsoKGNyb3Aud2lkdGggLyAxMDApICogdW5jcm9wcGVkUGl4ZWxXaWR0aCkudG9GaXhlZCgwKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbmFtZT17YCR7dCgndXBsb2FkOmhlaWdodCcpfSAocHgpYH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gZmluZVR1bmVDcm9wKHsgZGltZW5zaW9uOiAnaGVpZ2h0JywgdmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIHJlZj17aGVpZ2h0SW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXsoKGNyb3AuaGVpZ2h0IC8gMTAwKSAqIHVuY3JvcHBlZFBpeGVsSGVpZ2h0KS50b0ZpeGVkKDApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7c2hvd0ZvY2FsUG9pbnQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZ3JvdXBXcmFwYH0+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190aXRsZVdyYXBgfT5cbiAgICAgICAgICAgICAgICAgICAgPGgzPnt0KCd1cGxvYWQ6Zm9jYWxQb2ludCcpfTwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVzZXRgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2NlbnRlckZvY2FsUG9pbnR9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpyZXNldCcpfVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZGVzY3JpcHRpb25gfT5cbiAgICAgICAgICAgICAgICAgIHt0KCd1cGxvYWQ6Zm9jYWxQb2ludERlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dHNXcmFwYH0+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIlggJVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+IGZpbmVUdW5lRm9jYWxQb3NpdGlvbih7IGNvb3JkaW5hdGU6ICd4JywgdmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb2NhbFBvc2l0aW9uLngudG9GaXhlZCgwKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIlkgJVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+IGZpbmVUdW5lRm9jYWxQb3NpdGlvbih7IGNvb3JkaW5hdGU6ICd5JywgdmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb2NhbFBvc2l0aW9uLnkudG9GaXhlZCgwKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmNvbnN0IERyYWdnYWJsZUVsZW1lbnQgPSAoe1xuICBib3VuZHNSZWYsXG4gIGNoZWNrQm91bmRzLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGluaXRpYWxQb3NpdGlvbiA9IHsgeDogNTAsIHk6IDUwIH0sXG4gIG9uRHJhZ0VuZCxcbiAgc2V0Q2hlY2tCb3VuZHMsXG59KSA9PiB7XG4gIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoeyB4OiBpbml0aWFsUG9zaXRpb24ueCwgeTogaW5pdGlhbFBvc2l0aW9uLnkgfSlcbiAgY29uc3QgW2lzRHJhZ2dpbmcsIHNldElzRHJhZ2dpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGRyYWdSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBjb25zdCBnZXRDb29yZGluYXRlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChtb3VzZVhBcmc/OiBudW1iZXIsIG1vdXNlWUFyZz86IG51bWJlciwgcmVjZW50ZXI/OiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGJvdW5kc1JlY3QgPSBib3VuZHNSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgbW91c2VYID0gbW91c2VYQXJnID8/IGJvdW5kc1JlY3QubGVmdFxuICAgICAgY29uc3QgbW91c2VZID0gbW91c2VZQXJnID8/IGJvdW5kc1JlY3QudG9wXG5cbiAgICAgIGNvbnN0IHhPdXRPZkJvdW5kcyA9IG1vdXNlWCA8IGJvdW5kc1JlY3QubGVmdCB8fCBtb3VzZVggPiBib3VuZHNSZWN0LnJpZ2h0XG4gICAgICBjb25zdCB5T3V0T2ZCb3VuZHMgPSBtb3VzZVkgPCBib3VuZHNSZWN0LnRvcCB8fCBtb3VzZVkgPiBib3VuZHNSZWN0LmJvdHRvbVxuXG4gICAgICBsZXQgeCA9ICgobW91c2VYIC0gY29udGFpbmVyUmVjdC5sZWZ0KSAvIGNvbnRhaW5lclJlY3Qud2lkdGgpICogMTAwXG4gICAgICBsZXQgeSA9ICgobW91c2VZIC0gY29udGFpbmVyUmVjdC50b3ApIC8gY29udGFpbmVyUmVjdC5oZWlnaHQpICogMTAwXG4gICAgICBjb25zdCB4Q2VudGVyID1cbiAgICAgICAgKChib3VuZHNSZWN0LmxlZnQgLSBjb250YWluZXJSZWN0LmxlZnQgKyBib3VuZHNSZWN0LndpZHRoIC8gMikgLyBjb250YWluZXJSZWN0LndpZHRoKSAqIDEwMFxuICAgICAgY29uc3QgeUNlbnRlciA9XG4gICAgICAgICgoYm91bmRzUmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCArIGJvdW5kc1JlY3QuaGVpZ2h0IC8gMikgLyBjb250YWluZXJSZWN0LmhlaWdodCkgKiAxMDBcbiAgICAgIGlmICh4T3V0T2ZCb3VuZHMgfHwgeU91dE9mQm91bmRzKSB7XG4gICAgICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpXG4gICAgICAgIGlmIChtb3VzZVggPCBib3VuZHNSZWN0LmxlZnQpIHtcbiAgICAgICAgICB4ID0gKChib3VuZHNSZWN0LmxlZnQgLSBjb250YWluZXJSZWN0LmxlZnQpIC8gY29udGFpbmVyUmVjdC53aWR0aCkgKiAxMDBcbiAgICAgICAgfSBlbHNlIGlmIChtb3VzZVggPiBib3VuZHNSZWN0LnJpZ2h0KSB7XG4gICAgICAgICAgeCA9XG4gICAgICAgICAgICAoKGNvbnRhaW5lclJlY3Qud2lkdGggLSAoY29udGFpbmVyUmVjdC5yaWdodCAtIGJvdW5kc1JlY3QucmlnaHQpKSAvXG4gICAgICAgICAgICAgIGNvbnRhaW5lclJlY3Qud2lkdGgpICpcbiAgICAgICAgICAgIDEwMFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vdXNlWSA8IGJvdW5kc1JlY3QudG9wKSB7XG4gICAgICAgICAgeSA9ICgoYm91bmRzUmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCkgLyBjb250YWluZXJSZWN0LmhlaWdodCkgKiAxMDBcbiAgICAgICAgfSBlbHNlIGlmIChtb3VzZVkgPiBib3VuZHNSZWN0LmJvdHRvbSkge1xuICAgICAgICAgIHkgPVxuICAgICAgICAgICAgKChjb250YWluZXJSZWN0LmhlaWdodCAtIChjb250YWluZXJSZWN0LmJvdHRvbSAtIGJvdW5kc1JlY3QuYm90dG9tKSkgL1xuICAgICAgICAgICAgICBjb250YWluZXJSZWN0LmhlaWdodCkgKlxuICAgICAgICAgICAgMTAwXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVjZW50ZXIpIHtcbiAgICAgICAgICB4ID0geE91dE9mQm91bmRzID8geENlbnRlciA6IHhcbiAgICAgICAgICB5ID0geU91dE9mQm91bmRzID8geUNlbnRlciA6IHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyB4LCB5IH1cbiAgICB9LFxuICAgIFtib3VuZHNSZWYsIGNvbnRhaW5lclJlZl0sXG4gIClcblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgc2V0SXNEcmFnZ2luZyh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFpc0RyYWdnaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCB7IHgsIHkgfSA9IGdldENvb3JkaW5hdGVzKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICBzZXRQb3NpdGlvbih7IHgsIHkgfSlcbiAgfVxuXG4gIGNvbnN0IG9uRHJvcCA9ICgpID0+IHtcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKVxuICAgIG9uRHJhZ0VuZChwb3NpdGlvbilcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRHJhZ2dpbmcgfHwgIWRyYWdSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjaGVja0JvdW5kcykge1xuICAgICAgY29uc3QgeyBoZWlnaHQsIGxlZnQsIHRvcCwgd2lkdGggfSA9IGRyYWdSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgeyB4LCB5IH0gPSBnZXRDb29yZGluYXRlcyhsZWZ0ICsgd2lkdGggLyAyLCB0b3AgKyBoZWlnaHQgLyAyLCB0cnVlKVxuICAgICAgb25EcmFnRW5kKHsgeCwgeSB9KVxuICAgICAgc2V0UG9zaXRpb24oeyB4LCB5IH0pXG4gICAgICBzZXRDaGVja0JvdW5kcyhmYWxzZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSwgW2dldENvb3JkaW5hdGVzLCBpc0RyYWdnaW5nLCBjaGVja0JvdW5kcywgc2V0Q2hlY2tCb3VuZHMsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIG9uRHJhZ0VuZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQb3NpdGlvbih7IHg6IGluaXRpYWxQb3NpdGlvbi54LCB5OiBpbml0aWFsUG9zaXRpb24ueSB9KVxuICB9LCBbaW5pdGlhbFBvc2l0aW9uLngsIGluaXRpYWxQb3NpdGlvbi55XSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBgJHtiYXNlQ2xhc3N9X19kcmFnZ2FibGUtY29udGFpbmVyYCxcbiAgICAgICAgaXNEcmFnZ2luZyAmJiBgJHtiYXNlQ2xhc3N9X19kcmFnZ2FibGUtY29udGFpbmVyLS1kcmFnZ2luZ2AsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVNb3VzZU1vdmV9XG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e1tgJHtiYXNlQ2xhc3N9X19kcmFnZ2FibGVgLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICAgIG9uTW91c2VEb3duPXtoYW5kbGVNb3VzZURvd259XG4gICAgICAgIG9uTW91c2VVcD17b25Ecm9wfVxuICAgICAgICByZWY9e2RyYWdSZWZ9XG4gICAgICAgIHN0eWxlPXt7IGxlZnQ6IGAke3Bvc2l0aW9uLnh9JWAsIHRvcDogYCR7cG9zaXRpb24ueX0lYCB9fVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCBnLCB7IFB1cmVDb21wb25lbnQgYXMgRSwgY3JlYXRlUmVmIGFzIF8gfSBmcm9tIFwicmVhY3RcIjtcbmNvbnN0IE0gPSB7XG4gIHg6IDAsXG4gIHk6IDAsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIHVuaXQ6IFwicHhcIlxufSwgZiA9IChzLCB0LCBlKSA9PiBNYXRoLm1pbihNYXRoLm1heChzLCB0KSwgZSksIFMgPSAoLi4ucykgPT4gcy5maWx0ZXIoKHQpID0+IHQgJiYgdHlwZW9mIHQgPT0gXCJzdHJpbmdcIikuam9pbihcIiBcIiksIFAgPSAocywgdCkgPT4gcyA9PT0gdCB8fCBzLndpZHRoID09PSB0LndpZHRoICYmIHMuaGVpZ2h0ID09PSB0LmhlaWdodCAmJiBzLnggPT09IHQueCAmJiBzLnkgPT09IHQueSAmJiBzLnVuaXQgPT09IHQudW5pdDtcbmZ1bmN0aW9uIEgocywgdCwgZSwgbykge1xuICBjb25zdCBpID0geShzLCBlLCBvKTtcbiAgcmV0dXJuIHMud2lkdGggJiYgKGkuaGVpZ2h0ID0gaS53aWR0aCAvIHQpLCBzLmhlaWdodCAmJiAoaS53aWR0aCA9IGkuaGVpZ2h0ICogdCksIGkueSArIGkuaGVpZ2h0ID4gbyAmJiAoaS5oZWlnaHQgPSBvIC0gaS55LCBpLndpZHRoID0gaS5oZWlnaHQgKiB0KSwgaS54ICsgaS53aWR0aCA+IGUgJiYgKGkud2lkdGggPSBlIC0gaS54LCBpLmhlaWdodCA9IGkud2lkdGggLyB0KSwgcy51bml0ID09PSBcIiVcIiA/IEQoaSwgZSwgbykgOiBpO1xufVxuZnVuY3Rpb24gTihzLCB0LCBlKSB7XG4gIGNvbnN0IG8gPSB5KHMsIHQsIGUpO1xuICByZXR1cm4gby54ID0gKHQgLSBvLndpZHRoKSAvIDIsIG8ueSA9IChlIC0gby5oZWlnaHQpIC8gMiwgcy51bml0ID09PSBcIiVcIiA/IEQobywgdCwgZSkgOiBvO1xufVxuZnVuY3Rpb24gRChzLCB0LCBlKSB7XG4gIHJldHVybiBzLnVuaXQgPT09IFwiJVwiID8geyAuLi5NLCAuLi5zLCB1bml0OiBcIiVcIiB9IDoge1xuICAgIHVuaXQ6IFwiJVwiLFxuICAgIHg6IHMueCA/IHMueCAvIHQgKiAxMDAgOiAwLFxuICAgIHk6IHMueSA/IHMueSAvIGUgKiAxMDAgOiAwLFxuICAgIHdpZHRoOiBzLndpZHRoID8gcy53aWR0aCAvIHQgKiAxMDAgOiAwLFxuICAgIGhlaWdodDogcy5oZWlnaHQgPyBzLmhlaWdodCAvIGUgKiAxMDAgOiAwXG4gIH07XG59XG5mdW5jdGlvbiB5KHMsIHQsIGUpIHtcbiAgcmV0dXJuIHMudW5pdCA/IHMudW5pdCA9PT0gXCJweFwiID8geyAuLi5NLCAuLi5zLCB1bml0OiBcInB4XCIgfSA6IHtcbiAgICB1bml0OiBcInB4XCIsXG4gICAgeDogcy54ID8gcy54ICogdCAvIDEwMCA6IDAsXG4gICAgeTogcy55ID8gcy55ICogZSAvIDEwMCA6IDAsXG4gICAgd2lkdGg6IHMud2lkdGggPyBzLndpZHRoICogdCAvIDEwMCA6IDAsXG4gICAgaGVpZ2h0OiBzLmhlaWdodCA/IHMuaGVpZ2h0ICogZSAvIDEwMCA6IDBcbiAgfSA6IHsgLi4uTSwgLi4ucywgdW5pdDogXCJweFwiIH07XG59XG5mdW5jdGlvbiBYKHMsIHQsIGUsIG8sIGksIG4gPSAwLCBhID0gMCwgdyA9IG8sIGggPSBpKSB7XG4gIGNvbnN0IHIgPSB7IC4uLnMgfTtcbiAgbGV0IGMgPSBNYXRoLm1pbihuLCBvKSwgZCA9IE1hdGgubWluKGEsIGkpLCBwID0gTWF0aC5taW4odywgbyksIGwgPSBNYXRoLm1pbihoLCBpKTtcbiAgdCAmJiAodCA+IDEgPyAoYyA9IGEgPyBhICogdCA6IGMsIGQgPSBjIC8gdCwgcCA9IHcgKiB0KSA6IChkID0gbiA/IG4gLyB0IDogZCwgYyA9IGQgKiB0LCBsID0gaCAvIHQpKSwgci55IDwgMCAmJiAoci5oZWlnaHQgPSBNYXRoLm1heChyLmhlaWdodCArIHIueSwgZCksIHIueSA9IDApLCByLnggPCAwICYmIChyLndpZHRoID0gTWF0aC5tYXgoci53aWR0aCArIHIueCwgYyksIHIueCA9IDApO1xuICBjb25zdCB1ID0gbyAtIChyLnggKyByLndpZHRoKTtcbiAgdSA8IDAgJiYgKHIueCA9IE1hdGgubWluKHIueCwgbyAtIGMpLCByLndpZHRoICs9IHUpO1xuICBjb25zdCBDID0gaSAtIChyLnkgKyByLmhlaWdodCk7XG4gIGlmIChDIDwgMCAmJiAoci55ID0gTWF0aC5taW4oci55LCBpIC0gZCksIHIuaGVpZ2h0ICs9IEMpLCByLndpZHRoIDwgYyAmJiAoKGUgPT09IFwic3dcIiB8fCBlID09IFwibndcIikgJiYgKHIueCAtPSBjIC0gci53aWR0aCksIHIud2lkdGggPSBjKSwgci5oZWlnaHQgPCBkICYmICgoZSA9PT0gXCJud1wiIHx8IGUgPT0gXCJuZVwiKSAmJiAoci55IC09IGQgLSByLmhlaWdodCksIHIuaGVpZ2h0ID0gZCksIHIud2lkdGggPiBwICYmICgoZSA9PT0gXCJzd1wiIHx8IGUgPT0gXCJud1wiKSAmJiAoci54IC09IHAgLSByLndpZHRoKSwgci53aWR0aCA9IHApLCByLmhlaWdodCA+IGwgJiYgKChlID09PSBcIm53XCIgfHwgZSA9PSBcIm5lXCIpICYmIChyLnkgLT0gbCAtIHIuaGVpZ2h0KSwgci5oZWlnaHQgPSBsKSwgdCkge1xuICAgIGNvbnN0IFIgPSByLndpZHRoIC8gci5oZWlnaHQ7XG4gICAgaWYgKFIgPCB0KSB7XG4gICAgICBjb25zdCB4ID0gTWF0aC5tYXgoci53aWR0aCAvIHQsIGQpO1xuICAgICAgKGUgPT09IFwibndcIiB8fCBlID09IFwibmVcIikgJiYgKHIueSAtPSB4IC0gci5oZWlnaHQpLCByLmhlaWdodCA9IHg7XG4gICAgfSBlbHNlIGlmIChSID4gdCkge1xuICAgICAgY29uc3QgeCA9IE1hdGgubWF4KHIuaGVpZ2h0ICogdCwgYyk7XG4gICAgICAoZSA9PT0gXCJzd1wiIHx8IGUgPT0gXCJud1wiKSAmJiAoci54IC09IHggLSByLndpZHRoKSwgci53aWR0aCA9IHg7XG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24gSyhzLCB0LCBlLCBvKSB7XG4gIGNvbnN0IGkgPSB7IC4uLnMgfTtcbiAgcmV0dXJuIHQgPT09IFwiQXJyb3dMZWZ0XCIgPyBvID09PSBcIm53XCIgPyAoaS54IC09IGUsIGkueSAtPSBlLCBpLndpZHRoICs9IGUsIGkuaGVpZ2h0ICs9IGUpIDogbyA9PT0gXCJ3XCIgPyAoaS54IC09IGUsIGkud2lkdGggKz0gZSkgOiBvID09PSBcInN3XCIgPyAoaS54IC09IGUsIGkud2lkdGggKz0gZSwgaS5oZWlnaHQgKz0gZSkgOiBvID09PSBcIm5lXCIgPyAoaS55ICs9IGUsIGkud2lkdGggLT0gZSwgaS5oZWlnaHQgLT0gZSkgOiBvID09PSBcImVcIiA/IGkud2lkdGggLT0gZSA6IG8gPT09IFwic2VcIiAmJiAoaS53aWR0aCAtPSBlLCBpLmhlaWdodCAtPSBlKSA6IHQgPT09IFwiQXJyb3dSaWdodFwiICYmIChvID09PSBcIm53XCIgPyAoaS54ICs9IGUsIGkueSArPSBlLCBpLndpZHRoIC09IGUsIGkuaGVpZ2h0IC09IGUpIDogbyA9PT0gXCJ3XCIgPyAoaS54ICs9IGUsIGkud2lkdGggLT0gZSkgOiBvID09PSBcInN3XCIgPyAoaS54ICs9IGUsIGkud2lkdGggLT0gZSwgaS5oZWlnaHQgLT0gZSkgOiBvID09PSBcIm5lXCIgPyAoaS55IC09IGUsIGkud2lkdGggKz0gZSwgaS5oZWlnaHQgKz0gZSkgOiBvID09PSBcImVcIiA/IGkud2lkdGggKz0gZSA6IG8gPT09IFwic2VcIiAmJiAoaS53aWR0aCArPSBlLCBpLmhlaWdodCArPSBlKSksIHQgPT09IFwiQXJyb3dVcFwiID8gbyA9PT0gXCJud1wiID8gKGkueCAtPSBlLCBpLnkgLT0gZSwgaS53aWR0aCArPSBlLCBpLmhlaWdodCArPSBlKSA6IG8gPT09IFwiblwiID8gKGkueSAtPSBlLCBpLmhlaWdodCArPSBlKSA6IG8gPT09IFwibmVcIiA/IChpLnkgLT0gZSwgaS53aWR0aCArPSBlLCBpLmhlaWdodCArPSBlKSA6IG8gPT09IFwic3dcIiA/IChpLnggKz0gZSwgaS53aWR0aCAtPSBlLCBpLmhlaWdodCAtPSBlKSA6IG8gPT09IFwic1wiID8gaS5oZWlnaHQgLT0gZSA6IG8gPT09IFwic2VcIiAmJiAoaS53aWR0aCAtPSBlLCBpLmhlaWdodCAtPSBlKSA6IHQgPT09IFwiQXJyb3dEb3duXCIgJiYgKG8gPT09IFwibndcIiA/IChpLnggKz0gZSwgaS55ICs9IGUsIGkud2lkdGggLT0gZSwgaS5oZWlnaHQgLT0gZSkgOiBvID09PSBcIm5cIiA/IChpLnkgKz0gZSwgaS5oZWlnaHQgLT0gZSkgOiBvID09PSBcIm5lXCIgPyAoaS55ICs9IGUsIGkud2lkdGggLT0gZSwgaS5oZWlnaHQgLT0gZSkgOiBvID09PSBcInN3XCIgPyAoaS54IC09IGUsIGkud2lkdGggKz0gZSwgaS5oZWlnaHQgKz0gZSkgOiBvID09PSBcInNcIiA/IGkuaGVpZ2h0ICs9IGUgOiBvID09PSBcInNlXCIgJiYgKGkud2lkdGggKz0gZSwgaS5oZWlnaHQgKz0gZSkpLCBpO1xufVxuY29uc3QgYiA9IHsgY2FwdHVyZTogITAsIHBhc3NpdmU6ICExIH0sIHYgPSBjbGFzcyBtIGV4dGVuZHMgRSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuZG9jTW92ZUJvdW5kID0gITEsIHRoaXMubW91c2VEb3duT25Dcm9wID0gITEsIHRoaXMuZHJhZ1N0YXJ0ZWQgPSAhMSwgdGhpcy5ldkRhdGEgPSB7XG4gICAgICBzdGFydENsaWVudFg6IDAsXG4gICAgICBzdGFydENsaWVudFk6IDAsXG4gICAgICBzdGFydENyb3BYOiAwLFxuICAgICAgc3RhcnRDcm9wWTogMCxcbiAgICAgIGNsaWVudFg6IDAsXG4gICAgICBjbGllbnRZOiAwLFxuICAgICAgaXNSZXNpemU6ICEwXG4gICAgfSwgdGhpcy5jb21wb25lbnRSZWYgPSBfKCksIHRoaXMubWVkaWFSZWYgPSBfKCksIHRoaXMuaW5pdENoYW5nZUNhbGxlZCA9ICExLCB0aGlzLnN0YXRlID0ge1xuICAgICAgY3JvcElzQWN0aXZlOiAhMSxcbiAgICAgIG5ld0Nyb3BJc0JlaW5nRHJhd246ICExXG4gICAgfSwgdGhpcy5vbkNyb3BQb2ludGVyRG93biA9ICh0KSA9PiB7XG4gICAgICBjb25zdCB7IGNyb3A6IGUsIGRpc2FibGVkOiBvIH0gPSB0aGlzLnByb3BzLCBpID0gdGhpcy5nZXRCb3goKTtcbiAgICAgIGlmICghZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgbiA9IHkoZSwgaS53aWR0aCwgaS5oZWlnaHQpO1xuICAgICAgaWYgKG8pXG4gICAgICAgIHJldHVybjtcbiAgICAgIHQuY2FuY2VsYWJsZSAmJiB0LnByZXZlbnREZWZhdWx0KCksIHRoaXMuYmluZERvY01vdmUoKSwgdGhpcy5jb21wb25lbnRSZWYuY3VycmVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6ICEwIH0pO1xuICAgICAgY29uc3QgYSA9IHQudGFyZ2V0LmRhdGFzZXQub3JkLCB3ID0gISFhO1xuICAgICAgbGV0IGggPSB0LmNsaWVudFgsIHIgPSB0LmNsaWVudFksIGMgPSBuLngsIGQgPSBuLnk7XG4gICAgICBpZiAoYSkge1xuICAgICAgICBjb25zdCBwID0gdC5jbGllbnRYIC0gaS54LCBsID0gdC5jbGllbnRZIC0gaS55O1xuICAgICAgICBsZXQgdSA9IDAsIEMgPSAwO1xuICAgICAgICBhID09PSBcIm5lXCIgfHwgYSA9PSBcImVcIiA/ICh1ID0gcCAtIChuLnggKyBuLndpZHRoKSwgQyA9IGwgLSBuLnksIGMgPSBuLngsIGQgPSBuLnkgKyBuLmhlaWdodCkgOiBhID09PSBcInNlXCIgfHwgYSA9PT0gXCJzXCIgPyAodSA9IHAgLSAobi54ICsgbi53aWR0aCksIEMgPSBsIC0gKG4ueSArIG4uaGVpZ2h0KSwgYyA9IG4ueCwgZCA9IG4ueSkgOiBhID09PSBcInN3XCIgfHwgYSA9PSBcIndcIiA/ICh1ID0gcCAtIG4ueCwgQyA9IGwgLSAobi55ICsgbi5oZWlnaHQpLCBjID0gbi54ICsgbi53aWR0aCwgZCA9IG4ueSkgOiAoYSA9PT0gXCJud1wiIHx8IGEgPT0gXCJuXCIpICYmICh1ID0gcCAtIG4ueCwgQyA9IGwgLSBuLnksIGMgPSBuLnggKyBuLndpZHRoLCBkID0gbi55ICsgbi5oZWlnaHQpLCBoID0gYyArIGkueCArIHUsIHIgPSBkICsgaS55ICsgQztcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZEYXRhID0ge1xuICAgICAgICBzdGFydENsaWVudFg6IGgsXG4gICAgICAgIHN0YXJ0Q2xpZW50WTogcixcbiAgICAgICAgc3RhcnRDcm9wWDogYyxcbiAgICAgICAgc3RhcnRDcm9wWTogZCxcbiAgICAgICAgY2xpZW50WDogdC5jbGllbnRYLFxuICAgICAgICBjbGllbnRZOiB0LmNsaWVudFksXG4gICAgICAgIGlzUmVzaXplOiB3LFxuICAgICAgICBvcmQ6IGFcbiAgICAgIH0sIHRoaXMubW91c2VEb3duT25Dcm9wID0gITAsIHRoaXMuc2V0U3RhdGUoeyBjcm9wSXNBY3RpdmU6ICEwIH0pO1xuICAgIH0sIHRoaXMub25Db21wb25lbnRQb2ludGVyRG93biA9ICh0KSA9PiB7XG4gICAgICBjb25zdCB7IGNyb3A6IGUsIGRpc2FibGVkOiBvLCBsb2NrZWQ6IGksIGtlZXBTZWxlY3Rpb246IG4sIG9uQ2hhbmdlOiBhIH0gPSB0aGlzLnByb3BzLCB3ID0gdGhpcy5nZXRCb3goKTtcbiAgICAgIGlmIChvIHx8IGkgfHwgbiAmJiBlKVxuICAgICAgICByZXR1cm47XG4gICAgICB0LmNhbmNlbGFibGUgJiYgdC5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLmJpbmREb2NNb3ZlKCksIHRoaXMuY29tcG9uZW50UmVmLmN1cnJlbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiAhMCB9KTtcbiAgICAgIGNvbnN0IGggPSB0LmNsaWVudFggLSB3LngsIHIgPSB0LmNsaWVudFkgLSB3LnksIGMgPSB7XG4gICAgICAgIHVuaXQ6IFwicHhcIixcbiAgICAgICAgeDogaCxcbiAgICAgICAgeTogcixcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMFxuICAgICAgfTtcbiAgICAgIHRoaXMuZXZEYXRhID0ge1xuICAgICAgICBzdGFydENsaWVudFg6IHQuY2xpZW50WCxcbiAgICAgICAgc3RhcnRDbGllbnRZOiB0LmNsaWVudFksXG4gICAgICAgIHN0YXJ0Q3JvcFg6IGgsXG4gICAgICAgIHN0YXJ0Q3JvcFk6IHIsXG4gICAgICAgIGNsaWVudFg6IHQuY2xpZW50WCxcbiAgICAgICAgY2xpZW50WTogdC5jbGllbnRZLFxuICAgICAgICBpc1Jlc2l6ZTogITBcbiAgICAgIH0sIHRoaXMubW91c2VEb3duT25Dcm9wID0gITAsIGEoeShjLCB3LndpZHRoLCB3LmhlaWdodCksIEQoYywgdy53aWR0aCwgdy5oZWlnaHQpKSwgdGhpcy5zZXRTdGF0ZSh7IGNyb3BJc0FjdGl2ZTogITAsIG5ld0Nyb3BJc0JlaW5nRHJhd246ICEwIH0pO1xuICAgIH0sIHRoaXMub25Eb2NQb2ludGVyTW92ZSA9ICh0KSA9PiB7XG4gICAgICBjb25zdCB7IGNyb3A6IGUsIGRpc2FibGVkOiBvLCBvbkNoYW5nZTogaSwgb25EcmFnU3RhcnQ6IG4gfSA9IHRoaXMucHJvcHMsIGEgPSB0aGlzLmdldEJveCgpO1xuICAgICAgaWYgKG8gfHwgIWUgfHwgIXRoaXMubW91c2VEb3duT25Dcm9wKVxuICAgICAgICByZXR1cm47XG4gICAgICB0LmNhbmNlbGFibGUgJiYgdC5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLmRyYWdTdGFydGVkIHx8ICh0aGlzLmRyYWdTdGFydGVkID0gITAsIG4gJiYgbih0KSk7XG4gICAgICBjb25zdCB7IGV2RGF0YTogdyB9ID0gdGhpcztcbiAgICAgIHcuY2xpZW50WCA9IHQuY2xpZW50WCwgdy5jbGllbnRZID0gdC5jbGllbnRZO1xuICAgICAgbGV0IGg7XG4gICAgICB3LmlzUmVzaXplID8gaCA9IHRoaXMucmVzaXplQ3JvcCgpIDogaCA9IHRoaXMuZHJhZ0Nyb3AoKSwgUChlLCBoKSB8fCBpKFxuICAgICAgICB5KGgsIGEud2lkdGgsIGEuaGVpZ2h0KSxcbiAgICAgICAgRChoLCBhLndpZHRoLCBhLmhlaWdodClcbiAgICAgICk7XG4gICAgfSwgdGhpcy5vbkNvbXBvbmVudEtleURvd24gPSAodCkgPT4ge1xuICAgICAgY29uc3QgeyBjcm9wOiBlLCBkaXNhYmxlZDogbywgb25DaGFuZ2U6IGksIG9uQ29tcGxldGU6IG4gfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAobylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgYSA9IHQua2V5O1xuICAgICAgbGV0IHcgPSAhMTtcbiAgICAgIGlmICghZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgaCA9IHRoaXMuZ2V0Qm94KCksIHIgPSB0aGlzLm1ha2VQaXhlbENyb3AoaCksIGQgPSAobmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gdC5tZXRhS2V5IDogdC5jdHJsS2V5KSA/IG0ubnVkZ2VTdGVwTGFyZ2UgOiB0LnNoaWZ0S2V5ID8gbS5udWRnZVN0ZXBNZWRpdW0gOiBtLm51ZGdlU3RlcDtcbiAgICAgIGlmIChhID09PSBcIkFycm93TGVmdFwiID8gKHIueCAtPSBkLCB3ID0gITApIDogYSA9PT0gXCJBcnJvd1JpZ2h0XCIgPyAoci54ICs9IGQsIHcgPSAhMCkgOiBhID09PSBcIkFycm93VXBcIiA/IChyLnkgLT0gZCwgdyA9ICEwKSA6IGEgPT09IFwiQXJyb3dEb3duXCIgJiYgKHIueSArPSBkLCB3ID0gITApLCB3KSB7XG4gICAgICAgIHQuY2FuY2VsYWJsZSAmJiB0LnByZXZlbnREZWZhdWx0KCksIHIueCA9IGYoci54LCAwLCBoLndpZHRoIC0gci53aWR0aCksIHIueSA9IGYoci55LCAwLCBoLmhlaWdodCAtIHIuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgcCA9IHkociwgaC53aWR0aCwgaC5oZWlnaHQpLCBsID0gRChyLCBoLndpZHRoLCBoLmhlaWdodCk7XG4gICAgICAgIGkocCwgbCksIG4gJiYgbihwLCBsKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLm9uSGFuZGxlcktleURvd24gPSAodCwgZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhc3BlY3Q6IG8gPSAwLFxuICAgICAgICBjcm9wOiBpLFxuICAgICAgICBkaXNhYmxlZDogbixcbiAgICAgICAgbWluV2lkdGg6IGEgPSAwLFxuICAgICAgICBtaW5IZWlnaHQ6IHcgPSAwLFxuICAgICAgICBtYXhXaWR0aDogaCxcbiAgICAgICAgbWF4SGVpZ2h0OiByLFxuICAgICAgICBvbkNoYW5nZTogYyxcbiAgICAgICAgb25Db21wbGV0ZTogZFxuICAgICAgfSA9IHRoaXMucHJvcHMsIHAgPSB0aGlzLmdldEJveCgpO1xuICAgICAgaWYgKG4gfHwgIWkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICh0LmtleSA9PT0gXCJBcnJvd1VwXCIgfHwgdC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgdC5rZXkgPT09IFwiQXJyb3dMZWZ0XCIgfHwgdC5rZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICB0LnN0b3BQcm9wYWdhdGlvbigpLCB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHUgPSAobmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gdC5tZXRhS2V5IDogdC5jdHJsS2V5KSA/IG0ubnVkZ2VTdGVwTGFyZ2UgOiB0LnNoaWZ0S2V5ID8gbS5udWRnZVN0ZXBNZWRpdW0gOiBtLm51ZGdlU3RlcCwgQyA9IHkoaSwgcC53aWR0aCwgcC5oZWlnaHQpLCBSID0gSyhDLCB0LmtleSwgdSwgZSksIHggPSBYKFxuICAgICAgICBSLFxuICAgICAgICBvLFxuICAgICAgICBlLFxuICAgICAgICBwLndpZHRoLFxuICAgICAgICBwLmhlaWdodCxcbiAgICAgICAgYSxcbiAgICAgICAgdyxcbiAgICAgICAgaCxcbiAgICAgICAgclxuICAgICAgKTtcbiAgICAgIGlmICghUChpLCB4KSkge1xuICAgICAgICBjb25zdCBZID0gRCh4LCBwLndpZHRoLCBwLmhlaWdodCk7XG4gICAgICAgIGMoeCwgWSksIGQgJiYgZCh4LCBZKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLm9uRG9jUG9pbnRlckRvbmUgPSAodCkgPT4ge1xuICAgICAgY29uc3QgeyBjcm9wOiBlLCBkaXNhYmxlZDogbywgb25Db21wbGV0ZTogaSwgb25EcmFnRW5kOiBuIH0gPSB0aGlzLnByb3BzLCBhID0gdGhpcy5nZXRCb3goKTtcbiAgICAgIHRoaXMudW5iaW5kRG9jTW92ZSgpLCAhKG8gfHwgIWUpICYmIHRoaXMubW91c2VEb3duT25Dcm9wICYmICh0aGlzLm1vdXNlRG93bk9uQ3JvcCA9ICExLCB0aGlzLmRyYWdTdGFydGVkID0gITEsIG4gJiYgbih0KSwgaSAmJiBpKHkoZSwgYS53aWR0aCwgYS5oZWlnaHQpLCBEKGUsIGEud2lkdGgsIGEuaGVpZ2h0KSksIHRoaXMuc2V0U3RhdGUoeyBjcm9wSXNBY3RpdmU6ICExLCBuZXdDcm9wSXNCZWluZ0RyYXduOiAhMSB9KSk7XG4gICAgfSwgdGhpcy5vbkRyYWdGb2N1cyA9ICh0KSA9PiB7XG4gICAgICB2YXIgZTtcbiAgICAgIChlID0gdGhpcy5jb21wb25lbnRSZWYuY3VycmVudCkgPT0gbnVsbCB8fCBlLnNjcm9sbFRvKDAsIDApO1xuICAgIH07XG4gIH1cbiAgZ2V0IGRvY3VtZW50KCkge1xuICAgIHJldHVybiBkb2N1bWVudDtcbiAgfVxuICAvLyBXZSB1bmZvcnR1bmF0ZWx5IGdldCB0aGUgYm91bmRpbmcgYm94IGV2ZXJ5IHRpbWUgYXMgeCt5IGNoYW5nZXNcbiAgLy8gZHVlIHRvIHNjcm9sbGluZy5cbiAgZ2V0Qm94KCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLm1lZGlhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCF0KVxuICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IHsgeDogZSwgeTogbywgd2lkdGg6IGksIGhlaWdodDogbiB9ID0gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4geyB4OiBlLCB5OiBvLCB3aWR0aDogaSwgaGVpZ2h0OiBuIH07XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHQpIHtcbiAgICBjb25zdCB7IGNyb3A6IGUsIG9uQ29tcGxldGU6IG8gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG8gJiYgIXQuY3JvcCAmJiBlKSB7XG4gICAgICBjb25zdCB7IHdpZHRoOiBpLCBoZWlnaHQ6IG4gfSA9IHRoaXMuZ2V0Qm94KCk7XG4gICAgICBpICYmIG4gJiYgbyh5KGUsIGksIG4pLCBEKGUsIGksIG4pKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfVxuICBiaW5kRG9jTW92ZSgpIHtcbiAgICB0aGlzLmRvY01vdmVCb3VuZCB8fCAodGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5vbkRvY1BvaW50ZXJNb3ZlLCBiKSwgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMub25Eb2NQb2ludGVyRG9uZSwgYiksIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJjYW5jZWxcIiwgdGhpcy5vbkRvY1BvaW50ZXJEb25lLCBiKSwgdGhpcy5kb2NNb3ZlQm91bmQgPSAhMCk7XG4gIH1cbiAgdW5iaW5kRG9jTW92ZSgpIHtcbiAgICB0aGlzLmRvY01vdmVCb3VuZCAmJiAodGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5vbkRvY1BvaW50ZXJNb3ZlLCBiKSwgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMub25Eb2NQb2ludGVyRG9uZSwgYiksIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJjYW5jZWxcIiwgdGhpcy5vbkRvY1BvaW50ZXJEb25lLCBiKSwgdGhpcy5kb2NNb3ZlQm91bmQgPSAhMSk7XG4gIH1cbiAgZ2V0Q3JvcFN0eWxlKCkge1xuICAgIGNvbnN0IHsgY3JvcDogdCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAodClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogYCR7dC55fSR7dC51bml0fWAsXG4gICAgICAgIGxlZnQ6IGAke3QueH0ke3QudW5pdH1gLFxuICAgICAgICB3aWR0aDogYCR7dC53aWR0aH0ke3QudW5pdH1gLFxuICAgICAgICBoZWlnaHQ6IGAke3QuaGVpZ2h0fSR7dC51bml0fWBcbiAgICAgIH07XG4gIH1cbiAgZHJhZ0Nyb3AoKSB7XG4gICAgY29uc3QgeyBldkRhdGE6IHQgfSA9IHRoaXMsIGUgPSB0aGlzLmdldEJveCgpLCBvID0gdGhpcy5tYWtlUGl4ZWxDcm9wKGUpLCBpID0gdC5jbGllbnRYIC0gdC5zdGFydENsaWVudFgsIG4gPSB0LmNsaWVudFkgLSB0LnN0YXJ0Q2xpZW50WTtcbiAgICByZXR1cm4gby54ID0gZih0LnN0YXJ0Q3JvcFggKyBpLCAwLCBlLndpZHRoIC0gby53aWR0aCksIG8ueSA9IGYodC5zdGFydENyb3BZICsgbiwgMCwgZS5oZWlnaHQgLSBvLmhlaWdodCksIG87XG4gIH1cbiAgZ2V0UG9pbnRSZWdpb24odCwgZSwgbywgaSkge1xuICAgIGNvbnN0IHsgZXZEYXRhOiBuIH0gPSB0aGlzLCBhID0gbi5jbGllbnRYIC0gdC54LCB3ID0gbi5jbGllbnRZIC0gdC55O1xuICAgIGxldCBoO1xuICAgIGkgJiYgZSA/IGggPSBlID09PSBcIm53XCIgfHwgZSA9PT0gXCJuXCIgfHwgZSA9PT0gXCJuZVwiIDogaCA9IHcgPCBuLnN0YXJ0Q3JvcFk7XG4gICAgbGV0IHI7XG4gICAgcmV0dXJuIG8gJiYgZSA/IHIgPSBlID09PSBcIm53XCIgfHwgZSA9PT0gXCJ3XCIgfHwgZSA9PT0gXCJzd1wiIDogciA9IGEgPCBuLnN0YXJ0Q3JvcFgsIHIgPyBoID8gXCJud1wiIDogXCJzd1wiIDogaCA/IFwibmVcIiA6IFwic2VcIjtcbiAgfVxuICByZXNvbHZlTWluRGltZW5zaW9ucyh0LCBlLCBvID0gMCwgaSA9IDApIHtcbiAgICBsZXQgbiA9IE1hdGgubWluKG8sIHQud2lkdGgpLCBhID0gTWF0aC5taW4oaSwgdC5oZWlnaHQpO1xuICAgIHJldHVybiAhZSB8fCAhbiAmJiAhYSA/IFtuLCBhXSA6IGUgPiAxID8gbiA/IFtuLCBuIC8gZV0gOiBbYSAqIGUsIGFdIDogYSA/IFthICogZSwgYV0gOiBbbiwgbiAvIGVdO1xuICB9XG4gIHJlc2l6ZUNyb3AoKSB7XG4gICAgY29uc3QgeyBldkRhdGE6IHQgfSA9IHRoaXMsIHsgYXNwZWN0OiBlID0gMCwgbWF4V2lkdGg6IG8sIG1heEhlaWdodDogaSB9ID0gdGhpcy5wcm9wcywgbiA9IHRoaXMuZ2V0Qm94KCksIFthLCB3XSA9IHRoaXMucmVzb2x2ZU1pbkRpbWVuc2lvbnMobiwgZSwgdGhpcy5wcm9wcy5taW5XaWR0aCwgdGhpcy5wcm9wcy5taW5IZWlnaHQpO1xuICAgIGxldCBoID0gdGhpcy5tYWtlUGl4ZWxDcm9wKG4pLCByID0gdGhpcy5nZXRQb2ludFJlZ2lvbihuLCB0Lm9yZCwgYSwgdyk7XG4gICAgY29uc3QgYyA9IHQub3JkIHx8IHI7XG4gICAgbGV0IGQgPSB0LmNsaWVudFggLSB0LnN0YXJ0Q2xpZW50WCwgcCA9IHQuY2xpZW50WSAtIHQuc3RhcnRDbGllbnRZO1xuICAgIChhICYmIGMgPT09IFwibndcIiB8fCBjID09PSBcIndcIiB8fCBjID09PSBcInN3XCIpICYmIChkID0gTWF0aC5taW4oZCwgLWEpKSwgKHcgJiYgYyA9PT0gXCJud1wiIHx8IGMgPT09IFwiblwiIHx8IGMgPT09IFwibmVcIikgJiYgKHAgPSBNYXRoLm1pbihwLCAtdykpO1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICB1bml0OiBcInB4XCIsXG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICByID09PSBcIm5lXCIgPyAobC54ID0gdC5zdGFydENyb3BYLCBsLndpZHRoID0gZCwgZSA/IChsLmhlaWdodCA9IGwud2lkdGggLyBlLCBsLnkgPSB0LnN0YXJ0Q3JvcFkgLSBsLmhlaWdodCkgOiAobC5oZWlnaHQgPSBNYXRoLmFicyhwKSwgbC55ID0gdC5zdGFydENyb3BZIC0gbC5oZWlnaHQpKSA6IHIgPT09IFwic2VcIiA/IChsLnggPSB0LnN0YXJ0Q3JvcFgsIGwueSA9IHQuc3RhcnRDcm9wWSwgbC53aWR0aCA9IGQsIGUgPyBsLmhlaWdodCA9IGwud2lkdGggLyBlIDogbC5oZWlnaHQgPSBwKSA6IHIgPT09IFwic3dcIiA/IChsLnggPSB0LnN0YXJ0Q3JvcFggKyBkLCBsLnkgPSB0LnN0YXJ0Q3JvcFksIGwud2lkdGggPSBNYXRoLmFicyhkKSwgZSA/IGwuaGVpZ2h0ID0gbC53aWR0aCAvIGUgOiBsLmhlaWdodCA9IHApIDogciA9PT0gXCJud1wiICYmIChsLnggPSB0LnN0YXJ0Q3JvcFggKyBkLCBsLndpZHRoID0gTWF0aC5hYnMoZCksIGUgPyAobC5oZWlnaHQgPSBsLndpZHRoIC8gZSwgbC55ID0gdC5zdGFydENyb3BZIC0gbC5oZWlnaHQpIDogKGwuaGVpZ2h0ID0gTWF0aC5hYnMocCksIGwueSA9IHQuc3RhcnRDcm9wWSArIHApKTtcbiAgICBjb25zdCB1ID0gWChcbiAgICAgIGwsXG4gICAgICBlLFxuICAgICAgcixcbiAgICAgIG4ud2lkdGgsXG4gICAgICBuLmhlaWdodCxcbiAgICAgIGEsXG4gICAgICB3LFxuICAgICAgbyxcbiAgICAgIGlcbiAgICApO1xuICAgIHJldHVybiBlIHx8IG0ueHlPcmRzLmluZGV4T2YoYykgPiAtMSA/IGggPSB1IDogbS54T3Jkcy5pbmRleE9mKGMpID4gLTEgPyAoaC54ID0gdS54LCBoLndpZHRoID0gdS53aWR0aCkgOiBtLnlPcmRzLmluZGV4T2YoYykgPiAtMSAmJiAoaC55ID0gdS55LCBoLmhlaWdodCA9IHUuaGVpZ2h0KSwgaC54ID0gZihoLngsIDAsIG4ud2lkdGggLSBoLndpZHRoKSwgaC55ID0gZihoLnksIDAsIG4uaGVpZ2h0IC0gaC5oZWlnaHQpLCBoO1xuICB9XG4gIGNyZWF0ZUNyb3BTZWxlY3Rpb24oKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXJpYUxhYmVsczogdCA9IG0uZGVmYXVsdFByb3BzLmFyaWFMYWJlbHMsXG4gICAgICBkaXNhYmxlZDogZSxcbiAgICAgIGxvY2tlZDogbyxcbiAgICAgIHJlbmRlclNlbGVjdGlvbkFkZG9uOiBpLFxuICAgICAgcnVsZU9mVGhpcmRzOiBuLFxuICAgICAgY3JvcDogYVxuICAgIH0gPSB0aGlzLnByb3BzLCB3ID0gdGhpcy5nZXRDcm9wU3R5bGUoKTtcbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gZy5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHcsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcIlJlYWN0Q3JvcF9fY3JvcC1zZWxlY3Rpb25cIixcbiAgICAgICAgICBvblBvaW50ZXJEb3duOiB0aGlzLm9uQ3JvcFBvaW50ZXJEb3duLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0LmNyb3BBcmVhLFxuICAgICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbkNvbXBvbmVudEtleURvd24sXG4gICAgICAgICAgcm9sZTogXCJncm91cFwiXG4gICAgICAgIH0sXG4gICAgICAgICFlICYmICFvICYmIC8qIEBfX1BVUkVfXyAqLyBnLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiUmVhY3RDcm9wX19kcmFnLWVsZW1lbnRzXCIsIG9uRm9jdXM6IHRoaXMub25EcmFnRm9jdXMgfSwgLyogQF9fUFVSRV9fICovIGcuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJSZWFjdENyb3BfX2RyYWctYmFyIG9yZC1uXCIsIFwiZGF0YS1vcmRcIjogXCJuXCIgfSksIC8qIEBfX1BVUkVfXyAqLyBnLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiUmVhY3RDcm9wX19kcmFnLWJhciBvcmQtZVwiLCBcImRhdGEtb3JkXCI6IFwiZVwiIH0pLCAvKiBAX19QVVJFX18gKi8gZy5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIlJlYWN0Q3JvcF9fZHJhZy1iYXIgb3JkLXNcIiwgXCJkYXRhLW9yZFwiOiBcInNcIiB9KSwgLyogQF9fUFVSRV9fICovIGcuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJSZWFjdENyb3BfX2RyYWctYmFyIG9yZC13XCIsIFwiZGF0YS1vcmRcIjogXCJ3XCIgfSksIC8qIEBfX1BVUkVfXyAqLyBnLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiUmVhY3RDcm9wX19kcmFnLWhhbmRsZSBvcmQtbndcIixcbiAgICAgICAgICAgIFwiZGF0YS1vcmRcIjogXCJud1wiLFxuICAgICAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdC5ud0RyYWdIYW5kbGUsXG4gICAgICAgICAgICBvbktleURvd246IChoKSA9PiB0aGlzLm9uSGFuZGxlcktleURvd24oaCwgXCJud1wiKSxcbiAgICAgICAgICAgIHJvbGU6IFwiYnV0dG9uXCJcbiAgICAgICAgICB9XG4gICAgICAgICksIC8qIEBfX1BVUkVfXyAqLyBnLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiUmVhY3RDcm9wX19kcmFnLWhhbmRsZSBvcmQtblwiLFxuICAgICAgICAgICAgXCJkYXRhLW9yZFwiOiBcIm5cIixcbiAgICAgICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHQubkRyYWdIYW5kbGUsXG4gICAgICAgICAgICBvbktleURvd246IChoKSA9PiB0aGlzLm9uSGFuZGxlcktleURvd24oaCwgXCJuXCIpLFxuICAgICAgICAgICAgcm9sZTogXCJidXR0b25cIlxuICAgICAgICAgIH1cbiAgICAgICAgKSwgLyogQF9fUFVSRV9fICovIGcuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZWFjdENyb3BfX2RyYWctaGFuZGxlIG9yZC1uZVwiLFxuICAgICAgICAgICAgXCJkYXRhLW9yZFwiOiBcIm5lXCIsXG4gICAgICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0Lm5lRHJhZ0hhbmRsZSxcbiAgICAgICAgICAgIG9uS2V5RG93bjogKGgpID0+IHRoaXMub25IYW5kbGVyS2V5RG93bihoLCBcIm5lXCIpLFxuICAgICAgICAgICAgcm9sZTogXCJidXR0b25cIlxuICAgICAgICAgIH1cbiAgICAgICAgKSwgLyogQF9fUFVSRV9fICovIGcuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSZWFjdENyb3BfX2RyYWctaGFuZGxlIG9yZC1lXCIsXG4gICAgICAgICAgICBcImRhdGEtb3JkXCI6IFwiZVwiLFxuICAgICAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdC5lRHJhZ0hhbmRsZSxcbiAgICAgICAgICAgIG9uS2V5RG93bjogKGgpID0+IHRoaXMub25IYW5kbGVyS2V5RG93bihoLCBcImVcIiksXG4gICAgICAgICAgICByb2xlOiBcImJ1dHRvblwiXG4gICAgICAgICAgfVxuICAgICAgICApLCAvKiBAX19QVVJFX18gKi8gZy5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJlYWN0Q3JvcF9fZHJhZy1oYW5kbGUgb3JkLXNlXCIsXG4gICAgICAgICAgICBcImRhdGEtb3JkXCI6IFwic2VcIixcbiAgICAgICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHQuc2VEcmFnSGFuZGxlLFxuICAgICAgICAgICAgb25LZXlEb3duOiAoaCkgPT4gdGhpcy5vbkhhbmRsZXJLZXlEb3duKGgsIFwic2VcIiksXG4gICAgICAgICAgICByb2xlOiBcImJ1dHRvblwiXG4gICAgICAgICAgfVxuICAgICAgICApLCAvKiBAX19QVVJFX18gKi8gZy5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJlYWN0Q3JvcF9fZHJhZy1oYW5kbGUgb3JkLXNcIixcbiAgICAgICAgICAgIFwiZGF0YS1vcmRcIjogXCJzXCIsXG4gICAgICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0LnNEcmFnSGFuZGxlLFxuICAgICAgICAgICAgb25LZXlEb3duOiAoaCkgPT4gdGhpcy5vbkhhbmRsZXJLZXlEb3duKGgsIFwic1wiKSxcbiAgICAgICAgICAgIHJvbGU6IFwiYnV0dG9uXCJcbiAgICAgICAgICB9XG4gICAgICAgICksIC8qIEBfX1BVUkVfXyAqLyBnLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiUmVhY3RDcm9wX19kcmFnLWhhbmRsZSBvcmQtc3dcIixcbiAgICAgICAgICAgIFwiZGF0YS1vcmRcIjogXCJzd1wiLFxuICAgICAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdC5zd0RyYWdIYW5kbGUsXG4gICAgICAgICAgICBvbktleURvd246IChoKSA9PiB0aGlzLm9uSGFuZGxlcktleURvd24oaCwgXCJzd1wiKSxcbiAgICAgICAgICAgIHJvbGU6IFwiYnV0dG9uXCJcbiAgICAgICAgICB9XG4gICAgICAgICksIC8qIEBfX1BVUkVfXyAqLyBnLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiUmVhY3RDcm9wX19kcmFnLWhhbmRsZSBvcmQtd1wiLFxuICAgICAgICAgICAgXCJkYXRhLW9yZFwiOiBcIndcIixcbiAgICAgICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHQud0RyYWdIYW5kbGUsXG4gICAgICAgICAgICBvbktleURvd246IChoKSA9PiB0aGlzLm9uSGFuZGxlcktleURvd24oaCwgXCJ3XCIpLFxuICAgICAgICAgICAgcm9sZTogXCJidXR0b25cIlxuICAgICAgICAgIH1cbiAgICAgICAgKSksXG4gICAgICAgIGkgJiYgLyogQF9fUFVSRV9fICovIGcuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJSZWFjdENyb3BfX3NlbGVjdGlvbi1hZGRvblwiLCBvbk1vdXNlRG93bjogKGgpID0+IGguc3RvcFByb3BhZ2F0aW9uKCkgfSwgaSh0aGlzLnN0YXRlKSksXG4gICAgICAgIG4gJiYgLyogQF9fUFVSRV9fICovIGcuY3JlYXRlRWxlbWVudChnLkZyYWdtZW50LCBudWxsLCAvKiBAX19QVVJFX18gKi8gZy5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIlJlYWN0Q3JvcF9fcnVsZS1vZi10aGlyZHMtaHpcIiB9KSwgLyogQF9fUFVSRV9fICovIGcuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJSZWFjdENyb3BfX3J1bGUtb2YtdGhpcmRzLXZ0XCIgfSkpXG4gICAgICApO1xuICB9XG4gIG1ha2VQaXhlbENyb3AodCkge1xuICAgIGNvbnN0IGUgPSB7IC4uLk0sIC4uLnRoaXMucHJvcHMuY3JvcCB8fCB7fSB9O1xuICAgIHJldHVybiB5KGUsIHQud2lkdGgsIHQuaGVpZ2h0KTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBhc3BlY3Q6IHQsIGNoaWxkcmVuOiBlLCBjaXJjdWxhckNyb3A6IG8sIGNsYXNzTmFtZTogaSwgY3JvcDogbiwgZGlzYWJsZWQ6IGEsIGxvY2tlZDogdywgc3R5bGU6IGgsIHJ1bGVPZlRoaXJkczogciB9ID0gdGhpcy5wcm9wcywgeyBjcm9wSXNBY3RpdmU6IGMsIG5ld0Nyb3BJc0JlaW5nRHJhd246IGQgfSA9IHRoaXMuc3RhdGUsIHAgPSBuID8gdGhpcy5jcmVhdGVDcm9wU2VsZWN0aW9uKCkgOiBudWxsLCBsID0gUyhcbiAgICAgIFwiUmVhY3RDcm9wXCIsXG4gICAgICBpLFxuICAgICAgYyAmJiBcIlJlYWN0Q3JvcC0tYWN0aXZlXCIsXG4gICAgICBhICYmIFwiUmVhY3RDcm9wLS1kaXNhYmxlZFwiLFxuICAgICAgdyAmJiBcIlJlYWN0Q3JvcC0tbG9ja2VkXCIsXG4gICAgICBkICYmIFwiUmVhY3RDcm9wLS1uZXctY3JvcFwiLFxuICAgICAgbiAmJiB0ICYmIFwiUmVhY3RDcm9wLS1maXhlZC1hc3BlY3RcIixcbiAgICAgIG4gJiYgbyAmJiBcIlJlYWN0Q3JvcC0tY2lyY3VsYXItY3JvcFwiLFxuICAgICAgbiAmJiByICYmIFwiUmVhY3RDcm9wLS1ydWxlLW9mLXRoaXJkc1wiLFxuICAgICAgIXRoaXMuZHJhZ1N0YXJ0ZWQgJiYgbiAmJiAhbi53aWR0aCAmJiAhbi5oZWlnaHQgJiYgXCJSZWFjdENyb3AtLWludmlzaWJsZS1jcm9wXCIsXG4gICAgICBvICYmIFwiUmVhY3RDcm9wLS1uby1hbmltYXRlXCJcbiAgICApO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gZy5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiB0aGlzLmNvbXBvbmVudFJlZiwgY2xhc3NOYW1lOiBsLCBzdHlsZTogaCB9LCAvKiBAX19QVVJFX18gKi8gZy5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiB0aGlzLm1lZGlhUmVmLCBjbGFzc05hbWU6IFwiUmVhY3RDcm9wX19jaGlsZC13cmFwcGVyXCIsIG9uUG9pbnRlckRvd246IHRoaXMub25Db21wb25lbnRQb2ludGVyRG93biB9LCBlKSwgcCk7XG4gIH1cbn07XG52LnhPcmRzID0gW1wiZVwiLCBcIndcIl07XG52LnlPcmRzID0gW1wiblwiLCBcInNcIl07XG52Lnh5T3JkcyA9IFtcIm53XCIsIFwibmVcIiwgXCJzZVwiLCBcInN3XCJdO1xudi5udWRnZVN0ZXAgPSAxO1xudi5udWRnZVN0ZXBNZWRpdW0gPSAxMDtcbnYubnVkZ2VTdGVwTGFyZ2UgPSAxMDA7XG52LmRlZmF1bHRQcm9wcyA9IHtcbiAgYXJpYUxhYmVsczoge1xuICAgIGNyb3BBcmVhOiBcIlVzZSB0aGUgYXJyb3cga2V5cyB0byBtb3ZlIHRoZSBjcm9wIHNlbGVjdGlvbiBhcmVhXCIsXG4gICAgbndEcmFnSGFuZGxlOiBcIlVzZSB0aGUgYXJyb3cga2V5cyB0byBtb3ZlIHRoZSBub3J0aCB3ZXN0IGRyYWcgaGFuZGxlIHRvIGNoYW5nZSB0aGUgY3JvcCBzZWxlY3Rpb24gYXJlYVwiLFxuICAgIG5EcmFnSGFuZGxlOiBcIlVzZSB0aGUgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBtb3ZlIHRoZSBub3J0aCBkcmFnIGhhbmRsZSB0byBjaGFuZ2UgdGhlIGNyb3Agc2VsZWN0aW9uIGFyZWFcIixcbiAgICBuZURyYWdIYW5kbGU6IFwiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIG5vcnRoIGVhc3QgZHJhZyBoYW5kbGUgdG8gY2hhbmdlIHRoZSBjcm9wIHNlbGVjdGlvbiBhcmVhXCIsXG4gICAgZURyYWdIYW5kbGU6IFwiVXNlIHRoZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIGVhc3QgZHJhZyBoYW5kbGUgdG8gY2hhbmdlIHRoZSBjcm9wIHNlbGVjdGlvbiBhcmVhXCIsXG4gICAgc2VEcmFnSGFuZGxlOiBcIlVzZSB0aGUgYXJyb3cga2V5cyB0byBtb3ZlIHRoZSBzb3V0aCBlYXN0IGRyYWcgaGFuZGxlIHRvIGNoYW5nZSB0aGUgY3JvcCBzZWxlY3Rpb24gYXJlYVwiLFxuICAgIHNEcmFnSGFuZGxlOiBcIlVzZSB0aGUgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBtb3ZlIHRoZSBzb3V0aCBkcmFnIGhhbmRsZSB0byBjaGFuZ2UgdGhlIGNyb3Agc2VsZWN0aW9uIGFyZWFcIixcbiAgICBzd0RyYWdIYW5kbGU6IFwiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIHNvdXRoIHdlc3QgZHJhZyBoYW5kbGUgdG8gY2hhbmdlIHRoZSBjcm9wIHNlbGVjdGlvbiBhcmVhXCIsXG4gICAgd0RyYWdIYW5kbGU6IFwiVXNlIHRoZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIHdlc3QgZHJhZyBoYW5kbGUgdG8gY2hhbmdlIHRoZSBjcm9wIHNlbGVjdGlvbiBhcmVhXCJcbiAgfVxufTtcbmxldCBJID0gdjtcbmV4cG9ydCB7XG4gIEkgYXMgQ29tcG9uZW50LFxuICBJIGFzIFJlYWN0Q3JvcCxcbiAgUCBhcyBhcmVDcm9wc0VxdWFsLFxuICBOIGFzIGNlbnRlckNyb3AsXG4gIGYgYXMgY2xhbXAsXG4gIFMgYXMgY2xzLFxuICBYIGFzIGNvbnRhaW5Dcm9wLFxuICBEIGFzIGNvbnZlcnRUb1BlcmNlbnRDcm9wLFxuICB5IGFzIGNvbnZlcnRUb1BpeGVsQ3JvcCxcbiAgSSBhcyBkZWZhdWx0LFxuICBNIGFzIGRlZmF1bHRDcm9wLFxuICBIIGFzIG1ha2VBc3BlY3RDcm9wLFxuICBLIGFzIG51ZGdlQ3JvcFxufTtcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBEYXRhLCBGaWxlU2l6ZXMsIFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IERyYWdnYWJsZUZpbGVEZXRhaWxzIH0gZnJvbSAnLi9EcmFnZ2FibGVGaWxlRGV0YWlscy9pbmRleC5qcydcbmltcG9ydCB7IFN0YXRpY0ZpbGVEZXRhaWxzIH0gZnJvbSAnLi9TdGF0aWNGaWxlRGV0YWlscy9pbmRleC5qcydcblxudHlwZSBTaGFyZWRGaWxlRGV0YWlsc1Byb3BzID0ge1xuICBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gIGN1c3RvbVVwbG9hZEFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGVbXVxuICBkb2M6IHtcbiAgICBzaXplcz86IEZpbGVTaXplc1xuICB9ICYgRGF0YVxuICBlbmFibGVBZGp1c3RtZW50cz86IGJvb2xlYW5cbiAgaGFzSW1hZ2VTaXplcz86IGJvb2xlYW5cbiAgaGlkZVJlbW92ZUZpbGU/OiBib29sZWFuXG4gIGltYWdlQ2FjaGVUYWc/OiBzdHJpbmdcbiAgdXBsb2FkQ29uZmlnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWyd1cGxvYWQnXVxufVxuXG50eXBlIFN0YXRpY0ZpbGVEZXRhaWxzUHJvcHMgPSB7XG4gIGRyYWdnYWJsZUl0ZW1Qcm9wcz86IG5ldmVyXG4gIGhhbmRsZVJlbW92ZT86ICgpID0+IHZvaWRcbiAgaGFzTWFueT86IG5ldmVyXG4gIGlzU29ydGFibGU/OiBuZXZlclxuICByZW1vdmVJdGVtPzogbmV2ZXJcbiAgcm93SW5kZXg/OiBuZXZlclxufVxuXG50eXBlIERyYWdnYWJsZUZpbGVEZXRhaWxzUHJvcHMgPSB7XG4gIGhhbmRsZVJlbW92ZT86IG5ldmVyXG4gIGhhc01hbnk6IGJvb2xlYW5cbiAgaXNTb3J0YWJsZT86IGJvb2xlYW5cbiAgcmVtb3ZlSXRlbT86IChpbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gIHJvd0luZGV4OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgRmlsZURldGFpbHNQcm9wcyA9IChEcmFnZ2FibGVGaWxlRGV0YWlsc1Byb3BzIHwgU3RhdGljRmlsZURldGFpbHNQcm9wcykgJlxuICBTaGFyZWRGaWxlRGV0YWlsc1Byb3BzXG5cbmV4cG9ydCBjb25zdCBGaWxlRGV0YWlsczogUmVhY3QuRkM8RmlsZURldGFpbHNQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBoYXNNYW55IH0gPSBwcm9wc1xuXG4gIGlmIChoYXNNYW55KSB7XG4gICAgcmV0dXJuIDxEcmFnZ2FibGVGaWxlRGV0YWlscyB7Li4ucHJvcHN9IC8+XG4gIH1cblxuICByZXR1cm4gPFN0YXRpY0ZpbGVEZXRhaWxzIHsuLi5wcm9wc30gLz5cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBUaHVtYm5haWwgfSBmcm9tICcuLi8uLi9UaHVtYm5haWwvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZpbGUtZGV0YWlscy1kcmFnZ2FibGUnXG5cbmltcG9ydCB0eXBlIHsgRGF0YSwgRmlsZVNpemVzLCBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgRHJhZ2dhYmxlU29ydGFibGVJdGVtIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvRHJhZ2dhYmxlU29ydGFibGUvRHJhZ2dhYmxlU29ydGFibGVJdGVtL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhZ0hhbmRsZUljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9EcmFnSGFuZGxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgRWRpdEljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9FZGl0L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnREcmF3ZXIgfSBmcm9tICcuLi8uLi9Eb2N1bWVudERyYXdlci9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgRHJhZ2dhYmxlRmlsZURldGFpbHNQcm9wcyA9IHtcbiAgY29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICBjdXN0b21VcGxvYWRBY3Rpb25zPzogUmVhY3QuUmVhY3ROb2RlW11cbiAgZG9jOiB7XG4gICAgc2l6ZXM/OiBGaWxlU2l6ZXNcbiAgfSAmIERhdGFcbiAgZW5hYmxlQWRqdXN0bWVudHM/OiBib29sZWFuXG4gIGhhc0ltYWdlU2l6ZXM/OiBib29sZWFuXG4gIGhhc01hbnk6IGJvb2xlYW5cbiAgaGlkZVJlbW92ZUZpbGU/OiBib29sZWFuXG4gIGltYWdlQ2FjaGVUYWc/OiBzdHJpbmdcbiAgaXNTb3J0YWJsZT86IGJvb2xlYW5cbiAgcmVtb3ZlSXRlbT86IChpbmRleDogbnVtYmVyKSA9PiB2b2lkXG4gIHJvd0luZGV4OiBudW1iZXJcbiAgdXBsb2FkQ29uZmlnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWyd1cGxvYWQnXVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRmlsZURldGFpbHM6IFJlYWN0LkZDPERyYWdnYWJsZUZpbGVEZXRhaWxzUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBkb2MsXG4gICAgaGlkZVJlbW92ZUZpbGUsXG4gICAgaW1hZ2VDYWNoZVRhZyxcbiAgICBpc1NvcnRhYmxlLFxuICAgIHJlbW92ZUl0ZW0sXG4gICAgcm93SW5kZXgsXG4gICAgdXBsb2FkQ29uZmlnLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGlkLCBmaWxlbmFtZSwgdGh1bWJuYWlsVVJMLCB1cmwgfSA9IGRvY1xuXG4gIGNvbnN0IFtEb2N1bWVudERyYXdlciwgRG9jdW1lbnREcmF3ZXJUb2dnbGVyXSA9IHVzZURvY3VtZW50RHJhd2VyKHtcbiAgICBpZCxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxEcmFnZ2FibGVTb3J0YWJsZUl0ZW0gaWQ9e2lkfSBrZXk9e2lkfT5cbiAgICAgIHsoZHJhZ2dhYmxlU29ydGFibGVJdGVtUHJvcHMpID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgYmFzZUNsYXNzLFxuICAgICAgICAgICAgZHJhZ2dhYmxlU29ydGFibGVJdGVtUHJvcHMgJiYgaXNTb3J0YWJsZSAmJiBgJHtiYXNlQ2xhc3N9LS1oYXMtZHJhZy1oYW5kbGVgLFxuICAgICAgICAgIF1cbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgcmVmPXtkcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wcy5zZXROb2RlUmVmfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IGRyYWdnYWJsZVNvcnRhYmxlSXRlbVByb3BzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGRyYWdnYWJsZVNvcnRhYmxlSXRlbVByb3BzLnRyYW5zaXRpb24sXG4gICAgICAgICAgICB6SW5kZXg6IGRyYWdnYWJsZVNvcnRhYmxlSXRlbVByb3BzLmlzRHJhZ2dpbmcgPyAxIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfS0tZHJhZy13cmFwcGVyYH0+XG4gICAgICAgICAgICB7aXNTb3J0YWJsZSAmJiBkcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wcyAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RyYWdgfVxuICAgICAgICAgICAgICAgIHsuLi5kcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wcy5hdHRyaWJ1dGVzfVxuICAgICAgICAgICAgICAgIHsuLi5kcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wcy5saXN0ZW5lcnN9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RHJhZ0hhbmRsZUljb24gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPFRodW1ibmFpbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RodW1ibmFpbGB9XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgICAgICAgZG9jPXtkb2N9XG4gICAgICAgICAgICAgIGZpbGVTcmM9e3RodW1ibmFpbFVSTCB8fCB1cmx9XG4gICAgICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2ltYWdlQ2FjaGVUYWd9XG4gICAgICAgICAgICAgIHVwbG9hZENvbmZpZz17dXBsb2FkQ29uZmlnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbWFpbi1kZXRhaWxgfT57ZmlsZW5hbWV9PC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PlxuICAgICAgICAgICAgPERvY3VtZW50RHJhd2VyIC8+XG4gICAgICAgICAgICA8RG9jdW1lbnREcmF3ZXJUb2dnbGVyPlxuICAgICAgICAgICAgICA8RWRpdEljb24gLz5cbiAgICAgICAgICAgIDwvRG9jdW1lbnREcmF3ZXJUb2dnbGVyPlxuICAgICAgICAgICAgeyFoaWRlUmVtb3ZlRmlsZSAmJiByZW1vdmVJdGVtICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwiaWNvbi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZW1vdmVgfVxuICAgICAgICAgICAgICAgIGljb249XCJ4XCJcbiAgICAgICAgICAgICAgICBpY29uU3R5bGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByZW1vdmVJdGVtKHJvd0luZGV4KX1cbiAgICAgICAgICAgICAgICByb3VuZFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvRHJhZ2dhYmxlU29ydGFibGVJdGVtPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGh1bWJuYWlsIH0gZnJvbSAnLi4vLi4vVGh1bWJuYWlsL2luZGV4LmpzJ1xuaW1wb3J0IHsgVXBsb2FkQWN0aW9ucyB9IGZyb20gJy4uLy4uL1VwbG9hZC9pbmRleC5qcydcbmltcG9ydCB7IEZpbGVNZXRhIH0gZnJvbSAnLi4vRmlsZU1ldGEvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZpbGUtZGV0YWlscydcblxuaW1wb3J0IHR5cGUgeyBEYXRhLCBGaWxlU2l6ZXMsIFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5leHBvcnQgdHlwZSBTdGF0aWNGaWxlRGV0YWlsc1Byb3BzID0ge1xuICBjdXN0b21VcGxvYWRBY3Rpb25zPzogUmVhY3QuUmVhY3ROb2RlW11cbiAgZG9jOiB7XG4gICAgc2l6ZXM/OiBGaWxlU2l6ZXNcbiAgfSAmIERhdGFcbiAgZW5hYmxlQWRqdXN0bWVudHM/OiBib29sZWFuXG4gIGhhbmRsZVJlbW92ZT86ICgpID0+IHZvaWRcbiAgaGFzSW1hZ2VTaXplcz86IGJvb2xlYW5cbiAgaGlkZVJlbW92ZUZpbGU/OiBib29sZWFuXG4gIGltYWdlQ2FjaGVUYWc/OiBzdHJpbmdcbiAgdXBsb2FkQ29uZmlnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWyd1cGxvYWQnXVxufVxuXG5leHBvcnQgY29uc3QgU3RhdGljRmlsZURldGFpbHM6IFJlYWN0LkZDPFN0YXRpY0ZpbGVEZXRhaWxzUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXN0b21VcGxvYWRBY3Rpb25zLFxuICAgIGRvYyxcbiAgICBlbmFibGVBZGp1c3RtZW50cyxcbiAgICBoYW5kbGVSZW1vdmUsXG4gICAgaGFzSW1hZ2VTaXplcyxcbiAgICBoaWRlUmVtb3ZlRmlsZSxcbiAgICBpbWFnZUNhY2hlVGFnLFxuICAgIHVwbG9hZENvbmZpZyxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBmaWxlbmFtZSwgZmlsZXNpemUsIGhlaWdodCwgbWltZVR5cGUsIHRodW1ibmFpbFVSTCwgdXJsLCB3aWR0aCB9ID0gZG9jXG5cbiAgY29uc3QgcHJldmlld0FsbG93ZWQgPSB1cGxvYWRDb25maWcuZGlzcGxheVByZXZpZXcgPz8gdHJ1ZVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICA8aGVhZGVyPlxuICAgICAgICB7cHJldmlld0FsbG93ZWQgJiYgKFxuICAgICAgICAgIDxUaHVtYm5haWxcbiAgICAgICAgICAgIC8vIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RodW1ibmFpbGB9XG4gICAgICAgICAgICBkb2M9e2RvY31cbiAgICAgICAgICAgIGZpbGVTcmM9e3RodW1ibmFpbFVSTCB8fCB1cmx9XG4gICAgICAgICAgICBpbWFnZUNhY2hlVGFnPXtpbWFnZUNhY2hlVGFnfVxuICAgICAgICAgICAgdXBsb2FkQ29uZmlnPXt1cGxvYWRDb25maWd9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX21haW4tZGV0YWlsYH0+XG4gICAgICAgICAgPEZpbGVNZXRhXG4gICAgICAgICAgICBmaWxlbmFtZT17ZmlsZW5hbWUgYXMgc3RyaW5nfVxuICAgICAgICAgICAgZmlsZXNpemU9e2ZpbGVzaXplIGFzIG51bWJlcn1cbiAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0IGFzIG51bWJlcn1cbiAgICAgICAgICAgIG1pbWVUeXBlPXttaW1lVHlwZSBhcyBzdHJpbmd9XG4gICAgICAgICAgICB1cmw9e3VybCBhcyBzdHJpbmd9XG4gICAgICAgICAgICB3aWR0aD17d2lkdGggYXMgbnVtYmVyfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICB7KGVuYWJsZUFkanVzdG1lbnRzIHx8IChoYXNJbWFnZVNpemVzICYmIGRvYy5maWxlbmFtZSkgfHwgY3VzdG9tVXBsb2FkQWN0aW9ucykgJiYgKFxuICAgICAgICAgICAgPFVwbG9hZEFjdGlvbnNcbiAgICAgICAgICAgICAgY3VzdG9tQWN0aW9ucz17Y3VzdG9tVXBsb2FkQWN0aW9uc31cbiAgICAgICAgICAgICAgZW5hYmxlQWRqdXN0bWVudHM9e0Jvb2xlYW4oZW5hYmxlQWRqdXN0bWVudHMpfVxuICAgICAgICAgICAgICBlbmFibGVQcmV2aWV3U2l6ZXM9e2hhc0ltYWdlU2l6ZXMgJiYgZG9jLmZpbGVuYW1lfVxuICAgICAgICAgICAgICBtaW1lVHlwZT17bWltZVR5cGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IWhpZGVSZW1vdmVGaWxlICYmIGhhbmRsZVJlbW92ZSAmJiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJpY29uLWxhYmVsXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVtb3ZlYH1cbiAgICAgICAgICAgIGljb249XCJ4XCJcbiAgICAgICAgICAgIGljb25TdHlsZT1cIndpdGgtYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVJlbW92ZX1cbiAgICAgICAgICAgIHJvdW5kXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvaGVhZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IGZvcm1hdEZpbGVzaXplIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIEZpbGVNZXRhUHJvcHMgPSB7XG4gIGZpbGVuYW1lOiBzdHJpbmdcbiAgZmlsZXNpemU6IG51bWJlclxuICBoZWlnaHQ/OiBudW1iZXJcbiAgbWltZVR5cGU6IHN0cmluZ1xuICBzaXplcz86IHVua25vd25cbiAgdXJsOiBzdHJpbmdcbiAgd2lkdGg/OiBudW1iZXJcbn1cblxuaW1wb3J0IHsgQ29weVRvQ2xpcGJvYXJkIH0gZnJvbSAnLi4vLi4vQ29weVRvQ2xpcGJvYXJkL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdmaWxlLW1ldGEnXG5cbmV4cG9ydCBjb25zdCBGaWxlTWV0YTogUmVhY3QuRkM8RmlsZU1ldGFQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBmaWxlbmFtZSwgZmlsZXNpemUsIGhlaWdodCwgbWltZVR5cGUsIHVybDogZmlsZVVSTCwgd2lkdGggfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X191cmxgfT5cbiAgICAgICAgPGEgaHJlZj17ZmlsZVVSTH0gcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgIHtmaWxlbmFtZX1cbiAgICAgICAgPC9hPlxuICAgICAgICA8Q29weVRvQ2xpcGJvYXJkIGRlZmF1bHRNZXNzYWdlPVwiQ29weSBVUkxcIiB2YWx1ZT17ZmlsZVVSTH0gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NpemUtdHlwZWB9PlxuICAgICAgICB7Zm9ybWF0RmlsZXNpemUoZmlsZXNpemUpfVxuICAgICAgICB7dHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgaGVpZ2h0ID09PSAnbnVtYmVyJyAmJiAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgJm5ic3A7LSZuYnNwO1xuICAgICAgICAgICAge3dpZHRofXh7aGVpZ2h0fVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICAgIHttaW1lVHlwZSAmJiAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgJm5ic3A7LSZuYnNwO1xuICAgICAgICAgICAge21pbWVUeXBlfVxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQ29weUljb24gfSBmcm9tICcuLi8uLi9pY29ucy9Db3B5L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnLi4vVG9vbHRpcC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29weS10by1jbGlwYm9hcmQnXG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICBkZWZhdWx0TWVzc2FnZT86IHN0cmluZ1xuICBzdWNjZXNzTWVzc2FnZT86IHN0cmluZ1xuICB2YWx1ZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgQ29weVRvQ2xpcGJvYXJkOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyBkZWZhdWx0TWVzc2FnZSwgc3VjY2Vzc01lc3NhZ2UsIHZhbHVlIH0pID0+IHtcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgaWYgKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh2YWx1ZSlcbiAgICAgICAgICBzZXRDb3BpZWQodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgc2V0SG92ZXJlZCh0cnVlKVxuICAgICAgICAgIHNldENvcGllZChmYWxzZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiB7XG4gICAgICAgICAgc2V0SG92ZXJlZChmYWxzZSlcbiAgICAgICAgICBzZXRDb3BpZWQoZmFsc2UpXG4gICAgICAgIH19XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgPlxuICAgICAgICA8Q29weUljb24gLz5cbiAgICAgICAgPFRvb2x0aXAgZGVsYXk9e2NvcGllZCA/IDAgOiB1bmRlZmluZWR9IHNob3c9e2hvdmVyZWQgfHwgY29waWVkfT5cbiAgICAgICAgICB7Y29waWVkICYmIChzdWNjZXNzTWVzc2FnZSA/PyB0KCdnZW5lcmFsOmNvcGllZCcpKX1cbiAgICAgICAgICB7IWNvcGllZCAmJiAoZGVmYXVsdE1lc3NhZ2UgPz8gdCgnZ2VuZXJhbDpjb3B5JykpfVxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICA8L2J1dHRvbj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IERhdGEsIEZpbGVTaXplLCBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnLCBTYW5pdGl6ZWRVcGxvYWRDb25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBGaWxlTWV0YSB9IGZyb20gJy4uL0ZpbGVEZXRhaWxzL0ZpbGVNZXRhL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdwcmV2aWV3LXNpemVzJ1xuXG50eXBlIEZpbGVJbmZvID0ge1xuICB1cmw6IHN0cmluZ1xufSAmIEZpbGVTaXplXG50eXBlIEZpbGVzU2l6ZXNXaXRoVXJsID0ge1xuICBba2V5OiBzdHJpbmddOiBGaWxlSW5mb1xufVxuXG5jb25zdCBzb3J0U2l6ZXMgPSAoc2l6ZXM6IEZpbGVzU2l6ZXNXaXRoVXJsLCBpbWFnZVNpemVzOiBTYW5pdGl6ZWRVcGxvYWRDb25maWdbJ2ltYWdlU2l6ZXMnXSkgPT4ge1xuICBpZiAoIWltYWdlU2l6ZXMgfHwgaW1hZ2VTaXplcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc2l6ZXNcbiAgfVxuXG4gIGNvbnN0IG9yZGVyZWRTaXplczogRmlsZXNTaXplc1dpdGhVcmwgPSB7fVxuXG4gIGltYWdlU2l6ZXMuZm9yRWFjaCgoeyBuYW1lIH0pID0+IHtcbiAgICBpZiAoc2l6ZXNbbmFtZV0pIHtcbiAgICAgIG9yZGVyZWRTaXplc1tuYW1lXSA9IHNpemVzW25hbWVdXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBvcmRlcmVkU2l6ZXNcbn1cblxudHlwZSBQcmV2aWV3U2l6ZUNhcmRQcm9wcyA9IHtcbiAgYWN0aXZlOiBib29sZWFuXG4gIGFsdDogc3RyaW5nXG4gIG1ldGE6IEZpbGVJbmZvXG4gIG5hbWU6IHN0cmluZ1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZFxuICBwcmV2aWV3U3JjOiBzdHJpbmdcbn1cbmNvbnN0IFByZXZpZXdTaXplQ2FyZDogUmVhY3QuRkM8UHJldmlld1NpemVDYXJkUHJvcHM+ID0gKHtcbiAgbmFtZSxcbiAgYWN0aXZlLFxuICBhbHQsXG4gIG1ldGEsXG4gIG9uQ2xpY2ssXG4gIHByZXZpZXdTcmMsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbYCR7YmFzZUNsYXNzfV9fc2l6ZU9wdGlvbmAsIGFjdGl2ZSAmJiBgJHtiYXNlQ2xhc3N9LS1zZWxlY3RlZGBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIG9uQ2xpY2s9e3R5cGVvZiBvbkNsaWNrID09PSAnZnVuY3Rpb24nID8gb25DbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNsaWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgb25DbGljaygpXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIHRhYkluZGV4PXswfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbWFnZWB9PlxuICAgICAgICA8aW1nIGFsdD17YWx0fSBzcmM9e3ByZXZpZXdTcmN9IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zaXplTWV0YWB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2l6ZU5hbWVgfT57bmFtZX08L2Rpdj5cbiAgICAgICAgPEZpbGVNZXRhIHsuLi5tZXRhfSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IHR5cGUgUHJldmlld1NpemVzUHJvcHMgPSB7XG4gIGRvYzoge1xuICAgIHNpemVzPzogRmlsZXNTaXplc1dpdGhVcmxcbiAgfSAmIERhdGFcbiAgaW1hZ2VDYWNoZVRhZz86IHN0cmluZ1xuICB1cGxvYWRDb25maWc6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ3VwbG9hZCddXG59XG5cbmV4cG9ydCBjb25zdCBQcmV2aWV3U2l6ZXM6IFJlYWN0LkZDPFByZXZpZXdTaXplc1Byb3BzPiA9ICh7IGRvYywgaW1hZ2VDYWNoZVRhZywgdXBsb2FkQ29uZmlnIH0pID0+IHtcbiAgY29uc3QgeyBpbWFnZVNpemVzIH0gPSB1cGxvYWRDb25maWdcbiAgY29uc3QgeyBzaXplcyB9ID0gZG9jXG5cbiAgY29uc3QgYWx0ID0gKGRvYyBhcyB7IGFsdD86IHN0cmluZyB9KT8uYWx0IHx8IGRvYy5maWxlbmFtZSB8fCAnJ1xuXG4gIGNvbnN0IFtvcmRlcmVkU2l6ZXMsIHNldE9yZGVyZWRTaXplc10gPSB1c2VTdGF0ZTxGaWxlc1NpemVzV2l0aFVybD4oKCkgPT5cbiAgICBzb3J0U2l6ZXMoc2l6ZXMsIGltYWdlU2l6ZXMpLFxuICApXG4gIGNvbnN0IFtzZWxlY3RlZFNpemUsIHNldFNlbGVjdGVkU2l6ZV0gPSB1c2VTdGF0ZTxudWxsIHwgc3RyaW5nPihudWxsKVxuXG4gIGNvbnN0IGdlbmVyYXRlSW1hZ2VVcmwgPSAoZG9jKSA9PiB7XG4gICAgaWYgKCFkb2MuZmlsZW5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGlmIChkb2MudXJsKSB7XG4gICAgICByZXR1cm4gYCR7ZG9jLnVybH0ke2ltYWdlQ2FjaGVUYWcgPyBgPyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltYWdlQ2FjaGVUYWcpfWAgOiAnJ31gXG4gICAgfVxuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0T3JkZXJlZFNpemVzKHNvcnRTaXplcyhzaXplcywgaW1hZ2VTaXplcykpXG4gIH0sIFtzaXplcywgaW1hZ2VTaXplcywgaW1hZ2VDYWNoZVRhZ10pXG5cbiAgY29uc3QgbWFpblByZXZpZXdTcmMgPSBzZWxlY3RlZFNpemVcbiAgICA/IGdlbmVyYXRlSW1hZ2VVcmwoZG9jLnNpemVzW3NlbGVjdGVkU2l6ZV0pXG4gICAgOiBnZW5lcmF0ZUltYWdlVXJsKGRvYylcblxuICBjb25zdCBvcmlnaW5hbEltYWdlID0gdXNlTWVtbyhcbiAgICAoKTogRmlsZUluZm8gPT4gKHtcbiAgICAgIGZpbGVuYW1lOiBkb2MuZmlsZW5hbWUsXG4gICAgICBmaWxlc2l6ZTogZG9jLmZpbGVzaXplLFxuICAgICAgaGVpZ2h0OiBkb2MuaGVpZ2h0LFxuICAgICAgbWltZVR5cGU6IGRvYy5taW1lVHlwZSxcbiAgICAgIHVybDogZG9jLnVybCxcbiAgICAgIHdpZHRoOiBkb2Mud2lkdGgsXG4gICAgfSksXG4gICAgW2RvY10sXG4gIClcbiAgY29uc3Qgb3JpZ2luYWxGaWxlbmFtZSA9ICdPcmlnaW5hbCdcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ltYWdlV3JhcGB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbWV0YWB9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zaXplTmFtZWB9PntzZWxlY3RlZFNpemUgfHwgb3JpZ2luYWxGaWxlbmFtZX08L2Rpdj5cbiAgICAgICAgICA8RmlsZU1ldGEgey4uLihzZWxlY3RlZFNpemUgPyBvcmRlcmVkU2l6ZXNbc2VsZWN0ZWRTaXplXSA6IG9yaWdpbmFsSW1hZ2UpfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGltZyBhbHQ9e2FsdH0gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wcmV2aWV3YH0gc3JjPXttYWluUHJldmlld1NyY30gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xpc3RXcmFwYH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19saXN0YH0+XG4gICAgICAgICAgPFByZXZpZXdTaXplQ2FyZFxuICAgICAgICAgICAgYWN0aXZlPXshc2VsZWN0ZWRTaXplfVxuICAgICAgICAgICAgYWx0PXthbHR9XG4gICAgICAgICAgICBtZXRhPXtvcmlnaW5hbEltYWdlfVxuICAgICAgICAgICAgbmFtZT17b3JpZ2luYWxGaWxlbmFtZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkU2l6ZShudWxsKX1cbiAgICAgICAgICAgIHByZXZpZXdTcmM9e2dlbmVyYXRlSW1hZ2VVcmwoZG9jKX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge09iamVjdC5lbnRyaWVzKG9yZGVyZWRTaXplcykubWFwKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkU2l6ZSA9PT0ga2V5XG4gICAgICAgICAgICBjb25zdCBwcmV2aWV3U3JjID0gZ2VuZXJhdGVJbWFnZVVybCh2YWwpXG5cbiAgICAgICAgICAgIGlmIChwcmV2aWV3U3JjKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFByZXZpZXdTaXplQ2FyZFxuICAgICAgICAgICAgICAgICAgYWN0aXZlPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIGFsdD17YWx0fVxuICAgICAgICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICAgICAgICBtZXRhPXt2YWx9XG4gICAgICAgICAgICAgICAgICBuYW1lPXtrZXl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFNpemUoa2V5KX1cbiAgICAgICAgICAgICAgICAgIHByZXZpZXdTcmM9e3ByZXZpZXdTcmN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH0pfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyB1c2VXaW5kb3dJbmZvIH0gZnJvbSAnQGZhY2VsZXNzLXVpL3dpbmRvdy1pbmZvJ1xuaW1wb3J0IHsgaXNJbWFnZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBTZWxlY3RJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9TZWxlY3QvSW5wdXQuanMnXG5pbXBvcnQgeyBDaGV2cm9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL0NoZXZyb24vaW5kZXguanMnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBBbmltYXRlSGVpZ2h0IH0gZnJvbSAnLi4vLi4vQW5pbWF0ZUhlaWdodC9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4uLy4uL0RyYXdlci9pbmRleC5qcydcbmltcG9ydCB7IEVycm9yUGlsbCB9IGZyb20gJy4uLy4uL0Vycm9yUGlsbC9pbmRleC5qcydcbmltcG9ydCB7IFBpbGwgfSBmcm9tICcuLi8uLi9QaWxsL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2hpbW1lckVmZmVjdCB9IGZyb20gJy4uLy4uL1NoaW1tZXJFZmZlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBjcmVhdGVUaHVtYm5haWwgfSBmcm9tICcuLi8uLi9UaHVtYm5haWwvY3JlYXRlVGh1bWJuYWlsLmpzJ1xuaW1wb3J0IHsgVGh1bWJuYWlsIH0gZnJvbSAnLi4vLi4vVGh1bWJuYWlsL2luZGV4LmpzJ1xuaW1wb3J0IHsgQWN0aW9ucyB9IGZyb20gJy4uL0FjdGlvbnNCYXIvaW5kZXguanMnXG5pbXBvcnQgeyBBZGRGaWxlc1ZpZXcgfSBmcm9tICcuLi9BZGRGaWxlc1ZpZXcvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHVzZUZvcm1zTWFuYWdlciB9IGZyb20gJy4uL0Zvcm1zTWFuYWdlci9pbmRleC5qcydcbmltcG9ydCB7IHVzZUJ1bGtVcGxvYWQgfSBmcm9tICcuLi9pbmRleC5qcydcblxuY29uc3QgYWRkTW9yZUZpbGVzRHJhd2VyU2x1ZyA9ICdidWxrLXVwbG9hZC1kcmF3ZXItLWFkZC1tb3JlLWZpbGVzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZmlsZS1zZWxlY3Rpb25zJ1xuXG5leHBvcnQgZnVuY3Rpb24gRmlsZVNpZGViYXIoKSB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVJbmRleCxcbiAgICBhZGRGaWxlcyxcbiAgICBmb3JtcyxcbiAgICBpc0luaXRpYWxpemluZyxcbiAgICByZW1vdmVGaWxlLFxuICAgIHNldEFjdGl2ZUluZGV4LFxuICAgIHRvdGFsRXJyb3JDb3VudCxcbiAgfSA9IHVzZUZvcm1zTWFuYWdlcigpXG4gIGNvbnN0IHsgaW5pdGlhbEZpbGVzLCBpbml0aWFsRm9ybXMsIG1heEZpbGVzIH0gPSB1c2VCdWxrVXBsb2FkKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IFtzaG93RmlsZXMsIHNldFNob3dGaWxlc10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgeyBicmVha3BvaW50cyB9ID0gdXNlV2luZG93SW5mbygpXG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlRmlsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChpbmRleFRvUmVtb3ZlOiBudW1iZXIpID0+IHtcbiAgICAgIHJlbW92ZUZpbGUoaW5kZXhUb1JlbW92ZSlcbiAgICB9LFxuICAgIFtyZW1vdmVGaWxlXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUFkZEZpbGVzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVsaXN0OiBGaWxlTGlzdCkgPT4ge1xuICAgICAgdm9pZCBhZGRGaWxlcyhmaWxlbGlzdClcbiAgICAgIGNsb3NlTW9kYWwoYWRkTW9yZUZpbGVzRHJhd2VyU2x1ZylcbiAgICB9LFxuICAgIFthZGRGaWxlcywgY2xvc2VNb2RhbF0sXG4gIClcblxuICBjb25zdCBnZXRGaWxlU2l6ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgY29uc3Qgc2l6ZSA9IGZpbGUuc2l6ZVxuICAgIGNvbnN0IGkgPSBzaXplID09PSAwID8gMCA6IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygxMDI0KSlcbiAgICBjb25zdCBkZWNpbWFscyA9IGkgPiAxID8gMSA6IDBcbiAgICBjb25zdCBmb3JtYXR0ZWRTaXplID1cbiAgICAgIChzaXplIC8gTWF0aC5wb3coMTAyNCwgaSkpLnRvRml4ZWQoZGVjaW1hbHMpICsgJyAnICsgWydCJywgJ2tCJywgJ01CJywgJ0dCJywgJ1RCJ11baV1cbiAgICByZXR1cm4gZm9ybWF0dGVkU2l6ZVxuICB9LCBbXSlcblxuICBjb25zdCB0b3RhbEZpbGVDb3VudCA9IGlzSW5pdGlhbGl6aW5nXG4gICAgPyAoaW5pdGlhbEZpbGVzPy5sZW5ndGggPz8gaW5pdGlhbEZvcm1zPy5sZW5ndGgpXG4gICAgOiBmb3Jtcy5sZW5ndGhcblxuICBjb25zdCB7XG4gICAgY29sbGVjdGlvblNsdWc6IGJ1bGtVcGxvYWRDb2xsZWN0aW9uU2x1ZyxcbiAgICBzZWxlY3RhYmxlQ29sbGVjdGlvbnMsXG4gICAgc2V0Q29sbGVjdGlvblNsdWcsXG4gIH0gPSB1c2VCdWxrVXBsb2FkKClcblxuICBjb25zdCB7IGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgc2hvd0ZpbGVzICYmIGAke2Jhc2VDbGFzc31fX3Nob3dpbmdGaWxlc2BdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgPlxuICAgICAge2JyZWFrcG9pbnRzLm0gJiYgc2hvd0ZpbGVzID8gPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX21vYmlsZUJsdXJgfSAvPiA6IG51bGx9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyYH0+XG4gICAgICAgIHtzZWxlY3RhYmxlQ29sbGVjdGlvbnM/Lmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgIDxTZWxlY3RJbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb2xsZWN0aW9uU2VsZWN0YH1cbiAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgIG5hbWU9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWw6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZVxuICAgICAgICAgICAgICAgICAgPyAoZT8udmFsdWUgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgOiAoZSBhcyB1bmtub3duIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgc2V0Q29sbGVjdGlvblNsdWcodmFsKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9wdGlvbnM9e1xuICAgICAgICAgICAgICBzZWxlY3RhYmxlQ29sbGVjdGlvbnM/Lm1hcCgoY29sbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnOiBjb2xsIH0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IGNvbmZpZy5sYWJlbHMuc2luZ3VsYXIsIHZhbHVlOiBjb25maWcuc2x1ZyB9XG4gICAgICAgICAgICAgIH0pIHx8IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgdmFsdWU9e2J1bGtVcGxvYWRDb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyVG9wUm93YH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcl9fdGV4dGB9PlxuICAgICAgICAgICAgPEVycm9yUGlsbCBjb3VudD17dG90YWxFcnJvckNvdW50fSBpMThuPXtpMThufSB3aXRoTWVzc2FnZSAvPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzdHJvbmdcbiAgICAgICAgICAgICAgICB0aXRsZT17YCR7dG90YWxGaWxlQ291bnR9ICR7dCh0b3RhbEZpbGVDb3VudCA+IDEgPyAndXBsb2FkOmZpbGVzVG9VcGxvYWQnIDogJ3VwbG9hZDpmaWxlVG9VcGxvYWQnKX1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RvdGFsRmlsZUNvdW50fXsnICd9XG4gICAgICAgICAgICAgICAge3QodG90YWxGaWxlQ291bnQgPiAxID8gJ3VwbG9hZDpmaWxlc1RvVXBsb2FkJyA6ICd1cGxvYWQ6ZmlsZVRvVXBsb2FkJyl9XG4gICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcl9fYWN0aW9uc2B9PlxuICAgICAgICAgICAgeyh0eXBlb2YgbWF4RmlsZXMgPT09ICdudW1iZXInID8gdG90YWxGaWxlQ291bnQgPCBtYXhGaWxlcyA6IHRydWUpID8gKFxuICAgICAgICAgICAgICA8UGlsbFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyX19hZGRGaWxlYH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoYWRkTW9yZUZpbGVzRHJhd2VyU2x1Zyl9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0KCd1cGxvYWQ6YWRkRmlsZScpfVxuICAgICAgICAgICAgICA8L1BpbGw+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdG9nZ2xlcmB9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dGaWxlcygocHJldikgPT4gIXByZXYpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RvZ2dsZXJfX2xhYmVsYH0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZ1xuICAgICAgICAgICAgICAgICAgdGl0bGU9e2Ake3RvdGFsRmlsZUNvdW50fSAke3QodG90YWxGaWxlQ291bnQgPiAxID8gJ3VwbG9hZDpmaWxlc1RvVXBsb2FkJyA6ICd1cGxvYWQ6ZmlsZVRvVXBsb2FkJyl9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dG90YWxGaWxlQ291bnR9eycgJ31cbiAgICAgICAgICAgICAgICAgIHt0KHRvdGFsRmlsZUNvdW50ID4gMSA/ICd1cGxvYWQ6ZmlsZXNUb1VwbG9hZCcgOiAndXBsb2FkOmZpbGVUb1VwbG9hZCcpfVxuICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxDaGV2cm9uSWNvbiBkaXJlY3Rpb249e3Nob3dGaWxlcyA/ICdkb3duJyA6ICd1cCd9IC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgPERyYXdlciBndXR0ZXI9e2ZhbHNlfSBIZWFkZXI9e251bGx9IHNsdWc9e2FkZE1vcmVGaWxlc0RyYXdlclNsdWd9PlxuICAgICAgICAgICAgICA8QWRkRmlsZXNWaWV3XG4gICAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IGNsb3NlTW9kYWwoYWRkTW9yZUZpbGVzRHJhd2VyU2x1Zyl9XG4gICAgICAgICAgICAgICAgb25Ecm9wPXtoYW5kbGVBZGRGaWxlc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRHJhd2VyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyX19tb2JpbGVEb2NBY3Rpb25zYH0+XG4gICAgICAgICAgPEFjdGlvbnMgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FuaW1hdGVXcmFwcGVyYH0+XG4gICAgICAgIDxBbmltYXRlSGVpZ2h0IGhlaWdodD17IWJyZWFrcG9pbnRzLm0gfHwgc2hvd0ZpbGVzID8gJ2F1dG8nIDogMH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZpbGVzQ29udGFpbmVyYH0+XG4gICAgICAgICAgICB7aXNJbml0aWFsaXppbmcgJiZcbiAgICAgICAgICAgIGZvcm1zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgKGluaXRpYWxGaWxlcz8ubGVuZ3RoID4gMCB8fCBpbml0aWFsRm9ybXM/Lmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgID8gKGluaXRpYWxGaWxlcyA/IEFycmF5LmZyb20oaW5pdGlhbEZpbGVzKSA6IGluaXRpYWxGb3JtcykubWFwKChmaWxlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNoaW1tZXJFZmZlY3RcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uRGVsYXk9e2BjYWxjKCR7aW5kZXh9ICogJHs2MH1tcylgfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzNXB4XCJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgICAge2Zvcm1zLm1hcCgoeyBlcnJvckNvdW50LCBmb3JtSUQsIGZvcm1TdGF0ZSB9LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RmlsZSA9IChmb3JtU3RhdGU/LmZpbGU/LnZhbHVlIGFzIEZpbGUpIHx8ICh7fSBhcyBGaWxlKVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgICAgICAgICAgIGAke2Jhc2VDbGFzc31fX2ZpbGVSb3dDb250YWluZXJgLFxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9PT0gYWN0aXZlSW5kZXggJiYgYCR7YmFzZUNsYXNzfV9fZmlsZVJvd0NvbnRhaW5lci0tYWN0aXZlYCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3VudCAmJiBlcnJvckNvdW50ID4gMCAmJiBgJHtiYXNlQ2xhc3N9X19maWxlUm93Q29udGFpbmVyLS1lcnJvcmAsXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgICAgICAgICAgIGtleT17Zm9ybUlEfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlUm93YH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0QWN0aXZlSW5kZXgoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNpZGViYXJUaHVtYm5haWwgZmlsZT17Y3VycmVudEZpbGV9IGZvcm1JRD17Zm9ybUlEfSAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZmlsZURldGFpbHNgfT5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZpbGVOYW1lYH0gdGl0bGU9e2N1cnJlbnRGaWxlLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRGaWxlLm5hbWUgfHwgdCgndXBsb2FkOm5vRmlsZScpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50RmlsZSBpbnN0YW5jZW9mIEZpbGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlU2l6ZWB9PntnZXRGaWxlU2l6ZShjdXJyZW50RmlsZSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3JlbW92ZSAke2Jhc2VDbGFzc31fX3JlbW92ZS0tdW5kZXJsYXlgfT5cbiAgICAgICAgICAgICAgICAgICAgICA8WEljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAge2Vycm9yQ291bnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPEVycm9yUGlsbFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19lcnJvckNvdW50YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PXtlcnJvckNvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj17aTE4bn1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6cmVtb3ZlJyl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVtb3ZlICR7YmFzZUNsYXNzfV9fcmVtb3ZlLS1vdmVybGF5YH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUmVtb3ZlRmlsZShpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WEljb24gLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9BbmltYXRlSGVpZ2h0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gU2lkZWJhclRodW1ibmFpbCh7IGZpbGUsIGZvcm1JRCB9OiB7IGZpbGU6IEZpbGU7IGZvcm1JRDogc3RyaW5nIH0pIHtcbiAgY29uc3QgW3RodW1ibmFpbFVSTCwgc2V0VGh1bWJuYWlsVVJMXSA9IFJlYWN0LnVzZVN0YXRlPG51bGwgfCBzdHJpbmc+KG51bGwpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGlzQ2FuY2VsbGVkID0gZmFsc2VcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVGh1bWJuYWlsKCkge1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpXG4gICAgICBzZXRUaHVtYm5haWxVUkwobnVsbClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzSW1hZ2UoZmlsZS50eXBlKSkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGNyZWF0ZVRodW1ibmFpbChmaWxlKVxuICAgICAgICAgIGlmICghaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHNldFRodW1ibmFpbFVSTCh1cmwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRodW1ibmFpbFVSTChudWxsKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIGlmICghaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICBzZXRUaHVtYm5haWxVUkwobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZvaWQgZ2VuZXJhdGVUaHVtYm5haWwoKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzQ2FuY2VsbGVkID0gdHJ1ZVxuICAgIH1cbiAgfSwgW2ZpbGVdKVxuXG4gIGlmIChpc0xvYWRpbmcpIHtcbiAgICByZXR1cm4gPFNoaW1tZXJFZmZlY3QgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190aHVtYm5haWwtc2hpbW1lcmB9IGRpc2FibGVJbmxpbmVTdHlsZXMgLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFRodW1ibmFpbFxuICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190aHVtYm5haWxgfVxuICAgICAgZmlsZVNyYz17dGh1bWJuYWlsVVJMfVxuICAgICAga2V5PXtgJHtmb3JtSUR9LSR7dGh1bWJuYWlsVVJMIHx8ICdwbGFjZWhvbGRlcid9YH1cbiAgICAvPlxuICApXG59XG4iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCIvKipcbiAqIENyZWF0ZSBhIHRodW1ibmFpbCBmcm9tIGEgRmlsZSBvYmplY3QgYnkgZHJhd2luZyBpdCBvbnRvIGFuIE9mZnNjcmVlbkNhbnZhc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlVGh1bWJuYWlsID0gKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpXG4gICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkgLy8gVXNlIE9iamVjdCBVUkwgZGlyZWN0bHlcblxuICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBtYXhEaW1lbnNpb24gPSAyODBcbiAgICAgIGxldCBkcmF3SGVpZ2h0OiBudW1iZXIsIGRyYXdXaWR0aDogbnVtYmVyXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBhc3BlY3QgcmF0aW9cbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gaW1nLndpZHRoIC8gaW1nLmhlaWdodFxuXG4gICAgICAvLyBEZXRlcm1pbmUgZGltZW5zaW9ucyB0byBmaXQgd2l0aGluIG1heERpbWVuc2lvbiB3aGlsZSBtYWludGFpbmluZyBhc3BlY3QgcmF0aW9cbiAgICAgIGlmIChhc3BlY3RSYXRpbyA+IDEpIHtcbiAgICAgICAgLy8gSW1hZ2UgaXMgd2lkZXIgdGhhbiB0YWxsXG4gICAgICAgIGRyYXdXaWR0aCA9IG1heERpbWVuc2lvblxuICAgICAgICBkcmF3SGVpZ2h0ID0gbWF4RGltZW5zaW9uIC8gYXNwZWN0UmF0aW9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEltYWdlIGlzIHRhbGxlciB0aGFuIHdpZGUsIG9yIHNxdWFyZVxuICAgICAgICBkcmF3V2lkdGggPSBtYXhEaW1lbnNpb24gKiBhc3BlY3RSYXRpb1xuICAgICAgICBkcmF3SGVpZ2h0ID0gbWF4RGltZW5zaW9uXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoZHJhd1dpZHRoLCBkcmF3SGVpZ2h0KSAvLyBDcmVhdGUgYW4gT2Zmc2NyZWVuQ2FudmFzXG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxuXG4gICAgICAvLyBEZXRlcm1pbmUgb3V0cHV0IGZvcm1hdCBiYXNlZCBvbiBpbnB1dCBmaWxlIHR5cGVcbiAgICAgIGNvbnN0IG91dHB1dEZvcm1hdCA9IGZpbGUudHlwZSA9PT0gJ2ltYWdlL3BuZycgPyAnaW1hZ2UvcG5nJyA6ICdpbWFnZS9qcGVnJ1xuICAgICAgY29uc3QgcXVhbGl0eSA9IGZpbGUudHlwZSA9PT0gJ2ltYWdlL3BuZycgPyB1bmRlZmluZWQgOiAwLjggLy8gUE5HIGRvZXNuJ3QgdXNlIHF1YWxpdHksIHVzZSBoaWdoZXIgcXVhbGl0eSBmb3IgSlBFR1xuXG4gICAgICAvLyBEcmF3IHRoZSBpbWFnZSBvbnRvIHRoZSBPZmZzY3JlZW5DYW52YXMgd2l0aCBjYWxjdWxhdGVkIGRpbWVuc2lvbnNcbiAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQpXG5cbiAgICAgIC8vIENvbnZlcnQgdGhlIE9mZnNjcmVlbkNhbnZhcyB0byBhIEJsb2IgYW5kIGZyZWUgdXAgbWVtb3J5XG4gICAgICBjYW52YXNcbiAgICAgICAgLmNvbnZlcnRUb0Jsb2IoeyB0eXBlOiBvdXRwdXRGb3JtYXQsIC4uLihxdWFsaXR5ICYmIHsgcXVhbGl0eSB9KSB9KVxuICAgICAgICAudGhlbigoYmxvYikgPT4ge1xuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1nLnNyYykgLy8gUmVsZWFzZSB0aGUgT2JqZWN0IFVSTFxuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZykgLy8gUmVzb2x2ZSBhcyBkYXRhIFVSTFxuICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYilcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICB9XG5cbiAgICBpbWcub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWcuc3JjKSAvLyBSZWxlYXNlIE9iamVjdCBVUkwgb24gZXJyb3JcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KGVycm9yKVxuICAgIH1cbiAgfSlcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7XG4gIENsaWVudENvbGxlY3Rpb25Db25maWcsXG4gIEZpZWxkTGFiZWxDbGllbnRQcm9wcyxcbiAgRmlsdGVyT3B0aW9uc1Jlc3VsdCxcbiAgSnNvbk9iamVjdCxcbiAgU3RhdGljRGVzY3JpcHRpb24sXG4gIFN0YXRpY0xhYmVsLFxuICBVcGxvYWRGaWVsZENsaWVudCxcbiAgVXBsb2FkRmllbGQgYXMgVXBsb2FkRmllbGRUeXBlLFxuICBWYWx1ZVdpdGhSZWxhdGlvbixcbn0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB0eXBlIHsgTWFya09wdGlvbmFsIH0gZnJvbSAndHMtZXNzZW50aWFscydcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBMaXN0RHJhd2VyUHJvcHMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9MaXN0RHJhd2VyL3R5cGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBSZWxvYWREb2MsIFZhbHVlQXNEYXRhV2l0aFJlbGF0aW9uIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdHlwZSBCdWxrVXBsb2FkQ29udGV4dCwgdXNlQnVsa1VwbG9hZCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0J1bGtVcGxvYWQvaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJvcHpvbmUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Ecm9wem9uZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxpc3REcmF3ZXIgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9MaXN0RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgU2hpbW1lckVmZmVjdCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1NoaW1tZXJFZmZlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBub3JtYWxpemVSZWxhdGlvbnNoaXBWYWx1ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9ub3JtYWxpemVSZWxhdGlvbnNoaXBWYWx1ZS5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50SGFzTWFueSB9IGZyb20gJy4vSGFzTWFueS9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgVXBsb2FkQ29tcG9uZW50SGFzT25lIH0gZnJvbSAnLi9IYXNPbmUvaW5kZXguanMnXG5cbmV4cG9ydCBjb25zdCBiYXNlQ2xhc3MgPSAndXBsb2FkJ1xuXG50eXBlIFBvcHVsYXRlZERvY3MgPSB7IHJlbGF0aW9uVG86IHN0cmluZzsgdmFsdWU6IEpzb25PYmplY3QgfVtdXG5cbmV4cG9ydCB0eXBlIFVwbG9hZElucHV0UHJvcHMgPSB7XG4gIHJlYWRvbmx5IEFmdGVySW5wdXQ/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgYWxsb3dDcmVhdGU/OiBib29sZWFuXG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgXCJDcmVhdGUgbmV3IGNvbGxlY3Rpb25cIiBidXR0b25cbiAgICovXG4gIHJlYWRvbmx5IGFwaT86IHN0cmluZ1xuICByZWFkb25seSBCZWZvcmVJbnB1dD86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgY29sbGVjdGlvbj86IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgcmVhZG9ubHkgY3VzdG9tVXBsb2FkQWN0aW9ucz86IFJlYWN0LlJlYWN0Tm9kZVtdXG4gIHJlYWRvbmx5IERlc2NyaXB0aW9uPzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogU3RhdGljRGVzY3JpcHRpb25cbiAgcmVhZG9ubHkgZGlzcGxheVByZXZpZXc/OiBib29sZWFuXG4gIHJlYWRvbmx5IEVycm9yPzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGZpbHRlck9wdGlvbnM/OiBGaWx0ZXJPcHRpb25zUmVzdWx0XG4gIHJlYWRvbmx5IGhhc01hbnk/OiBib29sZWFuXG4gIHJlYWRvbmx5IGhpZGVSZW1vdmVGaWxlPzogYm9vbGVhblxuICByZWFkb25seSBpc1NvcnRhYmxlPzogYm9vbGVhblxuICByZWFkb25seSBMYWJlbD86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBsYWJlbD86IFN0YXRpY0xhYmVsXG4gIHJlYWRvbmx5IGxhYmVsUHJvcHM/OiBGaWVsZExhYmVsQ2xpZW50UHJvcHM8TWFya09wdGlvbmFsPFVwbG9hZEZpZWxkQ2xpZW50LCAndHlwZSc+PlxuICByZWFkb25seSBsb2NhbGl6ZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IG1heFJvd3M/OiBudW1iZXJcbiAgcmVhZG9ubHkgb25DaGFuZ2U/OiAoZSkgPT4gdm9pZFxuICByZWFkb25seSBwYXRoOiBzdHJpbmdcbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuXG4gIHJlYWRvbmx5IHJlbGF0aW9uVG86IFVwbG9hZEZpZWxkVHlwZVsncmVsYXRpb25UbyddXG4gIHJlYWRvbmx5IHJlcXVpcmVkPzogYm9vbGVhblxuICByZWFkb25seSBzZXJ2ZXJVUkw/OiBzdHJpbmdcbiAgcmVhZG9ubHkgc2hvd0Vycm9yPzogYm9vbGVhblxuICByZWFkb25seSBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgcmVhZG9ubHkgdmFsdWU/OiAobnVtYmVyIHwgc3RyaW5nKVtdIHwgbnVtYmVyIHwgc3RyaW5nIHwgVmFsdWVXaXRoUmVsYXRpb24gfCBWYWx1ZVdpdGhSZWxhdGlvbltdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVcGxvYWRJbnB1dChwcm9wczogVXBsb2FkSW5wdXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgQWZ0ZXJJbnB1dCxcbiAgICBhbGxvd0NyZWF0ZSxcbiAgICBhcGksXG4gICAgQmVmb3JlSW5wdXQsXG4gICAgY2xhc3NOYW1lLFxuICAgIERlc2NyaXB0aW9uLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGRpc3BsYXlQcmV2aWV3LFxuICAgIEVycm9yLFxuICAgIGZpbHRlck9wdGlvbnM6IGZpbHRlck9wdGlvbnNGcm9tUHJvcHMsXG4gICAgaGFzTWFueSxcbiAgICBpc1NvcnRhYmxlLFxuICAgIExhYmVsLFxuICAgIGxhYmVsLFxuICAgIGxvY2FsaXplZCxcbiAgICBtYXhSb3dzLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZUZyb21Qcm9wcyxcbiAgICBwYXRoLFxuICAgIHJlYWRPbmx5LFxuICAgIHJlbGF0aW9uVG8sXG4gICAgcmVxdWlyZWQsXG4gICAgc2VydmVyVVJMLFxuICAgIHNob3dFcnJvcixcbiAgICBzdHlsZSxcbiAgICB2YWx1ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3BvcHVsYXRlZERvY3MsIHNldFBvcHVsYXRlZERvY3NdID0gUmVhY3QudXNlU3RhdGU8XG4gICAge1xuICAgICAgcmVsYXRpb25Ubzogc3RyaW5nXG4gICAgICB2YWx1ZTogSnNvbk9iamVjdFxuICAgIH1bXVxuICA+KClcblxuICBjb25zdCBbYWN0aXZlUmVsYXRpb25Ub10gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmc+KFxuICAgIEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgPyByZWxhdGlvblRvWzBdIDogcmVsYXRpb25UbyxcbiAgKVxuXG4gIGNvbnN0IHsgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHtcbiAgICBkcmF3ZXJTbHVnLFxuICAgIHNldENvbGxlY3Rpb25TbHVnLFxuICAgIHNldEluaXRpYWxGaWxlcyxcbiAgICBzZXRNYXhGaWxlcyxcbiAgICBzZXRPblN1Y2Nlc3MsXG4gICAgc2V0U2VsZWN0YWJsZUNvbGxlY3Rpb25zLFxuICB9ID0gdXNlQnVsa1VwbG9hZCgpXG4gIGNvbnN0IHsgcGVybWlzc2lvbnMgfSA9IHVzZUF1dGgoKVxuICBjb25zdCB7IGNvZGUgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIC8vIFRoaXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBidWxrIHVwbG9hZCB0byBhbGxvdyB5b3UgdG8gc2VsZWN0IG9ubHkgY29sbGVjdGlvbnMgeW91IGhhdmUgY3JlYXRlIHBlcm1pc3Npb25zIGZvclxuICBjb25zdCBjb2xsZWN0aW9uU2x1Z3NXaXRoQ3JlYXRlUGVybWlzc2lvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pKSB7XG4gICAgICByZXR1cm4gcmVsYXRpb25Uby5maWx0ZXIoXG4gICAgICAgIChyZWxhdGlvbikgPT4gcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zICYmIHBlcm1pc3Npb25zLmNvbGxlY3Rpb25zPy5bcmVsYXRpb25dPy5jcmVhdGUsXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBbXVxuICB9LCBbcmVsYXRpb25UbywgcGVybWlzc2lvbnNdKVxuXG4gIGNvbnN0IGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnNSZXN1bHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc1BvbHkgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pXG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyT3B0aW9uc0Zyb21Qcm9wc1xuICAgIH1cblxuICAgIC8vIEdyb3VwIGV4aXN0aW5nIElEcyBieSByZWxhdGlvblxuICAgIGNvbnN0IGV4aXN0aW5nSWRzQnlSZWxhdGlvbjogUmVjb3JkPHN0cmluZywgKG51bWJlciB8IHN0cmluZylbXT4gPSB7fVxuXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV1cblxuICAgIGZvciAoY29uc3QgdmFsIG9mIHZhbHVlcykge1xuICAgICAgaWYgKGlzUG9seSAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAncmVsYXRpb25UbycgaW4gdmFsKSB7XG4gICAgICAgIC8vIFBvbHkgdXBsb2FkIC0gZ3JvdXAgYnkgcmVsYXRpb25Ub1xuICAgICAgICBpZiAoIWV4aXN0aW5nSWRzQnlSZWxhdGlvblt2YWwucmVsYXRpb25Ub10pIHtcbiAgICAgICAgICBleGlzdGluZ0lkc0J5UmVsYXRpb25bdmFsLnJlbGF0aW9uVG9dID0gW11cbiAgICAgICAgfVxuICAgICAgICBleGlzdGluZ0lkc0J5UmVsYXRpb25bdmFsLnJlbGF0aW9uVG9dLnB1c2godmFsLnZhbHVlKVxuICAgICAgfSBlbHNlIGlmICghaXNQb2x5KSB7XG4gICAgICAgIC8vIE5vbi1wb2x5IHVwbG9hZCAtIGFsbCBJRHMgYmVsb25nIHRvIHRoZSBzaW5nbGUgY29sbGVjdGlvblxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gcmVsYXRpb25Ub1xuICAgICAgICBpZiAoIWV4aXN0aW5nSWRzQnlSZWxhdGlvbltjb2xsZWN0aW9uXSkge1xuICAgICAgICAgIGV4aXN0aW5nSWRzQnlSZWxhdGlvbltjb2xsZWN0aW9uXSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIHZhbCA/IHZhbC52YWx1ZSA6IHZhbFxuICAgICAgICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgZXhpc3RpbmdJZHNCeVJlbGF0aW9uW2NvbGxlY3Rpb25dLnB1c2goaWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCdWlsZCBmaWx0ZXIgb3B0aW9ucyBmb3IgZWFjaCBjb2xsZWN0aW9uXG4gICAgY29uc3QgbmV3RmlsdGVyT3B0aW9ucyA9IHsgLi4uZmlsdGVyT3B0aW9uc0Zyb21Qcm9wcyB9XG4gICAgY29uc3QgcmVsYXRpb25zID0gaXNQb2x5ID8gcmVsYXRpb25UbyA6IFtyZWxhdGlvblRvXVxuXG4gICAgcmVsYXRpb25zLmZvckVhY2goKHJlbGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZ0lkcyA9IGV4aXN0aW5nSWRzQnlSZWxhdGlvbltyZWxhdGlvbl0gfHwgW11cblxuICAgICAgbmV3RmlsdGVyT3B0aW9uc1tyZWxhdGlvbl0gPSB7XG4gICAgICAgIC4uLigoZmlsdGVyT3B0aW9uc0Zyb21Qcm9wcz8uW3JlbGF0aW9uXSBhcyBhbnkpIHx8IHt9KSxcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICAuLi4oKGZpbHRlck9wdGlvbnNGcm9tUHJvcHM/LltyZWxhdGlvbl0gYXMgYW55KT8uaWQgfHwge30pLFxuICAgICAgICAgIG5vdF9pbjogKChmaWx0ZXJPcHRpb25zRnJvbVByb3BzPy5bcmVsYXRpb25dIGFzIGFueSk/LmlkPy5ub3RfaW4gfHwgW10pLmNvbmNhdChcbiAgICAgICAgICAgIGV4aXN0aW5nSWRzLFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBuZXdGaWx0ZXJPcHRpb25zXG4gIH0sIFt2YWx1ZSwgZmlsdGVyT3B0aW9uc0Zyb21Qcm9wcywgcmVsYXRpb25Ub10pXG5cbiAgY29uc3QgW0xpc3REcmF3ZXIsICwgeyBjbG9zZURyYXdlcjogY2xvc2VMaXN0RHJhd2VyLCBvcGVuRHJhd2VyOiBvcGVuTGlzdERyYXdlciB9XSA9XG4gICAgdXNlTGlzdERyYXdlcih7XG4gICAgICBjb2xsZWN0aW9uU2x1Z3M6IHR5cGVvZiByZWxhdGlvblRvID09PSAnc3RyaW5nJyA/IFtyZWxhdGlvblRvXSA6IHJlbGF0aW9uVG8sXG4gICAgICBmaWx0ZXJPcHRpb25zLFxuICAgIH0pXG5cbiAgY29uc3QgW1xuICAgIENyZWF0ZURvY0RyYXdlcixcbiAgICAsXG4gICAgeyBjbG9zZURyYXdlcjogY2xvc2VDcmVhdGVEb2NEcmF3ZXIsIG9wZW5EcmF3ZXI6IG9wZW5DcmVhdGVEb2NEcmF3ZXIgfSxcbiAgXSA9IHVzZURvY3VtZW50RHJhd2VyKHtcbiAgICBjb2xsZWN0aW9uU2x1ZzogYWN0aXZlUmVsYXRpb25UbyxcbiAgfSlcblxuICAvKipcbiAgICogVHJhY2sgdGhlIGxhc3QgbG9hZGVkIHZhbHVlIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmVsb2Fkc1xuICAgKi9cbiAgY29uc3QgbG9hZGVkVmFsdWVSZWYgPSBSZWFjdC51c2VSZWY8XG4gICAgKG51bWJlciB8IHN0cmluZylbXSB8IG51bGwgfCBudW1iZXIgfCBzdHJpbmcgfCBWYWx1ZVdpdGhSZWxhdGlvbiB8IFZhbHVlV2l0aFJlbGF0aW9uW11cbiAgPihudWxsKVxuXG4gIGNvbnN0IGNhbkNyZWF0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWxsb3dDcmVhdGUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aXZlUmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChwZXJtaXNzaW9ucz8uY29sbGVjdGlvbnMgJiYgcGVybWlzc2lvbnMuY29sbGVjdGlvbnM/LlthY3RpdmVSZWxhdGlvblRvXT8uY3JlYXRlKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sIFthY3RpdmVSZWxhdGlvblRvLCBwZXJtaXNzaW9ucywgYWxsb3dDcmVhdGVdKVxuXG4gIGNvbnN0IG9uQ2hhbmdlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9uQ2hhbmdlRnJvbVByb3BzKG5ld1ZhbHVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlRnJvbVByb3BzXSxcbiAgKVxuXG4gIGNvbnN0IHBvcHVsYXRlRG9jcyA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChpdGVtczogVmFsdWVXaXRoUmVsYXRpb25bXSk6IFByb21pc2U8VmFsdWVBc0RhdGFXaXRoUmVsYXRpb25bXT4gPT4ge1xuICAgICAgaWYgKCFpdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXVxuICAgICAgfVxuXG4gICAgICAvLyAxLiBHcm91cCBJRHMgYnkgY29sbGVjdGlvblxuICAgICAgY29uc3QgZ3JvdXBlZDogUmVjb3JkPHN0cmluZywgKG51bWJlciB8IHN0cmluZylbXT4gPSB7fVxuICAgICAgaXRlbXMuZm9yRWFjaCgoeyByZWxhdGlvblRvLCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIGlmICghZ3JvdXBlZFtyZWxhdGlvblRvXSkge1xuICAgICAgICAgIGdyb3VwZWRbcmVsYXRpb25Ub10gPSBbXVxuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB3ZSBleHRyYWN0IHRoZSBhY3R1YWwgSUQgdmFsdWUsIG5vdCBhbiBvYmplY3RcbiAgICAgICAgbGV0IGlkVmFsdWU6IG51bWJlciB8IHN0cmluZyA9IHZhbHVlXG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiAodmFsdWUgYXMgYW55KSkge1xuICAgICAgICAgIGlkVmFsdWUgPSAodmFsdWUgYXMgYW55KS52YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXBlZFtyZWxhdGlvblRvXS5wdXNoKGlkVmFsdWUpXG4gICAgICB9KVxuXG4gICAgICAvLyAyLiBGZXRjaCBwZXIgY29sbGVjdGlvblxuICAgICAgY29uc3QgZmV0Y2hlcyA9IE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpLm1hcChhc3luYyAoW2NvbGxlY3Rpb24sIGlkc10pID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgZHJhZnQ6IHRydWUsXG4gICAgICAgICAgbGltaXQ6IGlkcy5sZW5ndGgsXG4gICAgICAgICAgbG9jYWxlOiBjb2RlLFxuICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICBhbmQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgICBpbjogaWRzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb259YCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBib2R5OiBxcy5zdHJpbmdpZnkocXVlcnkpLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgJ1gtUGF5bG9hZC1IVFRQLU1ldGhvZC1PdmVycmlkZSc6ICdHRVQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgbGV0IGRvY3M6IGFueVtdID0gW11cbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICAgIGRvY3MgPSBkYXRhLmRvY3NcbiAgICAgICAgfVxuICAgICAgICAvLyBNYXAgZG9jcyBieSBJRCBmb3IgZmFzdCBsb29rdXBcbiAgICAgICAgY29uc3QgZG9jc0J5SWQgPSBkb2NzLnJlZHVjZSgoYWNjLCBkb2MpID0+IHtcbiAgICAgICAgICBhY2NbZG9jLmlkXSA9IGRvY1xuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSwge30pXG4gICAgICAgIHJldHVybiB7IGNvbGxlY3Rpb24sIGRvY3NCeUlkIH1cbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChmZXRjaGVzKVxuXG4gICAgICAvLyAzLiBCdWlsZCBsb29rdXBcbiAgICAgIGNvbnN0IGxvb2t1cDogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4gPSB7fVxuICAgICAgcmVzdWx0cy5mb3JFYWNoKCh7IGNvbGxlY3Rpb24sIGRvY3NCeUlkIH0pID0+IHtcbiAgICAgICAgbG9va3VwW2NvbGxlY3Rpb25dID0gZG9jc0J5SWRcbiAgICAgIH0pXG5cbiAgICAgIC8vIDQuIFJlY29uc3RydWN0IGluIGlucHV0IG9yZGVyLCBhZGQgcGxhY2Vob2xkZXJzIGlmIG1pc3NpbmdcbiAgICAgIGNvbnN0IHNvcnRlZERvY3MgPSBpdGVtcy5tYXAoKHsgcmVsYXRpb25UbywgdmFsdWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBkb2MgPSBsb29rdXBbcmVsYXRpb25Ub10/Llt2YWx1ZV0gfHwge1xuICAgICAgICAgIGlkOiB2YWx1ZSxcbiAgICAgICAgICBmaWxlbmFtZTogYCR7dCgnZ2VuZXJhbDp1bnRpdGxlZCcpfSAtIElEOiAke3ZhbHVlfWAsXG4gICAgICAgICAgaXNQbGFjZWhvbGRlcjogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByZWxhdGlvblRvLCB2YWx1ZTogZG9jIH1cbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBzb3J0ZWREb2NzXG4gICAgfSxcbiAgICBbYXBpLCBjb2RlLCBpMThuLmxhbmd1YWdlLCB0XSxcbiAgKVxuXG4gIGNvbnN0IG5vcm1hbGl6ZVZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBhbnkpOiBhbnkgPT4gbm9ybWFsaXplUmVsYXRpb25zaGlwVmFsdWUodmFsdWUsIHJlbGF0aW9uVG8pLFxuICAgIFtyZWxhdGlvblRvXSxcbiAgKVxuXG4gIGNvbnN0IG9uVXBsb2FkU3VjY2VzczogQnVsa1VwbG9hZENvbnRleHRbJ29uU3VjY2VzcyddID0gdXNlQ2FsbGJhY2soXG4gICAgKHVwbG9hZGVkRm9ybXMpID0+IHtcbiAgICAgIGNvbnN0IGlzUG9seSA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcblxuICAgICAgaWYgKGhhc01hbnkpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gdXBsb2FkZWRGb3Jtcy5tYXAoKGZvcm0pID0+XG4gICAgICAgICAgaXNQb2x5ID8geyByZWxhdGlvblRvOiBmb3JtLmNvbGxlY3Rpb25TbHVnLCB2YWx1ZTogZm9ybS5kb2MuaWQgfSA6IGZvcm0uZG9jLmlkLFxuICAgICAgICApXG4gICAgICAgIC8vIE5vcm1hbGl6ZSBleGlzdGluZyB2YWx1ZXMgYmVmb3JlIG1lcmdpbmdcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEV4aXN0aW5nID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogW11cbiAgICAgICAgY29uc3QgbWVyZ2VkVmFsdWUgPSBbLi4ubm9ybWFsaXplZEV4aXN0aW5nLCAuLi5uZXdWYWx1ZXNdXG4gICAgICAgIG9uQ2hhbmdlKG1lcmdlZFZhbHVlKVxuICAgICAgICBzZXRQb3B1bGF0ZWREb2NzKChjdXJyZW50RG9jcykgPT4gW1xuICAgICAgICAgIC4uLihjdXJyZW50RG9jcyB8fCBbXSksXG4gICAgICAgICAgLi4udXBsb2FkZWRGb3Jtcy5tYXAoKGZvcm0pID0+ICh7XG4gICAgICAgICAgICByZWxhdGlvblRvOiBmb3JtLmNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgdmFsdWU6IGZvcm0uZG9jLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RG9jID0gdXBsb2FkZWRGb3Jtc1swXVxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGlzUG9seVxuICAgICAgICAgID8geyByZWxhdGlvblRvOiBmaXJzdERvYy5jb2xsZWN0aW9uU2x1ZywgdmFsdWU6IGZpcnN0RG9jLmRvYy5pZCB9XG4gICAgICAgICAgOiBmaXJzdERvYy5kb2MuaWRcbiAgICAgICAgb25DaGFuZ2UobmV3VmFsdWUpXG4gICAgICAgIHNldFBvcHVsYXRlZERvY3MoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlbGF0aW9uVG86IGZpcnN0RG9jLmNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgdmFsdWU6IGZpcnN0RG9jLmRvYyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3ZhbHVlLCBvbkNoYW5nZSwgaGFzTWFueSwgcmVsYXRpb25Ubywgbm9ybWFsaXplVmFsdWVdLFxuICApXG5cbiAgY29uc3Qgb25Mb2NhbEZpbGVTZWxlY3Rpb24gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZmlsZUxpc3Q/OiBGaWxlTGlzdCkgPT4ge1xuICAgICAgbGV0IGZpbGVMaXN0VG9Vc2UgPSBmaWxlTGlzdFxuICAgICAgaWYgKCFoYXNNYW55ICYmIGZpbGVMaXN0ICYmIGZpbGVMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgZGF0YVRyYW5zZmVyID0gbmV3IERhdGFUcmFuc2ZlcigpXG4gICAgICAgIGRhdGFUcmFuc2Zlci5pdGVtcy5hZGQoZmlsZUxpc3RbMF0pXG4gICAgICAgIGZpbGVMaXN0VG9Vc2UgPSBkYXRhVHJhbnNmZXIuZmlsZXNcbiAgICAgIH1cbiAgICAgIGlmIChmaWxlTGlzdFRvVXNlKSB7XG4gICAgICAgIHNldEluaXRpYWxGaWxlcyhmaWxlTGlzdFRvVXNlKVxuICAgICAgfVxuICAgICAgLy8gVXNlIGFjdGl2ZVJlbGF0aW9uVG8gZm9yIHBvbHkgdXBsb2Fkcywgb3IgcmVsYXRpb25UbyBhcyBzdHJpbmcgZm9yIHNpbmdsZSBjb2xsZWN0aW9uXG4gICAgICBjb25zdCBjb2xsZWN0aW9uVG9Vc2UgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pID8gYWN0aXZlUmVsYXRpb25UbyA6IHJlbGF0aW9uVG9cblxuICAgICAgc2V0Q29sbGVjdGlvblNsdWcoY29sbGVjdGlvblRvVXNlKVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sbGVjdGlvblNsdWdzV2l0aENyZWF0ZVBlcm1pc3Npb24pKSB7XG4gICAgICAgIHNldFNlbGVjdGFibGVDb2xsZWN0aW9ucyhjb2xsZWN0aW9uU2x1Z3NXaXRoQ3JlYXRlUGVybWlzc2lvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBtYXhSb3dzID09PSAnbnVtYmVyJykge1xuICAgICAgICBzZXRNYXhGaWxlcyhtYXhSb3dzKVxuICAgICAgfVxuXG4gICAgICBvcGVuTW9kYWwoZHJhd2VyU2x1ZylcbiAgICB9LFxuICAgIFtcbiAgICAgIGhhc01hbnksXG4gICAgICByZWxhdGlvblRvLFxuICAgICAgYWN0aXZlUmVsYXRpb25UbyxcbiAgICAgIHNldENvbGxlY3Rpb25TbHVnLFxuICAgICAgY29sbGVjdGlvblNsdWdzV2l0aENyZWF0ZVBlcm1pc3Npb24sXG4gICAgICBtYXhSb3dzLFxuICAgICAgb3Blbk1vZGFsLFxuICAgICAgZHJhd2VyU2x1ZyxcbiAgICAgIHNldEluaXRpYWxGaWxlcyxcbiAgICAgIHNldFNlbGVjdGFibGVDb2xsZWN0aW9ucyxcbiAgICAgIHNldE1heEZpbGVzLFxuICAgIF0sXG4gIClcblxuICAvLyBvbmx5IGhhc01hbnkgY2FuIGJ1bGsgc2VsZWN0XG4gIGNvbnN0IG9uTGlzdEJ1bGtTZWxlY3QgPSBSZWFjdC51c2VDYWxsYmFjazxOb25OdWxsYWJsZTxMaXN0RHJhd2VyUHJvcHNbJ29uQnVsa1NlbGVjdCddPj4oXG4gICAgYXN5bmMgKGRvY3MpID0+IHtcbiAgICAgIGNvbnN0IGlzUG9seSA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IHNlbGVjdGVkRG9jSURzID0gW11cblxuICAgICAgZm9yIChjb25zdCBbaWQsIGlzU2VsZWN0ZWRdIG9mIGRvY3MpIHtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZERvY0lEcy5wdXNoKGlkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGl0ZW1zVG9Mb2FkID0gc2VsZWN0ZWREb2NJRHMubWFwKChpZCkgPT4gKHtcbiAgICAgICAgcmVsYXRpb25UbzogYWN0aXZlUmVsYXRpb25UbyxcbiAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IGxvYWRlZERvY3MgPSBhd2FpdCBwb3B1bGF0ZURvY3MoaXRlbXNUb0xvYWQpXG4gICAgICBpZiAobG9hZGVkRG9jcykge1xuICAgICAgICBzZXRQb3B1bGF0ZWREb2NzKChjdXJyZW50RG9jcykgPT4gWy4uLihjdXJyZW50RG9jcyB8fCBbXSksIC4uLmxvYWRlZERvY3NdKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdWYWx1ZXMgPSBzZWxlY3RlZERvY0lEcy5tYXAoKGlkKSA9PlxuICAgICAgICBpc1BvbHkgPyB7IHJlbGF0aW9uVG86IGFjdGl2ZVJlbGF0aW9uVG8sIHZhbHVlOiBpZCB9IDogaWQsXG4gICAgICApXG4gICAgICAvLyBOb3JtYWxpemUgZXhpc3RpbmcgdmFsdWVzIGJlZm9yZSBtZXJnaW5nXG4gICAgICBjb25zdCBub3JtYWxpemVkRXhpc3RpbmcgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBbXVxuICAgICAgb25DaGFuZ2UoWy4uLm5vcm1hbGl6ZWRFeGlzdGluZywgLi4ubmV3VmFsdWVzXSlcbiAgICAgIGNsb3NlTGlzdERyYXdlcigpXG4gICAgfSxcbiAgICBbYWN0aXZlUmVsYXRpb25UbywgY2xvc2VMaXN0RHJhd2VyLCBvbkNoYW5nZSwgcG9wdWxhdGVEb2NzLCB2YWx1ZSwgcmVsYXRpb25Ubywgbm9ybWFsaXplVmFsdWVdLFxuICApXG5cbiAgY29uc3Qgb25Eb2NDcmVhdGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgaXNQb2x5ID0gQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKVxuICAgICAgaWYgKGRhdGEuZG9jKSB7XG4gICAgICAgIHNldFBvcHVsYXRlZERvY3MoKGN1cnJlbnREb2NzKSA9PiBbXG4gICAgICAgICAgLi4uKGN1cnJlbnREb2NzIHx8IFtdKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiBhY3RpdmVSZWxhdGlvblRvLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGEuZG9jLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pXG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBpc1BvbHkgPyB7IHJlbGF0aW9uVG86IGFjdGl2ZVJlbGF0aW9uVG8sIHZhbHVlOiBkYXRhLmRvYy5pZCB9IDogZGF0YS5kb2MuaWRcbiAgICAgICAgb25DaGFuZ2UobmV3VmFsdWUpXG4gICAgICB9XG4gICAgICBjbG9zZUNyZWF0ZURvY0RyYXdlcigpXG4gICAgfSxcbiAgICBbY2xvc2VDcmVhdGVEb2NEcmF3ZXIsIGFjdGl2ZVJlbGF0aW9uVG8sIG9uQ2hhbmdlLCByZWxhdGlvblRvXSxcbiAgKVxuXG4gIGNvbnN0IG9uTGlzdFNlbGVjdCA9IHVzZUNhbGxiYWNrPE5vbk51bGxhYmxlPExpc3REcmF3ZXJQcm9wc1snb25TZWxlY3QnXT4+KFxuICAgIGFzeW5jICh7IGNvbGxlY3Rpb25TbHVnLCBkb2MgfSkgPT4ge1xuICAgICAgY29uc3QgaXNQb2x5ID0gQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKVxuXG4gICAgICBjb25zdCBsb2FkZWREb2NzID0gYXdhaXQgcG9wdWxhdGVEb2NzKFt7IHJlbGF0aW9uVG86IGNvbGxlY3Rpb25TbHVnLCB2YWx1ZTogZG9jLmlkIH1dKVxuICAgICAgY29uc3Qgc2VsZWN0ZWREb2MgPSBsb2FkZWREb2NzPy5bMF0gfHwgbnVsbFxuXG4gICAgICBzZXRQb3B1bGF0ZWREb2NzKChjdXJyZW50RG9jcykgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWREb2MpIHtcbiAgICAgICAgICBpZiAoaGFzTWFueSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi4oY3VycmVudERvY3MgfHwgW10pLCBzZWxlY3RlZERvY11cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtzZWxlY3RlZERvY11cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudERvY3NcbiAgICAgIH0pXG5cbiAgICAgIGlmIChoYXNNYW55KSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaXNQb2x5ID8geyByZWxhdGlvblRvOiBjb2xsZWN0aW9uU2x1ZywgdmFsdWU6IGRvYy5pZCB9IDogZG9jLmlkXG4gICAgICAgIC8vIE5vcm1hbGl6ZSBleGlzdGluZyB2YWx1ZXMgYmVmb3JlIG1lcmdpbmdcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEV4aXN0aW5nID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogW11cbiAgICAgICAgY29uc3QgdmFsdWVUb1VzZSA9IFsuLi5ub3JtYWxpemVkRXhpc3RpbmcsIG5ld1ZhbHVlXVxuICAgICAgICBvbkNoYW5nZSh2YWx1ZVRvVXNlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWVUb1VzZSA9IGlzUG9seSA/IHsgcmVsYXRpb25UbzogY29sbGVjdGlvblNsdWcsIHZhbHVlOiBkb2MuaWQgfSA6IGRvYy5pZFxuICAgICAgICBvbkNoYW5nZSh2YWx1ZVRvVXNlKVxuICAgICAgfVxuICAgICAgY2xvc2VMaXN0RHJhd2VyKClcbiAgICB9LFxuICAgIFtjbG9zZUxpc3REcmF3ZXIsIGhhc01hbnksIHBvcHVsYXRlRG9jcywgb25DaGFuZ2UsIHZhbHVlLCByZWxhdGlvblRvLCBub3JtYWxpemVWYWx1ZV0sXG4gIClcblxuICBjb25zdCByZWxvYWREb2MgPSBSZWFjdC51c2VDYWxsYmFjazxSZWxvYWREb2M+KFxuICAgIGFzeW5jIChkb2NJRCwgY29sbGVjdGlvblNsdWcpID0+IHtcbiAgICAgIGNvbnN0IGRvY3MgPSBhd2FpdCBwb3B1bGF0ZURvY3MoW3sgcmVsYXRpb25UbzogY29sbGVjdGlvblNsdWcsIHZhbHVlOiBkb2NJRCB9XSlcblxuICAgICAgaWYgKGRvY3NbMF0pIHtcbiAgICAgICAgbGV0IHVwZGF0ZWREb2NzVG9Qcm9wb2dhdGUgPSBbXVxuICAgICAgICBzZXRQb3B1bGF0ZWREb2NzKChjdXJyZW50RG9jcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRG9jSW5kZXggPSBjdXJyZW50RG9jcz8uZmluZEluZGV4KChkb2MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0V4aXN0aW5nID0gZG9jLnZhbHVlPy5pZCA9PT0gZG9jc1swXS52YWx1ZS5pZCB8fCBkb2MudmFsdWU/LmlzUGxhY2Vob2xkZXJcbiAgICAgICAgICAgIHJldHVybiBoYXNFeGlzdGluZyAmJiBkb2MucmVsYXRpb25UbyA9PT0gY29sbGVjdGlvblNsdWdcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChleGlzdGluZ0RvY0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWREb2NzID0gWy4uLmN1cnJlbnREb2NzXVxuICAgICAgICAgICAgdXBkYXRlZERvY3NbZXhpc3RpbmdEb2NJbmRleF0gPSBkb2NzWzBdXG4gICAgICAgICAgICB1cGRhdGVkRG9jc1RvUHJvcG9nYXRlID0gdXBkYXRlZERvY3NcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkRG9jc1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY3VycmVudERvY3NcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodXBkYXRlZERvY3NUb1Byb3BvZ2F0ZS5sZW5ndGggJiYgaGFzTWFueSkge1xuICAgICAgICAgIG9uQ2hhbmdlKHVwZGF0ZWREb2NzVG9Qcm9wb2dhdGUubWFwKChkb2MpID0+IGRvYy52YWx1ZT8uaWQpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbcG9wdWxhdGVEb2NzLCBvbkNoYW5nZSwgaGFzTWFueV0sXG4gIClcblxuICAvLyBvbmx5IGhhc01hbnkgY2FuIHJlb3JkZXJcbiAgY29uc3Qgb25SZW9yZGVyID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBpc1BvbHkgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pXG4gICAgICBjb25zdCBuZXdWYWx1ZVRvU2F2ZSA9IG5ld1ZhbHVlLm1hcCgoeyByZWxhdGlvblRvOiByZWwsIHZhbHVlIH0pID0+XG4gICAgICAgIGlzUG9seSA/IHsgcmVsYXRpb25UbzogcmVsLCB2YWx1ZTogdmFsdWUuaWQgfSA6IHZhbHVlLmlkLFxuICAgICAgKVxuICAgICAgb25DaGFuZ2UobmV3VmFsdWVUb1NhdmUpXG4gICAgICBzZXRQb3B1bGF0ZWREb2NzKG5ld1ZhbHVlKVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCByZWxhdGlvblRvXSxcbiAgKVxuXG4gIGNvbnN0IG9uUmVtb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZhbHVlPzogUG9wdWxhdGVkRG9jcykgPT4ge1xuICAgICAgY29uc3QgaXNQb2x5ID0gQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKVxuXG4gICAgICBpZiAoIW5ld1ZhbHVlIHx8IG5ld1ZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBvbkNoYW5nZShoYXNNYW55ID8gW10gOiBudWxsKVxuICAgICAgICBzZXRQb3B1bGF0ZWREb2NzKGhhc01hbnkgPyBbXSA6IG51bGwpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdWYWx1ZVRvU2F2ZSA9IG5ld1ZhbHVlLm1hcCgoeyByZWxhdGlvblRvOiByZWwsIHZhbHVlIH0pID0+XG4gICAgICAgIGlzUG9seSA/IHsgcmVsYXRpb25UbzogcmVsLCB2YWx1ZTogdmFsdWUuaWQgfSA6IHZhbHVlLmlkLFxuICAgICAgKVxuXG4gICAgICBvbkNoYW5nZShoYXNNYW55ID8gbmV3VmFsdWVUb1NhdmUgOiBuZXdWYWx1ZVRvU2F2ZVswXSlcbiAgICAgIHNldFBvcHVsYXRlZERvY3MobmV3VmFsdWUpXG4gICAgfSxcbiAgICBbb25DaGFuZ2UsIGhhc01hbnksIHJlbGF0aW9uVG9dLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhc3luYyBmdW5jdGlvbiBsb2FkSW5pdGlhbERvY3MoKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgbGV0IGl0ZW1zVG9Mb2FkOiBWYWx1ZVdpdGhSZWxhdGlvbltdID0gW11cbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgJiZcbiAgICAgICAgICAoKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3JlbGF0aW9uVG8nIGluIHZhbHVlKSB8fFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlWzBdID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAncmVsYXRpb25UbycgaW4gdmFsdWVbMF0pKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBGb3IgcG9seSB1cGxvYWRzLCB2YWx1ZSBzaG91bGQgYWxyZWFkeSBiZSBpbiB0aGUgZm9ybWF0IHsgcmVsYXRpb25UbywgdmFsdWUgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG4gICAgICAgICAgaXRlbXNUb0xvYWQgPSB2YWx1ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIFZhbHVlV2l0aFJlbGF0aW9uID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAncmVsYXRpb25UbycgaW4gdilcbiAgICAgICAgICAgIC5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyBhIHNpbXBsZSBJRCwgbm90IG5lc3RlZFxuICAgICAgICAgICAgICBsZXQgaWRWYWx1ZTogYW55ID0gdi52YWx1ZVxuICAgICAgICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICAgICAgaWRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBpZFZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgIGlkVmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAndmFsdWUnIGluIGlkVmFsdWVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWRWYWx1ZSA9IGlkVmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IHYucmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaWRWYWx1ZSBhcyBudW1iZXIgfCBzdHJpbmcsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBoZXJlIHRvIHNhdGlzZnkgVHlwZVNjcmlwdCB0aGF0IHJlbGF0aW9uVG8gaXMgYSBzdHJpbmdcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgICAgIC8vIEZvciBzaW5nbGUgY29sbGVjdGlvbiB1cGxvYWRzLCB3ZSBuZWVkIHRvIHdyYXAgdGhlIElEc1xuICAgICAgICAgICAgY29uc3QgaWRzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV1cbiAgICAgICAgICAgIGl0ZW1zVG9Mb2FkID0gaWRzLm1hcCgoaWQpOiBWYWx1ZVdpdGhSZWxhdGlvbiA9PiB7XG4gICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIGFjdHVhbCBJRCwgaGFuZGxpbmcgbmVzdGVkIG9iamVjdHNcbiAgICAgICAgICAgICAgbGV0IGlkVmFsdWU6IGFueSA9IGlkXG4gICAgICAgICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICAgICBpZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGlkVmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgaWRWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICd2YWx1ZScgaW4gaWRWYWx1ZVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZFZhbHVlID0gaWRWYWx1ZS52YWx1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaWRWYWx1ZSBhcyBudW1iZXIgfCBzdHJpbmcsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1zVG9Mb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBsb2FkZWREb2NzID0gYXdhaXQgcG9wdWxhdGVEb2NzKGl0ZW1zVG9Mb2FkKVxuXG4gICAgICAgICAgaWYgKGxvYWRlZERvY3MpIHtcbiAgICAgICAgICAgIHNldFBvcHVsYXRlZERvY3MobG9hZGVkRG9jcylcbiAgICAgICAgICAgIGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgcG9wdWxhdGVkIGRvY3Mgd2hlbiB2YWx1ZSBpcyBjbGVhcmVkXG4gICAgICAgIHNldFBvcHVsYXRlZERvY3MoW10pXG4gICAgICAgIGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBsb2FkIGlmIHZhbHVlIGhhcyBjaGFuZ2VkIGZyb20gd2hhdCB3ZSBsYXN0IGxvYWRlZFxuICAgIGNvbnN0IHZhbHVlQ2hhbmdlZCA9IGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgIT09IHZhbHVlXG4gICAgaWYgKHZhbHVlQ2hhbmdlZCkge1xuICAgICAgdm9pZCBsb2FkSW5pdGlhbERvY3MoKVxuICAgIH1cbiAgfSwgW3BvcHVsYXRlRG9jcywgdmFsdWUsIHJlbGF0aW9uVG9dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0T25TdWNjZXNzKG9uVXBsb2FkU3VjY2VzcylcbiAgfSwgW3ZhbHVlLCBwYXRoLCBvblVwbG9hZFN1Y2Nlc3MsIHNldE9uU3VjY2Vzc10pXG5cbiAgY29uc3Qgc2hvd0Ryb3B6b25lID1cbiAgICAhdmFsdWUgfHxcbiAgICAoaGFzTWFueSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiAodHlwZW9mIG1heFJvd3MgIT09ICdudW1iZXInIHx8IHZhbHVlLmxlbmd0aCA8IG1heFJvd3MpKSB8fFxuICAgICghaGFzTWFueSAmJiBwb3B1bGF0ZWREb2NzPy5bMF0gJiYgdHlwZW9mIHBvcHVsYXRlZERvY3NbMF0udmFsdWUgPT09ICd1bmRlZmluZWQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGZpZWxkQmFzZUNsYXNzLFxuICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc2hvd0Vycm9yICYmICdlcnJvcicsXG4gICAgICAgIHJlYWRPbmx5ICYmICdyZWFkLW9ubHknLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBpZD17YGZpZWxkLSR7cGF0aD8ucmVwbGFjZSgvXFwuL2csICdfXycpfWB9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICBDdXN0b21Db21wb25lbnQ9e0xhYmVsfVxuICAgICAgICBGYWxsYmFjaz17XG4gICAgICAgICAgPEZpZWxkTGFiZWwgbGFiZWw9e2xhYmVsfSBsb2NhbGl6ZWQ9e2xvY2FsaXplZH0gcGF0aD17cGF0aH0gcmVxdWlyZWQ9e3JlcXVpcmVkfSAvPlxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge0JlZm9yZUlucHV0fVxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Ryb3B6b25lQW5kVXBsb2FkYH0+XG4gICAgICAgIHtoYXNNYW55ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtwb3B1bGF0ZWREb2NzICYmIHBvcHVsYXRlZERvY3M/Lmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgIDxVcGxvYWRDb21wb25lbnRIYXNNYW55XG4gICAgICAgICAgICAgICAgZGlzcGxheVByZXZpZXc9e2Rpc3BsYXlQcmV2aWV3fVxuICAgICAgICAgICAgICAgIGZpbGVEb2NzPXtwb3B1bGF0ZWREb2NzfVxuICAgICAgICAgICAgICAgIGlzU29ydGFibGU9e2lzU29ydGFibGUgJiYgIXJlYWRPbmx5fVxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXtvblJlbW92ZX1cbiAgICAgICAgICAgICAgICBvblJlb3JkZXI9e29uUmVvcmRlcn1cbiAgICAgICAgICAgICAgICByZWFkb25seT17cmVhZE9ubHl9XG4gICAgICAgICAgICAgICAgcmVsb2FkRG9jPXtyZWxvYWREb2N9XG4gICAgICAgICAgICAgICAgc2VydmVyVVJMPXtzZXJ2ZXJVUkx9XG4gICAgICAgICAgICAgICAgc2hvd0NvbGxlY3Rpb25TbHVnPXtBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xvYWRpbmdSb3dzYH0+XG4gICAgICAgICAgICAgICAge3ZhbHVlLm1hcCgoaWQpID0+IChcbiAgICAgICAgICAgICAgICAgIDxTaGltbWVyRWZmZWN0IGhlaWdodD1cIjQwcHhcIiBrZXk9e3R5cGVvZiBpZCA9PT0gJ29iamVjdCcgPyBpZC52YWx1ZSA6IGlkfSAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IWhhc01hbnkgJiYgdmFsdWUgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtwb3B1bGF0ZWREb2NzICYmIHBvcHVsYXRlZERvY3M/Lmxlbmd0aCA+IDAgJiYgcG9wdWxhdGVkRG9jc1swXS52YWx1ZSA/IChcbiAgICAgICAgICAgICAgPFVwbG9hZENvbXBvbmVudEhhc09uZVxuICAgICAgICAgICAgICAgIGRpc3BsYXlQcmV2aWV3PXtkaXNwbGF5UHJldmlld31cbiAgICAgICAgICAgICAgICBmaWxlRG9jPXtwb3B1bGF0ZWREb2NzWzBdfVxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXtvblJlbW92ZX1cbiAgICAgICAgICAgICAgICByZWFkb25seT17cmVhZE9ubHl9XG4gICAgICAgICAgICAgICAgcmVsb2FkRG9jPXtyZWxvYWREb2N9XG4gICAgICAgICAgICAgICAgc2VydmVyVVJMPXtzZXJ2ZXJVUkx9XG4gICAgICAgICAgICAgICAgc2hvd0NvbGxlY3Rpb25TbHVnPXtBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IHBvcHVsYXRlZERvY3MgJiYgdmFsdWUgJiYgIXBvcHVsYXRlZERvY3M/LlswXT8udmFsdWUgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3QoJ2dlbmVyYWw6dW50aXRsZWQnKX0gLSBJRDoge3ZhbHVlfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxTaGltbWVyRWZmZWN0IGhlaWdodD1cIjYycHhcIiAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtzaG93RHJvcHpvbmUgPyAoXG4gICAgICAgICAgPERyb3B6b25lXG4gICAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHkgfHwgIWNhbkNyZWF0ZX1cbiAgICAgICAgICAgIG11bHRpcGxlRmlsZXM9e2hhc01hbnl9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25Mb2NhbEZpbGVTZWxlY3Rpb259XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Ryb3B6b25lQ29udGVudGB9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJvcHpvbmVDb250ZW50X19idXR0b25zYH0+XG4gICAgICAgICAgICAgICAge2NhbkNyZWF0ZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NyZWF0ZU5ld1RvZ2dsZXJgfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyZWFkT25seSB8fCAhY2FuQ3JlYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc01hbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkxvY2FsRmlsZVNlbGVjdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkNyZWF0ZURvY0RyYXdlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpjcmVhdGVOZXcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJvcHpvbmVDb250ZW50X19vclRleHRgfT5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpvcicpfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwicGlsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xpc3RUb2dnbGVyYH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyZWFkT25seX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29wZW5MaXN0RHJhd2VyfVxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dCgnZmllbGRzOmNob29zZUZyb21FeGlzdGluZycpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxDcmVhdGVEb2NEcmF3ZXIgb25TYXZlPXtvbkRvY0NyZWF0ZX0gLz5cbiAgICAgICAgICAgICAgICA8TGlzdERyYXdlclxuICAgICAgICAgICAgICAgICAgYWxsb3dDcmVhdGU9e2NhbkNyZWF0ZX1cbiAgICAgICAgICAgICAgICAgIGVuYWJsZVJvd1NlbGVjdGlvbnM9e2hhc01hbnl9XG4gICAgICAgICAgICAgICAgICBvbkJ1bGtTZWxlY3Q9e29uTGlzdEJ1bGtTZWxlY3R9XG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17b25MaXN0U2VsZWN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHtjYW5DcmVhdGUgJiYgIXJlYWRPbmx5ICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RyYWdBbmREcm9wVGV4dGB9PlxuICAgICAgICAgICAgICAgICAge3QoJ2dlbmVyYWw6b3InKX0ge3QoJ3VwbG9hZDpkcmFnQW5kRHJvcCcpfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvRHJvcHpvbmU+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHshcmVhZE9ubHkgJiZcbiAgICAgICAgICAgICFwb3B1bGF0ZWREb2NzICYmXG4gICAgICAgICAgICAoIXZhbHVlIHx8XG4gICAgICAgICAgICAgIHR5cGVvZiBtYXhSb3dzICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoIDwgbWF4Um93cykpID8gKFxuICAgICAgICAgICAgICA8U2hpbW1lckVmZmVjdCBoZWlnaHQ9XCI0MHB4XCIgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7QWZ0ZXJJbnB1dH1cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgRmFsbGJhY2s9ezxGaWVsZERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gcGF0aD17cGF0aH0gLz59XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIvKipcbiAqIE5vcm1hbGl6ZXMgcmVsYXRpb25zaGlwL3VwbG9hZCBmaWVsZCB2YWx1ZXMgYnkgZXh0cmFjdGluZyBJRHMgZnJvbSBuZXN0ZWQgb2JqZWN0c1xuICogYW5kIHJldHVybmluZyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQgYmFzZWQgb24gd2hldGhlciB0aGUgZmllbGQgaXMgcG9seW1vcnBoaWMuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIG5vcm1hbGl6ZSAoY2FuIGJlIGEgc2ltcGxlIElELCBvciBhbiBvYmplY3Qgd2l0aCByZWxhdGlvblRvIGFuZCB2YWx1ZSlcbiAqIEBwYXJhbSByZWxhdGlvblRvIC0gVGhlIHJlbGF0aW9uVG8gY29uZmlnIChzdHJpbmcgZm9yIG1vbm9tb3JwaGljLCBhcnJheSBmb3IgcG9seW1vcnBoaWMpXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCB2YWx1ZSAoc2ltcGxlIElEIGZvciBtb25vbW9ycGhpYywge3JlbGF0aW9uVG8sIHZhbHVlfSBmb3IgcG9seW1vcnBoaWMpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE1vbm9tb3JwaGljIGZpZWxkIC0gcmV0dXJucyBzaW1wbGUgSURcbiAqIG5vcm1hbGl6ZVJlbGF0aW9uc2hpcFZhbHVlKCcxMjMnLCAndXNlcnMnKSAvLyAnMTIzJ1xuICogbm9ybWFsaXplUmVsYXRpb25zaGlwVmFsdWUoeyByZWxhdGlvblRvOiAndXNlcnMnLCB2YWx1ZTogJzEyMycgfSwgJ3VzZXJzJykgLy8gJzEyMydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUG9seW1vcnBoaWMgZmllbGQgLSByZXR1cm5zIHtyZWxhdGlvblRvLCB2YWx1ZX1cbiAqIG5vcm1hbGl6ZVJlbGF0aW9uc2hpcFZhbHVlKCcxMjMnLCBbJ3VzZXJzJywgJ3Bvc3RzJ10pIC8vICcxMjMnIChrZXB0IGFzLWlzLCBubyByZWxhdGlvblRvIHRvIGluZmVyKVxuICogbm9ybWFsaXplUmVsYXRpb25zaGlwVmFsdWUoeyByZWxhdGlvblRvOiAndXNlcnMnLCB2YWx1ZTogJzEyMycgfSwgWyd1c2VycycsICdwb3N0cyddKVxuICogLy8geyByZWxhdGlvblRvOiAndXNlcnMnLCB2YWx1ZTogJzEyMycgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIYW5kbGVzIG5lc3RlZCB2YWx1ZSBvYmplY3RzIChwb3B1bGF0ZWQgZG9jdW1lbnRzKVxuICogbm9ybWFsaXplUmVsYXRpb25zaGlwVmFsdWUoXG4gKiAgIHsgcmVsYXRpb25UbzogJ3VzZXJzJywgdmFsdWU6IHsgaWQ6ICcxMjMnLCBuYW1lOiAnSm9obicgfSB9LFxuICogICBbJ3VzZXJzJywgJ3Bvc3RzJ11cbiAqIClcbiAqIC8vIHsgcmVsYXRpb25UbzogJ3VzZXJzJywgdmFsdWU6ICcxMjMnIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJlbGF0aW9uc2hpcFZhbHVlKHZhbHVlOiBhbnksIHJlbGF0aW9uVG86IHN0cmluZyB8IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3QgaXNQb2x5ID0gQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKVxuXG4gIC8vIElmIGl0J3MgYWxyZWFkeSBhIHNpbXBsZSBJRCAoc3RyaW5nIG9yIG51bWJlciksIHJldHVybiBhcy1pcyBmb3Igbm9uLXBvbHkgb3Igd3JhcCBmb3IgcG9seVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyBJZiBpdCdzIGFuIG9iamVjdCB3aXRoIHJlbGF0aW9uVG8gYW5kIHZhbHVlXG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdyZWxhdGlvblRvJyBpbiB2YWx1ZSAmJiAndmFsdWUnIGluIHZhbHVlKSB7XG4gICAgLy8gRXh0cmFjdCB0aGUgYWN0dWFsIElEIHZhbHVlLCBoYW5kbGluZyBuZXN0ZWQgb2JqZWN0c1xuICAgIGxldCBpZFZhbHVlOiBhbnkgPSB2YWx1ZS52YWx1ZVxuICAgIHdoaWxlIChpZFZhbHVlICYmIHR5cGVvZiBpZFZhbHVlID09PSAnb2JqZWN0JyAmJiBpZFZhbHVlICE9PSBudWxsICYmICd2YWx1ZScgaW4gaWRWYWx1ZSkge1xuICAgICAgaWRWYWx1ZSA9IGlkVmFsdWUudmFsdWVcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbmVzdGVkIHZhbHVlIGlzIGEgcG9wdWxhdGVkIGRvY3VtZW50IHdpdGggYW4gSUQsIGV4dHJhY3QgaXRcbiAgICBpZiAoaWRWYWx1ZSAmJiB0eXBlb2YgaWRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgaWRWYWx1ZSAhPT0gbnVsbCAmJiAnaWQnIGluIGlkVmFsdWUpIHtcbiAgICAgIGlkVmFsdWUgPSBpZFZhbHVlLmlkXG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoZSBub3JtYWxpemVkIHN0cnVjdHVyZVxuICAgIGlmIChpc1BvbHkpIHtcbiAgICAgIHJldHVybiB7IHJlbGF0aW9uVG86IHZhbHVlLnJlbGF0aW9uVG8sIHZhbHVlOiBpZFZhbHVlIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkVmFsdWVcbiAgfVxuXG4gIC8vIElmIGl0J3MgYSBwb3B1bGF0ZWQgZG9jdW1lbnQgb2JqZWN0IChoYXMgaWQgYnV0IG5vIHJlbGF0aW9uVG8vdmFsdWUgc3RydWN0dXJlKVxuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmlkXG4gIH1cblxuICByZXR1cm4gdmFsdWVcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBKc29uT2JqZWN0IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBEcmFnZ2FibGVTb3J0YWJsZUl0ZW0gfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9EcmFnZ2FibGVTb3J0YWJsZS9EcmFnZ2FibGVTb3J0YWJsZUl0ZW0vaW5kZXguanMnXG5pbXBvcnQgeyBEcmFnZ2FibGVTb3J0YWJsZSB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0RyYWdnYWJsZVNvcnRhYmxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhZ0hhbmRsZUljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9EcmFnSGFuZGxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwQ29udGVudCB9IGZyb20gJy4uL1JlbGF0aW9uc2hpcENvbnRlbnQvaW5kZXguanMnXG5pbXBvcnQgeyBVcGxvYWRDYXJkIH0gZnJvbSAnLi4vVXBsb2FkQ2FyZC9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3VwbG9hZCB1cGxvYWQtLWhhcy1tYW55J1xuXG5pbXBvcnQgeyBnZXRCZXN0Rml0RnJvbVNpemVzLCBpc0ltYWdlIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5pbXBvcnQgdHlwZSB7IFJlbG9hZERvYyB9IGZyb20gJy4uL3R5cGVzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgZGlzcGxheVByZXZpZXc/OiBib29sZWFuXG4gIHJlYWRvbmx5IGZpbGVEb2NzOiB7XG4gICAgcmVsYXRpb25Ubzogc3RyaW5nXG4gICAgdmFsdWU6IEpzb25PYmplY3RcbiAgfVtdXG4gIHJlYWRvbmx5IGlzU29ydGFibGU/OiBib29sZWFuXG4gIHJlYWRvbmx5IG9uUmVtb3ZlPzogKHZhbHVlKSA9PiB2b2lkXG4gIHJlYWRvbmx5IG9uUmVvcmRlcj86ICh2YWx1ZSkgPT4gdm9pZFxuICByZWFkb25seSByZWFkb25seT86IGJvb2xlYW5cbiAgcmVhZG9ubHkgcmVsb2FkRG9jOiBSZWxvYWREb2NcbiAgcmVhZG9ubHkgc2VydmVyVVJMOiBzdHJpbmdcbiAgcmVhZG9ubHkgc2hvd0NvbGxlY3Rpb25TbHVnPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gVXBsb2FkQ29tcG9uZW50SGFzTWFueShwcm9wczogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBkaXNwbGF5UHJldmlldyxcbiAgICBmaWxlRG9jcyxcbiAgICBpc1NvcnRhYmxlLFxuICAgIG9uUmVtb3ZlLFxuICAgIG9uUmVvcmRlcixcbiAgICByZWFkb25seSxcbiAgICByZWxvYWREb2MsXG4gICAgc2VydmVyVVJMLFxuICAgIHNob3dDb2xsZWN0aW9uU2x1ZyA9IGZhbHNlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBtb3ZlUm93ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG1vdmVGcm9tSW5kZXg6IG51bWJlciwgbW92ZVRvSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKG1vdmVGcm9tSW5kZXggPT09IG1vdmVUb0luZGV4KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB1cGRhdGVkQXJyYXkgPSBbLi4uZmlsZURvY3NdXG4gICAgICBjb25zdCBbaXRlbV0gPSB1cGRhdGVkQXJyYXkuc3BsaWNlKG1vdmVGcm9tSW5kZXgsIDEpXG5cbiAgICAgIHVwZGF0ZWRBcnJheS5zcGxpY2UobW92ZVRvSW5kZXgsIDAsIGl0ZW0pXG5cbiAgICAgIG9uUmVvcmRlcih1cGRhdGVkQXJyYXkpXG4gICAgfSxcbiAgICBbZmlsZURvY3MsIG9uUmVvcmRlcl0sXG4gIClcblxuICBjb25zdCByZW1vdmVJdGVtID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRBcnJheSA9IFsuLi4oZmlsZURvY3MgfHwgW10pXVxuICAgICAgdXBkYXRlZEFycmF5LnNwbGljZShpbmRleCwgMSlcbiAgICAgIG9uUmVtb3ZlKHVwZGF0ZWRBcnJheS5sZW5ndGggPT09IDAgPyBbXSA6IHVwZGF0ZWRBcnJheSlcbiAgICB9LFxuICAgIFtmaWxlRG9jcywgb25SZW1vdmVdLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT5cbiAgICAgIDxEcmFnZ2FibGVTb3J0YWJsZVxuICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RyYWdnYWJsZS1yb3dzYH1cbiAgICAgICAgaWRzPXtmaWxlRG9jcz8ubWFwKCh7IHZhbHVlIH0pID0+IFN0cmluZyh2YWx1ZS5pZCkpfVxuICAgICAgICBvbkRyYWdFbmQ9eyh7IG1vdmVGcm9tSW5kZXgsIG1vdmVUb0luZGV4IH0pID0+IG1vdmVSb3cobW92ZUZyb21JbmRleCwgbW92ZVRvSW5kZXgpfVxuICAgICAgPlxuICAgICAgICB7ZmlsZURvY3MubWFwKCh7IHJlbGF0aW9uVG8sIHZhbHVlIH0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBTdHJpbmcodmFsdWUuaWQpXG4gICAgICAgICAgbGV0IHNyYzogc3RyaW5nXG4gICAgICAgICAgbGV0IHRodW1ibmFpbFNyYzogc3RyaW5nXG5cbiAgICAgICAgICBpZiAodmFsdWUudXJsKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzcmMgPSBuZXcgVVJMKHZhbHVlLnVybCwgc2VydmVyVVJMKS50b1N0cmluZygpXG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgc3JjID0gYCR7c2VydmVyVVJMfSR7dmFsdWUudXJsfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUudGh1bWJuYWlsVVJMKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aHVtYm5haWxTcmMgPSBuZXcgVVJMKHZhbHVlLnRodW1ibmFpbFVSTCwgc2VydmVyVVJMKS50b1N0cmluZygpXG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgdGh1bWJuYWlsU3JjID0gYCR7c2VydmVyVVJMfSR7dmFsdWUudGh1bWJuYWlsVVJMfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNJbWFnZSh2YWx1ZS5taW1lVHlwZSkpIHtcbiAgICAgICAgICAgIHRodW1ibmFpbFNyYyA9IGdldEJlc3RGaXRGcm9tU2l6ZXMoe1xuICAgICAgICAgICAgICBzaXplczogdmFsdWUuc2l6ZXMsXG4gICAgICAgICAgICAgIHRodW1ibmFpbFVSTDogdGh1bWJuYWlsU3JjLFxuICAgICAgICAgICAgICB1cmw6IHNyYyxcbiAgICAgICAgICAgICAgd2lkdGg6IHZhbHVlLndpZHRoLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERyYWdnYWJsZVNvcnRhYmxlSXRlbSBkaXNhYmxlZD17IWlzU29ydGFibGUgfHwgcmVhZG9ubHl9IGlkPXtpZH0ga2V5PXtpZH0+XG4gICAgICAgICAgICAgIHsoZHJhZ2dhYmxlU29ydGFibGVJdGVtUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fZHJhZ0l0ZW1gLFxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wcyAmJiBpc1NvcnRhYmxlICYmIGAke2Jhc2VDbGFzc30tLWhhcy1kcmFnLWhhbmRsZWAsXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgICAgICAgICAgIHJlZj17ZHJhZ2dhYmxlU29ydGFibGVJdGVtUHJvcHMuc2V0Tm9kZVJlZn1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogZHJhZ2dhYmxlU29ydGFibGVJdGVtUHJvcHMudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBkcmFnZ2FibGVTb3J0YWJsZUl0ZW1Qcm9wcy50cmFuc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IGRyYWdnYWJsZVNvcnRhYmxlSXRlbVByb3BzLmlzRHJhZ2dpbmcgPyAxIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8VXBsb2FkQ2FyZCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAge2RyYWdnYWJsZVNvcnRhYmxlSXRlbVByb3BzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RyYWdgfVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLmRyYWdnYWJsZVNvcnRhYmxlSXRlbVByb3BzLmF0dHJpYnV0ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4uZHJhZ2dhYmxlU29ydGFibGVJdGVtUHJvcHMubGlzdGVuZXJzfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcmFnSGFuZGxlSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICAgIDxSZWxhdGlvbnNoaXBDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgYWxsb3dFZGl0PXshcmVhZG9ubHl9XG4gICAgICAgICAgICAgICAgICAgICAgYWxsb3dSZW1vdmU9eyFyZWFkb25seX1cbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9eyh2YWx1ZT8uYWx0IHx8IHZhbHVlPy5maWxlbmFtZSkgYXMgc3RyaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIGJ5dGVTaXplPXt2YWx1ZS5maWxlc2l6ZSBhcyBudW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWc9e3JlbGF0aW9uVG99XG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVByZXZpZXc9e2Rpc3BsYXlQcmV2aWV3fVxuICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPXt2YWx1ZS5maWxlbmFtZSBhcyBzdHJpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlPXt2YWx1ZT8ubWltZVR5cGUgYXMgc3RyaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiByZW1vdmVJdGVtKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICByZWxvYWREb2M9e3JlbG9hZERvY31cbiAgICAgICAgICAgICAgICAgICAgICBzaG93Q29sbGVjdGlvblNsdWc9e3Nob3dDb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgICAgICAgICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWxTcmM9e3RodW1ibmFpbFNyY31cbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQXQ9e3ZhbHVlLnVwZGF0ZWRBdH1cbiAgICAgICAgICAgICAgICAgICAgICB3aXRoTWV0YT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgeD17dmFsdWU/LndpZHRoIGFzIG51bWJlcn1cbiAgICAgICAgICAgICAgICAgICAgICB5PXt2YWx1ZT8uaGVpZ2h0IGFzIG51bWJlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvVXBsb2FkQ2FyZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRHJhZ2dhYmxlU29ydGFibGVJdGVtPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8L0RyYWdnYWJsZVNvcnRhYmxlPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBUeXBlV2l0aElEIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlc2l6ZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFJlbG9hZERvYyB9IGZyb20gJy4uL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlciB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0RvY3VtZW50RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGlsbCB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL1BpbGwvaW5kZXguanMnXG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9UaHVtYm5haWwvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3VwbG9hZC1yZWxhdGlvbnNoaXAtZGV0YWlscydcblxudHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgYWxsb3dFZGl0PzogYm9vbGVhblxuICByZWFkb25seSBhbGxvd1JlbW92ZT86IGJvb2xlYW5cbiAgcmVhZG9ubHkgYWx0OiBzdHJpbmdcbiAgcmVhZG9ubHkgYnl0ZVNpemU6IG51bWJlclxuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgY29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICByZWFkb25seSBkaXNwbGF5UHJldmlldz86IGJvb2xlYW5cbiAgcmVhZG9ubHkgZmlsZW5hbWU6IHN0cmluZ1xuICByZWFkb25seSBpZD86IG51bWJlciB8IHN0cmluZ1xuICByZWFkb25seSBtaW1lVHlwZTogc3RyaW5nXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHJlbG9hZERvYzogUmVsb2FkRG9jXG4gIHJlYWRvbmx5IHNob3dDb2xsZWN0aW9uU2x1Zz86IGJvb2xlYW5cbiAgcmVhZG9ubHkgc3JjOiBzdHJpbmdcbiAgcmVhZG9ubHkgdGh1bWJuYWlsU3JjOiBzdHJpbmdcbiAgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nXG4gIHJlYWRvbmx5IHdpdGhNZXRhPzogYm9vbGVhblxuICByZWFkb25seSB4PzogbnVtYmVyXG4gIHJlYWRvbmx5IHk/OiBudW1iZXJcbn1cbmV4cG9ydCBmdW5jdGlvbiBSZWxhdGlvbnNoaXBDb250ZW50KHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgYWxsb3dFZGl0LFxuICAgIGFsbG93UmVtb3ZlLFxuICAgIGFsdCxcbiAgICBieXRlU2l6ZSxcbiAgICBjbGFzc05hbWUsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZGlzcGxheVByZXZpZXcsXG4gICAgZmlsZW5hbWUsXG4gICAgbWltZVR5cGUsXG4gICAgb25SZW1vdmUsXG4gICAgcmVsb2FkRG9jLFxuICAgIHNob3dDb2xsZWN0aW9uU2x1ZyA9IGZhbHNlLFxuICAgIHNyYyxcbiAgICB0aHVtYm5haWxTcmMsXG4gICAgdXBkYXRlZEF0LFxuICAgIHdpdGhNZXRhID0gdHJ1ZSxcbiAgICB4LFxuICAgIHksXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9XG4gICAgJ2NvbGxlY3Rpb25zJyBpbiBjb25maWdcbiAgICAgID8gY29uZmlnLmNvbGxlY3Rpb25zLmZpbmQoKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uc2x1ZyA9PT0gY29sbGVjdGlvblNsdWcpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IFtEb2N1bWVudERyYXdlciwgXywgeyBvcGVuRHJhd2VyIH1dID0gdXNlRG9jdW1lbnREcmF3ZXIoe1xuICAgIGlkOiBpZCA/PyB1bmRlZmluZWQsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gIH0pXG5cbiAgY29uc3Qgb25TYXZlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHsgZG9jIH06IHsgZG9jOiBUeXBlV2l0aElEIH0pID0+IHJlbG9hZERvYyhkb2MuaWQsIGNvbGxlY3Rpb25TbHVnKSxcbiAgICBbcmVsb2FkRG9jLCBjb2xsZWN0aW9uU2x1Z10sXG4gIClcblxuICBmdW5jdGlvbiBnZW5lcmF0ZU1ldGFUZXh0KG1pbWVUeXBlOiBzdHJpbmcsIHNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VjdGlvbnM6IHN0cmluZ1tdID0gW11cbiAgICBpZiAoc2l6ZSkge1xuICAgICAgc2VjdGlvbnMucHVzaChmb3JtYXRGaWxlc2l6ZShzaXplKSlcbiAgICB9XG5cbiAgICBpZiAoeCAmJiB5KSB7XG4gICAgICBzZWN0aW9ucy5wdXNoKGAke3h9eCR7eX1gKVxuICAgIH1cblxuICAgIGlmIChtaW1lVHlwZSkge1xuICAgICAgc2VjdGlvbnMucHVzaChtaW1lVHlwZSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbnMuam9pbignIOKAlCAnKVxuICB9XG5cbiAgY29uc3QgbWV0YVRleHQgPSB3aXRoTWV0YSA/IGdlbmVyYXRlTWV0YVRleHQobWltZVR5cGUsIGJ5dGVTaXplKSA6ICcnXG4gIGNvbnN0IHByZXZpZXdBbGxvd2VkID0gZGlzcGxheVByZXZpZXcgPz8gY29sbGVjdGlvbkNvbmZpZz8udXBsb2FkPy5kaXNwbGF5UHJldmlldyA/PyB0cnVlXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbWFnZUFuZERldGFpbHNgfT5cbiAgICAgICAge3ByZXZpZXdBbGxvd2VkICYmIChcbiAgICAgICAgICA8VGh1bWJuYWlsQ29tcG9uZW50XG4gICAgICAgICAgICBhbHQ9e2FsdH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGh1bWJuYWlsYH1cbiAgICAgICAgICAgIGZpbGVuYW1lPXtmaWxlbmFtZX1cbiAgICAgICAgICAgIGZpbGVTcmM9e3RodW1ibmFpbFNyY31cbiAgICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2NvbGxlY3Rpb25Db25maWc/LnVwbG9hZD8uY2FjaGVUYWdzICYmIHVwZGF0ZWRBdH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Nob3dDb2xsZWN0aW9uU2x1ZyAmJiBjb2xsZWN0aW9uQ29uZmlnID8gKFxuICAgICAgICAgIDxQaWxsIHNpemU9XCJzbWFsbFwiPntnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5zaW5ndWxhciwgaTE4bil9PC9QaWxsPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RldGFpbHNgfT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZpbGVuYW1lYH0+XG4gICAgICAgICAgICB7c3JjID8gKFxuICAgICAgICAgICAgICA8YSBocmVmPXtzcmN9IHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgIHtmaWxlbmFtZX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZmlsZW5hbWVcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHt3aXRoTWV0YSA/IDxwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbWV0YWB9PnttZXRhVGV4dH08L3A+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAge2FsbG93RWRpdCAhPT0gZmFsc2UgfHwgYWxsb3dSZW1vdmUgIT09IGZhbHNlID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PlxuICAgICAgICAgIHthbGxvd0VkaXQgIT09IGZhbHNlID8gKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2VkaXRgfVxuICAgICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICAgIGljb25TdHlsZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXtvcGVuRHJhd2VyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7YWxsb3dSZW1vdmUgIT09IGZhbHNlID8gKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3JlbW92ZWB9XG4gICAgICAgICAgICAgIGljb249XCJ4XCJcbiAgICAgICAgICAgICAgaWNvblN0eWxlPVwibm9uZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uUmVtb3ZlKCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxEb2N1bWVudERyYXdlciBvblNhdmU9e29uU2F2ZX0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3VwbG9hZC1maWVsZC1jYXJkJ1xuXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBzaXplPzogJ21lZGl1bScgfCAnc21hbGwnXG59XG5leHBvcnQgZnVuY3Rpb24gVXBsb2FkQ2FyZCh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIHNpemUgPSAnbWVkaXVtJyB9OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWUsIGAke2Jhc2VDbGFzc30tLXNpemUtJHtzaXplfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBKc29uT2JqZWN0IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0QmVzdEZpdEZyb21TaXplcywgaXNJbWFnZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFJlbG9hZERvYyB9IGZyb20gJy4uL3R5cGVzLmpzJ1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IFJlbGF0aW9uc2hpcENvbnRlbnQgfSBmcm9tICcuLi9SZWxhdGlvbnNoaXBDb250ZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgVXBsb2FkQ2FyZCB9IGZyb20gJy4uL1VwbG9hZENhcmQvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICd1cGxvYWQgdXBsb2FkLS1oYXMtb25lJ1xuXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgZGlzcGxheVByZXZpZXc/OiBib29sZWFuXG4gIHJlYWRvbmx5IGZpbGVEb2M6IHtcbiAgICByZWxhdGlvblRvOiBzdHJpbmdcbiAgICB2YWx1ZTogSnNvbk9iamVjdFxuICB9XG4gIHJlYWRvbmx5IG9uUmVtb3ZlPzogKCkgPT4gdm9pZFxuICByZWFkb25seSByZWFkb25seT86IGJvb2xlYW5cbiAgcmVhZG9ubHkgcmVsb2FkRG9jOiBSZWxvYWREb2NcbiAgcmVhZG9ubHkgc2VydmVyVVJMOiBzdHJpbmdcbiAgcmVhZG9ubHkgc2hvd0NvbGxlY3Rpb25TbHVnPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gVXBsb2FkQ29tcG9uZW50SGFzT25lKHByb3BzOiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc3BsYXlQcmV2aWV3LFxuICAgIGZpbGVEb2MsXG4gICAgb25SZW1vdmUsXG4gICAgcmVhZG9ubHksXG4gICAgcmVsb2FkRG9jLFxuICAgIHNlcnZlclVSTCxcbiAgICBzaG93Q29sbGVjdGlvblNsdWcgPSBmYWxzZSxcbiAgfSA9IHByb3BzXG4gIGNvbnN0IHsgcmVsYXRpb25UbywgdmFsdWUgfSA9IGZpbGVEb2NcbiAgY29uc3QgaWQgPSBTdHJpbmcodmFsdWU/LmlkKVxuXG4gIGxldCBzcmM6IHN0cmluZ1xuICBsZXQgdGh1bWJuYWlsU3JjOiBzdHJpbmdcblxuICBpZiAodmFsdWUudXJsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNyYyA9IG5ldyBVUkwodmFsdWUudXJsLCBzZXJ2ZXJVUkwpLnRvU3RyaW5nKClcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNyYyA9IGAke3NlcnZlclVSTH0ke3ZhbHVlLnVybH1gXG4gICAgfVxuICB9XG5cbiAgaWYgKHZhbHVlLnRodW1ibmFpbFVSTCkge1xuICAgIHRyeSB7XG4gICAgICB0aHVtYm5haWxTcmMgPSBuZXcgVVJMKHZhbHVlLnRodW1ibmFpbFVSTCwgc2VydmVyVVJMKS50b1N0cmluZygpXG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHVtYm5haWxTcmMgPSBgJHtzZXJ2ZXJVUkx9JHt2YWx1ZS50aHVtYm5haWxVUkx9YFxuICAgIH1cbiAgfVxuXG4gIGlmIChpc0ltYWdlKHZhbHVlLm1pbWVUeXBlKSkge1xuICAgIHRodW1ibmFpbFNyYyA9IGdldEJlc3RGaXRGcm9tU2l6ZXMoe1xuICAgICAgc2l6ZXM6IHZhbHVlLnNpemVzLFxuICAgICAgdGh1bWJuYWlsVVJMOiB0aHVtYm5haWxTcmMsXG4gICAgICB1cmw6IHNyYyxcbiAgICAgIHdpZHRoOiB2YWx1ZS53aWR0aCxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VXBsb2FkQ2FyZCBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICA8UmVsYXRpb25zaGlwQ29udGVudFxuICAgICAgICBhbGxvd0VkaXQ9eyFyZWFkb25seX1cbiAgICAgICAgYWxsb3dSZW1vdmU9eyFyZWFkb25seX1cbiAgICAgICAgYWx0PXsodmFsdWU/LmFsdCB8fCB2YWx1ZT8uZmlsZW5hbWUpIGFzIHN0cmluZ31cbiAgICAgICAgYnl0ZVNpemU9e3ZhbHVlLmZpbGVzaXplIGFzIG51bWJlcn1cbiAgICAgICAgY29sbGVjdGlvblNsdWc9e3JlbGF0aW9uVG99XG4gICAgICAgIGRpc3BsYXlQcmV2aWV3PXtkaXNwbGF5UHJldmlld31cbiAgICAgICAgZmlsZW5hbWU9e3ZhbHVlLmZpbGVuYW1lIGFzIHN0cmluZ31cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBtaW1lVHlwZT17dmFsdWU/Lm1pbWVUeXBlIGFzIHN0cmluZ31cbiAgICAgICAgb25SZW1vdmU9e29uUmVtb3ZlfVxuICAgICAgICByZWxvYWREb2M9e3JlbG9hZERvY31cbiAgICAgICAgc2hvd0NvbGxlY3Rpb25TbHVnPXtzaG93Q29sbGVjdGlvblNsdWd9XG4gICAgICAgIHNyYz17c3JjfVxuICAgICAgICB0aHVtYm5haWxTcmM9e3RodW1ibmFpbFNyY31cbiAgICAgICAgdXBkYXRlZEF0PXt2YWx1ZS51cGRhdGVkQXR9XG4gICAgICAgIHg9e3ZhbHVlPy53aWR0aCBhcyBudW1iZXJ9XG4gICAgICAgIHk9e3ZhbHVlPy5oZWlnaHQgYXMgbnVtYmVyfVxuICAgICAgLz5cbiAgICA8L1VwbG9hZENhcmQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyBjb25maXJtUGFzc3dvcmQgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy91c2VGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4uL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCB0eXBlIENvbmZpcm1QYXNzd29yZEZpZWxkUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGRpc2FibGVkPzogYm9vbGVhblxuICByZWFkb25seSBwYXRoPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDb25maXJtUGFzc3dvcmRGaWVsZDogUmVhY3QuRkM8Q29uZmlybVBhc3N3b3JkRmllbGRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkaXNhYmxlZDogZGlzYWJsZWRGcm9tUHJvcHMsIHBhdGggPSAnY29uZmlybS1wYXNzd29yZCcgfSA9IHByb3BzXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHsgZGlzYWJsZWQsIHNldFZhbHVlLCBzaG93RXJyb3IsIHZhbHVlIH0gPSB1c2VGaWVsZCh7XG4gICAgcGF0aCxcbiAgICB2YWxpZGF0ZTogKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gY29uZmlybVBhc3N3b3JkKHZhbHVlLCB7XG4gICAgICAgIG5hbWU6ICdjb25maXJtLXBhc3N3b3JkJyxcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W2ZpZWxkQmFzZUNsYXNzLCAnY29uZmlybS1wYXNzd29yZCcsIHNob3dFcnJvciAmJiAnZXJyb3InXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgPlxuICAgICAgPEZpZWxkTGFiZWxcbiAgICAgICAgaHRtbEZvcj1cImZpZWxkLWNvbmZpcm0tcGFzc3dvcmRcIlxuICAgICAgICBsYWJlbD17dCgnYXV0aGVudGljYXRpb246Y29uZmlybVBhc3N3b3JkJyl9XG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2ZpZWxkQmFzZUNsYXNzfV9fd3JhcGB9PlxuICAgICAgICA8RmllbGRFcnJvciBwYXRoPXtwYXRofSAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdhdXRoZW50aWNhdGlvbjpjb25maXJtUGFzc3dvcmQnKX1cbiAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgIGRpc2FibGVkPXshIShkaXNhYmxlZCB8fCBkaXNhYmxlZEZyb21Qcm9wcyl9XG4gICAgICAgICAgaWQ9XCJmaWVsZC1jb25maXJtLXBhc3N3b3JkXCJcbiAgICAgICAgICBuYW1lPVwiY29uZmlybS1wYXNzd29yZFwiXG4gICAgICAgICAgb25DaGFuZ2U9e3NldFZhbHVlfVxuICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgdmFsdWU9eyh2YWx1ZSBhcyBzdHJpbmcpIHx8ICcnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBQYXNzd29yZEZpZWxkVmFsaWRhdGlvbiwgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBwYXNzd29yZCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgUGFzc3dvcmRGaWVsZFByb3BzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlRmllbGQgfSBmcm9tICcuLi8uLi9mb3Jtcy91c2VGaWVsZC9pbmRleC5qcydcbmltcG9ydCB7IHdpdGhDb25kaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy93aXRoQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IG1lcmdlRmllbGRTdHlsZXMgfSBmcm9tICcuLi9tZXJnZUZpZWxkU3R5bGVzLmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBpc0ZpZWxkUlRMIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGFzc3dvcmRJbnB1dCB9IGZyb20gJy4vaW5wdXQuanMnXG5cbmNvbnN0IFBhc3N3b3JkRmllbGRDb21wb25lbnQ6IFJlYWN0LkZDPFBhc3N3b3JkRmllbGRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGF1dG9Db21wbGV0ZSxcbiAgICBmaWVsZCxcbiAgICBmaWVsZDoge1xuICAgICAgYWRtaW46IHtcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRGcm9tUHJvcHMsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBydGwsXG4gICAgICB9ID0ge30gYXMgUGFzc3dvcmRGaWVsZFByb3BzWydmaWVsZCddWydhZG1pbiddLFxuICAgICAgbGFiZWwsXG4gICAgICBsb2NhbGl6ZWQsXG4gICAgICByZXF1aXJlZCxcbiAgICB9ID0ge30gYXMgUGFzc3dvcmRGaWVsZFByb3BzWydmaWVsZCddLFxuICAgIGlucHV0UmVmLFxuICAgIHBhdGgsXG4gICAgdmFsaWRhdGUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBsb2NhbGUgPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGNvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBtZW1vaXplZFZhbGlkYXRlOiBQYXNzd29yZEZpZWxkVmFsaWRhdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aCA/IHBhdGguc3BsaXQoJy4nKSA6IFtdXG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkIH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXNzd29yZCh2YWx1ZSwge1xuICAgICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIGJsb2NrRGF0YToge30sXG4gICAgICAgIGRhdGE6IHt9LFxuICAgICAgICBldmVudDogJ29uQ2hhbmdlJyxcbiAgICAgICAgcGF0aDogcGF0aFNlZ21lbnRzLFxuICAgICAgICBwcmVmZXJlbmNlczogeyBmaWVsZHM6IHt9IH0sXG4gICAgICAgIHJlcToge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHQsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBQYXlsb2FkUmVxdWVzdCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHNpYmxpbmdEYXRhOiB7fSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbdmFsaWRhdGUsIGNvbmZpZywgdCwgcmVxdWlyZWQsIHBhdGhdLFxuICApXG5cbiAgY29uc3Qge1xuICAgIGN1c3RvbUNvbXBvbmVudHM6IHsgQWZ0ZXJJbnB1dCwgQmVmb3JlSW5wdXQsIERlc2NyaXB0aW9uLCBFcnJvciwgTGFiZWwgfSA9IHt9LFxuICAgIGRpc2FibGVkLFxuICAgIHNldFZhbHVlLFxuICAgIHNob3dFcnJvcixcbiAgICB2YWx1ZSxcbiAgfSA9IHVzZUZpZWxkKHtcbiAgICBwYXRoLFxuICAgIHZhbGlkYXRlOiBtZW1vaXplZFZhbGlkYXRlLFxuICB9KVxuXG4gIGNvbnN0IHJlbmRlclJUTCA9IGlzRmllbGRSVEwoe1xuICAgIGZpZWxkTG9jYWxpemVkOiBmYWxzZSxcbiAgICBmaWVsZFJUTDogcnRsLFxuICAgIGxvY2FsZSxcbiAgICBsb2NhbGl6YXRpb25Db25maWc6IGNvbmZpZy5sb2NhbGl6YXRpb24gfHwgdW5kZWZpbmVkLFxuICB9KVxuXG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW8oKCkgPT4gbWVyZ2VGaWVsZFN0eWxlcyhmaWVsZCksIFtmaWVsZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFzc3dvcmRJbnB1dFxuICAgICAgQWZ0ZXJJbnB1dD17QWZ0ZXJJbnB1dH1cbiAgICAgIGF1dG9Db21wbGV0ZT17YXV0b0NvbXBsZXRlfVxuICAgICAgQmVmb3JlSW5wdXQ9e0JlZm9yZUlucHV0fVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBEZXNjcmlwdGlvbj17RGVzY3JpcHRpb259XG4gICAgICBFcnJvcj17RXJyb3J9XG4gICAgICBpbnB1dFJlZj17aW5wdXRSZWZ9XG4gICAgICBMYWJlbD17TGFiZWx9XG4gICAgICBsYWJlbD17bGFiZWx9XG4gICAgICBsb2NhbGl6ZWQ9e2xvY2FsaXplZH1cbiAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICBzZXRWYWx1ZShlLnRhcmdldC52YWx1ZSlcbiAgICAgIH19XG4gICAgICBwYXRoPXtwYXRofVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgcmVhZE9ubHk9e2Rpc2FibGVkIHx8IGRpc2FibGVkRnJvbVByb3BzfVxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgcnRsPXtyZW5kZXJSVEx9XG4gICAgICBzaG93RXJyb3I9e3Nob3dFcnJvcn1cbiAgICAgIHN0eWxlPXtzdHlsZXN9XG4gICAgICB2YWx1ZT17KHZhbHVlIGFzIHN0cmluZykgfHwgJyd9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgUGFzc3dvcmRGaWVsZCA9IHdpdGhDb25kaXRpb24oUGFzc3dvcmRGaWVsZENvbXBvbmVudClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VFdmVudCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBQYXNzd29yZElucHV0UHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRGVzY3JpcHRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkRXJyb3IvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBQYXNzd29yZElucHV0OiBSZWFjdC5GQzxQYXNzd29yZElucHV0UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBBZnRlcklucHV0LFxuICAgIGF1dG9Db21wbGV0ZSA9ICdvZmYnLFxuICAgIEJlZm9yZUlucHV0LFxuICAgIGNsYXNzTmFtZSxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBEZXNjcmlwdGlvbixcbiAgICBFcnJvcixcbiAgICBpbnB1dFJlZixcbiAgICBMYWJlbCxcbiAgICBsYWJlbCxcbiAgICBsb2NhbGl6ZWQsXG4gICAgb25DaGFuZ2UsXG4gICAgb25LZXlEb3duLFxuICAgIHBhdGgsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgcmVhZE9ubHksXG4gICAgcmVxdWlyZWQsXG4gICAgcnRsLFxuICAgIHNob3dFcnJvcixcbiAgICBzdHlsZSxcbiAgICB2YWx1ZSxcbiAgICB3aWR0aCxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgZmllbGRCYXNlQ2xhc3MsXG4gICAgICAgICdwYXNzd29yZCcsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgc2hvd0Vycm9yICYmICdlcnJvcicsXG4gICAgICAgIHJlYWRPbmx5ICYmICdyZWFkLW9ubHknLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBzdHlsZT17e1xuICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgd2lkdGgsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtMYWJlbH1cbiAgICAgICAgRmFsbGJhY2s9e1xuICAgICAgICAgIDxGaWVsZExhYmVsIGxhYmVsPXtsYWJlbH0gbG9jYWxpemVkPXtsb2NhbGl6ZWR9IHBhdGg9e3BhdGh9IHJlcXVpcmVkPXtyZXF1aXJlZH0gLz5cbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtmaWVsZEJhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17RXJyb3J9XG4gICAgICAgICAgRmFsbGJhY2s9ezxGaWVsZEVycm9yIHBhdGg9e3BhdGh9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPn1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7QmVmb3JlSW5wdXR9XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtnZXRUcmFuc2xhdGlvbihsYWJlbCwgaTE4bil9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9e2F1dG9Db21wbGV0ZX1cbiAgICAgICAgICAgIGRhdGEtcnRsPXtydGx9XG4gICAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHl9XG4gICAgICAgICAgICBpZD17YGZpZWxkLSR7cGF0aC5yZXBsYWNlKC9cXC4vZywgJ19fJyl9YH1cbiAgICAgICAgICAgIG5hbWU9e3BhdGh9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2UgYXMgKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkfVxuICAgICAgICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0VHJhbnNsYXRpb24ocGxhY2Vob2xkZXIsIGkxOG4pfVxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7QWZ0ZXJJbnB1dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICBDdXN0b21Db21wb25lbnQ9e0Rlc2NyaXB0aW9ufVxuICAgICAgICAgIEZhbGxiYWNrPXs8RmllbGREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259IHBhdGg9e3BhdGh9IC8+fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBDbGllbnRGaWVsZEJhc2UsXG4gIEZpZWxkVHlwZXMsXG4gIEdlbmVyaWNEZXNjcmlwdGlvblByb3BzLFxuICBHZW5lcmljRXJyb3JQcm9wcyxcbiAgR2VuZXJpY0xhYmVsUHJvcHMsXG4gIEhpZGRlbkZpZWxkUHJvcHMsXG59IGZyb20gJ3BheWxvYWQnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBDb25maXJtUGFzc3dvcmRGaWVsZFByb3BzIH0gZnJvbSAnLi9Db25maXJtUGFzc3dvcmQvaW5kZXguanMnXG5cbmltcG9ydCB7IFJvd0xhYmVsIH0gZnJvbSAnLi4vZm9ybXMvUm93TGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyBBcnJheUZpZWxkIH0gZnJvbSAnLi9BcnJheS9pbmRleC5qcydcbmltcG9ydCB7IEJsb2Nrc0ZpZWxkIH0gZnJvbSAnLi9CbG9ja3MvaW5kZXguanMnXG5pbXBvcnQgeyBDaGVja2JveEZpZWxkIH0gZnJvbSAnLi9DaGVja2JveC9pbmRleC5qcydcbmltcG9ydCB7IENvZGVGaWVsZCB9IGZyb20gJy4vQ29kZS9pbmRleC5qcydcbmltcG9ydCB7IENvbGxhcHNpYmxlRmllbGQgfSBmcm9tICcuL0NvbGxhcHNpYmxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29uZmlybVBhc3N3b3JkRmllbGQgfSBmcm9tICcuL0NvbmZpcm1QYXNzd29yZC9pbmRleC5qcydcbmltcG9ydCB7IERhdGVUaW1lRmllbGQgfSBmcm9tICcuL0RhdGVUaW1lL2luZGV4LmpzJ1xuaW1wb3J0IHsgRW1haWxGaWVsZCB9IGZyb20gJy4vRW1haWwvaW5kZXguanMnXG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0aW9uIH0gZnJvbSAnLi9GaWVsZERlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4vRmllbGRFcnJvci9pbmRleC5qcydcbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyBHcm91cEZpZWxkIH0gZnJvbSAnLi9Hcm91cC9pbmRleC5qcydcbmltcG9ydCB7IEhpZGRlbkZpZWxkIH0gZnJvbSAnLi9IaWRkZW4vaW5kZXguanMnXG5pbXBvcnQgeyBKb2luRmllbGQgfSBmcm9tICcuL0pvaW4vaW5kZXguanMnXG5pbXBvcnQgeyBKU09ORmllbGQgfSBmcm9tICcuL0pTT04vaW5kZXguanMnXG5pbXBvcnQgeyBOdW1iZXJGaWVsZCB9IGZyb20gJy4vTnVtYmVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGFzc3dvcmRGaWVsZCB9IGZyb20gJy4vUGFzc3dvcmQvaW5kZXguanMnXG5pbXBvcnQgeyBQb2ludEZpZWxkIH0gZnJvbSAnLi9Qb2ludC9pbmRleC5qcydcbmltcG9ydCB7IFJhZGlvR3JvdXBGaWVsZCB9IGZyb20gJy4vUmFkaW9Hcm91cC9pbmRleC5qcydcbmltcG9ydCB7IFJlbGF0aW9uc2hpcEZpZWxkIH0gZnJvbSAnLi9SZWxhdGlvbnNoaXAvaW5kZXguanMnXG5pbXBvcnQgeyBSaWNoVGV4dEZpZWxkIH0gZnJvbSAnLi9SaWNoVGV4dC9pbmRleC5qcydcbmltcG9ydCB7IFJvd0ZpZWxkIH0gZnJvbSAnLi9Sb3cvaW5kZXguanMnXG5pbXBvcnQgeyBTZWxlY3RGaWVsZCB9IGZyb20gJy4vU2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgVGFic0ZpZWxkIH0gZnJvbSAnLi9UYWJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGV4dEZpZWxkIH0gZnJvbSAnLi9UZXh0L2luZGV4LmpzJ1xuaW1wb3J0IHsgVGV4dGFyZWFGaWVsZCB9IGZyb20gJy4vVGV4dGFyZWEvaW5kZXguanMnXG5pbXBvcnQgeyBVSUZpZWxkIH0gZnJvbSAnLi9VSS9pbmRleC5qcydcbmltcG9ydCB7IFVwbG9hZEZpZWxkIH0gZnJvbSAnLi9VcGxvYWQvaW5kZXguanMnXG5cbmV4cG9ydCAqIGZyb20gJy4vc2hhcmVkL2luZGV4LmpzJ1xuXG5leHBvcnQgdHlwZSBGaWVsZFR5cGVzQ29tcG9uZW50cyA9IHtcbiAgW0sgaW4gJ3Bhc3N3b3JkJyB8IEZpZWxkVHlwZXNdOiBSZWFjdC5GQzxDbGllbnRGaWVsZEJhc2U+XG59ICYge1xuICBjb25maXJtUGFzc3dvcmQ6IFJlYWN0LkZDPENvbmZpcm1QYXNzd29yZEZpZWxkUHJvcHM+XG4gIGhpZGRlbjogUmVhY3QuRkM8SGlkZGVuRmllbGRQcm9wcz5cbn1cblxuZXhwb3J0IGNvbnN0IGZpZWxkQ29tcG9uZW50czogRmllbGRUeXBlc0NvbXBvbmVudHMgPSB7XG4gIGFycmF5OiBBcnJheUZpZWxkLFxuICBibG9ja3M6IEJsb2Nrc0ZpZWxkLFxuICBjaGVja2JveDogQ2hlY2tib3hGaWVsZCxcbiAgY29kZTogQ29kZUZpZWxkLFxuICBjb2xsYXBzaWJsZTogQ29sbGFwc2libGVGaWVsZCxcbiAgY29uZmlybVBhc3N3b3JkOiBDb25maXJtUGFzc3dvcmRGaWVsZCxcbiAgZGF0ZTogRGF0ZVRpbWVGaWVsZCxcbiAgZW1haWw6IEVtYWlsRmllbGQsXG4gIGdyb3VwOiBHcm91cEZpZWxkLFxuICBoaWRkZW46IEhpZGRlbkZpZWxkLFxuICBqb2luOiBKb2luRmllbGQsXG4gIGpzb246IEpTT05GaWVsZCxcbiAgbnVtYmVyOiBOdW1iZXJGaWVsZCxcbiAgcGFzc3dvcmQ6IFBhc3N3b3JkRmllbGQsXG4gIHBvaW50OiBQb2ludEZpZWxkLFxuICByYWRpbzogUmFkaW9Hcm91cEZpZWxkLFxuICByZWxhdGlvbnNoaXA6IFJlbGF0aW9uc2hpcEZpZWxkLFxuICByaWNoVGV4dDogUmljaFRleHRGaWVsZCxcbiAgcm93OiBSb3dGaWVsZCxcbiAgc2VsZWN0OiBTZWxlY3RGaWVsZCxcbiAgdGFiczogVGFic0ZpZWxkLFxuICB0ZXh0OiBUZXh0RmllbGQsXG4gIHRleHRhcmVhOiBUZXh0YXJlYUZpZWxkLFxuICB1aTogVUlGaWVsZCxcbiAgdXBsb2FkOiBVcGxvYWRGaWVsZCxcbn1cblxuZXhwb3J0IHR5cGUgRmllbGRDb21wb25lbnRzV2l0aFNsb3RzID0ge1xuICBEZXNjcmlwdGlvbjogUmVhY3QuRkM8R2VuZXJpY0Rlc2NyaXB0aW9uUHJvcHM+XG4gIEVycm9yOiBSZWFjdC5GQzxHZW5lcmljRXJyb3JQcm9wcz5cbiAgTGFiZWw6IFJlYWN0LkZDPEdlbmVyaWNMYWJlbFByb3BzPlxuICBSb3dMYWJlbDogUmVhY3QuRkNcbn0gJiBGaWVsZFR5cGVzQ29tcG9uZW50c1xuXG5leHBvcnQgY29uc3QgYWxsRmllbGRDb21wb25lbnRzOiBGaWVsZENvbXBvbmVudHNXaXRoU2xvdHMgPSB7XG4gIC4uLmZpZWxkQ29tcG9uZW50cyxcbiAgRGVzY3JpcHRpb246IEZpZWxkRGVzY3JpcHRpb24sXG4gIEVycm9yOiBGaWVsZEVycm9yLFxuICBMYWJlbDogRmllbGRMYWJlbCxcbiAgUm93TGFiZWwsXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyBzZXRzQXJlRXF1YWwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuLy8gUmVxdWlyZWQgdG8gYmUgb3V0c2lkZSBvZiBob29rLCBlbHNlIGRlYm91bmNlIHdvdWxkIGJlIG5lY2Vzc2FyeVxuLy8gYW5kIHRoZW4gb25lIGNvdWxkIG5vdCBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci5cblxuLy8gSXQgbWFwcyB0aGUgcHJlc3NlZCBrZXlzIHdpdGggdGhlIHRpbWUgdGhleSB3ZXJlIHByZXNzZWQsIGluIG9yZGVyIHRvIGltcGxlbWVudCBhIG1heGltdW0gdGltZVxuLy8gZm9yIHRoZSB1c2VyIHRvIHByZXNzIHRoZSBuZXh0IGtleSBpbiB0aGUgc2VxdWVuY2VcblxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSB0aGUga2V5dXAgZXZlbnQsIHdoaWNoIHVuc2V0cyB0aGUga2V5IGFzIHByZXNzZWRcbi8vIGlzIG5vdCBmaXJlZCB3aGVuIHRoZSB3aW5kb3cgaXMgbm90IGZvY3VzZWQuXG4vLyBXaGVuIHRoZSB1c2VyIHRoZW4gY29tZXMgYmFjayB0byB0aGUgd2luZG93LCB0aGUga2V5IGlzIHN0aWxsIHJlZ2lzdGVyZWQgYXMgcHJlc3NlZCwgZXZlbiB0aG91Z2ggaXQncyBub3QuXG5jb25zdCBwcmVzc2VkS2V5cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFtdKVxuXG5jb25zdCBtYXAgPSB7XG4gIGFsdGxlZnQ6ICdhbHQnLFxuICBhbHRyaWdodDogJ2FsdCcsXG4gIGNvbnRyb2xsZWZ0OiAnY3RybCcsXG4gIGNvbnRyb2xyaWdodDogJ2N0cmwnLFxuICBjdHJsbGVmdDogJ2N0cmwnLFxuICBjdHJscmlnaHQ6ICdjdHJsJyxcbiAgZXNjYXBlOiAnZXNjJyxcbiAgbWV0YWxlZnQ6ICdtZXRhJyxcbiAgbWV0YXJpZ2h0OiAnbWV0YScsXG4gIG9zbGVmdDogJ21ldGEnLFxuICBvc3JpZ2h0OiAnbWV0YScsXG4gIHNoaWZ0bGVmdDogJ3NoaWZ0JyxcbiAgc2hpZnRyaWdodDogJ3NoaWZ0Jyxcbn1cblxuY29uc3Qgc3RyaXBLZXkgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIChtYXBba2V5LnRvTG93ZXJDYXNlKCldIHx8IGtleSkudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgna2V5JywgJycpXG59XG5cbmNvbnN0IHB1c2hUb0tleXMgPSAoY29kZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGtleSA9IHN0cmlwS2V5KGNvZGUpXG5cbiAgLy8gVGhlcmUgaXMgYSB3ZWlyZCBidWcgd2l0aCBtYWNvcyB0aGF0IGlmIHRoZSBrZXlzIGFyZSBub3QgY2xlYXJlZCB0aGV5IHJlbWFpbiBpbiB0aGVcbiAgLy8gcHJlc3NlZCBrZXlzIHNldC5cbiAgaWYgKGtleSA9PT0gJ21ldGEnKSB7XG4gICAgcHJlc3NlZEtleXMuZm9yRWFjaChcbiAgICAgICh0aW1lLCBwcmVzc2VkS2V5KSA9PiBwcmVzc2VkS2V5ICE9PSAnbWV0YScgJiYgcHJlc3NlZEtleXMuZGVsZXRlKHByZXNzZWRLZXkpLFxuICAgIClcbiAgfVxuXG4gIHByZXNzZWRLZXlzLnNldChrZXksIERhdGUubm93KCkpXG59XG5cbmNvbnN0IHJlbW92ZUZyb21LZXlzID0gKGNvZGU6IHN0cmluZykgPT4ge1xuICBjb25zdCBrZXkgPSBzdHJpcEtleShjb2RlKVxuICAvLyBUaGVyZSBpcyBhIHdlaXJkIGJ1ZyB3aXRoIG1hY29zIHRoYXQgaWYgdGhlIGtleXMgYXJlIG5vdCBjbGVhcmVkIHRoZXkgcmVtYWluIGluIHRoZVxuICAvLyBwcmVzc2VkIGtleXMgc2V0LlxuICBpZiAoa2V5ID09PSAnbWV0YScpIHtcbiAgICBwcmVzc2VkS2V5cy5jbGVhcigpXG4gIH1cbiAgcHJlc3NlZEtleXMuZGVsZXRlKGtleSlcbn1cblxuLyoqXG4gKiBIb29rIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBob3RrZXlzLlxuICogQHBhcmFtIHBhcmFtMC5rZXlDb2RlIHtzdHJpbmdbXX0gVGhlIGtleXMgdG8gbGlzdGVuIGZvciAoYEV2ZW50LmNvZGVgIHdpdGhvdXQgYCdLZXknYCBhbmQgbG93ZXJjYXNlZClcbiAqIEBwYXJhbSBwYXJhbTAuY21kQ3RybEtleSB7Ym9vbGVhbn0gV2hldGhlciBDdHJsIG9uIHdpbmRvd3Mgb3IgQ21kIG9uIG1hYyBtdXN0IGJlIHByZXNzZWRcbiAqIEBwYXJhbSBwYXJhbTAuZWRpdERlcHRoIHtib29sZWFufSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaG90a2V5IGlzIG9ubHkgdHJpZ2dlcmVkIGZvciB0aGUgbW9zdCB0b3AtbGV2ZWwgZHJhd2VyIGluIGNhc2UgdGhlcmUgYXJlIG5lc3RlZCBkcmF3ZXJzXG4gKiBAcGFyYW0gZnVuYyBUaGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUhvdGtleSA9IChcbiAgb3B0aW9uczoge1xuICAgIGNtZEN0cmxLZXk6IGJvb2xlYW5cbiAgICBlZGl0RGVwdGg6IG51bWJlclxuICAgIGtleUNvZGVzOiBzdHJpbmdbXVxuICB9LFxuICBmdW5jOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCxcbik6IHZvaWQgPT4ge1xuICBjb25zdCB7IGNtZEN0cmxLZXksIGVkaXREZXB0aCwga2V5Q29kZXMgfSA9IG9wdGlvbnNcblxuICBjb25zdCB7IG1vZGFsU3RhdGUgfSA9IHVzZU1vZGFsKClcblxuICBjb25zdCBrZXlkb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDdXN0b21FdmVudCB8IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGU6IEtleWJvYXJkRXZlbnQgPSBldmVudC5kZXRhaWw/LmtleSA/IGV2ZW50LmRldGFpbCA6IGV2ZW50XG4gICAgICBpZiAoZS5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBBdXRvZmlsbCBldmVudHMsIG9yIG90aGVyIHN5bnRoZXRpYyBldmVudHMsIGNhbiBiZSBpZ25vcmVkXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgb3V0IHByZXNzZWQga2V5cyB3aGljaCBoYXZlIGJlZW4gcHJlc3NlZCA+IDMgc2Vjb25kcyBhZ29cbiAgICAgIHByZXNzZWRLZXlzLmZvckVhY2goKHRpbWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHRpbWUgPiAzMDAwKSB7XG4gICAgICAgICAgcHJlc3NlZEtleXMuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgaWYgKGUuY29kZSkge1xuICAgICAgICBwdXNoVG9LZXlzKGUuY29kZSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIE1hYyBhbmQgaVBhZFxuICAgICAgY29uc3QgaGFzQ21kID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoJ01hYyBPUyBYJylcbiAgICAgIGNvbnN0IHByZXNzZWRXaXRob3V0TW9kaWZpZXIgPSBbLi4ucHJlc3NlZEtleXMua2V5cygpXS5maWx0ZXIoXG4gICAgICAgIChrZXkpID0+ICFbJ2FsdCcsICdjdHJsJywgJ21ldGEnLCAnc2hpZnQnXS5pbmNsdWRlcyhrZXkpLFxuICAgICAgKVxuXG4gICAgICAvLyBDaGVjayB3aGV0aGVyIGFycmF5cyBjb250YWluIHRoZSBzYW1lIHZhbHVlcyAocmVnYXJkbGVzcyBvZiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMpXG4gICAgICBpZiAoXG4gICAgICAgIHNldHNBcmVFcXVhbChuZXcgU2V0KHByZXNzZWRXaXRob3V0TW9kaWZpZXIpLCBuZXcgU2V0KGtleUNvZGVzKSkgJiZcbiAgICAgICAgKCFjbWRDdHJsS2V5IHx8IChoYXNDbWQgJiYgcHJlc3NlZEtleXMuaGFzKCdtZXRhJykpIHx8ICghaGFzQ21kICYmIGUuY3RybEtleSkpXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIGVkaXQgZGVwdGggYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBvcGVuIGRyYXdlcnMuIG1vZGFsU3RhdGUgaXMgYW5kIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgc3RhdGUgb2YgYWxsIGRyYXdlcnMuXG4gICAgICAgIGNvbnN0IG1heEVkaXREZXB0aCA9XG4gICAgICAgICAgT2JqZWN0LmtleXMobW9kYWxTdGF0ZSkuZmlsdGVyKChrZXkpID0+IG1vZGFsU3RhdGVba2V5XT8uaXNPcGVuKT8ubGVuZ3RoICsgMSB8fCAxXG5cbiAgICAgICAgaWYgKG1heEVkaXREZXB0aCAhPT0gZWRpdERlcHRoKSB7XG4gICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGV4ZWN1dGUgdGhlIGhvdGtleSBmcm9tIHRoZSBtb3N0IHRvcC1sZXZlbCBkcmF3ZXIgLyBlZGl0IGRlcHRoLlxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWF4aW11bSBlZGl0IGRlcHRoXG4gICAgICAgIGZ1bmMoZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtrZXlDb2RlcywgY21kQ3RybEtleSwgZWRpdERlcHRoLCBtb2RhbFN0YXRlLCBmdW5jXSxcbiAgKVxuXG4gIGNvbnN0IGtleXVwID0gdXNlQ2FsbGJhY2soKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZS5jb2RlKSB7XG4gICAgICByZW1vdmVGcm9tS2V5cyhlLmNvZGUpXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duLCBmYWxzZSlcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdieXBhc3NLZXlEb3duJywga2V5ZG93biwgZmFsc2UpIC8vIHRoaXMgaXMgY2FsbGVkIGlmIHRoZSBrZXlkb3duIGV2ZW50J3MgcHJvcGFnYXRpb24gaXMgc3RvcHBlZCBieSByZWFjdC1zZWxlY3RcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXVwLCBmYWxzZSlcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bilcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2J5cGFzc0tleURvd24nLCBrZXlkb3duKVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXl1cClcbiAgICB9XG4gIH0sIFtrZXlkb3duLCBrZXl1cF0pXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVxdWVzdHMgfSBmcm9tICcuLi91dGlsaXRpZXMvYXBpLmpzJ1xuXG50eXBlIFJlc3VsdCA9IFtcbiAge1xuICAgIGRhdGE6IGFueVxuICAgIGlzRXJyb3I6IGJvb2xlYW5cbiAgICBpc0xvYWRpbmc6IGJvb2xlYW5cbiAgfSxcbiAge1xuICAgIHNldFBhcmFtczogUmVhY3QuRGlzcGF0Y2g8dW5rbm93bj5cbiAgfSxcbl1cblxudHlwZSBPcHRpb25zID0ge1xuICBpbml0aWFsRGF0YT86IGFueVxuICBpbml0aWFsUGFyYW1zPzogdW5rbm93blxufVxuXG50eXBlIFVzZVBheWxvYWRBUEkgPSAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKSA9PiBSZXN1bHRcblxuZXhwb3J0IGNvbnN0IHVzZVBheWxvYWRBUEk6IFVzZVBheWxvYWRBUEkgPSAodXJsLCBvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBpbml0aWFsRGF0YSwgaW5pdGlhbFBhcmFtcyA9IHt9IH0gPSBvcHRpb25zXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlKGluaXRpYWxEYXRhIHx8IHt9KVxuICBjb25zdCBbcGFyYW1zLCBzZXRQYXJhbXNdID0gdXNlU3RhdGUoaW5pdGlhbFBhcmFtcylcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKCFpbml0aWFsRGF0YSlcbiAgY29uc3QgW2lzRXJyb3IsIHNldElzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCBoYXNJbml0aWFsaXplZCA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBzZWFyY2ggPSBxcy5zdHJpbmdpZnkoXG4gICAge1xuICAgICAgbG9jYWxlLFxuICAgICAgLi4uKHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnID8gcGFyYW1zIDoge30pLFxuICAgIH0sXG4gICAge1xuICAgICAgYWRkUXVlcnlQcmVmaXg6IHRydWUsXG4gICAgfSxcbiAgKVxuXG4gIC8vIElmIGBpbml0aWFsRGF0YWAsIG5vIG5lZWQgdG8gbWFrZSBhIHJlcXVlc3RcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbERhdGEgJiYgIWhhc0luaXRpYWxpemVkLmN1cnJlbnQpIHtcbiAgICAgIGhhc0luaXRpYWxpemVkLmN1cnJlbnQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcblxuICAgIGNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHNldElzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQoYCR7dXJsfSR7c2VhcmNofWAsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID4gMjAxKSB7XG4gICAgICAgICAgc2V0SXNFcnJvcih0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuXG4gICAgICAgIHNldERhdGEoanNvbilcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICBzZXRJc0Vycm9yKHRydWUpXG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVybCkge1xuICAgICAgdm9pZCBmZXRjaERhdGEoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAvLyBzd2FsbG93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9LCBbdXJsLCBsb2NhbGUsIHNlYXJjaCwgaTE4bi5sYW5ndWFnZSwgaW5pdGlhbERhdGFdKVxuXG4gIC8vIElmIGBpbml0aWFsRGF0YWAgY2hhbmdlcywgcmVzZXQgdGhlIHN0YXRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxEYXRhICYmIGhhc0luaXRpYWxpemVkLmN1cnJlbnQpIHtcbiAgICAgIHNldERhdGEoaW5pdGlhbERhdGEpXG4gICAgfVxuICB9LCBbaW5pdGlhbERhdGFdKVxuXG4gIHJldHVybiBbeyBkYXRhLCBpc0Vycm9yLCBpc0xvYWRpbmcgfSwgeyBzZXRQYXJhbXMgfV1cbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBTaXplIHtcbiAgaGVpZ2h0OiBudW1iZXJcbiAgd2lkdGg6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgUmVzaXplIHtcbiAgc2l6ZT86IFNpemVcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVJlc2l6ZSA9IChlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlc2l6ZSA9PiB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IHVzZVN0YXRlPFNpemU+KClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBvYnNlcnZlcjogYW55IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29udGVudEJveFNpemUsXG4gICAgICAgICAgICBjb250ZW50UmVjdCwgLy8gZm9yIFNhZmFyaSBpT1MgY29tcGF0aWJpbGl0eSwgd2lsbCBiZSBkZXByZWNhdGVkIGV2ZW50dWFsbHkgKHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzaXplT2JzZXJ2ZXJFbnRyeS9jb250ZW50UmVjdClcbiAgICAgICAgICB9ID0gZW50cnlcblxuICAgICAgICAgIGxldCBuZXdXaWR0aCA9IDBcbiAgICAgICAgICBsZXQgbmV3SGVpZ2h0ID0gMFxuXG4gICAgICAgICAgaWYgKGNvbnRlbnRCb3hTaXplKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTaXplID0gQXJyYXkuaXNBcnJheShjb250ZW50Qm94U2l6ZSkgPyBjb250ZW50Qm94U2l6ZVswXSA6IGNvbnRlbnRCb3hTaXplXG5cbiAgICAgICAgICAgIGlmIChuZXdTaXplKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYmxvY2tTaXplLCBpbmxpbmVTaXplIH0gPSBuZXdTaXplXG4gICAgICAgICAgICAgIG5ld1dpZHRoID0gaW5saW5lU2l6ZVxuICAgICAgICAgICAgICBuZXdIZWlnaHQgPSBibG9ja1NpemVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRSZWN0KSB7XG4gICAgICAgICAgICAvLyBzZWUgbm90ZSBhYm92ZSBmb3Igd2h5IHRoaXMgYmxvY2sgaXMgbmVlZGVkXG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IGNvbnRlbnRSZWN0XG4gICAgICAgICAgICBuZXdXaWR0aCA9IHdpZHRoXG4gICAgICAgICAgICBuZXdIZWlnaHQgPSBoZWlnaHRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICAgIGhlaWdodDogbmV3SGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IG5ld1dpZHRoLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZWxlbWVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlbGVtZW50XSlcblxuICByZXR1cm4ge1xuICAgIHNpemUsXG4gIH1cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBDbGllbnRGaWVsZCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IHVzZVVzZVRpdGxlRmllbGQgPSAoY29sbGVjdGlvbjogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZyk6IENsaWVudEZpZWxkID0+IHtcbiAgY29uc3Qge1xuICAgIGFkbWluOiB7IHVzZUFzVGl0bGUgfSxcbiAgICBmaWVsZHMsXG4gIH0gPSBjb2xsZWN0aW9uXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgdG9wTGV2ZWxGaWVsZHMgPSBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzLCB7XG4gICAgaTE4bixcbiAgICBtb3ZlU3ViRmllbGRzVG9Ub3A6IHRydWUsXG4gIH0pIGFzIENsaWVudEZpZWxkW11cblxuICByZXR1cm4gdG9wTGV2ZWxGaWVsZHM/LmZpbmQoKGZpZWxkKSA9PiAnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gdXNlQXNUaXRsZSlcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFNvcnREb3duSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1NvcnQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgU29ydEhlYWRlclByb3BzID0ge1xuICByZWFkb25seSBhcHBlYXJhbmNlPzogJ2NvbmRlbnNlZCcgfCAnZGVmYXVsdCdcbiAgcmVhZG9ubHkgZGlzYWJsZT86IGJvb2xlYW5cbn1cblxuY29uc3QgYmFzZUNsYXNzID0gJ3NvcnQtaGVhZGVyJ1xuXG5mdW5jdGlvbiB1c2VTb3J0KCkge1xuICBjb25zdCB7IGhhbmRsZVNvcnRDaGFuZ2UsIG9yZGVyYWJsZUZpZWxkTmFtZSwgcXVlcnkgfSA9IHVzZUxpc3RRdWVyeSgpXG4gIGNvbnN0IHF1ZXJ5U29ydCA9IEFycmF5LmlzQXJyYXkocXVlcnkuc29ydCkgPyBxdWVyeS5zb3J0WzBdIDogcXVlcnkuc29ydFxuICBjb25zdCBpc0FjdGl2ZSA9IHF1ZXJ5U29ydCA9PT0gb3JkZXJhYmxlRmllbGROYW1lXG5cbiAgY29uc3QgaGFuZGxlU29ydFByZXNzID0gKCkgPT4ge1xuICAgIC8vIElmIGl0J3MgYWxyZWFkeSBzb3J0ZWQgYnkgdGhlIFwiX29yZGVyXCIgZmllbGQsIGRvIG5vdGhpbmdcbiAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyBJZiBOT1Qgc29ydGVkIGJ5IHRoZSBcIl9vcmRlclwiIGZpZWxkLCBzb3J0IGJ5IHRoYXQgZmllbGQuXG4gICAgdm9pZCBoYW5kbGVTb3J0Q2hhbmdlKG9yZGVyYWJsZUZpZWxkTmFtZSlcbiAgfVxuXG4gIHJldHVybiB7IGhhbmRsZVNvcnRQcmVzcywgaXNBY3RpdmUgfVxufVxuXG5leHBvcnQgY29uc3QgU29ydEhlYWRlcjogUmVhY3QuRkM8U29ydEhlYWRlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGFwcGVhcmFuY2UgfSA9IHByb3BzXG4gIGNvbnN0IHsgaGFuZGxlU29ydFByZXNzLCBpc0FjdGl2ZSB9ID0gdXNlU29ydCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBhcHBlYXJhbmNlICYmIGAke2Jhc2VDbGFzc30tLWFwcGVhcmFuY2UtJHthcHBlYXJhbmNlfWBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYnV0dG9uc2B9PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpzb3J0QnlMYWJlbERpcmVjdGlvbicsIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdCgnZ2VuZXJhbDphc2NlbmRpbmcnKSxcbiAgICAgICAgICAgIGxhYmVsOiAnT3JkZXInLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYnV0dG9uICR7aXNBY3RpdmUgPyBgJHtiYXNlQ2xhc3N9LS1hY3RpdmVgIDogJyd9YH1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTb3J0UHJlc3N9XG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8U29ydERvd25JY29uIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBTb3J0RG93bkljb246IFJlYWN0LkZDPHsgY2xhc3NOYW1lPzogc3RyaW5nIH0+ID0gKHsgY2xhc3NOYW1lIH0pID0+IChcbiAgPHN2Z1xuICAgIGNsYXNzTmFtZT1cImljb24gaWNvbi0tc29ydFwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIGhlaWdodD1cIjIwXCJcbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICB3aWR0aD1cIjIwXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9XCJmaWxsXCJcbiAgICAgIGQ9XCJNMi41IDEzLjMzMzNMNS44MzMzMyAxNi42NjY3TTUuODMzMzMgMTYuNjY2N0w5LjE2NjY3IDEzLjMzMzNNNS44MzMzMyAxNi42NjY3VjMuMzMzMzNNOS4xNjY2NyA3LjA4MzMzSDE3LjVNOS4xNjY2NyAxMC40MTY3SDE1TTExLjY2NjcgMTMuNzVIMTIuNVwiXG4gICAgICBzdHJva2U9XCIjMkYyRjJGXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGNvbnN0IFNvcnRVcEljb246IFJlYWN0LkZDPHsgY2xhc3NOYW1lPzogc3RyaW5nIH0+ID0gKHsgY2xhc3NOYW1lIH0pID0+IChcbiAgPHN2Z1xuICAgIGNsYXNzTmFtZT1cImljb24gaWNvbi0tc29ydFwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIGhlaWdodD1cIjIwXCJcbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICB3aWR0aD1cIjIwXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9XCJmaWxsXCJcbiAgICAgIGQ9XCJNMi41IDYuNjY2NjhMNS44MzMzMyAzLjMzMzM0TTUuODMzMzMgMy4zMzMzNEw5LjE2NjY3IDYuNjY2NjhNNS44MzMzMyAzLjMzMzM0VjE2LjY2NjdNMTEuNjY2NyA3LjA4MzU0SDE3LjVNOS4xNjY2NyAxMC40MTY5SDE1TTkuMTY2NjcgMTMuNzUwMkgxMi41XCJcbiAgICAgIHN0cm9rZT1cIiMyRjJGMkZcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgRHJhZ0hhbmRsZUljb24gfSBmcm9tICcuLi8uLi9pY29ucy9EcmFnSGFuZGxlL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnc29ydC1yb3cnXG5cbmV4cG9ydCBjb25zdCBTb3J0Um93ID0gKCkgPT4ge1xuICBjb25zdCB7IG9yZGVyYWJsZUZpZWxkTmFtZSwgcXVlcnkgfSA9IHVzZUxpc3RRdWVyeSgpXG4gIGNvbnN0IGlzQWN0aXZlID0gcXVlcnkuc29ydCA9PT0gb3JkZXJhYmxlRmllbGROYW1lIHx8IHF1ZXJ5LnNvcnQgPT09IGAtJHtvcmRlcmFibGVGaWVsZE5hbWV9YFxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc30gJHtpc0FjdGl2ZSA/ICdhY3RpdmUnIDogJyd9YH0gcm9sZT1cImJ1dHRvblwiIHRhYkluZGV4PXswfT5cbiAgICAgIDxEcmFnSGFuZGxlSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ljb25gfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBDb2x1bW4sIE9yZGVyYWJsZUVuZHBvaW50Qm9keSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5pbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTGlzdFF1ZXJ5IH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xpc3RRdWVyeS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyBEcmFnZ2FibGVTb3J0YWJsZUl0ZW0gfSBmcm9tICcuLi9EcmFnZ2FibGVTb3J0YWJsZS9EcmFnZ2FibGVTb3J0YWJsZUl0ZW0vaW5kZXguanMnXG5pbXBvcnQgeyBEcmFnZ2FibGVTb3J0YWJsZSB9IGZyb20gJy4uL0RyYWdnYWJsZVNvcnRhYmxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgT3JkZXJhYmxlUm93IH0gZnJvbSAnLi9PcmRlcmFibGVSb3cuanMnXG5pbXBvcnQgeyBPcmRlcmFibGVSb3dEcmFnUHJldmlldyB9IGZyb20gJy4vT3JkZXJhYmxlUm93RHJhZ1ByZXZpZXcuanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICd0YWJsZSdcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGFwcGVhcmFuY2U/OiAnY29uZGVuc2VkJyB8ICdkZWZhdWx0J1xuICByZWFkb25seSBCZWZvcmVUYWJsZT86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBjb2xsZWN0aW9uOiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gIHJlYWRvbmx5IGNvbHVtbnM/OiBDb2x1bW5bXVxuICByZWFkb25seSBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdXG4gIHJlYWRvbmx5IGhlYWRpbmc/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGNvbnN0IE9yZGVyYWJsZVRhYmxlOiBSZWFjdC5GQzxQcm9wcz4gPSAoe1xuICBhcHBlYXJhbmNlID0gJ2RlZmF1bHQnLFxuICBCZWZvcmVUYWJsZSxcbiAgY29sbGVjdGlvbixcbiAgY29sdW1ucyxcbiAgZGF0YTogaW5pdGlhbERhdGEsXG59KSA9PiB7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGRhdGE6IGxpc3RRdWVyeURhdGEsIG9yZGVyYWJsZUZpZWxkTmFtZSwgcXVlcnkgfSA9IHVzZUxpc3RRdWVyeSgpXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlQ29kZSB9ID0gdXNlTG9jYWxlKClcbiAgLy8gVXNlIHRoZSBkYXRhIGZyb20gTGlzdFF1ZXJ5UHJvdmlkZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHRoZSBwcm9wc1xuICBjb25zdCBzZXJ2ZXJEYXRhID0gbGlzdFF1ZXJ5RGF0YT8uZG9jcyB8fCBpbml0aWFsRGF0YVxuXG4gIC8vIExvY2FsIHN0YXRlIHRvIHRyYWNrIHRoZSBjdXJyZW50IG9yZGVyIG9mIHJvd3NcbiAgY29uc3QgW2xvY2FsRGF0YSwgc2V0TG9jYWxEYXRhXSA9IHVzZVN0YXRlKHNlcnZlckRhdGEpXG5cbiAgLy8gaWQgLT4gaW5kZXggZm9yIGVhY2ggY29sdW1uXG4gIGNvbnN0IFtjZWxsTWFwLCBzZXRDZWxsTWFwXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KHt9KVxuXG4gIGNvbnN0IFtkcmFnQWN0aXZlUm93SWQsIHNldERyYWdBY3RpdmVSb3dJZF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KClcblxuICAvLyBVcGRhdGUgbG9jYWwgZGF0YSB3aGVuIHNlcnZlciBkYXRhIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbERhdGEoc2VydmVyRGF0YSlcbiAgICBzZXRDZWxsTWFwKFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHNlcnZlckRhdGEubWFwKChpdGVtLCBpbmRleCkgPT4gW1N0cmluZyhpdGVtLmlkID8/IGl0ZW0uX2lkKSwgaW5kZXhdKSksXG4gICAgKVxuICB9LCBbc2VydmVyRGF0YV0pXG5cbiAgY29uc3QgYWN0aXZlQ29sdW1ucyA9IGNvbHVtbnM/LmZpbHRlcigoY29sKSA9PiBjb2w/LmFjdGl2ZSlcblxuICBpZiAoXG4gICAgIWFjdGl2ZUNvbHVtbnMgfHxcbiAgICBhY3RpdmVDb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhWydfZHJhZ0hhbmRsZScsICdfc2VsZWN0J10uaW5jbHVkZXMoY29sLmFjY2Vzc29yKSkubGVuZ3RoID09PSAwXG4gICkge1xuICAgIHJldHVybiA8ZGl2Pk5vIGNvbHVtbnMgc2VsZWN0ZWQ8L2Rpdj5cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSBhc3luYyAoeyBtb3ZlRnJvbUluZGV4LCBtb3ZlVG9JbmRleCB9KSA9PiB7XG4gICAgaWYgKHF1ZXJ5LnNvcnQgIT09IG9yZGVyYWJsZUZpZWxkTmFtZSAmJiBxdWVyeS5zb3J0ICE9PSBgLSR7b3JkZXJhYmxlRmllbGROYW1lfWApIHtcbiAgICAgIHRvYXN0Lndhcm5pbmcoJ1RvIHJlb3JkZXIgdGhlIHJvd3MgeW91IG11c3QgZmlyc3Qgc29ydCB0aGVtIGJ5IHRoZSBcIk9yZGVyXCIgY29sdW1uJylcbiAgICAgIHNldERyYWdBY3RpdmVSb3dJZCh1bmRlZmluZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAobW92ZUZyb21JbmRleCA9PT0gbW92ZVRvSW5kZXgpIHtcbiAgICAgIHNldERyYWdBY3RpdmVSb3dJZCh1bmRlZmluZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBtb3ZlZElkID0gbG9jYWxEYXRhW21vdmVGcm9tSW5kZXhdLmlkID8/IGxvY2FsRGF0YVttb3ZlRnJvbUluZGV4XS5faWRcbiAgICBjb25zdCBuZXdCZWZvcmVSb3cgPVxuICAgICAgbW92ZVRvSW5kZXggPiBtb3ZlRnJvbUluZGV4ID8gbG9jYWxEYXRhW21vdmVUb0luZGV4XSA6IGxvY2FsRGF0YVttb3ZlVG9JbmRleCAtIDFdXG4gICAgY29uc3QgbmV3QWZ0ZXJSb3cgPVxuICAgICAgbW92ZVRvSW5kZXggPiBtb3ZlRnJvbUluZGV4ID8gbG9jYWxEYXRhW21vdmVUb0luZGV4ICsgMV0gOiBsb2NhbERhdGFbbW92ZVRvSW5kZXhdXG5cbiAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgZGF0YSBmb3Igcm9sbGJhY2tcbiAgICBjb25zdCBwcmV2aW91c0RhdGEgPSBbLi4ubG9jYWxEYXRhXVxuXG4gICAgLy8gT3B0aW1pc2l0YyB1cGRhdGUgb2YgbG9jYWwgc3RhdGUgdG8gcmVvcmRlciB0aGUgcm93c1xuICAgIHNldExvY2FsRGF0YSgoY3VycmVudERhdGEpID0+IHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBbLi4uY3VycmVudERhdGFdXG4gICAgICAvLyBVcGRhdGUgdGhlIHJlbmRlcmVkIGNlbGwgZm9yIHRoZSBtb3ZlZCByb3cgdG8gc2hvdyBcInBlbmRpbmdcIlxuICAgICAgbmV3RGF0YVttb3ZlRnJvbUluZGV4XVtvcmRlcmFibGVGaWVsZE5hbWVdID0gYHBlbmRpbmdgXG4gICAgICAvLyBNb3ZlIHRoZSBpdGVtIGluIHRoZSBhcnJheVxuICAgICAgbmV3RGF0YS5zcGxpY2UobW92ZVRvSW5kZXgsIDAsIG5ld0RhdGEuc3BsaWNlKG1vdmVGcm9tSW5kZXgsIDEpWzBdKVxuICAgICAgcmV0dXJuIG5ld0RhdGFcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhcmdldDogT3JkZXJhYmxlRW5kcG9pbnRCb2R5Wyd0YXJnZXQnXSA9IG5ld0JlZm9yZVJvd1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGlkOiBuZXdCZWZvcmVSb3cuaWQgPz8gbmV3QmVmb3JlUm93Ll9pZCxcbiAgICAgICAgICAgIGtleTogbmV3QmVmb3JlUm93W29yZGVyYWJsZUZpZWxkTmFtZV0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGlkOiBuZXdBZnRlclJvdy5pZCA/PyBuZXdBZnRlclJvdy5faWQsXG4gICAgICAgICAgICBrZXk6IG5ld0FmdGVyUm93W29yZGVyYWJsZUZpZWxkTmFtZV0sXG4gICAgICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdLZXlXaWxsQmUgPVxuICAgICAgICAobmV3QmVmb3JlUm93ICYmIHF1ZXJ5LnNvcnQgPT09IG9yZGVyYWJsZUZpZWxkTmFtZSkgfHxcbiAgICAgICAgKCFuZXdCZWZvcmVSb3cgJiYgcXVlcnkuc29ydCA9PT0gYC0ke29yZGVyYWJsZUZpZWxkTmFtZX1gKVxuICAgICAgICAgID8gJ2dyZWF0ZXInXG4gICAgICAgICAgOiAnbGVzcydcblxuICAgICAgY29uc3QganNvbkJvZHk6IE9yZGVyYWJsZUVuZHBvaW50Qm9keSA9IHtcbiAgICAgICAgY29sbGVjdGlvblNsdWc6IGNvbGxlY3Rpb24uc2x1ZyxcbiAgICAgICAgZG9jc1RvTW92ZTogW21vdmVkSWRdLFxuICAgICAgICBuZXdLZXlXaWxsQmUsXG4gICAgICAgIG9yZGVyYWJsZUZpZWxkTmFtZSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgYXBpUm91dGU6IGNvbmZpZy5yb3V0ZXMuYXBpLFxuICAgICAgICAgIHBhdGg6IGAvcmVvcmRlcj9sb2NhbGU9JHtsb2NhbGVDb2RlfWAsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbkJvZHkpLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byByZW9yZGVyIHRoZXNlIHJvd3MnKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRmFpbGVkIHRvIHJlb3JkZXIuIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcmVvcmRlciBzZXZlcmFsIHJvd3MgdG9vIHF1aWNrbHkuIFBsZWFzZSB0cnkgYWdhaW4uJyxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgJiYgKGF3YWl0IHJlc3BvbnNlLmpzb24oKSlbJ21lc3NhZ2UnXSA9PT0gJ2luaXRpYWwgbWlncmF0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1lvdSBoYXZlIGVuYWJsZWQgXCJvcmRlcmFibGVcIiBvbiBhIGNvbGxlY3Rpb24gd2l0aCBleGlzdGluZyBkb2N1bWVudHMnICtcbiAgICAgICAgICAgICdhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZSBzb3J0ZWQgZG9jdW1lbnRzLiBXZSBoYXZlIHJ1biBhbiBhdXRvbWF0aWMgbWlncmF0aW9uICcgK1xuICAgICAgICAgICAgJ3RvIGFkZCBhbiBpbml0aWFsIG9yZGVyIHRvIHRoZSBkb2N1bWVudHMuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW4uJyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZXJyb3IgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgIC8vIFJvbGxiYWNrIHRvIHByZXZpb3VzIHN0YXRlIGlmIHRoZSByZXF1ZXN0IGZhaWxzXG4gICAgICBzZXRMb2NhbERhdGEocHJldmlvdXNEYXRhKVxuICAgICAgdG9hc3QuZXJyb3IoZXJyb3IpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldERyYWdBY3RpdmVSb3dJZCh1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKHsgaWQgfSkgPT4ge1xuICAgIHNldERyYWdBY3RpdmVSb3dJZChpZClcbiAgfVxuXG4gIGNvbnN0IHJvd0lkcyA9IGxvY2FsRGF0YS5tYXAoKHJvdykgPT4gcm93LmlkID8/IHJvdy5faWQpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGFwcGVhcmFuY2UgJiYgYCR7YmFzZUNsYXNzfS0tYXBwZWFyYW5jZS0ke2FwcGVhcmFuY2V9YF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgID5cbiAgICAgIHtCZWZvcmVUYWJsZX1cbiAgICAgIDxEcmFnZ2FibGVTb3J0YWJsZSBpZHM9e3Jvd0lkc30gb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfSBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fT5cbiAgICAgICAgPHRhYmxlIGNlbGxQYWRkaW5nPVwiMFwiIGNlbGxTcGFjaW5nPVwiMFwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAge2FjdGl2ZUNvbHVtbnMubWFwKChjb2wsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8dGggaWQ9e2BoZWFkaW5nLSR7Y29sLmFjY2Vzc29yfWB9IGtleT17aX0+XG4gICAgICAgICAgICAgICAgICB7Y29sLkhlYWRpbmd9XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAge2xvY2FsRGF0YS5tYXAoKHJvdywgcm93SW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPERyYWdnYWJsZVNvcnRhYmxlSXRlbSBpZD17cm93SWRzW3Jvd0luZGV4XX0ga2V5PXtyb3dJZHNbcm93SW5kZXhdfT5cbiAgICAgICAgICAgICAgICB7KHsgYXR0cmlidXRlcywgaXNEcmFnZ2luZywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPE9yZGVyYWJsZVJvd1xuICAgICAgICAgICAgICAgICAgICBjZWxsTWFwPXtjZWxsTWFwfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3ctJHtyb3dJbmRleCArIDF9YH1cbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucz17YWN0aXZlQ29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgZHJhZ0F0dHJpYnV0ZXM9e2F0dHJpYnV0ZXN9XG4gICAgICAgICAgICAgICAgICAgIGRyYWdMaXN0ZW5lcnM9e2xpc3RlbmVyc31cbiAgICAgICAgICAgICAgICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgICAgICAgICAgICAgICByb3dJZD17cm93LmlkID8/IHJvdy5faWR9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogaXNEcmFnZ2luZyA/IDAgOiAxLFxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0RyYWdnYWJsZVNvcnRhYmxlSXRlbT5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgPERyYWdPdmVybGF5PlxuICAgICAgICAgIDxPcmRlcmFibGVSb3dEcmFnUHJldmlld1xuICAgICAgICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBgJHtiYXNlQ2xhc3N9LS1kcmFnLXByZXZpZXdgXS5qb2luKCcgJyl9XG4gICAgICAgICAgICByb3dJZD17ZHJhZ0FjdGl2ZVJvd0lkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPcmRlcmFibGVSb3cgY2VsbE1hcD17Y2VsbE1hcH0gY29sdW1ucz17YWN0aXZlQ29sdW1uc30gcm93SWQ9e2RyYWdBY3RpdmVSb3dJZH0gLz5cbiAgICAgICAgICA8L09yZGVyYWJsZVJvd0RyYWdQcmV2aWV3PlxuICAgICAgICA8L0RyYWdPdmVybGF5PlxuICAgICAgPC9EcmFnZ2FibGVTb3J0YWJsZT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBEcmFnZ2FibGVTeW50aGV0aWNMaXN0ZW5lcnMgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgeyBDb2x1bW4gfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHR5cGUgeyBIVE1MQXR0cmlidXRlcywgUmVmIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjZWxsTWFwOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG4gIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbltdXG4gIHJlYWRvbmx5IGRyYWdBdHRyaWJ1dGVzPzogSFRNTEF0dHJpYnV0ZXM8dW5rbm93bj5cbiAgcmVhZG9ubHkgZHJhZ0xpc3RlbmVycz86IERyYWdnYWJsZVN5bnRoZXRpY0xpc3RlbmVyc1xuICByZWFkb25seSByZWY/OiBSZWY8SFRNTFRhYmxlUm93RWxlbWVudD5cbiAgcmVhZG9ubHkgcm93SWQ6IG51bWJlciB8IHN0cmluZ1xufSAmIEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVJvd0VsZW1lbnQ+XG5cbmV4cG9ydCBjb25zdCBPcmRlcmFibGVSb3cgPSAoe1xuICBjZWxsTWFwLFxuICBjb2x1bW5zLFxuICBkcmFnQXR0cmlidXRlcyA9IHt9LFxuICBkcmFnTGlzdGVuZXJzID0ge30sXG4gIHJvd0lkLFxuICAuLi5yZXN0XG59OiBQcm9wcykgPT4gKFxuICA8dHIgey4uLnJlc3R9PlxuICAgIHtjb2x1bW5zLm1hcCgoY29sLCBjb2xJbmRleCkgPT4ge1xuICAgICAgY29uc3QgeyBhY2Nlc3NvciB9ID0gY29sXG5cbiAgICAgIC8vIFVzZSB0aGUgY2VsbE1hcCB0byBmaW5kIHdoaWNoIGluZGV4IGluIHRoZSByZW5kZXJlZENlbGxzIHRvIHVzZVxuICAgICAgY29uc3QgY2VsbCA9IGNvbC5yZW5kZXJlZENlbGxzW2NlbGxNYXBbcm93SWRdXVxuXG4gICAgICAvLyBGb3IgZHJhZyBoYW5kbGVzLCB3cmFwIGluIGRpdiB3aXRoIGRyYWcgYXR0cmlidXRlc1xuICAgICAgaWYgKGFjY2Vzc29yID09PSAnX2RyYWdIYW5kbGUnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHRkIGNsYXNzTmFtZT17YGNlbGwtJHthY2Nlc3Nvcn1gfSBrZXk9e2NvbEluZGV4fT5cbiAgICAgICAgICAgIDxkaXYgey4uLmRyYWdBdHRyaWJ1dGVzfSB7Li4uZHJhZ0xpc3RlbmVyc30+XG4gICAgICAgICAgICAgIHtjZWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8dGQgY2xhc3NOYW1lPXtgY2VsbC0ke2FjY2Vzc29yfWB9IGtleT17Y29sSW5kZXh9PlxuICAgICAgICAgIHtjZWxsfVxuICAgICAgICA8L3RkPlxuICAgICAgKVxuICAgIH0pfVxuICA8L3RyPlxuKVxuIiwiaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHJlYWRvbmx5IHJvd0lkPzogbnVtYmVyIHwgc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBPcmRlcmFibGVSb3dEcmFnUHJldmlldyA9ICh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIHJvd0lkIH06IFByb3BzKSA9PlxuICB0eXBlb2Ygcm93SWQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIDx0YWJsZSBjZWxsUGFkZGluZz17MH0gY2VsbFNwYWNpbmc9ezB9PlxuICAgICAgICA8dGJvZHk+e2NoaWxkcmVufTwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICApXG4iLCJpbXBvcnQgdHlwZSB7IENvbHVtblByZWZlcmVuY2UsIERlZmF1bHRDZWxsQ29tcG9uZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB0b1dvcmRzLCB0cmFuc2Zvcm1Db2x1bW5zVG9TZWFyY2hQYXJhbXMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgUGlsbCB9IGZyb20gJy4uLy4uLy4uL1BpbGwvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3F1ZXJ5LXByZXNldC1jb2x1bW5zLWNlbGwnXG5cbmV4cG9ydCBjb25zdCBRdWVyeVByZXNldHNDb2x1bW5zQ2VsbDogUmVhY3QuRkM8RGVmYXVsdENlbGxDb21wb25lbnRQcm9wcz4gPSAoeyBjZWxsRGF0YSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICB7Y2VsbERhdGFcbiAgICAgICAgPyB0cmFuc2Zvcm1Db2x1bW5zVG9TZWFyY2hQYXJhbXMoY2VsbERhdGEgYXMgQ29sdW1uUHJlZmVyZW5jZVtdKS5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNDb2x1bW5BY3RpdmUgPSAhY29sdW1uLnN0YXJ0c1dpdGgoJy0nKVxuXG4gICAgICAgICAgICAvLyB0byB2b2lkIHZlcnkgbGVuZ3RoeSBjZWxscywgb25seSBkaXNwbGF5IHRoZSBhY3RpdmUgY29sdW1uc1xuICAgICAgICAgICAgaWYgKCFpc0NvbHVtbkFjdGl2ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8UGlsbCBrZXk9e2l9IHBpbGxTdHlsZT17aXNDb2x1bW5BY3RpdmUgPyAnYWx3YXlzLXdoaXRlJyA6ICdsaWdodCd9IHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgIHt0b1dvcmRzKGNvbHVtbil9XG4gICAgICAgICAgICAgIDwvUGlsbD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICA6ICdObyBjb2x1bW5zIHNlbGVjdGVkJ31cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzLCBXaGVyZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuLyoqIEB0b2RvOiBpbXByb3ZlIHRoaXMgKi9cbmNvbnN0IHRyYW5zZm9ybVdoZXJlVG9OYXR1cmFsTGFuZ3VhZ2UgPSAod2hlcmU6IFdoZXJlKTogc3RyaW5nID0+IHtcbiAgaWYgKHdoZXJlLm9yICYmIHdoZXJlLm9yLmxlbmd0aCA+IDAgJiYgd2hlcmUub3JbMF0uYW5kICYmIHdoZXJlLm9yWzBdLmFuZC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgb3JRdWVyeSA9IHdoZXJlLm9yWzBdXG4gICAgY29uc3QgYW5kUXVlcnkgPSBvclF1ZXJ5Py5hbmQ/LlswXVxuXG4gICAgaWYgKCFhbmRRdWVyeSB8fCB0eXBlb2YgYW5kUXVlcnkgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gJ05vIHdoZXJlIHF1ZXJ5J1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGFuZFF1ZXJ5KVswXVxuXG4gICAgaWYgKCFrZXkgfHwgIWFuZFF1ZXJ5W2tleV0gfHwgdHlwZW9mIGFuZFF1ZXJ5W2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gJ05vIHdoZXJlIHF1ZXJ5J1xuICAgIH1cblxuICAgIGNvbnN0IG9wZXJhdG9yID0gT2JqZWN0LmtleXMoYW5kUXVlcnlba2V5XSlbMF1cbiAgICBjb25zdCB2YWx1ZSA9IGFuZFF1ZXJ5W2tleV1bb3BlcmF0b3JdXG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGAke3RvV29yZHMoa2V5KX0gJHtvcGVyYXRvcn0gJHt0b1dvcmRzKHZhbHVlKX1gXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGAke3RvV29yZHMoa2V5KX0gJHtvcGVyYXRvcn0gJHt2YWx1ZS5tYXAoKHZhbCkgPT4gdG9Xb3Jkcyh2YWwpKS5qb2luKCcgb3IgJyl9YFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJ1xufVxuXG5leHBvcnQgY29uc3QgUXVlcnlQcmVzZXRzV2hlcmVDZWxsOiBSZWFjdC5GQzxEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzPiA9ICh7IGNlbGxEYXRhIH0pID0+IHtcbiAgcmV0dXJuIDxkaXY+e2NlbGxEYXRhID8gdHJhbnNmb3JtV2hlcmVUb05hdHVyYWxMYW5ndWFnZShjZWxsRGF0YSkgOiAnTm8gd2hlcmUgcXVlcnknfTwvZGl2PlxufVxuIiwiaW1wb3J0IHR5cGUgeyBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgUXVlcnlQcmVzZXRzQWNjZXNzQ2VsbDogUmVhY3QuRkM8RGVmYXVsdENlbGxDb21wb25lbnRQcm9wcz4gPSAoeyBjZWxsRGF0YSB9KSA9PiB7XG4gIC8vIGZpcnN0IHNvcnQgdGhlIG9wZXJhdGlvbnMgaW4gdGhlIG9yZGVyIHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZFxuICBjb25zdCBvcGVyYXRpb25zID0gWydyZWFkJywgJ3VwZGF0ZScsICdkZWxldGUnXVxuXG4gIHJldHVybiAoXG4gICAgPHA+XG4gICAgICB7b3BlcmF0aW9ucy5yZWR1Y2UoKGFjYywgb3BlcmF0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBvcGVyYXRpb25EYXRhID0gKGNlbGxEYXRhIGFzIEpTT04pPy5bb3BlcmF0aW9uXVxuXG4gICAgICAgIGlmIChvcGVyYXRpb25EYXRhICYmIG9wZXJhdGlvbkRhdGEuY29uc3RyYWludCkge1xuICAgICAgICAgIGFjYy5wdXNoKFxuICAgICAgICAgICAgPEZyYWdtZW50IGtleT17b3BlcmF0aW9ufT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57dG9Xb3JkcyhvcGVyYXRpb24pfTwvc3Ryb25nPjoge3RvV29yZHMob3BlcmF0aW9uRGF0YS5jb25zdHJhaW50KX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB7aW5kZXggIT09IG9wZXJhdGlvbnMubGVuZ3RoIC0gMSAmJiAnLCAnfVxuICAgICAgICAgICAgPC9GcmFnbWVudD4sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIFtdIGFzIEpTWC5FbGVtZW50W10pfVxuICAgIDwvcD5cbiAgKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdG9Xb3JkcyB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9BdXRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVkdWNlRmllbGRzVG9PcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzL3JlZHVjZUZpZWxkc1RvT3B0aW9ucy5qcydcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5UHJlc2V0c0dyb3VwQnlDZWxsOiBSZWFjdC5GQzxEZWZhdWx0Q2VsbENvbXBvbmVudFByb3BzPiA9ICh7XG4gIGNlbGxEYXRhLFxuICByb3dEYXRhLFxufSkgPT4ge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuXG4gIC8vIEdldCB0aGUgcmVsYXRlZCBjb2xsZWN0aW9uIGZyb20gdGhlIHJvdyBkYXRhXG4gIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uID0gcm93RGF0YT8ucmVsYXRlZENvbGxlY3Rpb24gYXMgc3RyaW5nXG5cbiAgLy8gR2V0IHRoZSBjb2xsZWN0aW9uIGNvbmZpZyBmb3IgdGhlIHJlbGF0ZWQgY29sbGVjdGlvblxuICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFyZWxhdGVkQ29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLmNvbGxlY3Rpb25zPy5maW5kKChjb2wpID0+IGNvbC5zbHVnID09PSByZWxhdGVkQ29sbGVjdGlvbilcbiAgfSwgW3JlbGF0ZWRDb2xsZWN0aW9uLCBjb25maWcuY29sbGVjdGlvbnNdKVxuXG4gIC8vIFJlZHVjZSBmaWVsZHMgdG8gb3B0aW9ucyB0byBnZXQgcHJvcGVyIGxhYmVsc1xuICBjb25zdCByZWR1Y2VkRmllbGRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjb2xsZWN0aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5bcmVsYXRlZENvbGxlY3Rpb25dPy5maWVsZHNcblxuICAgIHJldHVybiByZWR1Y2VGaWVsZHNUb09wdGlvbnMoe1xuICAgICAgZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgIGZpZWxkczogY29sbGVjdGlvbkNvbmZpZy5maWVsZHMsXG4gICAgICBpMThuLFxuICAgIH0pXG4gIH0sIFtjb2xsZWN0aW9uQ29uZmlnLCBwZXJtaXNzaW9ucywgcmVsYXRlZENvbGxlY3Rpb24sIGkxOG5dKVxuXG4gIGlmICghY2VsbERhdGEgfHwgdHlwZW9mIGNlbGxEYXRhICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiA8ZGl2Pk5vIGdyb3VwIGJ5IHNlbGVjdGVkPC9kaXY+XG4gIH1cblxuICBjb25zdCBpc0Rlc2NlbmRpbmcgPSBjZWxsRGF0YS5zdGFydHNXaXRoKCctJylcbiAgY29uc3QgZmllbGROYW1lID0gaXNEZXNjZW5kaW5nID8gY2VsbERhdGEuc2xpY2UoMSkgOiBjZWxsRGF0YVxuICBjb25zdCBkaXJlY3Rpb24gPSBpc0Rlc2NlbmRpbmcgPyAnZGVzY2VuZGluZycgOiAnYXNjZW5kaW5nJ1xuXG4gIC8vIEZpbmQgdGhlIGZpZWxkIG9wdGlvbiB0byBnZXQgdGhlIHByb3BlciBsYWJlbFxuICBjb25zdCBmaWVsZE9wdGlvbiA9IHJlZHVjZWRGaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLnZhbHVlID09PSBmaWVsZE5hbWUpXG4gIGNvbnN0IGRpc3BsYXlMYWJlbCA9IGZpZWxkT3B0aW9uPy5sYWJlbCB8fCB0b1dvcmRzKGZpZWxkTmFtZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICB7ZGlzcGxheUxhYmVsfSAoe2RpcmVjdGlvbn0pXG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRUcmFuc2xhdGlvbktleXMsIEkxOG5DbGllbnQgfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkLCBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zLCBTYW5pdGl6ZWRGaWVsZHNQZXJtaXNzaW9ucyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgZmllbGRJc0hpZGRlbk9yRGlzYWJsZWQsIGZpZWxkSXNJRCwgdGFiSGFzTmFtZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5pbXBvcnQgdHlwZSB7IFJlZHVjZWRGaWVsZCB9IGZyb20gJy4uL2VsZW1lbnRzL1doZXJlQnVpbGRlci90eXBlcy5qcydcblxuaW1wb3J0IHtcbiAgZmllbGRUeXBlQ29uZGl0aW9ucyxcbiAgZ2V0VmFsaWRGaWVsZE9wZXJhdG9ycyxcbn0gZnJvbSAnLi4vZWxlbWVudHMvV2hlcmVCdWlsZGVyL2ZpZWxkLXR5cGVzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlTmVzdGVkQ2xpZW50RmllbGRQYXRoIH0gZnJvbSAnLi4vZm9ybXMvRm9ybS9jcmVhdGVOZXN0ZWRDbGllbnRGaWVsZFBhdGguanMnXG5pbXBvcnQgeyBjb21iaW5lRmllbGRMYWJlbCB9IGZyb20gJy4vY29tYmluZUZpZWxkTGFiZWwuanMnXG5cbnR5cGUgUmVkdWNlRmllbGRPcHRpb25zQXJncyA9IHtcbiAgZmllbGRQZXJtaXNzaW9ucz86IFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnMgfCBTYW5pdGl6ZWRGaWVsZHNQZXJtaXNzaW9uc1xuICBmaWVsZHM6IENsaWVudEZpZWxkW11cbiAgaTE4bjogSTE4bkNsaWVudFxuICBsYWJlbFByZWZpeD86IHN0cmluZ1xuICBwYXRoUHJlZml4Pzogc3RyaW5nXG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIGZpZWxkcyBzY2hlbWEgaW50byBhIGZsYXR0ZW5lZCBhcnJheSBvZiBmaWVsZHMgd2l0aCBsYWJlbHMgYW5kIHZhbHVlcy5cbiAqIFVzZWQgaW4gdGhlIGBXaGVyZUJ1aWxkZXJgIGNvbXBvbmVudCB0byByZW5kZXIgdGhlIGZpZWxkcyBpbiB0aGUgZHJvcGRvd24uXG4gKi9cbmV4cG9ydCBjb25zdCByZWR1Y2VGaWVsZHNUb09wdGlvbnMgPSAoe1xuICBmaWVsZFBlcm1pc3Npb25zLFxuICBmaWVsZHMsXG4gIGkxOG4sXG4gIGxhYmVsUHJlZml4LFxuICBwYXRoUHJlZml4OiBwYXRoUHJlZml4RnJvbUFyZ3MsXG59OiBSZWR1Y2VGaWVsZE9wdGlvbnNBcmdzKTogUmVkdWNlZEZpZWxkW10gPT4ge1xuICByZXR1cm4gZmllbGRzLnJlZHVjZSgocmVkdWNlZCwgZmllbGQpID0+IHtcbiAgICBsZXQgcGF0aFByZWZpeCA9IHBhdGhQcmVmaXhGcm9tQXJnc1xuICAgIC8vIERvIG5vdCBmaWx0ZXIgb3V0IGBmaWVsZC5hZG1pbi5kaXNhYmxlTGlzdEZpbHRlcmAgZmllbGRzIGhlcmUsIGFzIHRoZXNlIHNob3VsZCBzdGlsbCByZW5kZXIgYXMgZGlzYWJsZWQgaWYgdGhleSBhcHBlYXIgaW4gdGhlIFVSTCBxdWVyeVxuICAgIC8vIEZpbHRlciBvdXQgYHZpcnR1YWw6IHRydWVgIGZpZWxkcyBzaW5jZSB0aGV5IGFyZSByZWd1bGFyIHZpcnR1YWxzIGFuZCBub3QgYmFja2VkIGJ5IGEgREIgZmllbGRcbiAgICBpZiAoXG4gICAgICAoZmllbGRJc0hpZGRlbk9yRGlzYWJsZWQoZmllbGQpICYmICFmaWVsZElzSUQoZmllbGQpKSB8fFxuICAgICAgKCd2aXJ0dWFsJyBpbiBmaWVsZCAmJiBmaWVsZC52aXJ0dWFsID09PSB0cnVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHJlZHVjZWRcbiAgICB9XG5cbiAgICAvLyBJTVBPUlRBTlQ6IFdlIERPTidUIG11dGF0ZSBmaWVsZC5uYW1lIGhlcmUgYmVjYXVzZSB0aGUgZmllbGQgb2JqZWN0IGlzIHNoYXJlZCBhY3Jvc3NcbiAgICAvLyBtdWx0aXBsZSBjb21wb25lbnRzIChXaGVyZUJ1aWxkZXIsIEdyb3VwQnlCdWlsZGVyLCBldGMuKS4gTXV0YXRpbmcgaXQgd291bGQgYnJlYWtcbiAgICAvLyBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgY2F1c2UgaXNzdWVzIGluIG90aGVyIGNvbXBvbmVudHMgdGhhdCBuZWVkIHRoZSBmaWVsZCBuYW1lLlxuICAgIC8vIEluc3RlYWQsIHdlIHVzZSBhIGZsYWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZmllbGQgbmFtZSBpbiB0aGUgcGF0aC5cbiAgICBsZXQgc2hvdWxkSWdub3JlRmllbGROYW1lID0gZmFsc2VcblxuICAgIC8vIEhhbmRsZSB2aXJ0dWFsOnN0cmluZyBmaWVsZHMgKHZpcnR1YWwgcmVsYXRpb25zaGlwcywgZS5nLiBcInBvc3QudGl0bGVcIilcbiAgICBpZiAoJ3ZpcnR1YWwnIGluIGZpZWxkICYmIHR5cGVvZiBmaWVsZC52aXJ0dWFsID09PSAnc3RyaW5nJykge1xuICAgICAgcGF0aFByZWZpeCA9IHBhdGhQcmVmaXggPyBwYXRoUHJlZml4ICsgJy4nICsgZmllbGQudmlydHVhbCA6IGZpZWxkLnZpcnR1YWxcbiAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAvLyBNYXJrIHRoYXQgd2Ugc2hvdWxkIGlnbm9yZSB0aGUgZmllbGQgbmFtZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmllbGQgcGF0aFxuICAgICAgICBzaG91bGRJZ25vcmVGaWVsZE5hbWUgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJyAmJiAndGFicycgaW4gZmllbGQpIHtcbiAgICAgIGNvbnN0IHRhYnMgPSBmaWVsZC50YWJzXG5cbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFiLmxhYmVsICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBjb25zdCBsb2NhbGl6ZWRUYWJMYWJlbCA9IGdldFRyYW5zbGF0aW9uKHRhYi5sYWJlbCwgaTE4bilcblxuICAgICAgICAgIGNvbnN0IGxhYmVsV2l0aFByZWZpeCA9IGxhYmVsUHJlZml4XG4gICAgICAgICAgICA/IGxhYmVsUHJlZml4ICsgJyA+ICcgKyBsb2NhbGl6ZWRUYWJMYWJlbFxuICAgICAgICAgICAgOiBsb2NhbGl6ZWRUYWJMYWJlbFxuXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhbmRsZSBuZXN0ZWQgdGFic1xuICAgICAgICAgIGNvbnN0IHRhYlBhdGhQcmVmaXggPVxuICAgICAgICAgICAgdGFiSGFzTmFtZSh0YWIpICYmIHRhYi5uYW1lXG4gICAgICAgICAgICAgID8gcGF0aFByZWZpeFxuICAgICAgICAgICAgICAgID8gcGF0aFByZWZpeCArICcuJyArIHRhYi5uYW1lXG4gICAgICAgICAgICAgICAgOiB0YWIubmFtZVxuICAgICAgICAgICAgICA6IHBhdGhQcmVmaXhcblxuICAgICAgICAgIGlmICh0eXBlb2YgbG9jYWxpemVkVGFiTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZWR1Y2VkLnB1c2goXG4gICAgICAgICAgICAgIC4uLnJlZHVjZUZpZWxkc1RvT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgZmllbGRQZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiBmaWVsZFBlcm1pc3Npb25zID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgICAgICAgPyBmaWVsZFBlcm1pc3Npb25zXG4gICAgICAgICAgICAgICAgICAgIDogdGFiSGFzTmFtZSh0YWIpICYmIHRhYi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgPyBmaWVsZFBlcm1pc3Npb25zPy5bdGFiLm5hbWVdPy5maWVsZHMgfHwgZmllbGRQZXJtaXNzaW9ucz8uW3RhYi5uYW1lXVxuICAgICAgICAgICAgICAgICAgICAgIDogZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHRhYi5maWVsZHMsXG4gICAgICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgICAgICBsYWJlbFByZWZpeDogbGFiZWxXaXRoUHJlZml4LFxuICAgICAgICAgICAgICAgIHBhdGhQcmVmaXg6IHRhYlBhdGhQcmVmaXgsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiByZWR1Y2VkXG4gICAgfVxuXG4gICAgLy8gUm93cyBjYW50IGhhdmUgbGFiZWxzLCBzbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGVtIGRpZmZlcmVudGx5XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICdyb3cnICYmICdmaWVsZHMnIGluIGZpZWxkKSB7XG4gICAgICByZWR1Y2VkLnB1c2goXG4gICAgICAgIC4uLnJlZHVjZUZpZWxkc1RvT3B0aW9ucyh7XG4gICAgICAgICAgZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBpMThuLFxuICAgICAgICAgIGxhYmVsUHJlZml4LFxuICAgICAgICAgIHBhdGhQcmVmaXgsXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHJlZHVjZWRcbiAgICB9XG5cbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2NvbGxhcHNpYmxlJyAmJiAnZmllbGRzJyBpbiBmaWVsZCkge1xuICAgICAgY29uc3QgbG9jYWxpemVkVGFiTGFiZWwgPSBnZXRUcmFuc2xhdGlvbihmaWVsZC5sYWJlbCB8fCAnJywgaTE4bilcblxuICAgICAgY29uc3QgbGFiZWxXaXRoUHJlZml4ID0gbGFiZWxQcmVmaXhcbiAgICAgICAgPyBsYWJlbFByZWZpeCArICcgPiAnICsgbG9jYWxpemVkVGFiTGFiZWxcbiAgICAgICAgOiBsb2NhbGl6ZWRUYWJMYWJlbFxuXG4gICAgICByZWR1Y2VkLnB1c2goXG4gICAgICAgIC4uLnJlZHVjZUZpZWxkc1RvT3B0aW9ucyh7XG4gICAgICAgICAgZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBpMThuLFxuICAgICAgICAgIGxhYmVsUHJlZml4OiBsYWJlbFdpdGhQcmVmaXgsXG4gICAgICAgICAgcGF0aFByZWZpeCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICByZXR1cm4gcmVkdWNlZFxuICAgIH1cblxuICAgIGlmIChmaWVsZC50eXBlID09PSAnZ3JvdXAnICYmICdmaWVsZHMnIGluIGZpZWxkKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkTGFiZWwgPSBnZXRUcmFuc2xhdGlvbihmaWVsZC5sYWJlbCB8fCAnJywgaTE4bilcblxuICAgICAgY29uc3QgbGFiZWxXaXRoUHJlZml4ID0gbGFiZWxQcmVmaXhcbiAgICAgICAgPyB0cmFuc2xhdGVkTGFiZWxcbiAgICAgICAgICA/IGxhYmVsUHJlZml4ICsgJyA+ICcgKyB0cmFuc2xhdGVkTGFiZWxcbiAgICAgICAgICA6IGxhYmVsUHJlZml4XG4gICAgICAgIDogdHJhbnNsYXRlZExhYmVsXG5cbiAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGFuZGxlIGRlZXBseSBuZXN0ZWQgZ3JvdXBzXG4gICAgICAgIGNvbnN0IHBhdGhXaXRoUHJlZml4ID0gZmllbGQubmFtZVxuICAgICAgICAgID8gcGF0aFByZWZpeFxuICAgICAgICAgICAgPyBwYXRoUHJlZml4ICsgJy4nICsgZmllbGQubmFtZVxuICAgICAgICAgICAgOiBmaWVsZC5uYW1lXG4gICAgICAgICAgOiBwYXRoUHJlZml4XG5cbiAgICAgICAgcmVkdWNlZC5wdXNoKFxuICAgICAgICAgIC4uLnJlZHVjZUZpZWxkc1RvT3B0aW9ucyh7XG4gICAgICAgICAgICBmaWVsZFBlcm1pc3Npb25zOlxuICAgICAgICAgICAgICB0eXBlb2YgZmllbGRQZXJtaXNzaW9ucyA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICAgICAgPyBmaWVsZFBlcm1pc3Npb25zXG4gICAgICAgICAgICAgICAgOiBmaWVsZFBlcm1pc3Npb25zPy5bZmllbGQubmFtZV0/LmZpZWxkcyB8fCBmaWVsZFBlcm1pc3Npb25zPy5bZmllbGQubmFtZV0sXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgICBsYWJlbFByZWZpeDogbGFiZWxXaXRoUHJlZml4LFxuICAgICAgICAgICAgcGF0aFByZWZpeDogcGF0aFdpdGhQcmVmaXgsXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZHVjZWQucHVzaChcbiAgICAgICAgICAuLi5yZWR1Y2VGaWVsZHNUb09wdGlvbnMoe1xuICAgICAgICAgICAgZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgIGxhYmVsUHJlZml4OiBsYWJlbFdpdGhQcmVmaXgsXG4gICAgICAgICAgICBwYXRoUHJlZml4LFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWR1Y2VkXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScgJiYgJ2ZpZWxkcycgaW4gZmllbGQpIHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRMYWJlbCA9IGdldFRyYW5zbGF0aW9uKGZpZWxkLmxhYmVsIHx8ICcnLCBpMThuKVxuXG4gICAgICBjb25zdCBsYWJlbFdpdGhQcmVmaXggPSBsYWJlbFByZWZpeFxuICAgICAgICA/IHRyYW5zbGF0ZWRMYWJlbFxuICAgICAgICAgID8gbGFiZWxQcmVmaXggKyAnID4gJyArIHRyYW5zbGF0ZWRMYWJlbFxuICAgICAgICAgIDogbGFiZWxQcmVmaXhcbiAgICAgICAgOiB0cmFuc2xhdGVkTGFiZWxcblxuICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhbmRsZSBkZWVwbHkgbmVzdGVkIGdyb3Vwc1xuICAgICAgY29uc3QgcGF0aFdpdGhQcmVmaXggPSBmaWVsZC5uYW1lXG4gICAgICAgID8gcGF0aFByZWZpeFxuICAgICAgICAgID8gcGF0aFByZWZpeCArICcuJyArIGZpZWxkLm5hbWVcbiAgICAgICAgICA6IGZpZWxkLm5hbWVcbiAgICAgICAgOiBwYXRoUHJlZml4XG5cbiAgICAgIHJlZHVjZWQucHVzaChcbiAgICAgICAgLi4ucmVkdWNlRmllbGRzVG9PcHRpb25zKHtcbiAgICAgICAgICBmaWVsZFBlcm1pc3Npb25zOlxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkUGVybWlzc2lvbnMgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICA/IGZpZWxkUGVybWlzc2lvbnNcbiAgICAgICAgICAgICAgOiBmaWVsZFBlcm1pc3Npb25zPy5bZmllbGQubmFtZV0/LmZpZWxkcyB8fCBmaWVsZFBlcm1pc3Npb25zPy5bZmllbGQubmFtZV0sXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgaTE4bixcbiAgICAgICAgICBsYWJlbFByZWZpeDogbGFiZWxXaXRoUHJlZml4LFxuICAgICAgICAgIHBhdGhQcmVmaXg6IHBhdGhXaXRoUHJlZml4LFxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHJlZHVjZWRcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpZWxkVHlwZUNvbmRpdGlvbnNbZmllbGQudHlwZV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkSXNJRChmaWVsZCkgfHxcbiAgICAgICAgZmllbGRQZXJtaXNzaW9ucyA9PT0gdHJ1ZSB8fFxuICAgICAgICBmaWVsZFBlcm1pc3Npb25zPy5bZmllbGQubmFtZV0gPT09IHRydWUgfHxcbiAgICAgICAgZmllbGRQZXJtaXNzaW9ucz8uW2ZpZWxkLm5hbWVdPy5yZWFkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0b3JLZXlzID0gbmV3IFNldCgpXG5cbiAgICAgICAgY29uc3QgeyB2YWxpZE9wZXJhdG9ycyB9ID0gZ2V0VmFsaWRGaWVsZE9wZXJhdG9ycyh7XG4gICAgICAgICAgZmllbGQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gdmFsaWRPcGVyYXRvcnMucmVkdWNlKChhY2MsIG9wZXJhdG9yKSA9PiB7XG4gICAgICAgICAgaWYgKCFvcGVyYXRvcktleXMuaGFzKG9wZXJhdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgb3BlcmF0b3JLZXlzLmFkZChvcGVyYXRvci52YWx1ZSlcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yS2V5ID0gYG9wZXJhdG9yczoke29wZXJhdG9yLmxhYmVsfWAgYXMgQ2xpZW50VHJhbnNsYXRpb25LZXlzXG4gICAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICAgIC4uLm9wZXJhdG9yLFxuICAgICAgICAgICAgICBsYWJlbDogaTE4bi50KG9wZXJhdG9yS2V5KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICB9LCBbXSlcblxuICAgICAgICBjb25zdCBsb2NhbGl6ZWRMYWJlbCA9IGdldFRyYW5zbGF0aW9uKGZpZWxkLmxhYmVsIHx8ICcnLCBpMThuKVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZExhYmVsID0gbGFiZWxQcmVmaXhcbiAgICAgICAgICA/IGNvbWJpbmVGaWVsZExhYmVsKHtcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIHByZWZpeDogbGFiZWxQcmVmaXgsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbG9jYWxpemVkTGFiZWxcblxuICAgICAgICAvLyBGb3IgdmlydHVhbCBmaWVsZHMsIHdlIHVzZSBqdXN0IHRoZSBwYXRoUHJlZml4ICh0aGUgdmlydHVhbCBwYXRoKSB3aXRob3V0IGFwcGVuZGluZyB0aGUgZmllbGQgbmFtZVxuICAgICAgICAvLyBGb3IgcmVndWxhciBmaWVsZHMsIHdlIHVzZSBjcmVhdGVOZXN0ZWRDbGllbnRGaWVsZFBhdGggd2hpY2ggYXBwZW5kcyB0aGUgZmllbGQgbmFtZSB0byB0aGUgcGF0aFxuICAgICAgICBsZXQgZmllbGRQYXRoOiBzdHJpbmdcbiAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpZWxkTmFtZSkge1xuICAgICAgICAgIGZpZWxkUGF0aCA9IHBhdGhQcmVmaXhcbiAgICAgICAgfSBlbHNlIGlmIChwYXRoUHJlZml4KSB7XG4gICAgICAgICAgZmllbGRQYXRoID0gY3JlYXRlTmVzdGVkQ2xpZW50RmllbGRQYXRoKHBhdGhQcmVmaXgsIGZpZWxkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkUGF0aCA9IGZpZWxkLm5hbWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEZpZWxkOiBSZWR1Y2VkRmllbGQgPSB7XG4gICAgICAgICAgbGFiZWw6IGZvcm1hdHRlZExhYmVsLFxuICAgICAgICAgIHBsYWluVGV4dExhYmVsOiBgJHtsYWJlbFByZWZpeCA/IGxhYmVsUHJlZml4ICsgJyA+ICcgOiAnJ30ke2xvY2FsaXplZExhYmVsfWAsXG4gICAgICAgICAgdmFsdWU6IGZpZWxkUGF0aCxcbiAgICAgICAgICAuLi5maWVsZFR5cGVDb25kaXRpb25zW2ZpZWxkLnR5cGVdLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIG9wZXJhdG9ycyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZHVjZWQucHVzaChmb3JtYXR0ZWRGaWVsZClcbiAgICAgICAgcmV0dXJuIHJlZHVjZWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlZHVjZWRcbiAgfSwgW10pXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDbGllbnRGaWVsZCB9IGZyb20gJ3BheWxvYWQnXG5cbmNvbnN0IGVxdWFsc09wZXJhdG9ycyA9IFtcbiAge1xuICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICB2YWx1ZTogJ2VxdWFscycsXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ2lzTm90RXF1YWxUbycsXG4gICAgdmFsdWU6ICdub3RfZXF1YWxzJyxcbiAgfSxcbl1cblxuZXhwb3J0IGNvbnN0IGFycmF5T3BlcmF0b3JzID0gW1xuICB7XG4gICAgbGFiZWw6ICdpc0luJyxcbiAgICB2YWx1ZTogJ2luJyxcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnaXNOb3RJbicsXG4gICAgdmFsdWU6ICdub3RfaW4nLFxuICB9LFxuXVxuXG5jb25zdCBleGlzdHMgPSB7XG4gIGxhYmVsOiAnZXhpc3RzJyxcbiAgdmFsdWU6ICdleGlzdHMnLFxufVxuXG5jb25zdCBiYXNlID0gWy4uLmVxdWFsc09wZXJhdG9ycywgLi4uYXJyYXlPcGVyYXRvcnMsIGV4aXN0c11cblxuY29uc3QgbnVtZXJpYyA9IFtcbiAgLi4uYmFzZSxcbiAge1xuICAgIGxhYmVsOiAnaXNHcmVhdGVyVGhhbicsXG4gICAgdmFsdWU6ICdncmVhdGVyX3RoYW4nLFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdpc0xlc3NUaGFuJyxcbiAgICB2YWx1ZTogJ2xlc3NfdGhhbicsXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ2lzTGVzc1RoYW5PckVxdWFsVG8nLFxuICAgIHZhbHVlOiAnbGVzc190aGFuX2VxdWFsJyxcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnaXNHcmVhdGVyVGhhbk9yRXF1YWxUbycsXG4gICAgdmFsdWU6ICdncmVhdGVyX3RoYW5fZXF1YWwnLFxuICB9LFxuXVxuXG5jb25zdCBnZW8gPSBbXG4gIC4uLmVxdWFsc09wZXJhdG9ycyxcbiAge1xuICAgIGxhYmVsOiAnbmVhcicsXG4gICAgdmFsdWU6ICduZWFyJyxcbiAgfSxcbl1cblxuY29uc3Qgd2l0aGluID0ge1xuICBsYWJlbDogJ3dpdGhpbicsXG4gIHZhbHVlOiAnd2l0aGluJyxcbn1cblxuY29uc3QgaW50ZXJzZWN0cyA9IHtcbiAgbGFiZWw6ICdpbnRlcnNlY3RzJyxcbiAgdmFsdWU6ICdpbnRlcnNlY3RzJyxcbn1cblxuY29uc3QgbGlrZSA9IHtcbiAgbGFiZWw6ICdpc0xpa2UnLFxuICB2YWx1ZTogJ2xpa2UnLFxufVxuXG5jb25zdCBub3RMaWtlID0ge1xuICBsYWJlbDogJ2lzTm90TGlrZScsXG4gIHZhbHVlOiAnbm90X2xpa2UnLFxufVxuXG5jb25zdCBjb250YWlucyA9IHtcbiAgbGFiZWw6ICdjb250YWlucycsXG4gIHZhbHVlOiAnY29udGFpbnMnLFxufVxuXG5leHBvcnQgY29uc3QgZmllbGRUeXBlQ29uZGl0aW9uczoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgY29tcG9uZW50OiBzdHJpbmdcbiAgICBvcGVyYXRvcnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W11cbiAgfVxufSA9IHtcbiAgY2hlY2tib3g6IHtcbiAgICBjb21wb25lbnQ6ICdUZXh0JyxcbiAgICBvcGVyYXRvcnM6IFsuLi5lcXVhbHNPcGVyYXRvcnMsIGV4aXN0c10sXG4gIH0sXG4gIGNvZGU6IHtcbiAgICBjb21wb25lbnQ6ICdUZXh0JyxcbiAgICBvcGVyYXRvcnM6IFsuLi5iYXNlLCBsaWtlLCBub3RMaWtlLCBjb250YWluc10sXG4gIH0sXG4gIGRhdGU6IHtcbiAgICBjb21wb25lbnQ6ICdEYXRlJyxcbiAgICBvcGVyYXRvcnM6IFsuLi5udW1lcmljLCBleGlzdHNdLFxuICB9LFxuICBlbWFpbDoge1xuICAgIGNvbXBvbmVudDogJ1RleHQnLFxuICAgIG9wZXJhdG9yczogWy4uLmJhc2UsIGNvbnRhaW5zXSxcbiAgfSxcbiAganNvbjoge1xuICAgIGNvbXBvbmVudDogJ1RleHQnLFxuICAgIG9wZXJhdG9yczogWy4uLmJhc2UsIGxpa2UsIGNvbnRhaW5zLCBub3RMaWtlLCB3aXRoaW4sIGludGVyc2VjdHNdLFxuICB9LFxuICBudW1iZXI6IHtcbiAgICBjb21wb25lbnQ6ICdOdW1iZXInLFxuICAgIG9wZXJhdG9yczogWy4uLm51bWVyaWMsIGV4aXN0c10sXG4gIH0sXG4gIHBvaW50OiB7XG4gICAgY29tcG9uZW50OiAnUG9pbnQnLFxuICAgIG9wZXJhdG9yczogWy4uLmdlbywgZXhpc3RzLCB3aXRoaW4sIGludGVyc2VjdHNdLFxuICB9LFxuICByYWRpbzoge1xuICAgIGNvbXBvbmVudDogJ1NlbGVjdCcsXG4gICAgb3BlcmF0b3JzOiBbLi4uYmFzZV0sXG4gIH0sXG4gIHJlbGF0aW9uc2hpcDoge1xuICAgIGNvbXBvbmVudDogJ1JlbGF0aW9uc2hpcCcsXG4gICAgb3BlcmF0b3JzOiBbLi4uYmFzZV0sXG4gIH0sXG4gIHJpY2hUZXh0OiB7XG4gICAgY29tcG9uZW50OiAnVGV4dCcsXG4gICAgb3BlcmF0b3JzOiBbLi4uYmFzZSwgbGlrZSwgbm90TGlrZSwgY29udGFpbnNdLFxuICB9LFxuICBzZWxlY3Q6IHtcbiAgICBjb21wb25lbnQ6ICdTZWxlY3QnLFxuICAgIG9wZXJhdG9yczogWy4uLmJhc2VdLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgY29tcG9uZW50OiAnVGV4dCcsXG4gICAgb3BlcmF0b3JzOiBbLi4uYmFzZSwgbGlrZSwgbm90TGlrZSwgY29udGFpbnNdLFxuICB9LFxuICB0ZXh0YXJlYToge1xuICAgIGNvbXBvbmVudDogJ1RleHQnLFxuICAgIG9wZXJhdG9yczogWy4uLmJhc2UsIGxpa2UsIG5vdExpa2UsIGNvbnRhaW5zXSxcbiAgfSxcbiAgdXBsb2FkOiB7XG4gICAgY29tcG9uZW50OiAnUmVsYXRpb25zaGlwJyxcbiAgICBvcGVyYXRvcnM6IFsuLi5iYXNlXSxcbiAgfSxcbn1cblxuZXhwb3J0IGNvbnN0IGdldFZhbGlkRmllbGRPcGVyYXRvcnMgPSAoe1xuICBmaWVsZCxcbiAgb3BlcmF0b3IsXG59OiB7XG4gIGZpZWxkOiBDbGllbnRGaWVsZFxuICBvcGVyYXRvcj86IHN0cmluZ1xufSk6IHtcbiAgdmFsaWRPcGVyYXRvcjogc3RyaW5nXG4gIHZhbGlkT3BlcmF0b3JzOiB7XG4gICAgbGFiZWw6IHN0cmluZ1xuICAgIHZhbHVlOiBzdHJpbmdcbiAgfVtdXG59ID0+IHtcbiAgbGV0IHZhbGlkT3BlcmF0b3JzOiB7XG4gICAgbGFiZWw6IHN0cmluZ1xuICAgIHZhbHVlOiBzdHJpbmdcbiAgfVtdID0gW11cblxuICBpZiAoZmllbGQudHlwZSA9PT0gJ3JlbGF0aW9uc2hpcCcgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgIC8vIFBvbHltb3JwaGljIHJlbGF0aW9uc2hpcHMgc3RvcmUge3JlbGF0aW9uVG8sIHZhbHVlfSAtIGluL25vdF9pbiBvbmx5IG1hdGNoIHZhbHVlLCBub3QgYm90aCBwcm9wZXJ0aWVzXG4gICAgdmFsaWRPcGVyYXRvcnMgPSBbLi4uZXF1YWxzT3BlcmF0b3JzLCBleGlzdHNdXG4gIH0gZWxzZSB7XG4gICAgdmFsaWRPcGVyYXRvcnMgPSBbLi4uZmllbGRUeXBlQ29uZGl0aW9uc1tmaWVsZC50eXBlXS5vcGVyYXRvcnNdXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbGlkT3BlcmF0b3I6XG4gICAgICBvcGVyYXRvciAmJiB2YWxpZE9wZXJhdG9ycy5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcGVyYXRvcilcbiAgICAgICAgPyBvcGVyYXRvclxuICAgICAgICA6IHZhbGlkT3BlcmF0b3JzWzBdLnZhbHVlLFxuICAgIHZhbGlkT3BlcmF0b3JzLFxuICB9XG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ29sdW1uUHJlZmVyZW5jZSwgSlNPTkZpZWxkQ2xpZW50Q29tcG9uZW50IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0LCB7IHVzZUlkLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9maWVsZHMvRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBnZXRDb2x1bW5zIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzL2dldENvbHVtbnMuanMnXG5pbXBvcnQgeyByZWR1Y2VGaWVsZHNUb09wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXRpZXMvcmVkdWNlRmllbGRzVG9PcHRpb25zLmpzJ1xuaW1wb3J0IHsgUGlsbFNlbGVjdG9yLCB0eXBlIFNlbGVjdGFibGVQaWxsIH0gZnJvbSAnLi4vLi4vLi4vUGlsbFNlbGVjdG9yL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBRdWVyeVByZXNldHNDb2x1bW5GaWVsZDogSlNPTkZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHtcbiAgZmllbGQ6IHsgbGFiZWwsIHJlcXVpcmVkIH0sXG59KSA9PiB7XG4gIGNvbnN0IHsgcGF0aCwgc2V0VmFsdWUsIHZhbHVlIH0gPSB1c2VGaWVsZDxDb2x1bW5QcmVmZXJlbmNlW10+KClcbiAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25GaWVsZCA9IHVzZUZpZWxkKHsgcGF0aDogJ3JlbGF0ZWRDb2xsZWN0aW9uJyB9KVxuICBjb25zdCByZWxhdGVkQ29sbGVjdGlvbiA9IHJlbGF0ZWRDb2xsZWN0aW9uRmllbGQudmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHsgY29uZmlnLCBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IHBlcm1pc3Npb25zIH0gPSB1c2VBdXRoKClcbiAgY29uc3QgdXVpZCA9IHVzZUlkKClcblxuICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gdXNlTWVtbyhcbiAgICAoKSA9PiAocmVsYXRlZENvbGxlY3Rpb24gPyBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZzogcmVsYXRlZENvbGxlY3Rpb24gfSkgOiBudWxsKSxcbiAgICBbcmVsYXRlZENvbGxlY3Rpb24sIGdldEVudGl0eUNvbmZpZ10sXG4gIClcblxuICBjb25zdCBjb2x1bW5zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFyZWxhdGVkQ29sbGVjdGlvbiB8fCAhY29sbGVjdGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIHJldHVybiBnZXRDb2x1bW5zKHtcbiAgICAgIGNsaWVudENvbmZpZzogY29uZmlnLFxuICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIGNvbGxlY3Rpb25TbHVnOiByZWxhdGVkQ29sbGVjdGlvbixcbiAgICAgIGNvbHVtbnM6IHZhbHVlID8/IFtdLFxuICAgICAgaTE4bixcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgIH0pXG4gIH0sIFtjb25maWcsIGNvbGxlY3Rpb25Db25maWcsIHJlbGF0ZWRDb2xsZWN0aW9uLCB2YWx1ZSwgaTE4biwgcGVybWlzc2lvbnNdKVxuXG4gIGNvbnN0IHJlZHVjZWRGaWVsZHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNvbGxlY3Rpb25Db25maWc/LmZpZWxkcykge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIHJldHVybiByZWR1Y2VGaWVsZHNUb09wdGlvbnMoe1xuICAgICAgZmllbGRQZXJtaXNzaW9uczogcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5bcmVsYXRlZENvbGxlY3Rpb25dPy5maWVsZHMgPz8gdHJ1ZSxcbiAgICAgIGZpZWxkczogY29sbGVjdGlvbkNvbmZpZy5maWVsZHMsXG4gICAgICBpMThuLFxuICAgIH0pXG4gIH0sIFtjb2xsZWN0aW9uQ29uZmlnLCBpMThuLCBwZXJtaXNzaW9ucywgcmVsYXRlZENvbGxlY3Rpb25dKVxuXG4gIGNvbnN0IGFjY2Vzc29yVG9MYWJlbCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgUmVhY3QuUmVhY3ROb2RlPiA9IHt9XG4gICAgZm9yIChjb25zdCBmIG9mIHJlZHVjZWRGaWVsZHMpIHtcbiAgICAgIG1hcFtTdHJpbmcoZi52YWx1ZSldID0gZi5sYWJlbFxuICAgIH1cbiAgICByZXR1cm4gbWFwXG4gIH0sIFtyZWR1Y2VkRmllbGRzXSlcblxuICBjb25zdCBwaWxsczogU2VsZWN0YWJsZVBpbGxbXSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGNvbHVtbnMubWFwKChjb2wsIGkpID0+ICh7XG4gICAgICAgIG5hbWU6IGNvbC5hY2Nlc3NvcixcbiAgICAgICAga2V5OiBgJHtyZWxhdGVkQ29sbGVjdGlvbn0tJHtjb2wuYWNjZXNzb3J9LSR7aX0tJHt1dWlkfWAsXG4gICAgICAgIExhYmVsOiBhY2Nlc3NvclRvTGFiZWxbY29sLmFjY2Vzc29yXSA/PyBjb2wuYWNjZXNzb3IsXG4gICAgICAgIHNlbGVjdGVkOiBjb2wuYWN0aXZlLFxuICAgICAgfSkpLFxuICAgIFthY2Nlc3NvclRvTGFiZWwsIGNvbHVtbnMsIHJlbGF0ZWRDb2xsZWN0aW9uLCB1dWlkXSxcbiAgKVxuXG4gIGNvbnN0IGN1cnJlbnRDb2x1bW5zID0gdmFsdWUgPz8gY29sdW1uc1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHsgcGlsbCB9OiB7IHBpbGw6IFNlbGVjdGFibGVQaWxsIH0pID0+IHtcbiAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBjdXJyZW50Q29sdW1ucy5tYXAoKGNvbCkgPT5cbiAgICAgICAgY29sLmFjY2Vzc29yID09PSBwaWxsLm5hbWUgPyB7IC4uLmNvbCwgYWN0aXZlOiAhY29sLmFjdGl2ZSB9IDogY29sLFxuICAgICAgKVxuICAgICAgc2V0VmFsdWUobmV3Q29sdW1ucy5sZW5ndGggPyBuZXdDb2x1bW5zIDogdW5kZWZpbmVkKVxuICAgIH0sXG4gICAgW2N1cnJlbnRDb2x1bW5zLCBzZXRWYWx1ZV0sXG4gIClcblxuICBpZiAoIXJlbGF0ZWRDb2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGQtdHlwZSBxdWVyeS1wcmVzZXQtY29sdW1ucy1maWVsZFwiPlxuICAgICAgICA8RmllbGRMYWJlbCBhcz1cImgzXCIgbGFiZWw9e2xhYmVsfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInF1ZXJ5LXByZXNldC1jb2x1bW5zLWZpZWxkX19oaW50XCI+XG4gICAgICAgICAgU2VsZWN0IHRoZSByZWxhdGVkIGNvbGxlY3Rpb24gdG8gY29uZmlndXJlIGNvbHVtbnMuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZC10eXBlIHF1ZXJ5LXByZXNldC1jb2x1bW5zLWZpZWxkXCI+XG4gICAgICA8RmllbGRMYWJlbCBhcz1cImgzXCIgbGFiZWw9e2xhYmVsfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICB7cGlsbHMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgPFBpbGxTZWxlY3RvciBvbkNsaWNrPXtoYW5kbGVDbGlja30gcGlsbHM9e3BpbGxzfSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwicXVlcnktcHJlc2V0LWNvbHVtbnMtZmllbGRfX2hpbnRcIj5cbiAgICAgICAgICBObyBjb2x1bW5zIGF2YWlsYWJsZSBmb3IgdGhpcyBjb2xsZWN0aW9uLlxuICAgICAgICA8L3A+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IEkxOG5DbGllbnQgfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgdHlwZSB7XG4gIENsaWVudENvbGxlY3Rpb25Db25maWcsXG4gIENsaWVudENvbmZpZyxcbiAgQ29sdW1uUHJlZmVyZW5jZSxcbiAgU2FuaXRpemVkUGVybWlzc2lvbnMsXG59IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEsIGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5pbXBvcnQgeyBmaWx0ZXJGaWVsZHNXaXRoUGVybWlzc2lvbnMgfSBmcm9tICcuLi9wcm92aWRlcnMvVGFibGVDb2x1bW5zL2J1aWxkQ29sdW1uU3RhdGUvZmlsdGVyRmllbGRzV2l0aFBlcm1pc3Npb25zLmpzJ1xuaW1wb3J0IHsgZ2V0SW5pdGlhbENvbHVtbnMgfSBmcm9tICcuLi9wcm92aWRlcnMvVGFibGVDb2x1bW5zL2dldEluaXRpYWxDb2x1bW5zLmpzJ1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1ucyA9ICh7XG4gIGNsaWVudENvbmZpZyxcbiAgY29sbGVjdGlvbkNvbmZpZyxcbiAgY29sbGVjdGlvblNsdWcsXG4gIGNvbHVtbnMsXG4gIGkxOG4sXG4gIHBlcm1pc3Npb25zLFxufToge1xuICBjbGllbnRDb25maWc6IENsaWVudENvbmZpZ1xuICBjb2xsZWN0aW9uQ29uZmlnPzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nIHwgc3RyaW5nW11cbiAgY29sdW1uczogQ29sdW1uUHJlZmVyZW5jZVtdXG4gIGkxOG46IEkxOG5DbGllbnRcbiAgcGVybWlzc2lvbnM/OiBTYW5pdGl6ZWRQZXJtaXNzaW9uc1xufSkgPT4ge1xuICBjb25zdCBpc1BvbHltb3JwaGljID0gQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uU2x1ZylcblxuICBjb25zdCBmaWVsZHMgPSAhaXNQb2x5bW9ycGhpYyA/IChjb2xsZWN0aW9uQ29uZmlnPy5maWVsZHMgPz8gW10pIDogW11cblxuICBpZiAoaXNQb2x5bW9ycGhpYykge1xuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uU2x1Zykge1xuICAgICAgY29uc3QgY2xpZW50Q29sbGVjdGlvbkNvbmZpZyA9IGNsaWVudENvbmZpZy5jb2xsZWN0aW9ucy5maW5kKFxuICAgICAgICAoZWFjaCkgPT4gZWFjaC5zbHVnID09PSBjb2xsZWN0aW9uLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpbHRlckZpZWxkc1dpdGhQZXJtaXNzaW9ucyh7XG4gICAgICAgIGZpZWxkUGVybWlzc2lvbnM6IHBlcm1pc3Npb25zPy5jb2xsZWN0aW9ucz8uW2NvbGxlY3Rpb25dPy5maWVsZHMgfHwgdHJ1ZSxcbiAgICAgICAgZmllbGRzOiBjbGllbnRDb2xsZWN0aW9uQ29uZmlnLmZpZWxkcyxcbiAgICAgIH0pKSB7XG4gICAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAgIGlmIChmaWVsZHMuc29tZSgoZWFjaCkgPT4gZmllbGRBZmZlY3RzRGF0YShlYWNoKSAmJiBlYWNoLm5hbWUgPT09IGZpZWxkLm5hbWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb2x1bW5zPy5sZW5ndGhcbiAgICA/IGNvbHVtbnM/LmZpbHRlcigoY29sdW1uKSA9PlxuICAgICAgICBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzLCB7XG4gICAgICAgICAgaTE4bixcbiAgICAgICAgICBrZWVwUHJlc2VudGF0aW9uYWxGaWVsZHM6IHRydWUsXG4gICAgICAgICAgbW92ZVN1YkZpZWxkc1RvVG9wOiB0cnVlLFxuICAgICAgICB9KT8uc29tZSgoZmllbGQpID0+IHtcbiAgICAgICAgICBjb25zdCBhY2Nlc3NvciA9XG4gICAgICAgICAgICAnYWNjZXNzb3InIGluIGZpZWxkID8gZmllbGQuYWNjZXNzb3IgOiAnbmFtZScgaW4gZmllbGQgPyBmaWVsZC5uYW1lIDogdW5kZWZpbmVkXG4gICAgICAgICAgcmV0dXJuIGFjY2Vzc29yID09PSBjb2x1bW4uYWNjZXNzb3JcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgOiBnZXRJbml0aWFsQ29sdW1ucyhcbiAgICAgICAgaXNQb2x5bW9ycGhpY1xuICAgICAgICAgID8gZmllbGRzXG4gICAgICAgICAgOiBmaWx0ZXJGaWVsZHNXaXRoUGVybWlzc2lvbnMoe1xuICAgICAgICAgICAgICBmaWVsZFBlcm1pc3Npb25zOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBjb2xsZWN0aW9uU2x1ZyA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucz8uY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uU2x1Z10/LmZpZWxkc1xuICAgICAgICAgICAgICAgICAgPyBwZXJtaXNzaW9ucy5jb2xsZWN0aW9uc1tjb2xsZWN0aW9uU2x1Z10uZmllbGRzXG4gICAgICAgICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBjb2xsZWN0aW9uQ29uZmlnPy5hZG1pbj8udXNlQXNUaXRsZSxcbiAgICAgICAgaXNQb2x5bW9ycGhpYyA/IFtdIDogY29sbGVjdGlvbkNvbmZpZz8uYWRtaW4/LmRlZmF1bHRDb2x1bW5zLFxuICAgICAgKVxufVxuIiwiaW1wb3J0IHR5cGUge1xuICBDbGllbnRGaWVsZCxcbiAgRmllbGQsXG4gIFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnMsXG4gIFNhbml0aXplZEZpZWxkc1Blcm1pc3Npb25zLFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCBmaWVsZElzSGlkZGVuT3JEaXNhYmxlZCwgZmllbGRJc0lEIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbmNvbnN0IHNob3VsZFNraXBGaWVsZCA9IChmaWVsZDogQ2xpZW50RmllbGQgfCBGaWVsZCk6IGJvb2xlYW4gPT5cbiAgKGZpZWxkLnR5cGUgIT09ICd1aScgJiYgZmllbGRJc0hpZGRlbk9yRGlzYWJsZWQoZmllbGQpICYmICFmaWVsZElzSUQoZmllbGQpKSB8fFxuICBmaWVsZD8uYWRtaW4/LmRpc2FibGVMaXN0Q29sdW1uID09PSB0cnVlXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJGaWVsZHNXaXRoUGVybWlzc2lvbnMgPSA8VCBleHRlbmRzIENsaWVudEZpZWxkIHwgRmllbGQgPSBDbGllbnRGaWVsZD4oe1xuICBmaWVsZFBlcm1pc3Npb25zLFxuICBmaWVsZHMsXG59OiB7XG4gIGZpZWxkUGVybWlzc2lvbnM/OiBTYW5pdGl6ZWRGaWVsZFBlcm1pc3Npb25zIHwgU2FuaXRpemVkRmllbGRzUGVybWlzc2lvbnNcbiAgZmllbGRzOiAoQ2xpZW50RmllbGQgfCBGaWVsZClbXVxufSk6IFRbXSA9PiB7XG4gIHJldHVybiAoZmllbGRzID8/IFtdKS5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICBpZiAoc2hvdWxkU2tpcEZpZWxkKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIGFjY1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSB0YWJzXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJyAmJiAndGFicycgaW4gZmllbGQpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEZpZWxkID0ge1xuICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgdGFiczogZmllbGQudGFicy5tYXAoKHRhYikgPT4gKHtcbiAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgZmllbGRzOiBmaWx0ZXJGaWVsZHNXaXRoUGVybWlzc2lvbnM8VD4oe1xuICAgICAgICAgICAgZmllbGRQZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgdHlwZW9mIGZpZWxkUGVybWlzc2lvbnMgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICAgID8gZmllbGRQZXJtaXNzaW9uc1xuICAgICAgICAgICAgICAgIDogJ25hbWUnIGluIHRhYiAmJiB0YWIubmFtZVxuICAgICAgICAgICAgICAgICAgPyBmaWVsZFBlcm1pc3Npb25zW3RhYi5uYW1lXT8uZmllbGRzIHx8IGZpZWxkUGVybWlzc2lvbnNbdGFiLm5hbWVdXG4gICAgICAgICAgICAgICAgICA6IGZpZWxkUGVybWlzc2lvbnMsXG4gICAgICAgICAgICBmaWVsZHM6IHRhYi5maWVsZHMsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKSxcbiAgICAgIH0gYXMgQ2xpZW50RmllbGQgfCBGaWVsZFxuICAgICAgYWNjLnB1c2goZm9ybWF0dGVkRmllbGQpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIGZpZWxkcyB3aXRoIHN1YmZpZWxkcyAocm93LCBncm91cCwgY29sbGFwc2libGUsIGV0Yy4pXG4gICAgaWYgKCdmaWVsZHMnIGluIGZpZWxkICYmIEFycmF5LmlzQXJyYXkoZmllbGQuZmllbGRzKSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRmllbGQgPSB7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBmaWVsZHM6IGZpbHRlckZpZWxkc1dpdGhQZXJtaXNzaW9uczxUPih7XG4gICAgICAgICAgZmllbGRQZXJtaXNzaW9uczpcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZFBlcm1pc3Npb25zID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgPyBmaWVsZFBlcm1pc3Npb25zXG4gICAgICAgICAgICAgIDogJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWVcbiAgICAgICAgICAgICAgICA/IGZpZWxkUGVybWlzc2lvbnM/LltmaWVsZC5uYW1lXT8uZmllbGRzIHx8IGZpZWxkUGVybWlzc2lvbnM/LltmaWVsZC5uYW1lXVxuICAgICAgICAgICAgICAgIDogZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgfSksXG4gICAgICB9IGFzIENsaWVudEZpZWxkIHwgRmllbGRcbiAgICAgIGFjYy5wdXNoKGZvcm1hdHRlZEZpZWxkKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH1cblxuICAgIGlmIChmaWVsZFBlcm1pc3Npb25zID09PSB0cnVlKSB7XG4gICAgICBhY2MucHVzaChmaWVsZClcbiAgICAgIHJldHVybiBhY2NcbiAgICB9XG5cbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgIGNvbnN0IGZpZWxkUGVybWlzc2lvbiA9IGZpZWxkUGVybWlzc2lvbnM/LltmaWVsZC5uYW1lXVxuICAgICAgLy8gQWx3YXlzIGFsbG93IElEIGZpZWxkcywgb3IgaWYgZXhwbGljaXRseSBncmFudGVkICh0cnVlIG9yIHsgcmVhZDogdHJ1ZSB9KVxuICAgICAgLy8gdW5kZWZpbmVkIG1lYW5zIGZpZWxkIGlzIG5vdCBpbiBwZXJtaXNzaW9ucyBvYmplY3QgPSBkZW5pZWRcbiAgICAgIGlmIChmaWVsZElzSUQoZmllbGQpIHx8IGZpZWxkUGVybWlzc2lvbiA9PT0gdHJ1ZSB8fCBmaWVsZFBlcm1pc3Npb24/LnJlYWQgPT09IHRydWUpIHtcbiAgICAgICAgYWNjLnB1c2goZmllbGQpXG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjXG4gICAgfVxuXG4gICAgLy8gbGVhZlxuICAgIGFjYy5wdXNoKGZpZWxkKVxuICAgIHJldHVybiBhY2NcbiAgfSwgW10pXG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkLCBDb2xsZWN0aW9uQ29uZmlnLCBDb2xsZWN0aW9uUHJlZmVyZW5jZXMsIEZpZWxkIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5jb25zdCBnZXRSZW1haW5pbmdDb2x1bW5zID0gPFQgZXh0ZW5kcyBDbGllbnRGaWVsZFtdIHwgRmllbGRbXT4oXG4gIGZpZWxkczogVCxcbiAgdXNlQXNUaXRsZTogc3RyaW5nLFxuKTogQ29sbGVjdGlvblByZWZlcmVuY2VzWydjb2x1bW5zJ10gPT5cbiAgZmllbGRzPy5yZWR1Y2UoKHJlbWFpbmluZywgZmllbGQpID0+IHtcbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gdXNlQXNUaXRsZSkge1xuICAgICAgcmV0dXJuIHJlbWFpbmluZ1xuICAgIH1cblxuICAgIGlmICghZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgJ2ZpZWxkcycgaW4gZmllbGQpIHtcbiAgICAgIHJldHVybiBbLi4ucmVtYWluaW5nLCAuLi5nZXRSZW1haW5pbmdDb2x1bW5zKGZpZWxkLmZpZWxkcywgdXNlQXNUaXRsZSldXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJyAmJiAndGFicycgaW4gZmllbGQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLnJlbWFpbmluZyxcbiAgICAgICAgLi4uZmllbGQudGFicy5yZWR1Y2UoXG4gICAgICAgICAgKHRhYkZpZWxkQ29sdW1ucywgdGFiKSA9PiBbXG4gICAgICAgICAgICAuLi50YWJGaWVsZENvbHVtbnMsXG4gICAgICAgICAgICAuLi4oJ25hbWUnIGluIHRhYiA/IFt0YWIubmFtZV0gOiBnZXRSZW1haW5pbmdDb2x1bW5zKHRhYi5maWVsZHMsIHVzZUFzVGl0bGUpKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdLFxuICAgICAgICApLFxuICAgICAgXVxuICAgIH1cblxuICAgIHJldHVybiBbLi4ucmVtYWluaW5nLCBmaWVsZC5uYW1lXVxuICB9LCBbXSlcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbml0aWFsIGNvbHVtbnMgdG8gZGlzcGxheSBpbiB0aGUgdGFibGUgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBjcml0ZXJpYTpcbiAqIDEuIElmIGBkZWZhdWx0Q29sdW1uc2AgaXMgc2V0IGluIHRoZSBjb2xsZWN0aW9uIGNvbmZpZywgdXNlIHRob3NlIGNvbHVtbnNcbiAqIDIuIE90aGVyd2lzZSB0YWtlIGB1c2VBdFRpdGxlLCBpZiBzZXQsIGFuZCB0aGUgbmV4dCAzIGZpZWxkcyB0aGF0IGFyZSBub3QgaGlkZGVuIG9yIGRpc2FibGVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJbml0aWFsQ29sdW1ucyA9IDxUIGV4dGVuZHMgQ2xpZW50RmllbGRbXSB8IEZpZWxkW10+KFxuICBmaWVsZHM6IFQsXG4gIHVzZUFzVGl0bGU6IENvbGxlY3Rpb25Db25maWdbJ2FkbWluJ11bJ3VzZUFzVGl0bGUnXSxcbiAgZGVmYXVsdENvbHVtbnM6IENvbGxlY3Rpb25Db25maWdbJ2FkbWluJ11bJ2RlZmF1bHRDb2x1bW5zJ10sXG4pOiBDb2xsZWN0aW9uUHJlZmVyZW5jZXNbJ2NvbHVtbnMnXSA9PiB7XG4gIGxldCBpbml0aWFsQ29sdW1ucyA9IFtdXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdENvbHVtbnMpICYmIGRlZmF1bHRDb2x1bW5zLmxlbmd0aCA+PSAxKSB7XG4gICAgaW5pdGlhbENvbHVtbnMgPSBkZWZhdWx0Q29sdW1uc1xuICB9IGVsc2Uge1xuICAgIGlmICh1c2VBc1RpdGxlKSB7XG4gICAgICBpbml0aWFsQ29sdW1ucy5wdXNoKHVzZUFzVGl0bGUpXG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IGdldFJlbWFpbmluZ0NvbHVtbnMoZmllbGRzLCB1c2VBc1RpdGxlKVxuXG4gICAgaW5pdGlhbENvbHVtbnMgPSBpbml0aWFsQ29sdW1ucy5jb25jYXQocmVtYWluaW5nQ29sdW1ucylcbiAgICBpbml0aWFsQ29sdW1ucyA9IGluaXRpYWxDb2x1bW5zLnNsaWNlKDAsIDQpXG4gIH1cblxuICByZXR1cm4gaW5pdGlhbENvbHVtbnMubWFwKChjb2x1bW4pID0+ICh7XG4gICAgYWNjZXNzb3I6IGNvbHVtbixcbiAgICBhY3RpdmU6IHRydWUsXG4gIH0pKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IEpTT05GaWVsZENsaWVudENvbXBvbmVudCwgV2hlcmUgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9maWVsZHMvRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyBXaGVyZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9XaGVyZUJ1aWxkZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5UHJlc2V0c1doZXJlRmllbGQ6IEpTT05GaWVsZENsaWVudENvbXBvbmVudCA9ICh7XG4gIGZpZWxkOiB7IGxhYmVsLCByZXF1aXJlZCB9LFxufSkgPT4ge1xuICBjb25zdCB7IHBhdGgsIHNldFZhbHVlLCB2YWx1ZSB9ID0gdXNlRmllbGQ8V2hlcmU+KClcbiAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25GaWVsZCA9IHVzZUZpZWxkKHsgcGF0aDogJ3JlbGF0ZWRDb2xsZWN0aW9uJyB9KVxuICBjb25zdCByZWxhdGVkQ29sbGVjdGlvbiA9IHJlbGF0ZWRDb2xsZWN0aW9uRmllbGQudmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgaWYgKCFyZWxhdGVkQ29sbGVjdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpZWxkLXR5cGUgcXVlcnktcHJlc2V0LXdoZXJlLWZpZWxkXCI+XG4gICAgICAgIDxGaWVsZExhYmVsIGFzPVwiaDNcIiBsYWJlbD17bGFiZWx9IHBhdGg9e3BhdGh9IHJlcXVpcmVkPXtyZXF1aXJlZH0gLz5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwicXVlcnktcHJlc2V0LXdoZXJlLWZpZWxkX19oaW50XCI+XG4gICAgICAgICAgU2VsZWN0IHRoZSByZWxhdGVkIGNvbGxlY3Rpb24gdG8gY29uZmlndXJlIGZpbHRlcnMuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZC10eXBlIHF1ZXJ5LXByZXNldC13aGVyZS1maWVsZFwiPlxuICAgICAgPEZpZWxkTGFiZWwgYXM9XCJoM1wiIGxhYmVsPXtsYWJlbH0gcGF0aD17cGF0aH0gcmVxdWlyZWQ9e3JlcXVpcmVkfSAvPlxuICAgICAgPFdoZXJlQnVpbGRlclxuICAgICAgICBjb2xsZWN0aW9uU2x1Zz17cmVsYXRlZENvbGxlY3Rpb259XG4gICAgICAgIG9uQ2hhbmdlPXsod2hlcmUpID0+IHNldFZhbHVlKHdoZXJlKX1cbiAgICAgICAgdmFsdWU9e3ZhbHVlID8/IHVuZGVmaW5lZH1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRvciB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgZGVxdWFsIH0gZnJvbSAnZGVxdWFsL2xpdGUnXG5pbXBvcnQgeyB0cmFuc2Zvcm1XaGVyZVF1ZXJ5LCB2YWxpZGF0ZVdoZXJlUXVlcnkgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgQWRkQ29uZGl0aW9uLCBSZW1vdmVDb25kaXRpb24sIFVwZGF0ZUNvbmRpdGlvbiwgV2hlcmVCdWlsZGVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTGlzdFF1ZXJ5IH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xpc3RRdWVyeS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVkdWNlRmllbGRzVG9PcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3JlZHVjZUZpZWxkc1RvT3B0aW9ucy5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gJy4vQ29uZGl0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBmaWVsZFR5cGVDb25kaXRpb25zLCBnZXRWYWxpZEZpZWxkT3BlcmF0b3JzIH0gZnJvbSAnLi9maWVsZC10eXBlcy5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3doZXJlLWJ1aWxkZXInXG5cbmV4cG9ydCB7IFdoZXJlQnVpbGRlclByb3BzIH1cblxuLyoqXG4gKiBUaGUgV2hlcmVCdWlsZGVyIGNvbXBvbmVudCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgZmlsdGVyIGNvbnRyb2xzIGZvciBhIGNvbGxlY3Rpb24ncyBsaXN0IHZpZXdcbiAqIG9yIGluIGEgZm9ybSAoZS5nLiBRdWVyeSBQcmVzZXRzKS4gV2hlbiBgdmFsdWVgIGFuZCBgb25DaGFuZ2VgIGFyZSBwcm92aWRlZCwgaXQgaXMgY29udHJvbGxlZFxuICogYnkgdGhlIGZvcm07IG90aGVyd2lzZSBpdCB1c2VzIGxpc3QgcXVlcnkgc3RhdGUgZnJvbSB7QGxpbmsgdXNlTGlzdFF1ZXJ5fS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdoZXJlQnVpbGRlcjogUmVhY3QuRkM8V2hlcmVCdWlsZGVyUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xsZWN0aW9uUGx1cmFsTGFiZWw6IGNvbGxlY3Rpb25QbHVyYWxMYWJlbFByb3AsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZmllbGRzOiBmaWVsZHNQcm9wLFxuICAgIG9uQ2hhbmdlLFxuICAgIHJlbmRlcmVkRmlsdGVycyA9IHVuZGVmaW5lZCxcbiAgICByZXNvbHZlZEZpbHRlck9wdGlvbnMgPSB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgfSA9IHByb3BzXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IHBlcm1pc3Npb25zIH0gPSB1c2VBdXRoKClcbiAgY29uc3QgeyBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IGxpc3RRdWVyeSA9IHVzZUxpc3RRdWVyeSgpXG5cbiAgY29uc3QgaXNGb3JtTW9kZSA9IHR5cGVvZiBvbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJ1xuXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSB1c2VNZW1vKFxuICAgICgpID0+IChpc0Zvcm1Nb2RlID8gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWcgfSkgOiBudWxsKSxcbiAgICBbaXNGb3JtTW9kZSwgY29sbGVjdGlvblNsdWcsIGdldEVudGl0eUNvbmZpZ10sXG4gIClcbiAgY29uc3QgY29sbGVjdGlvblBsdXJhbExhYmVsID0gaXNGb3JtTW9kZVxuICAgID8gKGNvbGxlY3Rpb25Db25maWc/LmxhYmVscz8ucGx1cmFsID8/IGNvbGxlY3Rpb25TbHVnKVxuICAgIDogKGNvbGxlY3Rpb25QbHVyYWxMYWJlbFByb3AgPz8gY29sbGVjdGlvblNsdWcpXG4gIGNvbnN0IGZpZWxkcyA9IGlzRm9ybU1vZGUgPyBjb2xsZWN0aW9uQ29uZmlnPy5maWVsZHMgOiBmaWVsZHNQcm9wXG4gIGNvbnN0IGZpZWxkc1NhZmUgPSBmaWVsZHMgPz8gW11cblxuICBjb25zdCBmaWVsZFBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5bY29sbGVjdGlvblNsdWddPy5maWVsZHNcblxuICBjb25zdCByZWR1Y2VkRmllbGRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVkdWNlRmllbGRzVG9PcHRpb25zKHtcbiAgICAgICAgZmllbGRQZXJtaXNzaW9ucyxcbiAgICAgICAgZmllbGRzOiBmaWVsZHNTYWZlLFxuICAgICAgICBpMThuLFxuICAgICAgfSksXG4gICAgW2ZpZWxkUGVybWlzc2lvbnMsIGZpZWxkc1NhZmUsIGkxOG5dLFxuICApXG5cbiAgY29uc3QgY29uZGl0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHdoZXJlRnJvbVNlYXJjaCA9IGlzRm9ybU1vZGUgPyB2YWx1ZVByb3AgOiBsaXN0UXVlcnkucXVlcnk/LndoZXJlXG5cbiAgICBpZiAod2hlcmVGcm9tU2VhcmNoKSB7XG4gICAgICBpZiAodmFsaWRhdGVXaGVyZVF1ZXJ5KHdoZXJlRnJvbVNlYXJjaCkpIHtcbiAgICAgICAgcmV0dXJuIHdoZXJlRnJvbVNlYXJjaC5vciA/PyBbXVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFdoZXJlID0gdHJhbnNmb3JtV2hlcmVRdWVyeSh3aGVyZUZyb21TZWFyY2gpXG4gICAgICBpZiAodmFsaWRhdGVXaGVyZVF1ZXJ5KHRyYW5zZm9ybWVkV2hlcmUpKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFdoZXJlLm9yID8/IFtdXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNGb3JtTW9kZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgd2hlcmUgcXVlcnkgaW4gVVJMOiAke0pTT04uc3RyaW5naWZ5KHdoZXJlRnJvbVNlYXJjaCl9YCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sIFtpc0Zvcm1Nb2RlLCB2YWx1ZVByb3AsIGxpc3RRdWVyeS5xdWVyeT8ud2hlcmVdKVxuXG4gIGNvbnN0IGhhbmRsZVdoZXJlQ2hhbmdlID0gaXNGb3JtTW9kZVxuICAgID8gKHdoZXJlOiB7IG9yOiB0eXBlb2YgY29uZGl0aW9ucyB9KSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlPy4od2hlcmUpXG4gICAgICB9XG4gICAgOiBsaXN0UXVlcnkuaGFuZGxlV2hlcmVDaGFuZ2VcblxuICBjb25zdCBhZGRDb25kaXRpb246IEFkZENvbmRpdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGFuZEluZGV4LCBmaWVsZCwgb3JJbmRleCwgcmVsYXRpb24gfSkgPT4ge1xuICAgICAgY29uc3QgbmV3Q29uZGl0aW9ucyA9IFsuLi5jb25kaXRpb25zXVxuXG4gICAgICBjb25zdCBkZWZhdWx0T3BlcmF0b3IgPSBmaWVsZFR5cGVDb25kaXRpb25zW2ZpZWxkLmZpZWxkLnR5cGVdLm9wZXJhdG9yc1swXS52YWx1ZVxuXG4gICAgICBpZiAocmVsYXRpb24gPT09ICdhbmQnKSB7XG4gICAgICAgIG5ld0NvbmRpdGlvbnNbb3JJbmRleF0uYW5kLnNwbGljZShhbmRJbmRleCwgMCwge1xuICAgICAgICAgIFtTdHJpbmcoZmllbGQudmFsdWUpXToge1xuICAgICAgICAgICAgW2RlZmF1bHRPcGVyYXRvcl06IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICBhbmQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW1N0cmluZyhmaWVsZC52YWx1ZSldOiB7XG4gICAgICAgICAgICAgICAgW2RlZmF1bHRPcGVyYXRvcl06IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgYXdhaXQgaGFuZGxlV2hlcmVDaGFuZ2UoeyBvcjogbmV3Q29uZGl0aW9ucyB9KVxuICAgIH0sXG4gICAgW2NvbmRpdGlvbnMsIGhhbmRsZVdoZXJlQ2hhbmdlXSxcbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZUNvbmRpdGlvbjogVXBkYXRlQ29uZGl0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHsgYW5kSW5kZXgsIGZpZWxkLCBvcGVyYXRvcjogaW5jb21pbmdPcGVyYXRvciwgb3JJbmRleCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdDb25kaXRpb24gPSBjb25kaXRpb25zW29ySW5kZXhdLmFuZFthbmRJbmRleF1cblxuICAgICAgaWYgKHR5cGVvZiBleGlzdGluZ0NvbmRpdGlvbiA9PT0gJ29iamVjdCcgJiYgZmllbGQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZE9wZXJhdG9yIH0gPSBnZXRWYWxpZEZpZWxkT3BlcmF0b3JzKHtcbiAgICAgICAgICBmaWVsZDogZmllbGQuZmllbGQsXG4gICAgICAgICAgb3BlcmF0b3I6IGluY29taW5nT3BlcmF0b3IsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU2tpcCBpZiBub3RoaW5nIGNoYW5nZWRcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IGV4aXN0aW5nQ29uZGl0aW9uW1N0cmluZyhmaWVsZC52YWx1ZSldPy5bdmFsaWRPcGVyYXRvcl1cbiAgICAgICAgaWYgKHR5cGVvZiBleGlzdGluZ1ZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiBleGlzdGluZ1ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3Um93Q29uZGl0aW9uID0ge1xuICAgICAgICAgIFtTdHJpbmcoZmllbGQudmFsdWUpXTogeyBbdmFsaWRPcGVyYXRvcl06IHZhbHVlIH0sXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVxdWFsKGV4aXN0aW5nQ29uZGl0aW9uLCBuZXdSb3dDb25kaXRpb24pKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdDb25kaXRpb25zID0gWy4uLmNvbmRpdGlvbnNdXG4gICAgICAgIG5ld0NvbmRpdGlvbnNbb3JJbmRleF0uYW5kW2FuZEluZGV4XSA9IG5ld1Jvd0NvbmRpdGlvblxuXG4gICAgICAgIGF3YWl0IGhhbmRsZVdoZXJlQ2hhbmdlKHsgb3I6IG5ld0NvbmRpdGlvbnMgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb25kaXRpb25zLCBoYW5kbGVXaGVyZUNoYW5nZV0sXG4gIClcblxuICBjb25zdCByZW1vdmVDb25kaXRpb246IFJlbW92ZUNvbmRpdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGFuZEluZGV4LCBvckluZGV4IH0pID0+IHtcbiAgICAgIGNvbnN0IG5ld0NvbmRpdGlvbnMgPSBbLi4uY29uZGl0aW9uc11cbiAgICAgIG5ld0NvbmRpdGlvbnNbb3JJbmRleF0uYW5kLnNwbGljZShhbmRJbmRleCwgMSlcblxuICAgICAgaWYgKG5ld0NvbmRpdGlvbnNbb3JJbmRleF0uYW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBuZXdDb25kaXRpb25zLnNwbGljZShvckluZGV4LCAxKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBoYW5kbGVXaGVyZUNoYW5nZSh7IG9yOiBuZXdDb25kaXRpb25zIH0pXG4gICAgfSxcbiAgICBbY29uZGl0aW9ucywgaGFuZGxlV2hlcmVDaGFuZ2VdLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIHtjb25kaXRpb25zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9PlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6ZmlsdGVyV2hlcmUnLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uUGx1cmFsTGFiZWwsIGkxOG4pIH0pfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19vci1maWx0ZXJzYH0+XG4gICAgICAgICAgICB7Y29uZGl0aW9ucy5tYXAoKG9yLCBvckluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBvdW5kT3JLZXkgPSBgJHtvckluZGV4fV8ke0FycmF5LmlzQXJyYXkob3I/LmFuZCkgPyBvci5hbmQubGVuZ3RoIDogJyd9YFxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxpIGtleT17Y29tcG91bmRPcktleX0+XG4gICAgICAgICAgICAgICAgICB7b3JJbmRleCAhPT0gMCAmJiA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWxgfT57dCgnZ2VuZXJhbDpvcicpfTwvZGl2Pn1cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FuZC1maWx0ZXJzYH0+XG4gICAgICAgICAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KG9yPy5hbmQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgb3IuYW5kLm1hcCgoXywgYW5kSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGNvbmRpdGlvbnNbb3JJbmRleF0uYW5kW2FuZEluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRQYXRoID0gT2JqZWN0LmtleXMoY29uZGl0aW9uKVswXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChPYmplY3Qua2V5cyhjb25kaXRpb24/LltmaWVsZFBhdGhdIHx8IHt9KT8uWzBdIGFzIE9wZXJhdG9yKSB8fCB1bmRlZmluZWRcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25kaXRpb24/LltmaWVsZFBhdGhdPy5bb3BlcmF0b3JdIHx8IHVuZGVmaW5lZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXthbmRJbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2FuZEluZGV4ICE9PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9Pnt0KCdnZW5lcmFsOmFuZCcpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uZGl0aW9uPXthZGRDb25kaXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRJbmRleD17YW5kSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFBhdGg9e2ZpZWxkUGF0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbnM9e3Jlc29sdmVkRmlsdGVyT3B0aW9ucz8uZ2V0KGZpZWxkUGF0aCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcj17b3BlcmF0b3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvckluZGV4PXtvckluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkdWNlZEZpZWxkcz17cmVkdWNlZEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbmRpdGlvbj17cmVtb3ZlQ29uZGl0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyZWRGaWx0ZXI9e3JlbmRlcmVkRmlsdGVycz8uZ2V0KGZpZWxkUGF0aCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb25kaXRpb249e3VwZGF0ZUNvbmRpdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwiaWNvbi1sYWJlbFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FkZC1vcmB9XG4gICAgICAgICAgICBpY29uPVwicGx1c1wiXG4gICAgICAgICAgICBpY29uUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgIGljb25TdHlsZT1cIndpdGgtYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgYWRkQ29uZGl0aW9uKHtcbiAgICAgICAgICAgICAgICBhbmRJbmRleDogMCxcbiAgICAgICAgICAgICAgICBmaWVsZDogcmVkdWNlZEZpZWxkcy5maW5kKChmaWVsZCkgPT4gIWZpZWxkLmZpZWxkLmFkbWluPy5kaXNhYmxlTGlzdEZpbHRlciksXG4gICAgICAgICAgICAgICAgb3JJbmRleDogY29uZGl0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcmVsYXRpb246ICdvcicsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOm9yJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApfVxuICAgICAge2NvbmRpdGlvbnMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX25vLWZpbHRlcnNgfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWxgfT57dCgnZ2VuZXJhbDpub0ZpbHRlcnNTZXQnKX08L2Rpdj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hZGQtZmlyc3QtZmlsdGVyYH1cbiAgICAgICAgICAgIGljb249XCJwbHVzXCJcbiAgICAgICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgaWNvblN0eWxlPVwid2l0aC1ib3JkZXJcIlxuICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVkdWNlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkQ29uZGl0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGFuZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlZHVjZWRGaWVsZHMuZmluZCgoZmllbGQpID0+ICFmaWVsZC5maWVsZC5hZG1pbj8uZGlzYWJsZUxpc3RGaWx0ZXIpLFxuICAgICAgICAgICAgICAgICAgb3JJbmRleDogY29uZGl0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICByZWxhdGlvbjogJ29yJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOmFkZEZpbHRlcicpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHtcbiAgQWRkQ29uZGl0aW9uLFxuICBSZWR1Y2VkRmllbGQsXG4gIFJlbW92ZUNvbmRpdGlvbixcbiAgVXBkYXRlQ29uZGl0aW9uLFxuICBWYWx1ZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnXG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICByZWFkb25seSBhZGRDb25kaXRpb246IEFkZENvbmRpdGlvblxuICByZWFkb25seSBhbmRJbmRleDogbnVtYmVyXG4gIHJlYWRvbmx5IGZpZWxkUGF0aDogc3RyaW5nXG4gIHJlYWRvbmx5IGZpbHRlck9wdGlvbnM/OiBSZXNvbHZlZEZpbHRlck9wdGlvbnNcbiAgcmVhZG9ubHkgb3BlcmF0b3I6IE9wZXJhdG9yXG4gIHJlYWRvbmx5IG9ySW5kZXg6IG51bWJlclxuICByZWFkb25seSByZWR1Y2VkRmllbGRzOiBSZWR1Y2VkRmllbGRbXVxuICByZWFkb25seSByZW1vdmVDb25kaXRpb246IFJlbW92ZUNvbmRpdGlvblxuICByZWFkb25seSBSZW5kZXJlZEZpbHRlcj86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSB1cGRhdGVDb25kaXRpb246IFVwZGF0ZUNvbmRpdGlvblxuICByZWFkb25seSB2YWx1ZTogVmFsdWVcbn1cblxuaW1wb3J0IHR5cGUgeyBPcGVyYXRvciwgT3B0aW9uIGFzIFBheWxvYWRPcHRpb24sIFJlc29sdmVkRmlsdGVyT3B0aW9ucyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB0eXBlIHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vUmVhY3RTZWxlY3QvaW5kZXguanMnXG5cbmltcG9ydCB7IHVzZURlYm91bmNlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRGVib3VuY2UuanMnXG5pbXBvcnQgeyB1c2VFZmZlY3RFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUVmZmVjdEV2ZW50LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBSZWFjdFNlbGVjdCB9IGZyb20gJy4uLy4uL1JlYWN0U2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVmYXVsdEZpbHRlciB9IGZyb20gJy4vRGVmYXVsdEZpbHRlci9pbmRleC5qcydcbmltcG9ydCB7IGdldE9wZXJhdG9yVmFsdWVUeXBlcyB9IGZyb20gJy4vdmFsaWRPcGVyYXRvcnMuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2NvbmRpdGlvbidcblxuZXhwb3J0IGNvbnN0IENvbmRpdGlvbjogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhZGRDb25kaXRpb24sXG4gICAgYW5kSW5kZXgsXG4gICAgZmllbGRQYXRoLFxuICAgIGZpbHRlck9wdGlvbnMsXG4gICAgb3BlcmF0b3IsXG4gICAgb3JJbmRleCxcbiAgICByZWR1Y2VkRmllbGRzLFxuICAgIHJlbW92ZUNvbmRpdGlvbixcbiAgICBSZW5kZXJlZEZpbHRlcixcbiAgICB1cGRhdGVDb25kaXRpb24sXG4gICAgdmFsdWUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHJlZHVjZWRGaWVsZCA9IHJlZHVjZWRGaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLnZhbHVlID09PSBmaWVsZFBhdGgpXG5cbiAgY29uc3QgW2ludGVybmFsVmFsdWUsIHNldEludGVybmFsVmFsdWVdID0gdXNlU3RhdGU8VmFsdWU+KHZhbHVlKVxuXG4gIGNvbnN0IGRlYm91bmNlZFZhbHVlID0gdXNlRGVib3VuY2UoaW50ZXJuYWxWYWx1ZSwgMzAwKVxuXG4gIGNvbnN0IGJvb2xlYW5TZWxlY3QgPSBbJ2V4aXN0cyddLmluY2x1ZGVzKG9wZXJhdG9yKSB8fCByZWR1Y2VkRmllbGQ/LmZpZWxkPy50eXBlID09PSAnY2hlY2tib3gnXG5cbiAgbGV0IHZhbHVlT3B0aW9uczogUGF5bG9hZE9wdGlvbltdID0gW11cblxuICBpZiAoYm9vbGVhblNlbGVjdCkge1xuICAgIHZhbHVlT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHQoJ2dlbmVyYWw6dHJ1ZScpLCB2YWx1ZTogJ3RydWUnIH0sXG4gICAgICB7IGxhYmVsOiB0KCdnZW5lcmFsOmZhbHNlJyksIHZhbHVlOiAnZmFsc2UnIH0sXG4gICAgXVxuICB9IGVsc2UgaWYgKHJlZHVjZWRGaWVsZD8uZmllbGQgJiYgJ29wdGlvbnMnIGluIHJlZHVjZWRGaWVsZC5maWVsZCkge1xuICAgIHZhbHVlT3B0aW9ucyA9IHJlZHVjZWRGaWVsZC5maWVsZC5vcHRpb25zXG4gIH1cblxuICBjb25zdCB1cGRhdGVWYWx1ZSA9IHVzZUVmZmVjdEV2ZW50KGFzeW5jIChkZWJvdW5jZWRWYWx1ZTogVmFsdWUpID0+IHtcbiAgICBpZiAob3BlcmF0b3IpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUNvbmRpdGlvbih7XG4gICAgICAgIHR5cGU6ICd2YWx1ZScsXG4gICAgICAgIGFuZEluZGV4LFxuICAgICAgICBmaWVsZDogcmVkdWNlZEZpZWxkLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgb3JJbmRleCxcbiAgICAgICAgdmFsdWU6IGRlYm91bmNlZFZhbHVlID09PSBudWxsIHx8IGRlYm91bmNlZFZhbHVlID09PSAnJyA/IHVuZGVmaW5lZCA6IGRlYm91bmNlZFZhbHVlLFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIHVwZGF0ZVZhbHVlKGRlYm91bmNlZFZhbHVlKVxuICB9LCBbZGVib3VuY2VkVmFsdWVdKVxuXG4gIGNvbnN0IGRpc2FibGVkID1cbiAgICAoIXJlZHVjZWRGaWVsZD8udmFsdWUgJiYgdHlwZW9mIHJlZHVjZWRGaWVsZD8udmFsdWUgIT09ICdudW1iZXInKSB8fFxuICAgIHJlZHVjZWRGaWVsZD8uZmllbGQ/LmFkbWluPy5kaXNhYmxlTGlzdEZpbHRlclxuXG4gIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGZpZWxkOiBPcHRpb248c3RyaW5nPikgPT4ge1xuICAgICAgc2V0SW50ZXJuYWxWYWx1ZSh1bmRlZmluZWQpXG4gICAgICBhd2FpdCB1cGRhdGVDb25kaXRpb24oe1xuICAgICAgICB0eXBlOiAnZmllbGQnLFxuICAgICAgICBhbmRJbmRleCxcbiAgICAgICAgZmllbGQ6IHJlZHVjZWRGaWVsZHMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IGZpZWxkLnZhbHVlKSxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIG9ySW5kZXgsXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2FuZEluZGV4LCBvcGVyYXRvciwgb3JJbmRleCwgcmVkdWNlZEZpZWxkcywgdXBkYXRlQ29uZGl0aW9uXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZU9wZXJhdG9yQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG9wZXJhdG9yOiBPcHRpb248T3BlcmF0b3I+KSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRvclZhbHVlVHlwZXMgPSBnZXRPcGVyYXRvclZhbHVlVHlwZXMocmVkdWNlZEZpZWxkLmZpZWxkLnR5cGUpXG4gICAgICBjb25zdCB2YWxpZE9wZXJhdG9yVmFsdWUgPSBvcGVyYXRvclZhbHVlVHlwZXNbb3BlcmF0b3IudmFsdWVdIHx8ICdhbnknXG4gICAgICBjb25zdCBpc1ZhbGlkVmFsdWUgPVxuICAgICAgICB2YWxpZE9wZXJhdG9yVmFsdWUgPT09ICdhbnknIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gdmFsaWRPcGVyYXRvclZhbHVlIHx8XG4gICAgICAgICh2YWxpZE9wZXJhdG9yVmFsdWUgPT09ICdib29sZWFuJyAmJiAodmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJykpXG5cbiAgICAgIGlmICghaXNWYWxpZFZhbHVlKSB7XG4gICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIG5ldyBvcGVyYXRvclxuICAgICAgICAvLyByZXNldCB0aGUgdmFsdWUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdXBkYXRlQ29uZGl0aW9uXG4gICAgICAgIHNldEludGVybmFsVmFsdWUodW5kZWZpbmVkKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB1cGRhdGVDb25kaXRpb24oe1xuICAgICAgICB0eXBlOiAnb3BlcmF0b3InLFxuICAgICAgICBhbmRJbmRleCxcbiAgICAgICAgZmllbGQ6IHJlZHVjZWRGaWVsZCxcbiAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLnZhbHVlLFxuICAgICAgICBvckluZGV4LFxuICAgICAgICB2YWx1ZTogaXNWYWxpZFZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2FuZEluZGV4LCByZWR1Y2VkRmllbGQsIG9ySW5kZXgsIHVwZGF0ZUNvbmRpdGlvbiwgdmFsdWVdLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X193cmFwYH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dHNgfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZmllbGRgfT5cbiAgICAgICAgICAgIDxSZWFjdFNlbGVjdFxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGZpbHRlck9wdGlvbj17KG9wdGlvbiwgaW5wdXRWYWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAoKG9wdGlvbj8uZGF0YT8ucGxhaW5UZXh0TGFiZWwgYXMgc3RyaW5nKSB8fCBvcHRpb24ubGFiZWwpXG4gICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKGlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpc0NsZWFyYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWVsZENoYW5nZX1cbiAgICAgICAgICAgICAgb3B0aW9ucz17cmVkdWNlZEZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhZmllbGQuZmllbGQuYWRtaW4uZGlzYWJsZUxpc3RGaWx0ZXIpfVxuICAgICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgICAgcmVkdWNlZEZpZWxkIHx8IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByZWR1Y2VkRmllbGQ/LnZhbHVlLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fb3BlcmF0b3JgfT5cbiAgICAgICAgICAgIDxSZWFjdFNlbGVjdFxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU9wZXJhdG9yQ2hhbmdlfVxuICAgICAgICAgICAgICBvcHRpb25zPXtyZWR1Y2VkRmllbGQ/Lm9wZXJhdG9yc31cbiAgICAgICAgICAgICAgdmFsdWU9e3JlZHVjZWRGaWVsZD8ub3BlcmF0b3JzLmZpbmQoKG8pID0+IG9wZXJhdG9yID09PSBvLnZhbHVlKSB8fCBudWxsfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdmFsdWVgfT5cbiAgICAgICAgICAgIHtSZW5kZXJlZEZpbHRlciB8fCAoXG4gICAgICAgICAgICAgIDxEZWZhdWx0RmlsdGVyXG4gICAgICAgICAgICAgICAgYm9vbGVhblNlbGVjdD17Ym9vbGVhblNlbGVjdH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAhb3BlcmF0b3IgfHwgIXJlZHVjZWRGaWVsZCB8fCByZWR1Y2VkRmllbGQ/LmZpZWxkPy5hZG1pbj8uZGlzYWJsZUxpc3RGaWx0ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyT3B0aW9ucz17ZmlsdGVyT3B0aW9uc31cbiAgICAgICAgICAgICAgICBpbnRlcm5hbEZpZWxkPXtyZWR1Y2VkRmllbGR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEludGVybmFsVmFsdWV9XG4gICAgICAgICAgICAgICAgb3BlcmF0b3I9e29wZXJhdG9yfVxuICAgICAgICAgICAgICAgIG9wdGlvbnM9e3ZhbHVlT3B0aW9uc31cbiAgICAgICAgICAgICAgICB2YWx1ZT17aW50ZXJuYWxWYWx1ZSA/PyAnJ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwiaWNvbi1sYWJlbFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjdGlvbnMtcmVtb3ZlYH1cbiAgICAgICAgICAgIGljb249XCJ4XCJcbiAgICAgICAgICAgIGljb25TdHlsZT1cIndpdGgtYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHJlbW92ZUNvbmRpdGlvbih7XG4gICAgICAgICAgICAgICAgYW5kSW5kZXgsXG4gICAgICAgICAgICAgICAgb3JJbmRleCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdW5kXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb25zLWFkZGB9XG4gICAgICAgICAgICBpY29uPVwicGx1c1wiXG4gICAgICAgICAgICBpY29uU3R5bGU9XCJ3aXRoLWJvcmRlclwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICBhZGRDb25kaXRpb24oe1xuICAgICAgICAgICAgICAgIGFuZEluZGV4OiBhbmRJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgZmllbGQ6IHJlZHVjZWRGaWVsZHMuZmluZCgoZmllbGQpID0+ICFmaWVsZC5maWVsZC5hZG1pbj8uZGlzYWJsZUxpc3RGaWx0ZXIpLFxuICAgICAgICAgICAgICAgIG9ySW5kZXgsXG4gICAgICAgICAgICAgICAgcmVsYXRpb246ICdhbmQnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm91bmRcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7XG4gIE9wZXJhdG9yLFxuICBPcHRpb24sXG4gIFJlc29sdmVkRmlsdGVyT3B0aW9ucyxcbiAgU2VsZWN0RmllbGRDbGllbnQsXG4gIFRleHRGaWVsZENsaWVudCxcbn0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFJlZHVjZWRGaWVsZCwgVmFsdWUgfSBmcm9tICcuLi8uLi90eXBlcy5qcydcblxuaW1wb3J0IHsgRGF0ZUZpbHRlciB9IGZyb20gJy4uL0RhdGUvaW5kZXguanMnXG5pbXBvcnQgeyBOdW1iZXJGaWx0ZXIgfSBmcm9tICcuLi9OdW1iZXIvaW5kZXguanMnXG5pbXBvcnQgeyBSZWxhdGlvbnNoaXBGaWx0ZXIgfSBmcm9tICcuLi9SZWxhdGlvbnNoaXAvaW5kZXguanMnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuLi9TZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnLi4vVGV4dC9pbmRleC5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgYm9vbGVhblNlbGVjdDogYm9vbGVhblxuICBkaXNhYmxlZDogYm9vbGVhblxuICBmaWx0ZXJPcHRpb25zPzogUmVzb2x2ZWRGaWx0ZXJPcHRpb25zXG4gIGludGVybmFsRmllbGQ6IFJlZHVjZWRGaWVsZFxuICBvbkNoYW5nZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248c3RyaW5nPj5cbiAgb3BlcmF0b3I6IE9wZXJhdG9yXG4gIG9wdGlvbnM6IE9wdGlvbltdXG4gIHZhbHVlOiBWYWx1ZVxufVxuXG5leHBvcnQgY29uc3QgRGVmYXVsdEZpbHRlcjogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgYm9vbGVhblNlbGVjdCxcbiAgZGlzYWJsZWQsXG4gIGZpbHRlck9wdGlvbnMsXG4gIGludGVybmFsRmllbGQsXG4gIG9uQ2hhbmdlLFxuICBvcGVyYXRvcixcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG59KSA9PiB7XG4gIGlmIChib29sZWFuU2VsZWN0IHx8IFsncmFkaW8nLCAnc2VsZWN0J10uaW5jbHVkZXMoaW50ZXJuYWxGaWVsZD8uZmllbGQ/LnR5cGUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWxlY3RcbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBmaWVsZD17aW50ZXJuYWxGaWVsZC5maWVsZCBhcyBTZWxlY3RGaWVsZENsaWVudH1cbiAgICAgICAgaXNDbGVhcmFibGU9eyFib29sZWFuU2VsZWN0fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9wZXJhdG9yPXtvcGVyYXRvcn1cbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgdmFsdWU9e3ZhbHVlIGFzIHN0cmluZ31cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgc3dpdGNoIChpbnRlcm5hbEZpZWxkPy5maWVsZD8udHlwZSkge1xuICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGF0ZUZpbHRlclxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBmaWVsZD17aW50ZXJuYWxGaWVsZC5maWVsZH1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgb3BlcmF0b3I9e29wZXJhdG9yfVxuICAgICAgICAgIHZhbHVlPXt2YWx1ZSBhcyBEYXRlIHwgc3RyaW5nfVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNhc2UgJ251bWJlcic6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxOdW1iZXJGaWx0ZXJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgZmllbGQ9e2ludGVybmFsRmllbGQuZmllbGR9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIG9wZXJhdG9yPXtvcGVyYXRvcn1cbiAgICAgICAgICB2YWx1ZT17dmFsdWUgYXMgbnVtYmVyIHwgbnVtYmVyW119XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfVxuXG4gICAgY2FzZSAncmVsYXRpb25zaGlwJzoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJlbGF0aW9uc2hpcEZpbHRlclxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBmaWVsZD17aW50ZXJuYWxGaWVsZC5maWVsZH1cbiAgICAgICAgICBmaWx0ZXJPcHRpb25zPXtmaWx0ZXJPcHRpb25zID8/IHt9fVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICBvcGVyYXRvcj17b3BlcmF0b3J9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNhc2UgJ3VwbG9hZCc6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSZWxhdGlvbnNoaXBGaWx0ZXJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgZmllbGQ9e2ludGVybmFsRmllbGQuZmllbGR9XG4gICAgICAgICAgZmlsdGVyT3B0aW9ucz17ZmlsdGVyT3B0aW9ucyA/PyB7fX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgb3BlcmF0b3I9e29wZXJhdG9yfVxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9XG5cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dFxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBmaWVsZD17aW50ZXJuYWxGaWVsZD8uZmllbGQgYXMgVGV4dEZpZWxkQ2xpZW50fVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICBvcGVyYXRvcj17b3BlcmF0b3J9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlIGFzIHN0cmluZyB8IHN0cmluZ1tdfVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBEYXRlRmlsdGVyUHJvcHMgYXMgUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyRmllbGQgfSBmcm9tICcuLi8uLi8uLi9EYXRlUGlja2VyL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29uZGl0aW9uLXZhbHVlLWRhdGUnXG5cbmV4cG9ydCBjb25zdCBEYXRlRmlsdGVyOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyBkaXNhYmxlZCwgZmllbGQ6IHsgYWRtaW4gfSwgb25DaGFuZ2UsIHZhbHVlIH0pID0+IHtcbiAgY29uc3QgeyBkYXRlIH0gPSBhZG1pbiB8fCB7fVxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICBhZG1pbjogeyBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0RnJvbUNvbmZpZyB9LFxuICAgIH0sXG4gIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZGF0ZT8uZGlzcGxheUZvcm1hdCB8fCBkYXRlRm9ybWF0RnJvbUNvbmZpZ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICA8RGF0ZVBpY2tlckZpZWxkXG4gICAgICAgIHsuLi5kYXRlfVxuICAgICAgICBkaXNwbGF5Rm9ybWF0PXtkaXNwbGF5Rm9ybWF0fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtnZXRUcmFuc2xhdGlvbihhZG1pbi5wbGFjZWhvbGRlciwgaTE4bikgfHwgdCgnZ2VuZXJhbDplbnRlckFWYWx1ZScpfVxuICAgICAgICByZWFkT25seT17ZGlzYWJsZWR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZSBhcyBEYXRlfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBOdW1iZXJGaWx0ZXJQcm9wcyBhcyBQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVhY3RTZWxlY3QgfSBmcm9tICcuLi8uLi8uLi9SZWFjdFNlbGVjdC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29uZGl0aW9uLXZhbHVlLW51bWJlcidcblxuZXhwb3J0IGNvbnN0IE51bWJlckZpbHRlcjogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZCxcbiAgICBmaWVsZDogeyBhZG1pbiwgaGFzTWFueSB9LFxuICAgIG9uQ2hhbmdlLFxuICAgIG9wZXJhdG9yLFxuICAgIHZhbHVlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBpc011bHRpID0gWydpbicsICdub3RfaW4nXS5pbmNsdWRlcyhvcGVyYXRvcikgfHwgaGFzTWFueVxuXG4gIGNvbnN0IFt2YWx1ZVRvUmVuZGVyLCBzZXRWYWx1ZVRvUmVuZGVyXSA9IFJlYWN0LnVzZVN0YXRlPFxuICAgIHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHsgdmFsdWU6IG51bWJlciB9IH1bXVxuICA+KFtdKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICBsZXQgbmV3VmFsdWVcbiAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXVxuICAgICAgfSBlbHNlIGlmIChpc011bHRpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9uKSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubWFwKChvcHRpb24pID0+IE51bWJlcihvcHRpb24udmFsdWU/LnZhbHVlIHx8IG9wdGlvbi52YWx1ZSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBbTnVtYmVyKHNlbGVjdGVkT3B0aW9uLnZhbHVlPy52YWx1ZSB8fCBzZWxlY3RlZE9wdGlvbi52YWx1ZSldXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb25DaGFuZ2UobmV3VmFsdWUpXG4gICAgfSxcbiAgICBbaXNNdWx0aSwgb25DaGFuZ2VdLFxuICApXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHNldFZhbHVlVG9SZW5kZXIoXG4gICAgICAgIHZhbHVlLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogYCR7dmFsfSR7aW5kZXh9YCwgLy8gYXBwZW5kIGluZGV4IHRvIGF2b2lkIGR1cGxpY2F0ZSBrZXlzIGJ1dCBhbGxvdyBkdXBsaWNhdGUgbnVtYmVyc1xuICAgICAgICAgICAgbGFiZWw6IGAke3ZhbH1gLFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IGAke3ZhbH0ke2luZGV4fWAsXG4gICAgICAgICAgICAgIHZhbHVlOiAodmFsIGFzIGFueSk/LnZhbHVlIHx8IHZhbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VmFsdWVUb1JlbmRlcihbXSlcbiAgICB9XG4gIH0sIFt2YWx1ZV0pXG5cbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBnZXRUcmFuc2xhdGlvbihhZG1pbj8ucGxhY2Vob2xkZXIsIGkxOG4pIHx8IHQoJ2dlbmVyYWw6ZW50ZXJBVmFsdWUnKVxuXG4gIHJldHVybiBpc011bHRpID8gKFxuICAgIDxSZWFjdFNlbGVjdFxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgaXNDbGVhcmFibGVcbiAgICAgIGlzQ3JlYXRhYmxlXG4gICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgaXNTb3J0YWJsZVxuICAgICAgbnVtYmVyT25seVxuICAgICAgb25DaGFuZ2U9e29uU2VsZWN0fVxuICAgICAgb3B0aW9ucz17W119XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICB2YWx1ZT17dmFsdWVUb1JlbmRlciB8fCBbXX1cbiAgICAvPlxuICApIDogKFxuICAgIDxpbnB1dFxuICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNoYW5nZT17KGUpID0+IG9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgdmFsdWU9e3ZhbHVlIGFzIG51bWJlcn1cbiAgICAvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGVkRG9jcywgV2hlcmUgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZHVjZXIsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vUmVhY3RTZWxlY3QvdHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7IFJlbGF0aW9uc2hpcEZpbHRlclByb3BzIGFzIFByb3BzLCBWYWx1ZVdpdGhSZWxhdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZURlYm91bmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaG9va3MvdXNlRGVib3VuY2UuanMnXG5pbXBvcnQgeyB1c2VFZmZlY3RFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2hvb2tzL3VzZUVmZmVjdEV2ZW50LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFJlYWN0U2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vUmVhY3RTZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCBvcHRpb25zUmVkdWNlciBmcm9tICcuL29wdGlvbnNSZWR1Y2VyLmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29uZGl0aW9uLXZhbHVlLXJlbGF0aW9uc2hpcCdcblxuY29uc3QgbWF4UmVzdWx0c1BlclJlcXVlc3QgPSAxMFxuXG5leHBvcnQgY29uc3QgUmVsYXRpb25zaGlwRmlsdGVyOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZpZWxkOiB7IGFkbWluID0ge30sIGhhc01hbnksIHJlbGF0aW9uVG8gfSxcbiAgICBmaWx0ZXJPcHRpb25zLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9wZXJhdG9yLFxuICAgIHZhbHVlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBwbGFjZWhvbGRlciA9ICdwbGFjZWhvbGRlcicgaW4gYWRtaW4gPyBhZG1pbj8ucGxhY2Vob2xkZXIgOiB1bmRlZmluZWRcbiAgY29uc3QgaXNTb3J0YWJsZSA9IGFkbWluPy5pc1NvcnRhYmxlXG5cbiAgY29uc3QgaXNNdWx0aVZhbHVlID0gaGFzTWFueSB8fCBbJ2luJywgJ25vdF9pbiddLmluY2x1ZGVzKG9wZXJhdG9yKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIHJvdXRlczogeyBhcGkgfSxcbiAgICB9LFxuICAgIGdldEVudGl0eUNvbmZpZyxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgaGFzTXVsdGlwbGVSZWxhdGlvbnMgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pXG4gIGNvbnN0IFtvcHRpb25zLCBkaXNwYXRjaE9wdGlvbnNdID0gdXNlUmVkdWNlcihvcHRpb25zUmVkdWNlciwgW10pXG4gIGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgZGVib3VuY2VkU2VhcmNoID0gdXNlRGVib3VuY2Uoc2VhcmNoLCAzMDApXG4gIGNvbnN0IFtlcnJvckxvYWRpbmcsIHNldEVycm9yTG9hZGluZ10gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW2hhc0xvYWRlZEZpcnN0T3B0aW9ucywgc2V0SGFzTG9hZGVkRmlyc3RPcHRpb25zXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgbG9jYWxlID0gdXNlTG9jYWxlKClcblxuICBjb25zdCByZWxhdGlvblNsdWdzID0gaGFzTXVsdGlwbGVSZWxhdGlvbnMgPyByZWxhdGlvblRvIDogW3JlbGF0aW9uVG9dXG5cbiAgY29uc3QgbG9hZGVkUmVsYXRpb25zaGlwcyA9IFJlYWN0LnVzZVJlZjxcbiAgICBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICB7XG4gICAgICAgIGhhc0xvYWRlZEFsbDogYm9vbGVhblxuICAgICAgICBuZXh0UGFnZTogbnVtYmVyXG4gICAgICB9XG4gICAgPlxuICA+KFxuICAgIG5ldyBNYXAoXG4gICAgICByZWxhdGlvblNsdWdzLm1hcCgocmVsYXRpb24pID0+IFtcbiAgICAgICAgcmVsYXRpb24sXG4gICAgICAgIHtcbiAgICAgICAgICBoYXNMb2FkZWRBbGw6IGZhbHNlLFxuICAgICAgICAgIG5leHRQYWdlOiAxLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKSxcbiAgKVxuXG4gIGNvbnN0IGFkZE9wdGlvbnMgPSB1c2VDYWxsYmFjayhcbiAgICAoZGF0YSwgcmVsYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZzogcmVsYXRpb24gfSlcbiAgICAgIGRpc3BhdGNoT3B0aW9ucyh7IHR5cGU6ICdBREQnLCBjb2xsZWN0aW9uLCBkYXRhLCBoYXNNdWx0aXBsZVJlbGF0aW9ucywgaTE4biwgcmVsYXRpb24gfSlcbiAgICB9LFxuICAgIFtoYXNNdWx0aXBsZVJlbGF0aW9ucywgaTE4biwgZ2V0RW50aXR5Q29uZmlnXSxcbiAgKVxuXG4gIGNvbnN0IGxvYWRPcHRpb25zID0gdXNlRWZmZWN0RXZlbnQoXG4gICAgYXN5bmMgKHtcbiAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgIHJlbGF0aW9uU2x1ZyxcbiAgICB9OiB7XG4gICAgICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICAgICAgcmVsYXRpb25TbHVnOiBzdHJpbmdcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBsb2FkZWRSZWxhdGlvbnNoaXAgPSBsb2FkZWRSZWxhdGlvbnNoaXBzLmN1cnJlbnQuZ2V0KHJlbGF0aW9uU2x1ZylcblxuICAgICAgaWYgKHJlbGF0aW9uU2x1ZyAmJiAhbG9hZGVkUmVsYXRpb25zaGlwLmhhc0xvYWRlZEFsbCkge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZ2V0RW50aXR5Q29uZmlnKHtcbiAgICAgICAgICBjb2xsZWN0aW9uU2x1ZzogcmVsYXRpb25TbHVnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGZpZWxkVG9TZWFyY2ggPSBjb2xsZWN0aW9uPy5hZG1pbj8udXNlQXNUaXRsZSB8fCAnaWQnXG5cbiAgICAgICAgY29uc3Qgd2hlcmU6IFdoZXJlID0ge1xuICAgICAgICAgIGFuZDogW10sXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeSA9IHtcbiAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICBsaW1pdDogbWF4UmVzdWx0c1BlclJlcXVlc3QsXG4gICAgICAgICAgbG9jYWxlOiBsb2NhbGUuY29kZSxcbiAgICAgICAgICBwYWdlOiBsb2FkZWRSZWxhdGlvbnNoaXAubmV4dFBhZ2UsXG4gICAgICAgICAgc2VsZWN0OiB7XG4gICAgICAgICAgICBbZmllbGRUb1NlYXJjaF06IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aGVyZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJPcHRpb25zICYmIGZpbHRlck9wdGlvbnM/LltyZWxhdGlvblNsdWddKSB7XG4gICAgICAgICAgcXVlcnkud2hlcmUuYW5kLnB1c2goZmlsdGVyT3B0aW9uc1tyZWxhdGlvblNsdWddKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlYm91bmNlZFNlYXJjaCkge1xuICAgICAgICAgIHF1ZXJ5LndoZXJlLmFuZC5wdXNoKHtcbiAgICAgICAgICAgIFtmaWVsZFRvU2VhcmNoXToge1xuICAgICAgICAgICAgICBsaWtlOiBkZWJvdW5jZWRTZWFyY2gsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICAgIGFwaVJvdXRlOiBhcGksXG4gICAgICAgICAgICAgIHBhdGg6IGAvJHtyZWxhdGlvblNsdWd9JHtxcy5zdHJpbmdpZnkocXVlcnksIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSl9YCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhOiBQYWdpbmF0ZWREb2NzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICBpZiAoZGF0YS5kb2NzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgYWRkT3B0aW9ucyhkYXRhLCByZWxhdGlvblNsdWcpXG5cbiAgICAgICAgICAgICAgaWYgKGRhdGEubmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICBsb2FkZWRSZWxhdGlvbnNoaXBzLmN1cnJlbnQuc2V0KHJlbGF0aW9uU2x1Zywge1xuICAgICAgICAgICAgICAgICAgaGFzTG9hZGVkQWxsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG5leHRQYWdlOiBkYXRhLm5leHRQYWdlLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9hZGVkUmVsYXRpb25zaGlwcy5jdXJyZW50LnNldChyZWxhdGlvblNsdWcsIHtcbiAgICAgICAgICAgICAgICAgIGhhc0xvYWRlZEFsbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG5leHRQYWdlOiBudWxsLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0RXJyb3JMb2FkaW5nKHQoJ2Vycm9yOnVuc3BlY2lmaWMnKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoIWFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0SGFzTG9hZGVkRmlyc3RPcHRpb25zKHRydWUpXG4gICAgfSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcFRvTG9hZCA9IGxvYWRlZFJlbGF0aW9uc2hpcHMuY3VycmVudC5lbnRyaWVzKCkubmV4dCgpLnZhbHVlXG5cbiAgICBpZiAocmVsYXRpb25zaGlwVG9Mb2FkWzBdICYmICFyZWxhdGlvbnNoaXBUb0xvYWRbMV0uaGFzTG9hZGVkQWxsKSB7XG4gICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcblxuICAgICAgdm9pZCBsb2FkT3B0aW9ucyh7XG4gICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgcmVsYXRpb25TbHVnOiByZWxhdGlvbnNoaXBUb0xvYWRbMF0sXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgZmluZE9wdGlvbnNCeVZhbHVlID0gdXNlQ2FsbGJhY2soKCk6IE9wdGlvbiB8IE9wdGlvbltdID0+IHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmIChpc011bHRpVmFsdWUpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzTXVsdGlwbGVSZWxhdGlvbnMpIHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoZWRPcHRpb246IE9wdGlvblxuXG4gICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICBvcHQub3B0aW9ucy5zb21lKChzdWJPcHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk9wdD8udmFsdWUgPT0gdmFsLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZE9wdGlvbiA9IHN1Yk9wdFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmZpbmQoKG9wdCkgPT4gb3B0LnZhbHVlID09IHZhbClcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTXVsdGlwbGVSZWxhdGlvbnMpIHtcbiAgICAgICAgbGV0IG1hdGNoZWRPcHRpb246IE9wdGlvblxuXG4gICAgICAgIGNvbnN0IHZhbHVlV2l0aFJlbGF0aW9uID0gdmFsdWUgYXMgVmFsdWVXaXRoUmVsYXRpb25cblxuICAgICAgICBvcHRpb25zLmZvckVhY2goKG9wdCkgPT4ge1xuICAgICAgICAgIGlmIChvcHQ/Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdC5vcHRpb25zLnNvbWUoKHN1Yk9wdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3ViT3B0Py52YWx1ZSA9PSB2YWx1ZVdpdGhSZWxhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRPcHRpb24gPSBzdWJPcHRcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb25cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQudmFsdWUgPT0gdmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbaXNNdWx0aVZhbHVlLCBoYXNNdWx0aXBsZVJlbGF0aW9ucywgdmFsdWUsIG9wdGlvbnNdKVxuXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGlucHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpbnB1dCAhPT0gc2VhcmNoKSB7XG4gICAgICAgIGRpc3BhdGNoT3B0aW9ucyh7IHR5cGU6ICdDTEVBUicsIGkxOG4sIHJlcXVpcmVkOiBmYWxzZSB9KVxuXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uU2x1Z3MgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pID8gcmVsYXRpb25UbyA6IFtyZWxhdGlvblRvXVxuXG4gICAgICAgIGxvYWRlZFJlbGF0aW9uc2hpcHMuY3VycmVudCA9IG5ldyBNYXAoXG4gICAgICAgICAgcmVsYXRpb25TbHVncy5tYXAoKHJlbGF0aW9uKSA9PiBbXG4gICAgICAgICAgICByZWxhdGlvbixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaGFzTG9hZGVkQWxsOiBmYWxzZSxcbiAgICAgICAgICAgICAgbmV4dFBhZ2U6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLFxuICAgICAgICApXG5cbiAgICAgICAgc2V0U2VhcmNoKGlucHV0KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2kxOG4sIHJlbGF0aW9uVG8sIHNlYXJjaF0sXG4gIClcblxuICBjb25zdCBhZGRPcHRpb25CeUlEID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGlkLCByZWxhdGlvbikgPT4ge1xuICAgICAgaWYgKCFlcnJvckxvYWRpbmcgJiYgaWQgIT09ICdudWxsJyAmJiBpZCAmJiByZWxhdGlvbikge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHsgYXBpUm91dGU6IGFwaSwgcGF0aDogYC8ke3JlbGF0aW9ufS8ke2lkfT9kZXB0aD0wYCB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgICBhZGRPcHRpb25zKHsgZG9jczogW2RhdGFdIH0sIHJlbGF0aW9uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcih0KCdlcnJvcjpsb2FkaW5nRG9jdW1lbnQnLCB7IGlkIH0pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbaTE4biwgYWRkT3B0aW9ucywgYXBpLCBlcnJvckxvYWRpbmcsIHRdLFxuICApXG5cbiAgLyoqXG4gICAqIFdoZW4gYHJlbGF0aW9uVG9gIGNoYW5nZXMgZXh0ZXJuYWxseSwgcmVzZXQgdGhlIG9wdGlvbnMgYW5kIHJlbG9hZCB0aGVtIGZyb20gc2NyYXRjaFxuICAgKiBUaGUgYGxvYWRPcHRpb25zYCBkZXBlbmRlbmN5IGlzIGEgdXNlRWZmZWN0RXZlbnQgd2hpY2ggaGFzIG5vIGRlcGVuZGVuY2llcyBvZiBpdHMgb3duXG4gICAqIFRoaXMgbWVhbnMgd2UgY2FuIHNhZmVseSBkZXBlbmQgb24gaXQgd2l0aG91dCBpdCB0cmlnZ2VyaW5nIHRoaXMgZWZmZWN0IHRvIHJ1blxuICAgKiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoaXMgZWZmZWN0IHNob3VsZCBfb25seV8gcnVuIHdoZW4gYHJlbGF0aW9uVG9gIGNoYW5nZXNcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpb25zID0gQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKSA/IHJlbGF0aW9uVG8gOiBbcmVsYXRpb25Ub11cblxuICAgIGxvYWRlZFJlbGF0aW9uc2hpcHMuY3VycmVudCA9IG5ldyBNYXAoXG4gICAgICByZWxhdGlvbnMubWFwKChyZWxhdGlvbikgPT4gW1xuICAgICAgICByZWxhdGlvbixcbiAgICAgICAge1xuICAgICAgICAgIGhhc0xvYWRlZEFsbDogZmFsc2UsXG4gICAgICAgICAgbmV4dFBhZ2U6IDEsXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICApXG5cbiAgICBkaXNwYXRjaE9wdGlvbnMoeyB0eXBlOiAnQ0xFQVInLCBpMThuLCByZXF1aXJlZDogZmFsc2UgfSlcbiAgICBzZXRIYXNMb2FkZWRGaXJzdE9wdGlvbnMoZmFsc2UpXG5cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXJzOiBBYm9ydENvbnRyb2xsZXJbXSA9IFtdXG5cbiAgICByZWxhdGlvbnMuZm9yRWFjaCgocmVsYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgICB2b2lkIGxvYWRPcHRpb25zKHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICByZWxhdGlvblNsdWc6IHJlbGF0aW9uLFxuICAgICAgfSlcblxuICAgICAgYWJvcnRDb250cm9sbGVycy5wdXNoKGFib3J0Q29udHJvbGxlcilcbiAgICB9KVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGFib3J0Q29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICBpZiAoY29udHJvbGxlci5zaWduYWwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgLy8gc3dhbGxvdyBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtpMThuLCByZWxhdGlvblRvLCBkZWJvdW5jZWRTZWFyY2gsIGZpbHRlck9wdGlvbnNdKVxuXG4gIC8qKlxuICAgKiBMb2FkIGFueSBvdGhlciBvcHRpb25zIHRoYXQgbWlnaHQgZXhpc3QgaW4gdGhlIHZhbHVlIHRoYXQgd2VyZSBub3QgbG9hZGVkIGFscmVhZHlcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlICYmIGhhc0xvYWRlZEZpcnN0T3B0aW9ucykge1xuICAgICAgaWYgKGlzTXVsdGlWYWx1ZSkge1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9ucyA9IGZpbmRPcHRpb25zQnlWYWx1ZSgpXG5cbiAgICAgICAgOygobWF0Y2hlZE9wdGlvbnMgYXMgT3B0aW9uW10pIHx8IFtdKS5mb3JFYWNoKChvcHRpb24sIGkpID0+IHtcbiAgICAgICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICAgICAgaWYgKGhhc011bHRpcGxlUmVsYXRpb25zKSB7XG4gICAgICAgICAgICAgIHZvaWQgYWRkT3B0aW9uQnlJRCh2YWx1ZVtpXS52YWx1ZSwgdmFsdWVbaV0ucmVsYXRpb25UbylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZvaWQgYWRkT3B0aW9uQnlJRCh2YWx1ZVtpXSwgcmVsYXRpb25UbylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9uID0gZmluZE9wdGlvbnNCeVZhbHVlKClcblxuICAgICAgICBpZiAoIW1hdGNoZWRPcHRpb24pIHtcbiAgICAgICAgICBpZiAoaGFzTXVsdGlwbGVSZWxhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlV2l0aFJlbGF0aW9uID0gdmFsdWUgYXMgVmFsdWVXaXRoUmVsYXRpb25cbiAgICAgICAgICAgIHZvaWQgYWRkT3B0aW9uQnlJRCh2YWx1ZVdpdGhSZWxhdGlvbi52YWx1ZSwgdmFsdWVXaXRoUmVsYXRpb24ucmVsYXRpb25UbylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdm9pZCBhZGRPcHRpb25CeUlEKHZhbHVlLCByZWxhdGlvblRvKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGFkZE9wdGlvbkJ5SUQsXG4gICAgZmluZE9wdGlvbnNCeVZhbHVlLFxuICAgIGlzTXVsdGlWYWx1ZSxcbiAgICBoYXNNdWx0aXBsZVJlbGF0aW9ucyxcbiAgICByZWxhdGlvblRvLFxuICAgIHZhbHVlLFxuICAgIGhhc0xvYWRlZEZpcnN0T3B0aW9ucyxcbiAgXSlcblxuICBjb25zdCBjbGFzc2VzID0gWydmaWVsZC10eXBlJywgYmFzZUNsYXNzLCBlcnJvckxvYWRpbmcgJiYgJ2Vycm9yLWxvYWRpbmcnXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgY29uc3QgdmFsdWVUb1JlbmRlciA9IChmaW5kT3B0aW9uc0J5VmFsdWUoKSB8fCB2YWx1ZSkgYXMgT3B0aW9uXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlc30+XG4gICAgICB7ZXJyb3JMb2FkaW5nID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZXJyb3ItbG9hZGluZ2B9PntlcnJvckxvYWRpbmd9PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8UmVhY3RTZWxlY3RcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgaXNNdWx0aT17aXNNdWx0aVZhbHVlfVxuICAgICAgICAgIGlzU29ydGFibGU9e2lzU29ydGFibGV9XG4gICAgICAgICAgb25DaGFuZ2U9eyhzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgICAgICAgICBvbkNoYW5nZShudWxsKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzTXVsdGlWYWx1ZSAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICBvbkNoYW5nZShcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgPyBzZWxlY3RlZC5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNdWx0aXBsZVJlbGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25Ubzogb3B0aW9uPy5yZWxhdGlvblRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uPy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc011bHRpcGxlUmVsYXRpb25zICYmICFBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICBvbkNoYW5nZSh7XG4gICAgICAgICAgICAgICAgcmVsYXRpb25Ubzogc2VsZWN0ZWQ/LnJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkPy52YWx1ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgIG9uQ2hhbmdlKHNlbGVjdGVkPy52YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uSW5wdXRDaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgIG9uTWVudVNjcm9sbFRvQm90dG9tPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX1cbiAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICB2YWx1ZT17dmFsdWVUb1JlbmRlcn1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5cbmltcG9ydCB0eXBlIHsgQWN0aW9uLCBPcHRpb24gfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5jb25zdCByZWR1Y2VUb0lEcyA9IChvcHRpb25zKSA9PlxuICBvcHRpb25zLnJlZHVjZSgoaWRzLCBvcHRpb24pID0+IHtcbiAgICBpZiAob3B0aW9uLm9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBbLi4uaWRzLCAuLi5yZWR1Y2VUb0lEcyhvcHRpb24ub3B0aW9ucyldXG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5pZHMsIG9wdGlvbi5pZF1cbiAgfSwgW10pXG5cbmNvbnN0IG9wdGlvbnNSZWR1Y2VyID0gKHN0YXRlOiBPcHRpb25bXSwgYWN0aW9uOiBBY3Rpb24pOiBPcHRpb25bXSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdBREQnOiB7XG4gICAgICBjb25zdCB7IGNvbGxlY3Rpb24sIGRhdGEsIGhhc011bHRpcGxlUmVsYXRpb25zLCBpMThuLCByZWxhdGlvbiB9ID0gYWN0aW9uXG5cbiAgICAgIGNvbnN0IGxhYmVsS2V5ID0gY29sbGVjdGlvbi5hZG1pbi51c2VBc1RpdGxlIHx8ICdpZCdcblxuICAgICAgY29uc3QgbG9hZGVkSURzID0gcmVkdWNlVG9JRHMoc3RhdGUpXG5cbiAgICAgIGlmICghaGFzTXVsdGlwbGVSZWxhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAuLi5kYXRhLmRvY3MucmVkdWNlKChkb2NzLCBkb2MpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2FkZWRJRHMuaW5kZXhPZihkb2MuaWQpID09PSAtMSkge1xuICAgICAgICAgICAgICBsb2FkZWRJRHMucHVzaChkb2MuaWQpXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4uZG9jcyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogZG9jW2xhYmVsS2V5XSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBkb2MuaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRvY3NcbiAgICAgICAgICB9LCBbXSksXG4gICAgICAgIF1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IFsuLi5zdGF0ZV1cbiAgICAgIGNvbnN0IG9wdGlvbnNUb0FkZFRvID0gbmV3T3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0aW9uR3JvdXApID0+IG9wdGlvbkdyb3VwLmxhYmVsID09PSBnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uLmxhYmVscy5wbHVyYWwsIGkxOG4pLFxuICAgICAgKVxuXG4gICAgICBjb25zdCBuZXdTdWJPcHRpb25zID0gZGF0YS5kb2NzLnJlZHVjZSgoZG9jcywgZG9jKSA9PiB7XG4gICAgICAgIGlmIChsb2FkZWRJRHMuaW5kZXhPZihkb2MuaWQpID09PSAtMSkge1xuICAgICAgICAgIGxvYWRlZElEcy5wdXNoKGRvYy5pZClcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5kb2NzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogZG9jW2xhYmVsS2V5XSxcbiAgICAgICAgICAgICAgcmVsYXRpb25UbzogcmVsYXRpb24sXG4gICAgICAgICAgICAgIHZhbHVlOiBkb2MuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkb2NzXG4gICAgICB9LCBbXSlcblxuICAgICAgaWYgKG9wdGlvbnNUb0FkZFRvKSB7XG4gICAgICAgIG9wdGlvbnNUb0FkZFRvLm9wdGlvbnMgPSBbLi4ub3B0aW9uc1RvQWRkVG8ub3B0aW9ucywgLi4ubmV3U3ViT3B0aW9uc11cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld09wdGlvbnMucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGNvbGxlY3Rpb24ubGFiZWxzLnBsdXJhbCwgaTE4biksXG4gICAgICAgICAgb3B0aW9uczogbmV3U3ViT3B0aW9ucyxcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3T3B0aW9uc1xuICAgIH1cblxuICAgIGNhc2UgJ0NMRUFSJzoge1xuICAgICAgcmV0dXJuIGFjdGlvbi5yZXF1aXJlZCA/IFtdIDogW3sgbGFiZWw6IGFjdGlvbi5pMThuLnQoJ2dlbmVyYWw6bm9uZScpLCB2YWx1ZTogJ251bGwnIH1dXG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9wdGlvbnNSZWR1Y2VyXG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgU2VsZWN0RmlsdGVyUHJvcHMgYXMgUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFJlYWN0U2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vUmVhY3RTZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBmb3JtYXRPcHRpb25zIH0gZnJvbSAnLi9mb3JtYXRPcHRpb25zLmpzJ1xuXG5leHBvcnQgY29uc3QgU2VsZWN0OiBSZWFjdC5GQzxQcm9wcz4gPSAoe1xuICBkaXNhYmxlZCxcbiAgZmllbGQ6IHtcbiAgICBhZG1pbjogeyBwbGFjZWhvbGRlciB9LFxuICB9LFxuICBpc0NsZWFyYWJsZSxcbiAgb25DaGFuZ2UsXG4gIG9wZXJhdG9yLFxuICBvcHRpb25zOiBvcHRpb25zRnJvbVByb3BzLFxuICB2YWx1ZSxcbn0pID0+IHtcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IFJlYWN0LnVzZVN0YXRlKGZvcm1hdE9wdGlvbnMob3B0aW9uc0Zyb21Qcm9wcykpXG5cbiAgY29uc3QgaXNNdWx0aSA9IFsnaW4nLCAnbm90X2luJ10uaW5jbHVkZXMob3BlcmF0b3IpXG4gIGxldCB2YWx1ZVRvUmVuZGVyXG5cbiAgaWYgKGlzTXVsdGkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB2YWx1ZVRvUmVuZGVyID0gdmFsdWUubWFwKCh2YWwpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IG1hdGNoaW5nT3B0aW9uID8gZ2V0VHJhbnNsYXRpb24obWF0Y2hpbmdPcHRpb24ubGFiZWwsIGkxOG4pIDogdmFsLFxuICAgICAgICB2YWx1ZTogbWF0Y2hpbmdPcHRpb24/LnZhbHVlID8/IHZhbCxcbiAgICAgIH1cbiAgICB9KVxuICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZSlcbiAgICB2YWx1ZVRvUmVuZGVyID0ge1xuICAgICAgbGFiZWw6IG1hdGNoaW5nT3B0aW9uID8gZ2V0VHJhbnNsYXRpb24obWF0Y2hpbmdPcHRpb24ubGFiZWwsIGkxOG4pIDogdmFsdWUsXG4gICAgICB2YWx1ZTogbWF0Y2hpbmdPcHRpb24/LnZhbHVlID8/IHZhbHVlLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICBsZXQgbmV3VmFsdWVcblxuICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICBuZXdWYWx1ZSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoaXNNdWx0aSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZE9wdGlvbikpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIG9uQ2hhbmdlKG5ld1ZhbHVlKVxuICAgIH0sXG4gICAgW2lzTXVsdGksIG9uQ2hhbmdlXSxcbiAgKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0T3B0aW9ucyhmb3JtYXRPcHRpb25zKG9wdGlvbnNGcm9tUHJvcHMpKVxuICB9LCBbb3B0aW9uc0Zyb21Qcm9wc10pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTXVsdGkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlWzBdKVxuICAgIH1cbiAgfSwgW2lzTXVsdGksIG9uQ2hhbmdlLCB2YWx1ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3RTZWxlY3RcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGlzQ2xlYXJhYmxlPXtpc0NsZWFyYWJsZX1cbiAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICBvbkNoYW5nZT17b25TZWxlY3R9XG4gICAgICBvcHRpb25zPXtvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoeyAuLi5vcHRpb24sIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihvcHRpb24ubGFiZWwsIGkxOG4pIH0pKX1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIHZhbHVlPXt2YWx1ZVRvUmVuZGVyfVxuICAgIC8+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFRleHRGaWx0ZXJQcm9wcyBhcyBQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVhY3RTZWxlY3QgfSBmcm9tICcuLi8uLi8uLi9SZWFjdFNlbGVjdC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29uZGl0aW9uLXZhbHVlLXRleHQnXG5cbmV4cG9ydCBjb25zdCBUZXh0OiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBkaXNhYmxlZCwgZmllbGQsIG9uQ2hhbmdlLCBvcGVyYXRvciwgdmFsdWUgfSA9IHByb3BzXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IGhhc01hbnkgPSBmaWVsZD8uaGFzTWFueSA/PyBmYWxzZVxuICBjb25zdCBpc011bHRpID0gWydpbicsICdub3RfaW4nXS5pbmNsdWRlcyhvcGVyYXRvcikgfHwgaGFzTWFueVxuXG4gIGNvbnN0IFt2YWx1ZVRvUmVuZGVyLCBzZXRWYWx1ZVRvUmVuZGVyXSA9IFJlYWN0LnVzZVN0YXRlPFxuICAgIHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHsgdmFsdWU6IHN0cmluZyB9IH1bXVxuICA+KFtdKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICBsZXQgbmV3VmFsdWVcbiAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXVxuICAgICAgfSBlbHNlIGlmIChpc011bHRpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9uKSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udmFsdWUgfHwgb3B0aW9uLnZhbHVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1ZhbHVlID0gW3NlbGVjdGVkT3B0aW9uLnZhbHVlPy52YWx1ZSB8fCBzZWxlY3RlZE9wdGlvbi52YWx1ZV1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvbkNoYW5nZShuZXdWYWx1ZSlcbiAgICB9LFxuICAgIFtpc011bHRpLCBvbkNoYW5nZV0sXG4gIClcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc2V0VmFsdWVUb1JlbmRlcihcbiAgICAgICAgdmFsdWUubWFwKCh2YWwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBgJHt2YWx9JHtpbmRleH1gLCAvLyBhcHBlbmQgaW5kZXggdG8gYXZvaWQgZHVwbGljYXRlIGtleXMgYnV0IGFsbG93IGR1cGxpY2F0ZSBudW1iZXJzXG4gICAgICAgICAgICBsYWJlbDogYCR7dmFsfWAsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gYCR7dmFsfSR7aW5kZXh9YCxcbiAgICAgICAgICAgICAgdmFsdWU6ICh2YWwgYXMgYW55KT8udmFsdWUgfHwgdmFsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZVRvUmVuZGVyKFtdKVxuICAgIH1cbiAgfSwgW3ZhbHVlXSlcblxuICByZXR1cm4gaXNNdWx0aSA/IChcbiAgICA8UmVhY3RTZWxlY3RcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICBpc0NyZWF0YWJsZVxuICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgIGlzU29ydGFibGVcbiAgICAgIG9uQ2hhbmdlPXtvblNlbGVjdH1cbiAgICAgIG9wdGlvbnM9e1tdfVxuICAgICAgcGxhY2Vob2xkZXI9e3QoJ2dlbmVyYWw6ZW50ZXJBVmFsdWUnKX1cbiAgICAgIHZhbHVlPXt2YWx1ZVRvUmVuZGVyIHx8IFtdfVxuICAgIC8+XG4gICkgOiAoXG4gICAgPGlucHV0XG4gICAgICBjbGFzc05hbWU9e2Jhc2VDbGFzc31cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxuICAgICAgcGxhY2Vob2xkZXI9e3QoJ2dlbmVyYWw6ZW50ZXJBVmFsdWUnKX1cbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHZhbHVlPXt2YWx1ZSB8fCAnJ31cbiAgICAvPlxuICApXG59XG4iLCJleHBvcnQgY29uc3QgZ2V0T3BlcmF0b3JWYWx1ZVR5cGVzID0gKGZpZWxkVHlwZSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGFsbDogJ2FueScsXG4gICAgY29udGFpbnM6ICdzdHJpbmcnLFxuICAgIGVxdWFsczogJ2FueScsXG4gICAgLypcbiAgICAgKiBleGlzdHM6XG4gICAgICogVGhlIGV4cGVjdGVkIHZhbHVlIGlzIGJvb2xlYW4sIGJ1dCBpdCdzIHBhc3NlZCBhcyBhIHN0cmluZyAoJ3RydWUnIG9yICdmYWxzZScpLlxuICAgICAqIE5lZWQgdG8gYWRkaXRpb25hbGx5IGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyBzdHJpY3RseSAndHJ1ZScgb3IgJ2ZhbHNlJyBhcyBhIHN0cmluZyxcbiAgICAgKiByYXRoZXIgdGhhbiB1c2luZyBhIGRpcmVjdCB0eXBlb2YgY29tcGFyaXNvbi5cbiAgICAgKiBUaGlzIGlzIGhhbmRsZWQgYXM6XG4gICAgICogdmFsaWRPcGVyYXRvclZhbHVlID09PSAnYm9vbGVhbicgJiYgKHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICdmYWxzZScpXG4gICAgICovXG4gICAgZXhpc3RzOiAnYm9vbGVhbicsXG4gICAgLypcbiAgICAgKiBncmVhdGVyX3RoYW4sIGdyZWF0ZXJfdGhhbl9lcXVhbCwgbGVzc190aGFuLCBsZXNzX3RoYW5fZXF1YWw6XG4gICAgICogVXNlZCBmb3IgbnVtYmVyIGFuZCBkYXRlIGZpZWxkczpcbiAgICAgKiAtIEZvciBkYXRlIGZpZWxkcywgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCAoZS5nLiwgTW9uIEZlYiAxNyAyMDI1IDEyOjAwOjAwIEdNVCswMDAwKS5cbiAgICAgKiAtIEZvciBudW1iZXIgZmllbGRzLCB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIuXG4gICAgICovXG4gICAgZ3JlYXRlcl90aGFuOiBmaWVsZFR5cGUgPT09ICdkYXRlJyA/ICdvYmplY3QnIDogJ3N0cmluZycsXG4gICAgZ3JlYXRlcl90aGFuX2VxdWFsOiBmaWVsZFR5cGUgPT09ICdkYXRlJyA/ICdvYmplY3QnIDogJ3N0cmluZycsXG4gICAgaW46ICdhbnknLFxuICAgIGludGVyc2VjdHM6ICdhbnknLFxuICAgIGxlc3NfdGhhbjogZmllbGRUeXBlID09PSAnZGF0ZScgPyAnb2JqZWN0JyA6ICdzdHJpbmcnLFxuICAgIGxlc3NfdGhhbl9lcXVhbDogZmllbGRUeXBlID09PSAnZGF0ZScgPyAnb2JqZWN0JyA6ICdzdHJpbmcnLFxuICAgIGxpa2U6ICdzdHJpbmcnLFxuICAgIG5lYXI6ICdhbnknLFxuICAgIG5vdF9lcXVhbHM6ICdhbnknLFxuICAgIG5vdF9pbjogJ2FueScsXG4gICAgbm90X2xpa2U6ICdzdHJpbmcnLFxuICAgIHdpdGhpbjogJ2FueScsXG4gIH1cbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBUZXh0RmllbGRDbGllbnRDb21wb25lbnQgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBGaWVsZExhYmVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZmllbGRzL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IEdyb3VwQnlCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vR3JvdXBCeUJ1aWxkZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5UHJlc2V0c0dyb3VwQnlGaWVsZDogVGV4dEZpZWxkQ2xpZW50Q29tcG9uZW50ID0gKHtcbiAgZmllbGQ6IHsgbGFiZWwsIHJlcXVpcmVkIH0sXG59KSA9PiB7XG4gIGNvbnN0IHsgcGF0aCwgc2V0VmFsdWUsIHZhbHVlIH0gPSB1c2VGaWVsZDxzdHJpbmc+KClcbiAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25GaWVsZCA9IHVzZUZpZWxkKHsgcGF0aDogJ3JlbGF0ZWRDb2xsZWN0aW9uJyB9KVxuICBjb25zdCByZWxhdGVkQ29sbGVjdGlvbiA9IHJlbGF0ZWRDb2xsZWN0aW9uRmllbGQudmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXJlbGF0ZWRDb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnLmNvbGxlY3Rpb25zPy5maW5kKChjb2wpID0+IGNvbC5zbHVnID09PSByZWxhdGVkQ29sbGVjdGlvbilcbiAgfSwgW3JlbGF0ZWRDb2xsZWN0aW9uLCBjb25maWcuY29sbGVjdGlvbnNdKVxuXG4gIGNvbnN0IGZpZWxkcyA9IGNvbGxlY3Rpb25Db25maWc/LmZpZWxkcyA/PyBbXVxuXG4gIGlmICghcmVsYXRlZENvbGxlY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWVsZC10eXBlIHF1ZXJ5LXByZXNldC1ncm91cC1ieS1maWVsZFwiPlxuICAgICAgICA8RmllbGRMYWJlbCBhcz1cImgzXCIgbGFiZWw9e2xhYmVsfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInF1ZXJ5LXByZXNldC1ncm91cC1ieS1maWVsZF9faGludFwiPlxuICAgICAgICAgIFNlbGVjdCB0aGUgcmVsYXRlZCBjb2xsZWN0aW9uIHRvIGNvbmZpZ3VyZSBncm91cCBieS5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZpZWxkLXR5cGUgcXVlcnktcHJlc2V0LWdyb3VwLWJ5LWZpZWxkXCI+XG4gICAgICA8RmllbGRMYWJlbCBhcz1cImgzXCIgbGFiZWw9e2xhYmVsfSBwYXRoPXtwYXRofSByZXF1aXJlZD17cmVxdWlyZWR9IC8+XG4gICAgICA8R3JvdXBCeUJ1aWxkZXJcbiAgICAgICAgY29sbGVjdGlvblNsdWc9e3JlbGF0ZWRDb2xsZWN0aW9ufVxuICAgICAgICBmaWVsZHM9e2ZpZWxkc31cbiAgICAgICAgb25DaGFuZ2U9eyhncm91cEJ5KSA9PiBzZXRWYWx1ZShncm91cEJ5IHx8IG51bGwpfVxuICAgICAgICB2YWx1ZT17dmFsdWUgPz8gdW5kZWZpbmVkfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkLCBGaWVsZCwgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBTZWxlY3RJbnB1dCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9TZWxlY3QvSW5wdXQuanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyByZWR1Y2VGaWVsZHNUb09wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvcmVkdWNlRmllbGRzVG9PcHRpb25zLmpzJ1xuaW1wb3J0IHsgUmVhY3RTZWxlY3QgfSBmcm9tICcuLi9SZWFjdFNlbGVjdC9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25TbHVnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWydzbHVnJ11cbiAgcmVhZG9ubHkgZmllbGRzOiBDbGllbnRGaWVsZFtdXG4gIC8qKiBXaGVuIHNldCwgR3JvdXBCeUJ1aWxkZXIgaXMgY29udHJvbGxlZCBieSB0aGUgZm9ybSAodmFsdWUgKyBvbkNoYW5nZSkgaW5zdGVhZCBvZiBsaXN0IHF1ZXJ5LiAqL1xuICByZWFkb25seSBvbkNoYW5nZT86IChncm91cEJ5OiBzdHJpbmcpID0+IHZvaWRcbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmdcbn1cblxuY29uc3QgYmFzZUNsYXNzID0gJ2dyb3VwLWJ5LWJ1aWxkZXInXG5cbi8qKlxuICogTm90ZTogU29tZSBmaWVsZHMgYXJlIGFscmVhZHkgb21pdHRlZCBmcm9tIHRoZSBsaXN0IG9mIGZpZWxkczpcbiAqIC0gZmllbGRzIHdpdGggbmVzdGVkIGZpZWxkLCBlLmcuIGB0YWJzYCwgYGdyb3Vwc2AsIGV0Yy5cbiAqIC0gZmllbGRzIHRoYXQgZG9uJ3QgYWZmZWN0IGRhdGEsIGkuZS4gYHJvd2AsIGBjb2xsYXBzaWJsZWAsIGB1aWAsIGV0Yy5cbiAqIFNvIHdlIGRvbid0IHRlY2huaWNhbGx5IG5lZWQgdG8gb21pdCB0aGVtIGhlcmUsIGJ1dCBkbyBhbnl3YXkuXG4gKiBCdXQgc29tZSByZW1haW5pbmcgZmllbGRzIHN0aWxsIG5lZWQgYW4gYWRkaXRpb25hbCBjaGVjaywgZS5nLiBgcmljaFRleHRgLCBldGMuXG4gKi9cbmNvbnN0IHN1cHBvcnRlZEZpZWxkVHlwZXM6IEZpZWxkWyd0eXBlJ11bXSA9IFtcbiAgJ3RleHQnLFxuICAndGV4dGFyZWEnLFxuICAnbnVtYmVyJyxcbiAgJ3NlbGVjdCcsXG4gICdyZWxhdGlvbnNoaXAnLFxuICAnZGF0ZScsXG4gICdjaGVja2JveCcsXG4gICdyYWRpbycsXG4gICdlbWFpbCcsXG4gICdudW1iZXInLFxuICAndXBsb2FkJyxcbl1cblxuZXhwb3J0IGNvbnN0IEdyb3VwQnlCdWlsZGVyOiBSZWFjdC5GQzxQcm9wcz4gPSAoe1xuICBjb2xsZWN0aW9uU2x1ZyxcbiAgZmllbGRzLFxuICBvbkNoYW5nZSxcbiAgdmFsdWU6IHZhbHVlUHJvcCxcbn0pID0+IHtcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgcGVybWlzc2lvbnMgfSA9IHVzZUF1dGgoKVxuICBjb25zdCBsaXN0UXVlcnkgPSB1c2VMaXN0UXVlcnkoKVxuXG4gIGNvbnN0IGlzRm9ybU1vZGUgPSB0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbidcbiAgY29uc3QgZ3JvdXBCeVJhdyA9IGlzRm9ybU1vZGUgPyB2YWx1ZVByb3AgOiBsaXN0UXVlcnkucXVlcnk/Lmdyb3VwQnlcbiAgY29uc3QgZ3JvdXBCeUZpZWxkTmFtZSA9IGdyb3VwQnlSYXc/LnJlcGxhY2UoL14tLywgJycpXG5cbiAgY29uc3QgZmllbGRQZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zPy5jb2xsZWN0aW9ucz8uW2NvbGxlY3Rpb25TbHVnXT8uZmllbGRzXG5cbiAgY29uc3QgcmVkdWNlZEZpZWxkcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHJlZHVjZUZpZWxkc1RvT3B0aW9ucyh7XG4gICAgICAgIGZpZWxkUGVybWlzc2lvbnMsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgaTE4bixcbiAgICAgIH0pLFxuICAgIFtmaWVsZHMsIGZpZWxkUGVybWlzc2lvbnMsIGkxOG5dLFxuICApXG5cbiAgY29uc3QgZ3JvdXBCeUZpZWxkID0gcmVkdWNlZEZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQudmFsdWUgPT09IGdyb3VwQnlGaWVsZE5hbWUpXG5cbiAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNGb3JtTW9kZSkge1xuICAgICAgcmV0dXJuICh2OiB7IHZhbHVlOiBzdHJpbmcgfSB8IG51bGwpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2ID09PSBudWxsID8gdW5kZWZpbmVkIDogdi52YWx1ZVxuICAgICAgICBjb25zdCBuZXdHcm91cEJ5ID0gdmFsdWUgPyAoZ3JvdXBCeVJhdz8uc3RhcnRzV2l0aCgnLScpID8gYC0ke3ZhbHVlfWAgOiB2YWx1ZSkgOiAnJ1xuICAgICAgICBvbkNoYW5nZT8uKG5ld0dyb3VwQnkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAodjogeyB2YWx1ZTogc3RyaW5nIH0gfCBudWxsKSA9PiB7XG4gICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdFF1ZXJ5LnJlZmluZUxpc3REYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSB2ID09PSBudWxsID8gdW5kZWZpbmVkIDogdi52YWx1ZVxuICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgIGF3YWl0IGxpc3RRdWVyeS5yZWZpbmVMaXN0RGF0YSh7IGdyb3VwQnk6ICcnLCBwYWdlOiAxIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgbGlzdFF1ZXJ5LnJlZmluZUxpc3REYXRhKHtcbiAgICAgICAgICAgIGdyb3VwQnk6IHZhbHVlXG4gICAgICAgICAgICAgID8gbGlzdFF1ZXJ5LnF1ZXJ5Py5ncm91cEJ5Py5zdGFydHNXaXRoKCctJylcbiAgICAgICAgICAgICAgICA/IGAtJHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSkoKVxuICAgIH1cbiAgfSwgW2lzRm9ybU1vZGUsIGdyb3VwQnlSYXcsIGxpc3RRdWVyeSwgb25DaGFuZ2VdKVxuXG4gIGNvbnN0IGhhbmRsZUNsZWFyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzRm9ybU1vZGUpIHtcbiAgICAgIHJldHVybiAoKSA9PiBvbkNoYW5nZT8uKCcnKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGxpc3RRdWVyeS5yZWZpbmVMaXN0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGF3YWl0IGxpc3RRdWVyeS5yZWZpbmVMaXN0RGF0YSh7IGdyb3VwQnk6ICcnIH0pXG4gICAgICAgIH1cbiAgICAgIH0pKClcbiAgICB9XG4gIH0sIFtpc0Zvcm1Nb2RlLCBsaXN0UXVlcnksIG9uQ2hhbmdlXSlcblxuICBjb25zdCBoYW5kbGVEaXJlY3Rpb25DaGFuZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNGb3JtTW9kZSkge1xuICAgICAgcmV0dXJuICh7IHZhbHVlIH06IHsgdmFsdWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmICghZ3JvdXBCeUZpZWxkTmFtZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlPy4odmFsdWUgPT09ICdhc2MnID8gZ3JvdXBCeUZpZWxkTmFtZSA6IGAtJHtncm91cEJ5RmllbGROYW1lfWApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoeyB2YWx1ZSB9OiB7IHZhbHVlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIWdyb3VwQnlGaWVsZE5hbWUgfHwgdHlwZW9mIGxpc3RRdWVyeS5yZWZpbmVMaXN0RGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGxpc3RRdWVyeS5yZWZpbmVMaXN0RGF0YSh7XG4gICAgICAgICAgZ3JvdXBCeTogdmFsdWUgPT09ICdhc2MnID8gZ3JvdXBCeUZpZWxkTmFtZSA6IGAtJHtncm91cEJ5RmllbGROYW1lfWAsXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgfSlcbiAgICAgIH0pKClcbiAgICB9XG4gIH0sIFtncm91cEJ5RmllbGROYW1lLCBpc0Zvcm1Nb2RlLCBsaXN0UXVlcnksIG9uQ2hhbmdlXSlcblxuICBjb25zdCBkaXJlY3Rpb25WYWx1ZSA9XG4gICAgIWdyb3VwQnlSYXcgfHwgdHlwZW9mIGdyb3VwQnlSYXcgIT09ICdzdHJpbmcnXG4gICAgICA/ICdhc2MnXG4gICAgICA6IGdyb3VwQnlSYXcuc3RhcnRzV2l0aCgnLScpXG4gICAgICAgID8gJ2Rlc2MnXG4gICAgICAgIDogJ2FzYydcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcmB9PlxuICAgICAgICA8cD5cbiAgICAgICAgICB7dCgnZ2VuZXJhbDpncm91cEJ5TGFiZWwnLCB7XG4gICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvcD5cbiAgICAgICAge2dyb3VwQnlSYXcgJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY2xlYXItYnV0dG9uYH1cbiAgICAgICAgICAgIGlkPVwiZ3JvdXAtYnktLXJlc2V0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgaGFuZGxlQ2xlYXIoKX1cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOmNsZWFyJyl9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dHNgfT5cbiAgICAgICAgPFJlYWN0U2VsZWN0XG4gICAgICAgICAgZmlsdGVyT3B0aW9uPXsob3B0aW9uLCBpbnB1dFZhbHVlKSA9PlxuICAgICAgICAgICAgKChvcHRpb24/LmRhdGE/LnBsYWluVGV4dExhYmVsIGFzIHN0cmluZykgfHwgb3B0aW9uLmxhYmVsKVxuICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAuaW5jbHVkZXMoaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZD1cImdyb3VwLWJ5LS1maWVsZC1zZWxlY3RcIlxuICAgICAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICAgICAgaXNNdWx0aT17ZmFsc2V9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpZWxkQ2hhbmdlfVxuICAgICAgICAgIG9wdGlvbnM9e3JlZHVjZWRGaWVsZHMuZmlsdGVyKFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICAhZmllbGQuZmllbGQuYWRtaW4/LmRpc2FibGVHcm91cEJ5ICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICE9PSAnaWQnICYmXG4gICAgICAgICAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMuaW5jbHVkZXMoZmllbGQuZmllbGQudHlwZSksXG4gICAgICAgICAgKX1cbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgbGFiZWw6IGdyb3VwQnlGaWVsZD8ubGFiZWwgfHwgdCgnZ2VuZXJhbDpzZWxlY3RWYWx1ZScpLFxuICAgICAgICAgICAgdmFsdWU6IGdyb3VwQnlGaWVsZE5hbWUgfHwgJycsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPFNlbGVjdElucHV0XG4gICAgICAgICAgaWQ9XCJncm91cC1ieS0tc29ydFwiXG4gICAgICAgICAgaXNDbGVhcmFibGU9e2ZhbHNlfVxuICAgICAgICAgIG5hbWU9XCJkaXJlY3Rpb25cIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVEaXJlY3Rpb25DaGFuZ2V9XG4gICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgeyBsYWJlbDogdCgnZ2VuZXJhbDphc2NlbmRpbmcnKSwgdmFsdWU6ICdhc2MnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiB0KCdnZW5lcmFsOmRlc2NlbmRpbmcnKSwgdmFsdWU6ICdkZXNjJyB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgcGF0aD1cImRpcmVjdGlvblwiXG4gICAgICAgICAgcmVhZE9ubHk9eyFncm91cEJ5RmllbGROYW1lfVxuICAgICAgICAgIHZhbHVlPXtkaXJlY3Rpb25WYWx1ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE9uQ2FuY2VsIH0gZnJvbSAnLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5cbmltcG9ydCB7IHVzZUZvcm0sIHVzZUZvcm1Nb2RpZmllZCB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSAnLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJy4uL01vZGFsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUHJldmVudExlYXZlIH0gZnJvbSAnLi91c2VQcmV2ZW50TGVhdmUuanMnXG5cbnR5cGUgTGVhdmVXaXRob3V0U2F2aW5nUHJvcHMgPSB7XG4gIGRpc2FibGVQcmV2ZW50TGVhdmU/OiBib29sZWFuXG4gIG1vZGFsU2x1Zz86IHN0cmluZ1xuICBvbkNvbmZpcm0/OiAoKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICBvblByZXZlbnQ/OiAobmV4dEhyZWY6IG51bGwgfCBzdHJpbmcpID0+IHZvaWRcbn1cblxuY29uc3QgbGVhdmVXaXRob3V0U2F2aW5nTW9kYWxTbHVnID0gJ2xlYXZlLXdpdGhvdXQtc2F2aW5nJ1xuXG5leHBvcnQgY29uc3QgTGVhdmVXaXRob3V0U2F2aW5nOiBSZWFjdC5GQzxMZWF2ZVdpdGhvdXRTYXZpbmdQcm9wcz4gPSAoe1xuICBkaXNhYmxlUHJldmVudExlYXZlID0gZmFsc2UsXG4gIG9uQ29uZmlybSxcbiAgb25QcmV2ZW50LFxufSkgPT4ge1xuICBjb25zdCBtb2RhbFNsdWcgPSBsZWF2ZVdpdGhvdXRTYXZpbmdNb2RhbFNsdWdcbiAgY29uc3QgeyBjbG9zZU1vZGFsLCBvcGVuTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgbW9kaWZpZWQgPSB1c2VGb3JtTW9kaWZpZWQoKVxuICBjb25zdCB7IGlzVmFsaWQgfSA9IHVzZUZvcm0oKVxuICBjb25zdCB7IHVzZXIgfSA9IHVzZUF1dGgoKVxuICBjb25zdCBbaGFzQWNjZXB0ZWQsIHNldEhhc0FjY2VwdGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IHByZXZlbnQgPSAhZGlzYWJsZVByZXZlbnRMZWF2ZSAmJiBCb29sZWFuKChtb2RpZmllZCB8fCAhaXNWYWxpZCkgJiYgdXNlcilcblxuICBjb25zdCBoYW5kbGVQcmV2ZW50ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZUhyZWYgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MQW5jaG9yRWxlbWVudCk/LmhyZWYgfHwgbnVsbFxuICAgIGlmIChvblByZXZlbnQpIHtcbiAgICAgIG9uUHJldmVudChhY3RpdmVIcmVmKVxuICAgIH1cbiAgICBvcGVuTW9kYWwobW9kYWxTbHVnKVxuICB9LCBbb3Blbk1vZGFsLCBvblByZXZlbnQsIG1vZGFsU2x1Z10pXG5cbiAgY29uc3QgaGFuZGxlQWNjZXB0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICB9LCBbY2xvc2VNb2RhbCwgbW9kYWxTbHVnXSlcblxuICB1c2VQcmV2ZW50TGVhdmUoeyBoYXNBY2NlcHRlZCwgb25BY2NlcHQ6IGhhbmRsZUFjY2VwdCwgb25QcmV2ZW50OiBoYW5kbGVQcmV2ZW50LCBwcmV2ZW50IH0pXG5cbiAgY29uc3Qgb25DYW5jZWw6IE9uQ2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICB9LCBbY2xvc2VNb2RhbCwgbW9kYWxTbHVnXSlcblxuICBjb25zdCBoYW5kbGVDb25maXJtID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChvbkNvbmZpcm0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9uQ29uZmlybSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gTGVhdmVXaXRob3V0U2F2aW5nIG9uQ29uZmlybTonLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICAgIHNldEhhc0FjY2VwdGVkKHRydWUpXG4gIH0sIFtvbkNvbmZpcm1dKVxuXG4gIHJldHVybiAoXG4gICAgPExlYXZlV2l0aG91dFNhdmluZ01vZGFsIG1vZGFsU2x1Zz17bW9kYWxTbHVnfSBvbkNhbmNlbD17b25DYW5jZWx9IG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX0gLz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgTGVhdmVXaXRob3V0U2F2aW5nTW9kYWwgPSAoe1xuICBtb2RhbFNsdWcsXG4gIG9uQ2FuY2VsLFxuICBvbkNvbmZpcm0sXG59OiB7XG4gIG1vZGFsU2x1Zzogc3RyaW5nXG4gIG9uQ2FuY2VsPzogT25DYW5jZWxcbiAgb25Db25maXJtOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxDb25maXJtYXRpb25Nb2RhbFxuICAgICAgYm9keT17dCgnZ2VuZXJhbDpjaGFuZ2VzTm90U2F2ZWQnKX1cbiAgICAgIGNhbmNlbExhYmVsPXt0KCdnZW5lcmFsOnN0YXlPblRoaXNQYWdlJyl9XG4gICAgICBjb25maXJtTGFiZWw9e3QoJ2dlbmVyYWw6bGVhdmVBbnl3YXknKX1cbiAgICAgIGhlYWRpbmc9e3QoJ2dlbmVyYWw6bGVhdmVXaXRob3V0U2F2aW5nJyl9XG4gICAgICBtb2RhbFNsdWc9e21vZGFsU2x1Z31cbiAgICAgIG9uQ2FuY2VsPXtvbkNhbmNlbH1cbiAgICAgIG9uQ29uZmlybT17b25Db25maXJtfVxuICAgIC8+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuLy8gQ3JlZGl0OiBAVGFpa2k5Mjc3N1xuLy8gICAgLSBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9kaXNjdXNzaW9ucy8zMjIzMSNkaXNjdXNzaW9uY29tbWVudC03Mjg0Mzg2XG4vLyBDcmVkaXQ6IGByZWFjdC11c2VgIG1haW50YWluZXJzXG4vLyAgICAtICBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdHJlYW1pY2gvcmVhY3QtdXNlL2Jsb2IvYWRlOGQzOTA1ZjU0NDMwNTUxNWQwMTA3MzdiNGFlNjA0Y2M1MTAyNC9zcmMvdXNlQmVmb3JlVW5sb2FkLnRzI0wyXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcblxuZnVuY3Rpb24gb248VCBleHRlbmRzIERvY3VtZW50IHwgRXZlbnRUYXJnZXQgfCBIVE1MRWxlbWVudCB8IFdpbmRvdz4oXG4gIG9iajogbnVsbCB8IFQsXG4gIC4uLmFyZ3M6IFtzdHJpbmcsICgoKSA9PiB2b2lkKSB8IG51bGwsIC4uLmFueV0gfCBQYXJhbWV0ZXJzPFRbJ2FkZEV2ZW50TGlzdGVuZXInXT5cbik6IHZvaWQge1xuICBpZiAob2JqICYmIG9iai5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqLmFkZEV2ZW50TGlzdGVuZXIoLi4uKGFyZ3MgYXMgUGFyYW1ldGVyczxIVE1MRWxlbWVudFsnYWRkRXZlbnRMaXN0ZW5lciddPikpXG4gIH1cbn1cblxuZnVuY3Rpb24gb2ZmPFQgZXh0ZW5kcyBEb2N1bWVudCB8IEV2ZW50VGFyZ2V0IHwgSFRNTEVsZW1lbnQgfCBXaW5kb3c+KFxuICBvYmo6IG51bGwgfCBULFxuICAuLi5hcmdzOiBbc3RyaW5nLCAoKCkgPT4gdm9pZCkgfCBudWxsLCAuLi5hbnldIHwgUGFyYW1ldGVyczxUWydyZW1vdmVFdmVudExpc3RlbmVyJ10+XG4pOiB2b2lkIHtcbiAgaWYgKG9iaiAmJiBvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iai5yZW1vdmVFdmVudExpc3RlbmVyKC4uLihhcmdzIGFzIFBhcmFtZXRlcnM8SFRNTEVsZW1lbnRbJ3JlbW92ZUV2ZW50TGlzdGVuZXInXT4pKVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VCZWZvcmVVbmxvYWQgPSAoZW5hYmxlZDogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbiA9IHRydWUsIG1lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGZpbmFsRW5hYmxlZCA9IHR5cGVvZiBlbmFibGVkID09PSAnZnVuY3Rpb24nID8gZW5hYmxlZCgpIDogdHJ1ZVxuXG4gICAgICBpZiAoIWZpbmFsRW5hYmxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IG1lc3NhZ2VcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICB9LFxuICAgIFtlbmFibGVkLCBtZXNzYWdlXSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvbih3aW5kb3csICdiZWZvcmV1bmxvYWQnLCBoYW5kbGVyKVxuXG4gICAgcmV0dXJuICgpID0+IG9mZih3aW5kb3csICdiZWZvcmV1bmxvYWQnLCBoYW5kbGVyKVxuICB9LCBbZW5hYmxlZCwgaGFuZGxlcl0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcmV2ZW50TGVhdmUgPSAoe1xuICBoYXNBY2NlcHRlZCA9IGZhbHNlLFxuICBtZXNzYWdlID0gJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIGxlYXZlIHRoaXMgcGFnZT8nLFxuICBvbkFjY2VwdCxcbiAgb25QcmV2ZW50LFxuICBwcmV2ZW50ID0gdHJ1ZSxcbn06IHtcbiAgaGFzQWNjZXB0ZWQ6IGJvb2xlYW5cbiAgLy8gaWYgbm8gYG9uUHJldmVudGAgaXMgcHJvdmlkZWQsIHRoZSBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkIGluIGEgY29uZmlybSBkaWFsb2dcbiAgbWVzc2FnZT86IHN0cmluZ1xuICBvbkFjY2VwdD86ICgpID0+IHZvaWRcbiAgLy8gdG8gdXNlIGEgY3VzdG9tIGNvbmZpcm1hdGlvbiBkaWFsb2csIHByb3ZpZGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuXG4gIG9uUHJldmVudD86ICgpID0+IHZvaWRcbiAgcHJldmVudDogYm9vbGVhblxufSkgPT4ge1xuICAvLyBjaGVjayB3aGVuIHBhZ2UgaXMgYWJvdXQgdG8gYmUgcmVsb2FkZWRcbiAgdXNlQmVmb3JlVW5sb2FkKHByZXZlbnQsIG1lc3NhZ2UpXG4gIGNvbnN0IHsgc3RhcnRSb3V0ZVRyYW5zaXRpb24gfSA9IHVzZVJvdXRlVHJhbnNpdGlvbigpXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgY2FuY2VsbGVkVVJMID0gdXNlUmVmPHN0cmluZz4oJycpXG5cbiAgLy8gY2hlY2sgd2hlbiBwYWdlIGlzIGFib3V0IHRvIGJlIGNoYW5nZWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBpc0FuY2hvck9mQ3VycmVudFVybChjdXJyZW50VXJsOiBzdHJpbmcsIG5ld1VybDogc3RyaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjdXJyZW50VXJsT2JqID0gbmV3IFVSTChjdXJyZW50VXJsKVxuICAgICAgICBjb25zdCBuZXdVcmxPYmogPSBuZXcgVVJMKG5ld1VybClcbiAgICAgICAgLy8gQ29tcGFyZSBob3N0bmFtZSwgcGF0aG5hbWUsIGFuZCBzZWFyY2ggcGFyYW1ldGVyc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudFVybE9iai5ob3N0bmFtZSA9PT0gbmV3VXJsT2JqLmhvc3RuYW1lICYmXG4gICAgICAgICAgY3VycmVudFVybE9iai5wYXRobmFtZSA9PT0gbmV3VXJsT2JqLnBhdGhuYW1lICYmXG4gICAgICAgICAgY3VycmVudFVybE9iai5zZWFyY2ggPT09IG5ld1VybE9iai5zZWFyY2hcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5ldyBVUkwgaXMganVzdCBhbiBhbmNob3Igb2YgdGhlIGN1cnJlbnQgVVJMIHBhZ2VcbiAgICAgICAgICBjb25zdCBjdXJyZW50SGFzaCA9IGN1cnJlbnRVcmxPYmouaGFzaFxuICAgICAgICAgIGNvbnN0IG5ld0hhc2ggPSBuZXdVcmxPYmouaGFzaFxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjdXJyZW50SGFzaCAhPT0gbmV3SGFzaCAmJlxuICAgICAgICAgICAgY3VycmVudFVybE9iai5ocmVmLnJlcGxhY2UoY3VycmVudEhhc2gsICcnKSA9PT0gbmV3VXJsT2JqLmhyZWYucmVwbGFjZShuZXdIYXNoLCAnJylcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZygnVW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3duIGluIExlYXZlV2l0aG91dFNhdmluZzppc0FuY2hvck9mQ3VycmVudFVybCcsIGVycilcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRDbG9zZXN0QW5jaG9yKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IEhUTUxBbmNob3JFbGVtZW50IHwgbnVsbCB7XG4gICAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2EnKSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnRcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50IGFzIEhUTUxBbmNob3JFbGVtZW50XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgICBjb25zdCBhbmNob3IgPSBmaW5kQ2xvc2VzdEFuY2hvcih0YXJnZXQpXG4gICAgICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgICAgICBjb25zdCBuZXdVcmwgPSBhbmNob3IuaHJlZlxuICAgICAgICAgIGNvbnN0IGlzQW5jaG9yID0gaXNBbmNob3JPZkN1cnJlbnRVcmwoY3VycmVudFVybCwgbmV3VXJsKVxuICAgICAgICAgIGNvbnN0IGlzRG93bmxvYWRMaW5rID0gYW5jaG9yLmRvd25sb2FkICE9PSAnJ1xuICAgICAgICAgIGNvbnN0IGlzTmV3VGFiID0gYW5jaG9yLnRhcmdldCA9PT0gJ19ibGFuaycgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5XG5cbiAgICAgICAgICBjb25zdCBpc1BhZ2VMZWF2aW5nID0gIShuZXdVcmwgPT09IGN1cnJlbnRVcmwgfHwgaXNBbmNob3IgfHwgaXNEb3dubG9hZExpbmsgfHwgaXNOZXdUYWIpXG5cbiAgICAgICAgICBpZiAoaXNQYWdlTGVhdmluZyAmJiBwcmV2ZW50ICYmICghb25QcmV2ZW50ID8gIXdpbmRvdy5jb25maXJtKG1lc3NhZ2UpIDogdHJ1ZSkpIHtcbiAgICAgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2Ugb2YgdGhlIGhyZWZcbiAgICAgICAgICAgIGNhbmNlbGxlZFVSTC5jdXJyZW50ID0gbmV3VXJsXG5cbiAgICAgICAgICAgIC8vIENhbmNlbCB0aGUgcm91dGUgY2hhbmdlXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9uUHJldmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBvblByZXZlbnQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUubG9nKCdVbmV4cGVjdGVkIGV4Y2VwdGlvbiB0aHJvd24gaW4gTGVhdmVXaXRob3V0U2F2aW5nOnVzZVByZXZlbnRMZWF2ZScsIGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldmVudCkge1xuICAgICAgLy8gQWRkIHRoZSBnbG9iYWwgY2xpY2sgZXZlbnQgbGlzdGVuZXJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2ssIHRydWUpXG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgdGhlIGdsb2JhbCBjbGljayBldmVudCBsaXN0ZW5lciB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2ssIHRydWUpXG4gICAgfVxuICB9LCBbb25QcmV2ZW50LCBwcmV2ZW50LCBtZXNzYWdlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChoYXNBY2NlcHRlZCAmJiBjYW5jZWxsZWRVUkwuY3VycmVudCkge1xuICAgICAgaWYgKG9uQWNjZXB0KSB7XG4gICAgICAgIG9uQWNjZXB0KClcbiAgICAgIH1cblxuICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4gcm91dGVyLnB1c2goY2FuY2VsbGVkVVJMLmN1cnJlbnQpKVxuICAgIH1cbiAgfSwgW2hhc0FjY2VwdGVkLCBvbkFjY2VwdCwgcm91dGVyLCBzdGFydFJvdXRlVHJhbnNpdGlvbl0pXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlUm91dGVDYWNoZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgTW9kYWwsIHVzZU1vZGFsIH0gZnJvbSAnLi4vTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgbW9kYWxTbHVnID0gJ2RvY3VtZW50LXRha2Utb3ZlcidcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RvY3VtZW50LXRha2Utb3ZlcidcblxuZXhwb3J0IGNvbnN0IERvY3VtZW50VGFrZU92ZXI6IFJlYWN0LkZDPHtcbiAgaGFuZGxlQmFja1RvRGFzaGJvYXJkOiAoKSA9PiB2b2lkXG4gIGlzQWN0aXZlOiBib29sZWFuXG4gIG9uUmVhZE9ubHk6ICgpID0+IHZvaWRcbn0+ID0gKHsgaGFuZGxlQmFja1RvRGFzaGJvYXJkLCBpc0FjdGl2ZSwgb25SZWFkT25seSB9KSA9PiB7XG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IHN0YXJ0Um91dGVUcmFuc2l0aW9uIH0gPSB1c2VSb3V0ZVRyYW5zaXRpb24oKVxuICBjb25zdCB7IGNsZWFyUm91dGVDYWNoZSB9ID0gdXNlUm91dGVDYWNoZSgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgIG9wZW5Nb2RhbChtb2RhbFNsdWcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICAgIH1cbiAgfSwgW2lzQWN0aXZlLCBvcGVuTW9kYWwsIGNsb3NlTW9kYWxdKVxuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjbGFzc05hbWU9e2Jhc2VDbGFzc31cbiAgICAgIC8vIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvaXNzdWVzLzEzNzc4XG4gICAgICBjbG9zZU9uQmx1cj17ZmFsc2V9XG4gICAgICBzbHVnPXttb2RhbFNsdWd9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBwZXJgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfT5cbiAgICAgICAgICA8aDE+e3QoJ2dlbmVyYWw6ZWRpdGluZ1Rha2VuT3ZlcicpfTwvaDE+XG4gICAgICAgICAgPHA+e3QoJ2dlbmVyYWw6YW5vdGhlclVzZXJUYWtlbk92ZXInKX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udHJvbHNgfT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBidXR0b25TdHlsZT1cInByaW1hcnlcIlxuICAgICAgICAgICAgaWQ9e2Ake21vZGFsU2x1Z30tYmFjay10by1kYXNoYm9hcmRgfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzdGFydFJvdXRlVHJhbnNpdGlvbigoKSA9PiBoYW5kbGVCYWNrVG9EYXNoYm9hcmQoKSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOmJhY2tUb0Rhc2hib2FyZCcpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGlkPXtgJHttb2RhbFNsdWd9LXZpZXctcmVhZC1vbmx5YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgb25SZWFkT25seSgpXG4gICAgICAgICAgICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICAgICAgICAgICAgICBjbGVhclJvdXRlQ2FjaGUoKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6dmlld1JlYWRPbmx5Jyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudFVzZXIgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVJvdXRlQ2FjaGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUm91dGVDYWNoZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZVRyYW5zaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGlzQ2xpZW50VXNlck9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9pc0NsaWVudFVzZXJPYmplY3QuanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBNb2RhbCwgdXNlTW9kYWwgfSBmcm9tICcuLi9Nb2RhbC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBtb2RhbFNsdWcgPSAnZG9jdW1lbnQtbG9ja2VkJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZG9jdW1lbnQtbG9ja2VkJ1xuXG5jb25zdCBmb3JtYXREYXRlID0gKGRhdGUpID0+IHtcbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbiAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICBkYXk6ICdudW1lcmljJyxcbiAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgaG91cjEyOiB0cnVlLFxuICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgIHllYXI6ICdudW1lcmljJyxcbiAgfSkuZm9ybWF0KG5ldyBEYXRlKGRhdGUpKVxufVxuXG5leHBvcnQgY29uc3QgRG9jdW1lbnRMb2NrZWQ6IFJlYWN0LkZDPHtcbiAgaGFuZGxlR29CYWNrOiAoKSA9PiB2b2lkXG4gIGlzQWN0aXZlOiBib29sZWFuXG4gIG9uUmVhZE9ubHk6ICgpID0+IHZvaWRcbiAgb25UYWtlT3ZlcjogKCkgPT4gdm9pZFxuICB1cGRhdGVkQXQ/OiBudWxsIHwgbnVtYmVyXG4gIHVzZXI/OiBDbGllbnRVc2VyIHwgbnVtYmVyIHwgc3RyaW5nXG59PiA9ICh7IGhhbmRsZUdvQmFjaywgaXNBY3RpdmUsIG9uUmVhZE9ubHksIG9uVGFrZU92ZXIsIHVwZGF0ZWRBdCwgdXNlciB9KSA9PiB7XG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNsZWFyUm91dGVDYWNoZSB9ID0gdXNlUm91dGVDYWNoZSgpXG4gIGNvbnN0IHsgc3RhcnRSb3V0ZVRyYW5zaXRpb24gfSA9IHVzZVJvdXRlVHJhbnNpdGlvbigpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgIG9wZW5Nb2RhbChtb2RhbFNsdWcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICAgIH1cbiAgfSwgW2lzQWN0aXZlLCBvcGVuTW9kYWwsIGNsb3NlTW9kYWxdKVxuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjbGFzc05hbWU9e2Jhc2VDbGFzc31cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvaXNzdWVzLzEzNzc4XG4gICAgICBjbG9zZU9uQmx1cj17ZmFsc2V9XG4gICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+IGhhbmRsZUdvQmFjaygpKVxuICAgICAgfX1cbiAgICAgIHNsdWc9e21vZGFsU2x1Z31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcHBlcmB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udGVudGB9PlxuICAgICAgICAgIDxoMT57dCgnZ2VuZXJhbDpkb2N1bWVudExvY2tlZCcpfTwvaDE+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICB7aXNDbGllbnRVc2VyT2JqZWN0KHVzZXIpID8gKHVzZXIuZW1haWwgPz8gdXNlci5pZCkgOiBgJHt0KCdnZW5lcmFsOnVzZXInKX06ICR7dXNlcn1gfVxuICAgICAgICAgICAgPC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOmN1cnJlbnRseUVkaXRpbmcnKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7dCgnZ2VuZXJhbDplZGl0ZWRTaW5jZScpfSA8c3Ryb25nPntmb3JtYXREYXRlKHVwZGF0ZWRBdCl9PC9zdHJvbmc+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRyb2xzYH0+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgaWQ9e2Ake21vZGFsU2x1Z30tZ28tYmFja2B9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICAgICAgICAgICAgICBzdGFydFJvdXRlVHJhbnNpdGlvbigoKSA9PiBoYW5kbGVHb0JhY2soKSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOmdvQmFjaycpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGlkPXtgJHttb2RhbFNsdWd9LXZpZXctcmVhZC1vbmx5YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgb25SZWFkT25seSgpXG4gICAgICAgICAgICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICAgICAgICAgICAgICBjbGVhclJvdXRlQ2FjaGUoKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6dmlld1JlYWRPbmx5Jyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIGlkPXtgJHttb2RhbFNsdWd9LXRha2Utb3ZlcmB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uVGFrZU92ZXIoKVxuICAgICAgICAgICAgICBjbG9zZU1vZGFsKG1vZGFsU2x1ZylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOnRha2VPdmVyJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDbGllbnRVc2VyIH0gZnJvbSAncGF5bG9hZCdcblxuZXhwb3J0IGNvbnN0IGlzQ2xpZW50VXNlck9iamVjdCA9ICh1c2VyKTogdXNlciBpcyBDbGllbnRVc2VyID0+IHtcbiAgcmV0dXJuIHVzZXIgJiYgdHlwZW9mIHVzZXIgPT09ICdvYmplY3QnXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgRGVzY3JpcHRpb25GdW5jdGlvbiwgU3RhdGljRGVzY3JpcHRpb24sIFZpZXdEZXNjcmlwdGlvbkNsaWVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgdHlwZSBWaWV3RGVzY3JpcHRpb25Db21wb25lbnQgPSBSZWFjdC5Db21wb25lbnRUeXBlPGFueT5cblxudHlwZSBEZXNjcmlwdGlvbiA9IERlc2NyaXB0aW9uRnVuY3Rpb24gfCBTdGF0aWNEZXNjcmlwdGlvbiB8IHN0cmluZyB8IFZpZXdEZXNjcmlwdGlvbkNvbXBvbmVudFxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnQoZGVzY3JpcHRpb246IERlc2NyaXB0aW9uKTogZGVzY3JpcHRpb24gaXMgVmlld0Rlc2NyaXB0aW9uQ29tcG9uZW50IHtcbiAgcmV0dXJuIFJlYWN0LmlzVmFsaWRFbGVtZW50KGRlc2NyaXB0aW9uKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVmlld0Rlc2NyaXB0aW9uKHByb3BzOiBWaWV3RGVzY3JpcHRpb25DbGllbnRQcm9wcykge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBkZXNjcmlwdGlvbiB9ID0gcHJvcHNcblxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjdXN0b20tdmlldy1kZXNjcmlwdGlvblwiPntnZXRUcmFuc2xhdGlvbihkZXNjcmlwdGlvbiwgaTE4bil9PC9kaXY+XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vLi4vZ3JhcGhpY3MvQWNjb3VudC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUFjdGlvbnMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQWN0aW9ucy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEhhbWJ1cmdlciB9IGZyb20gJy4uL0hhbWJ1cmdlci9pbmRleC5qcydcbmltcG9ydCB7IExpbmsgfSBmcm9tICcuLi9MaW5rL2luZGV4LmpzJ1xuaW1wb3J0IHsgTG9jYWxpemVyIH0gZnJvbSAnLi4vTG9jYWxpemVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgTG9jYWxpemVyTGFiZWwgfSBmcm9tICcuLi9Mb2NhbGl6ZXIvTG9jYWxpemVyTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VOYXYgfSBmcm9tICcuLi9OYXYvY29udGV4dC5qcydcbmltcG9ydCB7IE5hdlRvZ2dsZXIgfSBmcm9tICcuLi9OYXYvTmF2VG9nZ2xlci9pbmRleC5qcydcbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IFN0ZXBOYXYgfSBmcm9tICcuLi9TdGVwTmF2L2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdhcHAtaGVhZGVyJ1xuXG50eXBlIFByb3BzID0ge1xuICBDdXN0b21BdmF0YXI/OiBSZWFjdC5SZWFjdE5vZGVcbiAgQ3VzdG9tSWNvbj86IFJlYWN0LlJlYWN0Tm9kZVxufVxuZXhwb3J0IGZ1bmN0aW9uIEFwcEhlYWRlcih7IEN1c3RvbUF2YXRhciwgQ3VzdG9tSWNvbiB9OiBQcm9wcykge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCB7IEFjdGlvbnMgfSA9IHVzZUFjdGlvbnMoKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIGFkbWluOiB7XG4gICAgICAgIHJvdXRlczogeyBhY2NvdW50OiBhY2NvdW50Um91dGUgfSxcbiAgICAgIH0sXG4gICAgICBsb2NhbGl6YXRpb24sXG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUgfSxcbiAgICAgIHNlcnZlclVSTCxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IG5hdk9wZW4gfSA9IHVzZU5hdigpXG5cbiAgY29uc3QgY3VzdG9tQ29udHJvbHNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtpc1Njcm9sbGFibGUsIHNldElzU2Nyb2xsYWJsZV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNoZWNrSXNTY3JvbGxhYmxlID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBjdXN0b21Db250cm9sc1JlZi5jdXJyZW50XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZSA9IGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGhcbiAgICAgICAgc2V0SXNTY3JvbGxhYmxlKHNjcm9sbGFibGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tJc1Njcm9sbGFibGUoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja0lzU2Nyb2xsYWJsZSlcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tJc1Njcm9sbGFibGUpXG4gICAgfVxuICB9LCBbQWN0aW9uc10pXG5cbiAgY29uc3QgQWN0aW9uQ29tcG9uZW50cyA9IEFjdGlvbnMgPyBPYmplY3QudmFsdWVzKEFjdGlvbnMpIDogW11cblxuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBuYXZPcGVuICYmIGAke2Jhc2VDbGFzc30tLW5hdi1vcGVuYF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmdgfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBwZXJgfT5cbiAgICAgICAgICA8TmF2VG9nZ2xlciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX21vYmlsZS1uYXYtdG9nZ2xlcmB9IHRhYkluZGV4PXstMX0+XG4gICAgICAgICAgICA8SGFtYnVyZ2VyIC8+XG4gICAgICAgICAgPC9OYXZUb2dnbGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250cm9scy13cmFwcGVyYH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc3RlcC1uYXYtd3JhcHBlcmB9PlxuICAgICAgICAgICAgICA8U3RlcE5hdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3N0ZXAtbmF2YH0gQ3VzdG9tSWNvbj17Q3VzdG9tSWNvbn0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjdGlvbnMtd3JhcHBlcmB9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9IHJlZj17Y3VzdG9tQ29udHJvbHNSZWZ9PlxuICAgICAgICAgICAgICAgIHtBY3Rpb25Db21wb25lbnRzLm1hcCgoQWN0aW9uLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgICAgICAgICAgaXNTY3JvbGxhYmxlICYmIGkgPT09IEFjdGlvbkNvbXBvbmVudHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtiYXNlQ2xhc3N9X19sYXN0LWFjdGlvbmBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtBY3Rpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHtpc1Njcm9sbGFibGUgJiYgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2dyYWRpZW50LXBsYWNlaG9sZGVyYH0gLz59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtsb2NhbGl6YXRpb24gJiYgKFxuICAgICAgICAgICAgICA8TG9jYWxpemVyTGFiZWwgYXJpYUxhYmVsPVwiaW52aXNpYmxlXCIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sb2NhbGl6ZXItc3BhY2luZ2B9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnYXV0aGVudGljYXRpb246YWNjb3VudCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FjY291bnRgfVxuICAgICAgICAgICAgICBocmVmPXtmb3JtYXRBZG1pblVSTCh7IGFkbWluUm91dGUsIHBhdGg6IGFjY291bnRSb3V0ZSB9KX1cbiAgICAgICAgICAgICAgcHJlZmV0Y2g9e2ZhbHNlfVxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudCBDdXN0b21Db21wb25lbnQ9e0N1c3RvbUF2YXRhcn0gRmFsbGJhY2s9ezxBY2NvdW50IC8+fSAvPlxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPExvY2FsaXplciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xvY2FsaXplcmB9IC8+XG4gICAgPC9oZWFkZXI+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVmYXVsdEFjY291bnRJY29uIH0gZnJvbSAnLi9EZWZhdWx0L2luZGV4LmpzJ1xuaW1wb3J0IHsgR3JhdmF0YXJBY2NvdW50SWNvbiB9IGZyb20gJy4vR3JhdmF0YXIvaW5kZXguanMnXG5cbmV4cG9ydCBjb25zdCBBY2NvdW50ID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICBhZG1pbjoge1xuICAgICAgICBhdmF0YXIsXG4gICAgICAgIHJvdXRlczogeyBhY2NvdW50OiBhY2NvdW50Um91dGUgfSxcbiAgICAgIH0sXG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUgfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IHVzZXIgfSA9IHVzZUF1dGgoKVxuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKClcbiAgY29uc3QgaXNPbkFjY291bnRQYWdlID0gcGF0aG5hbWUgPT09IGZvcm1hdEFkbWluVVJMKHsgYWRtaW5Sb3V0ZSwgcGF0aDogYWNjb3VudFJvdXRlIH0pXG5cbiAgaWYgKCF1c2VyPy5lbWFpbCB8fCBhdmF0YXIgPT09ICdkZWZhdWx0Jykge1xuICAgIHJldHVybiA8RGVmYXVsdEFjY291bnRJY29uIGFjdGl2ZT17aXNPbkFjY291bnRQYWdlfSAvPlxuICB9XG4gIGlmIChhdmF0YXIgPT09ICdncmF2YXRhcicpIHtcbiAgICByZXR1cm4gPEdyYXZhdGFyQWNjb3VudEljb24gLz5cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2dyYXBoaWMtYWNjb3VudCdcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRBY2NvdW50SWNvbjogUmVhY3QuRkM8e1xuICBhY3RpdmU6IGJvb2xlYW5cbn0+ID0gKHByb3BzKSA9PiAoXG4gIDxzdmdcbiAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIHByb3BzPy5hY3RpdmUgJiYgYCR7YmFzZUNsYXNzfS0tYWN0aXZlYF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICBoZWlnaHQ9XCIyNVwiXG4gICAgdmlld0JveD1cIjAgMCAyNSAyNVwiXG4gICAgd2lkdGg9XCIyNVwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gID5cbiAgICA8Y2lyY2xlIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYmdgfSBjeD1cIjEyLjVcIiBjeT1cIjEyLjVcIiByPVwiMTEuNVwiIC8+XG4gICAgPGNpcmNsZSBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRgfSBjeD1cIjEyLjVcIiBjeT1cIjEwLjczXCIgcj1cIjMuOThcIiAvPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2JvZHlgfVxuICAgICAgZD1cIk0xMi41LDI0YTExLjQ0LDExLjQ0LDAsMCwwLDcuNjYtMi45NGMtLjUtMi43MS0zLjczLTQuOC03LjY2LTQuOHMtNy4xNiwyLjA5LTcuNjYsNC44QTExLjQ0LDExLjQ0LDAsMCwwLDEyLjUsMjRaXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IG1kNSBmcm9tICdtZDUnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IEdyYXZhdGFyQWNjb3VudEljb246IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IHVzZUF1dGgoKVxuXG4gIGNvbnN0IGhhc2ggPSBtZDUodXNlci5lbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSlcblxuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICBkZWZhdWx0OiAnbXAnLFxuICAgIHI6ICdnJyxcbiAgICBzOiAnNTAnLFxuICB9KS50b1N0cmluZygpXG5cbiAgY29uc3QgcXVlcnkgPSBgPyR7cGFyYW1zfWBcblxuICByZXR1cm4gKFxuICAgIDxpbWdcbiAgICAgIGFsdD1cInlhc1wiXG4gICAgICBjbGFzc05hbWU9XCJncmF2YXRhci1hY2NvdW50XCJcbiAgICAgIGhlaWdodD17MjV9XG4gICAgICBzcmM9e2BodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLyR7aGFzaH0ke3F1ZXJ5fWB9XG4gICAgICBzdHlsZT17eyBib3JkZXJSYWRpdXM6ICc1MCUnIH19XG4gICAgICB3aWR0aD17MjV9XG4gICAgLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbnR5cGUgQWN0aW9uc0NvbnRleHRUeXBlID0ge1xuICBBY3Rpb25zOiB7XG4gICAgW2tleTogc3RyaW5nXTogUmVhY3QuUmVhY3ROb2RlXG4gIH1cbiAgc2V0Vmlld0FjdGlvbnM6IChhY3Rpb25zOiBBY3Rpb25zQ29udGV4dFR5cGVbJ0FjdGlvbnMnXSkgPT4gdm9pZFxufVxuXG5jb25zdCBBY3Rpb25zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QWN0aW9uc0NvbnRleHRUeXBlPih7XG4gIEFjdGlvbnM6IHt9LFxuICBzZXRWaWV3QWN0aW9uczogKCkgPT4ge30sXG59KVxuXG5leHBvcnQgY29uc3QgdXNlQWN0aW9ucyA9ICgpID0+IHVzZShBY3Rpb25zQ29udGV4dClcblxuZXhwb3J0IGNvbnN0IEFjdGlvbnNQcm92aWRlcjogUmVhY3QuRkM8e1xuICByZWFkb25seSBBY3Rpb25zPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFJlYWN0LlJlYWN0Tm9kZVxuICB9XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn0+ID0gKHsgQWN0aW9ucywgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCBbdmlld0FjdGlvbnMsIHNldFZpZXdBY3Rpb25zXSA9IHVzZVN0YXRlKEFjdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8QWN0aW9uc0NvbnRleHRcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIEFjdGlvbnM6IHtcbiAgICAgICAgICAuLi52aWV3QWN0aW9ucyxcbiAgICAgICAgICAuLi5BY3Rpb25zLFxuICAgICAgICB9LFxuICAgICAgICBzZXRWaWV3QWN0aW9ucyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQWN0aW9uc0NvbnRleHQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBDaGV2cm9uSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL0NoZXZyb24vaW5kZXguanMnXG5pbXBvcnQgeyBDbG9zZU1lbnVJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvQ2xvc2VNZW51L2luZGV4LmpzJ1xuaW1wb3J0IHsgTWVudUljb24gfSBmcm9tICcuLi8uLi9pY29ucy9NZW51L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2hhbWJ1cmdlcidcblxuZXhwb3J0IGNvbnN0IEhhbWJ1cmdlcjogUmVhY3QuRkM8e1xuICByZWFkb25seSBjbG9zZUljb24/OiAnY29sbGFwc2UnIHwgJ3gnXG4gIHJlYWRvbmx5IGlzQWN0aXZlPzogYm9vbGVhblxufT4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY2xvc2VJY29uID0gJ3gnLCBpc0FjdGl2ZSA9IGZhbHNlIH0gPSBwcm9wc1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICB7IWlzQWN0aXZlICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6b3BlbicpfVxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fb3Blbi1pY29uYH1cbiAgICAgICAgICB0aXRsZT17dCgnZ2VuZXJhbDpvcGVuJyl9XG4gICAgICAgID5cbiAgICAgICAgICA8TWVudUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge2lzQWN0aXZlICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGFyaWEtbGFiZWw9e2Nsb3NlSWNvbiA9PT0gJ2NvbGxhcHNlJyA/IHQoJ2dlbmVyYWw6Y29sbGFwc2UnKSA6IHQoJ2dlbmVyYWw6Y2xvc2UnKX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Nsb3NlLWljb25gfVxuICAgICAgICAgIHRpdGxlPXtjbG9zZUljb24gPT09ICdjb2xsYXBzZScgPyB0KCdnZW5lcmFsOmNvbGxhcHNlJykgOiB0KCdnZW5lcmFsOmNsb3NlJyl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2xvc2VJY29uID09PSAneCcgJiYgPENsb3NlTWVudUljb24gLz59XG4gICAgICAgICAge2Nsb3NlSWNvbiA9PT0gJ2NvbGxhcHNlJyAmJiA8Q2hldnJvbkljb24gZGlyZWN0aW9uPVwibGVmdFwiIC8+fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBDbG9zZU1lbnVJY29uOiBSZWFjdC5GQyA9ICgpID0+IChcbiAgPHN2ZyBjbGFzc05hbWU9XCJpY29uIGljb24tLWNsb3NlLW1lbnVcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxwYXRoIGNsYXNzTmFtZT1cInN0cm9rZVwiIGQ9XCJNMTQgNkw2IDE0TTYgNkwxNCAxNFwiIHN0cm9rZUxpbmVjYXA9XCJzcXVhcmVcIiAvPlxuICA8L3N2Zz5cbilcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBNZW51SWNvbjogUmVhY3QuRkMgPSAoKSA9PiAoXG4gIDxzdmdcbiAgICBjbGFzc05hbWU9XCJpY29uIGljb24tLW1lbnVcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICBoZWlnaHQ9XCIyMFwiXG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgd2lkdGg9XCIyMFwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gID5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwic3Ryb2tlXCJcbiAgICAgIGQ9XCJNNC42NjY2NyAxMEgxNS4zMzMzTTQuNjY2NjcgNkgxNS4zMzMzTTQuNjY2NjcgMTRIMTUuMzMzM1wiXG4gICAgICBzdHJva2VMaW5lY2FwPVwic3F1YXJlXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSwgdXNlTG9jYWxlTG9hZGluZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VSb3V0ZVRyYW5zaXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUm91dGVUcmFuc2l0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBQb3B1cCwgUG9wdXBMaXN0IH0gZnJvbSAnLi4vUG9wdXAvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IExvY2FsaXplckxhYmVsIH0gZnJvbSAnLi9Mb2NhbGl6ZXJMYWJlbC9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xvY2FsaXplcidcblxuZXhwb3J0IGNvbnN0IExvY2FsaXplcjogUmVhY3QuRkM8e1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn0+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBwcm9wc1xuICBjb25zdCB7XG4gICAgY29uZmlnOiB7IGxvY2FsaXphdGlvbiB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICBjb25zdCB7IHN0YXJ0Um91dGVUcmFuc2l0aW9uIH0gPSB1c2VSb3V0ZVRyYW5zaXRpb24oKVxuXG4gIGNvbnN0IHsgc2V0TG9jYWxlSXNMb2FkaW5nIH0gPSB1c2VMb2NhbGVMb2FkaW5nKClcblxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgbG9jYWxlID0gdXNlTG9jYWxlKClcblxuICBpZiAobG9jYWxpemF0aW9uKSB7XG4gICAgY29uc3QgeyBsb2NhbGVzIH0gPSBsb2NhbGl6YXRpb25cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT5cbiAgICAgICAgPFBvcHVwXG4gICAgICAgICAgYnV0dG9uPXs8TG9jYWxpemVyTGFiZWwgLz59XG4gICAgICAgICAgaG9yaXpvbnRhbEFsaWduPVwicmlnaHRcIlxuICAgICAgICAgIHJlbmRlcj17KHsgY2xvc2UgfSkgPT4gKFxuICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgICAge2xvY2FsZXMubWFwKChsb2NhbGVPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGVPcHRpb25MYWJlbCA9IGdldFRyYW5zbGF0aW9uKGxvY2FsZU9wdGlvbi5sYWJlbCwgaTE4bilcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU9e2xvY2FsZS5jb2RlID09PSBsb2NhbGVPcHRpb24uY29kZX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xvY2FsZS5jb2RlID09PSBsb2NhbGVPcHRpb24uY29kZX1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtsb2NhbGVPcHRpb24uY29kZX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsZUlzTG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKClcblxuICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHVzZSBgdXNlU2VhcmNoUGFyYW1zYCBoZXJlIGJlY2F1c2UgaXQgaXMgc3RhbGUgZHVlIHRvIGB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGVgIGluIGBMaXN0UXVlcnlQcm92aWRlcmBcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpXG5cbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBxcy5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnFzLnBhcnNlKHNlYXJjaFBhcmFtcy50b1N0cmluZygpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGg6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlOiBsb2NhbGVPcHRpb24uY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyLnB1c2godXJsKVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtsb2NhbGVPcHRpb25MYWJlbCAhPT0gbG9jYWxlT3B0aW9uLmNvZGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAge2xvY2FsZU9wdGlvbkxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xvY2FsZS1jb2RlYH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1sb2NhbGU9e2xvY2FsZU9wdGlvbi5jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YCgke2xvY2FsZU9wdGlvbi5jb2RlfSlgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sb2NhbGUtY29kZWB9IGRhdGEtbG9jYWxlPXtsb2NhbGVPcHRpb24uY29kZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bG9jYWxlT3B0aW9uTGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHNob3dTY3JvbGxiYXJcbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbG9jYWxpemVyLWJ1dHRvbidcblxuZXhwb3J0IGNvbnN0IExvY2FsaXplckxhYmVsOiBSZWFjdC5GQzx7XG4gIGFyaWFMYWJlbD86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn0+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgYXJpYUxhYmVsLCBjbGFzc05hbWUgfSA9IHByb3BzXG4gIGNvbnN0IGxvY2FsZSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsIHx8IHQoJ2dlbmVyYWw6bG9jYWxlJyl9XG4gICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgIGRhdGEtbG9jYWxlPXtsb2NhbGUgPyBsb2NhbGUuY29kZSA6IHVuZGVmaW5lZH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWxgfT57YCR7dCgnZ2VuZXJhbDpsb2NhbGUnKX06YH0mbmJzcDs8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jdXJyZW50YH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY3VycmVudC1sYWJlbGB9PlxuICAgICAgICAgIHtgJHtnZXRUcmFuc2xhdGlvbihsb2NhbGUubGFiZWwsIGkxOG4pfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPENoZXZyb25JY29uIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY2hldnJvbmB9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VXaW5kb3dJbmZvIH0gZnJvbSAnQGZhY2VsZXNzLXVpL3dpbmRvdy1pbmZvJ1xuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBQUkVGRVJFTkNFX0tFWVMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9QcmVmZXJlbmNlcy9pbmRleC5qcydcblxudHlwZSBOYXZDb250ZXh0VHlwZSA9IHtcbiAgaHlkcmF0ZWQ6IGJvb2xlYW5cbiAgbmF2T3BlbjogYm9vbGVhblxuICBuYXZSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+XG4gIHNldE5hdk9wZW46ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZFxuICBzaG91bGRBbmltYXRlOiBib29sZWFuXG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBOYXZDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxOYXZDb250ZXh0VHlwZT4oe1xuICBoeWRyYXRlZDogZmFsc2UsXG4gIG5hdk9wZW46IHRydWUsXG4gIG5hdlJlZjogbnVsbCxcbiAgc2V0TmF2T3BlbjogKCkgPT4ge30sXG4gIHNob3VsZEFuaW1hdGU6IGZhbHNlLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZU5hdiA9ICgpID0+IFJlYWN0LnVzZShOYXZDb250ZXh0KVxuXG5jb25zdCBnZXROYXZQcmVmZXJlbmNlID0gYXN5bmMgKGdldFByZWZlcmVuY2UpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgbmF2UHJlZnMgPSBhd2FpdCBnZXRQcmVmZXJlbmNlKFBSRUZFUkVOQ0VfS0VZUy5OQVYpXG4gIGNvbnN0IHByZWZlcnJlZFN0YXRlID0gbmF2UHJlZnM/Lm9wZW5cbiAgaWYgKHR5cGVvZiBwcmVmZXJyZWRTdGF0ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHByZWZlcnJlZFN0YXRlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTmF2UHJvdmlkZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBpbml0aWFsSXNPcGVuPzogYm9vbGVhblxufT4gPSAoeyBjaGlsZHJlbiwgaW5pdGlhbElzT3BlbiB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBicmVha3BvaW50czogeyBsOiBsYXJnZUJyZWFrLCBtOiBtaWRCcmVhaywgczogc21hbGxCcmVhayB9LFxuICB9ID0gdXNlV2luZG93SW5mbygpXG5cbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VQYXRobmFtZSgpXG5cbiAgY29uc3QgeyBnZXRQcmVmZXJlbmNlIH0gPSB1c2VQcmVmZXJlbmNlcygpXG4gIGNvbnN0IG5hdlJlZiA9IHVzZVJlZihudWxsKVxuXG4gIC8vIGluaXRpYWxpemUgdGhlIG5hdiB0byBiZSBjbG9zZWRcbiAgLy8gdGhpcyBpcyBiZWNhdXNlIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgaXMgYXN5bmNcbiAgLy8gc28gaW5zdGVhZCBvZiBjbG9zaW5nIGl0IGFmdGVyIHRoZSBwcmVmZXJlbmNlIGlzIGxvYWRlZFxuICAvLyB3ZSB3aWxsIG9wZW4gaXQgYWZ0ZXIgdGhlIHByZWZlcmVuY2UgaXMgbG9hZGVkXG4gIGNvbnN0IFtuYXZPcGVuLCBzZXROYXZPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGluaXRpYWxJc09wZW4pXG5cbiAgY29uc3QgW3Nob3VsZEFuaW1hdGUsIHNldFNob3VsZEFuaW1hdGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoeWRyYXRlZCwgc2V0SHlkcmF0ZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG5cbiAgLy8gb24gbG9hZCBjaGVjayB0aGUgdXNlcidzIHByZWZlcmVuY2UgYW5kIHNldCBcImluaXRpYWxcIiBzdGF0ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsYXJnZUJyZWFrID09PSBmYWxzZSkge1xuICAgICAgY29uc3Qgc2V0TmF2RnJvbVByZWZlcmVuY2VzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwcmVmZXJyZWRTdGF0ZSA9IGF3YWl0IGdldE5hdlByZWZlcmVuY2UoZ2V0UHJlZmVyZW5jZSlcbiAgICAgICAgc2V0TmF2T3BlbihwcmVmZXJyZWRTdGF0ZSlcbiAgICAgIH1cblxuICAgICAgdm9pZCBzZXROYXZGcm9tUHJlZmVyZW5jZXMoKVxuICAgIH1cbiAgfSwgW2xhcmdlQnJlYWssIGdldFByZWZlcmVuY2UsIHNldE5hdk9wZW5dKVxuXG4gIC8vIG9uIHNtYWxsZXIgc2NyZWVucyB3aGVyZSB0aGUgbmF2IGlzIGEgbW9kYWxcbiAgLy8gY2xvc2UgdGhlIG5hdiB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBhd2F5XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNtYWxsQnJlYWsgPT09IHRydWUpIHtcbiAgICAgIHNldE5hdk9wZW4oZmFsc2UpXG4gICAgfVxuICB9LCBbcGF0aG5hbWVdKVxuXG4gIC8vIG9uIG9wZW4gYW5kIGNsb3NlLCBsb2NrIHRoZSBib2R5IHNjcm9sbFxuICAvLyBkbyBub3QgZG8gdGhpcyBvbiBkZXNrdG9wLCB0aGUgc2lkZWJhciBpcyBub3QgYSBtb2RhbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChuYXZSZWYuY3VycmVudCkge1xuICAgICAgaWYgKG5hdk9wZW4gJiYgbWlkQnJlYWspIHtcbiAgICAgICAgbmF2UmVmLmN1cnJlbnQuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJ2NvbnRhaW4nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYXZSZWYuY3VycmVudC5zdHlsZS5vdmVyc2Nyb2xsQmVoYXZpb3IgPSAnYXV0bydcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtuYXZPcGVuLCBtaWRCcmVha10pXG5cbiAgLy8gb24gc21hbGxlciBzY3JlZW5zIHdoZXJlIHRoZSBuYXYgaXMgYSBtb2RhbFxuICAvLyBjbG9zZSB0aGUgbmF2IHdoZW4gdGhlIHVzZXIgcmVzaXplcyBkb3duIHRvIG1vYmlsZVxuICAvLyB0aGUgc2lkZWJhciBpcyBhIG1vZGFsIG9uIG1vYmlsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsYXJnZUJyZWFrID09PSB0cnVlIHx8IG1pZEJyZWFrID09PSB0cnVlIHx8IHNtYWxsQnJlYWsgPT09IHRydWUpIHtcbiAgICAgIHNldE5hdk9wZW4oZmFsc2UpXG4gICAgfVxuICAgIHNldEh5ZHJhdGVkKHRydWUpXG5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRTaG91bGRBbmltYXRlKHRydWUpXG4gICAgfSwgMTAwKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICB9XG4gIH0sIFtsYXJnZUJyZWFrLCBtaWRCcmVhaywgc21hbGxCcmVha10pXG5cbiAgLy8gd2hlbiB0aGUgY29tcG9uZW50IHVubW91bnRzLCBjbGVhciBhbGwgYm9keSBzY3JvbGwgbG9ja3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKG5hdlJlZi5jdXJyZW50KSB7XG4gICAgICAgIG5hdlJlZi5jdXJyZW50LnN0eWxlLm92ZXJzY3JvbGxCZWhhdmlvciA9ICdhdXRvJ1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIChcbiAgICA8TmF2Q29udGV4dCB2YWx1ZT17eyBoeWRyYXRlZCwgbmF2T3BlbiwgbmF2UmVmLCBzZXROYXZPcGVuLCBzaG91bGRBbmltYXRlIH19PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvTmF2Q29udGV4dD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VXaW5kb3dJbmZvIH0gZnJvbSAnQGZhY2VsZXNzLXVpL3dpbmRvdy1pbmZvJ1xuaW1wb3J0IHsgUFJFRkVSRU5DRV9LRVlTIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVByZWZlcmVuY2VzIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1ByZWZlcmVuY2VzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VOYXYgfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICduYXYtdG9nZ2xlcidcblxuZXhwb3J0IGNvbnN0IE5hdlRvZ2dsZXI6IFJlYWN0LkZDPHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGlkPzogc3RyaW5nXG4gIHRhYkluZGV4PzogbnVtYmVyXG59PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB0YWJJbmRleCA9IDAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgeyBzZXRQcmVmZXJlbmNlIH0gPSB1c2VQcmVmZXJlbmNlcygpXG5cbiAgY29uc3QgeyBuYXZPcGVuLCBzZXROYXZPcGVuIH0gPSB1c2VOYXYoKVxuXG4gIGNvbnN0IHtcbiAgICBicmVha3BvaW50czogeyBsOiBsYXJnZUJyZWFrIH0sXG4gIH0gPSB1c2VXaW5kb3dJbmZvKClcblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGFyaWEtbGFiZWw9e2Ake25hdk9wZW4gPyB0KCdnZW5lcmFsOmNsb3NlJykgOiB0KCdnZW5lcmFsOm9wZW4nKX0gJHt0KCdnZW5lcmFsOm1lbnUnKX1gfVxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBuYXZPcGVuICYmIGAke2Jhc2VDbGFzc30tLWlzLW9wZW5gLCBjbGFzc05hbWVdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgc2V0TmF2T3BlbighbmF2T3BlbilcblxuICAgICAgICAvLyBvbmx5IHdoZW4gdGhlIHVzZXIgZXhwbGljaXRseSB0b2dnbGVzIHRoZSBuYXYgb24gZGVza3RvcCBkbyB3ZSB3YW50IHRvIHNldCB0aGUgcHJlZmVyZW5jZVxuICAgICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgdGhlIGpzIG1heSBvcGVuIG9yIGNsb3NlIHRoZSBuYXYgYmFzZWQgb24gdGhlIHdpbmRvdyBzaXplLCByb3V0aW5nLCBldGNcbiAgICAgICAgaWYgKCFsYXJnZUJyZWFrKSB7XG4gICAgICAgICAgYXdhaXQgc2V0UHJlZmVyZW5jZShcbiAgICAgICAgICAgIFBSRUZFUkVOQ0VfS0VZUy5OQVYsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9wZW46ICFuYXZPcGVuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBTdGVwTmF2SXRlbSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IFBheWxvYWRJY29uIH0gZnJvbSAnLi4vLi4vZ3JhcGhpY3MvSWNvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IExpbmsgfSBmcm9tICcuLi9MaW5rL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnLi4vUmVuZGVyQ3VzdG9tQ29tcG9uZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgU3RlcE5hdlByb3ZpZGVyLCB1c2VTdGVwTmF2IH0gZnJvbSAnLi9jb250ZXh0LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCB7IFNldFN0ZXBOYXYgfSBmcm9tICcuL1NldFN0ZXBOYXYuanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzdGVwLW5hdidcblxuY29uc3QgU3RlcE5hdjogUmVhY3QuRkM8e1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgQ3VzdG9tSWNvbj86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVGhpcyBwcm9wIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBDb21wb25lbnRzIG5vdyBpbXBvcnQgdGhlaXIgb3duIGBMaW5rYCBkaXJlY3RseSBmcm9tIGBuZXh0L2xpbmtgLlxuICAgKi9cbiAgcmVhZG9ubHkgTGluaz86IFJlYWN0LkNvbXBvbmVudFR5cGVcbn0+ID0gKHsgY2xhc3NOYW1lLCBDdXN0b21JY29uIH0pID0+IHtcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgeyBzdGVwTmF2IH0gPSB1c2VTdGVwTmF2KClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYWRtaW4gfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIHtzdGVwTmF2Lmxlbmd0aCA+IDAgPyAoXG4gICAgICAgIDxuYXYgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9PlxuICAgICAgICAgIDxMaW5rIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faG9tZWB9IGhyZWY9e2FkbWlufSBwcmVmZXRjaD17ZmFsc2V9IHRhYkluZGV4PXswfT5cbiAgICAgICAgICAgIDxzcGFuIHRpdGxlPXt0KCdnZW5lcmFsOmRhc2hib2FyZCcpfT5cbiAgICAgICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudCBDdXN0b21Db21wb25lbnQ9e0N1c3RvbUljb259IEZhbGxiYWNrPXs8UGF5bG9hZEljb24gLz59IC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDxzcGFuPi88L3NwYW4+XG4gICAgICAgICAge3N0ZXBOYXYubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBTdGVwTGFiZWwgPSBnZXRUcmFuc2xhdGlvbihpdGVtLmxhYmVsLCBpMThuKVxuICAgICAgICAgICAgY29uc3QgaXNMYXN0ID0gc3RlcE5hdi5sZW5ndGggPT09IGkgKyAxXG5cbiAgICAgICAgICAgIGNvbnN0IFN0ZXAgPSBpc0xhc3QgPyAoXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFzdGB9IGtleT17aX0+XG4gICAgICAgICAgICAgICAge1N0ZXBMYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17aX0+XG4gICAgICAgICAgICAgICAge2l0ZW0udXJsID8gKFxuICAgICAgICAgICAgICAgICAgPExpbmsgaHJlZj17aXRlbS51cmx9IHByZWZldGNoPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aX0+e1N0ZXBMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aX0+e1N0ZXBMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8c3Bhbj4vPC9zcGFuPlxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICByZXR1cm4gU3RlcFxuICAgICAgICAgIH0pfVxuICAgICAgICA8L25hdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ob21lYH0+XG4gICAgICAgICAgICA8c3BhbiB0aXRsZT17dCgnZ2VuZXJhbDpkYXNoYm9hcmQnKX0+XG4gICAgICAgICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnQgQ3VzdG9tQ29tcG9uZW50PXtDdXN0b21JY29ufSBGYWxsYmFjaz17PFBheWxvYWRJY29uIC8+fSAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9GcmFnbWVudD5cbiAgKVxufVxuXG5leHBvcnQgeyBTdGVwTmF2LCBTdGVwTmF2SXRlbSwgU3RlcE5hdlByb3ZpZGVyLCB1c2VTdGVwTmF2IH1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IFBheWxvYWRJY29uOiBSZWFjdC5GQzx7XG4gIGZpbGw/OiBzdHJpbmdcbn0+ID0gKHsgZmlsbDogZmlsbEZyb21Qcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGZpbGwgPSBmaWxsRnJvbVByb3BzIHx8ICd2YXIoLS10aGVtZS1lbGV2YXRpb24tMTAwMCknXG5cbiAgcmV0dXJuIChcbiAgICA8c3ZnXG4gICAgICBjbGFzc05hbWU9XCJncmFwaGljLWljb25cIlxuICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDI1IDI1XCJcbiAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTExLjg2NzMgMjEuMjMzNkw0LjQwOTIyIDE2Ljk4NDVDNC4zMTg3MSAxNi45MzA5IDQuMjU4MzcgMTYuODM1NSA0LjI1ODM3IDE2LjcyODJWMTAuMTYwOUM0LjI1ODM3IDEwLjA0NzcgNC4zODUwOCA5Ljk3NjE2IDQuNDgxNjIgMTAuMDI5OEwxMy4xNDA0IDE0Ljk2NDJDMTMuMjYxMSAxNS4wMzU4IDEzLjQxMiAxNC45NDY0IDEzLjQxMiAxNC44MDkzVjExLjYwOTFDMTMuNDEyIDExLjQ4MzkgMTMuMzQ1NiAxMS4zNjQ3IDEzLjIzMDkgMTEuMjk5MkwyLjgxNjI0IDUuMzYzNTNDMi43MjU3MyA1LjMwOTg5IDIuNjA1MDUgNS4zMDk4OSAyLjUxNDU0IDUuMzYzNTNMMS4xNTA4NSA2LjE0NDIyQzEuMDYwMzQgNi4xOTc4NiAxIDYuMjkzMjEgMSA2LjQwMDQ4VjE4LjU5OTVDMSAxOC43MDY4IDEuMDYwMzQgMTguODAyMSAxLjE1MDg1IDE4Ljg1NThMMTEuODQ5MSAyNC45NTgzQzExLjkzOTcgMjUuMDExOSAxMi4wNjAzIDI1LjAxMTkgMTIuMTUwOSAyNC45NTgzTDIxLjEzNTUgMTkuODMzMUMyMS4yNTYyIDE5Ljc2MTYgMjEuMjU2MiAxOS41OTQ4IDIxLjEzNTUgMTkuNTIzMkwxOC4zMzU3IDE3LjkyNjFDMTguMjIxMSAxNy44NjA1IDE4LjA4ODMgMTcuODYwNSAxNy45NzM3IDE3LjkyNjFMMTIuMTc1IDIxLjIzMzZDMTIuMDg0NSAyMS4yODcyIDExLjk2MzggMjEuMjg3MiAxMS44NzMzIDIxLjIzMzZIMTEuODY3M1pcIlxuICAgICAgICBmaWxsPXtmaWxsfVxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMjIuODQ5MSA2LjEzODI3TDEyLjE1MDggMC4wNDE3MjE4QzEyLjA2MDMgLTAuMDExOTEzNSAxMS45Mzk3IC0wLjAxMTkxMzUgMTEuODQ5MSAwLjA0MTcyMThMNi4xOTUyOCAzLjI2NThDNi4wNzQ2IDMuMzM3MzEgNi4wNzQ2IDMuNTA0MTggNi4xOTUyOCAzLjU3NTY5TDguOTcwOTIgNS4xNjA5MUM5LjA4NTU3IDUuMjI2NDcgOS4yMTgzMiA1LjIyNjQ3IDkuMzMyOTYgNS4xNjA5MUwxMS44NjcyIDMuNzE4NzJDMTEuOTU3OCAzLjY2NTA4IDEyLjA3ODQgMy42NjUwOCAxMi4xNjg5IDMuNzE4NzJMMTkuNjI3IDcuOTY3ODJDMTkuNzE3NSA4LjAyMTQ2IDE5Ljc3NzggOC4xMTY4MSAxOS43Nzc4IDguMjI0MDhWMTQuODIxMkMxOS43Nzc4IDE0Ljk0NjQgMTkuODQ0MiAxNS4wNjU2IDE5Ljk1ODkgMTUuMTMxMUwyMi43MzQ1IDE2LjcxMDRDMjIuODU1MiAxNi43ODE5IDIzLjAwNiAxNi42OTI1IDIzLjAwNiAxNi41NTU0VjYuNDAwNDhDMjMuMDA2IDYuMjkzMjEgMjIuOTQ1NyA2LjE5Nzg2IDIyLjg1NTIgNi4xNDQyM0wyMi44NDkxIDYuMTM4MjdaXCJcbiAgICAgICAgZmlsbD17ZmlsbH1cbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBDb250ZXh0VHlwZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCB1c2VTdGVwTmF2ID0gKCk6IENvbnRleHRUeXBlID0+IHVzZShDb250ZXh0KVxuXG5leHBvcnQgY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8Q29udGV4dFR5cGU+KHtcbiAgc2V0U3RlcE5hdjogKCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKCdTdGVwTmF2UHJvdmlkZXIgaXMgbWlzc2luZzsgYHNldFN0ZXBOYXZgIGlzIGEgbm8tb3AuJylcbiAgICB9XG4gIH0sXG4gIHN0ZXBOYXY6IFtdLFxufSlcblxuZXhwb3J0IGNvbnN0IFN0ZXBOYXZQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgW3N0ZXBOYXYsIHNldFN0ZXBOYXZdID0gdXNlU3RhdGUoW10pXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dFxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2V0U3RlcE5hdixcbiAgICAgICAgc3RlcE5hdixcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29udGV4dD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBTdGVwTmF2SXRlbSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZVN0ZXBOYXYgfSBmcm9tICcuL2NvbnRleHQuanMnXG5cbmV4cG9ydCBjb25zdCBTZXRTdGVwTmF2OiBSZWFjdC5GQzx7XG4gIG5hdjogU3RlcE5hdkl0ZW1bXVxufT4gPSAoeyBuYXYgfSkgPT4ge1xuICBjb25zdCB7IHNldFN0ZXBOYXYgfSA9IHVzZVN0ZXBOYXYoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U3RlcE5hdihuYXYpXG4gIH0sIFtzZXRTdGVwTmF2LCBuYXZdKVxuXG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIGFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGVcbiAgYnV0dG9uQXJpYUxhYmVsPzogc3RyaW5nXG4gIGhyZWY/OiBzdHJpbmdcbiAgaWQ/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIFRoaXMgcHJvcCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICogQ29tcG9uZW50cyBub3cgaW1wb3J0IHRoZWlyIG93biBgTGlua2AgZGlyZWN0bHkgZnJvbSBgbmV4dC9saW5rYC5cbiAgICovXG4gIExpbms/OiBSZWFjdC5FbGVtZW50VHlwZVxuICBvbkNsaWNrPzogKCkgPT4gdm9pZFxuICB0aXRsZTogc3RyaW5nXG4gIHRpdGxlQXM/OiBSZWFjdC5FbGVtZW50VHlwZVxufVxuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY2FyZCdcblxuZXhwb3J0IGNvbnN0IENhcmQ6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBhY3Rpb25zLCBidXR0b25BcmlhTGFiZWwsIGhyZWYsIG9uQ2xpY2ssIHRpdGxlLCB0aXRsZUFzIH0gPSBwcm9wc1xuXG4gIGNvbnN0IGNsYXNzZXMgPSBbYmFzZUNsYXNzLCBpZCwgKG9uQ2xpY2sgfHwgaHJlZikgJiYgYCR7YmFzZUNsYXNzfS0taGFzLW9uY2xpY2tgXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbignICcpXG5cbiAgY29uc3QgVGFnID0gdGl0bGVBcyA/PyAnZGl2J1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXN9IGlkPXtpZH0+XG4gICAgICA8VGFnIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGl0bGVgfT57dGl0bGV9PC9UYWc+XG4gICAgICB7YWN0aW9ucyAmJiA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PnthY3Rpb25zfTwvZGl2Pn1cbiAgICAgIHsob25DbGljayB8fCBocmVmKSAmJiAoXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPXtidXR0b25BcmlhTGFiZWx9XG4gICAgICAgICAgYnV0dG9uU3R5bGU9XCJub25lXCJcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NsaWNrYH1cbiAgICAgICAgICBlbD1cImxpbmtcIlxuICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgICAgdG89e2hyZWZ9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgeyBDaGVja2JveEZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL0NoZWNrYm94L2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VsZWN0SW5wdXQgfSBmcm9tICcuLi8uLi9maWVsZHMvU2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9ybU1vZGlmaWVkIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVNlcnZlckZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9TZXJ2ZXJGdW5jdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IERyYXdlckhlYWRlciB9IGZyb20gJy4uL0J1bGtVcGxvYWQvSGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyIH0gZnJvbSAnLi4vRHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgUG9wdXBMaXN0IH0gZnJvbSAnLi4vUG9wdXAvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2NvcHktbG9jYWxlLWRhdGEnXG5cbmNvbnN0IGRyYXdlclNsdWcgPSAnY29weS1sb2NhbGUnXG5leHBvcnQgY29uc3QgQ29weUxvY2FsZURhdGE6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICBsb2NhbGl6YXRpb24sXG4gICAgICByb3V0ZXM6IHsgYWRtaW4gfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBjb2RlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGlkLCBjb2xsZWN0aW9uU2x1ZywgZ2xvYmFsU2x1ZyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IG1vZGlmaWVkID0gdXNlRm9ybU1vZGlmaWVkKClcbiAgY29uc3QgeyB0b2dnbGVNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IGNvcHlEYXRhRnJvbUxvY2FsZSB9ID0gdXNlU2VydmVyRnVuY3Rpb25zKClcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcblxuICBjb25zdCBsb2NhbGVPcHRpb25zID1cbiAgICAobG9jYWxpemF0aW9uICYmXG4gICAgICBsb2NhbGl6YXRpb24ubG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gKHsgbGFiZWw6IGxvY2FsZS5sYWJlbCwgdmFsdWU6IGxvY2FsZS5jb2RlIH0pKSkgfHxcbiAgICBbXVxuXG4gIGNvbnN0IGxvY2FsZU9wdGlvbnNXaXRob3V0Q3VycmVudCA9IGxvY2FsZU9wdGlvbnMuZmlsdGVyKChsb2NhbGUpID0+IGxvY2FsZS52YWx1ZSAhPT0gY29kZSlcblxuICBjb25zdCBnZXRMb2NhbGVMYWJlbCA9IChjb2RlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBsb2NhbGUgPSBsb2NhbGl6YXRpb24gJiYgbG9jYWxpemF0aW9uLmxvY2FsZXMuZmluZCgobCkgPT4gbC5jb2RlID09PSBjb2RlKVxuICAgIHJldHVybiBsb2NhbGUgJiYgbG9jYWxlLmxhYmVsID8gZ2V0VHJhbnNsYXRpb24obG9jYWxlLmxhYmVsLCBpMThuKSA6IGNvZGVcbiAgfVxuXG4gIGNvbnN0IFtjb3B5aW5nLCBzZXRDb3B5aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdG9Mb2NhbGUsIHNldFRvTG9jYWxlXSA9IFJlYWN0LnVzZVN0YXRlPG51bGwgfCBzdHJpbmc+KG51bGwpXG4gIGNvbnN0IFtmcm9tTG9jYWxlLCBzZXRGcm9tTG9jYWxlXSA9IFJlYWN0LnVzZVN0YXRlPG51bGwgfCBzdHJpbmc+KGNvZGUpXG4gIGNvbnN0IFtvdmVyd3JpdGVFeGlzdGluZywgc2V0T3ZlcndyaXRlRXhpc3RpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZnJvbUxvY2FsZSAhPT0gY29kZSkge1xuICAgICAgc2V0RnJvbUxvY2FsZShjb2RlKVxuICAgIH1cbiAgfSwgW2NvZGUsIGZyb21Mb2NhbGVdKVxuXG4gIGNvbnN0IGNvcHlMb2NhbGVEYXRhID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHsgZnJvbSwgdG8gfSkgPT4ge1xuICAgICAgc2V0Q29weWluZyh0cnVlKVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjb3B5RGF0YUZyb21Mb2NhbGUoe1xuICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgIGRvY0lEOiBpZCxcbiAgICAgICAgICBmcm9tTG9jYWxlOiBmcm9tLFxuICAgICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgICAgb3ZlcnJpZGVEYXRhOiBvdmVyd3JpdGVFeGlzdGluZyxcbiAgICAgICAgICB0b0xvY2FsZTogdG8sXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2V0Q29weWluZyhmYWxzZSlcblxuICAgICAgICBzdGFydFJvdXRlVHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgIHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgICBhZG1pblJvdXRlOiBhZG1pbixcbiAgICAgICAgICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnID8gYGNvbGxlY3Rpb25zLyR7Y29sbGVjdGlvblNsdWd9LyR7aWR9YCA6IGBnbG9iYWxzLyR7Z2xvYmFsU2x1Z31gfWAsXG4gICAgICAgICAgICB9KSArIGA/bG9jYWxlPSR7dG99YCxcbiAgICAgICAgICApLFxuICAgICAgICApXG5cbiAgICAgICAgdG9nZ2xlTW9kYWwoZHJhd2VyU2x1ZylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldENvcHlpbmcoZmFsc2UpXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSB8fCAnZXJyb3I6dW5rbm93bidcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZE1lc3NhZ2UgPSBlcnJvck1lc3NhZ2Uuc3RhcnRzV2l0aCgnZXJyb3I6JylcbiAgICAgICAgICA/IHQoZXJyb3JNZXNzYWdlIGFzIGFueSlcbiAgICAgICAgICA6IGVycm9yTWVzc2FnZVxuICAgICAgICB0b2FzdC5lcnJvcih0cmFuc2xhdGVkTWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGNvcHlEYXRhRnJvbUxvY2FsZSxcbiAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgaWQsXG4gICAgICBnbG9iYWxTbHVnLFxuICAgICAgb3ZlcndyaXRlRXhpc3RpbmcsXG4gICAgICB0b2dnbGVNb2RhbCxcbiAgICAgIHJvdXRlcixcbiAgICAgIGFkbWluLFxuICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24sXG4gICAgICB0LFxuICAgIF0sXG4gIClcblxuICBpZiAoIWlkICYmICFnbG9iYWxTbHVnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgaWQ9e2Ake2Jhc2VDbGFzc31fX2J1dHRvbmB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBpZiAobW9kaWZpZWQpIHtcbiAgICAgICAgICAgIHRvYXN0LmluZm8odCgnZ2VuZXJhbDp1bnNhdmVkQ2hhbmdlcycpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2dnbGVNb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3QoJ2xvY2FsaXphdGlvbjpjb3B5VG9Mb2NhbGUnKX1cbiAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgIDxEcmF3ZXJcbiAgICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICAgIGd1dHRlcj17ZmFsc2V9XG4gICAgICAgIEhlYWRlcj17XG4gICAgICAgICAgPERyYXdlckhlYWRlclxuICAgICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgICB0b2dnbGVNb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRpdGxlPXt0KCdsb2NhbGl6YXRpb246Y29weVRvTG9jYWxlJyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICBzbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc3ViLWhlYWRlcmB9PlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge2Zyb21Mb2NhbGUgJiYgdG9Mb2NhbGUgPyAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAge3QoJ2xvY2FsaXphdGlvbjpjb3B5RnJvbVRvJywge1xuICAgICAgICAgICAgICAgICAgZnJvbTogZ2V0TG9jYWxlTGFiZWwoZnJvbUxvY2FsZSksXG4gICAgICAgICAgICAgICAgICB0bzogZ2V0TG9jYWxlTGFiZWwodG9Mb2NhbGUpLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIHQoJ2xvY2FsaXphdGlvbjpzZWxlY3RMb2NhbGVUb0NvcHknKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIGRpc2FibGVkPXshZnJvbUxvY2FsZSB8fCAhdG9Mb2NhbGV9XG4gICAgICAgICAgICBpY29uUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZyb21Mb2NhbGUgPT09IHRvTG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgdG9hc3QuZXJyb3IodCgnbG9jYWxpemF0aW9uOmNhbm5vdENvcHlTYW1lTG9jYWxlJykpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFjb3B5aW5nKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY29weUxvY2FsZURhdGEoe1xuICAgICAgICAgICAgICAgICAgZnJvbTogZnJvbUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgIHRvOiB0b0xvY2FsZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NvcHlpbmcgPyB0KCdnZW5lcmFsOmNvcHlpbmcnKSArICcuLi4nIDogdCgnZ2VuZXJhbDpjb3B5Jyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250ZW50YH0+XG4gICAgICAgICAgPFNlbGVjdElucHV0XG4gICAgICAgICAgICBsYWJlbD17dCgnbG9jYWxpemF0aW9uOmNvcHlGcm9tJyl9XG4gICAgICAgICAgICBuYW1lPXsnZnJvbUxvY2FsZSd9XG4gICAgICAgICAgICBvbkNoYW5nZT17KHNlbGVjdGVkT3B0aW9uOiB7IHZhbHVlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2V0RnJvbUxvY2FsZShzZWxlY3RlZE9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9wdGlvbnM9e2xvY2FsZU9wdGlvbnN9XG4gICAgICAgICAgICBwYXRoPVwiZnJvbUxvY2FsZVwiXG4gICAgICAgICAgICByZWFkT25seVxuICAgICAgICAgICAgdmFsdWU9e2Zyb21Mb2NhbGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2VsZWN0SW5wdXRcbiAgICAgICAgICAgIGxhYmVsPXt0KCdsb2NhbGl6YXRpb246Y29weVRvJyl9XG4gICAgICAgICAgICBuYW1lPVwidG9Mb2NhbGVcIlxuICAgICAgICAgICAgb25DaGFuZ2U9eyhzZWxlY3RlZE9wdGlvbjogeyB2YWx1ZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uPy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHNldFRvTG9jYWxlKHNlbGVjdGVkT3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb3B0aW9ucz17bG9jYWxlT3B0aW9uc1dpdGhvdXRDdXJyZW50fVxuICAgICAgICAgICAgcGF0aD1cInRvTG9jYWxlXCJcbiAgICAgICAgICAgIHZhbHVlPXt0b0xvY2FsZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxDaGVja2JveEZpZWxkXG4gICAgICAgICAgICBjaGVja2VkPXtvdmVyd3JpdGVFeGlzdGluZ31cbiAgICAgICAgICAgIGZpZWxkPXt7XG4gICAgICAgICAgICAgIG5hbWU6ICdvdmVyd3JpdGVFeGlzdGluZycsXG4gICAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOm92ZXJ3cml0ZUV4aXN0aW5nRGF0YScpLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRPdmVyd3JpdGVFeGlzdGluZyghb3ZlcndyaXRlRXhpc3RpbmcpfVxuICAgICAgICAgICAgcGF0aD17J292ZXJ3cml0ZUV4aXN0aW5nJ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRHJhd2VyPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBWaWV3VHlwZXMsIFdoZXJlIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IHVzZVJvdXRlciwgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwsIG1lcmdlTGlzdFNlYXJjaEFuZFdoZXJlIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHsgQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9DaGVja2JveC9JbnB1dC5qcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVDYWNoZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VsZWN0QWxsU3RhdHVzLCB1c2VTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcGkuanMnXG5pbXBvcnQgeyBwYXJzZVNlYXJjaFBhcmFtcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9wYXJzZVNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCB7IHNob3VsZFBlcm1hbmVudGx5RGVsZXRlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Nob3VsZFBlcm1hbmVudGx5RGVsZXRlLmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcbmltcG9ydCB7IExpc3RTZWxlY3Rpb25CdXR0b24gfSBmcm9tICcuLi9MaXN0U2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tICcuLi9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgY29sbGVjdGlvbjogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICAvKipcbiAgICogV2hldGhlciB0aGUgdXNlciBoYXMgcGVybWlzc2lvbiB0byBwZXJtYW5lbnRseSBkZWxldGUgZG9jdW1lbnRzLlxuICAgKiBJZiBwcm92aWRlZCwgdXNlcyB0aGlzIGluc3RlYWQgb2YgcmVhZGluZyBmcm9tIGF1dGggY29udGV4dC5cbiAgICovXG4gIGhhc0RlbGV0ZVBlcm1pc3Npb24/OiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHRyYXNoIChzb2Z0IGRlbGV0ZSkgZG9jdW1lbnRzLlxuICAgKiBJZiBwcm92aWRlZCwgdXNlcyB0aGlzIGluc3RlYWQgb2YgcmVhZGluZyBmcm9tIGF1dGggY29udGV4dC5cbiAgICovXG4gIGhhc1RyYXNoUGVybWlzc2lvbj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFdoZW4gbXVsdGlwbGUgRGVsZXRlTWFueSBjb21wb25lbnRzIGFyZSByZW5kZXJlZCBvbiB0aGUgcGFnZSwgdGhpcyB3aWxsIGRpZmZlcmVudGlhdGUgdGhlbS5cbiAgICovXG4gIG1vZGFsUHJlZml4Pzogc3RyaW5nXG4gIC8qKlxuICAgKiBXaGVuIG11bHRpcGxlIFB1Ymxpc2hNYW55IGNvbXBvbmVudHMgYXJlIHJlbmRlcmVkIG9uIHRoZSBwYWdlLCB0aGlzIHdpbGwgZGlmZmVyZW50aWF0ZSB0aGVtLlxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmdcbiAgdmlld1R5cGU/OiBWaWV3VHlwZXNcbn1cblxuZXhwb3J0IGNvbnN0IERlbGV0ZU1hbnk6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHZpZXdUeXBlIH0gPSBwcm9wc1xuICBjb25zdCB7XG4gICAgY29sbGVjdGlvbjogeyBzbHVnLCB0cmFzaCB9ID0ge30sXG4gICAgaGFzRGVsZXRlUGVybWlzc2lvbjogaGFzRGVsZXRlUGVybWlzc2lvbkZyb21Qcm9wcyxcbiAgICBoYXNUcmFzaFBlcm1pc3Npb246IGhhc1RyYXNoUGVybWlzc2lvbkZyb21Qcm9wcyxcbiAgICBtb2RhbFByZWZpeCxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgY291bnQsIHNlbGVjdEFsbCwgc2VsZWN0ZWRJRHMsIHRvZ2dsZUFsbCB9ID0gdXNlU2VsZWN0aW9uKClcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKClcbiAgY29uc3QgeyBjbGVhclJvdXRlQ2FjaGUgfSA9IHVzZVJvdXRlQ2FjaGUoKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25QZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zPy5jb2xsZWN0aW9ucz8uW3NsdWddXG5cbiAgY29uc3QgaGFzRGVsZXRlUGVybWlzc2lvbiA9XG4gICAgaGFzRGVsZXRlUGVybWlzc2lvbkZyb21Qcm9wcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGhhc0RlbGV0ZVBlcm1pc3Npb25Gcm9tUHJvcHNcbiAgICAgIDogQm9vbGVhbihjb2xsZWN0aW9uUGVybWlzc2lvbnM/LmRlbGV0ZSlcbiAgY29uc3QgaGFzVHJhc2hQZXJtaXNzaW9uID1cbiAgICBoYXNUcmFzaFBlcm1pc3Npb25Gcm9tUHJvcHMgIT09IHVuZGVmaW5lZCA/IGhhc1RyYXNoUGVybWlzc2lvbkZyb21Qcm9wcyA6IGhhc0RlbGV0ZVBlcm1pc3Npb25cblxuICBjb25zdCBzZWxlY3RpbmdBbGwgPSBzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5BbGxBdmFpbGFibGVcblxuICBjb25zdCBpZHMgPSBzZWxlY3RpbmdBbGwgPyBbXSA6IHNlbGVjdGVkSURzXG5cbiAgY29uc3QgaXNUcmFzaFZpZXcgPSB2aWV3VHlwZSA9PT0gJ3RyYXNoJ1xuICBjb25zdCBjYW5TaG93RGVsZXRlQnV0dG9uID0gaXNUcmFzaFZpZXdcbiAgICA/IGhhc0RlbGV0ZVBlcm1pc3Npb25cbiAgICA6IGhhc0RlbGV0ZVBlcm1pc3Npb24gfHwgaGFzVHJhc2hQZXJtaXNzaW9uXG5cbiAgaWYgKHNlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLk5vbmUgfHwgIWNhblNob3dEZWxldGVCdXR0b24pIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgYmFzZVdoZXJlID0gcGFyc2VTZWFyY2hQYXJhbXMoc2VhcmNoUGFyYW1zKT8ud2hlcmUgYXMgV2hlcmVcblxuICBjb25zdCBmaW5hbFdoZXJlID1cbiAgICB2aWV3VHlwZSA9PT0gJ3RyYXNoJ1xuICAgICAgPyB7XG4gICAgICAgICAgYW5kOiBbXG4gICAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShiYXNlV2hlcmU/LmFuZCkgPyBiYXNlV2hlcmUuYW5kIDogYmFzZVdoZXJlID8gW2Jhc2VXaGVyZV0gOiBbXSksXG4gICAgICAgICAgICB7IGRlbGV0ZWRBdDogeyBleGlzdHM6IHRydWUgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH1cbiAgICAgIDogYmFzZVdoZXJlXG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8RGVsZXRlTWFueV92NFxuICAgICAgICBhZnRlckRlbGV0ZT17KCkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUFsbCgpXG5cbiAgICAgICAgICByb3V0ZXIucmVwbGFjZShcbiAgICAgICAgICAgIHFzLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnBhcnNlU2VhcmNoUGFyYW1zKHNlYXJjaFBhcmFtcyksXG4gICAgICAgICAgICAgICAgcGFnZTogc2VsZWN0QWxsID8gJzEnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGNsZWFyUm91dGVDYWNoZSgpXG4gICAgICAgIH19XG4gICAgICAgIGhhc0RlbGV0ZVBlcm1pc3Npb249e2hhc0RlbGV0ZVBlcm1pc3Npb259XG4gICAgICAgIGhhc1RyYXNoUGVybWlzc2lvbj17aGFzVHJhc2hQZXJtaXNzaW9ufVxuICAgICAgICBtb2RhbFByZWZpeD17bW9kYWxQcmVmaXh9XG4gICAgICAgIHNlYXJjaD17cGFyc2VTZWFyY2hQYXJhbXMoc2VhcmNoUGFyYW1zKT8uc2VhcmNoIGFzIHN0cmluZ31cbiAgICAgICAgc2VsZWN0aW9ucz17e1xuICAgICAgICAgIFtzbHVnXToge1xuICAgICAgICAgICAgYWxsOiBzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5BbGxBdmFpbGFibGUsXG4gICAgICAgICAgICBpZHMsXG4gICAgICAgICAgICB0b3RhbENvdW50OiBzZWxlY3RpbmdBbGwgPyBjb3VudCA6IGlkcy5sZW5ndGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfX1cbiAgICAgICAgdHJhc2g9e3RyYXNofVxuICAgICAgICB2aWV3VHlwZT17dmlld1R5cGV9XG4gICAgICAgIHdoZXJlPXtmaW5hbFdoZXJlfVxuICAgICAgLz5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG5cbnR5cGUgQWZ0ZXJEZWxldGVSZXN1bHQgPSB7XG4gIFtyZWxhdGlvblRvOiBzdHJpbmddOiB7XG4gICAgZGVsZXRlZENvdW50OiBudW1iZXJcbiAgICBlcnJvcnM6IHVua25vd25bXVxuICAgIGlkczogKG51bWJlciB8IHN0cmluZylbXVxuICAgIHRvdGFsQ291bnQ6IG51bWJlclxuICB9XG59XG50eXBlIERlbGV0ZU1hbnlfdjRQcm9wcyA9IHtcbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBkZWxldGUgcmVxdWVzdCBpcyBjb21wbGV0ZWQuXG4gICAqL1xuICBhZnRlckRlbGV0ZT86IChyZXN1bHQ6IEFmdGVyRGVsZXRlUmVzdWx0KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHBlcm1hbmVudGx5IGRlbGV0ZSBkb2N1bWVudHMuXG4gICAqIFdoZW4gZmFsc2UsIHRoZSBcImRlbGV0ZSBwZXJtYW5lbnRseVwiIGNoZWNrYm94IHdpbGwgYmUgaGlkZGVuLlxuICAgKi9cbiAgaGFzRGVsZXRlUGVybWlzc2lvbj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdHJhc2ggKHNvZnQgZGVsZXRlKSBkb2N1bWVudHMuXG4gICAqIFdoZW4gZmFsc2UgYW5kIGhhc0RlbGV0ZVBlcm1pc3Npb24gaXMgdHJ1ZSwgb25seSBwZXJtYW5lbnQgZGVsZXRlIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIGhhc1RyYXNoUGVybWlzc2lvbj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFdoZW4gbXVsdGlwbGUgRGVsZXRlTWFueSBjb21wb25lbnRzIGFyZSByZW5kZXJlZCBvbiB0aGUgcGFnZSwgdGhpcyB3aWxsIGRpZmZlcmVudGlhdGUgdGhlbS5cbiAgICovXG4gIG1vZGFsUHJlZml4Pzogc3RyaW5nXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHBhc3MgYSBzZWFyY2ggc3RyaW5nIHRvIGZpbHRlciB0aGUgZG9jdW1lbnRzIHRvIGJlIGRlbGV0ZWQuXG4gICAqXG4gICAqIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwYXNzZWQgYXMgYSBwcm9wIHNvIG1vZGFscyBjb3VsZCBwYXNzIGluIHRoZWlyIG93blxuICAgKiBzZWFyY2ggc3RyaW5nIHRoYXQgbWF5IG5vdCBiZSBzdG9yZWQgaW4gdGhlIFVSTC5cbiAgICovXG4gIHNlYXJjaD86IHN0cmluZ1xuICAvKipcbiAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlbGF0aW9uVG8gYXMgdGhlIGtleSBhbmQgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAtIGFsbDogYm9vbGVhblxuICAgKiAtIHRvdGFsQ291bnQ6IG51bWJlclxuICAgKiAtIGlkczogKHN0cmluZyB8IG51bWJlcilbXVxuICAgKi9cbiAgc2VsZWN0aW9uczoge1xuICAgIFtyZWxhdGlvblRvOiBzdHJpbmddOiB7XG4gICAgICBhbGw/OiBib29sZWFuXG4gICAgICBpZHM/OiAobnVtYmVyIHwgc3RyaW5nKVtdXG4gICAgICB0b3RhbENvdW50PzogbnVtYmVyXG4gICAgfVxuICB9XG4gIHRyYXNoPzogYm9vbGVhblxuICB2aWV3VHlwZT86IFZpZXdUeXBlc1xuICAvKipcbiAgICogT3B0aW9uYWxseSBwYXNzIGEgd2hlcmUgY2xhdXNlIHRvIGZpbHRlciB0aGUgZG9jdW1lbnRzIHRvIGJlIGRlbGV0ZWQuXG4gICAqIFRoaXMgd2lsbCBiZSBpZ25vcmVkIGlmIG11bHRpcGxlIHJlbGF0aW9ucyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwYXNzZWQgYXMgYSBwcm9wIHNvIG1vZGFscyBjb3VsZCBwYXNzIGluIHRoZWlyIG93blxuICAgKiB3aGVyZSBjbGF1c2UgdGhhdCBtYXkgbm90IGJlIHN0b3JlZCBpbiB0aGUgVVJMLlxuICAgKi9cbiAgd2hlcmU/OiBXaGVyZVxufVxuXG4vKipcbiAqIEhhbmRsZXMgcG9seW1vcnBoaWMgZG9jdW1lbnQgZGVsZXRlIG9wZXJhdGlvbnMuXG4gKlxuICogSWYgeW91IGFyZSBkZWxldGluZyBtb25vbW9ycGhpYyBkb2N1bWVudHMsIHNoYXBlIHlvdXIgYHNlbGVjdGlvbnNgIHRvIG1hdGNoIHRoZSBwb2x5bW9ycGhpYyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWxldGVNYW55X3Y0KHtcbiAgYWZ0ZXJEZWxldGUsXG4gIGhhc0RlbGV0ZVBlcm1pc3Npb24gPSBmYWxzZSxcbiAgaGFzVHJhc2hQZXJtaXNzaW9uID0gZmFsc2UsXG4gIG1vZGFsUHJlZml4LFxuICBzZWFyY2gsXG4gIHNlbGVjdGlvbnMsXG4gIHRyYXNoLFxuICB2aWV3VHlwZSxcbiAgd2hlcmUsXG59OiBEZWxldGVNYW55X3Y0UHJvcHMpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3Qge1xuICAgIGNvbmZpZzoge1xuICAgICAgY29sbGVjdGlvbnMsXG4gICAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IFtkZWxldGVQZXJtYW5lbnRseSwgc2V0RGVsZXRlUGVybWFuZW50bHldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGNvbmZpcm1NYW55RGVsZXRlRHJhd2VyU2x1ZyA9IGAke21vZGFsUHJlZml4ID8gYCR7bW9kYWxQcmVmaXh9LWAgOiAnJ31jb25maXJtLWRlbGV0ZS1tYW55LWRvY3NgXG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlbGV0aW5nT25lQ29sbGVjdGlvbiA9IE9iamVjdC5rZXlzKHNlbGVjdGlvbnMpLmxlbmd0aCA9PT0gMVxuICAgIGNvbnN0IHJlc3VsdDogQWZ0ZXJEZWxldGVSZXN1bHQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBbcmVsYXRpb25UbywgeyBhbGwsIGlkcyA9IFtdIH1dIG9mIE9iamVjdC5lbnRyaWVzKHNlbGVjdGlvbnMpKSB7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gY29sbGVjdGlvbnMuZmluZCgoeyBzbHVnIH0pID0+IHNsdWcgPT09IHJlbGF0aW9uVG8pXG5cbiAgICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnKSB7XG4gICAgICAgIGxldCB3aGVyZUNvbnN0cmFpbnQ6IFdoZXJlXG5cbiAgICAgICAgaWYgKGFsbCkge1xuICAgICAgICAgIC8vIHNlbGVjdGluZyBhbGwgZG9jdW1lbnRzIHdpdGggb3B0aW9uYWwgd2hlcmUgZmlsdGVyXG4gICAgICAgICAgaWYgKGRlbGV0aW5nT25lQ29sbGVjdGlvbiAmJiB3aGVyZSkge1xuICAgICAgICAgICAgd2hlcmVDb25zdHJhaW50ID1cbiAgICAgICAgICAgICAgdmlld1R5cGUgPT09ICd0cmFzaCdcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgYW5kOiBbXG4gICAgICAgICAgICAgICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkod2hlcmUuYW5kKSA/IHdoZXJlLmFuZCA6IFt3aGVyZV0pLFxuICAgICAgICAgICAgICAgICAgICAgIHsgZGVsZXRlZEF0OiB7IGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB3aGVyZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aGVyZUNvbnN0cmFpbnQgPVxuICAgICAgICAgICAgICB2aWV3VHlwZSA9PT0gJ3RyYXNoJ1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBhbmQ6IFt7IGlkOiB7IG5vdF9lcXVhbHM6ICcnIH0gfSwgeyBkZWxldGVkQXQ6IHsgZXhpc3RzOiB0cnVlIH0gfV0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB7IG5vdF9lcXVhbHM6ICcnIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHNlbGVjdGluZyBzcGVjaWZpYyBkb2N1bWVudHNcbiAgICAgICAgICB3aGVyZUNvbnN0cmFpbnQgPSB7XG4gICAgICAgICAgICBhbmQ6IFtcbiAgICAgICAgICAgICAgeyBpZDogeyBpbjogaWRzIH0gfSxcbiAgICAgICAgICAgICAgLi4uKHZpZXdUeXBlID09PSAndHJhc2gnID8gW3sgZGVsZXRlZEF0OiB7IGV4aXN0czogdHJ1ZSB9IH1dIDogW10pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmwgPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgICBwYXRoOiBgLyR7cmVsYXRpb25Ub30ke3FzLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgc2VsZWN0OiB7fSxcbiAgICAgICAgICAgICAgd2hlcmU6IG1lcmdlTGlzdFNlYXJjaEFuZFdoZXJlKHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICAgICAgICB3aGVyZTogd2hlcmVDb25zdHJhaW50LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLi4uKHZpZXdUeXBlID09PSAndHJhc2gnID8geyB0cmFzaDogdHJ1ZSB9IDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSxcbiAgICAgICAgICApfWAsXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcGVybWFuZW50bHlEZWxldGUgPSBzaG91bGRQZXJtYW5lbnRseURlbGV0ZSh7XG4gICAgICAgICAgZGVsZXRlUGVybWFuZW50bHksXG4gICAgICAgICAgaGFzRGVsZXRlUGVybWlzc2lvbixcbiAgICAgICAgICBoYXNUcmFzaFBlcm1pc3Npb246IEJvb2xlYW4oY29sbGVjdGlvbkNvbmZpZy50cmFzaCkgJiYgaGFzVHJhc2hQZXJtaXNzaW9uLFxuICAgICAgICAgIGlzVHJhc2hWaWV3OiB2aWV3VHlwZSA9PT0gJ3RyYXNoJyxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBkZWxldGVNYW55UmVzcG9uc2UgPSBwZXJtYW5lbnRseURlbGV0ZVxuICAgICAgICAgID8gYXdhaXQgcmVxdWVzdHMuZGVsZXRlKHVybCwge1xuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBhd2FpdCByZXF1ZXN0cy5wYXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBwbHVyYWwsIHNpbmd1bGFyIH0gPSBjb2xsZWN0aW9uQ29uZmlnLmxhYmVsc1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBkZWxldGVNYW55UmVzcG9uc2UuanNvbigpXG5cbiAgICAgICAgICBjb25zdCBkZWxldGVkRG9jcyA9IGpzb24/LmRvY3MubGVuZ3RoIHx8IDBcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTGFiZWwgPSBkZWxldGVkRG9jcyA+IDEgPyBwbHVyYWwgOiBzaW5ndWxhclxuXG4gICAgICAgICAgaWYgKGRlbGV0ZU1hbnlSZXNwb25zZS5zdGF0dXMgPCA0MDAgfHwgZGVsZXRlZERvY3MgPiAwKSB7XG4gICAgICAgICAgICBsZXQgc3VjY2Vzc0tleTpcbiAgICAgICAgICAgICAgfCAnZ2VuZXJhbDpkZWxldGVkQ291bnRTdWNjZXNzZnVsbHknXG4gICAgICAgICAgICAgIHwgJ2dlbmVyYWw6cGVybWFuZW50bHlEZWxldGVkQ291bnRTdWNjZXNzZnVsbHknXG4gICAgICAgICAgICAgIHwgJ2dlbmVyYWw6dHJhc2hlZENvdW50U3VjY2Vzc2Z1bGx5J1xuXG4gICAgICAgICAgICBpZiAoIXBlcm1hbmVudGx5RGVsZXRlKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NLZXkgPSAnZ2VuZXJhbDp0cmFzaGVkQ291bnRTdWNjZXNzZnVsbHknXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZpZXdUeXBlID09PSAndHJhc2gnIHx8IChoYXNEZWxldGVQZXJtaXNzaW9uICYmIGRlbGV0ZVBlcm1hbmVudGx5KSkge1xuICAgICAgICAgICAgICBzdWNjZXNzS2V5ID0gJ2dlbmVyYWw6cGVybWFuZW50bHlEZWxldGVkQ291bnRTdWNjZXNzZnVsbHknXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWNjZXNzS2V5ID0gJ2dlbmVyYWw6ZGVsZXRlZENvdW50U3VjY2Vzc2Z1bGx5J1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICB0KHN1Y2Nlc3NLZXksIHtcbiAgICAgICAgICAgICAgICBjb3VudDogZGVsZXRlZERvY3MsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHN1Y2Nlc3NMYWJlbCwgaTE4biksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChqc29uPy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdG9hc3QuZXJyb3IoanNvbi5tZXNzYWdlLCB7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBqc29uLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlKS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W3JlbGF0aW9uVG9dID0ge1xuICAgICAgICAgICAgZGVsZXRlZENvdW50OiBkZWxldGVkRG9jcyxcbiAgICAgICAgICAgIGVycm9yczoganNvbj8uZXJyb3JzIHx8IG51bGwsXG4gICAgICAgICAgICBpZHM6IGpzb24/LmRvY3MubWFwKChkb2MpID0+IGRvYy5pZCkgfHwgW10sXG4gICAgICAgICAgICB0b3RhbENvdW50OiBqc29uLnRvdGFsRG9jcyxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGVsZXRlTWFueVJlc3BvbnNlLnN0YXR1cyA+IDQwMCAmJiBqc29uPy5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjp1bmtub3duJykpXG4gICAgICAgICAgICByZXN1bHRbcmVsYXRpb25Ub10uZXJyb3JzID0gW3QoJ2Vycm9yOnVua25vd24nKV1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6dW5rbm93bicpKVxuICAgICAgICAgIHJlc3VsdFtyZWxhdGlvblRvXSA9IHtcbiAgICAgICAgICAgIGRlbGV0ZWRDb3VudDogMCxcbiAgICAgICAgICAgIGVycm9yczogW19lcnJdLFxuICAgICAgICAgICAgaWRzOiBbXSxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFmdGVyRGVsZXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhZnRlckRlbGV0ZShyZXN1bHQpXG4gICAgfVxuICB9LCBbXG4gICAgc2VsZWN0aW9ucyxcbiAgICBhZnRlckRlbGV0ZSxcbiAgICBjb2xsZWN0aW9ucyxcbiAgICBkZWxldGVQZXJtYW5lbnRseSxcbiAgICBoYXNEZWxldGVQZXJtaXNzaW9uLFxuICAgIGhhc1RyYXNoUGVybWlzc2lvbixcbiAgICBsb2NhbGUsXG4gICAgc2VhcmNoLFxuICAgIGFwaSxcbiAgICBpMThuLFxuICAgIHZpZXdUeXBlLFxuICAgIHdoZXJlLFxuICAgIHQsXG4gIF0pXG5cbiAgY29uc3QgeyBsYWJlbDogbGFiZWxTdHJpbmcsIGxhYmVsQ291bnQgfSA9IE9iamVjdC5lbnRyaWVzKHNlbGVjdGlvbnMpLnJlZHVjZShcbiAgICAoYWNjLCBba2V5LCB2YWx1ZV0sIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IGNvbGxlY3Rpb25zLmZpbmQoKHsgc2x1ZyB9KSA9PiBzbHVnID09PSBrZXkpXG4gICAgICBpZiAoY29sbGVjdGlvbkNvbmZpZykge1xuICAgICAgICBjb25zdCBsYWJlbENvdW50ID0gYWNjLmxhYmVsQ291bnQgPT09IHVuZGVmaW5lZCA/IHZhbHVlLnRvdGFsQ291bnQgOiBhY2MubGFiZWxDb3VudFxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uTGFiZWwgPSBgJHthY2MubGFiZWxDb3VudCAhPT0gdW5kZWZpbmVkID8gYCR7dmFsdWUudG90YWxDb3VudH0gYCA6ICcnfSR7Z2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgdmFsdWUudG90YWxDb3VudCA+IDEgPyBjb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5wbHVyYWwgOiBjb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5zaW5ndWxhcixcbiAgICAgICAgICBpMThuLFxuICAgICAgICApfWBcblxuICAgICAgICBsZXQgbmV3TGFiZWxcblxuICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEgJiYgaW5kZXggIT09IDApIHtcbiAgICAgICAgICBuZXdMYWJlbCA9IGAke2FjYy5sYWJlbH0gYW5kICR7Y29sbGVjdGlvbkxhYmVsfWBcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICBuZXdMYWJlbCA9IGAke2FjYy5sYWJlbH0sICR7Y29sbGVjdGlvbkxhYmVsfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYWJlbCA9IGNvbGxlY3Rpb25MYWJlbFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogbmV3TGFiZWwsXG4gICAgICAgICAgbGFiZWxDb3VudCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGFiZWxDb3VudDogdW5kZWZpbmVkLFxuICAgIH0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxMaXN0U2VsZWN0aW9uQnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6ZGVsZXRlJyl9XG4gICAgICAgIGNsYXNzTmFtZT1cImRlbGV0ZS1kb2N1bWVudHNfX3RvZ2dsZVwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBvcGVuTW9kYWwoY29uZmlybU1hbnlEZWxldGVEcmF3ZXJTbHVnKVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dCgnZ2VuZXJhbDpkZWxldGUnKX1cbiAgICAgIDwvTGlzdFNlbGVjdGlvbkJ1dHRvbj5cbiAgICAgIDxDb25maXJtYXRpb25Nb2RhbFxuICAgICAgICBib2R5PXtcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAge3RyYXNoICYmIGhhc1RyYXNoUGVybWlzc2lvbiA/IChcbiAgICAgICAgICAgICAgICB2aWV3VHlwZSA9PT0gJ3RyYXNoJyA/IChcbiAgICAgICAgICAgICAgICAgIDxUcmFuc2xhdGlvblxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cz17e1xuICAgICAgICAgICAgICAgICAgICAgICcwJzogKHsgY2hpbGRyZW4gfSkgPT4gPHN0cm9uZz57Y2hpbGRyZW59PC9zdHJvbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICcxJzogKHsgY2hpbGRyZW4gfSkgPT4gPHN0cm9uZz57Y2hpbGRyZW59PC9zdHJvbmc+LFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBpMThuS2V5PVwiZ2VuZXJhbDphYm91dFRvUGVybWFuZW50bHlEZWxldGVUcmFzaFwiXG4gICAgICAgICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcz17e1xuICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBsYWJlbENvdW50ID8/IDAsXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgdCgnZ2VuZXJhbDphYm91dFRvVHJhc2hDb3VudCcsIHsgY291bnQ6IGxhYmVsQ291bnQsIGxhYmVsOiBsYWJlbFN0cmluZyB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICB0KCdnZW5lcmFsOmFib3V0VG9EZWxldGVDb3VudCcsIHsgY291bnQ6IGxhYmVsQ291bnQsIGxhYmVsOiBsYWJlbFN0cmluZyB9KVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAge3RyYXNoICYmIGhhc1RyYXNoUGVybWlzc2lvbiAmJiBoYXNEZWxldGVQZXJtaXNzaW9uICYmIHZpZXdUeXBlICE9PSAndHJhc2gnICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZWxldGUtZG9jdW1lbnRzX19jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxDaGVja2JveElucHV0XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtkZWxldGVQZXJtYW5lbnRseX1cbiAgICAgICAgICAgICAgICAgIGlkPVwiZGVsZXRlLWZvcmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ2dlbmVyYWw6ZGVsZXRlUGVybWFuZW50bHknKX1cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZWxldGUtZm9yZXZlclwiXG4gICAgICAgICAgICAgICAgICBvblRvZ2dsZT17KGUpID0+IHNldERlbGV0ZVBlcm1hbmVudGx5KGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICB9XG4gICAgICAgIGNvbmZpcm1pbmdMYWJlbD17dCgnZ2VuZXJhbDpkZWxldGluZycpfVxuICAgICAgICBoZWFkaW5nPXt0KCdnZW5lcmFsOmNvbmZpcm1EZWxldGlvbicpfVxuICAgICAgICBtb2RhbFNsdWc9e2NvbmZpcm1NYW55RGVsZXRlRHJhd2VyU2x1Z31cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVEZWxldGV9XG4gICAgICAvPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBXaGVyZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2UsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgcGFyc2VTZWFyY2hQYXJhbXMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvcGFyc2VTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxpc3RRdWVyeSB9IGZyb20gJy4uL0xpc3RRdWVyeS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uL0xvY2FsZS9pbmRleC5qcydcblxuZXhwb3J0IGVudW0gU2VsZWN0QWxsU3RhdHVzIHtcbiAgQWxsQXZhaWxhYmxlID0gJ2FsbEF2YWlsYWJsZScsXG4gIEFsbEluUGFnZSA9ICdhbGxJblBhZ2UnLFxuICBOb25lID0gJ25vbmUnLFxuICBTb21lID0gJ3NvbWUnLFxufVxuXG50eXBlIFNlbGVjdGlvbkNvbnRleHQgPSB7XG4gIGNvdW50OiBudW1iZXJcbiAgZGlzYWJsZUJ1bGtEZWxldGU/OiBib29sZWFuXG4gIGRpc2FibGVCdWxrRWRpdD86IGJvb2xlYW5cbiAgZ2V0UXVlcnlQYXJhbXM6IChhZGRpdGlvbmFsUGFyYW1zPzogV2hlcmUpID0+IHN0cmluZ1xuICBnZXRTZWxlY3RlZElkczogKCkgPT4gKG51bWJlciB8IHN0cmluZylbXVxuICBzZWxlY3RBbGw6IFNlbGVjdEFsbFN0YXR1c1xuICBzZWxlY3RlZDogTWFwPG51bWJlciB8IHN0cmluZywgYm9vbGVhbj5cbiAgc2VsZWN0ZWRJRHM6IChudW1iZXIgfCBzdHJpbmcpW11cbiAgc2V0U2VsZWN0aW9uOiAoaWQ6IG51bWJlciB8IHN0cmluZykgPT4gdm9pZFxuICAvKipcbiAgICogU2VsZWN0cyBhbGwgcm93cyBvbiB0aGUgY3VycmVudCBwYWdlIHdpdGhpbiB0aGUgY3VycmVudCBxdWVyeS5cbiAgICogSWYgYGFsbEF2YWlsYWJsZWAgaXMgdHJ1ZSwgZG9lcyBub3Qgc2VsZWN0IHNwZWNpZmljIElEcyBzbyB0aGF0IHRoZSBxdWVyeSBpdHNlbGYgYWZmZWN0cyBhbGwgcm93cyBhY3Jvc3MgYWxsIHBhZ2VzLlxuICAgKi9cbiAgdG9nZ2xlQWxsOiAoYWxsQXZhaWxhYmxlPzogYm9vbGVhbikgPT4gdm9pZFxuICB0b3RhbERvY3M6IG51bWJlclxufVxuXG5jb25zdCBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGNvdW50OiB1bmRlZmluZWQsXG4gIGdldFF1ZXJ5UGFyYW1zOiAoYWRkaXRpb25hbFBhcmFtcz86IFdoZXJlKSA9PiAnJyxcbiAgZ2V0U2VsZWN0ZWRJZHM6ICgpID0+IFtdLFxuICBzZWxlY3RBbGw6IHVuZGVmaW5lZCxcbiAgc2VsZWN0ZWQ6IG5ldyBNYXAoKSxcbiAgc2VsZWN0ZWRJRHM6IFtdLFxuICBzZXRTZWxlY3Rpb246IChpZDogbnVtYmVyIHwgc3RyaW5nKSA9PiB7fSxcbiAgdG9nZ2xlQWxsOiAodG9nZ2xlQWxsOiBib29sZWFuKSA9PiB7fSxcbiAgdG90YWxEb2NzOiB1bmRlZmluZWQsXG59IHNhdGlzZmllcyBTZWxlY3Rpb25Db250ZXh0KVxuXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHJlYWRvbmx5IGRvY3M6IGFueVtdXG4gIHJlYWRvbmx5IHRvdGFsRG9jczogbnVtYmVyXG59XG5cbmNvbnN0IHJlZHVjZUFjdGl2ZVNlbGVjdGlvbnMgPSAoc2VsZWN0ZWQ6IE1hcDxudW1iZXIgfCBzdHJpbmcsIGJvb2xlYW4+KTogKG51bWJlciB8IHN0cmluZylbXSA9PiB7XG4gIGNvbnN0IGlkcyA9IFtdXG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc2VsZWN0ZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlkcy5wdXNoKGtleSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaWRzXG59XG5cbmV4cG9ydCBjb25zdCBTZWxlY3Rpb25Qcm92aWRlcjogUmVhY3QuRkM8UHJvcHM+ID0gKHsgY2hpbGRyZW4sIGRvY3MgPSBbXSwgdG90YWxEb2NzIH0pID0+IHtcbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7fSBhcyBTZWxlY3Rpb25Db250ZXh0KVxuICBjb25zdCB7IHVzZXIgfSA9IHVzZUF1dGgoKVxuXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gdXNlU3RhdGU8U2VsZWN0aW9uQ29udGV4dFsnc2VsZWN0ZWQnXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJvd3MgPSBuZXcgTWFwKClcblxuICAgIGRvY3MuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICByb3dzLnNldChpZCwgZmFsc2UpXG4gICAgfSlcblxuICAgIHJldHVybiByb3dzXG4gIH0pXG5cbiAgY29uc3QgW3NlbGVjdEFsbCwgc2V0U2VsZWN0QWxsXSA9IHVzZVN0YXRlPFNlbGVjdEFsbFN0YXR1cz4oU2VsZWN0QWxsU3RhdHVzLk5vbmUpXG4gIGNvbnN0IFtjb3VudCwgc2V0Q291bnRdID0gdXNlU3RhdGUoMClcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKClcbiAgY29uc3QgeyBxdWVyeSB9ID0gdXNlTGlzdFF1ZXJ5KClcblxuICBjb25zdCB0b2dnbGVBbGw6IFNlbGVjdGlvbkNvbnRleHRbJ3RvZ2dsZUFsbCddID0gdXNlQ2FsbGJhY2soXG4gICAgKGFsbEF2YWlsYWJsZSA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gbmV3IE1hcCgpXG4gICAgICBpZiAoYWxsQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFNlbGVjdEFsbChTZWxlY3RBbGxTdGF0dXMuQWxsQXZhaWxhYmxlKVxuXG4gICAgICAgIGRvY3MuZm9yRWFjaCgoeyBpZCwgX2lzTG9ja2VkLCBfdXNlckVkaXRpbmcgfSkgPT4ge1xuICAgICAgICAgIGlmICghX2lzTG9ja2VkIHx8IF91c2VyRWRpdGluZz8uaWQgPT09IHVzZXI/LmlkKSB7XG4gICAgICAgICAgICByb3dzLnNldChpZCwgdHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAvLyBSZXNldCBiYWNrIHRvIGBOb25lYCBpZiB3ZSBwcmV2aW91c2x5IGhhZCBhbnkgdHlwZSBvZiBzZWxlY3Rpb25cbiAgICAgICAgc2VsZWN0QWxsID09PSBTZWxlY3RBbGxTdGF0dXMuQWxsQXZhaWxhYmxlIHx8XG4gICAgICAgIHNlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLkFsbEluUGFnZVxuICAgICAgKSB7XG4gICAgICAgIHNldFNlbGVjdEFsbChTZWxlY3RBbGxTdGF0dXMuTm9uZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNob3VsZFNlbGVjdCA9IHNlbGVjdEFsbCAhPT0gU2VsZWN0QWxsU3RhdHVzLlNvbWVcblxuICAgICAgICBkb2NzLmZvckVhY2goKHsgaWQsIF9pc0xvY2tlZCwgX3VzZXJFZGl0aW5nIH0pID0+IHtcbiAgICAgICAgICBpZiAoIV9pc0xvY2tlZCB8fCBfdXNlckVkaXRpbmc/LmlkID09PSB1c2VyPy5pZCkge1xuICAgICAgICAgICAgcm93cy5zZXQoaWQsIHNob3VsZFNlbGVjdClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU2V0IHNlbGVjdEFsbCBzeW5jaHJvbm91c2x5IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIHVzZUVmZmVjdFxuICAgICAgICBpZiAoc2hvdWxkU2VsZWN0ICYmIHJvd3Muc2l6ZSA+IDApIHtcbiAgICAgICAgICBpZiAocm93cy5zaXplID09PSBkb2NzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0QWxsKFNlbGVjdEFsbFN0YXR1cy5BbGxJblBhZ2UpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdEFsbChTZWxlY3RBbGxTdGF0dXMuU29tZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0U2VsZWN0QWxsKFNlbGVjdEFsbFN0YXR1cy5Ob25lKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldFNlbGVjdGVkKHJvd3MpXG4gICAgfSxcbiAgICBbZG9jcywgc2VsZWN0QWxsLCB1c2VyPy5pZF0sXG4gIClcblxuICBjb25zdCBzZXRTZWxlY3Rpb246IFNlbGVjdGlvbkNvbnRleHRbJ3NldFNlbGVjdGlvbiddID0gdXNlQ2FsbGJhY2soXG4gICAgKGlkKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSBkb2NzLmZpbmQoKGRvYykgPT4gZG9jLmlkID09PSBpZClcblxuICAgICAgaWYgKGRvYz8uX2lzTG9ja2VkICYmIHVzZXI/LmlkICE9PSBkb2M/Ll91c2VyRWRpdGluZy5pZCkge1xuICAgICAgICByZXR1cm4gLy8gUHJldmVudCBzZWxlY3Rpb24gaWYgdGhlIGRvY3VtZW50IGlzIGxvY2tlZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gc2VsZWN0ZWQuZ2V0KGlkKVxuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHR5cGVvZiBleGlzdGluZ1ZhbHVlID09PSAnYm9vbGVhbicgPyAhZXhpc3RpbmdWYWx1ZSA6IHRydWVcblxuICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChzZWxlY3RlZC5zZXQoaWQsIGlzU2VsZWN0ZWQpKVxuXG4gICAgICAvLyBJZiBwcmV2aW91c2x5IHNlbGVjdGVkIGFsbCBhbmQgbm93IGRlc2VsZWN0aW5nLCBhZGp1c3Qgc3RhdHVzXG4gICAgICBpZiAoc2VsZWN0QWxsID09PSBTZWxlY3RBbGxTdGF0dXMuQWxsQXZhaWxhYmxlICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICAgIHNldFNlbGVjdEFsbChTZWxlY3RBbGxTdGF0dXMuU29tZSlcbiAgICAgIH1cblxuICAgICAgc2V0U2VsZWN0ZWQobmV3TWFwKVxuICAgIH0sXG4gICAgW3NlbGVjdGVkLCBkb2NzLCBzZWxlY3RBbGwsIHVzZXI/LmlkXSxcbiAgKVxuXG4gIGNvbnN0IGdldFF1ZXJ5UGFyYW1zID0gdXNlQ2FsbGJhY2soXG4gICAgKGFkZGl0aW9uYWxXaGVyZVBhcmFtcz86IFdoZXJlKTogc3RyaW5nID0+IHtcbiAgICAgIGxldCB3aGVyZTogV2hlcmVcblxuICAgICAgaWYgKHNlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLkFsbEF2YWlsYWJsZSkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBwYXJzZVNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpPy53aGVyZSBhcyBXaGVyZVxuXG4gICAgICAgIHdoZXJlID0gcGFyYW1zIHx8IHtcbiAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgbm90X2VxdWFsczogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaWRzID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWRzLnB1c2goa2V5KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoZXJlID0ge1xuICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICBpbjogaWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkZGl0aW9uYWxXaGVyZVBhcmFtcykge1xuICAgICAgICB3aGVyZSA9IHtcbiAgICAgICAgICBhbmQ6IFt7IC4uLmFkZGl0aW9uYWxXaGVyZVBhcmFtcyB9LCB3aGVyZV0sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHFzLnN0cmluZ2lmeShcbiAgICAgICAge1xuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICB3aGVyZSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBhZGRRdWVyeVByZWZpeDogdHJ1ZSB9LFxuICAgICAgKVxuICAgIH0sXG4gICAgW3NlbGVjdEFsbCwgc2VsZWN0ZWQsIGxvY2FsZSwgc2VhcmNoUGFyYW1zXSxcbiAgKVxuXG4gIGNvbnN0IGdldFNlbGVjdGVkSWRzID0gdXNlQ2FsbGJhY2soKCkgPT4gcmVkdWNlQWN0aXZlU2VsZWN0aW9ucyhzZWxlY3RlZCksIFtzZWxlY3RlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0QWxsID09PSBTZWxlY3RBbGxTdGF0dXMuQWxsQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbGV0IHNvbWUgPSBmYWxzZVxuICAgIGxldCBhbGwgPSB0cnVlXG5cbiAgICBpZiAoIXNlbGVjdGVkLnNpemUpIHtcbiAgICAgIGFsbCA9IGZhbHNlXG4gICAgICBzb21lID0gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBbXywgdmFsdWVdIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgIGFsbCA9IGFsbCAmJiB2YWx1ZVxuICAgICAgICBzb21lID0gc29tZSB8fCB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGwgJiYgc2VsZWN0ZWQuc2l6ZSA9PT0gZG9jcy5sZW5ndGgpIHtcbiAgICAgIHNldFNlbGVjdEFsbChTZWxlY3RBbGxTdGF0dXMuQWxsSW5QYWdlKVxuICAgIH0gZWxzZSBpZiAoc29tZSkge1xuICAgICAgc2V0U2VsZWN0QWxsKFNlbGVjdEFsbFN0YXR1cy5Tb21lKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3RBbGwoU2VsZWN0QWxsU3RhdHVzLk5vbmUpXG4gICAgfVxuICB9LCBbc2VsZWN0QWxsLCBzZWxlY3RlZCwgdG90YWxEb2NzLCBkb2NzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBuZXdDb3VudCA9IDBcblxuICAgIGlmIChzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5BbGxBdmFpbGFibGUpIHtcbiAgICAgIG5ld0NvdW50ID0gdG90YWxEb2NzXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgW18sIHZhbHVlXSBvZiBzZWxlY3RlZCkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBuZXdDb3VudCsrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDb3VudChuZXdDb3VudClcbiAgfSwgW3NlbGVjdEFsbCwgc2VsZWN0ZWQsIHRvdGFsRG9jc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZWxlY3RBbGwoU2VsZWN0QWxsU3RhdHVzLk5vbmUpXG4gICAgc2V0U2VsZWN0ZWQobmV3IE1hcCgpKVxuICB9LCBbcXVlcnldKVxuXG4gIGNvbnN0IHNlbGVjdGVkSURzID0gdXNlTWVtbygoKSA9PiByZWR1Y2VBY3RpdmVTZWxlY3Rpb25zKHNlbGVjdGVkKSwgW3NlbGVjdGVkXSlcblxuICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7XG4gICAgY291bnQsXG4gICAgZ2V0UXVlcnlQYXJhbXMsXG4gICAgZ2V0U2VsZWN0ZWRJZHMsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkLFxuICAgIHNlbGVjdGVkSURzLFxuICAgIHNldFNlbGVjdGlvbixcbiAgICB0b2dnbGVBbGwsXG4gICAgdG90YWxEb2NzLFxuICB9XG5cbiAgcmV0dXJuIDxDb250ZXh0IHZhbHVlPXtjb250ZXh0UmVmLmN1cnJlbnR9PntjaGlsZHJlbn08L0NvbnRleHQ+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3Rpb24gPSAoKTogU2VsZWN0aW9uQ29udGV4dCA9PiB1c2UoQ29udGV4dClcbiIsInR5cGUgU2hvdWxkUGVybWFuZW50bHlEZWxldGVBcmdzID0ge1xuICAvKiogV2hldGhlciB0aGUgdXNlciBjaGVja2VkIHRoZSBcImRlbGV0ZSBwZXJtYW5lbnRseVwiIGNoZWNrYm94IGluIHRoZSBVSSAqL1xuICBkZWxldGVQZXJtYW5lbnRseTogYm9vbGVhblxuICBoYXNEZWxldGVQZXJtaXNzaW9uOiBib29sZWFuXG4gIGhhc1RyYXNoUGVybWlzc2lvbjogYm9vbGVhblxuICBpc1RyYXNoVmlldz86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBkZWxldGUgb3BlcmF0aW9uIHNob3VsZCBwZXJtYW5lbnRseSByZW1vdmUgZG9jdW1lbnRzIG9yIHNvZnQtZGVsZXRlIHRoZW0gdG8gdHJhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRQZXJtYW5lbnRseURlbGV0ZSh7XG4gIGRlbGV0ZVBlcm1hbmVudGx5LFxuICBoYXNEZWxldGVQZXJtaXNzaW9uLFxuICBoYXNUcmFzaFBlcm1pc3Npb24sXG4gIGlzVHJhc2hWaWV3ID0gZmFsc2UsXG59OiBTaG91bGRQZXJtYW5lbnRseURlbGV0ZUFyZ3MpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVHJhc2hWaWV3IHx8ICFoYXNUcmFzaFBlcm1pc3Npb24gfHwgKGhhc0RlbGV0ZVBlcm1pc3Npb24gJiYgZGVsZXRlUGVybWFuZW50bHkpXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyBhcyBCdXR0b25Qcm9wcyB9IGZyb20gJy4uL0J1dHRvbi90eXBlcy5qcydcblxuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xpc3Qtc2VsZWN0aW9uJ1xuXG50eXBlIExpc3RTZWxlY3Rpb25fdjRQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb3VudCBvZiBzZWxlY3RlZCBpdGVtc1xuICAgKi9cbiAgcmVhZG9ubHkgY291bnQ6IG51bWJlclxuICAvKipcbiAgICogQWN0aW9ucyB0aGF0IGFwcGx5IHRvIHRoZSBsaXN0IGFzIGEgd2hvbGVcbiAgICpcbiAgICogQGV4YW1wbGUgc2VsZWN0IGFsbCwgY2xlYXIgc2VsZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBMaXN0QWN0aW9ucz86IFJlYWN0LlJlYWN0Tm9kZVtdXG4gIC8qKlxuICAgKiBBY3Rpb25zIHRoYXQgYXBwbHkgdG8gdGhlIHNlbGVjdGVkIGl0ZW1zXG4gICAqXG4gICAqIEBleGFtcGxlIGVkaXQsIGRlbGV0ZSwgcHVibGlzaCwgdW5wdWJsaXNoXG4gICAqL1xuICByZWFkb25seSBTZWxlY3Rpb25BY3Rpb25zPzogUmVhY3QuUmVhY3ROb2RlW11cbn1cbmV4cG9ydCBmdW5jdGlvbiBMaXN0U2VsZWN0aW9uX3Y0KHsgY291bnQsIExpc3RBY3Rpb25zLCBTZWxlY3Rpb25BY3Rpb25zIH06IExpc3RTZWxlY3Rpb25fdjRQcm9wcykge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPHNwYW4+e3QoJ2dlbmVyYWw6c2VsZWN0ZWRDb3VudCcsIHsgY291bnQsIGxhYmVsOiAnJyB9KX08L3NwYW4+XG4gICAgICB7TGlzdEFjdGlvbnMgJiYgTGlzdEFjdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8c3Bhbj4mbWRhc2g7PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb25zYH0+e0xpc3RBY3Rpb25zfTwvZGl2PlxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgKX1cbiAgICAgIHtTZWxlY3Rpb25BY3Rpb25zICYmIFNlbGVjdGlvbkFjdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8c3Bhbj4mbWRhc2g7PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb25zYH0+e1NlbGVjdGlvbkFjdGlvbnN9PC9kaXY+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cbnR5cGUgTGlzdFNlbGVjdGlvbkJ1dHRvblByb3BzID0ge30gJiBCdXR0b25Qcm9wc1xuZXhwb3J0IGZ1bmN0aW9uIExpc3RTZWxlY3Rpb25CdXR0b24oeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBMaXN0U2VsZWN0aW9uQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBidXR0b25TdHlsZT1cIm5vbmVcIlxuICAgICAgY2xhc3NOYW1lPXtbYCR7YmFzZUNsYXNzfV9fYnV0dG9uYCwgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0J1dHRvbj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7XG4gIENsaWVudFVzZXIsXG4gIERhdGEsXG4gIFNhbml0aXplZENvbGxlY3Rpb25Db25maWcsXG4gIFNhbml0aXplZENvbGxlY3Rpb25QZXJtaXNzaW9uLFxuICBTYW5pdGl6ZWRHbG9iYWxQZXJtaXNzaW9uLFxufSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMLCBoYXNBdXRvc2F2ZUVuYWJsZWQsIGhhc0RyYWZ0c0VuYWJsZWQgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgRG9jdW1lbnREcmF3ZXJDb250ZXh0VHlwZSB9IGZyb20gJy4uL0RvY3VtZW50RHJhd2VyL1Byb3ZpZGVyLmpzJ1xuXG5pbXBvcnQgeyB1c2VGb3JtSW5pdGlhbGl6aW5nLCB1c2VGb3JtUHJvY2Vzc2luZyB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWRpdERlcHRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxpdmVQcmV2aWV3Q29udGV4dCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXZlUHJldmlldy9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2Zvcm1hdERvY1RpdGxlL2Zvcm1hdERhdGVUaXRsZS5qcydcbmltcG9ydCB7IEF1dG9zYXZlIH0gZnJvbSAnLi4vQXV0b3NhdmUvaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBDb3B5TG9jYWxlRGF0YSB9IGZyb20gJy4uL0NvcHlMb2NhbGVEYXRhL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVsZXRlRG9jdW1lbnQgfSBmcm9tICcuLi9EZWxldGVEb2N1bWVudC9pbmRleC5qcydcbmltcG9ydCB7IER1cGxpY2F0ZURvY3VtZW50IH0gZnJvbSAnLi4vRHVwbGljYXRlRG9jdW1lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBNb3ZlRG9jVG9Gb2xkZXIgfSBmcm9tICcuLi9Gb2xkZXJWaWV3L01vdmVEb2NUb0ZvbGRlci9pbmRleC5qcydcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uL0d1dHRlci9pbmRleC5qcydcbmltcG9ydCB7IExpdmVQcmV2aWV3VG9nZ2xlciB9IGZyb20gJy4uL0xpdmVQcmV2aWV3L1RvZ2dsZXIvaW5kZXguanMnXG5pbXBvcnQgeyBMb2NrZWQgfSBmcm9tICcuLi9Mb2NrZWQvaW5kZXguanMnXG5pbXBvcnQgeyBQZXJtYW5lbnRseURlbGV0ZUJ1dHRvbiB9IGZyb20gJy4uL1Blcm1hbmVudGx5RGVsZXRlQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUG9wdXAsIFBvcHVwTGlzdCB9IGZyb20gJy4uL1BvcHVwL2luZGV4LmpzJ1xuaW1wb3J0IHsgUHJldmlld0J1dHRvbiB9IGZyb20gJy4uL1ByZXZpZXdCdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBQdWJsaXNoQnV0dG9uIH0gZnJvbSAnLi4vUHVibGlzaEJ1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IFJlbmRlckN1c3RvbUNvbXBvbmVudCB9IGZyb20gJy4uL1JlbmRlckN1c3RvbUNvbXBvbmVudC9pbmRleC5qcydcbmltcG9ydCB7IFJlc3RvcmVCdXR0b24gfSBmcm9tICcuLi9SZXN0b3JlQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2F2ZUJ1dHRvbiB9IGZyb20gJy4uL1NhdmVCdXR0b24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IFNhdmVEcmFmdEJ1dHRvbiB9IGZyb20gJy4uL1NhdmVEcmFmdEJ1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJy4uL1N0YXR1cy9pbmRleC5qcydcbmltcG9ydCB7IFVucHVibGlzaEJ1dHRvbiB9IGZyb20gJy4uL1VucHVibGlzaEJ1dHRvbi9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RvYy1jb250cm9scydcblxuZXhwb3J0IGNvbnN0IERvY3VtZW50Q29udHJvbHM6IFJlYWN0LkZDPHtcbiAgcmVhZG9ubHkgYXBpVVJMOiBzdHJpbmdcbiAgcmVhZG9ubHkgQmVmb3JlRG9jdW1lbnRDb250cm9scz86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBjdXN0b21Db21wb25lbnRzPzoge1xuICAgIHJlYWRvbmx5IFByZXZpZXdCdXR0b24/OiBSZWFjdC5SZWFjdE5vZGVcbiAgICByZWFkb25seSBQdWJsaXNoQnV0dG9uPzogUmVhY3QuUmVhY3ROb2RlXG4gICAgcmVhZG9ubHkgU2F2ZUJ1dHRvbj86IFJlYWN0LlJlYWN0Tm9kZVxuICAgIHJlYWRvbmx5IFNhdmVEcmFmdEJ1dHRvbj86IFJlYWN0LlJlYWN0Tm9kZVxuICAgIHJlYWRvbmx5IFN0YXR1cz86IFJlYWN0LlJlYWN0Tm9kZVxuICAgIHJlYWRvbmx5IFVucHVibGlzaEJ1dHRvbj86IFJlYWN0LlJlYWN0Tm9kZVxuICB9XG4gIHJlYWRvbmx5IGRhdGE/OiBEYXRhXG4gIHJlYWRvbmx5IGRpc2FibGVBY3Rpb25zPzogYm9vbGVhblxuICByZWFkb25seSBkaXNhYmxlQ3JlYXRlPzogYm9vbGVhblxuICByZWFkb25seSBFZGl0TWVudUl0ZW1zPzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGhhc1B1Ymxpc2hQZXJtaXNzaW9uPzogYm9vbGVhblxuICByZWFkb25seSBoYXNTYXZlUGVybWlzc2lvbj86IGJvb2xlYW5cbiAgcmVhZG9ubHkgaWQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgcmVhZG9ubHkgaXNBY2NvdW50Vmlldz86IGJvb2xlYW5cbiAgcmVhZG9ubHkgaXNFZGl0aW5nPzogYm9vbGVhblxuICByZWFkb25seSBpc0luRHJhd2VyPzogYm9vbGVhblxuICByZWFkb25seSBpc1RyYXNoZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IG9uRGVsZXRlPzogRG9jdW1lbnREcmF3ZXJDb250ZXh0VHlwZVsnb25EZWxldGUnXVxuICByZWFkb25seSBvbkRyYXdlckNyZWF0ZU5ldz86ICgpID0+IHZvaWRcbiAgLyogT25seSBhdmFpbGFibGUgaWYgYHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGVgIGlzIGBmYWxzZWAgKi9cbiAgcmVhZG9ubHkgb25EdXBsaWNhdGU/OiBEb2N1bWVudERyYXdlckNvbnRleHRUeXBlWydvbkR1cGxpY2F0ZSddXG4gIHJlYWRvbmx5IG9uUmVzdG9yZT86IERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGVbJ29uUmVzdG9yZSddXG4gIHJlYWRvbmx5IG9uU2F2ZT86IERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGVbJ29uU2F2ZSddXG4gIHJlYWRvbmx5IG9uVGFrZU92ZXI/OiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBudWxsIHwgU2FuaXRpemVkQ29sbGVjdGlvblBlcm1pc3Npb24gfCBTYW5pdGl6ZWRHbG9iYWxQZXJtaXNzaW9uXG4gIHJlYWRvbmx5IHJlYWRPbmx5Rm9ySW5jb21pbmdVc2VyPzogYm9vbGVhblxuICByZWFkb25seSByZWRpcmVjdEFmdGVyRGVsZXRlPzogYm9vbGVhblxuICByZWFkb25seSByZWRpcmVjdEFmdGVyRHVwbGljYXRlPzogYm9vbGVhblxuICByZWFkb25seSByZWRpcmVjdEFmdGVyUmVzdG9yZT86IGJvb2xlYW5cbiAgcmVhZG9ubHkgc2x1ZzogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZ1snc2x1ZyddXG4gIHJlYWRvbmx5IHVzZXI/OiBDbGllbnRVc2VyXG59PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgc2x1ZyxcbiAgICBCZWZvcmVEb2N1bWVudENvbnRyb2xzLFxuICAgIGN1c3RvbUNvbXBvbmVudHM6IHtcbiAgICAgIFByZXZpZXdCdXR0b246IEN1c3RvbVByZXZpZXdCdXR0b24sXG4gICAgICBQdWJsaXNoQnV0dG9uOiBDdXN0b21QdWJsaXNoQnV0dG9uLFxuICAgICAgU2F2ZUJ1dHRvbjogQ3VzdG9tU2F2ZUJ1dHRvbixcbiAgICAgIFNhdmVEcmFmdEJ1dHRvbjogQ3VzdG9tU2F2ZURyYWZ0QnV0dG9uLFxuICAgICAgU3RhdHVzOiBDdXN0b21TdGF0dXMsXG4gICAgICBVbnB1Ymxpc2hCdXR0b246IEN1c3RvbVVucHVibGlzaEJ1dHRvbixcbiAgICB9ID0ge30sXG4gICAgZGF0YSxcbiAgICBkaXNhYmxlQWN0aW9ucyxcbiAgICBkaXNhYmxlQ3JlYXRlLFxuICAgIEVkaXRNZW51SXRlbXMsXG4gICAgaGFzU2F2ZVBlcm1pc3Npb24sXG4gICAgaXNBY2NvdW50VmlldyxcbiAgICBpc0VkaXRpbmcsXG4gICAgaXNJbkRyYXdlcixcbiAgICBpc1RyYXNoZWQsXG4gICAgb25EZWxldGUsXG4gICAgb25EcmF3ZXJDcmVhdGVOZXcsXG4gICAgb25EdXBsaWNhdGUsXG4gICAgb25SZXN0b3JlLFxuICAgIG9uVGFrZU92ZXIsXG4gICAgcGVybWlzc2lvbnMsXG4gICAgcmVhZE9ubHlGb3JJbmNvbWluZ1VzZXIsXG4gICAgcmVkaXJlY3RBZnRlckRlbGV0ZSxcbiAgICByZWRpcmVjdEFmdGVyRHVwbGljYXRlLFxuICAgIHJlZGlyZWN0QWZ0ZXJSZXN0b3JlLFxuICAgIHVzZXIsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IGVkaXREZXB0aCA9IHVzZUVkaXREZXB0aCgpXG5cbiAgY29uc3QgeyBjb25maWcsIGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWc6IHNsdWcgfSlcblxuICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBnbG9iYWxTbHVnOiBzbHVnIH0pXG5cbiAgY29uc3QgeyBpc0xpdmVQcmV2aWV3RW5hYmxlZCB9ID0gdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcblxuICBjb25zdCB7IGhhc0RlbGV0ZVBlcm1pc3Npb246IGRvY0hhc0RlbGV0ZVBlcm1pc3Npb24sIGhhc1RyYXNoUGVybWlzc2lvbjogZG9jSGFzVHJhc2hQZXJtaXNzaW9uIH0gPVxuICAgIHVzZURvY3VtZW50SW5mbygpXG5cbiAgY29uc3Qge1xuICAgIGFkbWluOiB7IGRhdGVGb3JtYXQgfSxcbiAgICBsb2NhbGl6YXRpb24sXG4gICAgcm91dGVzOiB7IGFkbWluOiBhZG1pblJvdXRlIH0sXG4gICAgc2VydmVyVVJMLFxuICB9ID0gY29uZmlnXG5cbiAgLy8gU2V0dGluZ3MgdGhlc2UgaW4gc3RhdGUgdG8gYXZvaWQgaHlkcmF0aW9uIGlzc3VlcyBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIHNlcnZlciBhbmQgY2xpZW50XG4gIGNvbnN0IFt1cGRhdGVkQXQsIHNldFVwZGF0ZWRBdF0gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmc+KCcnKVxuICBjb25zdCBbY3JlYXRlZEF0LCBzZXRDcmVhdGVkQXRdID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nPignJylcblxuICBjb25zdCBwcm9jZXNzaW5nID0gdXNlRm9ybVByb2Nlc3NpbmcoKVxuICBjb25zdCBpbml0aWFsaXppbmcgPSB1c2VGb3JtSW5pdGlhbGl6aW5nKClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkYXRhPy51cGRhdGVkQXQpIHtcbiAgICAgIHNldFVwZGF0ZWRBdChmb3JtYXREYXRlKHsgZGF0ZTogZGF0YS51cGRhdGVkQXQsIGkxOG4sIHBhdHRlcm46IGRhdGVGb3JtYXQgfSkpXG4gICAgfVxuICAgIGlmIChkYXRhPy5jcmVhdGVkQXQpIHtcbiAgICAgIHNldENyZWF0ZWRBdChmb3JtYXREYXRlKHsgZGF0ZTogZGF0YS5jcmVhdGVkQXQsIGkxOG4sIHBhdHRlcm46IGRhdGVGb3JtYXQgfSkpXG4gICAgfVxuICB9LCBbZGF0YSwgaTE4biwgZGF0ZUZvcm1hdF0pXG5cbiAgY29uc3QgaGFzQ3JlYXRlUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zICYmICdjcmVhdGUnIGluIHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmNyZWF0ZVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25EZWxldGVQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMgJiYgJ2RlbGV0ZScgaW4gcGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMuZGVsZXRlXG5cbiAgY29uc3QgaGFzRGVsZXRlUGVybWlzc2lvbiA9IGNvbGxlY3Rpb25Db25maWc/LnRyYXNoXG4gICAgPyBkb2NIYXNUcmFzaFBlcm1pc3Npb24gfHwgZG9jSGFzRGVsZXRlUGVybWlzc2lvblxuICAgIDogY29sbGVjdGlvbkRlbGV0ZVBlcm1pc3Npb25cblxuICBjb25zdCBzaG93RG90TWVudSA9IEJvb2xlYW4oXG4gICAgY29sbGVjdGlvbkNvbmZpZyAmJiBpZCAmJiAhZGlzYWJsZUFjdGlvbnMgJiYgKGhhc0NyZWF0ZVBlcm1pc3Npb24gfHwgaGFzRGVsZXRlUGVybWlzc2lvbiksXG4gIClcblxuICBjb25zdCB1bnNhdmVkRHJhZnRXaXRoVmFsaWRhdGlvbnMgPVxuICAgICFpZCAmJiBjb2xsZWN0aW9uQ29uZmlnPy52ZXJzaW9ucz8uZHJhZnRzICYmIGNvbGxlY3Rpb25Db25maWcudmVyc2lvbnM/LmRyYWZ0cy52YWxpZGF0ZVxuXG4gIGNvbnN0IGdsb2JhbEhhc0RyYWZ0c0VuYWJsZWQgPSBoYXNEcmFmdHNFbmFibGVkKGdsb2JhbENvbmZpZylcbiAgY29uc3QgY29sbGVjdGlvbkhhc0RyYWZ0c0VuYWJsZWQgPSBoYXNEcmFmdHNFbmFibGVkKGNvbGxlY3Rpb25Db25maWcpXG4gIGNvbnN0IGNvbGxlY3Rpb25BdXRvc2F2ZUVuYWJsZWQgPSBoYXNBdXRvc2F2ZUVuYWJsZWQoY29sbGVjdGlvbkNvbmZpZylcbiAgY29uc3QgZ2xvYmFsQXV0b3NhdmVFbmFibGVkID0gaGFzQXV0b3NhdmVFbmFibGVkKGdsb2JhbENvbmZpZylcbiAgY29uc3QgYXV0b3NhdmVFbmFibGVkID0gY29sbGVjdGlvbkF1dG9zYXZlRW5hYmxlZCB8fCBnbG9iYWxBdXRvc2F2ZUVuYWJsZWRcblxuICBjb25zdCBzaG93U2F2ZURyYWZ0QnV0dG9uID1cbiAgICAoY29sbGVjdGlvbkF1dG9zYXZlRW5hYmxlZCAmJlxuICAgICAgY29sbGVjdGlvbkNvbmZpZy52ZXJzaW9ucy5kcmFmdHMuYXV0b3NhdmUgIT09IGZhbHNlICYmXG4gICAgICBjb2xsZWN0aW9uQ29uZmlnLnZlcnNpb25zLmRyYWZ0cy5hdXRvc2F2ZS5zaG93U2F2ZURyYWZ0QnV0dG9uID09PSB0cnVlKSB8fFxuICAgIChnbG9iYWxBdXRvc2F2ZUVuYWJsZWQgJiZcbiAgICAgIGdsb2JhbENvbmZpZy52ZXJzaW9ucy5kcmFmdHMuYXV0b3NhdmUgIT09IGZhbHNlICYmXG4gICAgICBnbG9iYWxDb25maWcudmVyc2lvbnMuZHJhZnRzLmF1dG9zYXZlLnNob3dTYXZlRHJhZnRCdXR0b24gPT09IHRydWUpXG4gIGNvbnN0IHNob3dDb3B5VG9Mb2NhbGUgPSBsb2NhbGl6YXRpb24gJiYgIWNvbGxlY3Rpb25Db25maWc/LmFkbWluPy5kaXNhYmxlQ29weVRvTG9jYWxlXG5cbiAgY29uc3Qgc2hvd0ZvbGRlck1ldGFJY29uID0gY29sbGVjdGlvbkNvbmZpZyAmJiBjb2xsZWN0aW9uQ29uZmlnLmZvbGRlcnNcbiAgY29uc3Qgc2hvd0xvY2tlZE1ldGFJY29uID0gdXNlciAmJiByZWFkT25seUZvckluY29taW5nVXNlclxuXG4gIHJldHVybiAoXG4gICAgPEd1dHRlciBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcHBlcmB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udGVudGB9PlxuICAgICAgICAgIHtzaG93TG9ja2VkTWV0YUljb24gfHwgc2hvd0ZvbGRlck1ldGFJY29uID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX21ldGEtaWNvbnNgfT5cbiAgICAgICAgICAgICAge3Nob3dMb2NrZWRNZXRhSWNvbiAmJiAoXG4gICAgICAgICAgICAgICAgPExvY2tlZCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xvY2tlZC1jb250cm9sc2B9IHVzZXI9e3VzZXJ9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtzaG93Rm9sZGVyTWV0YUljb24gJiYgY29uZmlnLmZvbGRlcnMgJiYgIWlzVHJhc2hlZCAmJiAoXG4gICAgICAgICAgICAgICAgPE1vdmVEb2NUb0ZvbGRlclxuICAgICAgICAgICAgICAgICAgZm9sZGVyQ29sbGVjdGlvblNsdWc9e2NvbmZpZy5mb2xkZXJzLnNsdWd9XG4gICAgICAgICAgICAgICAgICBmb2xkZXJGaWVsZE5hbWU9e2NvbmZpZy5mb2xkZXJzLmZpZWxkTmFtZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbWV0YWB9PlxuICAgICAgICAgICAge2NvbGxlY3Rpb25Db25maWcgJiYgIWlzRWRpdGluZyAmJiAhaXNBY2NvdW50VmlldyAmJiAoXG4gICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xpc3QtaXRlbWB9PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdmFsdWVgfT5cbiAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2dlbmVyYWw6Y3JlYXRpbmdOZXdMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc/LmxhYmVscz8uc2luZ3VsYXIgPz8gaTE4bi50KCdnZW5lcmFsOmRvY3VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7KGNvbGxlY3Rpb25IYXNEcmFmdHNFbmFibGVkIHx8IGdsb2JhbEhhc0RyYWZ0c0VuYWJsZWQpICYmIChcbiAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHsoZ2xvYmFsQ29uZmlnIHx8IChjb2xsZWN0aW9uQ29uZmlnICYmIGlzRWRpdGluZykpICYmIChcbiAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1tgJHtiYXNlQ2xhc3N9X19zdGF0dXNgLCBgJHtiYXNlQ2xhc3N9X19saXN0LWl0ZW1gXVxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50IEN1c3RvbUNvbXBvbmVudD17Q3VzdG9tU3RhdHVzfSBGYWxsYmFjaz17PFN0YXR1cyAvPn0gLz5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7aGFzU2F2ZVBlcm1pc3Npb24gJiZcbiAgICAgICAgICAgICAgICAgIGF1dG9zYXZlRW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgIXVuc2F2ZWREcmFmdFdpdGhWYWxpZGF0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgIWlzVHJhc2hlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xpc3QtaXRlbWB9PlxuICAgICAgICAgICAgICAgICAgICAgIDxBdXRvc2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbD17Z2xvYmFsQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlzaGVkRG9jVXBkYXRlZEF0PXtkYXRhPy5jcmVhdGVkQXR9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2NvbGxlY3Rpb25Db25maWc/LnRpbWVzdGFtcHMgJiYgKGlzRWRpdGluZyB8fCBpc0FjY291bnRWaWV3KSAmJiAoXG4gICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31fX2xpc3QtaXRlbWAsIGAke2Jhc2VDbGFzc31fX3ZhbHVlLXdyYXBgXVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YT8udXBkYXRlZEF0ID8gdXBkYXRlZEF0IDogJyd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9PlxuICAgICAgICAgICAgICAgICAgICB7aTE4bi50KGlzVHJhc2hlZCA/ICdnZW5lcmFsOmRlbGV0ZWQnIDogJ2dlbmVyYWw6bGFzdE1vZGlmaWVkJyl9OiZuYnNwO1xuICAgICAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgICAgICB7ZGF0YT8udXBkYXRlZEF0ICYmIDxwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdmFsdWVgfT57dXBkYXRlZEF0fTwvcD59XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31fX2xpc3QtaXRlbWAsIGAke2Jhc2VDbGFzc31fX3ZhbHVlLXdyYXBgXVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YT8uY3JlYXRlZEF0ID8gY3JlYXRlZEF0IDogJyd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9PntpMThuLnQoJ2dlbmVyYWw6Y3JlYXRlZCcpfTombmJzcDs8L3A+XG4gICAgICAgICAgICAgICAgICB7ZGF0YT8uY3JlYXRlZEF0ICYmIDxwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdmFsdWVgfT57Y3JlYXRlZEF0fTwvcD59XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250cm9scy13cmFwcGVyYH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRyb2xzYH0+XG4gICAgICAgICAgICB7QmVmb3JlRG9jdW1lbnRDb250cm9sc31cbiAgICAgICAgICAgIHtpc0xpdmVQcmV2aWV3RW5hYmxlZCAmJiAhaXNJbkRyYXdlciAmJiA8TGl2ZVByZXZpZXdUb2dnbGVyIC8+fVxuICAgICAgICAgICAgeyhjb2xsZWN0aW9uQ29uZmlnPy5hZG1pbi5wcmV2aWV3IHx8IGdsb2JhbENvbmZpZz8uYWRtaW4ucHJldmlldykgJiYgKFxuICAgICAgICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtDdXN0b21QcmV2aWV3QnV0dG9ufVxuICAgICAgICAgICAgICAgIEZhbGxiYWNrPXs8UHJldmlld0J1dHRvbiAvPn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aGFzU2F2ZVBlcm1pc3Npb24gJiYgIWlzVHJhc2hlZCAmJiAoXG4gICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7Y29sbGVjdGlvbkhhc0RyYWZ0c0VuYWJsZWQgfHwgZ2xvYmFsSGFzRHJhZnRzRW5hYmxlZCA/IChcbiAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgeyh1bnNhdmVkRHJhZnRXaXRoVmFsaWRhdGlvbnMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhYXV0b3NhdmVFbmFibGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKGF1dG9zYXZlRW5hYmxlZCAmJiBzaG93U2F2ZURyYWZ0QnV0dG9uKSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17Q3VzdG9tU2F2ZURyYWZ0QnV0dG9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgRmFsbGJhY2s9ezxTYXZlRHJhZnRCdXR0b24gLz59XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17Q3VzdG9tUHVibGlzaEJ1dHRvbn1cbiAgICAgICAgICAgICAgICAgICAgICBGYWxsYmFjaz17PFB1Ymxpc2hCdXR0b24gLz59XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8UmVuZGVyQ3VzdG9tQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbUNvbXBvbmVudD17Q3VzdG9tU2F2ZUJ1dHRvbn1cbiAgICAgICAgICAgICAgICAgICAgRmFsbGJhY2s9ezxTYXZlQnV0dG9uIC8+fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtkb2NIYXNEZWxldGVQZXJtaXNzaW9uICYmIGlzVHJhc2hlZCAmJiAoXG4gICAgICAgICAgICAgIDxQZXJtYW5lbnRseURlbGV0ZUJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvbklkPVwiYWN0aW9uLXBlcm1hbmVudGx5LWRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25Db25maWc/LnNsdWd9XG4gICAgICAgICAgICAgICAgaWQ9e2lkLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgb25EZWxldGU9e29uRGVsZXRlfVxuICAgICAgICAgICAgICAgIHJlZGlyZWN0QWZ0ZXJEZWxldGU9e3JlZGlyZWN0QWZ0ZXJEZWxldGV9XG4gICAgICAgICAgICAgICAgc2luZ3VsYXJMYWJlbD17Y29sbGVjdGlvbkNvbmZpZz8ubGFiZWxzPy5zaW5ndWxhcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aGFzU2F2ZVBlcm1pc3Npb24gJiYgaXNUcmFzaGVkICYmIChcbiAgICAgICAgICAgICAgPFJlc3RvcmVCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25JZD1cImFjdGlvbi1yZXN0b3JlXCJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvbkNvbmZpZz8uc2x1Z31cbiAgICAgICAgICAgICAgICBpZD17aWQudG9TdHJpbmcoKX1cbiAgICAgICAgICAgICAgICBvblJlc3RvcmU9e29uUmVzdG9yZX1cbiAgICAgICAgICAgICAgICByZWRpcmVjdEFmdGVyUmVzdG9yZT17cmVkaXJlY3RBZnRlclJlc3RvcmV9XG4gICAgICAgICAgICAgICAgc2luZ3VsYXJMYWJlbD17Y29sbGVjdGlvbkNvbmZpZz8ubGFiZWxzPy5zaW5ndWxhcn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7dXNlciAmJiByZWFkT25seUZvckluY29taW5nVXNlciAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJ0YWtlLW92ZXJcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uVGFrZU92ZXJ9XG4gICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDp0YWtlT3ZlcicpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3Nob3dEb3RNZW51ICYmICFyZWFkT25seUZvckluY29taW5nVXNlciAmJiAoXG4gICAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgICAgYnV0dG9uPXtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZG90c2B9PlxuICAgICAgICAgICAgICAgICAgPGRpdiAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcG9wdXBgfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aW5pdGlhbGl6aW5nIHx8IHByb2Nlc3Npbmd9XG4gICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgdmVydGljYWxBbGlnbj1cImJvdHRvbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICAgICAge3Nob3dDb3B5VG9Mb2NhbGUgJiYgPENvcHlMb2NhbGVEYXRhIC8+fVxuICAgICAgICAgICAgICAgIHtoYXNDcmVhdGVQZXJtaXNzaW9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgeyFkaXNhYmxlQ3JlYXRlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZWRpdERlcHRoID4gMSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b24gaWQ9XCJhY3Rpb24tY3JlYXRlXCIgb25DbGljaz17b25EcmF3ZXJDcmVhdGVOZXd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2dlbmVyYWw6Y3JlYXRlTmV3Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17Zm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGAvY29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uQ29uZmlnPy5zbHVnfS9jcmVhdGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWN0aW9uLWNyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTE4bi50KCdnZW5lcmFsOmNyZWF0ZU5ldycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtjb2xsZWN0aW9uQ29uZmlnLmRpc2FibGVEdXBsaWNhdGUgIT09IHRydWUgJiYgaXNFZGl0aW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPER1cGxpY2F0ZURvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25EdXBsaWNhdGU9e29uRHVwbGljYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdEFmdGVyRHVwbGljYXRlPXtyZWRpcmVjdEFmdGVyRHVwbGljYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5ndWxhckxhYmVsPXtjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHM/LnNpbmd1bGFyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzbHVnPXtjb2xsZWN0aW9uQ29uZmlnPy5zbHVnfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtsb2NhbGl6YXRpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RHVwbGljYXRlRG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EdXBsaWNhdGU9e29uRHVwbGljYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGU9e3JlZGlyZWN0QWZ0ZXJEdXBsaWNhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0TG9jYWxlcz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5ndWxhckxhYmVsPXtjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHM/LnNpbmd1bGFyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsdWc9e2NvbGxlY3Rpb25Db25maWc/LnNsdWd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtoYXNEZWxldGVQZXJtaXNzaW9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxEZWxldGVEb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICBidXR0b25JZD1cImFjdGlvbi1kZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvbkNvbmZpZz8uc2x1Z31cbiAgICAgICAgICAgICAgICAgICAgaWQ9e2lkLnRvU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlPXtvbkRlbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RBZnRlckRlbGV0ZT17cmVkaXJlY3RBZnRlckRlbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2luZ3VsYXJMYWJlbD17Y29sbGVjdGlvbkNvbmZpZz8ubGFiZWxzPy5zaW5ndWxhcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlQXNUaXRsZT17Y29sbGVjdGlvbkNvbmZpZz8uYWRtaW4/LnVzZUFzVGl0bGV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtDdXN0b21VbnB1Ymxpc2hCdXR0b259XG4gICAgICAgICAgICAgICAgICBGYWxsYmFjaz17PFVucHVibGlzaEJ1dHRvbiAvPn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtFZGl0TWVudUl0ZW1zfVxuICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgIDwvUG9wdXA+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kaXZpZGVyYH0gLz5cbiAgICA8L0d1dHRlcj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IExpdmVQcmV2aWV3Q29uZmlnLCBMaXZlUHJldmlld1VSTFR5cGUgfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IHVzZVBvcHVwV2luZG93IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlUG9wdXBXaW5kb3cuanMnXG5pbXBvcnQgdHlwZSB7IFNpemVSZWR1Y2VyQWN0aW9uIH0gZnJvbSAnLi9zaXplUmVkdWNlci5qcydcblxuZXhwb3J0IGludGVyZmFjZSBMaXZlUHJldmlld0NvbnRleHRUeXBlIHtcbiAgYXBwSXNSZWFkeTogYm9vbGVhblxuICBicmVha3BvaW50OiBMaXZlUHJldmlld0NvbmZpZ1snYnJlYWtwb2ludHMnXVtudW1iZXJdWyduYW1lJ11cbiAgYnJlYWtwb2ludHM6IExpdmVQcmV2aWV3Q29uZmlnWydicmVha3BvaW50cyddXG4gIGlmcmFtZVJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJRnJhbWVFbGVtZW50IHwgbnVsbD5cbiAgaXNMaXZlUHJldmlld0VuYWJsZWQ6IGJvb2xlYW5cbiAgaXNMaXZlUHJldmlld2luZzogYm9vbGVhblxuICBpc1BvcHVwT3BlbjogYm9vbGVhblxuICBpc1ByZXZpZXdFbmFibGVkOiBib29sZWFuXG4gIGxpc3RlbmluZ0Zvck1lc3NhZ2VzPzogYm9vbGVhblxuICAvKipcbiAgICogVGhlIFVSTCB0aGF0IGhhcyBmaW5pc2hlZCBsb2FkaW5nIGluIHRoZSBpZnJhbWUgb3IgcG9wdXAuXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IHRoZSBgdXJsYCwgaXQgd2lsbCBiZWdpbiB0byBsb2FkIGludG8gdGhlIGlmcmFtZSxcbiAgICogYnV0IGBsb2FkZWRVUkxgIHdpbGwgbm90IGJlIHNldCB1bnRpbCB0aGUgaWZyYW1lJ3MgYG9uTG9hZGAgZXZlbnQgZmlyZXMuXG4gICAqL1xuICBsb2FkZWRVUkw/OiBzdHJpbmdcbiAgbWVhc3VyZWREZXZpY2VTaXplOiB7XG4gICAgaGVpZ2h0OiBudW1iZXJcbiAgICB3aWR0aDogbnVtYmVyXG4gIH1cbiAgb3BlblBvcHVwV2luZG93OiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VQb3B1cFdpbmRvdz5bJ29wZW5Qb3B1cFdpbmRvdyddXG4gIHBvcHVwUmVmPzogUmVhY3QuUmVmT2JqZWN0PG51bGwgfCBXaW5kb3c+XG4gIHByZXZpZXdVUkw/OiBzdHJpbmdcbiAgcHJldmlld1dpbmRvd1R5cGU6ICdpZnJhbWUnIHwgJ3BvcHVwJ1xuICBzZXRBcHBJc1JlYWR5OiAoYXBwSXNSZWFkeTogYm9vbGVhbikgPT4gdm9pZFxuICBzZXRCcmVha3BvaW50OiAoYnJlYWtwb2ludDogTGl2ZVByZXZpZXdDb25maWdbJ2JyZWFrcG9pbnRzJ11bbnVtYmVyXVsnbmFtZSddKSA9PiB2b2lkXG4gIHNldEhlaWdodDogKGhlaWdodDogbnVtYmVyKSA9PiB2b2lkXG4gIHNldElzTGl2ZVByZXZpZXdpbmc6IChpc0xpdmVQcmV2aWV3aW5nOiBib29sZWFuKSA9PiB2b2lkXG4gIHNldExvYWRlZFVSTDogKGxvYWRlZFVSTDogc3RyaW5nKSA9PiB2b2lkXG4gIHNldE1lYXN1cmVkRGV2aWNlU2l6ZTogKHNpemU6IHsgaGVpZ2h0OiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfSkgPT4gdm9pZFxuICBzZXRQcmV2aWV3VVJMOiAodXJsOiBzdHJpbmcpID0+IHZvaWRcbiAgc2V0UHJldmlld1dpbmRvd1R5cGU6IChwcmV2aWV3V2luZG93VHlwZTogJ2lmcmFtZScgfCAncG9wdXAnKSA9PiB2b2lkXG4gIHNldFNpemU6IERpc3BhdGNoPFNpemVSZWR1Y2VyQWN0aW9uPlxuICBzZXRUb29sYmFyUG9zaXRpb246IChwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBVUkwgb2YgdGhlIHByZXZpZXcgKGVpdGhlciBpZnJhbWUgb3IgcG9wdXApLlxuICAgKiBXaWxsIHRyaWdnZXIgYSByZWxvYWQgb2YgdGhlIHdpbmRvdy5cbiAgICovXG4gIHNldFVSTDogKHVybDogc3RyaW5nKSA9PiB2b2lkXG4gIHNldFdpZHRoOiAod2lkdGg6IG51bWJlcikgPT4gdm9pZFxuICBzZXRab29tOiAoem9vbTogbnVtYmVyKSA9PiB2b2lkXG4gIC8qKlxuICAgKiBEbyBub3QgcmVuZGVyIHRoZSBpZnJhbWUgdW50aWwgdGhlIHVzZXIgaXMgYWN0aXZlbHkgbGl2ZSBwcmV2aWV3aW5nLiBUaGlzIHdpbGw6XG4gICAqIDEuIFByZXZlbnQgcnVubmluZyB0aHJvdWdoIFVSTCBwcm94aWVzIHNldCB1cCBvbiB0aGVpciBgYWRtaW4ubGl2ZVByZXZpZXcudXJsYCBlbmRwb2ludCwgZS5nLiB0byBlbnRlciBOZXh0LmpzIGRyYWZ0IG1vZGUuXG4gICAqIDIuIEF2b2lkIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGFuZCBuZXR3b3JrIGNvc3RzIG9mIHJlbmRlcmluZyB0aGUgaWZyYW1lIGJlZm9yZSBpdCdzIG5lZWRlZC5cbiAgICovXG4gIHNob3VsZFJlbmRlcklmcmFtZT86IGJvb2xlYW5cbiAgc2l6ZToge1xuICAgIGhlaWdodDogbnVtYmVyXG4gICAgd2lkdGg6IG51bWJlclxuICB9XG4gIHRvb2xiYXJQb3NpdGlvbjoge1xuICAgIHg6IG51bWJlclxuICAgIHk6IG51bWJlclxuICB9XG4gIC8qKlxuICAgKiBUaGUgbGl2ZSBwcmV2aWV3IHVybCBwcm9wZXJ0eSBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc3RyaW5nLlxuICAgKiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBvbmUgaXQgaXMsIHNvIHRoYXQgd2UgY2FuIG9wdCBpbi9vdXQgb2YgY2VydGFpbiBiZWhhdmlvcnMsIGUuZy4gY2FsbGluZyB0aGUgc2VydmVyIHRvIGdldCB0aGUgVVJMLlxuICAgKi9cbiAgdHlwZW9mTGl2ZVByZXZpZXdVUkw/OiAnZnVuY3Rpb24nIHwgJ3N0cmluZydcbiAgdXJsOiBMaXZlUHJldmlld1VSTFR5cGVcbiAgem9vbTogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBMaXZlUHJldmlld0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PExpdmVQcmV2aWV3Q29udGV4dFR5cGU+KHtcbiAgYXBwSXNSZWFkeTogZmFsc2UsXG4gIGJyZWFrcG9pbnQ6IHVuZGVmaW5lZCxcbiAgYnJlYWtwb2ludHM6IHVuZGVmaW5lZCxcbiAgaWZyYW1lUmVmOiB1bmRlZmluZWQsXG4gIGlzTGl2ZVByZXZpZXdFbmFibGVkOiB1bmRlZmluZWQsXG4gIGlzTGl2ZVByZXZpZXdpbmc6IGZhbHNlLFxuICBpc1BvcHVwT3BlbjogZmFsc2UsXG4gIGlzUHJldmlld0VuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgbWVhc3VyZWREZXZpY2VTaXplOiB7XG4gICAgaGVpZ2h0OiAwLFxuICAgIHdpZHRoOiAwLFxuICB9LFxuICBvcGVuUG9wdXBXaW5kb3c6ICgpID0+IHt9LFxuICBwb3B1cFJlZjogdW5kZWZpbmVkLFxuICBwcmV2aWV3VVJMOiB1bmRlZmluZWQsXG4gIHByZXZpZXdXaW5kb3dUeXBlOiAnaWZyYW1lJyxcbiAgc2V0QXBwSXNSZWFkeTogKCkgPT4ge30sXG4gIHNldEJyZWFrcG9pbnQ6ICgpID0+IHt9LFxuICBzZXRIZWlnaHQ6ICgpID0+IHt9LFxuICBzZXRJc0xpdmVQcmV2aWV3aW5nOiAoKSA9PiB7fSxcbiAgc2V0TG9hZGVkVVJMOiAoKSA9PiB7fSxcbiAgc2V0TWVhc3VyZWREZXZpY2VTaXplOiAoKSA9PiB7fSxcbiAgc2V0UHJldmlld1VSTDogKCkgPT4ge30sXG4gIHNldFByZXZpZXdXaW5kb3dUeXBlOiAoKSA9PiB7fSxcbiAgc2V0U2l6ZTogKCkgPT4ge30sXG4gIHNldFRvb2xiYXJQb3NpdGlvbjogKCkgPT4ge30sXG4gIHNldFVSTDogKCkgPT4ge30sXG4gIHNldFdpZHRoOiAoKSA9PiB7fSxcbiAgc2V0Wm9vbTogKCkgPT4ge30sXG4gIHNob3VsZFJlbmRlcklmcmFtZTogdW5kZWZpbmVkLFxuICBzaXplOiB7XG4gICAgaGVpZ2h0OiAwLFxuICAgIHdpZHRoOiAwLFxuICB9LFxuICB0b29sYmFyUG9zaXRpb246IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH0sXG4gIHR5cGVvZkxpdmVQcmV2aWV3VVJMOiB1bmRlZmluZWQsXG4gIHVybDogdW5kZWZpbmVkLFxuICB6b29tOiAxLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUxpdmVQcmV2aWV3Q29udGV4dCA9ICgpID0+IHVzZShMaXZlUHJldmlld0NvbnRleHQpXG5cbi8qKlxuICogSG9vayB0byBhY2Nlc3MgbGl2ZSBwcmV2aWV3IGNvbnRleHQgdmFsdWVzLiBTZXBhcmF0ZWQgdG8gcHJldmVudCBicmVha2luZyBjaGFuZ2VzLiBJbiB0aGUgZnV0dXJlIHRoaXMgaG9vayBjYW4gYmUgcmVtb3ZlZCBpbiBmYXZvdXIgb2YganVzdCB1c2luZyB0aGUgTGl2ZVByZXZpZXcgb25lLlxuICovXG5leHBvcnQgY29uc3QgdXNlUHJldmlld1VSTCA9ICgpID0+IHtcbiAgY29uc3QgeyBpc1ByZXZpZXdFbmFibGVkLCBwcmV2aWV3VVJMLCBzZXRQcmV2aWV3VVJMIH0gPSB1c2UoTGl2ZVByZXZpZXdDb250ZXh0KVxuXG4gIHJldHVybiB7IGlzUHJldmlld0VuYWJsZWQsIHByZXZpZXdVUkwsIHNldFByZXZpZXdVUkwgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG4vLyBUT0RPOiBhYnN0cmFjdCB0aGUgYG5leHQvbmF2aWdhdGlvbmAgZGVwZW5kZW5jeSBvdXQgZnJvbSB0aGlzIGNvbXBvbmVudFxuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBDbGllbnRHbG9iYWxDb25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBkZXF1YWwgfSBmcm9tICdkZXF1YWwvbGl0ZSdcbmltcG9ydCB7XG4gIGZvcm1hdEFkbWluVVJMLFxuICBnZXRBdXRvc2F2ZUludGVydmFsLFxuICBoYXNEcmFmdFZhbGlkYXRpb25FbmFibGVkLFxuICByZWR1Y2VGaWVsZHNUb1ZhbHVlcyxcbn0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QsIHsgdXNlRGVmZXJyZWRWYWx1ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgT25TYXZlQ29udGV4dCB9IGZyb20gJy4uLy4uL3ZpZXdzL0VkaXQvaW5kZXguanMnXG5cbmltcG9ydCB7XG4gIHVzZUFsbEZvcm1GaWVsZHMsXG4gIHVzZUZvcm0sXG4gIHVzZUZvcm1Nb2RpZmllZCxcbiAgdXNlRm9ybVN1Ym1pdHRlZCxcbn0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlRGVib3VuY2UgfSBmcm9tICcuLi8uLi9ob29rcy91c2VEZWJvdW5jZS5qcydcbmltcG9ydCB7IHVzZUVmZmVjdEV2ZW50IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRWZmZWN0RXZlbnQuanMnXG5pbXBvcnQgeyB1c2VRdWV1ZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVF1ZXVlLmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBmb3JtYXRUaW1lVG9Ob3cgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvZm9ybWF0RGF0ZVRpdGxlLmpzJ1xuaW1wb3J0IHsgcmVkdWNlRmllbGRzVG9WYWx1ZXNXaXRoVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9yZWR1Y2VGaWVsZHNUb1ZhbHVlc1dpdGhWYWxpZGF0aW9uLmpzJ1xuaW1wb3J0IHsgTGVhdmVXaXRob3V0U2F2aW5nIH0gZnJvbSAnLi4vTGVhdmVXaXRob3V0U2F2aW5nL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdhdXRvc2F2ZSdcbi8vIFRoZSBtaW5pbXVtIHRpbWUgdGhlIHNhdmluZyBzdGF0ZSBzaG91bGQgYmUgc2hvd25cbmNvbnN0IG1pbmltdW1BbmltYXRpb25UaW1lID0gMTAwMFxuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgY29sbGVjdGlvbj86IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgZ2xvYmFsPzogQ2xpZW50R2xvYmFsQ29uZmlnXG4gIGlkPzogbnVtYmVyIHwgc3RyaW5nXG4gIHB1Ymxpc2hlZERvY1VwZGF0ZWRBdDogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBBdXRvc2F2ZTogUmVhY3QuRkM8UHJvcHM+ID0gKHsgaWQsIGNvbGxlY3Rpb24sIGdsb2JhbDogZ2xvYmFsRG9jIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbmZpZzoge1xuICAgICAgcm91dGVzOiB7IGFwaSB9LFxuICAgIH0sXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IHtcbiAgICBkb2NDb25maWcsXG4gICAgbGFzdFVwZGF0ZVRpbWUsXG4gICAgbW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZCxcbiAgICBzZXRNb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkLFxuICAgIHNldFVucHVibGlzaGVkVmVyc2lvbkNvdW50LFxuICB9ID0gdXNlRG9jdW1lbnRJbmZvKClcblxuICBjb25zdCB7IGlzVmFsaWQsIHNldEJhY2tncm91bmRQcm9jZXNzaW5nLCBzdWJtaXQgfSA9IHVzZUZvcm0oKVxuXG4gIGNvbnN0IFtmb3JtU3RhdGVdID0gdXNlQWxsRm9ybUZpZWxkcygpXG4gIGNvbnN0IG1vZGlmaWVkID0gdXNlRm9ybU1vZGlmaWVkKClcbiAgY29uc3Qgc3VibWl0dGVkID0gdXNlRm9ybVN1Ym1pdHRlZCgpXG5cbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IGludGVydmFsID0gZ2V0QXV0b3NhdmVJbnRlcnZhbChkb2NDb25maWcpXG4gIGNvbnN0IHZhbGlkYXRlT25EcmFmdCA9IGhhc0RyYWZ0VmFsaWRhdGlvbkVuYWJsZWQoZG9jQ29uZmlnKVxuXG4gIGNvbnN0IFtfc2F2aW5nLCBzZXRTYXZpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3Qgc2F2aW5nID0gdXNlRGVmZXJyZWRWYWx1ZShfc2F2aW5nKVxuXG4gIGNvbnN0IGRlYm91bmNlZEZvcm1TdGF0ZSA9IHVzZURlYm91bmNlKGZvcm1TdGF0ZSwgaW50ZXJ2YWwpXG5cbiAgY29uc3QgeyBxdWV1ZVRhc2sgfSA9IHVzZVF1ZXVlKClcblxuICBjb25zdCBhdXRvc2F2ZVRpbWVvdXRSZWYgPSB1c2VSZWY8Tm9kZUpTLlRpbWVvdXQgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZUF1dG9zYXZlID0gdXNlRWZmZWN0RXZlbnQoKCkgPT4ge1xuICAgIGF1dG9zYXZlVGltZW91dFJlZi5jdXJyZW50ID0gdW5kZWZpbmVkXG4gICAgLy8gV2UgbmVlZCB0byBsb2cgdGhlIHRpbWUgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHRyaWdnZXIgdGhlIHN0YXRlIG9mZiBsYXRlclxuICAgIGxldCBzdGFydFRpbWVzdGFtcCA9IHVuZGVmaW5lZFxuICAgIGxldCBlbmRUaW1lc3RhbXAgPSB1bmRlZmluZWRcblxuICAgIGNvbnN0IGhpZGVJbmRpY2F0b3IgPSAoKSA9PiB7XG4gICAgICAvLyBJZiByZXF1ZXN0IHdhcyBmYXN0ZXIgdGhhbiBtaW5pbXVtIGFuaW1hdGlvbiB0aW1lLCBhbmltYXRlIHRoZSBkaWZmZXJlbmNlXG4gICAgICBpZiAoZW5kVGltZXN0YW1wIC0gc3RhcnRUaW1lc3RhbXAgPCBtaW5pbXVtQW5pbWF0aW9uVGltZSkge1xuICAgICAgICBhdXRvc2F2ZVRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgc2V0U2F2aW5nKGZhbHNlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWluaW11bUFuaW1hdGlvblRpbWUgLSAoZW5kVGltZXN0YW1wIC0gc3RhcnRUaW1lc3RhbXApLFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wQXV0b1NhdmVJbmRpY2F0b3IoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXVlVGFzayhcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKG1vZGlmaWVkKSB7XG4gICAgICAgICAgc3RhcnRUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuXG4gICAgICAgICAgc2V0U2F2aW5nKHRydWUpXG5cbiAgICAgICAgICBsZXQgdXJsOiBzdHJpbmdcbiAgICAgICAgICBsZXQgbWV0aG9kOiBzdHJpbmdcbiAgICAgICAgICBsZXQgZW50aXR5U2x1Zzogc3RyaW5nXG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gcXMuc3RyaW5naWZ5KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhdXRvc2F2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgICAgIGRyYWZ0OiB0cnVlLFxuICAgICAgICAgICAgICAnZmFsbGJhY2stbG9jYWxlJzogJ251bGwnLFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRRdWVyeVByZWZpeDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgaWQpIHtcbiAgICAgICAgICAgIGVudGl0eVNsdWcgPSBjb2xsZWN0aW9uLnNsdWdcbiAgICAgICAgICAgIHVybCA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgICAgICAgcGF0aDogYC8ke2VudGl0eVNsdWd9LyR7aWR9JHtwYXJhbXN9YCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBtZXRob2QgPSAnUEFUQ0gnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdsb2JhbERvYykge1xuICAgICAgICAgICAgZW50aXR5U2x1ZyA9IGdsb2JhbERvYy5zbHVnXG4gICAgICAgICAgICB1cmwgPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICAgIGFwaVJvdXRlOiBhcGksXG4gICAgICAgICAgICAgIHBhdGg6IGAvZ2xvYmFscy8ke2VudGl0eVNsdWd9JHtwYXJhbXN9YCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBtZXRob2QgPSAnUE9TVCdcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IHZhbGlkIH0gPSByZWR1Y2VGaWVsZHNUb1ZhbHVlc1dpdGhWYWxpZGF0aW9uKGZvcm1TdGF0ZSwgdHJ1ZSlcblxuICAgICAgICAgIGNvbnN0IHNraXBTdWJtaXNzaW9uID0gc3VibWl0dGVkICYmICF2YWxpZCAmJiB2YWxpZGF0ZU9uRHJhZnRcblxuICAgICAgICAgIGlmICghc2tpcFN1Ym1pc3Npb24gJiYgbW9kaWZpZWQgJiYgdXJsKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXQ8YW55LCBPblNhdmVDb250ZXh0Pih7XG4gICAgICAgICAgICAgIGFjY2VwdFZhbHVlczoge1xuICAgICAgICAgICAgICAgIG92ZXJyaWRlTG9jYWxDaGFuZ2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0aW9uOiB1cmwsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBnZXREb2NQZXJtaXNzaW9uczogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5jcmVtZW50VmVyc2lvbkNvdW50OiAhbW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGlzYWJsZUZvcm1XaGlsZVByb2Nlc3Npbmc6IGZhbHNlLFxuICAgICAgICAgICAgICBkaXNhYmxlU3VjY2Vzc1N0YXR1czogdHJ1ZSxcbiAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgICAgICAgICBfc3RhdHVzOiAnZHJhZnQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbjogIXZhbGlkYXRlT25EcmFmdCxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Py5yZXM/Lm9rICYmICFtb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkKSB7XG4gICAgICAgICAgICAgIHNldE1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQodHJ1ZSlcbiAgICAgICAgICAgICAgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnQoKHByZXYpID0+IHByZXYgKyAxKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoKVxuXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGxvZyB0aGUgdGltZSBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gdHJpZ2dlciB0aGUgc3RhdGUgb2ZmIGxhdGVyXG4gICAgICAgICAgICBlbmRUaW1lc3RhbXAgPSBuZXdEYXRlLmdldFRpbWUoKVxuXG4gICAgICAgICAgICBoaWRlSW5kaWNhdG9yKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFmdGVyUHJvY2VzczogKCkgPT4ge1xuICAgICAgICAgIHNldEJhY2tncm91bmRQcm9jZXNzaW5nKGZhbHNlKVxuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVQcm9jZXNzOiAoKSA9PiB7XG4gICAgICAgICAgc2V0QmFja2dyb3VuZFByb2Nlc3NpbmcodHJ1ZSlcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICB9KVxuXG4gIGNvbnN0IGRpZE1vdW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBwcmV2aW91c0RlYm91bmNlZERhdGEgPSB1c2VSZWYocmVkdWNlRmllbGRzVG9WYWx1ZXMoZGVib3VuY2VkRm9ybVN0YXRlKSlcblxuICAvLyBXaGVuIGRlYm91bmNlZCBmaWVsZHMgY2hhbmdlLCBhdXRvc2F2ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIEVuc3VyZSBhdXRvc2F2ZSBkb2Vzbid0IHJ1biBvbiBtb3VudFxuICAgICAqL1xuICAgIGlmICghZGlkTW91bnQuY3VycmVudCkge1xuICAgICAgZGlkTW91bnQuY3VycmVudCA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuc3VyZSBhdXRvc2F2ZSBvbmx5IHJ1bnMgaWYgdGhlIGZvcm0gZGF0YSBjaGFuZ2VzLCBub3QgZXZlcnkgdGltZSB0aGUgZW50aXJlIGZvcm0gc3RhdGUgY2hhbmdlc1xuICAgICAqIFJlbW92ZSBgdXBkYXRlZEF0YCBmcm9tIGNvbXBhcmlzb24gYXMgaXQgY2hhbmdlcyBvbiBldmVyeSBhdXRvc2F2ZSBpbnRlcnZhbC5cbiAgICAgKi9cbiAgICBjb25zdCB7IHVwZGF0ZWRBdDogXywgLi4uZm9ybURhdGEgfSA9IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGRlYm91bmNlZEZvcm1TdGF0ZSlcbiAgICBjb25zdCB7IHVwZGF0ZWRBdDogX18sIC4uLnByZXZGb3JtRGF0YSB9ID0gcHJldmlvdXNEZWJvdW5jZWREYXRhLmN1cnJlbnRcblxuICAgIGlmIChkZXF1YWwoZm9ybURhdGEsIHByZXZGb3JtRGF0YSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHByZXZpb3VzRGVib3VuY2VkRGF0YS5jdXJyZW50ID0gZm9ybURhdGFcblxuICAgIGhhbmRsZUF1dG9zYXZlKClcbiAgfSwgW2RlYm91bmNlZEZvcm1TdGF0ZV0pXG5cbiAgLyoqXG4gICAqIElmIGNvbXBvbmVudCB1bm1vdW50cywgY2xlYXIgdGhlIGF1dG9zYXZlIHRpbWVvdXRcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHN0b3BBdXRvU2F2ZUluZGljYXRvcigpXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBzdG9wQXV0b1NhdmVJbmRpY2F0b3IgPSB1c2VFZmZlY3RFdmVudCgoKSA9PiB7XG4gICAgaWYgKGF1dG9zYXZlVGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICBjbGVhclRpbWVvdXQoYXV0b3NhdmVUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfVxuXG4gICAgc2V0U2F2aW5nKGZhbHNlKVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICB7dmFsaWRhdGVPbkRyYWZ0ICYmICFpc1ZhbGlkICYmIDxMZWF2ZVdpdGhvdXRTYXZpbmcgLz59XG4gICAgICB7c2F2aW5nICYmIHQoJ2dlbmVyYWw6c2F2aW5nJyl9XG4gICAgICB7IXNhdmluZyAmJiBCb29sZWFuKGxhc3RVcGRhdGVUaW1lKSAmJiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB7dCgndmVyc2lvbjpsYXN0U2F2ZWRBZ28nLCB7XG4gICAgICAgICAgICBkaXN0YW5jZTogZm9ybWF0VGltZVRvTm93KHsgZGF0ZTogbGFzdFVwZGF0ZVRpbWUsIGkxOG4gfSksXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IERhdGEsIEZvcm1TdGF0ZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVuZmxhdHRlbiBhcyBmbGF0bGV5VW5mbGF0dGVuIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbnR5cGUgUmV0dXJuVHlwZSA9IHtcbiAgZGF0YTogRGF0YVxuICB2YWxpZDogYm9vbGVhblxufVxuXG4vKipcbiAqIFJlZHVjZSBmbGF0dGVuZWQgZm9ybSBmaWVsZHMgKEZpZWxkcykgdG8ganVzdCBtYXAgdG8gdGhlIHJlc3BlY3RpdmUgdmFsdWVzIGluc3RlYWQgb2YgdGhlIGZ1bGwgRm9ybUZpZWxkIG9iamVjdFxuICpcbiAqIEBwYXJhbSB1bmZsYXR0ZW4gVGhpcyBhbHNvIHVuZmxhdHRlbnMgdGhlIGRhdGEgaWYgYHVuZmxhdHRlbmAgaXMgdHJ1ZS4gVGhlIHVuZmxhdHRlbmVkIGRhdGEgc2hvdWxkIG1hdGNoIHRoZSBvcmlnaW5hbCBkYXRhIHN0cnVjdHVyZVxuICogQHBhcmFtIGlnbm9yZURpc2FibGVGb3JtRGF0YSAtIGlmIHRydWUsIHdpbGwgaW5jbHVkZSBmaWVsZHMgdGhhdCBoYXZlIGBkaXNhYmxlRm9ybURhdGFgIHNldCB0byB0cnVlLCBmb3IgZXhhbXBsZSwgYmxvY2tzIG9yIGFycmF5cyBmaWVsZHMuXG4gKlxuICovXG5leHBvcnQgY29uc3QgcmVkdWNlRmllbGRzVG9WYWx1ZXNXaXRoVmFsaWRhdGlvbiA9IChcbiAgZmllbGRzOiBGb3JtU3RhdGUsXG4gIHVuZmxhdHRlbj86IGJvb2xlYW4sXG4gIGlnbm9yZURpc2FibGVGb3JtRGF0YT86IGJvb2xlYW4sXG4pOiBSZXR1cm5UeXBlID0+IHtcbiAgY29uc3Qgc3RhdGU6IFJldHVyblR5cGUgPSB7XG4gICAgZGF0YToge30sXG4gICAgdmFsaWQ6IHRydWUsXG4gIH1cblxuICBpZiAoIWZpZWxkcykge1xuICAgIHJldHVybiBzdGF0ZVxuICB9XG5cbiAgT2JqZWN0LmtleXMoZmllbGRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoaWdub3JlRGlzYWJsZUZvcm1EYXRhID09PSB0cnVlIHx8ICFmaWVsZHNba2V5XT8uZGlzYWJsZUZvcm1EYXRhKSB7XG4gICAgICBzdGF0ZS5kYXRhW2tleV0gPSBmaWVsZHNba2V5XT8udmFsdWVcbiAgICAgIGlmICghZmllbGRzW2tleV0udmFsaWQpIHtcbiAgICAgICAgc3RhdGUudmFsaWQgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBpZiAodW5mbGF0dGVuKSB7XG4gICAgc3RhdGUuZGF0YSA9IGZsYXRsZXlVbmZsYXR0ZW4oc3RhdGUuZGF0YSlcbiAgfVxuXG4gIHJldHVybiBzdGF0ZVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudERyYXdlckNvbnRleHRUeXBlIH0gZnJvbSAnLi4vRG9jdW1lbnREcmF3ZXIvUHJvdmlkZXIuanMnXG5cbmltcG9ydCB7IENoZWNrYm94SW5wdXQgfSBmcm9tICcuLi8uLi9maWVsZHMvQ2hlY2tib3gvSW5wdXQuanMnXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudFRpdGxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50VGl0bGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VSb3V0ZVRyYW5zaXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUm91dGVUcmFuc2l0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcGkuanMnXG5pbXBvcnQgeyBzaG91bGRQZXJtYW5lbnRseURlbGV0ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9zaG91bGRQZXJtYW5lbnRseURlbGV0ZS5qcydcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSAnLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgeyBQb3B1cExpc3QgfSBmcm9tICcuLi9Qb3B1cC9pbmRleC5qcydcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RlbGV0ZS1kb2N1bWVudCdcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGJ1dHRvbklkPzogc3RyaW5nXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25TbHVnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWydzbHVnJ11cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgb25EZWxldGU/OiBEb2N1bWVudERyYXdlckNvbnRleHRUeXBlWydvbkRlbGV0ZSddXG4gIHJlYWRvbmx5IHJlZGlyZWN0QWZ0ZXJEZWxldGU/OiBib29sZWFuXG4gIHJlYWRvbmx5IHNpbmd1bGFyTGFiZWw6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ2xhYmVscyddWydzaW5ndWxhciddXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nXG4gIHJlYWRvbmx5IHVzZUFzVGl0bGU6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ2FkbWluJ11bJ3VzZUFzVGl0bGUnXVxufVxuXG5leHBvcnQgY29uc3QgRGVsZXRlRG9jdW1lbnQ6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgYnV0dG9uSWQsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgb25EZWxldGUsXG4gICAgcmVkaXJlY3RBZnRlckRlbGV0ZSA9IHRydWUsXG4gICAgc2luZ3VsYXJMYWJlbCxcbiAgICB0aXRsZTogdGl0bGVGcm9tUHJvcHMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIHJvdXRlczogeyBhZG1pbjogYWRtaW5Sb3V0ZSwgYXBpIH0sXG4gICAgfSxcbiAgICBnZXRFbnRpdHlDb25maWcsXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuXG4gIGNvbnN0IHsgaGFzRGVsZXRlUGVybWlzc2lvbiwgaGFzVHJhc2hQZXJtaXNzaW9uIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuICBjb25zdCB7IHNldE1vZGlmaWVkIH0gPSB1c2VGb3JtKClcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgdGl0bGUgfSA9IHVzZURvY3VtZW50VGl0bGUoKVxuICBjb25zdCB7IHN0YXJ0Um91dGVUcmFuc2l0aW9uIH0gPSB1c2VSb3V0ZVRyYW5zaXRpb24oKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IG1vZGFsU2x1ZyA9IGBkZWxldGUtJHtpZH1gXG5cbiAgY29uc3QgW2RlbGV0ZVBlcm1hbmVudGx5LCBzZXREZWxldGVQZXJtYW5lbnRseV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBhZGREZWZhdWx0RXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6ZGVsZXRpbmdUaXRsZScsIHsgdGl0bGUgfSkpXG4gIH0sIFt0LCB0aXRsZV0pXG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldE1vZGlmaWVkKGZhbHNlKVxuXG4gICAgY29uc3QgcGVybWFuZW50bHlEZWxldGUgPSBzaG91bGRQZXJtYW5lbnRseURlbGV0ZSh7XG4gICAgICBkZWxldGVQZXJtYW5lbnRseSxcbiAgICAgIGhhc0RlbGV0ZVBlcm1pc3Npb24sXG4gICAgICBoYXNUcmFzaFBlcm1pc3Npb24sXG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgIGFwaVJvdXRlOiBhcGksXG4gICAgICAgIHBhdGg6IGAvJHtjb2xsZWN0aW9uU2x1Z30vJHtpZH1gLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IHBlcm1hbmVudGx5RGVsZXRlXG4gICAgICAgID8gYXdhaXQgcmVxdWVzdHMuZGVsZXRlKHVybCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBhd2FpdCByZXF1ZXN0cy5wYXRjaCh1cmwsIHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgZGVsZXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgIGlmIChyZXMuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgdChwZXJtYW5lbnRseURlbGV0ZSA/ICdnZW5lcmFsOnRpdGxlRGVsZXRlZCcgOiAnZ2VuZXJhbDp0aXRsZVRyYXNoZWQnLCB7XG4gICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oc2luZ3VsYXJMYWJlbCwgaTE4biksXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB9KSB8fCBqc29uLm1lc3NhZ2UsXG4gICAgICAgIClcblxuICAgICAgICBpZiAocmVkaXJlY3RBZnRlckRlbGV0ZSkge1xuICAgICAgICAgIHJldHVybiBzdGFydFJvdXRlVHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgcm91dGVyLnB1c2goZm9ybWF0QWRtaW5VUkwoeyBhZG1pblJvdXRlLCBwYXRoOiBgL2NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvblNsdWd9YCB9KSksXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvbkRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGF3YWl0IG9uRGVsZXRlKHsgaWQsIGNvbGxlY3Rpb25Db25maWcgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoanNvbi5lcnJvcnMpIHtcbiAgICAgICAganNvbi5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHRvYXN0LmVycm9yKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkRGVmYXVsdEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgcmV0dXJuIGFkZERlZmF1bHRFcnJvcigpXG4gICAgfVxuICB9LCBbXG4gICAgZGVsZXRlUGVybWFuZW50bHksXG4gICAgc2V0TW9kaWZpZWQsXG4gICAgaGFzRGVsZXRlUGVybWlzc2lvbixcbiAgICBoYXNUcmFzaFBlcm1pc3Npb24sXG4gICAgYXBpLFxuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGlkLFxuICAgIHQsXG4gICAgc2luZ3VsYXJMYWJlbCxcbiAgICBhZGREZWZhdWx0RXJyb3IsXG4gICAgaTE4bixcbiAgICB0aXRsZSxcbiAgICByb3V0ZXIsXG4gICAgYWRtaW5Sb3V0ZSxcbiAgICByZWRpcmVjdEFmdGVyRGVsZXRlLFxuICAgIG9uRGVsZXRlLFxuICAgIGNvbGxlY3Rpb25Db25maWcsXG4gICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24sXG4gIF0pXG5cbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICBpZD17YnV0dG9uSWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgb3Blbk1vZGFsKG1vZGFsU2x1ZylcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3QoJ2dlbmVyYWw6ZGVsZXRlJyl9XG4gICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICAgICAgYm9keT17XG4gICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgIDxUcmFuc2xhdGlvblxuICAgICAgICAgICAgICAgIGVsZW1lbnRzPXt7XG4gICAgICAgICAgICAgICAgICAnMSc6ICh7IGNoaWxkcmVuIH0pID0+IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPixcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGkxOG5LZXk9e1xuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbkNvbmZpZy50cmFzaCAmJiBoYXNUcmFzaFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICAgICAgPyAnZ2VuZXJhbDphYm91dFRvVHJhc2gnXG4gICAgICAgICAgICAgICAgICAgIDogJ2dlbmVyYWw6YWJvdXRUb0RlbGV0ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdD17dH1cbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM9e3tcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihzaW5ndWxhckxhYmVsLCBpMThuKSxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZUZyb21Qcm9wcyB8fCB0aXRsZSB8fCBpZCxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7Y29sbGVjdGlvbkNvbmZpZy50cmFzaCAmJiBoYXNUcmFzaFBlcm1pc3Npb24gJiYgaGFzRGVsZXRlUGVybWlzc2lvbiAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NoZWNrYm94YH0+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hJbnB1dFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtkZWxldGVQZXJtYW5lbnRseX1cbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJkZWxldGUtZm9yZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXt0KCdnZW5lcmFsOmRlbGV0ZVBlcm1hbmVudGx5Jyl9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZWxldGUtZm9yZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlPXsoZSkgPT4gc2V0RGVsZXRlUGVybWFuZW50bHkoZS50YXJnZXQuY2hlY2tlZCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICAgICAgY29uZmlybWluZ0xhYmVsPXt0KCdnZW5lcmFsOmRlbGV0aW5nJyl9XG4gICAgICAgICAgaGVhZGluZz17dCgnZ2VuZXJhbDpjb25maXJtRGVsZXRpb24nKX1cbiAgICAgICAgICBtb2RhbFNsdWc9e21vZGFsU2x1Z31cbiAgICAgICAgICBvbkNvbmZpcm09e2hhbmRsZURlbGV0ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwsIGhhc0RyYWZ0c0VuYWJsZWQgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB0eXBlIHsgRG9jdW1lbnREcmF3ZXJDb250ZXh0VHlwZSB9IGZyb20gJy4uL0RvY3VtZW50RHJhd2VyL1Byb3ZpZGVyLmpzJ1xuXG5pbXBvcnQgeyB1c2VGb3JtLCB1c2VGb3JtTW9kaWZpZWQgfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZVRyYW5zaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaS5qcydcbmltcG9ydCB7IHRyYXZlcnNlRm9yTG9jYWxpemVkRmllbGRzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3RyYXZlcnNlRm9yTG9jYWxpemVkRmllbGRzLmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcbmltcG9ydCB7IFBvcHVwTGlzdCB9IGZyb20gJy4uL1BvcHVwL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VsZWN0TG9jYWxlc0RyYXdlciB9IGZyb20gJy4vU2VsZWN0TG9jYWxlc0RyYXdlci9pbmRleC5qcydcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgcmVhZG9ubHkgb25EdXBsaWNhdGU/OiBEb2N1bWVudERyYXdlckNvbnRleHRUeXBlWydvbkR1cGxpY2F0ZSddXG4gIHJlYWRvbmx5IHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGU/OiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdExvY2FsZXM/OiBib29sZWFuXG4gIHJlYWRvbmx5IHNpbmd1bGFyTGFiZWw6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ2xhYmVscyddWydzaW5ndWxhciddXG4gIHJlYWRvbmx5IHNsdWc6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRHVwbGljYXRlRG9jdW1lbnQ6IFJlYWN0LkZDPFByb3BzPiA9ICh7XG4gIGlkLFxuICBzbHVnLFxuICBvbkR1cGxpY2F0ZSxcbiAgcmVkaXJlY3RBZnRlckR1cGxpY2F0ZSA9IHRydWUsXG4gIHNlbGVjdExvY2FsZXMsXG4gIHNpbmd1bGFyTGFiZWwsXG59KSA9PiB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IG1vZGlmaWVkID0gdXNlRm9ybU1vZGlmaWVkKClcbiAgY29uc3QgeyBvcGVuTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGVDb2RlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IHNldE1vZGlmaWVkIH0gPSB1c2VGb3JtKClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICBsb2NhbGl6YXRpb24sXG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUsIGFwaTogYXBpUm91dGUgfSxcbiAgICB9LFxuICAgIGdldEVudGl0eUNvbmZpZyxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnOiBzbHVnIH0pXG5cbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgbW9kYWxTbHVnID0gYGR1cGxpY2F0ZS0ke2lkfWBcbiAgY29uc3QgZHJhd2VyU2x1ZyA9IGBkdXBsaWNhdGUtbG9jYWxlcy0ke2lkfWBcblxuICBjb25zdCBpc0R1cGxpY2F0ZUJ5TG9jYWxlRW5hYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChzZWxlY3RMb2NhbGVzICYmIGNvbGxlY3Rpb25Db25maWcpIHtcbiAgICAgIHJldHVybiB0cmF2ZXJzZUZvckxvY2FsaXplZEZpZWxkcyhjb2xsZWN0aW9uQ29uZmlnLmZpZWxkcylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sIFtjb2xsZWN0aW9uQ29uZmlnLCBzZWxlY3RMb2NhbGVzXSlcblxuICBjb25zdCBoYW5kbGVEdXBsaWNhdGUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoYXJncz86IHsgc2VsZWN0ZWRMb2NhbGVzPzogc3RyaW5nW10gfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZWxlY3RlZExvY2FsZXMgfSA9IGFyZ3MgfHwge31cbiAgICAgIGNvbnN0IGhhc1NlbGVjdGVkTG9jYWxlcyA9IHNlbGVjdGVkTG9jYWxlcyAmJiBzZWxlY3RlZExvY2FsZXMubGVuZ3RoID4gMFxuXG4gICAgICBjb25zdCBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+ID0ge31cbiAgICAgIGlmIChsb2NhbGVDb2RlKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLmxvY2FsZSA9IGxvY2FsZUNvZGVcbiAgICAgIH1cbiAgICAgIGlmIChoYXNTZWxlY3RlZExvY2FsZXMpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2VsZWN0ZWRMb2NhbGVzID0gc2VsZWN0ZWRMb2NhbGVzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZXF1ZXN0cy5wb3N0KFxuICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgICAgcGF0aDogYC8ke3NsdWd9LyR7aWR9L2R1cGxpY2F0ZSR7cXMuc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zLCB7XG4gICAgICAgICAgICAgIGFkZFF1ZXJ5UHJlZml4OiB0cnVlLFxuICAgICAgICAgICAgfSl9YCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShoYXNEcmFmdHNFbmFibGVkKGNvbGxlY3Rpb25Db25maWcpID8geyBfc3RhdHVzOiAnZHJhZnQnIH0gOiB7fSksXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCB7IGRvYywgZXJyb3JzLCBtZXNzYWdlIH0gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgbWVzc2FnZSB8fFxuICAgICAgICAgICAgICB0KCdnZW5lcmFsOnN1Y2Nlc3NmdWxseUR1cGxpY2F0ZWQnLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihzaW5ndWxhckxhYmVsLCBpMThuKSB9KSxcbiAgICAgICAgICApXG5cbiAgICAgICAgICBzZXRNb2RpZmllZChmYWxzZSlcblxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyRHVwbGljYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT5cbiAgICAgICAgICAgICAgcm91dGVyLnB1c2goXG4gICAgICAgICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZSxcbiAgICAgICAgICAgICAgICAgIHBhdGg6IGAvY29sbGVjdGlvbnMvJHtzbHVnfS8ke2RvYy5pZH0ke2xvY2FsZUNvZGUgPyBgP2xvY2FsZT0ke2xvY2FsZUNvZGV9YCA6ICcnfWAsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvbkR1cGxpY2F0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdm9pZCBvbkR1cGxpY2F0ZSh7IGNvbGxlY3Rpb25Db25maWcsIGRvYyB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgICAgIGVycm9ycz8uWzBdLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgbWVzc2FnZSB8fFxuICAgICAgICAgICAgICB0KCdlcnJvcjp1bnNwZWNpZmljJywgeyBsYWJlbDogZ2V0VHJhbnNsYXRpb24oc2luZ3VsYXJMYWJlbCwgaTE4bikgfSksXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6dW5zcGVjaWZpYycsIHsgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHNpbmd1bGFyTGFiZWwsIGkxOG4pIH0pKVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRtaW5Sb3V0ZSxcbiAgICAgIGFwaVJvdXRlLFxuICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIGkxOG4sXG4gICAgICBpZCxcbiAgICAgIGxvY2FsZUNvZGUsXG4gICAgICBvbkR1cGxpY2F0ZSxcbiAgICAgIHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGUsXG4gICAgICByb3V0ZXIsXG4gICAgICBzZXRNb2RpZmllZCxcbiAgICAgIHNpbmd1bGFyTGFiZWwsXG4gICAgICBzbHVnLFxuICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24sXG4gICAgICB0LFxuICAgIF0sXG4gIClcblxuICBjb25zdCBoYW5kbGVDb25maXJtV2l0aG91dFNhdmluZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoc2VsZWN0TG9jYWxlcykge1xuICAgICAgb3Blbk1vZGFsKGRyYXdlclNsdWcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGhhbmRsZUR1cGxpY2F0ZSgpXG4gICAgfVxuICB9LCBbaGFuZGxlRHVwbGljYXRlLCBkcmF3ZXJTbHVnLCBzZWxlY3RMb2NhbGVzLCBvcGVuTW9kYWxdKVxuXG4gIGNvbnN0IGJ1dHRvbkxhYmVsID0gc2VsZWN0TG9jYWxlc1xuICAgID8gYCR7dCgnZ2VuZXJhbDpkdXBsaWNhdGUnKX0gJHt0KCdsb2NhbGl6YXRpb246c2VsZWN0ZWRMb2NhbGVzJyl9YFxuICAgIDogdCgnZ2VuZXJhbDpkdXBsaWNhdGUnKVxuXG4gIGlmICghc2VsZWN0TG9jYWxlcyB8fCBpc0R1cGxpY2F0ZUJ5TG9jYWxlRW5hYmxlZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgICAgaWQ9e2BhY3Rpb24tZHVwbGljYXRlJHtpc0R1cGxpY2F0ZUJ5TG9jYWxlRW5hYmxlZCA/IGAtbG9jYWxlc2AgOiAnJ31gfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgICBvcGVuTW9kYWwobW9kYWxTbHVnKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RMb2NhbGVzKSB7XG4gICAgICAgICAgICAgIG9wZW5Nb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdm9pZCBoYW5kbGVEdXBsaWNhdGUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YnV0dG9uTGFiZWx9XG4gICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICAgICAgYm9keT17dCgnZ2VuZXJhbDp1bnNhdmVkQ2hhbmdlc0R1cGxpY2F0ZScpfVxuICAgICAgICAgIGNvbmZpcm1MYWJlbD17dCgnZ2VuZXJhbDpkdXBsaWNhdGVXaXRob3V0U2F2aW5nJyl9XG4gICAgICAgICAgaGVhZGluZz17dCgnZ2VuZXJhbDp1bnNhdmVkQ2hhbmdlcycpfVxuICAgICAgICAgIG1vZGFsU2x1Zz17bW9kYWxTbHVnfVxuICAgICAgICAgIG9uQ29uZmlybT17aGFuZGxlQ29uZmlybVdpdGhvdXRTYXZpbmd9XG4gICAgICAgIC8+XG4gICAgICAgIHtzZWxlY3RMb2NhbGVzICYmIGxvY2FsaXphdGlvbiAmJiAoXG4gICAgICAgICAgPFNlbGVjdExvY2FsZXNEcmF3ZXJcbiAgICAgICAgICAgIGxvY2FsaXphdGlvbj17bG9jYWxpemF0aW9ufVxuICAgICAgICAgICAgb25Db25maXJtPXtoYW5kbGVEdXBsaWNhdGV9XG4gICAgICAgICAgICBzbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudEZpZWxkLCBGaWVsZCB9IGZyb20gJ3BheWxvYWQnXG5cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZUZvckxvY2FsaXplZEZpZWxkcyA9IChmaWVsZHM6IENsaWVudEZpZWxkW10gfCBGaWVsZFtdKTogYm9vbGVhbiA9PiB7XG4gIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgaWYgKCdsb2NhbGl6ZWQnIGluIGZpZWxkICYmIGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ2NvbGxhcHNpYmxlJzpcbiAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgIGNhc2UgJ3Jvdyc6XG4gICAgICAgIGlmIChmaWVsZC5maWVsZHMgJiYgdHJhdmVyc2VGb3JMb2NhbGl6ZWRGaWVsZHMoZmllbGQuZmllbGRzKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnYmxvY2tzJzpcbiAgICAgICAgaWYgKGZpZWxkLmJsb2Nrcykge1xuICAgICAgICAgIGZvciAoY29uc3QgYmxvY2sgb2YgZmllbGQuYmxvY2tzKSB7XG4gICAgICAgICAgICBpZiAoYmxvY2suZmllbGRzICYmIHRyYXZlcnNlRm9yTG9jYWxpemVkRmllbGRzKGJsb2NrLmZpZWxkcykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAndGFicyc6XG4gICAgICAgIGlmIChmaWVsZC50YWJzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgZmllbGQudGFicykge1xuICAgICAgICAgICAgaWYgKCdsb2NhbGl6ZWQnIGluIHRhYiAmJiB0YWIubG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2ZpZWxkcycgaW4gdGFiICYmIHRhYi5maWVsZHMgJiYgdHJhdmVyc2VGb3JMb2NhbGl6ZWRGaWVsZHModGFiLmZpZWxkcykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IEkxOG5DbGllbnQgfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbmZpZyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyBzZXRzQXJlRXF1YWwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9DaGVja2JveC9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VySGVhZGVyIH0gZnJvbSAnLi4vLi4vQnVsa1VwbG9hZC9IZWFkZXIvaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBEcmF3ZXIgfSBmcm9tICcuLi8uLi9EcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHR5cGUgTG9jYWxlT3B0aW9uID0ge1xuICBsYWJlbDogc3RyaW5nXG4gIHZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgU2VsZWN0TG9jYWxlc0RyYXdlclByb3BzID0ge1xuICByZWFkb25seSBsb2NhbGl6YXRpb246IEV4Y2x1ZGU8Q2xpZW50Q29uZmlnWydsb2NhbGl6YXRpb24nXSwgZmFsc2U+XG4gIHJlYWRvbmx5IG9uQ29uZmlybTogKGFyZ3M6IHsgc2VsZWN0ZWRMb2NhbGVzOiBzdHJpbmdbXSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICByZWFkb25seSBzbHVnOiBzdHJpbmdcbn1cblxuY29uc3QgZ2V0TG9jYWxlT3B0aW9ucyA9ICh7XG4gIGkxOG4sXG4gIGxvY2FsaXphdGlvbixcbn06IHtcbiAgaTE4bjogSTE4bkNsaWVudFxuICBsb2NhbGl6YXRpb246IFNlbGVjdExvY2FsZXNEcmF3ZXJQcm9wc1snbG9jYWxpemF0aW9uJ11cbn0pOiBMb2NhbGVPcHRpb25bXSA9PiB7XG4gIHJldHVybiBsb2NhbGl6YXRpb24ubG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gKHtcbiAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24obG9jYWxlLmxhYmVsLCBpMThuKSxcbiAgICB2YWx1ZTogbG9jYWxlLmNvZGUsXG4gIH0pKVxufVxuXG5jb25zdCBiYXNlQ2xhc3MgPSAnc2VsZWN0LWxvY2FsZXMtZHJhd2VyJ1xuXG5leHBvcnQgY29uc3QgU2VsZWN0TG9jYWxlc0RyYXdlcjogUmVhY3QuRkM8U2VsZWN0TG9jYWxlc0RyYXdlclByb3BzPiA9ICh7XG4gIHNsdWcsXG4gIGxvY2FsaXphdGlvbixcbiAgb25Db25maXJtLFxufSkgPT4ge1xuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyB0b2dnbGVNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCBbc2VsZWN0ZWRMb2NhbGVzLCBzZXRTZWxlY3RlZExvY2FsZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKVxuXG4gIGNvbnN0IGxvY2FsZU9wdGlvbnMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldExvY2FsZU9wdGlvbnMoeyBpMThuLCBsb2NhbGl6YXRpb24gfSksXG4gICAgW2xvY2FsaXphdGlvbiwgaTE4bl0sXG4gIClcbiAgY29uc3QgYWxsTG9jYWxlcyA9IHVzZU1lbW8oKCkgPT4gbG9jYWxlT3B0aW9ucy5tYXAoKGxvY2FsZSkgPT4gbG9jYWxlLnZhbHVlKSwgW2xvY2FsZU9wdGlvbnNdKVxuICBjb25zdCBhbGxMb2NhbGVzU2VsZWN0ZWQgPSB1c2VNZW1vKFxuICAgICgpID0+IHNldHNBcmVFcXVhbChuZXcgU2V0KHNlbGVjdGVkTG9jYWxlcyksIG5ldyBTZXQoYWxsTG9jYWxlcykpLFxuICAgIFtzZWxlY3RlZExvY2FsZXMsIGFsbExvY2FsZXNdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkTG9jYWxlcyhhbGxMb2NhbGVzU2VsZWN0ZWQgPyBbXSA6IFsuLi5hbGxMb2NhbGVzXSlcbiAgfSwgW2FsbExvY2FsZXNTZWxlY3RlZCwgYWxsTG9jYWxlc10pXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlTG9jYWxlID0gdXNlQ2FsbGJhY2soKGxvY2FsZVZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXRTZWxlY3RlZExvY2FsZXMoKHByZXYpID0+XG4gICAgICBwcmV2LmluY2x1ZGVzKGxvY2FsZVZhbHVlKSA/IHByZXYuZmlsdGVyKChsKSA9PiBsICE9PSBsb2NhbGVWYWx1ZSkgOiBbLi4ucHJldiwgbG9jYWxlVmFsdWVdLFxuICAgIClcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBvbkNvbmZpcm0oeyBzZWxlY3RlZExvY2FsZXMgfSlcbiAgICB0b2dnbGVNb2RhbChzbHVnKVxuICB9LCBbb25Db25maXJtLCBzZWxlY3RlZExvY2FsZXMsIHNsdWcsIHRvZ2dsZU1vZGFsXSlcblxuICByZXR1cm4gKFxuICAgIDxEcmF3ZXJcbiAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgZ3V0dGVyPXtmYWxzZX1cbiAgICAgIEhlYWRlcj17XG4gICAgICAgIDxEcmF3ZXJIZWFkZXJcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICB0b2dnbGVNb2RhbChzbHVnKVxuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9e2Ake3QoJ2dlbmVyYWw6ZHVwbGljYXRlJyl9ICR7dCgnbG9jYWxpemF0aW9uOnNlbGVjdGVkTG9jYWxlcycpfWB9XG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgICBzbHVnPXtzbHVnfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zdWItaGVhZGVyYH0+XG4gICAgICAgIDxzcGFuPnt0KCdsb2NhbGl6YXRpb246c2VsZWN0TG9jYWxlVG9EdXBsaWNhdGUnKX08L3NwYW4+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBidXR0b25TdHlsZT1cInByaW1hcnlcIlxuICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZExvY2FsZXMubGVuZ3RoID09PSAwfVxuICAgICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgIGlkPVwiI2FjdGlvbi1kdXBsaWNhdGUtY29uZmlybVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQ29uZmlybX1cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt0KCdnZW5lcmFsOmR1cGxpY2F0ZScpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2l0ZW1gfT5cbiAgICAgICAgICA8Q2hlY2tib3hJbnB1dFxuICAgICAgICAgICAgY2hlY2tlZD17YWxsTG9jYWxlc1NlbGVjdGVkfVxuICAgICAgICAgICAgaWQ9XCJzZWxlY3QtbG9jYWxlLWFsbFwiXG4gICAgICAgICAgICBsYWJlbD17dCgnZ2VuZXJhbDpzZWxlY3RBbGwnLCB7XG4gICAgICAgICAgICAgIGNvdW50OiBhbGxMb2NhbGVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgbGFiZWw6IHQoJ2dlbmVyYWw6bG9jYWxlcycpLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBvblRvZ2dsZT17aGFuZGxlU2VsZWN0QWxsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7bG9jYWxlT3B0aW9ucy5tYXAoKGxvY2FsZSkgPT4gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pdGVtYH0ga2V5PXtsb2NhbGUudmFsdWV9PlxuICAgICAgICAgICAgPENoZWNrYm94SW5wdXRcbiAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0ZWRMb2NhbGVzLmluY2x1ZGVzKGxvY2FsZS52YWx1ZSl9XG4gICAgICAgICAgICAgIGlkPXtgc2VsZWN0LWxvY2FsZS0ke2xvY2FsZS52YWx1ZX1gfVxuICAgICAgICAgICAgICBsYWJlbD17bG9jYWxlLmxhYmVsfVxuICAgICAgICAgICAgICBvblRvZ2dsZT17KCkgPT4gaGFuZGxlVG9nZ2xlTG9jYWxlKGxvY2FsZS52YWx1ZSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvRHJhd2VyPlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEV5ZUljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9FeWUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXZlUHJldmlld0NvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvTGl2ZVByZXZpZXcvY29udGV4dC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdsaXZlLXByZXZpZXctdG9nZ2xlcidcblxuZXhwb3J0IGNvbnN0IExpdmVQcmV2aWV3VG9nZ2xlcjogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgaXNMaXZlUHJldmlld2luZywgc2V0SXNMaXZlUHJldmlld2luZywgdXJsOiBsaXZlUHJldmlld1VSTCB9ID0gdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgaWYgKCFsaXZlUHJldmlld1VSTCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGFyaWEtbGFiZWw9e2lzTGl2ZVByZXZpZXdpbmcgPyB0KCdnZW5lcmFsOmV4aXRMaXZlUHJldmlldycpIDogdCgnZ2VuZXJhbDpsaXZlUHJldmlldycpfVxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBpc0xpdmVQcmV2aWV3aW5nICYmIGAke2Jhc2VDbGFzc30tLWFjdGl2ZWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICBpZD1cImxpdmUtcHJldmlldy10b2dnbGVyXCJcbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgc2V0SXNMaXZlUHJldmlld2luZyghaXNMaXZlUHJldmlld2luZylcbiAgICAgIH19XG4gICAgICB0aXRsZT17aXNMaXZlUHJldmlld2luZyA/IHQoJ2dlbmVyYWw6ZXhpdExpdmVQcmV2aWV3JykgOiB0KCdnZW5lcmFsOmxpdmVQcmV2aWV3Jyl9XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8RXllSWNvbiBhY3RpdmU9e2lzTGl2ZVByZXZpZXdpbmd9IC8+XG4gICAgPC9idXR0b24+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IEV5ZUljb246IFJlYWN0LkZDPHsgYWN0aXZlPzogYm9vbGVhbjsgY2xhc3NOYW1lPzogc3RyaW5nIH0+ID0gKHtcbiAgYWN0aXZlID0gdHJ1ZSxcbiAgY2xhc3NOYW1lLFxufSkgPT4gKFxuICA8c3ZnXG4gICAgY2xhc3NOYW1lPXtbY2xhc3NOYW1lLCAnaWNvbiBpY29uLS1leWUnXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgIHZpZXdCb3g9XCIwIDAgMTYgMTJcIlxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICA+XG4gICAgeyFhY3RpdmUgPyAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxjaXJjbGUgY2xhc3NOYW1lPVwic3Ryb2tlXCIgY3g9XCI4LjVcIiBjeT1cIjZcIiByPVwiMi41XCIgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdHJva2VcIlxuICAgICAgICAgIGQ9XCJNOC41IDFDMy44MzMzMyAxIDEuNSA2IDEuNSA2QzEuNSA2IDMuODMzMzMgMTEgOC41IDExQzEzLjE2NjcgMTEgMTUuNSA2IDE1LjUgNkMxNS41IDYgMTMuMTY2NyAxIDguNSAxWlwiXG4gICAgICAgIC8+XG4gICAgICA8L0ZyYWdtZW50PlxuICAgICkgOiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ryb2tlXCJcbiAgICAgICAgICBkPVwiTTIgMTEuNUw0LjM1MTQxIDkuNTEwMzVNMTUgMC41TDEyLjY0ODYgMi40ODk2NU0xMC45MTUgNi42NDg4N0MxMC42NDkzIDcuNjQwMTEgOS43ODk1OSA4LjM4ODMyIDguNzQwOCA4LjQ4ODU1TTEwLjQwODUgNC4zODUxMUM5Ljk0OTkyIDMuODQzNjkgOS4yNjUxIDMuNSA4LjUgMy41QzcuMTE5MjkgMy41IDYgNC42MTkyOSA2IDZDNiA2LjYxNTYxIDYuMjIyNTEgNy4xNzkyNiA2LjU5MTQ5IDcuNjE0ODlNMTAuNDA4NSA0LjM4NTExTDYuNTkxNDkgNy42MTQ4OU0xMC40MDg1IDQuMzg1MTFMMTIuNjQ4NiAyLjQ4OTY1TTYuNTkxNDkgNy42MTQ4OUw0LjM1MTQxIDkuNTEwMzVNMTQuMTI5MiAzLjkyOTE1QzE1LjA0MzEgNS4wMjA4NSAxNS41IDYgMTUuNSA2QzE1LjUgNiAxMy4xNjY3IDExIDguNSAxMUM3LjY3OTk1IDExIDYuOTMxOTUgMTAuODQ1NiA2LjI1NiAxMC41OTExTTQuMzUxNDEgOS41MTAzNUMyLjQ1MDQ3IDguMDM2NzIgMS41IDYgMS41IDZDMS41IDYgMy44MzMzMyAxIDguNSAxQzEwLjE4ODIgMSAxMS41NzExIDEuNjU0MzcgMTIuNjQ4NiAyLjQ4OTY1XCJcbiAgICAgICAgLz5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKX1cbiAgPC9zdmc+XG4pXG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xpZW50VXNlciB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBMb2NrSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL0xvY2svaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IGlzQ2xpZW50VXNlck9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9pc0NsaWVudFVzZXJPYmplY3QuanMnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnLi4vVG9vbHRpcC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbG9ja2VkJ1xuXG5leHBvcnQgY29uc3QgTG9ja2VkOiBSZWFjdC5GQzx7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICB1c2VyOiBDbGllbnRVc2VyXG59PiA9ICh7IGNsYXNzTmFtZSwgdXNlciB9KSA9PiB7XG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCB1c2VyVG9Vc2UgPSBpc0NsaWVudFVzZXJPYmplY3QodXNlcikgPyAodXNlci5lbWFpbCA/PyB1c2VyLmlkKSA6IHQoJ2dlbmVyYWw6YW5vdGhlclVzZXInKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICB0YWJJbmRleD17MH1cbiAgICA+XG4gICAgICA8VG9vbHRpcFxuICAgICAgICBhbGlnbkNhcmV0PVwibGVmdFwiXG4gICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdG9vbHRpcGB9XG4gICAgICAgIHBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgc2hvdz17aG92ZXJlZH1cbiAgICAgID57YCR7dXNlclRvVXNlfSAke3QoJ2dlbmVyYWw6aXNFZGl0aW5nJyl9YH08L1Rvb2x0aXA+XG4gICAgICA8TG9ja0ljb24gLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IExvY2tJY29uOiBSZWFjdC5GQzx7IGNsYXNzTmFtZT86IHN0cmluZyB9PiA9ICh7IGNsYXNzTmFtZSB9KSA9PiAoXG4gIDxzdmdcbiAgICBjbGFzc05hbWU9e1snaWNvbiBpY29uLS1sb2NrJywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgIGZpbGw9XCJub25lXCJcbiAgICBoZWlnaHQ9XCIyMFwiXG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgd2lkdGg9XCIyMFwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gID5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwic3Ryb2tlXCJcbiAgICAgIGQ9XCJNNy41IDkuNVY3LjVDNy41IDYuODM2OTYgNy43NjMzOSA2LjIwMTA3IDguMjMyMjMgNS43MzIyM0M4LjcwMTA3IDUuMjYzMzkgOS4zMzY5NiA1IDEwIDVDMTAuNjYzIDUgMTEuMjk4OSA1LjI2MzM5IDExLjc2NzggNS43MzIyM0MxMi4yMzY2IDYuMjAxMDcgMTIuNSA2LjgzNjk2IDEyLjUgNy41VjkuNVwiXG4gICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICBzdHJva2VPcGFjaXR5PVwiMVwiXG4gICAgLz5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwic3Ryb2tlXCJcbiAgICAgIGQ9XCJNMTMuNSA5LjVINi41QzUuOTQ3NzIgOS41IDUuNSA5Ljk0NzcyIDUuNSAxMC41VjE0QzUuNSAxNC41NTIzIDUuOTQ3NzIgMTUgNi41IDE1SDEzLjVDMTQuMDUyMyAxNSAxNC41IDE0LjU1MjMgMTQuNSAxNFYxMC41QzE0LjUgOS45NDc3MiAxNC4wNTIzIDkuNSAxMy41IDkuNVpcIlxuICAgICAgc3RvcE9wYWNpdHk9XCIxXCJcbiAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGUgfSBmcm9tICcuLi9Eb2N1bWVudERyYXdlci9Qcm92aWRlci5qcydcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50VGl0bGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRUaXRsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZVRyYW5zaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaS5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSAnLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgeyBUcmFuc2xhdGlvbiB9IGZyb20gJy4uL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgYnV0dG9uSWQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgY29sbGVjdGlvblNsdWc6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ3NsdWcnXVxuICByZWFkb25seSBpZD86IHN0cmluZ1xuICByZWFkb25seSBvbkRlbGV0ZT86IERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGVbJ29uRGVsZXRlJ11cbiAgcmVhZG9ubHkgcmVkaXJlY3RBZnRlckRlbGV0ZT86IGJvb2xlYW5cbiAgcmVhZG9ubHkgc2luZ3VsYXJMYWJlbDogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZ1snbGFiZWxzJ11bJ3Npbmd1bGFyJ11cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFBlcm1hbmVudGx5RGVsZXRlQnV0dG9uOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGJ1dHRvbklkLFxuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIG9uRGVsZXRlLFxuICAgIHJlZGlyZWN0QWZ0ZXJEZWxldGUgPSB0cnVlLFxuICAgIHNpbmd1bGFyTGFiZWwsXG4gICAgdGl0bGU6IHRpdGxlRnJvbVByb3BzLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUsIGFwaSB9LFxuICAgICAgc2VydmVyVVJMLFxuICAgIH0sXG4gICAgZ2V0RW50aXR5Q29uZmlnLFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWcgfSlcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgdGl0bGUgfSA9IHVzZURvY3VtZW50VGl0bGUoKVxuICBjb25zdCB7IHN0YXJ0Um91dGVUcmFuc2l0aW9uIH0gPSB1c2VSb3V0ZVRyYW5zaXRpb24oKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IG1vZGFsU2x1ZyA9IGBwZXJtYS1kZWxldGUtJHtpZH1gXG5cbiAgY29uc3QgYWRkRGVmYXVsdEVycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOmRlbGV0aW5nVGl0bGUnLCB7IHRpdGxlIH0pKVxuICB9LCBbdCwgdGl0bGVdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICBwYXRoOiBgLyR7Y29sbGVjdGlvblNsdWd9JHtxcy5zdHJpbmdpZnkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHJhc2g6IHRydWUsXG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICBhbmQ6IFt7IGlkOiB7IGVxdWFsczogaWQgfSB9LCB7IGRlbGV0ZWRBdDogeyBleGlzdHM6IHRydWUgfSB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRRdWVyeVByZWZpeDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICApfWAsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZXF1ZXN0cy5kZWxldGUodXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKClcblxuICAgICAgaWYgKHJlcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICB0KCdnZW5lcmFsOnRpdGxlRGVsZXRlZCcsIHtcbiAgICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihzaW5ndWxhckxhYmVsLCBpMThuKSxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIH0pIHx8IGpzb24ubWVzc2FnZSxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChyZWRpcmVjdEFmdGVyRGVsZXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+XG4gICAgICAgICAgICByb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGUsXG4gICAgICAgICAgICAgICAgcGF0aDogYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25TbHVnfS90cmFzaGAsXG4gICAgICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvbkRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGF3YWl0IG9uRGVsZXRlKHsgaWQsIGNvbGxlY3Rpb25Db25maWcgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoanNvbi5lcnJvcnMpIHtcbiAgICAgICAganNvbi5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHRvYXN0LmVycm9yKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkRGVmYXVsdEVycm9yKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICBhZGREZWZhdWx0RXJyb3IoKVxuICAgIH1cbiAgfSwgW1xuICAgIHNlcnZlclVSTCxcbiAgICBhcGksXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgaWQsXG4gICAgdCxcbiAgICBzaW5ndWxhckxhYmVsLFxuICAgIGFkZERlZmF1bHRFcnJvcixcbiAgICBpMThuLFxuICAgIHRpdGxlLFxuICAgIHJvdXRlcixcbiAgICBhZG1pblJvdXRlLFxuICAgIHJlZGlyZWN0QWZ0ZXJEZWxldGUsXG4gICAgb25EZWxldGUsXG4gICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICBzdGFydFJvdXRlVHJhbnNpdGlvbixcbiAgXSlcblxuICBpZiAoaWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIGlkPXtidXR0b25JZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBvcGVuTW9kYWwobW9kYWxTbHVnKVxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dCgnZ2VuZXJhbDpwZXJtYW5lbnRseURlbGV0ZScpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICAgICAgYm9keT17XG4gICAgICAgICAgICA8VHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgZWxlbWVudHM9e3tcbiAgICAgICAgICAgICAgICAnMSc6ICh7IGNoaWxkcmVuIH0pID0+IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgaTE4bktleT1cImdlbmVyYWw6YWJvdXRUb1Blcm1hbmVudGx5RGVsZXRlXCJcbiAgICAgICAgICAgICAgdD17dH1cbiAgICAgICAgICAgICAgdmFyaWFibGVzPXt7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHNpbmd1bGFyTGFiZWwsIGkxOG4pLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZUZyb21Qcm9wcyB8fCB0aXRsZSB8fCBpZCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpcm1pbmdMYWJlbD17dCgnZ2VuZXJhbDpkZWxldGluZycpfVxuICAgICAgICAgIGhlYWRpbmc9e3QoJ2dlbmVyYWw6Y29uZmlybURlbGV0aW9uJyl9XG4gICAgICAgICAgbW9kYWxTbHVnPXttb2RhbFNsdWd9XG4gICAgICAgICAgb25Db25maXJtPXtoYW5kbGVEZWxldGV9XG4gICAgICAgIC8+XG4gICAgICA8L0ZyYWdtZW50PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgUHJldmlld0J1dHRvbkNsaWVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBFeHRlcm5hbExpbmtJY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvRXh0ZXJuYWxMaW5rL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyB1c2VQcmV2aWV3VVJMIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xpdmVQcmV2aWV3L2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3ByZXZpZXctYnRuJ1xuXG5leHBvcnQgZnVuY3Rpb24gUHJldmlld0J1dHRvbihwcm9wczogUHJldmlld0J1dHRvbkNsaWVudFByb3BzKSB7XG4gIGNvbnN0IHsgcHJldmlld1VSTCB9ID0gdXNlUHJldmlld1VSTCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGlmICghcHJldmlld1VSTCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBhcmlhLWxhYmVsPXt0KCd2ZXJzaW9uOnByZXZpZXcnKX1cbiAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgaHJlZj17cHJldmlld1VSTH1cbiAgICAgIGlkPVwicHJldmlldy1idXR0b25cIlxuICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIHRpdGxlPXt0KCd2ZXJzaW9uOnByZXZpZXcnKX1cbiAgICA+XG4gICAgICA8RXh0ZXJuYWxMaW5rSWNvbiAvPlxuICAgIDwvYT5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IEV4dGVybmFsTGlua0ljb246IFJlYWN0LkZDPHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gcHJvcHNcbiAgcmV0dXJuIChcbiAgICA8c3ZnXG4gICAgICBjbGFzc05hbWU9e1tjbGFzc05hbWUsICdpY29uIGljb24tLWV4dGVybmFsTGluayddLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgID5cbiAgICAgIDxwYXRoXG4gICAgICAgIGNsYXNzTmFtZT1cInN0cm9rZVwiXG4gICAgICAgIGQ9XCJNMTYgMTAuNjY2N1YxNC42NjY3QzE2IDE1LjAyMDMgMTUuODU5NSAxNS4zNTk0IDE1LjYwOTUgMTUuNjA5NUMxNS4zNTk0IDE1Ljg1OTUgMTUuMDIwMyAxNiAxNC42NjY3IDE2SDUuMzMzMzNDNC45Nzk3MSAxNiA0LjY0MDU3IDE1Ljg1OTUgNC4zOTA1MiAxNS42MDk1QzQuMTQwNDggMTUuMzU5NCA0IDE1LjAyMDMgNCAxNC42NjY3VjUuMzMzMzNDNCA0Ljk3OTcxIDQuMTQwNDggNC42NDA1NyA0LjM5MDUyIDQuMzkwNTJDNC42NDA1NyA0LjE0MDQ4IDQuOTc5NzEgNCA1LjMzMzMzIDRIOS4zMzMzM00xNiA0TDEwIDEwTTE2IDRIMTJNMTYgNFY4XCJcbiAgICAgICAgc3Ryb2tlTGluZWNhcD1cInNxdWFyZVwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBQdWJsaXNoQnV0dG9uQ2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHtcbiAgZm9ybWF0QWRtaW5VUkwsXG4gIGhhc0F1dG9zYXZlRW5hYmxlZCxcbiAgaGFzTG9jYWxpemVTdGF0dXNFbmFibGVkLFxuICBoYXNTY2hlZHVsZWRQdWJsaXNoRW5hYmxlZCxcbn0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRm9ybSwgdXNlRm9ybU1vZGlmaWVkIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgRm9ybVN1Ym1pdCB9IGZyb20gJy4uLy4uL2Zvcm1zL1N1Ym1pdC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUhvdGtleSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUhvdGtleS5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWRpdERlcHRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvT3BlcmF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB0cmF2ZXJzZUZvckxvY2FsaXplZEZpZWxkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy90cmF2ZXJzZUZvckxvY2FsaXplZEZpZWxkcy5qcydcbmltcG9ydCB7IFBvcHVwTGlzdCB9IGZyb20gJy4uL1BvcHVwL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2NoZWR1bGVEcmF3ZXIgfSBmcm9tICcuL1NjaGVkdWxlRHJhd2VyL2luZGV4LmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gUHVibGlzaEJ1dHRvbih7XG4gIGxhYmVsOiBsYWJlbFByb3AsXG59OiB7IGxhYmVsPzogc3RyaW5nIH0gJiBQdWJsaXNoQnV0dG9uQ2xpZW50UHJvcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZ2xvYmFsU2x1ZyxcbiAgICBoYXNQdWJsaXNoZWREb2MsXG4gICAgaGFzUHVibGlzaFBlcm1pc3Npb24sXG4gICAgc2V0SGFzUHVibGlzaGVkRG9jLFxuICAgIHNldE1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQsXG4gICAgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnQsXG4gICAgdW5wdWJsaXNoZWRWZXJzaW9uQ291bnQsXG4gICAgdXBsb2FkU3RhdHVzLFxuICB9ID0gdXNlRG9jdW1lbnRJbmZvKClcblxuICBjb25zdCB7IGNvbmZpZywgZ2V0RW50aXR5Q29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IHN1Ym1pdCB9ID0gdXNlRm9ybSgpXG4gIGNvbnN0IG1vZGlmaWVkID0gdXNlRm9ybU1vZGlmaWVkKClcbiAgY29uc3QgZWRpdERlcHRoID0gdXNlRWRpdERlcHRoKClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGVDb2RlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGlzTW9kYWxPcGVuLCB0b2dnbGVNb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IGRyYXdlclNsdWcgPSBgc2NoZWR1bGUtcHVibGlzaC0ke2lkfWBcblxuICBjb25zdCB7XG4gICAgbG9jYWxpemF0aW9uLFxuICAgIHJvdXRlczogeyBhcGkgfSxcbiAgfSA9IGNvbmZpZ1xuXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBsYWJlbCA9IGxhYmVsUHJvcCB8fCB0KCd2ZXJzaW9uOnB1Ymxpc2hDaGFuZ2VzJylcblxuICBjb25zdCBlbnRpdHlDb25maWcgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoY29sbGVjdGlvblNsdWcpIHtcbiAgICAgIHJldHVybiBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZyB9KVxuICAgIH1cblxuICAgIGlmIChnbG9iYWxTbHVnKSB7XG4gICAgICByZXR1cm4gZ2V0RW50aXR5Q29uZmlnKHsgZ2xvYmFsU2x1ZyB9KVxuICAgIH1cbiAgfSwgW2NvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnLCBnZXRFbnRpdHlDb25maWddKVxuXG4gIGNvbnN0IGhhc05ld2VyVmVyc2lvbnMgPSB1bnB1Ymxpc2hlZFZlcnNpb25Db3VudCA+IDBcblxuICBjb25zdCBjYW5QdWJsaXNoID1cbiAgICBoYXNQdWJsaXNoUGVybWlzc2lvbiAmJlxuICAgIChtb2RpZmllZCB8fCBoYXNOZXdlclZlcnNpb25zIHx8ICFoYXNQdWJsaXNoZWREb2MpICYmXG4gICAgdXBsb2FkU3RhdHVzICE9PSAndXBsb2FkaW5nJ1xuXG4gIGNvbnN0IHNjaGVkdWxlZFB1Ymxpc2hFbmFibGVkID0gaGFzU2NoZWR1bGVkUHVibGlzaEVuYWJsZWQoZW50aXR5Q29uZmlnKVxuXG4gIC8vIElmIGF1dG9zYXZlIGlzIGVuYWJsZWQgdGhlIG1vZGlmaWVkIHdpbGwgYWx3YXlzIGJlIHRydWUgc28gb25seSBjb25kaXRpb25hbGx5IGNoZWNrIG9uIG1vZGlmaWVkIHN0YXRlXG4gIGNvbnN0IGhhc0F1dG9zYXZlID0gaGFzQXV0b3NhdmVFbmFibGVkKGVudGl0eUNvbmZpZylcblxuICBjb25zdCBjYW5TY2hlZHVsZVB1Ymxpc2ggPSBCb29sZWFuKFxuICAgIHNjaGVkdWxlZFB1Ymxpc2hFbmFibGVkICYmXG4gICAgICBoYXNQdWJsaXNoUGVybWlzc2lvbiAmJlxuICAgICAgKGdsb2JhbFNsdWcgfHwgKGNvbGxlY3Rpb25TbHVnICYmIGlkKSkgJiZcbiAgICAgIChoYXNBdXRvc2F2ZSB8fCAhbW9kaWZpZWQpLFxuICApXG5cbiAgY29uc3QgW2hhc0xvY2FsaXplZEZpZWxkcywgc2V0SGFzTG9jYWxpemVkRmllbGRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzTG9jYWxpemVkRmllbGQgPSB0cmF2ZXJzZUZvckxvY2FsaXplZEZpZWxkcyhlbnRpdHlDb25maWc/LmZpZWxkcylcbiAgICBzZXRIYXNMb2NhbGl6ZWRGaWVsZHMoaGFzTG9jYWxpemVkRmllbGQpXG4gIH0sIFtlbnRpdHlDb25maWc/LmZpZWxkc10pXG5cbiAgY29uc3QgaXNTcGVjaWZpY0xvY2FsZVB1Ymxpc2hFbmFibGVkID0gbG9jYWxpemF0aW9uICYmIGhhc0xvY2FsaXplZEZpZWxkcyAmJiBoYXNQdWJsaXNoUGVybWlzc2lvblxuXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHVzZU9wZXJhdGlvbigpXG5cbiAgY29uc3QgZGlzYWJsZWQgPSBvcGVyYXRpb24gPT09ICd1cGRhdGUnICYmICFtb2RpZmllZFxuXG4gIGNvbnN0IHNhdmVEcmFmdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtcyA9IHFzLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgIGRyYWZ0OiB0cnVlLFxuICAgICAgICAnZmFsbGJhY2stbG9jYWxlJzogJ251bGwnLFxuICAgICAgICBsb2NhbGU6IGxvY2FsZUNvZGUsXG4gICAgICB9LFxuICAgICAgeyBhZGRRdWVyeVByZWZpeDogdHJ1ZSB9LFxuICAgIClcblxuICAgIGxldCBhY3Rpb25cbiAgICBsZXQgbWV0aG9kID0gJ1BPU1QnXG5cbiAgICBpZiAoY29sbGVjdGlvblNsdWcpIHtcbiAgICAgIGFjdGlvbiA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnfSR7aWQgPyBgLyR7aWR9YCA6ICcnfSR7cGFyYW1zfWAsXG4gICAgICB9KVxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIG1ldGhvZCA9ICdQQVRDSCdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsU2x1Zykge1xuICAgICAgYWN0aW9uID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICBwYXRoOiBgL2dsb2JhbHMvJHtnbG9iYWxTbHVnfSR7cGFyYW1zfWAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGF3YWl0IHN1Ym1pdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICBtZXRob2QsXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgX3N0YXR1czogJ2RyYWZ0JyxcbiAgICAgIH0sXG4gICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICB9KVxuICB9LCBbZGlzYWJsZWQsIGxvY2FsZUNvZGUsIGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnLCBzdWJtaXQsIGFwaSwgaWRdKVxuXG4gIHVzZUhvdGtleSh7IGNtZEN0cmxLZXk6IHRydWUsIGVkaXREZXB0aCwga2V5Q29kZXM6IFsncyddIH0sIChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgaWYgKHNhdmVEcmFmdCAmJiBoYXNBdXRvc2F2ZSkge1xuICAgICAgdm9pZCBzYXZlRHJhZnQoKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsb2NhbGl6ZVN0YXR1c0VuYWJsZWQgPSBoYXNMb2NhbGl6ZVN0YXR1c0VuYWJsZWQoZW50aXR5Q29uZmlnKVxuXG4gIGNvbnN0IHB1Ymxpc2ggPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKHVwbG9hZFN0YXR1cyA9PT0gJ3VwbG9hZGluZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtcyA9IHFzLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgIGxvY2FsZTogbG9jYWxlQ29kZSxcbiAgICAgICAgLi4uKGxvY2FsaXplU3RhdHVzRW5hYmxlZCAmJiB7IHB1Ymxpc2hBbGxMb2NhbGVzOiB0cnVlIH0pLFxuICAgICAgfSxcbiAgICAgIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSxcbiAgICApXG5cbiAgICBjb25zdCBhY3Rpb24gPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgcGF0aDogYCR7XG4gICAgICAgIGdsb2JhbFNsdWcgPyBgL2dsb2JhbHMvJHtnbG9iYWxTbHVnfWAgOiBgLyR7Y29sbGVjdGlvblNsdWd9JHtpZCA/IGAvJHtpZH1gIDogJyd9YFxuICAgICAgfSR7cGFyYW1zfWAgYXMgYC8ke3N0cmluZ31gLFxuICAgIH0pXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXQoe1xuICAgICAgYWN0aW9uLFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIF9zdGF0dXM6ICdwdWJsaXNoZWQnLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnQoMClcbiAgICAgIHNldE1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQoZmFsc2UpXG4gICAgICBzZXRIYXNQdWJsaXNoZWREb2ModHJ1ZSlcbiAgICB9XG4gIH0sIFtcbiAgICBsb2NhbGVDb2RlLFxuICAgIGxvY2FsaXplU3RhdHVzRW5hYmxlZCxcbiAgICBhcGksXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZ2xvYmFsU2x1ZyxcbiAgICBpZCxcbiAgICBzZXRIYXNQdWJsaXNoZWREb2MsXG4gICAgc3VibWl0LFxuICAgIHNldFVucHVibGlzaGVkVmVyc2lvbkNvdW50LFxuICAgIHVwbG9hZFN0YXR1cyxcbiAgICBzZXRNb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkLFxuICBdKVxuXG4gIGNvbnN0IHB1Ymxpc2hTcGVjaWZpY0xvY2FsZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChsb2NhbGUpID0+IHtcbiAgICAgIGlmICh1cGxvYWRTdGF0dXMgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhbXMgPSBxcy5zdHJpbmdpZnkoXG4gICAgICAgIHtcbiAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcHVibGlzaFNwZWNpZmljTG9jYWxlOiBsb2NhbGUsXG4gICAgICAgIH0sXG4gICAgICAgIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSxcbiAgICAgIClcblxuICAgICAgY29uc3QgcGF0aFNlZ21lbnQgPSBnbG9iYWxTbHVnXG4gICAgICAgID8gYC9nbG9iYWxzLyR7Z2xvYmFsU2x1Z31gXG4gICAgICAgIDogYC8ke2NvbGxlY3Rpb25TbHVnfSR7aWQgPyBgLyR7aWR9YCA6ICcnfWBcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgcGF0aDogYCR7cGF0aFNlZ21lbnR9JHtwYXJhbXN9YCBhcyBgLyR7c3RyaW5nfWAsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXQoe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgIF9zdGF0dXM6ICdwdWJsaXNoZWQnLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBzZXRVbnB1Ymxpc2hlZFZlcnNpb25Db3VudCgwKVxuICAgICAgICBzZXRNb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkKGZhbHNlKVxuICAgICAgICBzZXRIYXNQdWJsaXNoZWREb2ModHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFwaSxcbiAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgZ2xvYmFsU2x1ZyxcbiAgICAgIGlkLFxuICAgICAgc2V0SGFzUHVibGlzaGVkRG9jLFxuICAgICAgc2V0TW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZCxcbiAgICAgIHNldFVucHVibGlzaGVkVmVyc2lvbkNvdW50LFxuICAgICAgc3VibWl0LFxuICAgICAgdXBsb2FkU3RhdHVzLFxuICAgIF0sXG4gIClcblxuICAvLyBQdWJsaXNoIHRvIGFsbCBsb2NhbGVzIHVubGVzcyB0aGVyZSBhcmUgbG9jYWxpemVkIGZpZWxkcyBBTkQgZGVmYXVsdExvY2FsZVB1Ymxpc2hPcHRpb24gaXMgJ2FjdGl2ZSdcbiAgY29uc3QgaXNEZWZhdWx0UHVibGlzaEFsbCA9XG4gICAgIWlzU3BlY2lmaWNMb2NhbGVQdWJsaXNoRW5hYmxlZCB8fFxuICAgIChsb2NhbGl6YXRpb24gJiYgbG9jYWxpemF0aW9uPy5kZWZhdWx0TG9jYWxlUHVibGlzaE9wdGlvbiAhPT0gJ2FjdGl2ZScpXG5cbiAgY29uc3QgYWN0aXZlTG9jYWxlID1cbiAgICBsb2NhbGl6YXRpb24gJiZcbiAgICBsb2NhbGl6YXRpb24/LmxvY2FsZXMuZmluZCgobG9jYWxlKSA9PlxuICAgICAgdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycgPyBsb2NhbGUgPT09IGxvY2FsZUNvZGUgOiBsb2NhbGUuY29kZSA9PT0gbG9jYWxlQ29kZSxcbiAgICApXG5cbiAgY29uc3QgYWN0aXZlTG9jYWxlTGFiZWwgPSBhY3RpdmVMb2NhbGUgJiYgZ2V0VHJhbnNsYXRpb24oYWN0aXZlTG9jYWxlLmxhYmVsLCBpMThuKVxuXG4gIGlmICghaGFzUHVibGlzaFBlcm1pc3Npb24pIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8Rm9ybVN1Ym1pdFxuICAgICAgICBidXR0b25JZD1cImFjdGlvbi1zYXZlXCJcbiAgICAgICAgZGlzYWJsZWQ9eyFjYW5QdWJsaXNofVxuICAgICAgICBlbmFibGVTdWJNZW51PXtjYW5TY2hlZHVsZVB1Ymxpc2h9XG4gICAgICAgIG9uQ2xpY2s9e2lzRGVmYXVsdFB1Ymxpc2hBbGwgPyBwdWJsaXNoIDogKCkgPT4gcHVibGlzaFNwZWNpZmljTG9jYWxlKGFjdGl2ZUxvY2FsZS5jb2RlKX1cbiAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgIFN1Yk1lbnVQb3B1cENvbnRlbnQ9e1xuICAgICAgICAgIGlzU3BlY2lmaWNMb2NhbGVQdWJsaXNoRW5hYmxlZCB8fCBjYW5TY2hlZHVsZVB1Ymxpc2hcbiAgICAgICAgICAgID8gKHsgY2xvc2UgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5TY2hlZHVsZVB1Ymxpc2ggJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uR3JvdXAga2V5PVwic2NoZWR1bGUtcHVibGlzaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzY2hlZHVsZS1wdWJsaXNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gW3RvZ2dsZU1vZGFsKGRyYXdlclNsdWcpLCBjbG9zZSgpXX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ3ZlcnNpb246c2NoZWR1bGVQdWJsaXNoJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtpc1NwZWNpZmljTG9jYWxlUHVibGlzaEVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInB1Ymxpc2gtbG9jYWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0UHVibGlzaEFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoKSA9PiBwdWJsaXNoU3BlY2lmaWNMb2NhbGUoYWN0aXZlTG9jYWxlLmNvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHB1Ymxpc2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNEZWZhdWx0UHVibGlzaEFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdCgndmVyc2lvbjpwdWJsaXNoSW4nLCB7IGxvY2FsZTogYWN0aXZlTG9jYWxlTGFiZWwgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ3ZlcnNpb246cHVibGlzaEFsbExvY2FsZXMnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgPlxuICAgICAgICB7IWlzRGVmYXVsdFB1Ymxpc2hBbGwgPyB0KCd2ZXJzaW9uOnB1Ymxpc2hJbicsIHsgbG9jYWxlOiBhY3RpdmVMb2NhbGVMYWJlbCB9KSA6IGxhYmVsfVxuICAgICAgPC9Gb3JtU3VibWl0PlxuICAgICAge2NhblNjaGVkdWxlUHVibGlzaCAmJiBpc01vZGFsT3BlbihkcmF3ZXJTbHVnKSAmJiAoXG4gICAgICAgIDxTY2hlZHVsZURyYXdlclxuICAgICAgICAgIGRlZmF1bHRUeXBlPXshaGFzTmV3ZXJWZXJzaW9ucyA/ICd1bnB1Ymxpc2gnIDogJ3B1Ymxpc2gnfVxuICAgICAgICAgIHNjaGVkdWxlUHVibGlzaENvbmZpZz17XG4gICAgICAgICAgICBzY2hlZHVsZWRQdWJsaXNoRW5hYmxlZCAmJlxuICAgICAgICAgICAgdHlwZW9mIGVudGl0eUNvbmZpZy52ZXJzaW9ucy5kcmFmdHMuc2NoZWR1bGVQdWJsaXNoID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGVudGl0eUNvbmZpZy52ZXJzaW9ucy5kcmFmdHMuc2NoZWR1bGVQdWJsaXNoXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIHNsdWc9e2RyYXdlclNsdWd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IENvbHVtbiwgU2NoZWR1bGVQdWJsaXNoLCBXaGVyZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IFRaRGF0ZU1pbmkgYXMgVFpEYXRlIH0gZnJvbSAnQGRhdGUtZm5zL3R6L2RhdGUvbWluaSdcbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyBlbmRPZlRvZGF5LCBpc1RvZGF5LCBzdGFydE9mRGF5IH0gZnJvbSAnZGF0ZS1mbnMnXG5pbXBvcnQgeyB0cmFuc3Bvc2UgfSBmcm9tICdkYXRlLWZucy90cmFuc3Bvc2UnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHR5cGUgeyBQdWJsaXNoVHlwZSwgVXBjb21pbmdFdmVudCB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi8uLi9maWVsZHMvRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IFJhZGlvIH0gZnJvbSAnLi4vLi4vLi4vZmllbGRzL1JhZGlvR3JvdXAvUmFkaW8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50VGl0bGUgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRUaXRsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVNlcnZlckZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9TZXJ2ZXJGdW5jdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL2FwaS5qcydcbmltcG9ydCB7IEJhbm5lciB9IGZyb20gJy4uLy4uL0Jhbm5lci9pbmRleC5qcydcbmltcG9ydCB7IERyYXdlckNsb3NlQnV0dG9uIH0gZnJvbSAnLi4vLi4vQnVsa1VwbG9hZC9EcmF3ZXJDbG9zZUJ1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IERhdGVQaWNrZXJGaWVsZCB9IGZyb20gJy4uLy4uL0RhdGVQaWNrZXIvaW5kZXguanMnXG5pbXBvcnQgeyBEcmF3ZXIgfSBmcm9tICcuLi8uLi9EcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBHdXR0ZXIgfSBmcm9tICcuLi8uLi9HdXR0ZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IFJlYWN0U2VsZWN0IH0gZnJvbSAnLi4vLi4vUmVhY3RTZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBTaGltbWVyRWZmZWN0IH0gZnJvbSAnLi4vLi4vU2hpbW1lckVmZmVjdC9pbmRleC5qcydcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAnLi4vLi4vVGFibGUvaW5kZXguanMnXG5pbXBvcnQgeyBUaW1lem9uZVBpY2tlciB9IGZyb20gJy4uLy4uL1RpbWV6b25lUGlja2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgYnVpbGRVcGNvbWluZ0NvbHVtbnMgfSBmcm9tICcuL2J1aWxkVXBjb21pbmdDb2x1bW5zLmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnc2NoZWR1bGUtcHVibGlzaCdcblxudHlwZSBQcm9wcyA9IHtcbiAgZGVmYXVsdFR5cGU/OiBQdWJsaXNoVHlwZVxuICBzY2hlZHVsZVB1Ymxpc2hDb25maWc/OiBTY2hlZHVsZVB1Ymxpc2hcbiAgc2x1Zzogc3RyaW5nXG59XG5cbmNvbnN0IGRlZmF1bHRMb2NhbGVPcHRpb24gPSB7XG4gIGxhYmVsOiAnQWxsJyxcbiAgdmFsdWU6ICdhbGwnLFxufVxuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVEcmF3ZXI6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHNsdWcsIGRlZmF1bHRUeXBlLCBzY2hlZHVsZVB1Ymxpc2hDb25maWcgfSkgPT4ge1xuICBjb25zdCB7IHRvZ2dsZU1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIGFkbWluOiB7XG4gICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgIHRpbWV6b25lczogeyBkZWZhdWx0VGltZXpvbmUsIHN1cHBvcnRlZFRpbWV6b25lcyB9LFxuICAgICAgfSxcbiAgICAgIGxvY2FsaXphdGlvbixcbiAgICAgIHJvdXRlczogeyBhcGkgfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBpZCwgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWcgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IHsgdGl0bGUgfSA9IHVzZURvY3VtZW50VGl0bGUoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBzY2hlZHVsZVB1Ymxpc2ggfSA9IHVzZVNlcnZlckZ1bmN0aW9ucygpXG4gIGNvbnN0IFt0eXBlLCBzZXRUeXBlXSA9IFJlYWN0LnVzZVN0YXRlPFB1Ymxpc2hUeXBlPihkZWZhdWx0VHlwZSB8fCAncHVibGlzaCcpXG4gIGNvbnN0IFtkYXRlLCBzZXREYXRlXSA9IFJlYWN0LnVzZVN0YXRlPERhdGU+KClcbiAgY29uc3QgW3RpbWV6b25lLCBzZXRUaW1lem9uZV0gPSBSZWFjdC51c2VTdGF0ZTxzdHJpbmc+KGRlZmF1bHRUaW1lem9uZSlcbiAgY29uc3QgW2xvY2FsZSwgc2V0TG9jYWxlXSA9IFJlYWN0LnVzZVN0YXRlPHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PihkZWZhdWx0TG9jYWxlT3B0aW9uKVxuICBjb25zdCBbcHJvY2Vzc2luZywgc2V0UHJvY2Vzc2luZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxUaXRsZSA9IHQoJ2dlbmVyYWw6c2NoZWR1bGVQdWJsaXNoRm9yJywgeyB0aXRsZSB9KVxuICBjb25zdCBbdXBjb21pbmcsIHNldFVwY29taW5nXSA9IFJlYWN0LnVzZVN0YXRlPFVwY29taW5nRXZlbnRbXT4oKVxuICBjb25zdCBbdXBjb21pbmdDb2x1bW5zLCBzZXRVcGNvbWluZ0NvbHVtbnNdID0gUmVhY3QudXNlU3RhdGU8Q29sdW1uW10+KClcbiAgY29uc3QgZGVsZXRlSGFuZGxlclJlZiA9IFJlYWN0LnVzZVJlZjwoKGlkOiBudW1iZXIgfCBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4pIHwgbnVsbD4oKCkgPT4gbnVsbClcblxuICAvLyBHZXQgdGhlIHVzZXIgdGltZXpvbmUgc28gd2UgY2FuIGFkanVzdCB0aGUgZGlzcGxheWVkIHZhbHVlIGFnYWluc3QgaXRcbiAgY29uc3QgdXNlclRpbWV6b25lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lXG5cbiAgY29uc3QgbG9jYWxlT3B0aW9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBsb2NhbGl6YXRpb24ubG9jYWxlcy5tYXAoKHsgY29kZSwgbGFiZWwgfSkgPT4gKHtcbiAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVsLCBpMThuKSxcbiAgICAgICAgdmFsdWU6IGNvZGUsXG4gICAgICB9KSlcblxuICAgICAgb3B0aW9ucy51bnNoaWZ0KGRlZmF1bHRMb2NhbGVPcHRpb24pXG5cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sIFtsb2NhbGl6YXRpb24sIGkxOG5dKVxuXG4gIGNvbnN0IGZldGNoVXBjb21pbmcgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcXVlcnk6IHsgc29ydDogc3RyaW5nOyB3aGVyZTogV2hlcmUgfSA9IHtcbiAgICAgIHNvcnQ6ICd3YWl0VW50aWwnLFxuICAgICAgd2hlcmU6IHtcbiAgICAgICAgYW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGFza1NsdWc6IHtcbiAgICAgICAgICAgICAgZXF1YWxzOiAnc2NoZWR1bGVQdWJsaXNoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3YWl0VW50aWw6IHtcbiAgICAgICAgICAgICAgZ3JlYXRlcl90aGFuOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBpZiAoY29sbGVjdGlvblNsdWcpIHtcbiAgICAgIHF1ZXJ5LndoZXJlLmFuZC5wdXNoKHtcbiAgICAgICAgJ2lucHV0LmRvYy52YWx1ZSc6IHtcbiAgICAgICAgICBlcXVhbHM6IFN0cmluZyhpZCksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgcXVlcnkud2hlcmUuYW5kLnB1c2goe1xuICAgICAgICAnaW5wdXQuZG9jLnJlbGF0aW9uVG8nOiB7XG4gICAgICAgICAgZXF1YWxzOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbFNsdWcpIHtcbiAgICAgIHF1ZXJ5LndoZXJlLmFuZC5wdXNoKHtcbiAgICAgICAgJ2lucHV0Lmdsb2JhbCc6IHtcbiAgICAgICAgICBlcXVhbHM6IGdsb2JhbFNsdWcsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHsgZG9jcyB9ID0gYXdhaXQgcmVxdWVzdHNcbiAgICAgIC5wb3N0KGZvcm1hdEFkbWluVVJMKHsgYXBpUm91dGU6IGFwaSwgcGF0aDogYC9wYXlsb2FkLWpvYnNgIH0pLCB7XG4gICAgICAgIGJvZHk6IHFzLnN0cmluZ2lmeShxdWVyeSksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgJ1gtUGF5bG9hZC1IVFRQLU1ldGhvZC1PdmVycmlkZSc6ICdHRVQnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG5cbiAgICBzZXRVcGNvbWluZ0NvbHVtbnMoXG4gICAgICBidWlsZFVwY29taW5nQ29sdW1ucyh7XG4gICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgICBkZWxldGVIYW5kbGVyOiBkZWxldGVIYW5kbGVyUmVmLmN1cnJlbnQsXG4gICAgICAgIGRvY3MsXG4gICAgICAgIGkxOG4sXG4gICAgICAgIGxvY2FsaXphdGlvbixcbiAgICAgICAgc3VwcG9ydGVkVGltZXpvbmVzLFxuICAgICAgICB0LFxuICAgICAgfSksXG4gICAgKVxuICAgIHNldFVwY29taW5nKGRvY3MpXG4gIH0sIFtjb2xsZWN0aW9uU2x1ZywgZ2xvYmFsU2x1ZywgYXBpLCBpMThuLCBkYXRlRm9ybWF0LCBsb2NhbGl6YXRpb24sIHN1cHBvcnRlZFRpbWV6b25lcywgdCwgaWRdKVxuXG4gIGNvbnN0IGRlbGV0ZUhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICBhc3luYyAoaWQ6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGVQdWJsaXNoKHtcbiAgICAgICAgICBkZWxldGVJRDogaWQsXG4gICAgICAgIH0pXG4gICAgICAgIGF3YWl0IGZldGNoVXBjb21pbmcoKVxuICAgICAgICB0b2FzdC5zdWNjZXNzKHQoJ2dlbmVyYWw6ZGVsZXRlZFN1Y2Nlc3NmdWxseScpKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICB0b2FzdC5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmZXRjaFVwY29taW5nLCBzY2hlZHVsZVB1Ymxpc2gsIHRdLFxuICApXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBkZWxldGVIYW5kbGVyUmVmLmN1cnJlbnQgPSBkZWxldGVIYW5kbGVyXG4gIH0sIFtkZWxldGVIYW5kbGVyXSlcblxuICBjb25zdCBoYW5kbGVTYXZlID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIHRvYXN0LmVycm9yKHQoJ2dlbmVyYWw6bm9EYXRlU2VsZWN0ZWQnKSlcbiAgICB9XG5cbiAgICBzZXRQcm9jZXNzaW5nKHRydWUpXG5cbiAgICBsZXQgbG9jYWxlVG9QdWJsaXNoOiBzdHJpbmdcblxuICAgIGlmICh0eXBlb2YgbG9jYWxlID09PSAnb2JqZWN0JyAmJiBsb2NhbGUudmFsdWUgIT09ICdhbGwnICYmIHR5cGUgPT09ICdwdWJsaXNoJykge1xuICAgICAgbG9jYWxlVG9QdWJsaXNoID0gbG9jYWxlLnZhbHVlXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNjaGVkdWxlUHVibGlzaCh7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRhdGUsXG4gICAgICAgIGRvYzogY29sbGVjdGlvblNsdWdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcmVsYXRpb25UbzogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcoaWQpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWw6IGdsb2JhbFNsdWcgfHwgdW5kZWZpbmVkLFxuICAgICAgICBsb2NhbGVUb1B1Ymxpc2gsXG4gICAgICAgIHRpbWV6b25lLFxuICAgICAgfSlcblxuICAgICAgc2V0RGF0ZSh1bmRlZmluZWQpXG4gICAgICB0b2FzdC5zdWNjZXNzKHQoJ3ZlcnNpb246c2NoZWR1bGVkU3VjY2Vzc2Z1bGx5JykpXG4gICAgICB2b2lkIGZldGNoVXBjb21pbmcoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB0b2FzdC5lcnJvcihlcnIubWVzc2FnZSlcbiAgICB9XG5cbiAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuICB9LCBbXG4gICAgZGF0ZSxcbiAgICBsb2NhbGUsXG4gICAgdHlwZSxcbiAgICB0LFxuICAgIHNjaGVkdWxlUHVibGlzaCxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBpZCxcbiAgICBnbG9iYWxTbHVnLFxuICAgIHRpbWV6b25lLFxuICAgIGZldGNoVXBjb21pbmcsXG4gIF0pXG5cbiAgY29uc3QgZGlzcGxheWVkVmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAodGltZXpvbmUgJiYgdXNlclRpbWV6b25lICYmIGRhdGUpIHtcbiAgICAgIC8vIENyZWF0ZSBUWkRhdGUgaW5zdGFuY2VzIGZvciB0aGUgc2VsZWN0ZWQgdGltZXpvbmUgYW5kIHRoZSB1c2VyJ3MgdGltZXpvbmVcbiAgICAgIC8vIFRoZXNlIGluc3RhbmNlcyBhbGxvdyB1cyB0byB0cmFuc3Bvc2UgdGhlIGRhdGUgYmV0d2VlbiB0aW1lem9uZXMgd2hpbGUga2VlcGluZyB0aGUgc2FtZSB0aW1lIHZhbHVlXG4gICAgICBjb25zdCBEYXRlV2l0aE9yaWdpbmFsVHogPSBUWkRhdGUudHoodGltZXpvbmUpXG4gICAgICBjb25zdCBEYXRlV2l0aFVzZXJUeiA9IFRaRGF0ZS50eih1c2VyVGltZXpvbmUpXG5cbiAgICAgIGNvbnN0IG1vZGlmaWVkRGF0ZSA9IG5ldyBUWkRhdGUoZGF0ZSkud2l0aFRpbWVab25lKHRpbWV6b25lKVxuXG4gICAgICAvLyBUcmFuc3Bvc2UgdGhlIGRhdGUgdG8gdGhlIHNlbGVjdGVkIHRpbWV6b25lXG4gICAgICBjb25zdCBkYXRlV2l0aFRpbWV6b25lID0gdHJhbnNwb3NlKG1vZGlmaWVkRGF0ZSwgRGF0ZVdpdGhPcmlnaW5hbFR6KVxuXG4gICAgICAvLyBUcmFuc3Bvc2UgdGhlIGRhdGUgdG8gdGhlIHVzZXIncyB0aW1lem9uZSAtIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHJlYWN0LWRhdGVwaWNrZXIgY29tcG9uZW50IGluc2lzdHMgb24gZGlzcGxheWluZyB0aGUgZGF0ZSBpbiB0aGUgdXNlcidzIHRpbWV6b25lXG4gICAgICBjb25zdCBkYXRlV2l0aFVzZXJUaW1lem9uZSA9IHRyYW5zcG9zZShkYXRlV2l0aFRpbWV6b25lLCBEYXRlV2l0aFVzZXJUeilcblxuICAgICAgcmV0dXJuIGRhdGVXaXRoVXNlclRpbWV6b25lLnRvSVNPU3RyaW5nKClcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVxuICB9LCBbdGltZXpvbmUsIGRhdGUsIHVzZXJUaW1lem9uZV0pXG5cbiAgY29uc3Qgb25DaGFuZ2VEYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGluY29taW5nRGF0ZTogRGF0ZSkgPT4ge1xuICAgICAgaWYgKHRpbWV6b25lICYmIGluY29taW5nRGF0ZSkge1xuICAgICAgICAvLyBDcmVhdGUgVFpEYXRlIGluc3RhbmNlcyBmb3IgdGhlIHNlbGVjdGVkIHRpbWV6b25lXG4gICAgICAgIGNvbnN0IHR6RGF0ZVdpdGhVVEMgPSBUWkRhdGUudHoodGltZXpvbmUpXG5cbiAgICAgICAgLy8gQ3JlYXRlcyBhIFRaRGF0ZSBpbnN0YW5jZSBmb3IgdGhlIHVzZXIncyB0aW1lem9uZSAg4oCUIHRoaXMgaXMgZGVmYXVsdCBiZWhhdmlvdXIgb2YgVFpEYXRlIGFzIGl0IHdyYXBzIHRoZSBEYXRlIGNvbnN0cnVjdG9yXG4gICAgICAgIGNvbnN0IGRhdGVUb1VzZXJUeiA9IG5ldyBUWkRhdGUoaW5jb21pbmdEYXRlKVxuXG4gICAgICAgIC8vIFRyYW5zcG9zZSB0aGUgZGF0ZSB0byB0aGUgc2VsZWN0ZWQgdGltZXpvbmVcbiAgICAgICAgY29uc3QgZGF0ZVdpdGhUaW1lem9uZSA9IHRyYW5zcG9zZShkYXRlVG9Vc2VyVHosIHR6RGF0ZVdpdGhVVEMpXG5cbiAgICAgICAgc2V0RGF0ZShkYXRlV2l0aFRpbWV6b25lIHx8IG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXREYXRlKGluY29taW5nRGF0ZSB8fCBudWxsKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NldERhdGUsIHRpbWV6b25lXSxcbiAgKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF1cGNvbWluZykge1xuICAgICAgY29uc3QgZmV0Y2hJbml0aWFsVXBjb21pbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZldGNoVXBjb21pbmcoKVxuICAgICAgfVxuXG4gICAgICB2b2lkIGZldGNoSW5pdGlhbFVwY29taW5nKClcbiAgICB9XG4gIH0sIFt1cGNvbWluZywgZmV0Y2hVcGNvbWluZ10pXG5cbiAgY29uc3QgbWluVGltZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChkYXRlICYmIGlzVG9kYXkoZGF0ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXJ0T2ZEYXkobmV3IERhdGUoKSlcbiAgfSwgW2RhdGVdKVxuXG4gIHJldHVybiAoXG4gICAgPERyYXdlclxuICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICBndXR0ZXI9e2ZhbHNlfVxuICAgICAgSGVhZGVyPXtcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RyYXdlci1oZWFkZXJgfT5cbiAgICAgICAgICA8aDIgdGl0bGU9e21vZGFsVGl0bGV9Pnttb2RhbFRpdGxlfTwvaDI+XG4gICAgICAgICAgPERyYXdlckNsb3NlQnV0dG9uIG9uQ2xpY2s9eygpID0+IHRvZ2dsZU1vZGFsKHNsdWcpfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIHNsdWc9e3NsdWd9XG4gICAgPlxuICAgICAgPEd1dHRlciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NjaGVkdWxlcmB9PlxuICAgICAgICA8RmllbGRMYWJlbCBsYWJlbD17dCgndmVyc2lvbjp0eXBlJyl9IHJlcXVpcmVkIC8+XG4gICAgICAgIDx1bCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3R5cGVgfT5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICA8UmFkaW9cbiAgICAgICAgICAgICAgaWQ9e2Ake3NsdWd9LXR5cGVgfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXt0eXBlID09PSAncHVibGlzaCd9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBzZXRUeXBlKCdwdWJsaXNoJyl9XG4gICAgICAgICAgICAgIG9wdGlvbj17eyBsYWJlbDogdCgndmVyc2lvbjpwdWJsaXNoJyksIHZhbHVlOiAncHVibGlzaCcgfX1cbiAgICAgICAgICAgICAgcGF0aD17YCR7c2x1Z30tdHlwZWB9XG4gICAgICAgICAgICAgIHJlYWRPbmx5PXtwcm9jZXNzaW5nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgIDxSYWRpb1xuICAgICAgICAgICAgICBpZD17YCR7c2x1Z30tdHlwZWB9XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3R5cGUgPT09ICd1bnB1Ymxpc2gnfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gc2V0VHlwZSgndW5wdWJsaXNoJyl9XG4gICAgICAgICAgICAgIG9wdGlvbj17eyBsYWJlbDogdCgndmVyc2lvbjp1bnB1Ymxpc2gnKSwgdmFsdWU6ICd1bnB1Ymxpc2gnIH19XG4gICAgICAgICAgICAgIHBhdGg9e2Ake3NsdWd9LXR5cGVgfVxuICAgICAgICAgICAgICByZWFkT25seT17cHJvY2Vzc2luZ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIDxGaWVsZExhYmVsIGxhYmVsPXt0KCdnZW5lcmFsOnRpbWUnKX0gcGF0aD17J3RpbWUnfSByZXF1aXJlZCAvPlxuICAgICAgICA8RGF0ZVBpY2tlckZpZWxkXG4gICAgICAgICAgaWQ9XCJ0aW1lXCJcbiAgICAgICAgICBtYXhUaW1lPXtlbmRPZlRvZGF5KCl9XG4gICAgICAgICAgbWluRGF0ZT17bmV3IERhdGUoKX1cbiAgICAgICAgICBtaW5UaW1lPXttaW5UaW1lfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25DaGFuZ2VEYXRlKGUpfVxuICAgICAgICAgIHBpY2tlckFwcGVhcmFuY2U9XCJkYXlBbmRUaW1lXCJcbiAgICAgICAgICByZWFkT25seT17cHJvY2Vzc2luZ31cbiAgICAgICAgICB0aW1lRm9ybWF0PXtzY2hlZHVsZVB1Ymxpc2hDb25maWc/LnRpbWVGb3JtYXR9XG4gICAgICAgICAgdGltZUludGVydmFscz17c2NoZWR1bGVQdWJsaXNoQ29uZmlnPy50aW1lSW50ZXJ2YWxzID8/IDV9XG4gICAgICAgICAgdmFsdWU9e2Rpc3BsYXllZFZhbHVlfVxuICAgICAgICAvPlxuICAgICAgICB7c3VwcG9ydGVkVGltZXpvbmVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxUaW1lem9uZVBpY2tlclxuICAgICAgICAgICAgaWQ9e2B0aW1lem9uZS1waWNrZXJgfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRpbWV6b25lfVxuICAgICAgICAgICAgb3B0aW9ucz17c3VwcG9ydGVkVGltZXpvbmVzfVxuICAgICAgICAgICAgc2VsZWN0ZWRUaW1lem9uZT17dGltZXpvbmV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIHtsb2NhbGVPcHRpb25zLmxlbmd0aCA+IDAgJiYgdHlwZSA9PT0gJ3B1Ymxpc2gnICYmIChcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8RmllbGRMYWJlbCBsYWJlbD17dCgnbG9jYWxpemF0aW9uOmxvY2FsZVRvUHVibGlzaCcpfSAvPlxuICAgICAgICAgICAgPFJlYWN0U2VsZWN0XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TG9jYWxlKGUgYXMgeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0pfVxuICAgICAgICAgICAgICBvcHRpb25zPXtsb2NhbGVPcHRpb25zfVxuICAgICAgICAgICAgICB2YWx1ZT17bG9jYWxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hY3Rpb25zYH0+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9jZXNzaW5nfVxuICAgICAgICAgICAgaWQ9XCJzY2hlZHVsZWQtcHVibGlzaC1zYXZlXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dCgnZ2VuZXJhbDpzYXZlJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAge3Byb2Nlc3NpbmcgPyA8c3Bhbj57dCgnZ2VuZXJhbDpzYXZpbmcnKX08L3NwYW4+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0d1dHRlcj5cbiAgICAgIDxHdXR0ZXIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X191cGNvbWluZ2B9PlxuICAgICAgICA8aDQ+e3QoJ2dlbmVyYWw6dXBjb21pbmdFdmVudHMnKX08L2g0PlxuICAgICAgICB7IXVwY29taW5nICYmIDxTaGltbWVyRWZmZWN0IC8+fVxuICAgICAgICB7dXBjb21pbmc/Lmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgPEJhbm5lciB0eXBlPVwiaW5mb1wiPnt0KCdnZW5lcmFsOm5vVXBjb21pbmdFdmVudHNTY2hlZHVsZWQnKX08L0Jhbm5lcj5cbiAgICAgICAgKX1cbiAgICAgICAge3VwY29taW5nPy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8VGFibGUgYXBwZWFyYW5jZT1cImNvbmRlbnNlZFwiIGNvbHVtbnM9e3VwY29taW5nQ29sdW1uc30gZGF0YT17dXBjb21pbmd9IC8+XG4gICAgICAgICl9XG4gICAgICA8L0d1dHRlcj5cbiAgICA8L0RyYXdlcj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgQ29sdW1uIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3RhYmxlJ1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgYXBwZWFyYW5jZT86ICdjb25kZW5zZWQnIHwgJ2RlZmF1bHQnXG4gIHJlYWRvbmx5IEJlZm9yZVRhYmxlPzogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGNvbHVtbnM/OiBDb2x1bW5bXVxuICByZWFkb25seSBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdXG59XG5cbmV4cG9ydCBjb25zdCBUYWJsZTogUmVhY3QuRkM8UHJvcHM+ID0gKHsgYXBwZWFyYW5jZSwgQmVmb3JlVGFibGUsIGNvbHVtbnMsIGRhdGEgfSkgPT4ge1xuICBjb25zdCBhY3RpdmVDb2x1bW5zID0gY29sdW1ucz8uZmlsdGVyKChjb2wpID0+IGNvbD8uYWN0aXZlKVxuXG4gIGlmICghYWN0aXZlQ29sdW1ucyB8fCBhY3RpdmVDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiA8ZGl2Pk5vIGNvbHVtbnMgc2VsZWN0ZWQ8L2Rpdj5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBhcHBlYXJhbmNlICYmIGAke2Jhc2VDbGFzc30tLWFwcGVhcmFuY2UtJHthcHBlYXJhbmNlfWBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICA+XG4gICAgICB7QmVmb3JlVGFibGV9XG4gICAgICA8dGFibGUgY2VsbFBhZGRpbmc9XCIwXCIgY2VsbFNwYWNpbmc9XCIwXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICB7YWN0aXZlQ29sdW1ucy5tYXAoKGNvbCwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGggaWQ9e2BoZWFkaW5nLSR7Y29sLmFjY2Vzc29yLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfSBrZXk9e2l9PlxuICAgICAgICAgICAgICAgIHtjb2wuSGVhZGluZ31cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICB7ZGF0YSAmJlxuICAgICAgICAgICAgZGF0YT8ubWFwKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3ctJHtyb3dJbmRleCArIDF9YH1cbiAgICAgICAgICAgICAgICAgIGRhdGEtaWQ9e3Jvdy5pZH1cbiAgICAgICAgICAgICAgICAgIGtleT17XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByb3cuaWQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByb3cuaWQgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcocm93LmlkKVxuICAgICAgICAgICAgICAgICAgICAgIDogcm93SW5kZXhcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YWN0aXZlQ29sdW1ucy5tYXAoKGNvbCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBhY2Nlc3NvciB9ID0gY29sXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtgY2VsbC0ke2FjY2Vzc29yLnJlcGxhY2UoL1xcLi9nLCAnX18nKX1gfSBrZXk9e2NvbEluZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wucmVuZGVyZWRDZWxsc1tyb3dJbmRleF19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudENvbmZpZywgQ29sdW1uIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24sIHR5cGUgSTE4bkNsaWVudCwgdHlwZSBURnVuY3Rpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgVXBjb21pbmdFdmVudCB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvZm9ybWF0RG9jVGl0bGUvZm9ybWF0RGF0ZVRpdGxlLmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGlsbCB9IGZyb20gJy4uLy4uL1BpbGwvaW5kZXguanMnXG5cbnR5cGUgQXJncyA9IHtcbiAgZGF0ZUZvcm1hdDogc3RyaW5nXG4gIGRlbGV0ZUhhbmRsZXI6IChpZDogbnVtYmVyIHwgc3RyaW5nKSA9PiB2b2lkXG4gIGRvY3M6IFVwY29taW5nRXZlbnRbXVxuICBpMThuOiBJMThuQ2xpZW50XG4gIGxvY2FsaXphdGlvbjogQ2xpZW50Q29uZmlnWydsb2NhbGl6YXRpb24nXVxuICBzdXBwb3J0ZWRUaW1lem9uZXM6IENsaWVudENvbmZpZ1snYWRtaW4nXVsndGltZXpvbmVzJ11bJ3N1cHBvcnRlZFRpbWV6b25lcyddXG4gIHQ6IFRGdW5jdGlvblxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRVcGNvbWluZ0NvbHVtbnMgPSAoe1xuICBkYXRlRm9ybWF0LFxuICBkZWxldGVIYW5kbGVyLFxuICBkb2NzLFxuICBpMThuLFxuICBsb2NhbGl6YXRpb24sXG4gIHN1cHBvcnRlZFRpbWV6b25lcyxcbiAgdCxcbn06IEFyZ3MpOiBDb2x1bW5bXSA9PiB7XG4gIGNvbnN0IGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIHtcbiAgICAgIGFjY2Vzc29yOiAnaW5wdXQudHlwZScsXG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgICBmaWVsZDoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgfSxcbiAgICAgIEhlYWRpbmc6IDxzcGFuPnt0KCd2ZXJzaW9uOnR5cGUnKX08L3NwYW4+LFxuICAgICAgcmVuZGVyZWRDZWxsczogZG9jcy5tYXAoKGRvYykgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gZG9jLmlucHV0Py50eXBlXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8UGlsbCBrZXk9e2RvYy5pZH0gcGlsbFN0eWxlPXt0eXBlID09PSAncHVibGlzaCcgPyAnc3VjY2VzcycgOiAnd2FybmluZyd9IHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAge3R5cGUgPT09ICdwdWJsaXNoJyAmJiB0KCd2ZXJzaW9uOnB1Ymxpc2gnKX1cbiAgICAgICAgICAgIHt0eXBlID09PSAndW5wdWJsaXNoJyAmJiB0KCd2ZXJzaW9uOnVucHVibGlzaCcpfVxuICAgICAgICAgIDwvUGlsbD5cbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgfSxcbiAgICB7XG4gICAgICBhY2Nlc3NvcjogJ3dhaXRVbnRpbCcsXG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgICBmaWVsZDoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgfSxcbiAgICAgIEhlYWRpbmc6IDxzcGFuPnt0KCdnZW5lcmFsOnRpbWUnKX08L3NwYW4+LFxuICAgICAgcmVuZGVyZWRDZWxsczogZG9jcy5tYXAoKGRvYykgPT4gKFxuICAgICAgICA8c3BhbiBrZXk9e2RvYy5pZH0+XG4gICAgICAgICAge2Zvcm1hdERhdGUoe1xuICAgICAgICAgICAgZGF0ZTogZG9jLndhaXRVbnRpbCxcbiAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgICBwYXR0ZXJuOiBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZXpvbmU6IGRvYy5pbnB1dC50aW1lem9uZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKSksXG4gICAgfSxcbiAgICB7XG4gICAgICBhY2Nlc3NvcjogJ2lucHV0LnRpbWV6b25lJyxcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIGZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICB9LFxuICAgICAgSGVhZGluZzogPHNwYW4+e3QoJ2dlbmVyYWw6dGltZXpvbmUnKX08L3NwYW4+LFxuICAgICAgcmVuZGVyZWRDZWxsczogZG9jcy5tYXAoKGRvYykgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVkVGltZXpvbmUgPSBzdXBwb3J0ZWRUaW1lem9uZXMuZmluZChcbiAgICAgICAgICAodGltZXpvbmUpID0+IHRpbWV6b25lLnZhbHVlID09PSBkb2MuaW5wdXQudGltZXpvbmUsXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCB0aW1lem9uZSA9IG1hdGNoZWRUaW1lem9uZT8ubGFiZWwgfHwgZG9jLmlucHV0LnRpbWV6b25lXG5cbiAgICAgICAgcmV0dXJuIDxzcGFuIGtleT17ZG9jLmlkfT57dGltZXpvbmUgfHwgdCgnZ2VuZXJhbDpub1ZhbHVlJyl9PC9zcGFuPlxuICAgICAgfSksXG4gICAgfSxcbiAgXVxuXG4gIGlmIChsb2NhbGl6YXRpb24pIHtcbiAgICBjb2x1bW5zLnB1c2goe1xuICAgICAgYWNjZXNzb3I6ICdpbnB1dC5sb2NhbGUnLFxuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgZmllbGQ6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIH0sXG4gICAgICBIZWFkaW5nOiA8c3Bhbj57dCgnZ2VuZXJhbDpsb2NhbGUnKX08L3NwYW4+LFxuICAgICAgcmVuZGVyZWRDZWxsczogZG9jcy5tYXAoKGRvYykgPT4ge1xuICAgICAgICBpZiAoZG9jLmlucHV0LmxvY2FsZSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBsb2NhbGl6YXRpb24ubG9jYWxlcy5maW5kKFxuICAgICAgICAgICAgKGxvY2FsZSkgPT4gbG9jYWxlLmNvZGUgPT09IGRvYy5pbnB1dC5sb2NhbGUsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChtYXRjaGVkTG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gPHNwYW4ga2V5PXtkb2MuaWR9PntnZXRUcmFuc2xhdGlvbihtYXRjaGVkTG9jYWxlLmxhYmVsLCBpMThuKX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxzcGFuIGtleT17ZG9jLmlkfT57dCgnZ2VuZXJhbDphbGwnKX08L3NwYW4+XG4gICAgICB9KSxcbiAgICB9KVxuICB9XG5cbiAgY29sdW1ucy5wdXNoKHtcbiAgICBhY2Nlc3NvcjogJ2RlbGV0ZScsXG4gICAgYWN0aXZlOiB0cnVlLFxuICAgIGZpZWxkOiB7XG4gICAgICBuYW1lOiAnZGVsZXRlJyxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICB9LFxuICAgIEhlYWRpbmc6IDxzcGFuPnt0KCdnZW5lcmFsOmRlbGV0ZScpfTwvc3Bhbj4sXG4gICAgcmVuZGVyZWRDZWxsczogZG9jcy5tYXAoKGRvYykgPT4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICBjbGFzc05hbWU9XCJzY2hlZHVsZS1wdWJsaXNoX19kZWxldGVcIlxuICAgICAgICBpY29uPVwieFwiXG4gICAgICAgIGtleT17ZG9jLmlkfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIGRlbGV0ZUhhbmRsZXIoZG9jLmlkKVxuICAgICAgICB9fVxuICAgICAgICB0b29sdGlwPXt0KCdnZW5lcmFsOmRlbGV0ZScpfVxuICAgICAgLz5cbiAgICApKSxcbiAgfSlcblxuICByZXR1cm4gY29sdW1uc1xufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGUgfSBmcm9tICcuLi9Eb2N1bWVudERyYXdlci9Qcm92aWRlci5qcydcblxuaW1wb3J0IHsgQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9DaGVja2JveC9JbnB1dC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudFRpdGxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50VGl0bGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VSb3V0ZVRyYW5zaXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUm91dGVUcmFuc2l0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcGkuanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gJy4uL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LmpzJ1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tICcuLi9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmVzdG9yZS1idXR0b24nXG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICByZWFkb25seSBidXR0b25JZD86IHN0cmluZ1xuICByZWFkb25seSBjb2xsZWN0aW9uU2x1ZzogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZ1snc2x1ZyddXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nXG4gIHJlYWRvbmx5IG9uUmVzdG9yZT86IERvY3VtZW50RHJhd2VyQ29udGV4dFR5cGVbJ29uUmVzdG9yZSddXG4gIHJlYWRvbmx5IHJlZGlyZWN0QWZ0ZXJSZXN0b3JlPzogYm9vbGVhblxuICByZWFkb25seSBzaW5ndWxhckxhYmVsOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWydsYWJlbHMnXVsnc2luZ3VsYXInXVxuICByZWFkb25seSB0aXRsZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzdG9yZUJ1dHRvbjogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBidXR0b25JZCxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBvblJlc3RvcmUsXG4gICAgcmVkaXJlY3RBZnRlclJlc3RvcmUgPSB0cnVlLFxuICAgIHNpbmd1bGFyTGFiZWwsXG4gICAgdGl0bGU6IHRpdGxlRnJvbVByb3BzLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUsIGFwaSB9LFxuICAgICAgc2VydmVyVVJMLFxuICAgIH0sXG4gICAgZ2V0RW50aXR5Q29uZmlnLFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWcgfSlcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgdGl0bGUgfSA9IHVzZURvY3VtZW50VGl0bGUoKVxuICBjb25zdCB7IHN0YXJ0Um91dGVUcmFuc2l0aW9uIH0gPSB1c2VSb3V0ZVRyYW5zaXRpb24oKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IG1vZGFsU2x1ZyA9IGByZXN0b3JlLSR7aWR9YFxuXG4gIGNvbnN0IFtyZXN0b3JlQXNQdWJsaXNoZWQsIHNldFJlc3RvcmVBc1B1Ymxpc2hlZF0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBhZGREZWZhdWx0RXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6cmVzdG9yaW5nVGl0bGUnLCB7IHRpdGxlIH0pKVxuICB9LCBbdCwgdGl0bGVdKVxuXG4gIGNvbnN0IGhhbmRsZVJlc3RvcmUgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnfSR7cXMuc3RyaW5naWZ5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRyYXNoOiB0cnVlLFxuICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgYW5kOiBbeyBpZDogeyBlcXVhbHM6IGlkIH0gfSwgeyBkZWxldGVkQXQ6IHsgZXhpc3RzOiB0cnVlIH0gfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkUXVlcnlQcmVmaXg6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKX1gLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBpbmNsdWRlIF9zdGF0dXMgaWYgZHJhZnRzIGFyZSBlbmFibGVkXG4gICAgICBpZiAoY29sbGVjdGlvbkNvbmZpZz8udmVyc2lvbnM/LmRyYWZ0cykge1xuICAgICAgICBib2R5Ll9zdGF0dXMgPSByZXN0b3JlQXNQdWJsaXNoZWQgPyAncHVibGlzaGVkJyA6ICdkcmFmdCdcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdHMucGF0Y2godXJsLCB7XG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgIGlmIChyZXMuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgdCgnZ2VuZXJhbDp0aXRsZVJlc3RvcmVkJywge1xuICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHNpbmd1bGFyTGFiZWwsIGkxOG4pLFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgfSkgfHwganNvbi5tZXNzYWdlLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJSZXN0b3JlKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+XG4gICAgICAgICAgICByb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGUsXG4gICAgICAgICAgICAgICAgcGF0aDogYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25TbHVnfS8ke2lkfWAsXG4gICAgICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvblJlc3RvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBhd2FpdCBvblJlc3RvcmUoeyBpZCwgY29sbGVjdGlvbkNvbmZpZyB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChqc29uLmVycm9ycykge1xuICAgICAgICBqc29uLmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4gdG9hc3QuZXJyb3IoZXJyb3IubWVzc2FnZSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGREZWZhdWx0RXJyb3IoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIGFkZERlZmF1bHRFcnJvcigpXG4gICAgfVxuICB9LCBbXG4gICAgc2VydmVyVVJMLFxuICAgIGFwaSxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBpZCxcbiAgICB0LFxuICAgIHNpbmd1bGFyTGFiZWwsXG4gICAgYWRkRGVmYXVsdEVycm9yLFxuICAgIGkxOG4sXG4gICAgdGl0bGUsXG4gICAgcm91dGVyLFxuICAgIGFkbWluUm91dGUsXG4gICAgcmVkaXJlY3RBZnRlclJlc3RvcmUsXG4gICAgb25SZXN0b3JlLFxuICAgIGNvbGxlY3Rpb25Db25maWcsXG4gICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24sXG4gICAgcmVzdG9yZUFzUHVibGlzaGVkLFxuICBdKVxuXG4gIGlmIChpZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBidXR0b25TdHlsZT1cInByaW1hcnlcIlxuICAgICAgICAgIGlkPXtidXR0b25JZH1cbiAgICAgICAgICBrZXk9e2J1dHRvbklkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIG9wZW5Nb2RhbChtb2RhbFNsdWcpXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KCdnZW5lcmFsOnJlc3RvcmUnKX1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxDb25maXJtYXRpb25Nb2RhbFxuICAgICAgICAgIGJvZHk9e1xuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICA8VHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICBlbGVtZW50cz17e1xuICAgICAgICAgICAgICAgICAgJzEnOiAoeyBjaGlsZHJlbiB9KSA9PiA8c3Ryb25nPntjaGlsZHJlbn08L3N0cm9uZz4sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpMThuS2V5PXtcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc/LnZlcnNpb25zPy5kcmFmdHNcbiAgICAgICAgICAgICAgICAgICAgPyAnZ2VuZXJhbDphYm91dFRvUmVzdG9yZUFzRHJhZnQnXG4gICAgICAgICAgICAgICAgICAgIDogJ2dlbmVyYWw6YWJvdXRUb1Jlc3RvcmUnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAgICAgdmFyaWFibGVzPXt7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oc2luZ3VsYXJMYWJlbCwgaTE4biksXG4gICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVGcm9tUHJvcHMgfHwgdGl0bGUgfHwgaWQsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2NvbGxlY3Rpb25Db25maWc/LnZlcnNpb25zPy5kcmFmdHMgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jaGVja2JveGB9PlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17cmVzdG9yZUFzUHVibGlzaGVkfVxuICAgICAgICAgICAgICAgICAgICBpZD1cInJlc3RvcmUtYXMtcHVibGlzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ2dlbmVyYWw6cmVzdG9yZUFzUHVibGlzaGVkJyl9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXN0b3JlLWFzLXB1Ymxpc2hlZFwiXG4gICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlPXsoZSkgPT4gc2V0UmVzdG9yZUFzUHVibGlzaGVkKGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgICAgIGNvbmZpcm1pbmdMYWJlbD17dCgnZ2VuZXJhbDpyZXN0b3JpbmcnKX1cbiAgICAgICAgICBoZWFkaW5nPXt0KCdnZW5lcmFsOmNvbmZpcm1SZXN0b3JhdGlvbicpfVxuICAgICAgICAgIG1vZGFsU2x1Zz17bW9kYWxTbHVnfVxuICAgICAgICAgIG9uQ29uZmlybT17aGFuZGxlUmVzdG9yZX1cbiAgICAgICAgLz5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IFNhdmVCdXR0b25DbGllbnRQcm9wcyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRm9ybSwgdXNlRm9ybU1vZGlmaWVkIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgRm9ybVN1Ym1pdCB9IGZyb20gJy4uLy4uL2Zvcm1zL1N1Ym1pdC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUhvdGtleSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUhvdGtleS5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VFZGl0RGVwdGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRWRpdERlcHRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL09wZXJhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gU2F2ZUJ1dHRvbih7IGxhYmVsOiBsYWJlbFByb3AgfTogU2F2ZUJ1dHRvbkNsaWVudFByb3BzKSB7XG4gIGNvbnN0IHsgdXBsb2FkU3RhdHVzIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBzdWJtaXQgfSA9IHVzZUZvcm0oKVxuICBjb25zdCBtb2RpZmllZCA9IHVzZUZvcm1Nb2RpZmllZCgpXG4gIGNvbnN0IGxhYmVsID0gbGFiZWxQcm9wIHx8IHQoJ2dlbmVyYWw6c2F2ZScpXG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgY29uc3QgZWRpdERlcHRoID0gdXNlRWRpdERlcHRoKClcbiAgY29uc3Qgb3BlcmF0aW9uID0gdXNlT3BlcmF0aW9uKClcblxuICBjb25zdCBkaXNhYmxlZCA9IChvcGVyYXRpb24gPT09ICd1cGRhdGUnICYmICFtb2RpZmllZCkgfHwgdXBsb2FkU3RhdHVzID09PSAndXBsb2FkaW5nJ1xuXG4gIHVzZUhvdGtleSh7IGNtZEN0cmxLZXk6IHRydWUsIGVkaXREZXB0aCwga2V5Q29kZXM6IFsncyddIH0sIChlKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAvLyBhYnNvcmIgdGhlIGV2ZW50XG4gICAgfVxuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmIChyZWY/LmN1cnJlbnQpIHtcbiAgICAgIHJlZi5jdXJyZW50LmNsaWNrKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgIGlmICh1cGxvYWRTdGF0dXMgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gdm9pZCBzdWJtaXQoKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybVN1Ym1pdFxuICAgICAgYnV0dG9uSWQ9XCJhY3Rpb24tc2F2ZVwiXG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICByZWY9e3JlZn1cbiAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAge2xhYmVsfVxuICAgIDwvRm9ybVN1Ym1pdD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgU2F2ZURyYWZ0QnV0dG9uQ2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRm9ybSwgdXNlRm9ybU1vZGlmaWVkIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgRm9ybVN1Ym1pdCB9IGZyb20gJy4uLy4uL2Zvcm1zL1N1Ym1pdC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUhvdGtleSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUhvdGtleS5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWRpdERlcHRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvT3BlcmF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzYXZlLWRyYWZ0J1xuXG5leHBvcnQgZnVuY3Rpb24gU2F2ZURyYWZ0QnV0dG9uKHByb3BzOiBTYXZlRHJhZnRCdXR0b25DbGllbnRQcm9wcykge1xuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgeyBpZCwgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWcsIHNldFVucHVibGlzaGVkVmVyc2lvbkNvdW50LCB1cGxvYWRTdGF0dXMgfSA9XG4gICAgdXNlRG9jdW1lbnRJbmZvKClcblxuICBjb25zdCBtb2RpZmllZCA9IHVzZUZvcm1Nb2RpZmllZCgpXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGVkaXREZXB0aCA9IHVzZUVkaXREZXB0aCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IHN1Ym1pdCB9ID0gdXNlRm9ybSgpXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHVzZU9wZXJhdGlvbigpXG5cbiAgY29uc3QgZGlzYWJsZWQgPSAob3BlcmF0aW9uID09PSAndXBkYXRlJyAmJiAhbW9kaWZpZWQpIHx8IHVwbG9hZFN0YXR1cyA9PT0gJ3VwbG9hZGluZydcblxuICBjb25zdCBzYXZlRHJhZnQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2ggPSBgP2xvY2FsZT0ke2xvY2FsZX0mZGVwdGg9MCZmYWxsYmFjay1sb2NhbGU9bnVsbCZkcmFmdD10cnVlYFxuICAgIGxldCBhY3Rpb25cbiAgICBsZXQgbWV0aG9kID0gJ1BPU1QnXG5cbiAgICBpZiAoY29sbGVjdGlvblNsdWcpIHtcbiAgICAgIGFjdGlvbiA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnfSR7aWQgPyBgLyR7aWR9YCA6ICcnfSR7c2VhcmNofWAsXG4gICAgICB9KVxuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIG1ldGhvZCA9ICdQQVRDSCdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsU2x1Zykge1xuICAgICAgYWN0aW9uID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICBwYXRoOiBgL2dsb2JhbHMvJHtnbG9iYWxTbHVnfSR7c2VhcmNofWAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGF3YWl0IHN1Ym1pdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICBtZXRob2QsXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgX3N0YXR1czogJ2RyYWZ0JyxcbiAgICAgIH0sXG4gICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICB9KVxuXG4gICAgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnQoKGNvdW50KSA9PiBjb3VudCArIDEpXG4gIH0sIFtzdWJtaXQsIGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnLCBhcGksIGxvY2FsZSwgaWQsIGRpc2FibGVkLCBzZXRVbnB1Ymxpc2hlZFZlcnNpb25Db3VudF0pXG5cbiAgdXNlSG90a2V5KHsgY21kQ3RybEtleTogdHJ1ZSwgZWRpdERlcHRoLCBrZXlDb2RlczogWydzJ10gfSwgKGUpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIC8vIGFic29yYiB0aGUgZXZlbnRcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHJlZj8uY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuY2xpY2soKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxGb3JtU3VibWl0XG4gICAgICBidXR0b25JZD1cImFjdGlvbi1zYXZlLWRyYWZ0XCJcbiAgICAgIGJ1dHRvblN0eWxlPVwic2Vjb25kYXJ5XCJcbiAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICByZXR1cm4gdm9pZCBzYXZlRHJhZnQoKVxuICAgICAgfX1cbiAgICAgIHJlZj17cmVmfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICB7dCgndmVyc2lvbjpzYXZlRHJhZnQnKX1cbiAgICA8L0Zvcm1TdWJtaXQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vY29udGV4dC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVxdWVzdHMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvYXBpLmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnc3RhdHVzJ1xuXG5leHBvcnQgY29uc3QgU3RhdHVzOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGRvY1Blcm1pc3Npb25zLFxuICAgIGdsb2JhbFNsdWcsXG4gICAgaGFzUHVibGlzaGVkRG9jLFxuICAgIGluY3JlbWVudFZlcnNpb25Db3VudCxcbiAgICBpc1RyYXNoZWQsXG4gICAgc2V0TW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZCxcbiAgICBzZXRVbnB1Ymxpc2hlZFZlcnNpb25Db3VudCxcbiAgICB1bnB1Ymxpc2hlZFZlcnNpb25Db3VudCxcbiAgfSA9IHVzZURvY3VtZW50SW5mbygpXG5cbiAgY29uc3QgeyB0b2dnbGVNb2RhbCB9ID0gdXNlTW9kYWwoKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIHJvdXRlczogeyBhcGkgfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IHJlc2V0OiByZXNldEZvcm0gfSA9IHVzZUZvcm0oKVxuICBjb25zdCB7IGNvZGU6IGxvY2FsZSB9ID0gdXNlTG9jYWxlKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgcmV2ZXJ0TW9kYWxTbHVnID0gYGNvbmZpcm0tcmV2ZXJ0LSR7aWR9YFxuXG4gIGxldCBzdGF0dXNUb1JlbmRlcjogJ2NoYW5nZWQnIHwgJ2RyYWZ0JyB8ICdwdWJsaXNoZWQnXG5cbiAgaWYgKHVucHVibGlzaGVkVmVyc2lvbkNvdW50ID4gMCAmJiBoYXNQdWJsaXNoZWREb2MpIHtcbiAgICBzdGF0dXNUb1JlbmRlciA9ICdjaGFuZ2VkJ1xuICB9IGVsc2UgaWYgKCFoYXNQdWJsaXNoZWREb2MpIHtcbiAgICBzdGF0dXNUb1JlbmRlciA9ICdkcmFmdCdcbiAgfSBlbHNlIGlmIChoYXNQdWJsaXNoZWREb2MgJiYgdW5wdWJsaXNoZWRWZXJzaW9uQ291bnQgPD0gMCkge1xuICAgIHN0YXR1c1RvUmVuZGVyID0gJ3B1Ymxpc2hlZCdcbiAgfVxuXG4gIGNvbnN0IGRpc3BsYXlTdGF0dXNLZXkgPSBpc1RyYXNoZWRcbiAgICA/IGhhc1B1Ymxpc2hlZERvY1xuICAgICAgPyAncHJldmlvdXNseVB1Ymxpc2hlZCdcbiAgICAgIDogJ3ByZXZpb3VzbHlEcmFmdCdcbiAgICA6IHN0YXR1c1RvUmVuZGVyXG5cbiAgY29uc3QgcGVyZm9ybUFjdGlvbiA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBsZXQgdXJsXG4gICAgbGV0IG1ldGhvZFxuXG4gICAgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICB1cmwgPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgIGFwaVJvdXRlOiBhcGksXG4gICAgICAgIHBhdGg6IGAvJHtjb2xsZWN0aW9uU2x1Z30vJHtpZH0/bG9jYWxlPSR7bG9jYWxlfSZmYWxsYmFjay1sb2NhbGU9bnVsbCZkZXB0aD0wYCxcbiAgICAgIH0pXG4gICAgICBtZXRob2QgPSAncGF0Y2gnXG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbFNsdWcpIHtcbiAgICAgIHVybCA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgcGF0aDogYC9nbG9iYWxzLyR7Z2xvYmFsU2x1Z30/bG9jYWxlPSR7bG9jYWxlfSZmYWxsYmFjay1sb2NhbGU9bnVsbCZkZXB0aD0wYCxcbiAgICAgIH0pXG4gICAgICBtZXRob2QgPSAncG9zdCdcbiAgICB9XG5cbiAgICBjb25zdCBwdWJsaXNoZWREb2MgPSBhd2FpdCByZXF1ZXN0c1xuICAgICAgLmdldCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSlcblxuICAgIGNvbnN0IGJvZHkgPSBwdWJsaXNoZWREb2NcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlcXVlc3RzW21ldGhvZF0odXJsLCB7XG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICBsZXQgZGF0YVxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKClcblxuICAgICAgaWYgKGdsb2JhbFNsdWcpIHtcbiAgICAgICAgZGF0YSA9IGpzb24ucmVzdWx0XG4gICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICAgIGRhdGEgPSBqc29uLmRvY1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICByZXNldEZvcm0oZGF0YSlcbiAgICAgIHRvYXN0LnN1Y2Nlc3MoanNvbi5tZXNzYWdlKVxuICAgICAgaW5jcmVtZW50VmVyc2lvbkNvdW50KClcbiAgICAgIHNldE1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQoZmFsc2UpXG5cbiAgICAgIHNldFVucHVibGlzaGVkVmVyc2lvbkNvdW50KDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgIGlmIChqc29uLmVycm9ycz8uWzBdPy5tZXNzYWdlKSB7XG4gICAgICAgICAgdG9hc3QuZXJyb3IoanNvbi5lcnJvcnNbMF0ubWVzc2FnZSlcbiAgICAgICAgfSBlbHNlIGlmIChqc29uLmVycm9yKSB7XG4gICAgICAgICAgdG9hc3QuZXJyb3IoanNvbi5lcnJvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjpyZXZlcnRpbmdEb2N1bWVudCcpKVxuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjpyZXZlcnRpbmdEb2N1bWVudCcpKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGFwaSxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBnbG9iYWxTbHVnLFxuICAgIGlkLFxuICAgIGkxOG4ubGFuZ3VhZ2UsXG4gICAgaW5jcmVtZW50VmVyc2lvbkNvdW50LFxuICAgIGxvY2FsZSxcbiAgICByZXNldEZvcm0sXG4gICAgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnQsXG4gICAgc2V0TW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZCxcbiAgICB0LFxuICBdKVxuXG4gIGNvbnN0IGNhblVwZGF0ZSA9IGRvY1Blcm1pc3Npb25zPy51cGRhdGVcblxuICBpZiAoc3RhdHVzVG9SZW5kZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2Jhc2VDbGFzc31cbiAgICAgICAgdGl0bGU9e2Ake3QoJ3ZlcnNpb246c3RhdHVzJyl9OiAke3QoYHZlcnNpb246JHtkaXNwbGF5U3RhdHVzS2V5fWApfWB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X192YWx1ZS13cmFwYH0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9Pnt0KCd2ZXJzaW9uOnN0YXR1cycpfTombmJzcDs8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X192YWx1ZWB9Pnt0KGB2ZXJzaW9uOiR7ZGlzcGxheVN0YXR1c0tleX1gKX08L3NwYW4+XG5cbiAgICAgICAgICB7IWlzVHJhc2hlZCAmJiBjYW5VcGRhdGUgJiYgaGFzUHVibGlzaGVkRG9jICYmIHN0YXR1c1RvUmVuZGVyID09PSAnY2hhbmdlZCcgJiYgKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAmbmJzcDsmbWRhc2g7Jm5ic3A7XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uYH1cbiAgICAgICAgICAgICAgICBpZD1cImFjdGlvbi1yZXZlcnQtdG8tcHVibGlzaGVkXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0b2dnbGVNb2RhbChyZXZlcnRNb2RhbFNsdWcpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoJ3ZlcnNpb246cmV2ZXJ0VG9QdWJsaXNoZWQnKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxDb25maXJtYXRpb25Nb2RhbFxuICAgICAgICAgICAgICAgIGJvZHk9e3QoJ3ZlcnNpb246YWJvdXRUb1JldmVydFRvUHVibGlzaGVkJyl9XG4gICAgICAgICAgICAgICAgY29uZmlybWluZ0xhYmVsPXt0KCd2ZXJzaW9uOnJldmVydGluZycpfVxuICAgICAgICAgICAgICAgIGhlYWRpbmc9e3QoJ3ZlcnNpb246Y29uZmlybVJldmVydFRvU2F2ZWQnKX1cbiAgICAgICAgICAgICAgICBtb2RhbFNsdWc9e3JldmVydE1vZGFsU2x1Z31cbiAgICAgICAgICAgICAgICBvbkNvbmZpcm09eygpID0+IHBlcmZvcm1BY3Rpb24oKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgVW5wdWJsaXNoQnV0dG9uQ2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaS5qcydcbmltcG9ydCB7IHRyYXZlcnNlRm9yTG9jYWxpemVkRmllbGRzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3RyYXZlcnNlRm9yTG9jYWxpemVkRmllbGRzLmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcbmltcG9ydCB7IFBvcHVwTGlzdCB9IGZyb20gJy4uL1BvcHVwL2luZGV4LmpzJ1xuZXhwb3J0IGZ1bmN0aW9uIFVucHVibGlzaEJ1dHRvbih7XG4gIGxhYmVsOiBsYWJlbFByb3AsXG59OiB7IGxhYmVsPzogc3RyaW5nIH0gJiBVbnB1Ymxpc2hCdXR0b25DbGllbnRQcm9wcyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBkYXRhOiBkYXRhRnJvbVByb3BzLFxuICAgIGdsb2JhbFNsdWcsXG4gICAgaGFzUHVibGlzaGVkRG9jLFxuICAgIGhhc1B1Ymxpc2hQZXJtaXNzaW9uLFxuICAgIGluY3JlbWVudFZlcnNpb25Db3VudCxcbiAgICBpc1RyYXNoZWQsXG4gICAgc2V0SGFzUHVibGlzaGVkRG9jLFxuICAgIHNldE1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQsXG4gICAgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnQsXG4gIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuICBjb25zdCB7IHRvZ2dsZU1vZGFsIH0gPSB1c2VNb2RhbCgpXG5cbiAgY29uc3QgeyBjb25maWcsIGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyByZXNldDogcmVzZXRGb3JtIH0gPSB1c2VGb3JtKClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGVDb2RlLCBsYWJlbDogbG9jYWxlTGFiZWwgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IFt1bnB1Ymxpc2hBbGwsIHNldFVucHVibGlzaEFsbF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc0xvY2FsaXplZEZpZWxkcywgc2V0SGFzTG9jYWxpemVkRmllbGRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB1blB1Ymxpc2hNb2RhbFNsdWcgPSBgY29uZmlybS11bi1wdWJsaXNoLSR7aWR9YFxuXG4gIGNvbnN0IHtcbiAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgc2VydmVyVVJMLFxuICB9ID0gY29uZmlnXG5cbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgZW50aXR5Q29uZmlnID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICByZXR1cm4gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWcgfSlcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsU2x1Zykge1xuICAgICAgcmV0dXJuIGdldEVudGl0eUNvbmZpZyh7IGdsb2JhbFNsdWcgfSlcbiAgICB9XG4gIH0sIFtjb2xsZWN0aW9uU2x1ZywgZ2xvYmFsU2x1ZywgZ2V0RW50aXR5Q29uZmlnXSlcblxuICBjb25zdCB1bnB1Ymxpc2ggPSB1c2VDYWxsYmFjayhcbiAgICAodW5wdWJsaXNoQWxsPzogYm9vbGVhbikgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgdXJsXG4gICAgICAgIGxldCBtZXRob2RcblxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHFzLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICAgICdmYWxsYmFjay1sb2NhbGUnOiAnbnVsbCcsXG4gICAgICAgICAgICBsb2NhbGU6IHVucHVibGlzaEFsbCA/IHVuZGVmaW5lZCA6IGxvY2FsZUNvZGUsXG4gICAgICAgICAgICB1bnB1Ymxpc2hBbGxMb2NhbGVzOiB1bnB1Ymxpc2hBbGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgICAgIClcblxuICAgICAgICBpZiAoY29sbGVjdGlvblNsdWcpIHtcbiAgICAgICAgICB1cmwgPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnfS8ke2lkfSR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgIHNlcnZlclVSTCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIG1ldGhvZCA9ICdwYXRjaCdcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbG9iYWxTbHVnKSB7XG4gICAgICAgICAgdXJsID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgICAgICAgIHBhdGg6IGAvZ2xvYmFscy8ke2dsb2JhbFNsdWd9JHtxdWVyeVN0cmluZ31gLFxuICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgbWV0aG9kID0gJ3Bvc3QnXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlcXVlc3RzW21ldGhvZF0odXJsLCB7XG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IF9zdGF0dXM6ICdkcmFmdCcgfSksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgdm9pZCByZXNldEZvcm0oe1xuICAgICAgICAgICAgICAuLi4oZGF0YUZyb21Qcm9wcyB8fCB7fSksXG4gICAgICAgICAgICAgIF9zdGF0dXM6ICdkcmFmdCcsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0b2FzdC5zdWNjZXNzKHQoJ3ZlcnNpb246dW5wdWJsaXNoZWRTdWNjZXNzZnVsbHknKSlcbiAgICAgICAgICAgIGluY3JlbWVudFZlcnNpb25Db3VudCgpXG4gICAgICAgICAgICBzZXRVbnB1Ymxpc2hlZFZlcnNpb25Db3VudCgxKVxuICAgICAgICAgICAgc2V0TW9zdFJlY2VudFZlcnNpb25Jc0F1dG9zYXZlZChmYWxzZSlcbiAgICAgICAgICAgIHNldEhhc1B1Ymxpc2hlZERvYyhmYWxzZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKClcbiAgICAgICAgICAgICAgaWYgKGpzb24uZXJyb3JzPy5bMF0/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0b2FzdC5lcnJvcihqc29uLmVycm9yc1swXS5tZXNzYWdlKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb24uZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0b2FzdC5lcnJvcihqc29uLmVycm9yKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVuUHVibGlzaGluZ0RvY3VtZW50JykpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjp1blB1Ymxpc2hpbmdEb2N1bWVudCcpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6dW5QdWJsaXNoaW5nRG9jdW1lbnQnKSlcbiAgICAgICAgfVxuICAgICAgfSkoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVuUHVibGlzaGluZ0RvY3VtZW50JykpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW1xuICAgICAgZGF0YUZyb21Qcm9wcyxcbiAgICAgIHJlc2V0Rm9ybSxcbiAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgZ2xvYmFsU2x1ZyxcbiAgICAgIHNlcnZlclVSTCxcbiAgICAgIGFwaSxcbiAgICAgIGxvY2FsZUNvZGUsXG4gICAgICBpZCxcbiAgICAgIGkxOG4ubGFuZ3VhZ2UsXG4gICAgICBpbmNyZW1lbnRWZXJzaW9uQ291bnQsXG4gICAgICBzZXRIYXNQdWJsaXNoZWREb2MsXG4gICAgICBzZXRNb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkLFxuICAgICAgc2V0VW5wdWJsaXNoZWRWZXJzaW9uQ291bnQsXG4gICAgICB0LFxuICAgIF0sXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhc0xvY2FsaXplZEZpZWxkID0gdHJhdmVyc2VGb3JMb2NhbGl6ZWRGaWVsZHMoZW50aXR5Q29uZmlnPy5maWVsZHMpXG4gICAgc2V0SGFzTG9jYWxpemVkRmllbGRzKGhhc0xvY2FsaXplZEZpZWxkKVxuICB9LCBbZW50aXR5Q29uZmlnPy5maWVsZHNdKVxuXG4gIGNvbnN0IGRyYWZ0cyA9IGVudGl0eUNvbmZpZz8udmVyc2lvbnM/LmRyYWZ0c1xuICBjb25zdCBoYXNEcmFmdHNFbmFibGVkID0gdHlwZW9mIGRyYWZ0cyA9PT0gJ29iamVjdCcgJiYgZHJhZnRzICE9PSBudWxsXG5cbiAgY29uc3QgY2FuVW5wdWJsaXNoID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGhhc0RyYWZ0c0VuYWJsZWQgJiYgaGFzUHVibGlzaFBlcm1pc3Npb24gJiYgaGFzUHVibGlzaGVkRG9jICYmICFpc1RyYXNoZWRcbiAgfSwgW2hhc1B1Ymxpc2hQZXJtaXNzaW9uLCBoYXNQdWJsaXNoZWREb2MsIGlzVHJhc2hlZCwgaGFzRHJhZnRzRW5hYmxlZF0pXG5cbiAgY29uc3QgY2FuVW5wdWJsaXNoQ3VycmVudExvY2FsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2FuVW5wdWJsaXNoIHx8ICFoYXNMb2NhbGl6ZWRGaWVsZHMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGlzTG9jYWxpemVTdGF0dXNFbmFibGVkID0gZHJhZnRzICYmIGRyYWZ0cy5sb2NhbGl6ZVN0YXR1cyA9PT0gdHJ1ZVxuICAgIGNvbnN0IGlzRXhwZXJpbWVudGFsRW5hYmxlZCA9IGNvbmZpZy5leHBlcmltZW50YWw/LmxvY2FsaXplU3RhdHVzID09PSB0cnVlXG5cbiAgICByZXR1cm4gaXNMb2NhbGl6ZVN0YXR1c0VuYWJsZWQgJiYgaXNFeHBlcmltZW50YWxFbmFibGVkXG4gIH0sIFtjYW5VbnB1Ymxpc2gsIGhhc0xvY2FsaXplZEZpZWxkcywgZHJhZnRzLCBjb25maWcuZXhwZXJpbWVudGFsPy5sb2NhbGl6ZVN0YXR1c10pXG5cbiAgY29uc3QgbGFiZWwgPSBnZXRUcmFuc2xhdGlvbihsb2NhbGVMYWJlbCwgaTE4bilcblxuICBpZiAoIWNhblVucHVibGlzaCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgIGlkPVwiYWN0aW9uLXVucHVibGlzaFwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBzZXRVbnB1Ymxpc2hBbGwodHJ1ZSlcbiAgICAgICAgICB0b2dnbGVNb2RhbCh1blB1Ymxpc2hNb2RhbFNsdWcpXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtsYWJlbFByb3AgfHwgdCgndmVyc2lvbjp1bnB1Ymxpc2gnKX1cbiAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgIHtjYW5VbnB1Ymxpc2hDdXJyZW50TG9jYWxlICYmIChcbiAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICBpZD1cImFjdGlvbi11bnB1Ymxpc2gtbG9jYWxlXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRVbnB1Ymxpc2hBbGwoZmFsc2UpXG4gICAgICAgICAgICB0b2dnbGVNb2RhbCh1blB1Ymxpc2hNb2RhbFNsdWcpXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtsYWJlbFByb3AgPyBgJHtsYWJlbFByb3B9IFske2xhYmVsfV1gIDogdCgndmVyc2lvbjp1bnB1Ymxpc2hJbicsIHsgbG9jYWxlOiBsYWJlbCB9KX1cbiAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgKX1cbiAgICAgIDxDb25maXJtYXRpb25Nb2RhbFxuICAgICAgICBib2R5PXtcbiAgICAgICAgICAhdW5wdWJsaXNoQWxsXG4gICAgICAgICAgICA/IHQoJ3ZlcnNpb246YWJvdXRUb1VucHVibGlzaEluJywgeyBsb2NhbGU6IGxhYmVsIH0pXG4gICAgICAgICAgICA6IHQoJ3ZlcnNpb246YWJvdXRUb1VucHVibGlzaCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybWluZ0xhYmVsPXt0KCd2ZXJzaW9uOnVucHVibGlzaGluZycpfVxuICAgICAgICBoZWFkaW5nPXt0KCd2ZXJzaW9uOmNvbmZpcm1VbnB1Ymxpc2gnKX1cbiAgICAgICAgbW9kYWxTbHVnPXt1blB1Ymxpc2hNb2RhbFNsdWd9XG4gICAgICAgIG9uQ29uZmlybT17KCkgPT4gdW5wdWJsaXNoKHVucHVibGlzaEFsbCl9XG4gICAgICAvPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgSHRtbERpZmYgfSBmcm9tICcuL2RpZmYvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHsgZXNjYXBlRGlmZkhUTUwsIHVuZXNjYXBlRGlmZkhUTUwgfSBmcm9tICcuL2VzY2FwZUh0bWwuanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdodG1sLWRpZmYnXG5cbmV4cG9ydCBjb25zdCBnZXRIVE1MRGlmZkNvbXBvbmVudHMgPSAoe1xuICBmcm9tSFRNTCxcbiAgcG9zdFByb2Nlc3MsXG4gIHRvSFRNTCxcbiAgdG9rZW5pemVCeUNoYXJhY3Rlcixcbn06IHtcbiAgZnJvbUhUTUw6IHN0cmluZ1xuICAvKipcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBIVE1MIG91dHB1dCBhZnRlciBkaWZmaW5nLlxuICAgKiBVc2VmdWwgZm9yIGNvbnZlcnRpbmcgZXNjYXBlIHNlcXVlbmNlcyB0byBIVE1MIGVudGl0aWVzLlxuICAgKi9cbiAgcG9zdFByb2Nlc3M/OiAoaHRtbDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgdG9IVE1MOiBzdHJpbmdcbiAgdG9rZW5pemVCeUNoYXJhY3Rlcj86IGJvb2xlYW5cbn0pOiB7XG4gIEZyb206IFJlYWN0LlJlYWN0Tm9kZVxuICBUbzogUmVhY3QuUmVhY3ROb2RlXG59ID0+IHtcbiAgY29uc3QgZGlmZkhUTUwgPSBuZXcgSHRtbERpZmYoZnJvbUhUTUwsIHRvSFRNTCwge1xuICAgIHRva2VuaXplQnlDaGFyYWN0ZXIsXG4gIH0pXG5cbiAgbGV0IFtvbGRIVE1MLCBuZXdIVE1MXSA9IGRpZmZIVE1MLmdldFNpZGVCeVNpZGVDb250ZW50cygpXG5cbiAgaWYgKHBvc3RQcm9jZXNzKSB7XG4gICAgb2xkSFRNTCA9IHBvc3RQcm9jZXNzKG9sZEhUTUwpXG4gICAgbmV3SFRNTCA9IHBvc3RQcm9jZXNzKG5ld0hUTUwpXG4gIH1cblxuICBjb25zdCBGcm9tID0gb2xkSFRNTCA/IChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RpZmYtb2xkIGh0bWwtZGlmZmB9XG4gICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IG9sZEhUTUwgfX1cbiAgICAvPlxuICApIDogbnVsbFxuXG4gIGNvbnN0IFRvID0gbmV3SFRNTCA/IChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RpZmYtbmV3IGh0bWwtZGlmZmB9XG4gICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IG5ld0hUTUwgfX1cbiAgICAvPlxuICApIDogbnVsbFxuXG4gIHJldHVybiB7IEZyb20sIFRvIH1cbn1cbiIsIi8vIFRha2VuIGFuZCBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Bcm1hbjE5OTQxMTEzL2h0bWwtZGlmZi9ibG9iL21hc3Rlci9wYWNrYWdlcy9odG1sLWRpZmYvc3JjL2luZGV4LnRzXG5cbmludGVyZmFjZSBNYXRjaGVkQmxvY2sge1xuICBuZXdFbmQ6IG51bWJlclxuICBuZXdTdGFydDogbnVtYmVyXG4gIG9sZEVuZDogbnVtYmVyXG4gIG9sZFN0YXJ0OiBudW1iZXJcbiAgc2l6ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBPcGVyYXRpb24ge1xuICAvKipcbiAgICogSW5kZXggb2YgZW50cnkgaW4gdG9rZW5pemVkIHRva2VuIGxpc3RcbiAgICovXG4gIG5ld0VuZDogbnVtYmVyXG4gIG5ld1N0YXJ0OiBudW1iZXJcbiAgb2xkRW5kOiBudW1iZXJcbiAgb2xkU3RhcnQ6IG51bWJlclxuICB0eXBlOiAnY3JlYXRlJyB8ICdkZWxldGUnIHwgJ2VxdWFsJyB8ICdyZXBsYWNlJ1xufVxuXG50eXBlIEJhc2VPcFR5cGUgPSAnY3JlYXRlJyB8ICdkZWxldGUnXG5cbmludGVyZmFjZSBIdG1sRGlmZkNvbmZpZyB7XG4gIGNsYXNzTmFtZXM6IHtcbiAgICBjcmVhdGVCbG9jazogc3RyaW5nXG4gICAgY3JlYXRlSW5saW5lOiBzdHJpbmdcbiAgICBkZWxldGVCbG9jazogc3RyaW5nXG4gICAgZGVsZXRlSW5saW5lOiBzdHJpbmdcbiAgfVxuICBncmVlZHlCb3VuZGFyeTogbnVtYmVyXG4gIGdyZWVkeU1hdGNoOiBib29sZWFuXG4gIG1pbk1hdGNoZWRTaXplOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdG1sRGlmZk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNsYXNzTmFtZXMgZm9yIHdyYXBwZXIgRE9NLlxuICAgKiBVc2UgdGhpcyB0byBjb25maWd1cmUgeW91ciBvd24gc3R5bGVzIHdpdGhvdXQgaW1wb3J0aW5nIHRoZSBidWlsdC1pbiBDU1MgZmlsZVxuICAgKi9cbiAgY2xhc3NOYW1lcz86IFBhcnRpYWw8e1xuICAgIGNyZWF0ZUJsb2NrPzogc3RyaW5nXG4gICAgY3JlYXRlSW5saW5lPzogc3RyaW5nXG4gICAgZGVsZXRlQmxvY2s/OiBzdHJpbmdcbiAgICBkZWxldGVJbmxpbmU/OiBzdHJpbmdcbiAgfT5cbiAgLyoqXG4gICAqIEBkZWZhdWx0VmFsdWUgMTAwMFxuICAgKi9cbiAgZ3JlZWR5Qm91bmRhcnk/OiBudW1iZXJcbiAgLyoqXG4gICAqIFdoZW4gZ3JlZWR5TWF0Y2ggaXMgZW5hYmxlZCwgaWYgdGhlIGxlbmd0aCBvZiB0aGUgc3ViLXRva2VucyBleGNlZWRzIGdyZWVkeUJvdW5kYXJ5LFxuICAgKiB3ZSB3aWxsIHVzZSB0aGUgbWF0Y2hlZCBzdWItdG9rZW5zIHRoYXQgYXJlIHN1ZmZpY2llbnRseSBnb29kLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBvcHRpbWFsLCB0byBlbmhhbmNlIHBlcmZvcm1hbmNlLlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIGdyZWVkeU1hdGNoPzogYm9vbGVhblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIHRocmVzaG9sZCBmb3IgY2FsY3VsYXRpbmcgY29tbW9uIHN1Yi10b2tlbnMuXG4gICAqIFlvdSBtYXkgYWRqdXN0IGl0IHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gMiwgYnV0IG5vdCBsb3dlciwgZHVlIHRvIHRoZSBwb3RlbnRpYWwgaW5jbHVzaW9uIG9mIEhUTUwgdGFncyBpbiB0aGUgY291bnQuXG4gICAqIEBkZWZhdWx0VmFsdWUgMlxuICAgKi9cbiAgbWluTWF0Y2hlZFNpemU/OiBudW1iZXJcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdG9rZW5pemUgYnkgY2hhcmFjdGVyIG9yIGJ5IHdvcmQuXG4gICAqIEBkZWZhdWx0VmFsdWUgZmFsc2VcbiAgICovXG4gIHRva2VuaXplQnlDaGFyYWN0ZXI/OiBib29sZWFuXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZywgcmVnZXhwL29wdGltYWwtcXVhbnRpZmllci1jb25jYXRlbmF0aW9uXG5jb25zdCBodG1sU3RhcnRUYWdSZWcgPSAvXjwoPzxuYW1lPlteXFxzLz5dKylbXj5dKj4kL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nLCByZWdleHAvb3B0aW1hbC1xdWFudGlmaWVyLWNvbmNhdGVuYXRpb25cbmNvbnN0IGh0bWxUYWdXaXRoTmFtZVJlZyA9IC9ePCg/PGlzRW5kPlxcLyk/KD88bmFtZT5bXlxccz5dKylbXj5dKj4kL1xuXG5jb25zdCBodG1sVGFnUmVnID0gL148W14+XSs+L1xuY29uc3QgaHRtbEltZ1RhZ1JlZyA9IC9ePGltZ1tePl0qPiQvXG5jb25zdCBodG1sVmlkZW9UYWdSZWcgPSAvXjx2aWRlb1tePl0qPi4qPzxcXC92aWRlbz4kL21zXG5cbmV4cG9ydCBjbGFzcyBIdG1sRGlmZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBIdG1sRGlmZkNvbmZpZ1xuICBwcml2YXRlIGxlYXN0Q29tbW9uTGVuZ3RoOiBudW1iZXIgPSBJbmZpbml0eVxuICBwcml2YXRlIHJlYWRvbmx5IG1hdGNoZWRCbG9ja0xpc3Q6IE1hdGNoZWRCbG9ja1tdID0gW11cbiAgcHJpdmF0ZSByZWFkb25seSBuZXdUb2tlbnM6IHN0cmluZ1tdID0gW11cbiAgcHJpdmF0ZSByZWFkb25seSBvbGRUb2tlbnM6IHN0cmluZ1tdID0gW11cbiAgcHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb25MaXN0OiBPcGVyYXRpb25bXSA9IFtdXG4gIHByaXZhdGUgc2lkZUJ5U2lkZUNvbnRlbnRzPzogW3N0cmluZywgc3RyaW5nXVxuICBwcml2YXRlIHVuaWZpZWRDb250ZW50Pzogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IoXG4gICAgb2xkSHRtbDogc3RyaW5nLFxuICAgIG5ld0h0bWw6IHN0cmluZyxcbiAgICB7XG4gICAgICBjbGFzc05hbWVzID0ge1xuICAgICAgICBjcmVhdGVCbG9jazogJ2h0bWwtZGlmZi1jcmVhdGUtYmxvY2std3JhcHBlcicsXG4gICAgICAgIGNyZWF0ZUlubGluZTogJ2h0bWwtZGlmZi1jcmVhdGUtaW5saW5lLXdyYXBwZXInLFxuICAgICAgICBkZWxldGVCbG9jazogJ2h0bWwtZGlmZi1kZWxldGUtYmxvY2std3JhcHBlcicsXG4gICAgICAgIGRlbGV0ZUlubGluZTogJ2h0bWwtZGlmZi1kZWxldGUtaW5saW5lLXdyYXBwZXInLFxuICAgICAgfSxcbiAgICAgIGdyZWVkeUJvdW5kYXJ5ID0gMTAwMCxcbiAgICAgIGdyZWVkeU1hdGNoID0gdHJ1ZSxcbiAgICAgIG1pbk1hdGNoZWRTaXplID0gMixcbiAgICAgIHRva2VuaXplQnlDaGFyYWN0ZXIgPSBmYWxzZSxcbiAgICB9OiBIdG1sRGlmZk9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgLy8gaW5pdCBjb25maWdcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGNsYXNzTmFtZXM6IHtcbiAgICAgICAgY3JlYXRlQmxvY2s6ICdodG1sLWRpZmYtY3JlYXRlLWJsb2NrLXdyYXBwZXInLFxuICAgICAgICBjcmVhdGVJbmxpbmU6ICdodG1sLWRpZmYtY3JlYXRlLWlubGluZS13cmFwcGVyJyxcbiAgICAgICAgZGVsZXRlQmxvY2s6ICdodG1sLWRpZmYtZGVsZXRlLWJsb2NrLXdyYXBwZXInLFxuICAgICAgICBkZWxldGVJbmxpbmU6ICdodG1sLWRpZmYtZGVsZXRlLWlubGluZS13cmFwcGVyJyxcbiAgICAgICAgLi4uY2xhc3NOYW1lcyxcbiAgICAgIH0sXG4gICAgICBncmVlZHlCb3VuZGFyeSxcbiAgICAgIGdyZWVkeU1hdGNoLFxuICAgICAgbWluTWF0Y2hlZFNpemUsXG4gICAgfVxuICAgIC8vIHdoaXRlIHNwYWNlIGlzIGp1bmtcbiAgICBvbGRIdG1sID0gb2xkSHRtbC50cmltKClcbiAgICBuZXdIdG1sID0gbmV3SHRtbC50cmltKClcblxuICAgIC8vIG5vIG5lZWQgdG8gZGlmZlxuICAgIGlmIChvbGRIdG1sID09PSBuZXdIdG1sKSB7XG4gICAgICB0aGlzLnVuaWZpZWRDb250ZW50ID0gb2xkSHRtbFxuICAgICAgbGV0IGVxdWFsU2VxdWVuY2UgPSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmcsIHJlZ2V4cC9vcHRpbWFsLXF1YW50aWZpZXItY29uY2F0ZW5hdGlvblxuICAgICAgY29uc3QgY29udGVudCA9IG9sZEh0bWwucmVwbGFjZSgvPChbXlxccy8+XSspW14+XSo+L2csIChtYXRjaDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdGFnTmFtZUxlbmd0aCA9IG5hbWUubGVuZ3RoICsgMVxuICAgICAgICByZXR1cm4gYCR7bWF0Y2guc2xpY2UoMCwgdGFnTmFtZUxlbmd0aCl9IGRhdGEtc2VxPVwiJHsrK2VxdWFsU2VxdWVuY2V9XCIke21hdGNoLnNsaWNlKHRhZ05hbWVMZW5ndGgpfWBcbiAgICAgIH0pXG4gICAgICB0aGlzLnNpZGVCeVNpZGVDb250ZW50cyA9IFtjb250ZW50LCBjb250ZW50XVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gc3RlcDE6IHNwbGl0IEhUTUwgdG8gdG9rZW5zKGF0b21pYyB0b2tlbnMpXG4gICAgY29uc3QgdG9rZW5pemVGbiA9IHRva2VuaXplQnlDaGFyYWN0ZXIgPyB0aGlzLnRva2VuaXplQnlDaGFyYWN0ZXIgOiB0aGlzLnRva2VuaXplQnlXb3JkXG4gICAgdGhpcy5vbGRUb2tlbnMgPSB0b2tlbml6ZUZuKG9sZEh0bWwpXG4gICAgdGhpcy5uZXdUb2tlbnMgPSB0b2tlbml6ZUZuKG5ld0h0bWwpXG4gICAgLy8gc3RlcDI6IGZpbmQgbWF0Y2hlZCBibG9ja3NcbiAgICB0aGlzLm1hdGNoZWRCbG9ja0xpc3QgPSB0aGlzLmdldE1hdGNoZWRCbG9ja0xpc3QoKVxuXG4gICAgLy8gc3RlcDM6IGdlbmVyYXRlIG9wZXJhdGlvbiBsaXN0XG4gICAgdGhpcy5vcGVyYXRpb25MaXN0ID0gdGhpcy5nZXRPcGVyYXRpb25MaXN0KClcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hlZCBibG9jayBiZXR3ZWVuIHRva2Vuc1xuICBwcml2YXRlIGNvbXB1dGVCZXN0TWF0Y2hlZEJsb2NrKFxuICAgIG9sZFN0YXJ0OiBudW1iZXIsXG4gICAgb2xkRW5kOiBudW1iZXIsXG4gICAgbmV3U3RhcnQ6IG51bWJlcixcbiAgICBuZXdFbmQ6IG51bWJlcixcbiAgKTogTWF0Y2hlZEJsb2NrIHwgbnVsbCB7XG4gICAgbGV0IGJlc3RNYXRjaGVkQmxvY2sgPSBudWxsXG4gICAgZm9yIChsZXQgaSA9IG9sZFN0YXJ0OyBpIDwgb2xkRW5kOyBpKyspIHtcbiAgICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKG9sZEVuZCAtIGksIG5ld0VuZCAtIG5ld1N0YXJ0KVxuICAgICAgY29uc3QgcmV0ID0gdGhpcy5zbGlkZUJlc3RNYXRjaGVkQmxvY2soaSwgbmV3U3RhcnQsIGxlbilcbiAgICAgIGlmIChyZXQgJiYgKCFiZXN0TWF0Y2hlZEJsb2NrIHx8IHJldC5zaXplID4gYmVzdE1hdGNoZWRCbG9jay5zaXplKSkge1xuICAgICAgICBiZXN0TWF0Y2hlZEJsb2NrID0gcmV0XG4gICAgICAgIGlmIChyZXQuc2l6ZSA+IHRoaXMubGVhc3RDb21tb25MZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYmVzdE1hdGNoZWRCbG9ja1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGogPSBuZXdTdGFydDsgaiA8IG5ld0VuZDsgaisrKSB7XG4gICAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihvbGRFbmQgLSBvbGRTdGFydCwgbmV3RW5kIC0gailcbiAgICAgIGNvbnN0IHJldCA9IHRoaXMuc2xpZGVCZXN0TWF0Y2hlZEJsb2NrKG9sZFN0YXJ0LCBqLCBsZW4pXG4gICAgICBpZiAocmV0ICYmICghYmVzdE1hdGNoZWRCbG9jayB8fCByZXQuc2l6ZSA+IGJlc3RNYXRjaGVkQmxvY2suc2l6ZSkpIHtcbiAgICAgICAgYmVzdE1hdGNoZWRCbG9jayA9IHJldFxuICAgICAgICBpZiAocmV0LnNpemUgPiB0aGlzLmxlYXN0Q29tbW9uTGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGJlc3RNYXRjaGVkQmxvY2tcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdE1hdGNoZWRCbG9ja1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTWF0Y2hlZEJsb2NrTGlzdChcbiAgICBvbGRTdGFydDogbnVtYmVyLFxuICAgIG9sZEVuZDogbnVtYmVyLFxuICAgIG5ld1N0YXJ0OiBudW1iZXIsXG4gICAgbmV3RW5kOiBudW1iZXIsXG4gICAgbWF0Y2hlZEJsb2NrTGlzdDogTWF0Y2hlZEJsb2NrW10gPSBbXSxcbiAgKTogTWF0Y2hlZEJsb2NrW10ge1xuICAgIGNvbnN0IG1hdGNoQmxvY2sgPSB0aGlzLmNvbXB1dGVCZXN0TWF0Y2hlZEJsb2NrKG9sZFN0YXJ0LCBvbGRFbmQsIG5ld1N0YXJ0LCBuZXdFbmQpXG5cbiAgICBpZiAoIW1hdGNoQmxvY2spIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGlmIChvbGRTdGFydCA8IG1hdGNoQmxvY2sub2xkU3RhcnQgJiYgbmV3U3RhcnQgPCBtYXRjaEJsb2NrLm5ld1N0YXJ0KSB7XG4gICAgICB0aGlzLmNvbXB1dGVNYXRjaGVkQmxvY2tMaXN0KFxuICAgICAgICBvbGRTdGFydCxcbiAgICAgICAgbWF0Y2hCbG9jay5vbGRTdGFydCxcbiAgICAgICAgbmV3U3RhcnQsXG4gICAgICAgIG1hdGNoQmxvY2submV3U3RhcnQsXG4gICAgICAgIG1hdGNoZWRCbG9ja0xpc3QsXG4gICAgICApXG4gICAgfVxuICAgIG1hdGNoZWRCbG9ja0xpc3QucHVzaChtYXRjaEJsb2NrKVxuICAgIGlmIChvbGRFbmQgPiBtYXRjaEJsb2NrLm9sZEVuZCAmJiBuZXdFbmQgPiBtYXRjaEJsb2NrLm5ld0VuZCkge1xuICAgICAgdGhpcy5jb21wdXRlTWF0Y2hlZEJsb2NrTGlzdChcbiAgICAgICAgbWF0Y2hCbG9jay5vbGRFbmQsXG4gICAgICAgIG9sZEVuZCxcbiAgICAgICAgbWF0Y2hCbG9jay5uZXdFbmQsXG4gICAgICAgIG5ld0VuZCxcbiAgICAgICAgbWF0Y2hlZEJsb2NrTGlzdCxcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZWRCbG9ja0xpc3RcbiAgfVxuXG4gIHByaXZhdGUgZHJlc3NVcEJsb2NrVGFnKHR5cGU6IEJhc2VPcFR5cGUsIHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlID09PSAnY3JlYXRlJykge1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmNyZWF0ZUJsb2NrfVwiPiR7dG9rZW59PC9kaXY+YFxuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cIiR7dGhpcy5jb25maWcuY2xhc3NOYW1lcy5kZWxldGVCbG9ja31cIj4ke3Rva2VufTwvZGl2PmBcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBwcml2YXRlIGRyZXNzVXBEaWZmQ29udGVudCh0eXBlOiBCYXNlT3BUeXBlLCB0b2tlbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0b2tlbnMubGVuZ3RoXG4gICAgaWYgKCF0b2tlbnNMZW5ndGgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIGxldCB0ZXh0U3RhcnRJbmRleCA9IDBcbiAgICBsZXQgaSA9IC0xXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgIGkrK1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIHRydWUsIHRoaXMgSFRNTCBzaG91bGQgYmUgZGlmZmVkIGFzIHdlbGwgLSBub3QganVzdCBpdHMgY2hpbGRyZW5cbiAgICAgIGNvbnN0IGlzTWF0Y2hFbGVtZW50ID0gdG9rZW4uaW5jbHVkZXMoJ2RhdGEtZW5hYmxlLW1hdGNoPVwidHJ1ZVwiJylcbiAgICAgIGNvbnN0IGlzTWF0Y2hFeHBsaWNpdGx5RGlzYWJsZWQgPSB0b2tlbi5pbmNsdWRlcygnZGF0YS1lbmFibGUtbWF0Y2g9XCJmYWxzZVwiJylcbiAgICAgIGNvbnN0IGlzSHRtbFRhZyA9ICEhdG9rZW4ubWF0Y2goaHRtbFRhZ1JlZyk/Lmxlbmd0aFxuXG4gICAgICBpZiAoaXNNYXRjaEV4cGxpY2l0bHlEaXNhYmxlZCkge1xuICAgICAgICB0ZXh0U3RhcnRJbmRleCA9IGkgKyAxXG4gICAgICAgIHJlc3VsdCArPSB0b2tlblxuICAgICAgfVxuICAgICAgLy8gdGhpcyB0b2tlbiBpcyBodG1sIHRhZ1xuICAgICAgZWxzZSBpZiAoIWlzTWF0Y2hFbGVtZW50ICYmIGlzSHRtbFRhZykge1xuICAgICAgICAvLyBoYW5kbGUgdGV4dCB0b2tlbnMgYmVmb3JlXG4gICAgICAgIGlmIChpID4gdGV4dFN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5kcmVzc1VwVGV4dCh0eXBlLCB0b2tlbnMuc2xpY2UodGV4dFN0YXJ0SW5kZXgsIGkpKVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSB0aGlzIHRhZ1xuICAgICAgICB0ZXh0U3RhcnRJbmRleCA9IGkgKyAxXG4gICAgICAgIGlmICh0b2tlbi5tYXRjaChodG1sVmlkZW9UYWdSZWcpKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZHJlc3NVcEJsb2NrVGFnKHR5cGUsIHRva2VuKVxuICAgICAgICB9IC8qIGVsc2UgaWYgKFtodG1sSW1nVGFnUmVnXS5zb21lKChpdGVtKSA9PiB0b2tlbi5tYXRjaChpdGVtKSkpIHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5kcmVzc1VwSW5saW5lVGFnKHR5cGUsIHRva2VuKVxuICAgICAgICB9Ki8gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHRva2VuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaEVsZW1lbnQgJiYgaXNIdG1sVGFnKSB7XG4gICAgICAgIC8vIGhhbmRsZSB0ZXh0IHRva2VucyBiZWZvcmVcbiAgICAgICAgaWYgKGkgPiB0ZXh0U3RhcnRJbmRleCkge1xuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmRyZXNzVXBUZXh0KHR5cGUsIHRva2Vucy5zbGljZSh0ZXh0U3RhcnRJbmRleCwgaSkpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgdGhpcyB0YWdcbiAgICAgICAgdGV4dFN0YXJ0SW5kZXggPSBpICsgMVxuICAgICAgICAvLyBBZGQgZGF0YS1tYXRjaC10eXBlIHRvIHRoZSB0YWcgdGhhdCBjYW4gYmUgc3R5bGVkXG4gICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy5kcmVzc3VwTWF0Y2hFbmFibGVkSHRtbFRhZyh0eXBlLCB0b2tlbilcblxuICAgICAgICByZXN1bHQgKz0gbmV3VG9rZW5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRleHRTdGFydEluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICByZXN1bHQgKz0gdGhpcy5kcmVzc1VwVGV4dCh0eXBlLCB0b2tlbnMuc2xpY2UodGV4dFN0YXJ0SW5kZXgpKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBwcml2YXRlIGRyZXNzVXBJbmxpbmVUYWcodHlwZTogQmFzZU9wVHlwZSwgdG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGUgPT09ICdjcmVhdGUnKSB7XG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmNyZWF0ZUlubGluZX1cIj4ke3Rva2VufTwvc3Bhbj5gXG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7dGhpcy5jb25maWcuY2xhc3NOYW1lcy5kZWxldGVJbmxpbmV9XCI+JHt0b2tlbn08L3NwYW4+YFxuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHByaXZhdGUgZHJlc3N1cE1hdGNoRW5hYmxlZEh0bWxUYWcodHlwZTogQmFzZU9wVHlwZSwgdG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gdG9rZW4gaXMgYSBzaW5nbGUgaHRtbCB0YWcsIGUuZy4gPGEgZGF0YS1lbmFibGUtbWF0Y2g9XCJ0cnVlXCIgaHJlZj1cImh0dHBzOi8vMlwiIHJlbD11bmRlZmluZWQgdGFyZ2V0PXVuZGVmaW5lZD5cbiAgICAvLyBhZGQgZGF0YS1tYXRjaC10eXBlIHRvIHRoZSB0YWdcbiAgICBjb25zdCB0YWdOYW1lID0gdG9rZW4ubWF0Y2goaHRtbFN0YXJ0VGFnUmVnKT8uZ3JvdXBzPy5uYW1lXG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICByZXR1cm4gdG9rZW5cbiAgICB9XG4gICAgY29uc3QgdGFnTmFtZUxlbmd0aCA9IHRhZ05hbWUubGVuZ3RoICsgMVxuICAgIGNvbnN0IG1hdGNoVHlwZSA9IHR5cGUgPT09ICdjcmVhdGUnID8gJ2NyZWF0ZScgOiAnZGVsZXRlJ1xuICAgIHJldHVybiBgJHt0b2tlbi5zbGljZSgwLCB0YWdOYW1lTGVuZ3RoKX0gZGF0YS1tYXRjaC10eXBlPVwiJHttYXRjaFR5cGV9XCIke3Rva2VuLnNsaWNlKFxuICAgICAgdGFnTmFtZUxlbmd0aCxcbiAgICAgIHRva2VuLmxlbmd0aCxcbiAgICApfWBcbiAgfVxuXG4gIHByaXZhdGUgZHJlc3NVcFRleHQodHlwZTogQmFzZU9wVHlwZSwgdG9rZW5zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGV4dCA9IHRva2Vucy5qb2luKCcnKVxuICAgIGlmICghdGV4dC50cmltKCkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIHJldHVybiBgPHNwYW4gZGF0YS1tYXRjaC10eXBlPVwiY3JlYXRlXCI+JHt0ZXh0fTwvc3Bhbj5gXG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgcmV0dXJuIGA8c3BhbiBkYXRhLW1hdGNoLXR5cGU9XCJkZWxldGVcIj4ke3RleHR9PC9zcGFuPmBcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgbGlzdCBvZiB0b2tlbiBlbnRyaWVzIHRoYXQgYXJlIG1hdGNoZWQgYmV0d2VlbiB0aGUgb2xkIGFuZCBuZXcgSFRNTC4gVGhpcyBsaXN0IHdpbGwgbm90XG4gICAqIGluY2x1ZGUgdG9rZW4gcmFuZ2VzIHRoYXQgZGlmZmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRNYXRjaGVkQmxvY2tMaXN0KCk6IE1hdGNoZWRCbG9ja1tdIHtcbiAgICBjb25zdCBuMSA9IHRoaXMub2xkVG9rZW5zLmxlbmd0aFxuICAgIGNvbnN0IG4yID0gdGhpcy5uZXdUb2tlbnMubGVuZ3RoXG5cbiAgICAvLyAxLiBzeW5jIGZyb20gc3RhcnRcbiAgICBsZXQgc3RhcnQ6IE1hdGNoZWRCbG9jayB8IG51bGwgPSBudWxsXG4gICAgbGV0IGkgPSAwXG4gICAgd2hpbGUgKGkgPCBuMSAmJiBpIDwgbjIgJiYgdGhpcy5vbGRUb2tlbnNbaV0gPT09IHRoaXMubmV3VG9rZW5zW2ldKSB7XG4gICAgICBpKytcbiAgICB9XG4gICAgaWYgKGkgPj0gdGhpcy5jb25maWcubWluTWF0Y2hlZFNpemUpIHtcbiAgICAgIHN0YXJ0ID0ge1xuICAgICAgICBuZXdFbmQ6IGksXG4gICAgICAgIG5ld1N0YXJ0OiAwLFxuICAgICAgICBvbGRFbmQ6IGksXG4gICAgICAgIG9sZFN0YXJ0OiAwLFxuICAgICAgICBzaXplOiBpLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIHN5bmMgZnJvbSBlbmRcbiAgICBsZXQgZW5kOiBNYXRjaGVkQmxvY2sgfCBudWxsID0gbnVsbFxuICAgIGxldCBlMSA9IG4xIC0gMVxuICAgIGxldCBlMiA9IG4yIC0gMVxuICAgIHdoaWxlIChpIDw9IGUxICYmIGkgPD0gZTIgJiYgdGhpcy5vbGRUb2tlbnNbZTFdID09PSB0aGlzLm5ld1Rva2Vuc1tlMl0pIHtcbiAgICAgIGUxLS1cbiAgICAgIGUyLS1cbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IG4xIC0gMSAtIGUxXG4gICAgaWYgKHNpemUgPj0gdGhpcy5jb25maWcubWluTWF0Y2hlZFNpemUpIHtcbiAgICAgIGVuZCA9IHtcbiAgICAgICAgbmV3RW5kOiBuMixcbiAgICAgICAgbmV3U3RhcnQ6IGUyICsgMSxcbiAgICAgICAgb2xkRW5kOiBuMSxcbiAgICAgICAgb2xkU3RhcnQ6IGUxICsgMSxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBoYW5kbGUgcmVzdFxuICAgIGNvbnN0IG9sZFN0YXJ0ID0gc3RhcnQgPyBpIDogMFxuICAgIGNvbnN0IG9sZEVuZCA9IGVuZCA/IGUxICsgMSA6IG4xXG4gICAgY29uc3QgbmV3U3RhcnQgPSBzdGFydCA/IGkgOiAwXG4gICAgY29uc3QgbmV3RW5kID0gZW5kID8gZTIgKyAxIDogbjJcbiAgICAvLyBvcHRpbWl6ZSBmb3IgbGFyZ2UgdG9rZW5zXG4gICAgaWYgKHRoaXMuY29uZmlnLmdyZWVkeU1hdGNoKSB7XG4gICAgICBjb25zdCBjb21tb25MZW5ndGggPSBNYXRoLm1pbihvbGRFbmQgLSBvbGRTdGFydCwgbmV3RW5kIC0gbmV3U3RhcnQpXG4gICAgICBpZiAoY29tbW9uTGVuZ3RoID4gdGhpcy5jb25maWcuZ3JlZWR5Qm91bmRhcnkpIHtcbiAgICAgICAgdGhpcy5sZWFzdENvbW1vbkxlbmd0aCA9IE1hdGguZmxvb3IoY29tbW9uTGVuZ3RoIC8gMylcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmV0ID0gdGhpcy5jb21wdXRlTWF0Y2hlZEJsb2NrTGlzdChvbGRTdGFydCwgb2xkRW5kLCBuZXdTdGFydCwgbmV3RW5kKVxuICAgIGlmIChzdGFydCkge1xuICAgICAgcmV0LnVuc2hpZnQoc3RhcnQpXG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgIHJldC5wdXNoKGVuZClcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBvcGVyYXRpb24gbGlzdCBieSBtYXRjaGVkQmxvY2tMaXN0XG4gIHByaXZhdGUgZ2V0T3BlcmF0aW9uTGlzdCgpOiBPcGVyYXRpb25bXSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uTGlzdDogT3BlcmF0aW9uW10gPSBbXVxuICAgIGxldCB3YWxrSW5kZXhPbGQgPSAwXG4gICAgbGV0IHdhbGtJbmRleE5ldyA9IDBcbiAgICBmb3IgKGNvbnN0IG1hdGNoZWRCbG9jayBvZiB0aGlzLm1hdGNoZWRCbG9ja0xpc3QpIHtcbiAgICAgIGNvbnN0IGlzT2xkU3RhcnRJbmRleE1hdGNoZWQgPSB3YWxrSW5kZXhPbGQgPT09IG1hdGNoZWRCbG9jay5vbGRTdGFydFxuICAgICAgY29uc3QgaXNOZXdTdGFydEluZGV4TWF0Y2hlZCA9IHdhbGtJbmRleE5ldyA9PT0gbWF0Y2hlZEJsb2NrLm5ld1N0YXJ0XG4gICAgICBjb25zdCBvcGVyYXRpb25CYXNlID0ge1xuICAgICAgICBuZXdFbmQ6IG1hdGNoZWRCbG9jay5uZXdTdGFydCxcbiAgICAgICAgbmV3U3RhcnQ6IHdhbGtJbmRleE5ldyxcbiAgICAgICAgb2xkRW5kOiBtYXRjaGVkQmxvY2sub2xkU3RhcnQsXG4gICAgICAgIG9sZFN0YXJ0OiB3YWxrSW5kZXhPbGQsXG4gICAgICB9XG4gICAgICBpZiAoIWlzT2xkU3RhcnRJbmRleE1hdGNoZWQgJiYgIWlzTmV3U3RhcnRJbmRleE1hdGNoZWQpIHtcbiAgICAgICAgb3BlcmF0aW9uTGlzdC5wdXNoKE9iamVjdC5hc3NpZ24ob3BlcmF0aW9uQmFzZSwgeyB0eXBlOiAncmVwbGFjZScgYXMgY29uc3QgfSkpXG4gICAgICB9IGVsc2UgaWYgKGlzT2xkU3RhcnRJbmRleE1hdGNoZWQgJiYgIWlzTmV3U3RhcnRJbmRleE1hdGNoZWQpIHtcbiAgICAgICAgb3BlcmF0aW9uTGlzdC5wdXNoKE9iamVjdC5hc3NpZ24ob3BlcmF0aW9uQmFzZSwgeyB0eXBlOiAnY3JlYXRlJyBhcyBjb25zdCB9KSlcbiAgICAgIH0gZWxzZSBpZiAoIWlzT2xkU3RhcnRJbmRleE1hdGNoZWQgJiYgaXNOZXdTdGFydEluZGV4TWF0Y2hlZCkge1xuICAgICAgICBvcGVyYXRpb25MaXN0LnB1c2goT2JqZWN0LmFzc2lnbihvcGVyYXRpb25CYXNlLCB7IHR5cGU6ICdkZWxldGUnIGFzIGNvbnN0IH0pKVxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25MaXN0LnB1c2goe1xuICAgICAgICB0eXBlOiAnZXF1YWwnLFxuICAgICAgICBuZXdFbmQ6IG1hdGNoZWRCbG9jay5uZXdFbmQsXG4gICAgICAgIG5ld1N0YXJ0OiBtYXRjaGVkQmxvY2submV3U3RhcnQsXG4gICAgICAgIG9sZEVuZDogbWF0Y2hlZEJsb2NrLm9sZEVuZCxcbiAgICAgICAgb2xkU3RhcnQ6IG1hdGNoZWRCbG9jay5vbGRTdGFydCxcbiAgICAgIH0pXG4gICAgICB3YWxrSW5kZXhPbGQgPSBtYXRjaGVkQmxvY2sub2xkRW5kXG4gICAgICB3YWxrSW5kZXhOZXcgPSBtYXRjaGVkQmxvY2submV3RW5kXG4gICAgfVxuICAgIC8vIGhhbmRsZSB0aGUgdGFpbCBjb250ZW50XG4gICAgY29uc3QgbWF4SW5kZXhPbGQgPSB0aGlzLm9sZFRva2Vucy5sZW5ndGhcbiAgICBjb25zdCBtYXhJbmRleE5ldyA9IHRoaXMubmV3VG9rZW5zLmxlbmd0aFxuICAgIGNvbnN0IHRhaWxPcGVyYXRpb25CYXNlID0ge1xuICAgICAgbmV3RW5kOiBtYXhJbmRleE5ldyxcbiAgICAgIG5ld1N0YXJ0OiB3YWxrSW5kZXhOZXcsXG4gICAgICBvbGRFbmQ6IG1heEluZGV4T2xkLFxuICAgICAgb2xkU3RhcnQ6IHdhbGtJbmRleE9sZCxcbiAgICB9XG4gICAgY29uc3QgaXNPbGRGaW5pc2hlZCA9IHdhbGtJbmRleE9sZCA9PT0gbWF4SW5kZXhPbGRcbiAgICBjb25zdCBpc05ld0ZpbmlzaGVkID0gd2Fsa0luZGV4TmV3ID09PSBtYXhJbmRleE5ld1xuICAgIGlmICghaXNPbGRGaW5pc2hlZCAmJiAhaXNOZXdGaW5pc2hlZCkge1xuICAgICAgb3BlcmF0aW9uTGlzdC5wdXNoKE9iamVjdC5hc3NpZ24odGFpbE9wZXJhdGlvbkJhc2UsIHsgdHlwZTogJ3JlcGxhY2UnIGFzIGNvbnN0IH0pKVxuICAgIH0gZWxzZSBpZiAoaXNPbGRGaW5pc2hlZCAmJiAhaXNOZXdGaW5pc2hlZCkge1xuICAgICAgb3BlcmF0aW9uTGlzdC5wdXNoKE9iamVjdC5hc3NpZ24odGFpbE9wZXJhdGlvbkJhc2UsIHsgdHlwZTogJ2NyZWF0ZScgYXMgY29uc3QgfSkpXG4gICAgfSBlbHNlIGlmICghaXNPbGRGaW5pc2hlZCAmJiBpc05ld0ZpbmlzaGVkKSB7XG4gICAgICBvcGVyYXRpb25MaXN0LnB1c2goT2JqZWN0LmFzc2lnbih0YWlsT3BlcmF0aW9uQmFzZSwgeyB0eXBlOiAnZGVsZXRlJyBhcyBjb25zdCB9KSlcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGlvbkxpc3RcbiAgfVxuXG4gIHByaXZhdGUgc2xpZGVCZXN0TWF0Y2hlZEJsb2NrKGFkZEE6IG51bWJlciwgYWRkQjogbnVtYmVyLCBsZW46IG51bWJlcik6IE1hdGNoZWRCbG9jayB8IG51bGwge1xuICAgIGxldCBtYXhTaXplID0gMFxuICAgIGxldCBiZXN0TWF0Y2hlZEJsb2NrOiBNYXRjaGVkQmxvY2sgfCBudWxsID0gbnVsbFxuXG4gICAgbGV0IGNvbnRpbnVvdXNTaXplID0gMFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLm9sZFRva2Vuc1thZGRBICsgaV0gPT09IHRoaXMubmV3VG9rZW5zW2FkZEIgKyBpXSkge1xuICAgICAgICBjb250aW51b3VzU2l6ZSsrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51b3VzU2l6ZSA9IDBcbiAgICAgIH1cbiAgICAgIGlmIChjb250aW51b3VzU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgbWF4U2l6ZSA9IGNvbnRpbnVvdXNTaXplXG4gICAgICAgIGJlc3RNYXRjaGVkQmxvY2sgPSB7XG4gICAgICAgICAgbmV3RW5kOiBhZGRCICsgaSArIDEsXG4gICAgICAgICAgbmV3U3RhcnQ6IGFkZEIgKyBpIC0gY29udGludW91c1NpemUgKyAxLFxuICAgICAgICAgIG9sZEVuZDogYWRkQSArIGkgKyAxLFxuICAgICAgICAgIG9sZFN0YXJ0OiBhZGRBICsgaSAtIGNvbnRpbnVvdXNTaXplICsgMSxcbiAgICAgICAgICBzaXplOiBjb250aW51b3VzU2l6ZSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXhTaXplID49IHRoaXMuY29uZmlnLm1pbk1hdGNoZWRTaXplID8gYmVzdE1hdGNoZWRCbG9jayA6IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IEhUTUwgdG8gdG9rZW5zIGF0IGNoYXJhY3RlciBsZXZlbCwgcHJlc2VydmluZyBIVE1MIHRhZ3MgYXMgY29tcGxldGUgdG9rZW5zXG4gICAqIEBleGFtcGxlXG4gICAqIHRva2VuaXplKFwiPGE+IEhlbGxvIFdvcmxkIDwvYT5cIilcbiAgICogW1wiPGE+XCIsIFwiIFwiLCBcIkhcIiwgXCJlXCIsIFwibFwiLCBcImxcIiwgXCJvXCIsIFwiIFwiLCBcIldcIiwgXCJvXCIsIFwiclwiLCBcImxcIiwgXCJkXCIsIFwiIFwiLCBcIjwvYT5cIl1cbiAgICovXG4gIHByaXZhdGUgdG9rZW5pemVCeUNoYXJhY3RlcihodG1sOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRmlyc3QsIGlkZW50aWZ5IEhUTUwgdGFncyBhbmQgcHJlc2VydmUgdGhlbSBhcyBjb21wbGV0ZSB0b2tlbnNcbiAgICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW11cbiAgICBsZXQgY3VycmVudFBvcyA9IDBcblxuICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBIVE1MIHRhZ3MgKGluY2x1ZGluZyBwaWN0dXJlIGFuZCB2aWRlbyB0YWdzIHdpdGggY29udGVudClcbiAgICBjb25zdCB0YWdSZWdleCA9IC88cGljdHVyZVtePl0qPi4qPzxcXC9waWN0dXJlPnw8dmlkZW9bXj5dKj4uKj88XFwvdmlkZW8+fDxbXj5dKz4vZ3NcbiAgICBsZXQgbWF0Y2g6IG51bGwgfCBSZWdFeHBFeGVjQXJyYXlcblxuICAgIHdoaWxlICgobWF0Y2ggPSB0YWdSZWdleC5leGVjKGh0bWwpKSAhPT0gbnVsbCkge1xuICAgICAgLy8gQWRkIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSB0YWdcbiAgICAgIGNvbnN0IGJlZm9yZVRhZyA9IGh0bWwuc3Vic3RyaW5nKGN1cnJlbnRQb3MsIG1hdGNoLmluZGV4KVxuICAgICAgaWYgKGJlZm9yZVRhZykge1xuICAgICAgICAvLyBTcGxpdCBub24tdGFnIGNvbnRlbnQgaW50byBpbmRpdmlkdWFsIGNoYXJhY3RlcnNcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGJlZm9yZVRhZykge1xuICAgICAgICAgIHRva2Vucy5wdXNoKGNoYXIpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHRoZSBjb21wbGV0ZSB0YWcgYXMgYSBzaW5nbGUgdG9rZW5cbiAgICAgIHRva2Vucy5wdXNoKG1hdGNoWzBdKVxuICAgICAgY3VycmVudFBvcyA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgfVxuXG4gICAgLy8gQWRkIGFueSByZW1haW5pbmcgY2hhcmFjdGVycyBhZnRlciB0aGUgbGFzdCB0YWdcbiAgICBjb25zdCByZW1haW5pbmcgPSBodG1sLnN1YnN0cmluZyhjdXJyZW50UG9zKVxuICAgIGZvciAoY29uc3QgY2hhciBvZiByZW1haW5pbmcpIHtcbiAgICAgIHRva2Vucy5wdXNoKGNoYXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2Vuc1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgSFRNTCB0byB0b2tlbnNcbiAgICogQGV4YW1wbGVcbiAgICogdG9rZW5pemUoXCI8YT4gSGVsbG8gV29ybGQgPC9hPlwiKVxuICAgKiBbXCI8YT5cIixcIiBcIiwgXCJIZWxsb1wiLCBcIiBcIiwgXCJXb3JsZFwiLCBcIiBcIiwgXCI8L2E+XCJdXG4gICAqL1xuICBwcml2YXRlIHRva2VuaXplQnlXb3JkKGh0bWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBhdG9taWMgdG9rZW46IGh0bWwgdGFn44CBY29udGludW91cyBudW1iZXJzIG9yIGxldHRlcnPjgIFibGFuayBzcGFjZXPjgIFvdGhlciBzeW1ib2xcbiAgICByZXR1cm4gKFxuICAgICAgaHRtbC5tYXRjaChcbiAgICAgICAgLzxwaWN0dXJlW14+XSo+Lio/PFxcL3BpY3R1cmU+fDx2aWRlb1tePl0qPi4qPzxcXC92aWRlbz58PFtePl0rPnxcXHcrXFxifFxccyt8W148Plxcd10vZ3MsXG4gICAgICApIHx8IFtdXG4gICAgKVxuICB9XG5cbiAgcHVibGljIGdldFNpZGVCeVNpZGVDb250ZW50cygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuc2lkZUJ5U2lkZUNvbnRlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpZGVCeVNpZGVDb250ZW50c1xuICAgIH1cblxuICAgIGxldCBvbGRIdG1sID0gJydcbiAgICBsZXQgbmV3SHRtbCA9ICcnXG4gICAgbGV0IGVxdWFsU2VxdWVuY2UgPSAwXG4gICAgdGhpcy5vcGVyYXRpb25MaXN0LmZvckVhY2goKG9wZXJhdGlvbikgPT4ge1xuICAgICAgc3dpdGNoIChvcGVyYXRpb24udHlwZSkge1xuICAgICAgICBjYXNlICdjcmVhdGUnOiB7XG4gICAgICAgICAgbmV3SHRtbCArPSB0aGlzLmRyZXNzVXBEaWZmQ29udGVudChcbiAgICAgICAgICAgICdjcmVhdGUnLFxuICAgICAgICAgICAgdGhpcy5uZXdUb2tlbnMuc2xpY2Uob3BlcmF0aW9uLm5ld1N0YXJ0LCBvcGVyYXRpb24ubmV3RW5kKSxcbiAgICAgICAgICApXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2RlbGV0ZSc6IHtcbiAgICAgICAgICBjb25zdCBkZWxldGVkVG9rZW5zID0gdGhpcy5vbGRUb2tlbnMuc2xpY2Uob3BlcmF0aW9uLm9sZFN0YXJ0LCBvcGVyYXRpb24ub2xkRW5kKVxuICAgICAgICAgIG9sZEh0bWwgKz0gdGhpcy5kcmVzc1VwRGlmZkNvbnRlbnQoJ2RlbGV0ZScsIGRlbGV0ZWRUb2tlbnMpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdlcXVhbCc6IHtcbiAgICAgICAgICBjb25zdCBlcXVhbFRva2VucyA9IHRoaXMubmV3VG9rZW5zLnNsaWNlKG9wZXJhdGlvbi5uZXdTdGFydCwgb3BlcmF0aW9uLm5ld0VuZClcbiAgICAgICAgICBsZXQgZXF1YWxTdHJpbmcgPSAnJ1xuICAgICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZXF1YWxUb2tlbnMpIHtcbiAgICAgICAgICAgIC8vIGZpbmQgc3RhcnQgdGFncyBhbmQgYWRkIGRhdGEtc2VxIHRvIGVuYWJsZSBzeW5jIHNjcm9sbFxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUYWdNYXRjaCA9IHRva2VuLm1hdGNoKGh0bWxTdGFydFRhZ1JlZylcbiAgICAgICAgICAgIGlmIChzdGFydFRhZ01hdGNoKSB7XG4gICAgICAgICAgICAgIGVxdWFsU2VxdWVuY2UgKz0gMVxuICAgICAgICAgICAgICBjb25zdCB0YWdOYW1lTGVuZ3RoID0gKHN0YXJ0VGFnTWF0Y2g/Lmdyb3Vwcz8ubmFtZT8ubGVuZ3RoID8/IDApICsgMVxuICAgICAgICAgICAgICBlcXVhbFN0cmluZyArPSBgJHt0b2tlbi5zbGljZSgwLCB0YWdOYW1lTGVuZ3RoKX0gZGF0YS1zZXE9XCIke2VxdWFsU2VxdWVuY2V9XCIke3Rva2VuLnNsaWNlKHRhZ05hbWVMZW5ndGgpfWBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVxdWFsU3RyaW5nICs9IHRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG9sZEh0bWwgKz0gZXF1YWxTdHJpbmdcbiAgICAgICAgICBuZXdIdG1sICs9IGVxdWFsU3RyaW5nXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3JlcGxhY2UnOiB7XG4gICAgICAgICAgb2xkSHRtbCArPSB0aGlzLmRyZXNzVXBEaWZmQ29udGVudChcbiAgICAgICAgICAgICdkZWxldGUnLFxuICAgICAgICAgICAgdGhpcy5vbGRUb2tlbnMuc2xpY2Uob3BlcmF0aW9uLm9sZFN0YXJ0LCBvcGVyYXRpb24ub2xkRW5kKSxcbiAgICAgICAgICApXG4gICAgICAgICAgbmV3SHRtbCArPSB0aGlzLmRyZXNzVXBEaWZmQ29udGVudChcbiAgICAgICAgICAgICdjcmVhdGUnLFxuICAgICAgICAgICAgdGhpcy5uZXdUb2tlbnMuc2xpY2Uob3BlcmF0aW9uLm5ld1N0YXJ0LCBvcGVyYXRpb24ubmV3RW5kKSxcbiAgICAgICAgICApXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JpY2h0ZXh0IGRpZmYgZXJyb3IgLSBpbnZhbGlkIG9wZXJhdGlvbjogJyArIFN0cmluZyhvcGVyYXRpb24udHlwZSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgcmVzdWx0OiBbc3RyaW5nLCBzdHJpbmddID0gW29sZEh0bWwsIG5ld0h0bWxdXG4gICAgdGhpcy5zaWRlQnlTaWRlQ29udGVudHMgPSByZXN1bHRcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5pZmllZENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy51bmlmaWVkQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmaWVkQ29udGVudFxuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIHRoaXMub3BlcmF0aW9uTGlzdC5mb3JFYWNoKChvcGVyYXRpb24pID0+IHtcbiAgICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnY3JlYXRlJzoge1xuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmRyZXNzVXBEaWZmQ29udGVudChcbiAgICAgICAgICAgICdjcmVhdGUnLFxuICAgICAgICAgICAgdGhpcy5uZXdUb2tlbnMuc2xpY2Uob3BlcmF0aW9uLm5ld1N0YXJ0LCBvcGVyYXRpb24ubmV3RW5kKSxcbiAgICAgICAgICApXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2RlbGV0ZSc6IHtcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5kcmVzc1VwRGlmZkNvbnRlbnQoXG4gICAgICAgICAgICAnZGVsZXRlJyxcbiAgICAgICAgICAgIHRoaXMub2xkVG9rZW5zLnNsaWNlKG9wZXJhdGlvbi5vbGRTdGFydCwgb3BlcmF0aW9uLm9sZEVuZCksXG4gICAgICAgICAgKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdlcXVhbCc6IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRoaXMubmV3VG9rZW5zLnNsaWNlKG9wZXJhdGlvbi5uZXdTdGFydCwgb3BlcmF0aW9uLm5ld0VuZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAncmVwbGFjZSc6IHtcbiAgICAgICAgICAvLyBoYW5kbGUgc3BlY2lhbGx5IHRhZyByZXBsYWNlXG4gICAgICAgICAgY29uc3Qgb2xkcyA9IHRoaXMub2xkVG9rZW5zLnNsaWNlKG9wZXJhdGlvbi5vbGRTdGFydCwgb3BlcmF0aW9uLm9sZEVuZClcbiAgICAgICAgICBjb25zdCBuZXdzID0gdGhpcy5uZXdUb2tlbnMuc2xpY2Uob3BlcmF0aW9uLm5ld1N0YXJ0LCBvcGVyYXRpb24ubmV3RW5kKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9sZHMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICBuZXdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgb2xkc1swXT8ubWF0Y2goaHRtbFRhZ1JlZykgJiZcbiAgICAgICAgICAgIG5ld3NbMF0/Lm1hdGNoKGh0bWxUYWdSZWcpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gbmV3c1swXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWxldGVkVG9rZW5zOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgY29uc3QgY3JlYXRlZFRva2Vuczogc3RyaW5nW10gPSBbXVxuICAgICAgICAgIGxldCBjcmVhdGVJbmRleCA9IG9wZXJhdGlvbi5uZXdTdGFydFxuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgZGVsZXRlSW5kZXggPSBvcGVyYXRpb24ub2xkU3RhcnQ7XG4gICAgICAgICAgICBkZWxldGVJbmRleCA8IG9wZXJhdGlvbi5vbGRFbmQ7XG4gICAgICAgICAgICBkZWxldGVJbmRleCsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVkVG9rZW4gPSB0aGlzLm9sZFRva2Vuc1tkZWxldGVJbmRleF1cblxuICAgICAgICAgICAgaWYgKCFkZWxldGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hUYWdSZXN1bHREID0gZGVsZXRlZFRva2VuPy5tYXRjaChodG1sVGFnV2l0aE5hbWVSZWcpXG4gICAgICAgICAgICBpZiAobWF0Y2hUYWdSZXN1bHREKSB7XG4gICAgICAgICAgICAgIC8vIGhhbmRsZSByZXBsYWNlZCB0YWcgdG9rZW5cblxuICAgICAgICAgICAgICAvLyBza2lwIHNwZWNpYWwgdGFnXG4gICAgICAgICAgICAgIGlmIChbaHRtbEltZ1RhZ1JlZywgaHRtbFZpZGVvVGFnUmVnXS5zb21lKChpdGVtKSA9PiBkZWxldGVkVG9rZW4/Lm1hdGNoKGl0ZW0pKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRUb2tlbnMucHVzaChkZWxldGVkVG9rZW4pXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIGhhbmRsZSBub3JtYWwgdGFnXG4gICAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmRyZXNzVXBEaWZmQ29udGVudCgnZGVsZXRlJywgZGVsZXRlZFRva2VucylcbiAgICAgICAgICAgICAgZGVsZXRlZFRva2Vucy5zcGxpY2UoMClcbiAgICAgICAgICAgICAgbGV0IGlzVGFnSW5OZXdGaW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgdGVtcENyZWF0ZUluZGV4ID0gY3JlYXRlSW5kZXg7XG4gICAgICAgICAgICAgICAgdGVtcENyZWF0ZUluZGV4IDwgb3BlcmF0aW9uLm5ld0VuZDtcbiAgICAgICAgICAgICAgICB0ZW1wQ3JlYXRlSW5kZXgrK1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkVG9rZW4gPSB0aGlzLm5ld1Rva2Vuc1t0ZW1wQ3JlYXRlSW5kZXhdXG4gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoVGFnUmVzdWx0QyA9IGNyZWF0ZWRUb2tlbj8ubWF0Y2goaHRtbFRhZ1dpdGhOYW1lUmVnKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG1hdGNoVGFnUmVzdWx0QyAmJlxuICAgICAgICAgICAgICAgICAgbWF0Y2hUYWdSZXN1bHRDLmdyb3Vwcz8ubmFtZSA9PT0gbWF0Y2hUYWdSZXN1bHRELmdyb3Vwcz8ubmFtZSAmJlxuICAgICAgICAgICAgICAgICAgbWF0Y2hUYWdSZXN1bHRDLmdyb3Vwcz8uaXNFbmQgPT09IG1hdGNoVGFnUmVzdWx0RC5ncm91cHM/LmlzRW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBmaW5kIGZpcnN0IG1hdGNoZWQgdGFnLCBidXQgbm90IG1heWJlIHRoZSBleHBlY3RlZCB0YWcodG8gb3B0aW1pemUpXG4gICAgICAgICAgICAgICAgICBpc1RhZ0luTmV3RmluZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmRyZXNzVXBEaWZmQ29udGVudCgnY3JlYXRlJywgY3JlYXRlZFRva2VucylcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjcmVhdGVkVG9rZW5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRUb2tlbnMuc3BsaWNlKDApXG4gICAgICAgICAgICAgICAgICBjcmVhdGVJbmRleCA9IHRlbXBDcmVhdGVJbmRleCArIDFcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRUb2tlbnMucHVzaChjcmVhdGVkVG9rZW4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghaXNUYWdJbk5ld0ZpbmQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZGVsZXRlZFRva2VuXG4gICAgICAgICAgICAgICAgY3JlYXRlZFRva2Vucy5zcGxpY2UoMClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdG9rZW4gaXMgbm90IGEgdGFnXG4gICAgICAgICAgICAgIGRlbGV0ZWRUb2tlbnMucHVzaChkZWxldGVkVG9rZW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjcmVhdGVJbmRleCA8IG9wZXJhdGlvbi5uZXdFbmQpIHtcbiAgICAgICAgICAgIGNyZWF0ZWRUb2tlbnMucHVzaCguLi50aGlzLm5ld1Rva2Vucy5zbGljZShjcmVhdGVJbmRleCwgb3BlcmF0aW9uLm5ld0VuZCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmRyZXNzVXBEaWZmQ29udGVudCgnZGVsZXRlJywgZGVsZXRlZFRva2VucylcbiAgICAgICAgICByZXN1bHQgKz0gdGhpcy5kcmVzc1VwRGlmZkNvbnRlbnQoJ2NyZWF0ZScsIGNyZWF0ZWRUb2tlbnMpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JpY2h0ZXh0IGRpZmYgZXJyb3IgLSBpbnZhbGlkIG9wZXJhdGlvbjogJyArIFN0cmluZyhvcGVyYXRpb24udHlwZSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMudW5pZmllZENvbnRlbnQgPSByZXN1bHRcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cbiIsIi8vIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSBjaGFyYWN0ZXJzIGZvciB0ZW1wb3JhcnkgZXNjYXBpbmcgZHVyaW5nIGRpZmYuXG4vLyBUaGVzZSBhcmUgcmVwbGFjZWQgd2l0aCBIVE1MIGVudGl0aWVzIGFmdGVyIHRoZSBkaWZmIGlzIGNvbXB1dGVkLlxuY29uc3QgRVNDQVBFX01BUCA9IHtcbiAgJ1wiJzogJ1xcdUUwMDQnLFxuICAnJic6ICdcXHVFMDAxJyxcbiAgXCInXCI6ICdcXHVFMDA1JyxcbiAgJzwnOiAnXFx1RTAwMicsXG4gICc+JzogJ1xcdUUwMDMnLFxufSBhcyBjb25zdFxuXG5jb25zdCBVTkVTQ0FQRV9NQVAgPSB7XG4gICdcXHVFMDAxJzogJyZhbXA7JyxcbiAgJ1xcdUUwMDInOiAnJmx0OycsXG4gICdcXHVFMDAzJzogJyZndDsnLFxuICAnXFx1RTAwNCc6ICcmcXVvdDsnLFxuICAnXFx1RTAwNSc6ICcmIzM5OycsXG59IGFzIGNvbnN0XG5cbi8qKlxuICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyB1c2luZyBVbmljb2RlIHBsYWNlaG9sZGVycy5cbiAqIFRoZXNlIG11c3QgYmUgY29udmVydGVkIHRvIEhUTUwgZW50aXRpZXMgYWZ0ZXIgZGlmZmluZyB1c2luZyB1bmVzY2FwZURpZmZIVE1MLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRGlmZkhUTUwodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGNvbnN0IHN0ciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSlcblxuICByZXR1cm4gc3RyXG4gICAgLnJlcGxhY2UoLyYvZywgRVNDQVBFX01BUFsnJiddKVxuICAgIC5yZXBsYWNlKC88L2csIEVTQ0FQRV9NQVBbJzwnXSlcbiAgICAucmVwbGFjZSgvPi9nLCBFU0NBUEVfTUFQWyc+J10pXG4gICAgLnJlcGxhY2UoL1wiL2csIEVTQ0FQRV9NQVBbJ1wiJ10pXG4gICAgLnJlcGxhY2UoLycvZywgRVNDQVBFX01BUFtcIidcIl0pXG59XG5cbi8qKlxuICogQ29udmVydHMgVW5pY29kZSBwbGFjZWhvbGRlciBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKiBDYWxsIHRoaXMgb24gdGhlIGZpbmFsIEhUTUwgb3V0cHV0IGFmdGVyIGRpZmZpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZURpZmZIVE1MKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBodG1sXG4gICAgLnJlcGxhY2UoL1xcdUUwMDEvZywgVU5FU0NBUEVfTUFQWydcXHVFMDAxJ10pXG4gICAgLnJlcGxhY2UoL1xcdUUwMDIvZywgVU5FU0NBUEVfTUFQWydcXHVFMDAyJ10pXG4gICAgLnJlcGxhY2UoL1xcdUUwMDMvZywgVU5FU0NBUEVfTUFQWydcXHVFMDAzJ10pXG4gICAgLnJlcGxhY2UoL1xcdUUwMDQvZywgVU5FU0NBUEVfTUFQWydcXHVFMDA0J10pXG4gICAgLnJlcGxhY2UoL1xcdUUwMDUvZywgVU5FU0NBUEVfTUFQWydcXHVFMDA1J10pXG59XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ2xpY2tPdXRzaWRlQ29udGV4dCB9IGZyb20gJy4uL3Byb3ZpZGVycy9DbGlja091dHNpZGUvaW5kZXguanMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VDbGlja091dHNpZGUoXG4gIHJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxFbGVtZW50PixcbiAgaGFuZGxlcjogKCkgPT4gdm9pZCxcbiAgZW5hYmxlZCA9IHRydWUsXG4pIHtcbiAgY29uc3QgeyByZWdpc3RlciwgdW5yZWdpc3RlciB9ID0gdXNlQ2xpY2tPdXRzaWRlQ29udGV4dCgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuYWJsZWQgfHwgIXJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ZW5lciA9IHsgaGFuZGxlciwgcmVmIH1cbiAgICByZWdpc3RlcihsaXN0ZW5lcilcbiAgICByZXR1cm4gKCkgPT4gdW5yZWdpc3RlcihsaXN0ZW5lcilcbiAgfSwgW3JlZiwgaGFuZGxlciwgZW5hYmxlZCwgcmVnaXN0ZXIsIHVucmVnaXN0ZXJdKVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxudHlwZSBMaXN0ZW5lciA9IHtcbiAgaGFuZGxlcjogKCkgPT4gdm9pZFxuICByZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRWxlbWVudD5cbn1cblxuY29uc3QgQ2xpY2tPdXRzaWRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8e1xuICByZWdpc3RlcjogKGxpc3RlbmVyOiBMaXN0ZW5lcikgPT4gdm9pZFxuICB1bnJlZ2lzdGVyOiAobGlzdGVuZXI6IExpc3RlbmVyKSA9PiB2b2lkXG59IHwgbnVsbD4obnVsbClcblxuZXhwb3J0IGNvbnN0IENsaWNrT3V0c2lkZVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IHVzZVJlZjxTZXQ8TGlzdGVuZXI+PihuZXcgU2V0KCkpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgbGlzdGVuZXJzLmN1cnJlbnQuZm9yRWFjaCgoeyBoYW5kbGVyLCByZWYgfSkgPT4ge1xuICAgICAgICBpZiAocmVmLmN1cnJlbnQgJiYgIXJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICAgIGhhbmRsZXIoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGljaylcbiAgfSwgW10pXG5cbiAgY29uc3QgcmVnaXN0ZXIgPSAobGlzdGVuZXI6IExpc3RlbmVyKSA9PiBsaXN0ZW5lcnMuY3VycmVudC5hZGQobGlzdGVuZXIpXG4gIGNvbnN0IHVucmVnaXN0ZXIgPSAobGlzdGVuZXI6IExpc3RlbmVyKSA9PiBsaXN0ZW5lcnMuY3VycmVudC5kZWxldGUobGlzdGVuZXIpXG5cbiAgcmV0dXJuIDxDbGlja091dHNpZGVDb250ZXh0IHZhbHVlPXt7IHJlZ2lzdGVyLCB1bnJlZ2lzdGVyIH19PntjaGlsZHJlbn08L0NsaWNrT3V0c2lkZUNvbnRleHQ+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDbGlja091dHNpZGVDb250ZXh0ID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlKENsaWNrT3V0c2lkZUNvbnRleHQpXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQ2xpY2tPdXRzaWRlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDbGlja091dHNpZGVQcm92aWRlcicpXG4gIH1cbiAgcmV0dXJuIGNvbnRleHRcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBXaGVyZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgRmllbGRPcHRpb24gfSBmcm9tICcuLi9GaWVsZFNlbGVjdC9yZWR1Y2VGaWVsZE9wdGlvbnMuanMnXG5cbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IEVkaXREZXB0aFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IFNlbGVjdEFsbFN0YXR1cywgdXNlU2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyIH0gZnJvbSAnLi4vRHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgTGlzdFNlbGVjdGlvbkJ1dHRvbiB9IGZyb20gJy4uL0xpc3RTZWxlY3Rpb24vaW5kZXguanMnXG5pbXBvcnQgeyBFZGl0TWFueURyYXdlckNvbnRlbnQgfSBmcm9tICcuL0RyYXdlckNvbnRlbnQuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGNvbnN0IGJhc2VDbGFzcyA9ICdlZGl0LW1hbnknXG5cbmV4cG9ydCB0eXBlIEVkaXRNYW55UHJvcHMgPSB7XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb246IENsaWVudENvbGxlY3Rpb25Db25maWdcbn1cblxuZXhwb3J0IGNvbnN0IEVkaXRNYW55OiBSZWFjdC5GQzxFZGl0TWFueVByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNvdW50LCBzZWxlY3RBbGwsIHNlbGVjdGVkSURzLCB0b2dnbGVBbGwgfSA9IHVzZVNlbGVjdGlvbigpXG5cbiAgcmV0dXJuIChcbiAgICA8RWRpdE1hbnlfdjRcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGNvdW50PXtjb3VudH1cbiAgICAgIGlkcz17c2VsZWN0ZWRJRHN9XG4gICAgICBvblN1Y2Nlc3M9eygpID0+IHRvZ2dsZUFsbCgpfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5BbGxBdmFpbGFibGV9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgRWRpdE1hbnlfdjQ6IFJlYWN0LkZDPFxuICB7XG4gICAgY291bnQ6IG51bWJlclxuICAgIGlkczogKG51bWJlciB8IHN0cmluZylbXVxuICAgIC8qKlxuICAgICAqIFdoZW4gbXVsdGlwbGUgRWRpdE1hbnkgY29tcG9uZW50cyBhcmUgcmVuZGVyZWQgb24gdGhlIHBhZ2UsIHRoaXMgd2lsbCBkaWZmZXJlbnRpYXRlIHRoZW0uXG4gICAgICovXG4gICAgbW9kYWxQcmVmaXg/OiBzdHJpbmdcbiAgICBvblN1Y2Nlc3M/OiAoKSA9PiB2b2lkXG4gICAgc2VsZWN0QWxsOiBib29sZWFuXG4gICAgd2hlcmU/OiBXaGVyZVxuICB9ICYgT21pdDxFZGl0TWFueVByb3BzLCAnaWRzJz5cbj4gPSAoeyBjb2xsZWN0aW9uLCBjb3VudCwgaWRzLCBtb2RhbFByZWZpeCwgb25TdWNjZXNzLCBzZWxlY3RBbGwsIHdoZXJlIH0pID0+IHtcbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG5cbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgW3NlbGVjdGVkRmllbGRzLCBzZXRTZWxlY3RlZEZpZWxkc10gPSB1c2VTdGF0ZTxGaWVsZE9wdGlvbltdPihbXSlcblxuICBjb25zdCBjb2xsZWN0aW9uUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucz8uY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uLnNsdWddXG5cbiAgY29uc3QgZHJhd2VyU2x1ZyA9IGAke21vZGFsUHJlZml4ID8gYCR7bW9kYWxQcmVmaXh9LWAgOiAnJ31lZGl0LSR7Y29sbGVjdGlvbi5zbHVnfWBcblxuICBpZiAoY291bnQgPT09IDAgfHwgIWNvbGxlY3Rpb25QZXJtaXNzaW9ucz8udXBkYXRlKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGAke2Jhc2VDbGFzc31fX3RvZ2dsZWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9PlxuICAgICAgPExpc3RTZWxlY3Rpb25CdXR0b25cbiAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDplZGl0Jyl9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBvcGVuTW9kYWwoZHJhd2VyU2x1ZylcbiAgICAgICAgICBzZXRTZWxlY3RlZEZpZWxkcyhbXSlcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3QoJ2dlbmVyYWw6ZWRpdCcpfVxuICAgICAgPC9MaXN0U2VsZWN0aW9uQnV0dG9uPlxuICAgICAgPEVkaXREZXB0aFByb3ZpZGVyPlxuICAgICAgICA8RHJhd2VyIEhlYWRlcj17bnVsbH0gc2x1Zz17ZHJhd2VyU2x1Z30+XG4gICAgICAgICAgPEVkaXRNYW55RHJhd2VyQ29udGVudFxuICAgICAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbn1cbiAgICAgICAgICAgIGNvdW50PXtjb3VudH1cbiAgICAgICAgICAgIGRyYXdlclNsdWc9e2RyYXdlclNsdWd9XG4gICAgICAgICAgICBpZHM9e2lkc31cbiAgICAgICAgICAgIG9uU3VjY2Vzcz17b25TdWNjZXNzfVxuICAgICAgICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGx9XG4gICAgICAgICAgICBzZWxlY3RlZEZpZWxkcz17c2VsZWN0ZWRGaWVsZHN9XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEZpZWxkcz17c2V0U2VsZWN0ZWRGaWVsZHN9XG4gICAgICAgICAgICB3aGVyZT17d2hlcmV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICA8L0VkaXREZXB0aFByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBTZWxlY3RUeXBlLCBXaGVyZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB1c2VSb3V0ZXIsIHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7XG4gIGNvbWJpbmVXaGVyZUNvbnN0cmFpbnRzLFxuICBmb3JtYXRBZG1pblVSTCxcbiAgbWVyZ2VMaXN0U2VhcmNoQW5kV2hlcmUsXG4gIHVuZmxhdHRlbixcbn0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBGb3JtUHJvcHMgfSBmcm9tICcuLi8uLi9mb3Jtcy9Gb3JtL2luZGV4LmpzJ1xuaW1wb3J0IHR5cGUgeyBPbkZpZWxkU2VsZWN0IH0gZnJvbSAnLi4vRmllbGRTZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgdHlwZSB7IEZpZWxkT3B0aW9uIH0gZnJvbSAnLi4vRmllbGRTZWxlY3QvcmVkdWNlRmllbGRPcHRpb25zLmpzJ1xuXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vaW5kZXguanMnXG5pbXBvcnQgeyBSZW5kZXJGaWVsZCB9IGZyb20gJy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9SZW5kZXJGaWVsZC5qcydcbmltcG9ydCB7IEZvcm1TdWJtaXQgfSBmcm9tICcuLi8uLi9mb3Jtcy9TdWJtaXQvaW5kZXguanMnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgRG9jdW1lbnRJbmZvUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IE9wZXJhdGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvT3BlcmF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlU2VydmVyRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlcnZlckZ1bmN0aW9ucy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgYWJvcnRBbmRJZ25vcmUsIGhhbmRsZUFib3J0UmVmIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2Fib3J0QW5kSWdub3JlLmpzJ1xuaW1wb3J0IHsgcGFyc2VTZWFyY2hQYXJhbXMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvcGFyc2VTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgeyBGaWVsZFNlbGVjdCB9IGZyb20gJy4uL0ZpZWxkU2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgJy4uLy4uL2Zvcm1zL1JlbmRlckZpZWxkcy9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgYmFzZUNsYXNzLCB0eXBlIEVkaXRNYW55UHJvcHMgfSBmcm9tICcuL2luZGV4LmpzJ1xuXG5jb25zdCBTdWJtaXQ6IFJlYWN0LkZDPHtcbiAgcmVhZG9ubHkgYWN0aW9uOiBzdHJpbmdcbiAgcmVhZG9ubHkgZGlzYWJsZWQ6IGJvb2xlYW5cbn0+ID0gKHsgYWN0aW9uLCBkaXNhYmxlZCB9KSA9PiB7XG4gIGNvbnN0IHsgc3VibWl0IH0gPSB1c2VGb3JtKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3Qgc2F2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB2b2lkIHN1Ym1pdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICB9KVxuICB9LCBbYWN0aW9uLCBzdWJtaXRdKVxuXG4gIHJldHVybiAoXG4gICAgPEZvcm1TdWJtaXQgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zYXZlYH0gZGlzYWJsZWQ9e2Rpc2FibGVkfSBvbkNsaWNrPXtzYXZlfT5cbiAgICAgIHt0KCdnZW5lcmFsOnNhdmUnKX1cbiAgICA8L0Zvcm1TdWJtaXQ+XG4gIClcbn1cblxuY29uc3QgUHVibGlzaEJ1dHRvbjogUmVhY3QuRkM8e1xuICBhY3Rpb246IHN0cmluZ1xuICBkaXNhYmxlZDogYm9vbGVhblxufT4gPSAoeyBhY3Rpb24sIGRpc2FibGVkIH0pID0+IHtcbiAgY29uc3QgeyBzdWJtaXQgfSA9IHVzZUZvcm0oKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBzYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHZvaWQgc3VibWl0KHtcbiAgICAgIGFjdGlvbixcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICBfc3RhdHVzOiAncHVibGlzaGVkJyxcbiAgICAgIH0sXG4gICAgICBza2lwVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICB9KVxuICB9LCBbYWN0aW9uLCBzdWJtaXRdKVxuXG4gIHJldHVybiAoXG4gICAgPEZvcm1TdWJtaXQgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wdWJsaXNoYH0gZGlzYWJsZWQ9e2Rpc2FibGVkfSBvbkNsaWNrPXtzYXZlfT5cbiAgICAgIHt0KCd2ZXJzaW9uOnB1Ymxpc2hDaGFuZ2VzJyl9XG4gICAgPC9Gb3JtU3VibWl0PlxuICApXG59XG5cbmNvbnN0IFNhdmVEcmFmdEJ1dHRvbjogUmVhY3QuRkM8e1xuICBhY3Rpb246IHN0cmluZ1xuICBkaXNhYmxlZDogYm9vbGVhblxufT4gPSAoeyBhY3Rpb24sIGRpc2FibGVkIH0pID0+IHtcbiAgY29uc3QgeyBzdWJtaXQgfSA9IHVzZUZvcm0oKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBzYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHZvaWQgc3VibWl0KHtcbiAgICAgIGFjdGlvbixcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICBfc3RhdHVzOiAnZHJhZnQnLFxuICAgICAgfSxcbiAgICAgIHNraXBWYWxpZGF0aW9uOiB0cnVlLFxuICAgIH0pXG4gIH0sIFthY3Rpb24sIHN1Ym1pdF0pXG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybVN1Ym1pdFxuICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcmFmdGB9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtzYXZlfVxuICAgID5cbiAgICAgIHt0KCd2ZXJzaW9uOnNhdmVEcmFmdCcpfVxuICAgIDwvRm9ybVN1Ym1pdD5cbiAgKVxufVxuXG50eXBlIEVkaXRNYW55RHJhd2VyQ29udGVudFByb3BzID0ge1xuICAvKipcbiAgICogVGhlIHRvdGFsIGNvdW50IG9mIHNlbGVjdGVkIGl0ZW1zXG4gICAqL1xuICBjb3VudD86IG51bWJlclxuICAvKipcbiAgICogVGhlIHNsdWcgb2YgdGhlIGRyYXdlclxuICAgKi9cbiAgZHJhd2VyU2x1Zzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgSURzIG9mIHRoZSBzZWxlY3RlZCBpdGVtc1xuICAgKi9cbiAgaWRzPzogKG51bWJlciB8IHN0cmluZylbXVxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgYSBzdWNjZXNzZnVsIGFjdGlvblxuICAgKi9cbiAgb25TdWNjZXNzPzogKCkgPT4gdm9pZFxuICAvKipcbiAgICogV2hldGhlciBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkXG4gICAqL1xuICBzZWxlY3RBbGw/OiBib29sZWFuXG4gIC8qKlxuICAgKiBUaGUgZmllbGRzIHRoYXQgYXJlIHNlbGVjdGVkIHRvIGJ1bGsgZWRpdFxuICAgKi9cbiAgc2VsZWN0ZWRGaWVsZHM6IEZpZWxkT3B0aW9uW11cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBzZXQgdGhlIHNlbGVjdGVkIGZpZWxkcyB0byBidWxrIGVkaXRcbiAgICovXG4gIHNldFNlbGVjdGVkRmllbGRzOiAoZmllbGRzOiBGaWVsZE9wdGlvbltdKSA9PiB2b2lkXG4gIHdoZXJlPzogV2hlcmVcbn0gJiBFZGl0TWFueVByb3BzXG5cbmV4cG9ydCBjb25zdCBFZGl0TWFueURyYXdlckNvbnRlbnQ6IFJlYWN0LkZDPEVkaXRNYW55RHJhd2VyQ29udGVudFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29sbGVjdGlvbixcbiAgICBjb2xsZWN0aW9uOiB7IGZpZWxkcywgbGFiZWxzOiB7IHBsdXJhbCwgc2luZ3VsYXIgfSB9ID0ge30sXG4gICAgY291bnQsXG4gICAgZHJhd2VyU2x1ZyxcbiAgICBpZHMsXG4gICAgb25TdWNjZXNzOiBvblN1Y2Nlc3NGcm9tUHJvcHMsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkRmllbGRzLFxuICAgIHNldFNlbGVjdGVkRmllbGRzLFxuICAgIHdoZXJlLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IHBlcm1pc3Npb25zLCB1c2VyIH0gPSB1c2VBdXRoKClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG5cbiAgY29uc3QgeyBjbG9zZU1vZGFsIH0gPSB1c2VNb2RhbCgpXG5cbiAgY29uc3Qge1xuICAgIGNvbmZpZzoge1xuICAgICAgcm91dGVzOiB7IGFwaTogYXBpUm91dGUgfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IGdldEZvcm1TdGF0ZSB9ID0gdXNlU2VydmVyRnVuY3Rpb25zKClcblxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBbaXNJbml0aWFsaXppbmcsIHNldElzSW5pdGlhbGl6aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IGFib3J0Rm9ybVN0YXRlUmVmID0gUmVhY3QudXNlUmVmPEFib3J0Q29udHJvbGxlcj4obnVsbClcbiAgY29uc3QgY29sbGVjdGlvblBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5bY29sbGVjdGlvbi5zbHVnXVxuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKVxuXG4gIGNvbnN0IHNlbGVjdCA9IHVzZU1lbW88U2VsZWN0VHlwZT4oKCkgPT4ge1xuICAgIHJldHVybiB1bmZsYXR0ZW4oXG4gICAgICBzZWxlY3RlZEZpZWxkcy5yZWR1Y2UoKGFjYywgb3B0aW9uKSA9PiB7XG4gICAgICAgIGFjY1tvcHRpb24udmFsdWUucGF0aF0gPSB0cnVlXG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIHt9IGFzIFNlbGVjdFR5cGUpLFxuICAgIClcbiAgfSwgW3NlbGVjdGVkRmllbGRzXSlcblxuICBjb25zdCBvbkNoYW5nZTogRm9ybVByb3BzWydvbkNoYW5nZSddWzBdID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHsgZm9ybVN0YXRlOiBwcmV2Rm9ybVN0YXRlLCBzdWJtaXR0ZWQgfSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IGhhbmRsZUFib3J0UmVmKGFib3J0Rm9ybVN0YXRlUmVmKVxuXG4gICAgICBjb25zdCB7IHN0YXRlIH0gPSBhd2FpdCBnZXRGb3JtU3RhdGUoe1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZzogY29sbGVjdGlvbi5zbHVnLFxuICAgICAgICBkb2NQZXJtaXNzaW9uczogY29sbGVjdGlvblBlcm1pc3Npb25zLFxuICAgICAgICBkb2NQcmVmZXJlbmNlczogbnVsbCxcbiAgICAgICAgZm9ybVN0YXRlOiBwcmV2Rm9ybVN0YXRlLFxuICAgICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2xsZWN0aW9uLnNsdWcsXG4gICAgICAgIHNlbGVjdCxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgc2tpcFZhbGlkYXRpb246ICFzdWJtaXR0ZWQsXG4gICAgICB9KVxuXG4gICAgICBhYm9ydEZvcm1TdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9LFxuICAgIFtnZXRGb3JtU3RhdGUsIGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25QZXJtaXNzaW9ucywgc2VsZWN0XSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWJvcnRGb3JtU3RhdGUgPSBhYm9ydEZvcm1TdGF0ZVJlZi5jdXJyZW50XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWJvcnRBbmRJZ25vcmUoYWJvcnRGb3JtU3RhdGUpXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3Qgd2hlcmVDb25zdHJhaW50czogV2hlcmVbXSA9IFtdXG5cbiAgICBpZiAod2hlcmUpIHtcbiAgICAgIHdoZXJlQ29uc3RyYWludHMucHVzaCh3aGVyZSlcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVdpdGhTZWFyY2ggPSBtZXJnZUxpc3RTZWFyY2hBbmRXaGVyZSh7XG4gICAgICBjb2xsZWN0aW9uQ29uZmlnOiBjb2xsZWN0aW9uLFxuICAgICAgc2VhcmNoOiBzZWFyY2hQYXJhbXMuZ2V0KCdzZWFyY2gnKSxcbiAgICB9KVxuXG4gICAgaWYgKHF1ZXJ5V2l0aFNlYXJjaCkge1xuICAgICAgd2hlcmVDb25zdHJhaW50cy5wdXNoKHF1ZXJ5V2l0aFNlYXJjaClcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0QWxsKSB7XG4gICAgICAvLyBNYXRjaCB0aGUgY3VycmVudCBmaWx0ZXIvc2VhcmNoLCBvciBkZWZhdWx0IHRvIGFsbCBkb2NzXG4gICAgICB3aGVyZUNvbnN0cmFpbnRzLnB1c2goXG4gICAgICAgIChwYXJzZVNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpPy53aGVyZSBhcyBXaGVyZSkgfHwge1xuICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICBub3RfZXF1YWxzOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB3ZSdyZSBub3Qgc2VsZWN0aW5nIGFsbCwgd2UgbmVlZCB0byBzZWxlY3Qgc3BlY2lmaWMgZG9jc1xuICAgICAgd2hlcmVDb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICBpbjogaWRzIHx8IFtdLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gcXMuc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIHNlbGVjdDoge30sXG4gICAgICAgIHdoZXJlOiBjb21iaW5lV2hlcmVDb25zdHJhaW50cyh3aGVyZUNvbnN0cmFpbnRzKSxcbiAgICAgIH0sXG4gICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgKVxuICB9LCBbY29sbGVjdGlvbiwgc2VhcmNoUGFyYW1zLCBzZWxlY3RBbGwsIGlkcywgbG9jYWxlLCB3aGVyZV0pXG5cbiAgY29uc3Qgb25TdWNjZXNzID0gKCkgPT4ge1xuICAgIHJvdXRlci5yZXBsYWNlKFxuICAgICAgcXMuc3RyaW5naWZ5KFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucGFyc2VTZWFyY2hQYXJhbXMoc2VhcmNoUGFyYW1zKSxcbiAgICAgICAgICBfcjogRGF0ZS5ub3coKSwgLy8gQ2FjaGUgYnVzdGVyIHRvIGZvcmNlIGZyZXNoIGRhdGEgZmV0Y2guIFByZXZlbnRzIGFuIGUyZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBzb21ldGltZXMgdGhlIGRhdGEgaXMgbm90IHVwZGF0ZWQuXG4gICAgICAgICAgcGFnZTogc2VsZWN0QWxsID8gJzEnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgICApLFxuICAgIClcbiAgICBjbG9zZU1vZGFsKGRyYXdlclNsdWcpXG5cbiAgICBpZiAodHlwZW9mIG9uU3VjY2Vzc0Zyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb25TdWNjZXNzRnJvbVByb3BzKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBvbkZpZWxkU2VsZWN0ID0gdXNlQ2FsbGJhY2s8T25GaWVsZFNlbGVjdD4oXG4gICAgYXN5bmMgKHsgZGlzcGF0Y2hGaWVsZHMsIGZvcm1TdGF0ZSwgc2VsZWN0ZWQgfSkgPT4ge1xuICAgICAgc2V0SXNJbml0aWFsaXppbmcodHJ1ZSlcblxuICAgICAgc2V0U2VsZWN0ZWRGaWVsZHMoc2VsZWN0ZWQgfHwgW10pXG5cbiAgICAgIGNvbnN0IHsgc3RhdGUgfSA9IGF3YWl0IGdldEZvcm1TdGF0ZSh7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnOiBjb2xsZWN0aW9uLnNsdWcsXG4gICAgICAgIGRvY1Blcm1pc3Npb25zOiBjb2xsZWN0aW9uUGVybWlzc2lvbnMsXG4gICAgICAgIGRvY1ByZWZlcmVuY2VzOiBudWxsLFxuICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvbGxlY3Rpb24uc2x1ZyxcbiAgICAgICAgc2VsZWN0OiB1bmZsYXR0ZW4oXG4gICAgICAgICAgc2VsZWN0ZWQucmVkdWNlKChhY2MsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgYWNjW29wdGlvbi52YWx1ZS5wYXRoXSA9IHRydWVcbiAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICB9LCB7fSBhcyBTZWxlY3RUeXBlKSxcbiAgICAgICAgKSxcbiAgICAgICAgc2tpcFZhbGlkYXRpb246IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBkaXNwYXRjaEZpZWxkcyh7XG4gICAgICAgIHR5cGU6ICdVUERBVEVfTUFOWScsXG4gICAgICAgIGZvcm1TdGF0ZTogc3RhdGUsXG4gICAgICB9KVxuXG4gICAgICBzZXRJc0luaXRpYWxpemluZyhmYWxzZSlcbiAgICB9LFxuICAgIFtnZXRGb3JtU3RhdGUsIGNvbGxlY3Rpb24uc2x1ZywgY29sbGVjdGlvblBlcm1pc3Npb25zLCBzZXRTZWxlY3RlZEZpZWxkc10sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxEb2N1bWVudEluZm9Qcm92aWRlclxuICAgICAgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb24uc2x1Z31cbiAgICAgIGN1cnJlbnRFZGl0b3I9e3VzZXJ9XG4gICAgICBoYXNQdWJsaXNoZWREb2M9e2ZhbHNlfVxuICAgICAgaWQ9e251bGx9XG4gICAgICBpbml0aWFsRGF0YT17e319XG4gICAgICBpc0xvY2tlZD17ZmFsc2V9XG4gICAgICBsYXN0VXBkYXRlVGltZT17MH1cbiAgICAgIG1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQ9e2ZhbHNlfVxuICAgICAgdW5wdWJsaXNoZWRWZXJzaW9uQ291bnQ9ezB9XG4gICAgICB2ZXJzaW9uQ291bnQ9ezB9XG4gICAgPlxuICAgICAgPE9wZXJhdGlvbkNvbnRleHQgdmFsdWU9XCJ1cGRhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX21haW5gfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGVhZGVyYH0+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJfX3RpdGxlYH0+XG4gICAgICAgICAgICAgIHt0KCdnZW5lcmFsOmVkaXRpbmdMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oY291bnQgPiAxID8gcGx1cmFsIDogc2luZ3VsYXIsIGkxOG4pLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6Y2xvc2UnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJfX2Nsb3NlYH1cbiAgICAgICAgICAgICAgaWQ9e2BjbG9zZS1kcmF3ZXJfXyR7ZHJhd2VyU2x1Z31gfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZU1vZGFsKGRyYXdlclNsdWcpfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19mb3JtYH1cbiAgICAgICAgICAgIGlzSW5pdGlhbGl6aW5nPXtpc0luaXRpYWxpemluZ31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtbb25DaGFuZ2VdfVxuICAgICAgICAgICAgb25TdWNjZXNzPXtvblN1Y2Nlc3N9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZpZWxkU2VsZWN0XG4gICAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17b25GaWVsZFNlbGVjdH1cbiAgICAgICAgICAgICAgcGVybWlzc2lvbnM9e2NvbGxlY3Rpb25QZXJtaXNzaW9ucy5maWVsZHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3NlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVuZGVyLWZpZWxkc1wiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEZpZWxkcy5tYXAoKG9wdGlvbiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyBmaWVsZCwgZmllbGRQZXJtaXNzaW9ucywgcGF0aCB9LFxuICAgICAgICAgICAgICAgICAgfSA9IG9wdGlvblxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8UmVuZGVyRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGllbnRGaWVsZENvbmZpZz17ZmllbGR9XG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXhQYXRoPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake3BhdGh9LSR7aX1gfVxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFNjaGVtYVBhdGg9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgIHBhdGg9e3BhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM9e2ZpZWxkUGVybWlzc2lvbnN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zaWRlYmFyLXdyYXBgfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NpZGViYXJgfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2lkZWJhci1zdGlja3ktd3JhcGB9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2RvY3VtZW50LWFjdGlvbnNgfT5cbiAgICAgICAgICAgICAgICAgICAge2NvbGxlY3Rpb24/LnZlcnNpb25zPy5kcmFmdHMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNhdmVEcmFmdEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249e2Zvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBgLyR7Y29sbGVjdGlvbi5zbHVnfSR7cXVlcnlTdHJpbmd9JmRyYWZ0PXRydWVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UHVibGlzaEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249e2Zvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBgLyR7Y29sbGVjdGlvbi5zbHVnfSR7cXVlcnlTdHJpbmd9JmRyYWZ0PXRydWVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8U3VibWl0XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249e2Zvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGAvJHtjb2xsZWN0aW9uLnNsdWd9JHtxdWVyeVN0cmluZ31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRGaWVsZHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9PcGVyYXRpb25Db250ZXh0PlxuICAgIDwvRG9jdW1lbnRJbmZvUHJvdmlkZXI+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBNb2RhbCBhcyBNb2RhbFR5cGUgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5cbmltcG9ydCB7IE1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VFZGl0RGVwdGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRWRpdERlcHRoL2luZGV4LmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gRnVsbHNjcmVlbk1vZGFsKHByb3BzOiBQYXJhbWV0ZXJzPHR5cGVvZiBNb2RhbFR5cGU+WzBdKSB7XG4gIGNvbnN0IGN1cnJlbnREZXB0aCA9IHVzZUVkaXREZXB0aCgpXG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvaXNzdWVzLzEzNzc4XG4gICAgICBjbG9zZU9uQmx1cj17ZmFsc2V9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBzdHlsZT17e1xuICAgICAgICAuLi4ocHJvcHMuc3R5bGUgfHwge30pLFxuICAgICAgICB6SW5kZXg6IGBjYWxjKDEwMCArICR7Y3VycmVudERlcHRoIHx8IDB9ICsgMSlgLFxuICAgICAgfX1cbiAgICAvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vVHJhbnNsYXRpb24vaW5kZXguanMnXG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlQ29uZmlybWF0aW9uUHJvcHMgPSB7XG4gIGhpZ2hsaWdodEZpZWxkOiAoQm9vbGVhbikgPT4gdm9pZFxuICBzZXRLZXk6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdlbmVyYXRlQ29uZmlybWF0aW9uKHByb3BzOiBHZW5lcmF0ZUNvbmZpcm1hdGlvblByb3BzKSB7XG4gIGNvbnN0IHsgaGlnaGxpZ2h0RmllbGQsIHNldEtleSB9ID0gcHJvcHNcblxuICBjb25zdCB7IGlkIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuICBjb25zdCB7IHRvZ2dsZU1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IG1vZGFsU2x1ZyA9IGBnZW5lcmF0ZS1jb25maXJtYXRpb24tJHtpZH1gXG5cbiAgY29uc3QgaGFuZGxlR2VuZXJhdGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0S2V5KClcbiAgICB0b2FzdC5zdWNjZXNzKHQoJ2F1dGhlbnRpY2F0aW9uOm5ld0FQSUtleUdlbmVyYXRlZCcpKVxuICAgIGhpZ2hsaWdodEZpZWxkKHRydWUpXG4gIH0sIFtoaWdobGlnaHRGaWVsZCwgc2V0S2V5LCB0XSlcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlTW9kYWwobW9kYWxTbHVnKVxuICAgICAgICB9fVxuICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgPlxuICAgICAgICB7dCgnYXV0aGVudGljYXRpb246Z2VuZXJhdGVOZXdBUElLZXknKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICAgIGJvZHk9e1xuICAgICAgICAgIDxUcmFuc2xhdGlvblxuICAgICAgICAgICAgZWxlbWVudHM9e3tcbiAgICAgICAgICAgICAgMTogKHsgY2hpbGRyZW4gfSkgPT4gPHN0cm9uZz57Y2hpbGRyZW59PC9zdHJvbmc+LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGkxOG5LZXk9XCJhdXRoZW50aWNhdGlvbjpnZW5lcmF0aW5nTmV3QVBJS2V5V2lsbEludmFsaWRhdGVcIlxuICAgICAgICAgICAgdD17dH1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIGNvbmZpcm1MYWJlbD17dCgnYXV0aGVudGljYXRpb246Z2VuZXJhdGUnKX1cbiAgICAgICAgaGVhZGluZz17dCgnYXV0aGVudGljYXRpb246Y29uZmlybUdlbmVyYXRpb24nKX1cbiAgICAgICAgbW9kYWxTbHVnPXttb2RhbFNsdWd9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlR2VuZXJhdGV9XG4gICAgICAvPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZFBlcm1pc3Npb25zIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcblxuLyoqXG4gKiBUaGUgQXV0aCBQcm92aWRlciB3cmFwcyB0aGUgZW50aXJlIGFwcFxuICogYnV0IGVhY2ggcGFnZSBoYXMgc3BlY2lmaWMgcGVybWlzc2lvbnNcbiAqXG4gKiBpLmUuIGFjY2VzcyBjb250cm9sIG9uIGRvY3VtZW50cy9maWVsZHMgb24gYSBkb2N1bWVudFxuICovXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBlcm1pc3Npb25zOiBTYW5pdGl6ZWRQZXJtaXNzaW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSHlkcmF0ZUF1dGhQcm92aWRlcih7IHBlcm1pc3Npb25zIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2V0UGVybWlzc2lvbnMgfSA9IHVzZUF1dGgoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UGVybWlzc2lvbnMocGVybWlzc2lvbnMpXG4gIH0sIFtwZXJtaXNzaW9ucywgc2V0UGVybWlzc2lvbnNdKVxuXG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlV2luZG93SW5mbyB9IGZyb20gJ0BmYWNlbGVzcy11aS93aW5kb3ctaW5mbydcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdmFsaWRhdGVXaGVyZVF1ZXJ5IH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IExpc3RDb250cm9sc1Byb3BzIH0gZnJvbSAnLi90eXBlcy5qcydcblxuaW1wb3J0IHsgUG9wdXAsIFBvcHVwTGlzdCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1BvcHVwL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVXNlVGl0bGVGaWVsZCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVVzZUFzVGl0bGUuanMnXG5pbXBvcnQgeyBDaGV2cm9uSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL0NoZXZyb24vaW5kZXguanMnXG5pbXBvcnQgeyBEb3RzIH0gZnJvbSAnLi4vLi4vaWNvbnMvRG90cy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxpc3RRdWVyeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXN0UXVlcnkvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEFuaW1hdGVIZWlnaHQgfSBmcm9tICcuLi9BbmltYXRlSGVpZ2h0L2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29sdW1uU2VsZWN0b3IgfSBmcm9tICcuLi9Db2x1bW5TZWxlY3Rvci9pbmRleC5qcydcbmltcG9ydCB7IEdyb3VwQnlCdWlsZGVyIH0gZnJvbSAnLi4vR3JvdXBCeUJ1aWxkZXIvaW5kZXguanMnXG5pbXBvcnQgeyBQaWxsIH0gZnJvbSAnLi4vUGlsbC9pbmRleC5qcydcbmltcG9ydCB7IFF1ZXJ5UHJlc2V0QmFyIH0gZnJvbSAnLi4vUXVlcnlQcmVzZXRzL1F1ZXJ5UHJlc2V0QmFyL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VhcmNoQmFyIH0gZnJvbSAnLi4vU2VhcmNoQmFyL2luZGV4LmpzJ1xuaW1wb3J0IHsgV2hlcmVCdWlsZGVyIH0gZnJvbSAnLi4vV2hlcmVCdWlsZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgZ2V0VGV4dEZpZWxkc1RvQmVTZWFyY2hlZCB9IGZyb20gJy4vZ2V0VGV4dEZpZWxkc1RvQmVTZWFyY2hlZC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbGlzdC1jb250cm9scydcblxuLyoqXG4gKiBUaGUgTGlzdENvbnRyb2xzIGNvbXBvbmVudCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgY29udHJvbHMgKHNlYXJjaCwgZmlsdGVyLCB3aGVyZSlcbiAqIGZvciBhIGNvbGxlY3Rpb24ncyBsaXN0IHZpZXcuIFlvdSBjYW4gZmluZCB0aG9zZSBkaXJlY3RseSBhYm92ZSB0aGUgdGFibGUgd2hpY2ggbGlzdHNcbiAqIHRoZSBjb2xsZWN0aW9uJ3MgZG9jdW1lbnRzLlxuICovXG5leHBvcnQgY29uc3QgTGlzdENvbnRyb2xzOiBSZWFjdC5GQzxMaXN0Q29udHJvbHNQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGJlZm9yZUFjdGlvbnMsXG4gICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBkaXNhYmxlUXVlcnlQcmVzZXRzLFxuICAgIGVuYWJsZUNvbHVtbnMgPSB0cnVlLFxuICAgIGVuYWJsZUZpbHRlcnMgPSB0cnVlLFxuICAgIGVuYWJsZVNvcnQgPSBmYWxzZSxcbiAgICBsaXN0TWVudUl0ZW1zLFxuICAgIHF1ZXJ5UHJlc2V0OiBhY3RpdmVQcmVzZXQsXG4gICAgcXVlcnlQcmVzZXRQZXJtaXNzaW9ucyxcbiAgICByZW5kZXJlZEZpbHRlcnMsXG4gICAgcmVzb2x2ZWRGaWx0ZXJPcHRpb25zLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCB7IGhhbmRsZVNlYXJjaENoYW5nZSwgcXVlcnkgfSA9IHVzZUxpc3RRdWVyeSgpXG5cbiAgY29uc3QgdGl0bGVGaWVsZCA9IHVzZVVzZVRpdGxlRmllbGQoY29sbGVjdGlvbkNvbmZpZylcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3Qge1xuICAgIGJyZWFrcG9pbnRzOiB7IHM6IHNtYWxsQnJlYWsgfSxcbiAgfSA9IHVzZVdpbmRvd0luZm8oKVxuXG4gIGNvbnN0IHNlYXJjaExhYmVsID1cbiAgICAodGl0bGVGaWVsZCAmJlxuICAgICAgZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICdsYWJlbCcgaW4gdGl0bGVGaWVsZCAmJlxuICAgICAgICAgICh0eXBlb2YgdGl0bGVGaWVsZC5sYWJlbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRpdGxlRmllbGQubGFiZWwgPT09ICdvYmplY3QnKVxuICAgICAgICAgID8gdGl0bGVGaWVsZC5sYWJlbFxuICAgICAgICAgIDogJ25hbWUnIGluIHRpdGxlRmllbGRcbiAgICAgICAgICAgID8gdGl0bGVGaWVsZC5uYW1lXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGkxOG4sXG4gICAgICApKSA/P1xuICAgICdJRCdcblxuICBjb25zdCBsaXN0U2VhcmNoYWJsZUZpZWxkcyA9IGdldFRleHRGaWVsZHNUb0JlU2VhcmNoZWQoXG4gICAgY29sbGVjdGlvbkNvbmZpZy5hZG1pbi5saXN0U2VhcmNoYWJsZUZpZWxkcyxcbiAgICBjb2xsZWN0aW9uQ29uZmlnLmZpZWxkcyxcbiAgICBpMThuLFxuICApXG5cbiAgY29uc3Qgc2VhcmNoTGFiZWxUcmFuc2xhdGVkID0gdXNlUmVmKFxuICAgIHQoJ2dlbmVyYWw6c2VhcmNoQnknLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihzZWFyY2hMYWJlbCwgaTE4bikgfSksXG4gIClcblxuICBjb25zdCBoYXNXaGVyZVBhcmFtID0gdXNlUmVmKEJvb2xlYW4ocXVlcnk/LndoZXJlKSlcblxuICBjb25zdCBzaG91bGRJbml0aWFsaXplV2hlcmVPcGVuZWQgPSB2YWxpZGF0ZVdoZXJlUXVlcnkocXVlcnk/LndoZXJlKVxuXG4gIGNvbnN0IFt2aXNpYmxlRHJhd2VyLCBzZXRWaXNpYmxlRHJhd2VyXSA9IHVzZVN0YXRlPCdjb2x1bW5zJyB8ICdncm91cC1ieScgfCAnc29ydCcgfCAnd2hlcmUnPihcbiAgICBzaG91bGRJbml0aWFsaXplV2hlcmVPcGVuZWQgPyAnd2hlcmUnIDogdW5kZWZpbmVkLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzV2hlcmVQYXJhbS5jdXJyZW50ICYmICFxdWVyeT8ud2hlcmUpIHtcbiAgICAgIGhhc1doZXJlUGFyYW0uY3VycmVudCA9IGZhbHNlXG4gICAgfSBlbHNlIGlmIChxdWVyeT8ud2hlcmUpIHtcbiAgICAgIGhhc1doZXJlUGFyYW0uY3VycmVudCA9IHRydWVcbiAgICB9XG4gIH0sIFtzZXRWaXNpYmxlRHJhd2VyLCBxdWVyeT8ud2hlcmVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxpc3RTZWFyY2hhYmxlRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICBzZWFyY2hMYWJlbFRyYW5zbGF0ZWQuY3VycmVudCA9IGxpc3RTZWFyY2hhYmxlRmllbGRzLnJlZHVjZShcbiAgICAgICAgKHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nLCBmaWVsZCwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgICAgJ2xhYmVsJyBpbiBmaWVsZCAmJiBmaWVsZC5sYWJlbCA/IGZpZWxkLmxhYmVsIDogJ25hbWUnIGluIGZpZWxkID8gZmllbGQubmFtZSA6IG51bGxcblxuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dCgnZ2VuZXJhbDpzZWFyY2hCeScsIHtcbiAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVsLCBpMThuKSxcbiAgICAgICAgICAgIH0pfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaSA9PT0gbGlzdFNlYXJjaGFibGVGaWVsZHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3BsYWNlaG9sZGVyVGV4dH0gJHt0KCdnZW5lcmFsOm9yJyl9ICR7Z2V0VHJhbnNsYXRpb24obGFiZWwsIGkxOG4pfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7cGxhY2Vob2xkZXJUZXh0fSwgJHtnZXRUcmFuc2xhdGlvbihsYWJlbCwgaTE4bil9YFxuICAgICAgICB9LFxuICAgICAgICAnJyxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgc2VhcmNoTGFiZWxUcmFuc2xhdGVkLmN1cnJlbnQgPSB0KCdnZW5lcmFsOnNlYXJjaEJ5Jywge1xuICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oc2VhcmNoTGFiZWwsIGkxOG4pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFt0LCBsaXN0U2VhcmNoYWJsZUZpZWxkcywgaTE4biwgc2VhcmNoTGFiZWxdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+XG4gICAgICB7Y29sbGVjdGlvbkNvbmZpZz8uZW5hYmxlUXVlcnlQcmVzZXRzICYmICFkaXNhYmxlUXVlcnlQcmVzZXRzICYmIChcbiAgICAgICAgPFF1ZXJ5UHJlc2V0QmFyXG4gICAgICAgICAgYWN0aXZlUHJlc2V0PXthY3RpdmVQcmVzZXR9XG4gICAgICAgICAgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25TbHVnfVxuICAgICAgICAgIHF1ZXJ5UHJlc2V0UGVybWlzc2lvbnM9e3F1ZXJ5UHJlc2V0UGVybWlzc2lvbnN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPFNlYXJjaEJhclxuICAgICAgICBBY3Rpb25zPXtbXG4gICAgICAgICAgIXNtYWxsQnJlYWsgJiYgKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT1cImJlZm9yZS1hY3Rpb25zXCI+e2JlZm9yZUFjdGlvbnMgJiYgYmVmb3JlQWN0aW9uc308L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICksXG4gICAgICAgICAgZW5hYmxlQ29sdW1ucyAmJiAoXG4gICAgICAgICAgICA8UGlsbFxuICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtgJHtiYXNlQ2xhc3N9LWNvbHVtbnNgfVxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXt2aXNpYmxlRHJhd2VyID09PSAnY29sdW1ucyd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdG9nZ2xlLWNvbHVtbnNgfVxuICAgICAgICAgICAgICBpY29uPXs8Q2hldnJvbkljb24gZGlyZWN0aW9uPXt2aXNpYmxlRHJhd2VyID09PSAnY29sdW1ucycgPyAndXAnIDogJ2Rvd24nfSAvPn1cbiAgICAgICAgICAgICAgaWQ9XCJ0b2dnbGUtbGlzdC1jb2x1bW5zXCJcbiAgICAgICAgICAgICAga2V5PVwidG9nZ2xlLWxpc3QtY29sdW1uc1wiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpc2libGVEcmF3ZXIodmlzaWJsZURyYXdlciAhPT0gJ2NvbHVtbnMnID8gJ2NvbHVtbnMnIDogdW5kZWZpbmVkKX1cbiAgICAgICAgICAgICAgcGlsbFN0eWxlPVwibGlnaHRcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpjb2x1bW5zJyl9XG4gICAgICAgICAgICA8L1BpbGw+XG4gICAgICAgICAgKSxcbiAgICAgICAgICBlbmFibGVGaWx0ZXJzICYmIChcbiAgICAgICAgICAgIDxQaWxsXG4gICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9e2Ake2Jhc2VDbGFzc30td2hlcmVgfVxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXt2aXNpYmxlRHJhd2VyID09PSAnd2hlcmUnfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RvZ2dsZS13aGVyZWB9XG4gICAgICAgICAgICAgIGljb249ezxDaGV2cm9uSWNvbiBkaXJlY3Rpb249e3Zpc2libGVEcmF3ZXIgPT09ICd3aGVyZScgPyAndXAnIDogJ2Rvd24nfSAvPn1cbiAgICAgICAgICAgICAgaWQ9XCJ0b2dnbGUtbGlzdC1maWx0ZXJzXCJcbiAgICAgICAgICAgICAga2V5PVwidG9nZ2xlLWxpc3QtZmlsdGVyc1wiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpc2libGVEcmF3ZXIodmlzaWJsZURyYXdlciAhPT0gJ3doZXJlJyA/ICd3aGVyZScgOiB1bmRlZmluZWQpfVxuICAgICAgICAgICAgICBwaWxsU3R5bGU9XCJsaWdodFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdnZW5lcmFsOmZpbHRlcnMnKX1cbiAgICAgICAgICAgIDwvUGlsbD5cbiAgICAgICAgICApLFxuICAgICAgICAgIGVuYWJsZVNvcnQgJiYgKFxuICAgICAgICAgICAgPFBpbGxcbiAgICAgICAgICAgICAgYXJpYS1jb250cm9scz17YCR7YmFzZUNsYXNzfS1zb3J0YH1cbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17dmlzaWJsZURyYXdlciA9PT0gJ3NvcnQnfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RvZ2dsZS1zb3J0YH1cbiAgICAgICAgICAgICAgaWNvbj17PENoZXZyb25JY29uIC8+fVxuICAgICAgICAgICAgICBpZD1cInRvZ2dsZS1saXN0LXNvcnRcIlxuICAgICAgICAgICAgICBrZXk9XCJ0b2dnbGUtbGlzdC1zb3J0XCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0VmlzaWJsZURyYXdlcih2aXNpYmxlRHJhd2VyICE9PSAnc29ydCcgPyAnc29ydCcgOiB1bmRlZmluZWQpfVxuICAgICAgICAgICAgICBwaWxsU3R5bGU9XCJsaWdodFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdnZW5lcmFsOnNvcnQnKX1cbiAgICAgICAgICAgIDwvUGlsbD5cbiAgICAgICAgICApLFxuICAgICAgICAgIGNvbGxlY3Rpb25Db25maWcuYWRtaW4uZ3JvdXBCeSAmJiAoXG4gICAgICAgICAgICA8UGlsbFxuICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtgJHtiYXNlQ2xhc3N9LWdyb3VwLWJ5YH1cbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17dmlzaWJsZURyYXdlciA9PT0gJ2dyb3VwLWJ5J31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190b2dnbGUtZ3JvdXAtYnlgfVxuICAgICAgICAgICAgICBpY29uPXs8Q2hldnJvbkljb24gZGlyZWN0aW9uPXt2aXNpYmxlRHJhd2VyID09PSAnZ3JvdXAtYnknID8gJ3VwJyA6ICdkb3duJ30gLz59XG4gICAgICAgICAgICAgIGlkPVwidG9nZ2xlLWdyb3VwLWJ5XCJcbiAgICAgICAgICAgICAga2V5PVwidG9nZ2xlLWdyb3VwLWJ5XCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlRHJhd2VyKHZpc2libGVEcmF3ZXIgIT09ICdncm91cC1ieScgPyAnZ3JvdXAtYnknIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBpbGxTdHlsZT1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2dlbmVyYWw6Z3JvdXBCeUxhYmVsJywge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1BpbGw+XG4gICAgICAgICAgKSxcbiAgICAgICAgICBsaXN0TWVudUl0ZW1zICYmIEFycmF5LmlzQXJyYXkobGlzdE1lbnVJdGVtcykgJiYgbGlzdE1lbnVJdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgICBidXR0b249ezxEb3RzIGFyaWFMYWJlbD17dCgnZ2VuZXJhbDptb3JlT3B0aW9ucycpfSAvPn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wb3B1cGB9XG4gICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgaWQ9XCJsaXN0LW1lbnVcIlxuICAgICAgICAgICAgICBrZXk9XCJsaXN0LW1lbnVcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduPVwiYm90dG9tXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgICAgICB7bGlzdE1lbnVJdGVtcy5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e2BsaXN0LW1lbnUtaXRlbS0ke2l9YH0+e2l0ZW19PC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICA8L1BvcHVwPlxuICAgICAgICAgICksXG4gICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgICBrZXk9e2NvbGxlY3Rpb25TbHVnfVxuICAgICAgICBsYWJlbD17c2VhcmNoTGFiZWxUcmFuc2xhdGVkLmN1cnJlbnR9XG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlPXtoYW5kbGVTZWFyY2hDaGFuZ2V9XG4gICAgICAgIHNlYXJjaFF1ZXJ5UGFyYW09e3F1ZXJ5Py5zZWFyY2h9XG4gICAgICAvPlxuICAgICAge2VuYWJsZUNvbHVtbnMgJiYgKFxuICAgICAgICA8QW5pbWF0ZUhlaWdodFxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29sdW1uc2B9XG4gICAgICAgICAgaGVpZ2h0PXt2aXNpYmxlRHJhd2VyID09PSAnY29sdW1ucycgPyAnYXV0bycgOiAwfVxuICAgICAgICAgIGlkPXtgJHtiYXNlQ2xhc3N9LWNvbHVtbnNgfVxuICAgICAgICA+XG4gICAgICAgICAgPENvbHVtblNlbGVjdG9yIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uQ29uZmlnLnNsdWd9IC8+XG4gICAgICAgIDwvQW5pbWF0ZUhlaWdodD5cbiAgICAgICl9XG4gICAgICA8QW5pbWF0ZUhlaWdodFxuICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3doZXJlYH1cbiAgICAgICAgaGVpZ2h0PXt2aXNpYmxlRHJhd2VyID09PSAnd2hlcmUnID8gJ2F1dG8nIDogMH1cbiAgICAgICAgaWQ9e2Ake2Jhc2VDbGFzc30td2hlcmVgfVxuICAgICAgPlxuICAgICAgICA8V2hlcmVCdWlsZGVyXG4gICAgICAgICAgY29sbGVjdGlvblBsdXJhbExhYmVsPXtjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHM/LnBsdXJhbH1cbiAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvbkNvbmZpZy5zbHVnfVxuICAgICAgICAgIGZpZWxkcz17Y29sbGVjdGlvbkNvbmZpZz8uZmllbGRzfVxuICAgICAgICAgIHJlbmRlcmVkRmlsdGVycz17cmVuZGVyZWRGaWx0ZXJzfVxuICAgICAgICAgIHJlc29sdmVkRmlsdGVyT3B0aW9ucz17cmVzb2x2ZWRGaWx0ZXJPcHRpb25zfVxuICAgICAgICAvPlxuICAgICAgPC9BbmltYXRlSGVpZ2h0PlxuICAgICAge2NvbGxlY3Rpb25Db25maWcuYWRtaW4uZ3JvdXBCeSAmJiAoXG4gICAgICAgIDxBbmltYXRlSGVpZ2h0XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ncm91cC1ieWB9XG4gICAgICAgICAgaGVpZ2h0PXt2aXNpYmxlRHJhd2VyID09PSAnZ3JvdXAtYnknID8gJ2F1dG8nIDogMH1cbiAgICAgICAgICBpZD17YCR7YmFzZUNsYXNzfS1ncm91cC1ieWB9XG4gICAgICAgID5cbiAgICAgICAgICA8R3JvdXBCeUJ1aWxkZXIgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25Db25maWcuc2x1Z30gZmllbGRzPXtjb2xsZWN0aW9uQ29uZmlnLmZpZWxkc30gLz5cbiAgICAgICAgPC9BbmltYXRlSGVpZ2h0PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RvdHMnXG5cbmV4cG9ydCBjb25zdCBEb3RzOiBSZWFjdC5GQzx7XG4gIGFyaWFMYWJlbD86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgbm9CYWNrZ3JvdW5kPzogYm9vbGVhblxuICBvcmllbnRhdGlvbj86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbn0+ID0gKHsgYXJpYUxhYmVsLCBjbGFzc05hbWUsIG5vQmFja2dyb3VuZCwgb3JpZW50YXRpb24gPSAndmVydGljYWwnIH0pID0+IChcbiAgPGRpdlxuICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICBjbGFzc05hbWU9e1tcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGJhc2VDbGFzcyxcbiAgICAgIG5vQmFja2dyb3VuZCAmJiBgJHtiYXNlQ2xhc3N9LS1uby1iYWNrZ3JvdW5kYCxcbiAgICAgIG9yaWVudGF0aW9uICYmIGAke2Jhc2VDbGFzc30tLSR7b3JpZW50YXRpb259YCxcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbignICcpfVxuICA+XG4gICAgPGRpdiAvPlxuICAgIDxkaXYgLz5cbiAgICA8ZGl2IC8+XG4gIDwvZGl2PlxuKVxuIiwiaW1wb3J0IHR5cGUgeyBRdWVyeVByZXNldCwgU2FuaXRpemVkQ29sbGVjdGlvblBlcm1pc3Npb24gfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHtcbiAgZm9ybWF0QWRtaW5VUkwsXG4gIHRyYW5zZm9ybUNvbHVtbnNUb1ByZWZlcmVuY2VzLFxuICB0cmFuc2Zvcm1Db2x1bW5zVG9TZWFyY2hQYXJhbXMsXG59IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB7IFBsdXNJY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvUGx1cy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudERyYXdlciB9IGZyb20gJy4uLy4uL0RvY3VtZW50RHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTGlzdERyYXdlciB9IGZyb20gJy4uLy4uL0xpc3REcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0U2VsZWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vLi4vTGlzdFNlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFBpbGwgfSBmcm9tICcuLi8uLi9QaWxsL2luZGV4LmpzJ1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFF1ZXJ5UHJlc2V0VG9nZ2xlciB9IGZyb20gJy4uL1F1ZXJ5UHJlc2V0VG9nZ2xlci9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBjb25maXJtRGVsZXRlUHJlc2V0TW9kYWxTbHVnID0gJ2NvbmZpcm0tZGVsZXRlLXByZXNldCdcblxuY29uc3QgcXVlcnlQcmVzZXRzU2x1ZyA9ICdwYXlsb2FkLXF1ZXJ5LXByZXNldHMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdxdWVyeS1wcmVzZXQtYmFyJ1xuXG5leHBvcnQgY29uc3QgUXVlcnlQcmVzZXRCYXI6IFJlYWN0LkZDPHtcbiAgYWN0aXZlUHJlc2V0OiBRdWVyeVByZXNldFxuICBjb2xsZWN0aW9uU2x1Zz86IHN0cmluZ1xuICBxdWVyeVByZXNldFBlcm1pc3Npb25zOiBTYW5pdGl6ZWRDb2xsZWN0aW9uUGVybWlzc2lvblxufT4gPSAoeyBhY3RpdmVQcmVzZXQsIGNvbGxlY3Rpb25TbHVnLCBxdWVyeVByZXNldFBlcm1pc3Npb25zIH0pID0+IHtcbiAgY29uc3QgeyBtb2RpZmllZCwgcXVlcnksIHJlZmluZUxpc3REYXRhLCBzZXRNb2RpZmllZDogc2V0UXVlcnlNb2RpZmllZCB9ID0gdXNlTGlzdFF1ZXJ5KClcblxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBvcGVuTW9kYWwgfSA9IHVzZU1vZGFsKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYXBpOiBhcGlSb3V0ZSB9LFxuICAgIH0sXG4gICAgZ2V0RW50aXR5Q29uZmlnLFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBwcmVzZXRDb25maWcgPSBnZXRFbnRpdHlDb25maWcoeyBjb2xsZWN0aW9uU2x1ZzogcXVlcnlQcmVzZXRzU2x1ZyB9KVxuXG4gIGNvbnN0IFtQcmVzZXREb2N1bWVudERyYXdlciwgLCB7IG9wZW5EcmF3ZXI6IG9wZW5Eb2N1bWVudERyYXdlciB9XSA9IHVzZURvY3VtZW50RHJhd2VyKHtcbiAgICBpZDogYWN0aXZlUHJlc2V0Py5pZCxcbiAgICBjb2xsZWN0aW9uU2x1ZzogcXVlcnlQcmVzZXRzU2x1ZyxcbiAgfSlcblxuICBjb25zdCBbXG4gICAgQ3JlYXRlTmV3UHJlc2V0RHJhd2VyLFxuICAgICxcbiAgICB7IGNsb3NlRHJhd2VyOiBjbG9zZUNyZWF0ZU5ld0RyYXdlciwgb3BlbkRyYXdlcjogb3BlbkNyZWF0ZU5ld0RyYXdlciB9LFxuICBdID0gdXNlRG9jdW1lbnREcmF3ZXIoe1xuICAgIGNvbGxlY3Rpb25TbHVnOiBxdWVyeVByZXNldHNTbHVnLFxuICB9KVxuXG4gIGNvbnN0IGZpbHRlck9wdGlvbnMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICAncGF5bG9hZC1xdWVyeS1wcmVzZXRzJzoge1xuICAgICAgICBpc1RlbXA6IHtcbiAgICAgICAgICBub3RfZXF1YWxzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGVkQ29sbGVjdGlvbjoge1xuICAgICAgICAgIGVxdWFsczogY29sbGVjdGlvblNsdWcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtjb2xsZWN0aW9uU2x1Z10sXG4gIClcblxuICBjb25zdCBbTGlzdERyYXdlciwgLCB7IGNsb3NlRHJhd2VyOiBjbG9zZUxpc3REcmF3ZXIsIG9wZW5EcmF3ZXI6IG9wZW5MaXN0RHJhd2VyIH1dID1cbiAgICB1c2VMaXN0RHJhd2VyKHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnczogW3F1ZXJ5UHJlc2V0c1NsdWddLFxuICAgICAgZmlsdGVyT3B0aW9ucyxcbiAgICAgIHNlbGVjdGVkQ29sbGVjdGlvbjogcXVlcnlQcmVzZXRzU2x1ZyxcbiAgICB9KVxuXG4gIGNvbnN0IGhhbmRsZVByZXNldENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwcmVzZXQ6IFF1ZXJ5UHJlc2V0KSA9PiB7XG4gICAgICBhd2FpdCByZWZpbmVMaXN0RGF0YShcbiAgICAgICAge1xuICAgICAgICAgIGNvbHVtbnM6IHByZXNldC5jb2x1bW5zID8gdHJhbnNmb3JtQ29sdW1uc1RvU2VhcmNoUGFyYW1zKHByZXNldC5jb2x1bW5zKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBncm91cEJ5OiBwcmVzZXQuZ3JvdXBCeSB8fCAnJyxcbiAgICAgICAgICBwcmVzZXQ6IHByZXNldC5pZCxcbiAgICAgICAgICB3aGVyZTogcHJlc2V0LndoZXJlLFxuICAgICAgICB9LFxuICAgICAgICBmYWxzZSxcbiAgICAgIClcbiAgICB9LFxuICAgIFtyZWZpbmVMaXN0RGF0YV0sXG4gIClcblxuICBjb25zdCByZXNldFF1ZXJ5UHJlc2V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlZmluZUxpc3REYXRhKFxuICAgICAge1xuICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgZ3JvdXBCeTogJycsXG4gICAgICAgIHByZXNldDogJycsXG4gICAgICAgIHdoZXJlOiB7fSxcbiAgICAgIH0sXG4gICAgICBmYWxzZSxcbiAgICApXG4gIH0sIFtyZWZpbmVMaXN0RGF0YV0pXG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlUHJlc2V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmZXRjaChcbiAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGAvJHtxdWVyeVByZXNldHNTbHVnfS8ke2FjdGl2ZVByZXNldC5pZH1gLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgIH0sXG4gICAgICApLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgICAgdG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgdCgnZ2VuZXJhbDp0aXRsZURlbGV0ZWQnLCB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHByZXNldENvbmZpZz8ubGFiZWxzPy5zaW5ndWxhciwgaTE4biksXG4gICAgICAgICAgICAgICAgdGl0bGU6IGFjdGl2ZVByZXNldC50aXRsZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGF3YWl0IHJlc2V0UXVlcnlQcmVzZXQoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoanNvbi5lcnJvcnMpIHtcbiAgICAgICAgICAgICAganNvbi5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHRvYXN0LmVycm9yKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6ZGVsZXRpbmdUaXRsZScsIHsgdGl0bGU6IGFjdGl2ZVByZXNldC50aXRsZSB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjpkZWxldGluZ1RpdGxlJywgeyB0aXRsZTogYWN0aXZlUHJlc2V0LnRpdGxlIH0pKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOmRlbGV0aW5nVGl0bGUnLCB7IHRpdGxlOiBhY3RpdmVQcmVzZXQudGl0bGUgfSkpXG4gICAgfVxuICB9LCBbYXBpUm91dGUsIGFjdGl2ZVByZXNldD8uaWQsIGFjdGl2ZVByZXNldD8udGl0bGUsIHQsIHByZXNldENvbmZpZywgaTE4biwgcmVzZXRRdWVyeVByZXNldF0pXG5cbiAgY29uc3Qgc2F2ZUN1cnJlbnRDaGFuZ2VzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmZXRjaChcbiAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgIGFwaVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGAvJHtxdWVyeVByZXNldHNTbHVnfS8ke2FjdGl2ZVByZXNldC5pZH1gLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRyYW5zZm9ybUNvbHVtbnNUb1ByZWZlcmVuY2VzKHF1ZXJ5LmNvbHVtbnMpLFxuICAgICAgICAgICAgZ3JvdXBCeTogcXVlcnkuZ3JvdXBCeSxcbiAgICAgICAgICAgIHdoZXJlOiBxdWVyeS53aGVyZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICAgIH0sXG4gICAgICApLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgICAgdG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgdCgnZ2VuZXJhbDp1cGRhdGVkTGFiZWxTdWNjZXNzZnVsbHknLCB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHByZXNldENvbmZpZz8ubGFiZWxzPy5zaW5ndWxhciwgaTE4biksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBzZXRRdWVyeU1vZGlmaWVkKGZhbHNlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoanNvbi5lcnJvcnMpIHtcbiAgICAgICAgICAgICAganNvbi5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHRvYXN0LmVycm9yKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9hc3QuZXJyb3IodCgnZXJyb3I6dW5rbm93bicpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVua25vd24nKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjp1bmtub3duJykpXG4gICAgfVxuICB9LCBbXG4gICAgYXBpUm91dGUsXG4gICAgYWN0aXZlUHJlc2V0Py5pZCxcbiAgICBxdWVyeS5jb2x1bW5zLFxuICAgIHF1ZXJ5Lmdyb3VwQnksXG4gICAgcXVlcnkud2hlcmUsXG4gICAgdCxcbiAgICBwcmVzZXRDb25maWc/LmxhYmVscz8uc2luZ3VsYXIsXG4gICAgaTE4bixcbiAgICBzZXRRdWVyeU1vZGlmaWVkLFxuICBdKVxuXG4gIGNvbnN0IGhhc01vZGlmaWVkUHJlc2V0ID0gYWN0aXZlUHJlc2V0ICYmIG1vZGlmaWVkXG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX21lbnVgfT5cbiAgICAgICAgICA8UXVlcnlQcmVzZXRUb2dnbGVyXG4gICAgICAgICAgICBhY3RpdmVQcmVzZXQ9e2FjdGl2ZVByZXNldH1cbiAgICAgICAgICAgIG9wZW5QcmVzZXRMaXN0RHJhd2VyPXtvcGVuTGlzdERyYXdlcn1cbiAgICAgICAgICAgIHJlc2V0UHJlc2V0PXtyZXNldFF1ZXJ5UHJlc2V0fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFBpbGxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6bmV3TGFiZWwnLCB7IGxhYmVsOiBwcmVzZXRDb25maWc/LmxhYmVscz8uc2luZ3VsYXIgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NyZWF0ZS1uZXctcHJlc2V0YH1cbiAgICAgICAgICAgIGljb249ezxQbHVzSWNvbiAvPn1cbiAgICAgICAgICAgIGlkPVwiY3JlYXRlLW5ldy1wcmVzZXRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBvcGVuQ3JlYXRlTmV3RHJhd2VyKClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbWVudS1pdGVtc2B9PlxuICAgICAgICAgIHtoYXNNb2RpZmllZFByZXNldCAmJiAoXG4gICAgICAgICAgICA8TGlzdFNlbGVjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICBpZD1cInJlc2V0LXByZXNldFwiXG4gICAgICAgICAgICAgIGtleT1cInJlc2V0XCJcbiAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlZmluZUxpc3REYXRhKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiB0cmFuc2Zvcm1Db2x1bW5zVG9TZWFyY2hQYXJhbXMoYWN0aXZlUHJlc2V0LmNvbHVtbnMpLFxuICAgICAgICAgICAgICAgICAgICBncm91cEJ5OiBhY3RpdmVQcmVzZXQuZ3JvdXBCeSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgd2hlcmU6IGFjdGl2ZVByZXNldC53aGVyZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpyZXNldCcpfVxuICAgICAgICAgICAgPC9MaXN0U2VsZWN0aW9uQnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc01vZGlmaWVkUHJlc2V0ICYmIHF1ZXJ5UHJlc2V0UGVybWlzc2lvbnMudXBkYXRlICYmIChcbiAgICAgICAgICAgIDxMaXN0U2VsZWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwic2F2ZS1wcmVzZXRcIlxuICAgICAgICAgICAgICBrZXk9XCJzYXZlXCJcbiAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHNhdmVDdXJyZW50Q2hhbmdlcygpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YWN0aXZlUHJlc2V0Py5pc1NoYXJlZCA/IHQoJ2dlbmVyYWw6dXBkYXRlRm9yRXZlcnlvbmUnKSA6IHQoJ2ZpZWxkczpzYXZlQ2hhbmdlcycpfVxuICAgICAgICAgICAgPC9MaXN0U2VsZWN0aW9uQnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2FjdGl2ZVByZXNldCAmJiBxdWVyeVByZXNldFBlcm1pc3Npb25zPy5kZWxldGUgJiYgKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICA8TGlzdFNlbGVjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiZGVsZXRlLXByZXNldFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3Blbk1vZGFsKGNvbmZpcm1EZWxldGVQcmVzZXRNb2RhbFNsdWcpfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoJ2dlbmVyYWw6ZGVsZXRlTGFiZWwnLCB7IGxhYmVsOiBwcmVzZXRDb25maWc/LmxhYmVscz8uc2luZ3VsYXIgfSl9XG4gICAgICAgICAgICAgIDwvTGlzdFNlbGVjdGlvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPExpc3RTZWxlY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImVkaXQtcHJlc2V0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBvcGVuRG9jdW1lbnREcmF3ZXIoKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDplZGl0TGFiZWwnLCB7IGxhYmVsOiBwcmVzZXRDb25maWc/LmxhYmVscz8uc2luZ3VsYXIgfSl9XG4gICAgICAgICAgICAgIDwvTGlzdFNlbGVjdGlvbkJ1dHRvbj5cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxDcmVhdGVOZXdQcmVzZXREcmF3ZXJcbiAgICAgICAgaW5pdGlhbERhdGE9e3tcbiAgICAgICAgICBjb2x1bW5zOiB0cmFuc2Zvcm1Db2x1bW5zVG9QcmVmZXJlbmNlcyhxdWVyeS5jb2x1bW5zKSxcbiAgICAgICAgICBncm91cEJ5OiBxdWVyeS5ncm91cEJ5LFxuICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICB3aGVyZTogcXVlcnkud2hlcmUsXG4gICAgICAgIH19XG4gICAgICAgIG9uU2F2ZT17YXN5bmMgKHsgZG9jIH0pID0+IHtcbiAgICAgICAgICBjbG9zZUNyZWF0ZU5ld0RyYXdlcigpXG4gICAgICAgICAgYXdhaXQgaGFuZGxlUHJlc2V0Q2hhbmdlKGRvYyBhcyBRdWVyeVByZXNldClcbiAgICAgICAgfX1cbiAgICAgICAgcmVkaXJlY3RBZnRlckNyZWF0ZT17ZmFsc2V9XG4gICAgICAvPlxuICAgICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICAgIGJvZHk9e1xuICAgICAgICAgIDxUcmFuc2xhdGlvblxuICAgICAgICAgICAgZWxlbWVudHM9e3tcbiAgICAgICAgICAgICAgJzEnOiAoeyBjaGlsZHJlbiB9KSA9PiA8c3Ryb25nPntjaGlsZHJlbn08L3N0cm9uZz4sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaTE4bktleT1cImdlbmVyYWw6YWJvdXRUb0RlbGV0ZVwiXG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgdmFyaWFibGVzPXt7XG4gICAgICAgICAgICAgIGxhYmVsOiBwcmVzZXRDb25maWc/LmxhYmVscz8uc2luZ3VsYXIsXG4gICAgICAgICAgICAgIHRpdGxlOiBhY3RpdmVQcmVzZXQ/LnRpdGxlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIGNvbmZpcm1pbmdMYWJlbD17dCgnZ2VuZXJhbDpkZWxldGluZycpfVxuICAgICAgICBoZWFkaW5nPXt0KCdnZW5lcmFsOmNvbmZpcm1EZWxldGlvbicpfVxuICAgICAgICBtb2RhbFNsdWc9e2NvbmZpcm1EZWxldGVQcmVzZXRNb2RhbFNsdWd9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlRGVsZXRlUHJlc2V0fVxuICAgICAgLz5cbiAgICAgIDxQcmVzZXREb2N1bWVudERyYXdlclxuICAgICAgICBvbkRlbGV0ZT17KCkgPT4ge1xuICAgICAgICAgIC8vIHNldFNlbGVjdGVkUHJlc2V0KHVuZGVmaW5lZClcbiAgICAgICAgfX1cbiAgICAgICAgb25EdXBsaWNhdGU9e2FzeW5jICh7IGRvYyB9KSA9PiB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlUHJlc2V0Q2hhbmdlKGRvYyBhcyBRdWVyeVByZXNldClcbiAgICAgICAgfX1cbiAgICAgICAgb25TYXZlPXthc3luYyAoeyBkb2MgfSkgPT4ge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVByZXNldENoYW5nZShkb2MgYXMgUXVlcnlQcmVzZXQpXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPExpc3REcmF3ZXJcbiAgICAgICAgYWxsb3dDcmVhdGU9e2ZhbHNlfVxuICAgICAgICBkaXNhYmxlUXVlcnlQcmVzZXRzXG4gICAgICAgIG9uU2VsZWN0PXthc3luYyAoeyBkb2MgfSkgPT4ge1xuICAgICAgICAgIGNsb3NlTGlzdERyYXdlcigpXG4gICAgICAgICAgYXdhaXQgaGFuZGxlUHJlc2V0Q2hhbmdlKGRvYyBhcyBRdWVyeVByZXNldClcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC9GcmFnbWVudD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFF1ZXJ5UHJlc2V0IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5cbmltcG9ydCB7IFBlb3BsZUljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9QZW9wbGUvaW5kZXguanMnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBQaWxsIH0gZnJvbSAnLi4vLi4vUGlsbC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnYWN0aXZlLXF1ZXJ5LXByZXNldCdcblxuZXhwb3J0IGZ1bmN0aW9uIFF1ZXJ5UHJlc2V0VG9nZ2xlcih7XG4gIGFjdGl2ZVByZXNldCxcbiAgb3BlblByZXNldExpc3REcmF3ZXIsXG4gIHJlc2V0UHJlc2V0LFxufToge1xuICBhY3RpdmVQcmVzZXQ6IFF1ZXJ5UHJlc2V0XG4gIG9wZW5QcmVzZXRMaXN0RHJhd2VyOiAoKSA9PiB2b2lkXG4gIHJlc2V0UHJlc2V0OiAoKSA9PiBQcm9taXNlPHZvaWQ+XG59KSB7XG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBwcmVzZXRzQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHtcbiAgICBjb2xsZWN0aW9uU2x1ZzogJ3BheWxvYWQtcXVlcnktcHJlc2V0cycsXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGlsbFxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBhY3RpdmVQcmVzZXQgJiYgYCR7YmFzZUNsYXNzfS0tYWN0aXZlYF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgIGlkPVwic2VsZWN0LXByZXNldFwiXG4gICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgIG9wZW5QcmVzZXRMaXN0RHJhd2VyKClcbiAgICAgIH19XG4gICAgICBwaWxsU3R5bGU9XCJsaWdodFwiXG4gICAgICBzaXplPVwic21hbGxcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sYWJlbGB9PlxuICAgICAgICB7YWN0aXZlUHJlc2V0Py5pc1NoYXJlZCAmJiA8UGVvcGxlSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NoYXJlZGB9IC8+fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWwtdGV4dC1tYXgtd2lkdGhgfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWwtdGV4dGB9PlxuICAgICAgICAgICAge2FjdGl2ZVByZXNldD8udGl0bGUgfHxcbiAgICAgICAgICAgICAgdCgnZ2VuZXJhbDpzZWxlY3RMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24ocHJlc2V0c0NvbmZpZy5sYWJlbHMuc2luZ3VsYXIsIGkxOG4pLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHthY3RpdmVQcmVzZXQgPyAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jbGVhcmB9XG4gICAgICAgICAgICBpZD1cImNsZWFyLXByZXNldFwiXG4gICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIGF3YWl0IHJlc2V0UHJlc2V0KClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbktleURvd249e2FzeW5jIChlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgIGF3YWl0IHJlc2V0UHJlc2V0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9QaWxsPlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgY29uc3QgUGVvcGxlSWNvbjogUmVhY3QuRkM8e1xuICBjbGFzc05hbWU6IHN0cmluZ1xufT4gPSAoeyBjbGFzc05hbWUgfSkgPT4gKFxuICA8c3ZnXG4gICAgY2xhc3NOYW1lPXtbJ2ljb24nLCAnaWNvbi0tcGVvcGxlJywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgIGZpbGw9XCJub25lXCJcbiAgICBoZWlnaHQ9XCIyMFwiXG4gICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgd2lkdGg9XCIyMFwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gID5cbiAgICA8cGF0aFxuICAgICAgY2xhc3NOYW1lPVwic3Ryb2tlXCJcbiAgICAgIGQ9XCJNMTQgMTZDMTQgMTQuNTg1NSAxMy40MzgxIDEzLjIyOSAxMi40Mzc5IDEyLjIyODhDMTEuNDM3NyAxMS4yMjg2IDEwLjA4MTIgMTAuNjY2NyA4LjY2NjY4IDEwLjY2NjdNOC42NjY2OCAxMC42NjY3QzcuMjUyMTkgMTAuNjY2NyA1Ljg5NTYzIDExLjIyODYgNC44OTU0NCAxMi4yMjg4QzMuODk1MjUgMTMuMjI5IDMuMzMzMzQgMTQuNTg1NSAzLjMzMzM0IDE2TTguNjY2NjggMTAuNjY2N0MxMC41MDc2IDEwLjY2NjcgMTIgOS4xNzQyOCAxMiA3LjMzMzMzQzEyIDUuNDkyMzggMTAuNTA3NiA0IDguNjY2NjggNEM2LjgyNTczIDQgNS4zMzMzNCA1LjQ5MjM4IDUuMzMzMzQgNy4zMzMzM0M1LjMzMzM0IDkuMTc0MjggNi44MjU3MyAxMC42NjY3IDguNjY2NjggMTAuNjY2N1pNMTYuNjY2NyAxNS4zMzMzQzE2LjY2NjcgMTMuMDg2NyAxNS4zMzMzIDExIDE0IDEwQzE0LjQzODMgOS42NzExOCAxNC43ODg4IDkuMjM5MzkgMTUuMDIwNCA4Ljc0Mjg1QzE1LjI1MiA4LjI0NjMgMTUuMzU3NyA3LjcwMDMxIDE1LjMyOCA3LjE1MzJDMTUuMjk4NCA2LjYwNjA5IDE1LjEzNDMgNi4wNzQ3MiAxNC44NTAzIDUuNjA2MTNDMTQuNTY2NCA1LjEzNzU0IDE0LjE3MTMgNC43NDYxNyAxMy43IDQuNDY2NjdcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBTZWFyY2hGaWx0ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZURlYm91bmNlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRGVib3VuY2UuanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3NlYXJjaC1maWx0ZXInXG5cbmV4cG9ydCBmdW5jdGlvbiBTZWFyY2hGaWx0ZXIocHJvcHM6IFNlYXJjaEZpbHRlclByb3BzKSB7XG4gIGNvbnN0IHsgaGFuZGxlQ2hhbmdlLCBpbml0aWFsUGFyYW1zLCBsYWJlbCwgc2VhcmNoUXVlcnlQYXJhbSB9ID0gcHJvcHNcbiAgY29uc3Qgc2VhcmNoUGFyYW0gPSBpbml0aWFsUGFyYW1zPy5zZWFyY2ggfHwgc2VhcmNoUXVlcnlQYXJhbVxuICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUodHlwZW9mIHNlYXJjaFBhcmFtID09PSAnc3RyaW5nJyA/IHNlYXJjaFBhcmFtIDogdW5kZWZpbmVkKVxuXG4gIC8qKlxuICAgKiBUcmFja3Mgd2hldGhlciB0aGUgc3RhdGUgc2hvdWxkIGJlIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHNlYXJjaCB2YWx1ZS5cbiAgICogSWYgdGhlIHZhbHVlIGlzIHVwZGF0ZWQgZnJvbSB0aGUgVVJMLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgYXMgaXQgY2F1c2VzIGFkZGl0aW9uYWwgcmVuZGVycy5cbiAgICovXG4gIGNvbnN0IHNob3VsZFVwZGF0ZVN0YXRlID0gdXNlUmVmKHRydWUpXG5cbiAgLyoqXG4gICAqIFRyYWNrcyB0aGUgcHJldmlvdXMgc2VhcmNoIHZhbHVlIHRvIGNvbXBhcmUgd2l0aCB0aGUgY3VycmVudCBkZWJvdW5jZWQgc2VhcmNoIHZhbHVlLlxuICAgKi9cbiAgY29uc3QgcHJldmlvdXNTZWFyY2ggPSB1c2VSZWYodHlwZW9mIHNlYXJjaFBhcmFtID09PSAnc3RyaW5nJyA/IHNlYXJjaFBhcmFtIDogdW5kZWZpbmVkKVxuXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IHVzZURlYm91bmNlKHNlYXJjaCwgMzAwKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlYXJjaFBhcmFtICE9PSBwcmV2aW91c1NlYXJjaC5jdXJyZW50KSB7XG4gICAgICBzaG91bGRVcGRhdGVTdGF0ZS5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNldFNlYXJjaChzZWFyY2hQYXJhbSBhcyBzdHJpbmcpXG4gICAgICBwcmV2aW91c1NlYXJjaC5jdXJyZW50ID0gc2VhcmNoUGFyYW0gYXMgc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHNob3VsZFVwZGF0ZVN0YXRlLmN1cnJlbnQgPSB0cnVlXG4gICAgICBwcmV2aW91c1NlYXJjaC5jdXJyZW50ID0gdW5kZWZpbmVkXG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlYm91bmNlZFNlYXJjaCAhPT0gcHJldmlvdXNTZWFyY2guY3VycmVudCAmJiBzaG91bGRVcGRhdGVTdGF0ZS5jdXJyZW50KSB7XG4gICAgICBpZiAoaGFuZGxlQ2hhbmdlKSB7XG4gICAgICAgIGhhbmRsZUNoYW5nZShkZWJvdW5jZWRTZWFyY2gpXG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzU2VhcmNoLmN1cnJlbnQgPSBkZWJvdW5jZWRTZWFyY2hcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2gsIGhhbmRsZUNoYW5nZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBhcmlhLWxhYmVsPXtsYWJlbH1cbiAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dGB9XG4gICAgICAgIGlkPVwic2VhcmNoLWZpbHRlci1pbnB1dFwiXG4gICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgIHNob3VsZFVwZGF0ZVN0YXRlLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICB9fVxuICAgICAgICBwbGFjZWhvbGRlcj17bGFiZWx9XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgdmFsdWU9e3NlYXJjaCB8fCAnJ31cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICcuLi8uLi9pY29ucy9TZWFyY2gvaW5kZXguanMnXG5pbXBvcnQgeyBTZWFyY2hGaWx0ZXIgfSBmcm9tICcuLi9TZWFyY2hGaWx0ZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3NlYXJjaC1iYXInXG5cbnR5cGUgU2VhcmNoQmFyUHJvcHMgPSB7XG4gIEFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGVbXVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgbGFiZWw/OiBzdHJpbmdcbiAgb25TZWFyY2hDaGFuZ2U6IChzZWFyY2g6IHN0cmluZykgPT4gdm9pZFxuICBzZWFyY2hRdWVyeVBhcmFtPzogc3RyaW5nXG59XG5leHBvcnQgZnVuY3Rpb24gU2VhcmNoQmFyKHtcbiAgQWN0aW9ucyxcbiAgY2xhc3NOYW1lLFxuICBsYWJlbCA9ICdTZWFyY2guLi4nLFxuICBvblNlYXJjaENoYW5nZSxcbiAgc2VhcmNoUXVlcnlQYXJhbSxcbn06IFNlYXJjaEJhclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICA8U2VhcmNoSWNvbiAvPlxuICAgICAgPFNlYXJjaEZpbHRlclxuICAgICAgICBoYW5kbGVDaGFuZ2U9e29uU2VhcmNoQ2hhbmdlfVxuICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgIHNlYXJjaFF1ZXJ5UGFyYW09e3NlYXJjaFF1ZXJ5UGFyYW19XG4gICAgICAvPlxuICAgICAge0FjdGlvbnMgJiYgQWN0aW9ucy5sZW5ndGggPiAwID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PntBY3Rpb25zfTwvZGl2PlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBJMThuQ2xpZW50IH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHR5cGUgeyBDbGllbnRGaWVsZCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEsIGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dEZpZWxkc1RvQmVTZWFyY2hlZCA9IChcbiAgbGlzdFNlYXJjaGFibGVGaWVsZHM6IHN0cmluZ1tdLFxuICBmaWVsZHM6IENsaWVudEZpZWxkW10sXG4gIGkxOG46IEkxOG5DbGllbnQsXG4pOiBDbGllbnRGaWVsZFtdID0+IHtcbiAgaWYgKGxpc3RTZWFyY2hhYmxlRmllbGRzKSB7XG4gICAgY29uc3QgZmxhdHRlbmVkRmllbGRzID0gZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkcywge1xuICAgICAgaTE4bixcbiAgICAgIG1vdmVTdWJGaWVsZHNUb1RvcDogdHJ1ZSxcbiAgICB9KSBhcyBDbGllbnRGaWVsZFtdXG5cbiAgICBjb25zdCBzZWFyY2hhYmxlRmllbGROYW1lcyA9IG5ldyBTZXQobGlzdFNlYXJjaGFibGVGaWVsZHMpXG4gICAgY29uc3QgbWF0Y2hpbmdGaWVsZHM6IHR5cGVvZiBmbGF0dGVuZWRGaWVsZHMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmbGF0dGVuZWRGaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBzZWFyY2hhYmxlRmllbGROYW1lcy5oYXMoZmllbGQubmFtZSkpIHtcbiAgICAgICAgbWF0Y2hpbmdGaWVsZHMucHVzaChmaWVsZClcbiAgICAgICAgc2VhcmNoYWJsZUZpZWxkTmFtZXMuZGVsZXRlKGZpZWxkLm5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoaW5nRmllbGRzXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcsIFZpZXdUeXBlcywgV2hlcmUgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IERlbGV0ZU1hbnkgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9EZWxldGVNYW55L2luZGV4LmpzJ1xuaW1wb3J0IHsgRWRpdE1hbnlfdjQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9FZGl0TWFueS9pbmRleC5qcydcbmltcG9ydCB7IExpc3RTZWxlY3Rpb25fdjQsIExpc3RTZWxlY3Rpb25CdXR0b24gfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9MaXN0U2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUHVibGlzaE1hbnlfdjQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9QdWJsaXNoTWFueS9pbmRleC5qcydcbmltcG9ydCB7IFJlc3RvcmVNYW55IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvUmVzdG9yZU1hbnkvaW5kZXguanMnXG5pbXBvcnQgeyBVbnB1Ymxpc2hNYW55X3Y0IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvVW5wdWJsaXNoTWFueS9pbmRleC5qcydcbmltcG9ydCB7IFNlbGVjdEFsbFN0YXR1cywgdXNlU2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1NlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5leHBvcnQgdHlwZSBMaXN0U2VsZWN0aW9uUHJvcHMgPSB7XG4gIGNvbGxlY3Rpb25Db25maWc/OiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gIGRpc2FibGVCdWxrRGVsZXRlPzogYm9vbGVhblxuICBkaXNhYmxlQnVsa0VkaXQ/OiBib29sZWFuXG4gIGhhc0RlbGV0ZVBlcm1pc3Npb24/OiBib29sZWFuXG4gIGhhc1RyYXNoUGVybWlzc2lvbj86IGJvb2xlYW5cbiAgbGFiZWw6IHN0cmluZ1xuICBtb2RhbFByZWZpeD86IHN0cmluZ1xuICBzaG93U2VsZWN0QWxsQWNyb3NzUGFnZXM/OiBib29sZWFuXG4gIHZpZXdUeXBlPzogVmlld1R5cGVzXG4gIHdoZXJlPzogV2hlcmVcbn1cblxuZXhwb3J0IGNvbnN0IExpc3RTZWxlY3Rpb246IFJlYWN0LkZDPExpc3RTZWxlY3Rpb25Qcm9wcz4gPSAoe1xuICBjb2xsZWN0aW9uQ29uZmlnLFxuICBkaXNhYmxlQnVsa0RlbGV0ZSxcbiAgZGlzYWJsZUJ1bGtFZGl0LFxuICBoYXNEZWxldGVQZXJtaXNzaW9uLFxuICBoYXNUcmFzaFBlcm1pc3Npb24sXG4gIGxhYmVsLFxuICBtb2RhbFByZWZpeCxcbiAgc2hvd1NlbGVjdEFsbEFjcm9zc1BhZ2VzID0gdHJ1ZSxcbiAgdmlld1R5cGUsXG4gIHdoZXJlLFxufSkgPT4ge1xuICBjb25zdCB7IGNvdW50LCBzZWxlY3RBbGwsIHNlbGVjdGVkSURzLCB0b2dnbGVBbGwsIHRvdGFsRG9jcyB9ID0gdXNlU2VsZWN0aW9uKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3Qgb25BY3Rpb25TdWNjZXNzID0gdXNlQ2FsbGJhY2soKCkgPT4gdG9nZ2xlQWxsKCksIFt0b2dnbGVBbGxdKVxuXG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBpc1RyYXNoVmlldyA9IGNvbGxlY3Rpb25Db25maWc/LnRyYXNoICYmIHZpZXdUeXBlID09PSAndHJhc2gnXG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdFNlbGVjdGlvbl92NFxuICAgICAgY291bnQ9e2NvdW50fVxuICAgICAgTGlzdEFjdGlvbnM9e1tcbiAgICAgICAgc2VsZWN0QWxsICE9PSBTZWxlY3RBbGxTdGF0dXMuQWxsQXZhaWxhYmxlICYmXG4gICAgICAgIGNvdW50IDwgdG90YWxEb2NzICYmXG4gICAgICAgIHNob3dTZWxlY3RBbGxBY3Jvc3NQYWdlcyAhPT0gZmFsc2UgPyAoXG4gICAgICAgICAgPExpc3RTZWxlY3Rpb25CdXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6c2VsZWN0QWxsJywgeyBjb3VudDogYCgke3RvdGFsRG9jc30pYCwgbGFiZWwgfSl9XG4gICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtYWNyb3NzLXBhZ2VzXCJcbiAgICAgICAgICAgIGtleT1cInNlbGVjdC1hbGxcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlQWxsKHRydWUpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOnNlbGVjdEFsbCcsIHsgY291bnQ6IGAoJHt0b3RhbERvY3N9KWAsIGxhYmVsOiAnJyB9KX1cbiAgICAgICAgICA8L0xpc3RTZWxlY3Rpb25CdXR0b24+XG4gICAgICAgICkgOiBudWxsLFxuICAgICAgXS5maWx0ZXIoQm9vbGVhbil9XG4gICAgICBTZWxlY3Rpb25BY3Rpb25zPXtbXG4gICAgICAgICFkaXNhYmxlQnVsa0VkaXQgJiYgIWlzVHJhc2hWaWV3ICYmIChcbiAgICAgICAgICA8RnJhZ21lbnQga2V5PVwiYnVsay1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8RWRpdE1hbnlfdjRcbiAgICAgICAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgY291bnQ9e2NvdW50fVxuICAgICAgICAgICAgICBpZHM9e3NlbGVjdGVkSURzfVxuICAgICAgICAgICAgICBtb2RhbFByZWZpeD17bW9kYWxQcmVmaXh9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz17b25BY3Rpb25TdWNjZXNzfVxuICAgICAgICAgICAgICBzZWxlY3RBbGw9e3NlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLkFsbEF2YWlsYWJsZX1cbiAgICAgICAgICAgICAgd2hlcmU9e3doZXJlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxQdWJsaXNoTWFueV92NFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uPXtjb2xsZWN0aW9uQ29uZmlnfVxuICAgICAgICAgICAgICBjb3VudD17Y291bnR9XG4gICAgICAgICAgICAgIGlkcz17c2VsZWN0ZWRJRHN9XG4gICAgICAgICAgICAgIG1vZGFsUHJlZml4PXttb2RhbFByZWZpeH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPXtvbkFjdGlvblN1Y2Nlc3N9XG4gICAgICAgICAgICAgIHNlbGVjdEFsbD17c2VsZWN0QWxsID09PSBTZWxlY3RBbGxTdGF0dXMuQWxsQXZhaWxhYmxlfVxuICAgICAgICAgICAgICB3aGVyZT17d2hlcmV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFVucHVibGlzaE1hbnlfdjRcbiAgICAgICAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgY291bnQ9e2NvdW50fVxuICAgICAgICAgICAgICBpZHM9e3NlbGVjdGVkSURzfVxuICAgICAgICAgICAgICBtb2RhbFByZWZpeD17bW9kYWxQcmVmaXh9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz17b25BY3Rpb25TdWNjZXNzfVxuICAgICAgICAgICAgICBzZWxlY3RBbGw9e3NlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLkFsbEF2YWlsYWJsZX1cbiAgICAgICAgICAgICAgd2hlcmU9e3doZXJlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApLFxuICAgICAgICBpc1RyYXNoVmlldyAmJiAoXG4gICAgICAgICAgPFJlc3RvcmVNYW55IGNvbGxlY3Rpb249e2NvbGxlY3Rpb25Db25maWd9IGtleT1cImJ1bGstcmVzdG9yZVwiIHZpZXdUeXBlPXt2aWV3VHlwZX0gLz5cbiAgICAgICAgKSxcbiAgICAgICAgIWRpc2FibGVCdWxrRGVsZXRlICYmIChcbiAgICAgICAgICA8RGVsZXRlTWFueVxuICAgICAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgIGhhc0RlbGV0ZVBlcm1pc3Npb249e2hhc0RlbGV0ZVBlcm1pc3Npb259XG4gICAgICAgICAgICBoYXNUcmFzaFBlcm1pc3Npb249e2hhc1RyYXNoUGVybWlzc2lvbn1cbiAgICAgICAgICAgIGtleT1cImJ1bGstZGVsZXRlXCJcbiAgICAgICAgICAgIG1vZGFsUHJlZml4PXttb2RhbFByZWZpeH1cbiAgICAgICAgICAgIHZpZXdUeXBlPXt2aWV3VHlwZX1cbiAgICAgICAgICAvPlxuICAgICAgICApLFxuICAgICAgXS5maWx0ZXIoQm9vbGVhbil9XG4gICAgLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcsIFdoZXJlIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IFNlbGVjdEFsbFN0YXR1cywgdXNlU2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgTGlzdFNlbGVjdGlvbkJ1dHRvbiB9IGZyb20gJy4uL0xpc3RTZWxlY3Rpb24vaW5kZXguanMnXG5pbXBvcnQgeyBQdWJsaXNoTWFueURyYXdlckNvbnRlbnQgfSBmcm9tICcuL0RyYXdlckNvbnRlbnQuanMnXG5cbmV4cG9ydCB0eXBlIFB1Ymxpc2hNYW55UHJvcHMgPSB7XG4gIGNvbGxlY3Rpb246IENsaWVudENvbGxlY3Rpb25Db25maWdcbn1cblxuZXhwb3J0IGNvbnN0IFB1Ymxpc2hNYW55OiBSZWFjdC5GQzxQdWJsaXNoTWFueVByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNvdW50LCBzZWxlY3RBbGwsIHNlbGVjdGVkSURzLCB0b2dnbGVBbGwgfSA9IHVzZVNlbGVjdGlvbigpXG5cbiAgcmV0dXJuIChcbiAgICA8UHVibGlzaE1hbnlfdjRcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGNvdW50PXtjb3VudH1cbiAgICAgIGlkcz17c2VsZWN0ZWRJRHN9XG4gICAgICBvblN1Y2Nlc3M9eygpID0+IHRvZ2dsZUFsbCgpfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5BbGxBdmFpbGFibGV9XG4gICAgLz5cbiAgKVxufVxuXG50eXBlIFB1Ymxpc2hNYW55X3Y0UHJvcHMgPSB7XG4gIGNvdW50OiBudW1iZXJcbiAgaWRzOiAobnVtYmVyIHwgc3RyaW5nKVtdXG4gIC8qKlxuICAgKiBXaGVuIG11bHRpcGxlIFB1Ymxpc2hNYW55IGNvbXBvbmVudHMgYXJlIHJlbmRlcmVkIG9uIHRoZSBwYWdlLCB0aGlzIHdpbGwgZGlmZmVyZW50aWF0ZSB0aGVtLlxuICAgKi9cbiAgbW9kYWxQcmVmaXg/OiBzdHJpbmdcbiAgb25TdWNjZXNzPzogKCkgPT4gdm9pZFxuICBzZWxlY3RBbGw6IGJvb2xlYW5cbiAgd2hlcmU/OiBXaGVyZVxufSAmIFB1Ymxpc2hNYW55UHJvcHNcblxuZXhwb3J0IGNvbnN0IFB1Ymxpc2hNYW55X3Y0OiBSZWFjdC5GQzxQdWJsaXNoTWFueV92NFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29sbGVjdGlvbixcbiAgICBjb2xsZWN0aW9uOiB7IHNsdWcsIHZlcnNpb25zIH0gPSB7fSxcbiAgICBjb3VudCxcbiAgICBpZHMsXG4gICAgbW9kYWxQcmVmaXgsXG4gICAgb25TdWNjZXNzLFxuICAgIHNlbGVjdEFsbCxcbiAgICB3aGVyZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHsgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG5cbiAgY29uc3QgY29sbGVjdGlvblBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5bc2x1Z11cbiAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGNvbGxlY3Rpb25QZXJtaXNzaW9ucz8udXBkYXRlXG5cbiAgY29uc3QgZHJhd2VyU2x1ZyA9IGAke21vZGFsUHJlZml4ID8gYCR7bW9kYWxQcmVmaXh9LWAgOiAnJ31wdWJsaXNoLSR7c2x1Z31gXG5cbiAgaWYgKCF2ZXJzaW9ucz8uZHJhZnRzIHx8IGNvdW50ID09PSAwIHx8ICFoYXNQZXJtaXNzaW9uKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPExpc3RTZWxlY3Rpb25CdXR0b25cbiAgICAgICAgYXJpYS1sYWJlbD17dCgndmVyc2lvbjpwdWJsaXNoJyl9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBvcGVuTW9kYWwoZHJhd2VyU2x1ZylcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3QoJ3ZlcnNpb246cHVibGlzaCcpfVxuICAgICAgPC9MaXN0U2VsZWN0aW9uQnV0dG9uPlxuICAgICAgPFB1Ymxpc2hNYW55RHJhd2VyQ29udGVudFxuICAgICAgICBjb2xsZWN0aW9uPXtjb2xsZWN0aW9ufVxuICAgICAgICBkcmF3ZXJTbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgICBpZHM9e2lkc31cbiAgICAgICAgb25TdWNjZXNzPXtvblN1Y2Nlc3N9XG4gICAgICAgIHNlbGVjdEFsbD17c2VsZWN0QWxsfVxuICAgICAgICB3aGVyZT17d2hlcmV9XG4gICAgICAvPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgV2hlcmUgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IHVzZVJvdXRlciwgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgY29tYmluZVdoZXJlQ29uc3RyYWludHMsIGZvcm1hdEFkbWluVVJMLCBtZXJnZUxpc3RTZWFyY2hBbmRXaGVyZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHR5cGUgeyBQdWJsaXNoTWFueVByb3BzIH0gZnJvbSAnLi9pbmRleC5qcydcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VSb3V0ZUNhY2hlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlQ2FjaGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaS5qcydcbmltcG9ydCB7IHBhcnNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3BhcnNlU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcblxudHlwZSBQdWJsaXNoTWFueURyYXdlckNvbnRlbnRQcm9wcyA9IHtcbiAgZHJhd2VyU2x1Zzogc3RyaW5nXG4gIGlkczogKG51bWJlciB8IHN0cmluZylbXVxuICBvblN1Y2Nlc3M/OiAoKSA9PiB2b2lkXG4gIHNlbGVjdEFsbDogYm9vbGVhblxuICB3aGVyZT86IFdoZXJlXG59ICYgUHVibGlzaE1hbnlQcm9wc1xuXG5leHBvcnQgZnVuY3Rpb24gUHVibGlzaE1hbnlEcmF3ZXJDb250ZW50KHByb3BzOiBQdWJsaXNoTWFueURyYXdlckNvbnRlbnRQcm9wcykge1xuICBjb25zdCB7XG4gICAgY29sbGVjdGlvbixcbiAgICBjb2xsZWN0aW9uOiB7IHNsdWcsIGxhYmVsczogeyBwbHVyYWwsIHNpbmd1bGFyIH0gfSA9IHt9LFxuICAgIGRyYXdlclNsdWcsXG4gICAgaWRzLFxuICAgIG9uU3VjY2VzcyxcbiAgICBzZWxlY3RBbGwsXG4gICAgd2hlcmUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgY2xlYXJSb3V0ZUNhY2hlIH0gPSB1c2VSb3V0ZUNhY2hlKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgYWRkRGVmYXVsdEVycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVua25vd24nKSlcbiAgfSwgW3RdKVxuXG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gUmVhY3QudXNlTWVtbygoKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCB3aGVyZUNvbnN0cmFpbnRzOiBXaGVyZVtdID0gW1xuICAgICAge1xuICAgICAgICBfc3RhdHVzOiB7XG4gICAgICAgICAgbm90X2VxdWFsczogJ3B1Ymxpc2hlZCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF1cblxuICAgIGlmICh3aGVyZSkge1xuICAgICAgd2hlcmVDb25zdHJhaW50cy5wdXNoKHdoZXJlKVxuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5V2l0aFNlYXJjaCA9IG1lcmdlTGlzdFNlYXJjaEFuZFdoZXJlKHtcbiAgICAgIGNvbGxlY3Rpb25Db25maWc6IGNvbGxlY3Rpb24sXG4gICAgICBzZWFyY2g6IHNlYXJjaFBhcmFtcy5nZXQoJ3NlYXJjaCcpLFxuICAgIH0pXG5cbiAgICBpZiAocXVlcnlXaXRoU2VhcmNoKSB7XG4gICAgICB3aGVyZUNvbnN0cmFpbnRzLnB1c2gocXVlcnlXaXRoU2VhcmNoKVxuICAgIH1cblxuICAgIGlmIChzZWxlY3RBbGwpIHtcbiAgICAgIC8vIE1hdGNoIHRoZSBjdXJyZW50IGZpbHRlci9zZWFyY2gsIG9yIGRlZmF1bHQgdG8gYWxsIGRvY3NcbiAgICAgIHdoZXJlQ29uc3RyYWludHMucHVzaChcbiAgICAgICAgKHBhcnNlU2VhcmNoUGFyYW1zKHNlYXJjaFBhcmFtcyk/LndoZXJlIGFzIFdoZXJlKSB8fCB7XG4gICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgIG5vdF9lcXVhbHM6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlJ3JlIG5vdCBzZWxlY3RpbmcgYWxsLCB3ZSBuZWVkIHRvIHNlbGVjdCBzcGVjaWZpYyBkb2NzXG4gICAgICB3aGVyZUNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICBpZDoge1xuICAgICAgICAgIGluOiBpZHMgfHwgW10sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBxcy5zdHJpbmdpZnkoXG4gICAgICB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgc2VsZWN0OiB7fSxcbiAgICAgICAgd2hlcmU6IGNvbWJpbmVXaGVyZUNvbnN0cmFpbnRzKHdoZXJlQ29uc3RyYWludHMpLFxuICAgICAgfSxcbiAgICAgIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSxcbiAgICApXG4gIH0sIFtjb2xsZWN0aW9uLCBzZWFyY2hQYXJhbXMsIHNlbGVjdEFsbCwgaWRzLCBsb2NhbGUsIHdoZXJlXSlcblxuICBjb25zdCBoYW5kbGVQdWJsaXNoID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgIGFwaVJvdXRlOiBhcGksXG4gICAgICBwYXRoOiBgLyR7c2x1Z30ke3F1ZXJ5U3RyaW5nfSZkcmFmdD10cnVlYCxcbiAgICB9KVxuICAgIGF3YWl0IHJlcXVlc3RzXG4gICAgICAucGF0Y2godXJsLCB7XG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBfc3RhdHVzOiAncHVibGlzaGVkJyxcbiAgICAgICAgfSksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKGFzeW5jIChyZXMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzLmpzb24oKVxuXG4gICAgICAgICAgY29uc3QgZGVsZXRlZERvY3MgPSBqc29uPy5kb2NzLmxlbmd0aCB8fCAwXG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc0xhYmVsID0gZGVsZXRlZERvY3MgPiAxID8gcGx1cmFsIDogc2luZ3VsYXJcblxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzIDwgNDAwIHx8IGRlbGV0ZWREb2NzID4gMCkge1xuICAgICAgICAgICAgdG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgdCgnZ2VuZXJhbDp1cGRhdGVkQ291bnRTdWNjZXNzZnVsbHknLCB7XG4gICAgICAgICAgICAgICAgY291bnQ6IGRlbGV0ZWREb2NzLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihzdWNjZXNzTGFiZWwsIGkxOG4pLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKGpzb24/LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRvYXN0LmVycm9yKGpzb24ubWVzc2FnZSwge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBqc29uLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlKS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcm91dGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAgIHFzLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5wYXJzZVNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpLFxuICAgICAgICAgICAgICAgICAgcGFnZTogc2VsZWN0QWxsID8gJzEnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBhZGRRdWVyeVByZWZpeDogdHJ1ZSB9LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjbGVhclJvdXRlQ2FjaGUoKVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9uU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBvblN1Y2Nlc3MoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChqc29uLmVycm9ycykge1xuICAgICAgICAgICAganNvbi5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHRvYXN0LmVycm9yKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGREZWZhdWx0RXJyb3IoKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgIHJldHVybiBhZGREZWZhdWx0RXJyb3IoKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9LCBbXG4gICAgYXBpLFxuICAgIHNsdWcsXG4gICAgcXVlcnlTdHJpbmcsXG4gICAgaTE4bixcbiAgICBwbHVyYWwsXG4gICAgc2luZ3VsYXIsXG4gICAgdCxcbiAgICByb3V0ZXIsXG4gICAgc2VhcmNoUGFyYW1zLFxuICAgIHNlbGVjdEFsbCxcbiAgICBjbGVhclJvdXRlQ2FjaGUsXG4gICAgYWRkRGVmYXVsdEVycm9yLFxuICAgIG9uU3VjY2VzcyxcbiAgXSlcblxuICByZXR1cm4gKFxuICAgIDxDb25maXJtYXRpb25Nb2RhbFxuICAgICAgYm9keT17dCgndmVyc2lvbjphYm91dFRvUHVibGlzaFNlbGVjdGlvbicsIHsgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHBsdXJhbCwgaTE4bikgfSl9XG4gICAgICBjYW5jZWxMYWJlbD17dCgnZ2VuZXJhbDpjYW5jZWwnKX1cbiAgICAgIGNvbmZpcm1pbmdMYWJlbD17dCgndmVyc2lvbjpwdWJsaXNoaW5nJyl9XG4gICAgICBjb25maXJtTGFiZWw9e3QoJ2dlbmVyYWw6Y29uZmlybScpfVxuICAgICAgaGVhZGluZz17dCgndmVyc2lvbjpjb25maXJtUHVibGlzaCcpfVxuICAgICAgbW9kYWxTbHVnPXtkcmF3ZXJTbHVnfVxuICAgICAgb25Db25maXJtPXtoYW5kbGVQdWJsaXNofVxuICAgIC8+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBWaWV3VHlwZXMsIFdoZXJlIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZmFjZWxlc3MtdWkvbW9kYWwnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IHVzZVJvdXRlciwgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwsIG1lcmdlTGlzdFNlYXJjaEFuZFdoZXJlIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgKiBhcyBxcyBmcm9tICdxcy1lc20nXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHsgQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9DaGVja2JveC9JbnB1dC5qcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVDYWNoZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VsZWN0QWxsU3RhdHVzLCB1c2VTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9hcGkuanMnXG5pbXBvcnQgeyBwYXJzZVNlYXJjaFBhcmFtcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9wYXJzZVNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSAnLi4vQ29uZmlybWF0aW9uTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0U2VsZWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vTGlzdFNlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBjb25maXJtTWFueVJlc3RvcmVEcmF3ZXJTbHVnID0gYGNvbmZpcm0tcmVzdG9yZS1tYW55LWRvY3NgXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdyZXN0b3JlLW1hbnknXG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICBjb2xsZWN0aW9uOiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gIHZpZXdUeXBlPzogVmlld1R5cGVzXG59XG5cbmV4cG9ydCBjb25zdCBSZXN0b3JlTWFueTogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY29sbGVjdGlvbjogeyBzbHVnIH0gPSB7fSwgdmlld1R5cGUgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHsgY29sbGVjdGlvbnMsIHJvdXRlcywgc2VydmVyVVJMIH0sXG4gIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGNvZGU6IGxvY2FsZSB9ID0gdXNlTG9jYWxlKClcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBjbGVhclJvdXRlQ2FjaGUgfSA9IHVzZVJvdXRlQ2FjaGUoKVxuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKVxuICBjb25zdCB7IGNvdW50LCBnZXRTZWxlY3RlZElkcywgc2VsZWN0QWxsLCB0b2dnbGVBbGwgfSA9IHVzZVNlbGVjdGlvbigpXG4gIGNvbnN0IHsgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG5cbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgW3Jlc3RvcmVBc1B1Ymxpc2hlZCwgc2V0UmVzdG9yZUFzUHVibGlzaGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25QZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zPy5jb2xsZWN0aW9ucz8uW3NsdWddXG4gIGNvbnN0IGhhc1VwZGF0ZVBlcm1pc3Npb24gPSBjb2xsZWN0aW9uUGVybWlzc2lvbnM/LnVwZGF0ZVxuXG4gIGlmIChzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5Ob25lIHx8ICFoYXNVcGRhdGVQZXJtaXNzaW9uIHx8IHZpZXdUeXBlICE9PSAndHJhc2gnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHNlbGVjdGluZ0FsbCA9IHNlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLkFsbEF2YWlsYWJsZVxuICBjb25zdCBzZWxlY3RlZElEcyA9ICFzZWxlY3RpbmdBbGwgPyBnZXRTZWxlY3RlZElkcygpIDogW11cblxuICBjb25zdCBiYXNlV2hlcmUgPSBwYXJzZVNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpPy53aGVyZSBhcyBXaGVyZVxuXG4gIGNvbnN0IGZpbmFsV2hlcmUgPSB7XG4gICAgYW5kOiBbXG4gICAgICAuLi4oQXJyYXkuaXNBcnJheShiYXNlV2hlcmU/LmFuZCkgPyBiYXNlV2hlcmUuYW5kIDogYmFzZVdoZXJlID8gW2Jhc2VXaGVyZV0gOiBbXSksXG4gICAgICB7IGRlbGV0ZWRBdDogeyBleGlzdHM6IHRydWUgfSB9LFxuICAgIF0sXG4gIH1cblxuICBjb25zdCBoYW5kbGVSZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBjb2xsZWN0aW9ucy5maW5kKChjKSA9PiBjLnNsdWcgPT09IHNsdWcpXG4gICAgaWYgKCFjb2xsZWN0aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgd2hlcmVDb25zdHJhaW50OiBXaGVyZVxuXG4gICAgaWYgKHNlbGVjdGluZ0FsbCkge1xuICAgICAgd2hlcmVDb25zdHJhaW50ID0gZmluYWxXaGVyZVxuICAgIH0gZWxzZSB7XG4gICAgICB3aGVyZUNvbnN0cmFpbnQgPSB7XG4gICAgICAgIGFuZDogW3sgaWQ6IHsgaW46IHNlbGVjdGVkSURzIH0gfSwgeyBkZWxldGVkQXQ6IHsgZXhpc3RzOiB0cnVlIH0gfV0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgYXBpUm91dGU6IHJvdXRlcy5hcGksXG4gICAgICBwYXRoOiBgLyR7c2x1Z30ke3FzLnN0cmluZ2lmeShcbiAgICAgICAge1xuICAgICAgICAgIGxpbWl0OiAwLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBzZWxlY3Q6IHt9LFxuICAgICAgICAgIHRyYXNoOiB0cnVlLCAvLyBFbnN1cmUgdHJhc2hlZCBkb2NzIGFyZSByZXR1cm5lZFxuICAgICAgICAgIHdoZXJlOiBtZXJnZUxpc3RTZWFyY2hBbmRXaGVyZSh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgc2VhcmNoOiBwYXJzZVNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpPy5zZWFyY2ggYXMgc3RyaW5nLFxuICAgICAgICAgICAgd2hlcmU6IHdoZXJlQ29uc3RyYWludCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBhZGRRdWVyeVByZWZpeDogdHJ1ZSB9LFxuICAgICAgKX1gLFxuICAgIH0pXG5cbiAgICBjb25zdCBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICB9XG5cbiAgICAvLyBPbmx5IGluY2x1ZGUgX3N0YXR1cyBpZiBkcmFmdHMgYXJlIGVuYWJsZWRcbiAgICBpZiAoY29sbGVjdGlvbkNvbmZpZz8udmVyc2lvbnM/LmRyYWZ0cykge1xuICAgICAgYm9keS5fc3RhdHVzID0gcmVzdG9yZUFzUHVibGlzaGVkID8gJ3B1Ymxpc2hlZCcgOiAnZHJhZnQnXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdG9yZU1hbnlSZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RzLnBhdGNoKHVybCwge1xuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcGx1cmFsLCBzaW5ndWxhciB9ID0gY29sbGVjdGlvbkNvbmZpZy5sYWJlbHNcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXN0b3JlTWFueVJlc3BvbnNlLmpzb24oKVxuXG4gICAgICBjb25zdCByZXN0b3JlZERvY3MgPSBqc29uPy5kb2NzPy5sZW5ndGggfHwgMFxuICAgICAgY29uc3Qgc3VjY2Vzc0xhYmVsID0gcmVzdG9yZWREb2NzID4gMSA/IHBsdXJhbCA6IHNpbmd1bGFyXG5cbiAgICAgIGlmIChyZXN0b3JlTWFueVJlc3BvbnNlLnN0YXR1cyA8IDQwMCB8fCByZXN0b3JlZERvY3MgPiAwKSB7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgdCgnZ2VuZXJhbDpyZXN0b3JlZENvdW50U3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICAgICAgY291bnQ6IHJlc3RvcmVkRG9jcyxcbiAgICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihzdWNjZXNzTGFiZWwsIGkxOG4pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChqc29uPy5lcnJvcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoanNvbi5tZXNzYWdlLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGpzb24uZXJyb3JzLm1hcCgoZSkgPT4gZS5tZXNzYWdlKS5qb2luKCdcXG4nKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVua25vd24nKSlcbiAgICB9XG5cbiAgICB0b2dnbGVBbGwoKVxuXG4gICAgcm91dGVyLnJlcGxhY2UoXG4gICAgICBxcy5zdHJpbmdpZnkoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wYXJzZVNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpLFxuICAgICAgICAgIHBhZ2U6IHNlbGVjdGluZ0FsbCA/ICcxJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgeyBhZGRRdWVyeVByZWZpeDogdHJ1ZSB9LFxuICAgICAgKSxcbiAgICApXG5cbiAgICBjbGVhclJvdXRlQ2FjaGUoKVxuICB9XG5cbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IGNvbGxlY3Rpb25zLmZpbmQoKHsgc2x1ZzogcyB9KSA9PiBzID09PSBzbHVnKVxuXG4gIGNvbnN0IGxhYmVsU3RyaW5nID0gZ2V0VHJhbnNsYXRpb24oXG4gICAgY291bnQgPT09IDEgPyBjb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5zaW5ndWxhciA6IGNvbGxlY3Rpb25Db25maWcubGFiZWxzLnBsdXJhbCxcbiAgICBpMThuLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8TGlzdFNlbGVjdGlvbkJ1dHRvblxuICAgICAgICBhcmlhLWxhYmVsPXt0KCdnZW5lcmFsOnJlc3RvcmUnKX1cbiAgICAgICAgY2xhc3NOYW1lPVwicmVzdG9yZS1kb2N1bWVudHNfX3RvZ2dsZVwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBvcGVuTW9kYWwoY29uZmlybU1hbnlSZXN0b3JlRHJhd2VyU2x1ZylcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3QoJ2dlbmVyYWw6cmVzdG9yZScpfVxuICAgICAgPC9MaXN0U2VsZWN0aW9uQnV0dG9uPlxuICAgICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICAgIGJvZHk9e1xuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIHt0KFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnPy52ZXJzaW9ucz8uZHJhZnRzXG4gICAgICAgICAgICAgICAgPyAnZ2VuZXJhbDphYm91dFRvUmVzdG9yZUFzRHJhZnRDb3VudCdcbiAgICAgICAgICAgICAgICA6ICdnZW5lcmFsOmFib3V0VG9SZXN0b3JlQ291bnQnLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsU3RyaW5nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjb2xsZWN0aW9uQ29uZmlnPy52ZXJzaW9ucz8uZHJhZnRzICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NoZWNrYm94YH0+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94SW5wdXRcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Jlc3RvcmVBc1B1Ymxpc2hlZH1cbiAgICAgICAgICAgICAgICAgIGlkPVwicmVzdG9yZS1hcy1wdWJsaXNoZWQtbWFueVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD17dCgnZ2VuZXJhbDpyZXN0b3JlQXNQdWJsaXNoZWQnKX1cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXN0b3JlLWFzLXB1Ymxpc2hlZC1tYW55XCJcbiAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlPXsoZSkgPT4gc2V0UmVzdG9yZUFzUHVibGlzaGVkKGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICB9XG4gICAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgICBjb25maXJtaW5nTGFiZWw9e3QoJ2dlbmVyYWw6cmVzdG9yaW5nJyl9XG4gICAgICAgIGhlYWRpbmc9e3QoJ2dlbmVyYWw6Y29uZmlybVJlc3RvcmF0aW9uJyl9XG4gICAgICAgIG1vZGFsU2x1Zz17Y29uZmlybU1hbnlSZXN0b3JlRHJhd2VyU2x1Z31cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVSZXN0b3JlfVxuICAgICAgLz5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xpZW50Q29sbGVjdGlvbkNvbmZpZywgV2hlcmUgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9BdXRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VsZWN0QWxsU3RhdHVzLCB1c2VTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0U2VsZWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vTGlzdFNlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFVucHVibGlzaE1hbnlEcmF3ZXJDb250ZW50IH0gZnJvbSAnLi9EcmF3ZXJDb250ZW50LmpzJ1xuXG5leHBvcnQgdHlwZSBVbnB1Ymxpc2hNYW55UHJvcHMgPSB7XG4gIGNvbGxlY3Rpb246IENsaWVudENvbGxlY3Rpb25Db25maWdcbn1cblxuZXhwb3J0IGNvbnN0IFVucHVibGlzaE1hbnk6IFJlYWN0LkZDPFVucHVibGlzaE1hbnlQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjb3VudCwgc2VsZWN0QWxsLCBzZWxlY3RlZElEcywgdG9nZ2xlQWxsIH0gPSB1c2VTZWxlY3Rpb24oKVxuXG4gIHJldHVybiAoXG4gICAgPFVucHVibGlzaE1hbnlfdjRcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGNvdW50PXtjb3VudH1cbiAgICAgIGlkcz17c2VsZWN0ZWRJRHN9XG4gICAgICBvblN1Y2Nlc3M9eygpID0+IHRvZ2dsZUFsbCgpfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5BbGxBdmFpbGFibGV9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgVW5wdWJsaXNoTWFueV92NDogUmVhY3QuRkM8XG4gIHtcbiAgICBjb3VudDogbnVtYmVyXG4gICAgaWRzOiAobnVtYmVyIHwgc3RyaW5nKVtdXG4gICAgLyoqXG4gICAgICogV2hlbiBtdWx0aXBsZSBVbnB1Ymxpc2hNYW55IGNvbXBvbmVudHMgYXJlIHJlbmRlcmVkIG9uIHRoZSBwYWdlLCB0aGlzIHdpbGwgZGlmZmVyZW50aWF0ZSB0aGVtLlxuICAgICAqL1xuICAgIG1vZGFsUHJlZml4Pzogc3RyaW5nXG4gICAgb25TdWNjZXNzPzogKCkgPT4gdm9pZFxuICAgIHNlbGVjdEFsbDogYm9vbGVhblxuICAgIHdoZXJlPzogV2hlcmVcbiAgfSAmIFVucHVibGlzaE1hbnlQcm9wc1xuPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29sbGVjdGlvbixcbiAgICBjb2xsZWN0aW9uOiB7IHNsdWcsIHZlcnNpb25zIH0gPSB7fSxcbiAgICBjb3VudCxcbiAgICBpZHMsXG4gICAgbW9kYWxQcmVmaXgsXG4gICAgb25TdWNjZXNzLFxuICAgIHNlbGVjdEFsbCxcbiAgICB3aGVyZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgcGVybWlzc2lvbnMgfSA9IHVzZUF1dGgoKVxuICBjb25zdCB7IHRvZ2dsZU1vZGFsIH0gPSB1c2VNb2RhbCgpXG5cbiAgY29uc3QgY29sbGVjdGlvblBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM/LmNvbGxlY3Rpb25zPy5bc2x1Z11cbiAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGNvbGxlY3Rpb25QZXJtaXNzaW9ucz8udXBkYXRlXG5cbiAgY29uc3QgZHJhd2VyU2x1ZyA9IGAke21vZGFsUHJlZml4ID8gYCR7bW9kYWxQcmVmaXh9LWAgOiAnJ311bnB1Ymxpc2gtJHtzbHVnfWBcblxuICBpZiAoIXZlcnNpb25zPy5kcmFmdHMgfHwgY291bnQgPT09IDAgfHwgIWhhc1Blcm1pc3Npb24pIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8TGlzdFNlbGVjdGlvbkJ1dHRvblxuICAgICAgICBhcmlhLWxhYmVsPXt0KCd2ZXJzaW9uOnVucHVibGlzaCcpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlTW9kYWwoZHJhd2VyU2x1ZylcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3QoJ3ZlcnNpb246dW5wdWJsaXNoJyl9XG4gICAgICA8L0xpc3RTZWxlY3Rpb25CdXR0b24+XG4gICAgICA8VW5wdWJsaXNoTWFueURyYXdlckNvbnRlbnRcbiAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbn1cbiAgICAgICAgZHJhd2VyU2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgaWRzPXtpZHN9XG4gICAgICAgIG9uU3VjY2Vzcz17b25TdWNjZXNzfVxuICAgICAgICBzZWxlY3RBbGw9e3NlbGVjdEFsbH1cbiAgICAgICAgd2hlcmU9e3doZXJlfVxuICAgICAgLz5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFdoZXJlIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB1c2VSb3V0ZXIsIHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IGNvbWJpbmVXaGVyZUNvbnN0cmFpbnRzLCBmb3JtYXRBZG1pblVSTCwgbWVyZ2VMaXN0U2VhcmNoQW5kV2hlcmUgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCAqIGFzIHFzIGZyb20gJ3FzLWVzbSdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB0eXBlIHsgVW5wdWJsaXNoTWFueVByb3BzIH0gZnJvbSAnLi9pbmRleC5qcydcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VSb3V0ZUNhY2hlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlQ2FjaGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaS5qcydcbmltcG9ydCB7IHBhcnNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3BhcnNlU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcblxudHlwZSBVbnB1Ymxpc2hNYW55RHJhd2VyQ29udGVudFByb3BzID0ge1xuICBkcmF3ZXJTbHVnOiBzdHJpbmdcbiAgaWRzOiAobnVtYmVyIHwgc3RyaW5nKVtdXG4gIG9uU3VjY2Vzcz86ICgpID0+IHZvaWRcbiAgc2VsZWN0QWxsOiBib29sZWFuXG4gIHdoZXJlPzogV2hlcmVcbn0gJiBVbnB1Ymxpc2hNYW55UHJvcHNcblxuZXhwb3J0IGZ1bmN0aW9uIFVucHVibGlzaE1hbnlEcmF3ZXJDb250ZW50KHByb3BzOiBVbnB1Ymxpc2hNYW55RHJhd2VyQ29udGVudFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjb2xsZWN0aW9uLFxuICAgIGNvbGxlY3Rpb246IHsgc2x1ZywgbGFiZWxzOiB7IHBsdXJhbCwgc2luZ3VsYXIgfSB9ID0ge30sXG4gICAgZHJhd2VyU2x1ZyxcbiAgICBpZHMsXG4gICAgb25TdWNjZXNzLFxuICAgIHNlbGVjdEFsbCxcbiAgICB3aGVyZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3Qge1xuICAgIGNvbmZpZzoge1xuICAgICAgcm91dGVzOiB7IGFwaSB9LFxuICAgIH0sXG4gIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGNvZGU6IGxvY2FsZSB9ID0gdXNlTG9jYWxlKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IHsgY2xlYXJSb3V0ZUNhY2hlIH0gPSB1c2VSb3V0ZUNhY2hlKClcbiAgY29uc3QgYWRkRGVmYXVsdEVycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVua25vd24nKSlcbiAgfSwgW3RdKVxuXG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gUmVhY3QudXNlTWVtbygoKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCB3aGVyZUNvbnN0cmFpbnRzOiBXaGVyZVtdID0gW1xuICAgICAge1xuICAgICAgICBfc3RhdHVzOiB7XG4gICAgICAgICAgbm90X2VxdWFsczogJ2RyYWZ0JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXVxuXG4gICAgaWYgKHdoZXJlKSB7XG4gICAgICB3aGVyZUNvbnN0cmFpbnRzLnB1c2god2hlcmUpXG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlXaXRoU2VhcmNoID0gbWVyZ2VMaXN0U2VhcmNoQW5kV2hlcmUoe1xuICAgICAgY29sbGVjdGlvbkNvbmZpZzogY29sbGVjdGlvbixcbiAgICAgIHNlYXJjaDogc2VhcmNoUGFyYW1zLmdldCgnc2VhcmNoJyksXG4gICAgfSlcblxuICAgIGlmIChxdWVyeVdpdGhTZWFyY2gpIHtcbiAgICAgIHdoZXJlQ29uc3RyYWludHMucHVzaChxdWVyeVdpdGhTZWFyY2gpXG4gICAgfVxuXG4gICAgaWYgKCFzZWxlY3RBbGwpIHtcbiAgICAgIC8vIElmIHdlJ3JlIG5vdCBzZWxlY3RpbmcgYWxsLCB3ZSBuZWVkIHRvIHNlbGVjdCBzcGVjaWZpYyBkb2NzXG4gICAgICB3aGVyZUNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICBpZDoge1xuICAgICAgICAgIGluOiBpZHMgfHwgW10sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBxcy5zdHJpbmdpZnkoXG4gICAgICB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgc2VsZWN0OiB7fSxcbiAgICAgICAgd2hlcmU6IGNvbWJpbmVXaGVyZUNvbnN0cmFpbnRzKHdoZXJlQ29uc3RyYWludHMpLFxuICAgICAgfSxcbiAgICAgIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSxcbiAgICApXG4gIH0sIFtjb2xsZWN0aW9uLCBzZWFyY2hQYXJhbXMsIHNlbGVjdEFsbCwgaWRzLCBsb2NhbGUsIHdoZXJlXSlcblxuICBjb25zdCBoYW5kbGVVbnB1Ymxpc2ggPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgYXBpUm91dGU6IGFwaSxcbiAgICAgIHBhdGg6IGAvJHtzbHVnfSR7cXVlcnlTdHJpbmd9YCxcbiAgICB9KVxuICAgIGF3YWl0IHJlcXVlc3RzXG4gICAgICAucGF0Y2godXJsLCB7XG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBfc3RhdHVzOiAnZHJhZnQnLFxuICAgICAgICB9KSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgICAgICBjb25zdCBkZWxldGVkRG9jcyA9IGpzb24/LmRvY3MubGVuZ3RoIHx8IDBcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTGFiZWwgPSBkZWxldGVkRG9jcyA+IDEgPyBwbHVyYWwgOiBzaW5ndWxhclxuXG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPCA0MDAgfHwgZGVsZXRlZERvY3MgPiAwKSB7XG4gICAgICAgICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICB0KCdnZW5lcmFsOnVwZGF0ZWRDb3VudFN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgICAgICAgICBjb3VudDogZGVsZXRlZERvY3MsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHN1Y2Nlc3NMYWJlbCwgaTE4biksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoanNvbj8uZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoanNvbi5tZXNzYWdlLCB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGpzb24uZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UpLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByb3V0ZXIucmVwbGFjZShcbiAgICAgICAgICAgICAgcXMuc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLnBhcnNlU2VhcmNoUGFyYW1zKHNlYXJjaFBhcmFtcyksXG4gICAgICAgICAgICAgICAgICBwYWdlOiBzZWxlY3RBbGwgPyAnMScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNsZWFyUm91dGVDYWNoZSgpXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb25TdWNjZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG9uU3VjY2VzcygpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGpzb24uZXJyb3JzKSB7XG4gICAgICAgICAgICBqc29uLmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4gdG9hc3QuZXJyb3IoZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZERlZmF1bHRFcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGFkZERlZmF1bHRFcnJvcigpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH0sIFtcbiAgICBhcGksXG4gICAgc2x1ZyxcbiAgICBxdWVyeVN0cmluZyxcbiAgICBpMThuLFxuICAgIHBsdXJhbCxcbiAgICBzaW5ndWxhcixcbiAgICB0LFxuICAgIHJvdXRlcixcbiAgICBzZWFyY2hQYXJhbXMsXG4gICAgc2VsZWN0QWxsLFxuICAgIGNsZWFyUm91dGVDYWNoZSxcbiAgICBhZGREZWZhdWx0RXJyb3IsXG4gICAgb25TdWNjZXNzLFxuICBdKVxuXG4gIHJldHVybiAoXG4gICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICBib2R5PXt0KCd2ZXJzaW9uOmFib3V0VG9VbnB1Ymxpc2hTZWxlY3Rpb24nLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihwbHVyYWwsIGkxOG4pIH0pfVxuICAgICAgY29uZmlybWluZ0xhYmVsPXt0KCd2ZXJzaW9uOnVucHVibGlzaGluZycpfVxuICAgICAgaGVhZGluZz17dCgndmVyc2lvbjpjb25maXJtVW5wdWJsaXNoJyl9XG4gICAgICBtb2RhbFNsdWc9e2RyYXdlclNsdWd9XG4gICAgICBvbkNvbmZpcm09e2hhbmRsZVVucHVibGlzaH1cbiAgICAvPlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IEkxOG5DbGllbnQsIFRGdW5jdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB0eXBlIHsgQ2xpZW50Q29sbGVjdGlvbkNvbmZpZywgVmlld1R5cGVzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENsb3NlTW9kYWxCdXR0b24gfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9DbG9zZU1vZGFsQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVmYXVsdExpc3RWaWV3VGFicyB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0RlZmF1bHRMaXN0Vmlld1RhYnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0RHJhd2VyQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0xpc3REcmF3ZXIvUHJvdmlkZXIuanMnXG5pbXBvcnQgeyBEcmF3ZXJSZWxhdGlvbnNoaXBTZWxlY3QgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9MaXN0SGVhZGVyL0RyYXdlclJlbGF0aW9uc2hpcFNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IExpc3REcmF3ZXJDcmVhdGVOZXdEb2NCdXR0b24gfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9MaXN0SGVhZGVyL0RyYXdlclRpdGxlQWN0aW9ucy9pbmRleC5qcydcbmltcG9ydCB7IExpc3RIZWFkZXIgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9MaXN0SGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHtcbiAgTGlzdEJ1bGtVcGxvYWRCdXR0b24sXG4gIExpc3RDcmVhdGVOZXdCdXR0b24sXG4gIExpc3RFbXB0eVRyYXNoQnV0dG9uLFxufSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9MaXN0SGVhZGVyL1RpdGxlQWN0aW9ucy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2luZGV4LmpzJ1xuaW1wb3J0IHsgTGlzdFNlbGVjdGlvbiB9IGZyb20gJy4uL0xpc3RTZWxlY3Rpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgZHJhd2VyQmFzZUNsYXNzID0gJ2xpc3QtZHJhd2VyJ1xuXG5leHBvcnQgdHlwZSBMaXN0SGVhZGVyUHJvcHMgPSB7XG4gIEFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGVbXVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY29sbGVjdGlvbkNvbmZpZzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICBEZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZVxuICBkaXNhYmxlQnVsa0RlbGV0ZT86IGJvb2xlYW5cbiAgZGlzYWJsZUJ1bGtFZGl0PzogYm9vbGVhblxuICBoYXNDcmVhdGVQZXJtaXNzaW9uOiBib29sZWFuXG4gIGhhc0RlbGV0ZVBlcm1pc3Npb24/OiBib29sZWFuXG4gIGhhc1RyYXNoUGVybWlzc2lvbj86IGJvb2xlYW5cbiAgaTE4bjogSTE4bkNsaWVudFxuICBpc0J1bGtVcGxvYWRFbmFibGVkOiBib29sZWFuXG4gIGlzVHJhc2hFbmFibGVkPzogYm9vbGVhblxuICBuZXdEb2N1bWVudFVSTDogc3RyaW5nXG4gIG9uQnVsa1VwbG9hZFN1Y2Nlc3M/OiAoKSA9PiB2b2lkXG4gIC8qKiBAZGVwcmVjYXRlZCBUaGlzIHByb3Agd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqXG4gICAqIE9wZW5pbmcgb2YgdGhlIGJ1bGsgdXBsb2FkIG1vZGFsIGlzIGhhbmRsZWQgaW50ZXJuYWxseS5cbiAgICpcbiAgICogUHJlZmVyIGBvbkJ1bGtVcGxvYWRTdWNjZXNzYCB1c2FnZSB0byBoYW5kbGUgdGhlIHN1Y2Nlc3Mgb2YgdGhlIGJ1bGsgdXBsb2FkLlxuICAgKi9cbiAgb3BlbkJ1bGtVcGxvYWQ6ICgpID0+IHZvaWRcbiAgc21hbGxCcmVhazogYm9vbGVhblxuICAvKiogQGRlcHJlY2F0ZWQgVGhpcyBwcm9wIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLiAqL1xuICB0PzogVEZ1bmN0aW9uXG4gIFRpdGxlQWN0aW9ucz86IFJlYWN0LlJlYWN0Tm9kZVtdXG4gIHZpZXdUeXBlPzogVmlld1R5cGVzXG59XG5cbmV4cG9ydCBjb25zdCBDb2xsZWN0aW9uTGlzdEhlYWRlcjogUmVhY3QuRkM8TGlzdEhlYWRlclByb3BzPiA9ICh7XG4gIGNsYXNzTmFtZSxcbiAgY29sbGVjdGlvbkNvbmZpZyxcbiAgRGVzY3JpcHRpb24sXG4gIGRpc2FibGVCdWxrRGVsZXRlLFxuICBkaXNhYmxlQnVsa0VkaXQsXG4gIGhhc0NyZWF0ZVBlcm1pc3Npb24sXG4gIGhhc0RlbGV0ZVBlcm1pc3Npb24sXG4gIGhhc1RyYXNoUGVybWlzc2lvbixcbiAgaTE4bixcbiAgaXNCdWxrVXBsb2FkRW5hYmxlZCxcbiAgaXNUcmFzaEVuYWJsZWQsXG4gIG5ld0RvY3VtZW50VVJMLFxuICBvbkJ1bGtVcGxvYWRTdWNjZXNzLFxuICBvcGVuQnVsa1VwbG9hZCxcbiAgc21hbGxCcmVhayxcbiAgdmlld1R5cGUsXG59KSA9PiB7XG4gIGNvbnN0IHsgY29uZmlnLCBnZXRFbnRpdHlDb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgZHJhd2VyU2x1ZywgaXNJbkRyYXdlciwgc2VsZWN0ZWRPcHRpb24gfSA9IHVzZUxpc3REcmF3ZXJDb250ZXh0KClcbiAgY29uc3QgaXNUcmFzaFJvdXRlID0gdmlld1R5cGUgPT09ICd0cmFzaCdcbiAgY29uc3QgeyBpc0dyb3VwaW5nQnkgfSA9IHVzZUxpc3RRdWVyeSgpXG5cbiAgaWYgKGlzSW5EcmF3ZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExpc3RIZWFkZXJcbiAgICAgICAgQWN0aW9ucz17W1xuICAgICAgICAgIDxDbG9zZU1vZGFsQnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2RyYXdlckJhc2VDbGFzc31fX2hlYWRlci1jbG9zZWB9XG4gICAgICAgICAgICBrZXk9XCJjbG9zZS1idXR0b25cIlxuICAgICAgICAgICAgc2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgICAvPixcbiAgICAgICAgXX1cbiAgICAgICAgQWZ0ZXJMaXN0SGVhZGVyQ29udGVudD17XG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIHs8RHJhd2VyUmVsYXRpb25zaGlwU2VsZWN0IC8+fVxuICAgICAgICAgIDwvPlxuICAgICAgICB9XG4gICAgICAgIGNsYXNzTmFtZT17YCR7ZHJhd2VyQmFzZUNsYXNzfV9faGVhZGVyYH1cbiAgICAgICAgdGl0bGU9e2dldFRyYW5zbGF0aW9uKFxuICAgICAgICAgIGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnOiBzZWxlY3RlZE9wdGlvbi52YWx1ZSB9KT8ubGFiZWxzPy5wbHVyYWwsXG4gICAgICAgICAgaTE4bixcbiAgICAgICAgKX1cbiAgICAgICAgVGl0bGVBY3Rpb25zPXtbXG4gICAgICAgICAgPExpc3REcmF3ZXJDcmVhdGVOZXdEb2NCdXR0b25cbiAgICAgICAgICAgIGhhc0NyZWF0ZVBlcm1pc3Npb249e2hhc0NyZWF0ZVBlcm1pc3Npb259XG4gICAgICAgICAgICBrZXk9XCJsaXN0LWRyYXdlci1jcmVhdGUtbmV3LWRvY1wiXG4gICAgICAgICAgLz4sXG4gICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxMaXN0SGVhZGVyXG4gICAgICBBY3Rpb25zPXtbXG4gICAgICAgICFzbWFsbEJyZWFrICYmICFpc0dyb3VwaW5nQnkgJiYgKFxuICAgICAgICAgIDxMaXN0U2VsZWN0aW9uXG4gICAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnPXtjb2xsZWN0aW9uQ29uZmlnfVxuICAgICAgICAgICAgZGlzYWJsZUJ1bGtEZWxldGU9e2Rpc2FibGVCdWxrRGVsZXRlfVxuICAgICAgICAgICAgZGlzYWJsZUJ1bGtFZGl0PXtkaXNhYmxlQnVsa0VkaXR9XG4gICAgICAgICAgICBoYXNEZWxldGVQZXJtaXNzaW9uPXtoYXNEZWxldGVQZXJtaXNzaW9ufVxuICAgICAgICAgICAgaGFzVHJhc2hQZXJtaXNzaW9uPXtoYXNUcmFzaFBlcm1pc3Npb259XG4gICAgICAgICAgICBrZXk9XCJsaXN0LXNlbGVjdGlvblwiXG4gICAgICAgICAgICBsYWJlbD17Z2V0VHJhbnNsYXRpb24oY29sbGVjdGlvbkNvbmZpZz8ubGFiZWxzPy5wbHVyYWwsIGkxOG4pfVxuICAgICAgICAgICAgc2hvd1NlbGVjdEFsbEFjcm9zc1BhZ2VzPXshaXNHcm91cGluZ0J5fVxuICAgICAgICAgICAgdmlld1R5cGU9e3ZpZXdUeXBlfVxuICAgICAgICAgIC8+XG4gICAgICAgICksXG4gICAgICAgIDxEZWZhdWx0TGlzdFZpZXdUYWJzXG4gICAgICAgICAgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICBjb25maWc9e2NvbmZpZ31cbiAgICAgICAgICBrZXk9XCJkZWZhdWx0LWxpc3QtYWN0aW9uc1wiXG4gICAgICAgICAgdmlld1R5cGU9e3ZpZXdUeXBlfVxuICAgICAgICAvPixcbiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgQWZ0ZXJMaXN0SGVhZGVyQ29udGVudD17RGVzY3JpcHRpb259XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXtnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHM/LnBsdXJhbCwgaTE4bil9XG4gICAgICBUaXRsZUFjdGlvbnM9e1tcbiAgICAgICAgaGFzQ3JlYXRlUGVybWlzc2lvbiAmJiAhaXNUcmFzaFJvdXRlICYmIChcbiAgICAgICAgICA8TGlzdENyZWF0ZU5ld0J1dHRvblxuICAgICAgICAgICAgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgIGhhc0NyZWF0ZVBlcm1pc3Npb249e2hhc0NyZWF0ZVBlcm1pc3Npb259XG4gICAgICAgICAgICBrZXk9XCJsaXN0LWhlYWRlci1jcmVhdGUtbmV3LWRvY1wiXG4gICAgICAgICAgICBuZXdEb2N1bWVudFVSTD17bmV3RG9jdW1lbnRVUkx9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSxcbiAgICAgICAgaGFzQ3JlYXRlUGVybWlzc2lvbiAmJiBpc0J1bGtVcGxvYWRFbmFibGVkICYmICFpc1RyYXNoUm91dGUgJiYgKFxuICAgICAgICAgIDxMaXN0QnVsa1VwbG9hZEJ1dHRvblxuICAgICAgICAgICAgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25Db25maWcuc2x1Z31cbiAgICAgICAgICAgIGhhc0NyZWF0ZVBlcm1pc3Npb249e2hhc0NyZWF0ZVBlcm1pc3Npb259XG4gICAgICAgICAgICBpc0J1bGtVcGxvYWRFbmFibGVkPXtpc0J1bGtVcGxvYWRFbmFibGVkfVxuICAgICAgICAgICAga2V5PVwibGlzdC1oZWFkZXItYnVsay11cGxvYWRcIlxuICAgICAgICAgICAgb25CdWxrVXBsb2FkU3VjY2Vzcz17b25CdWxrVXBsb2FkU3VjY2Vzc31cbiAgICAgICAgICAgIG9wZW5CdWxrVXBsb2FkPXtvcGVuQnVsa1VwbG9hZH1cbiAgICAgICAgICAvPlxuICAgICAgICApLFxuICAgICAgICBoYXNEZWxldGVQZXJtaXNzaW9uICYmIGlzVHJhc2hFbmFibGVkICYmIHZpZXdUeXBlID09PSAndHJhc2gnICYmIChcbiAgICAgICAgICA8TGlzdEVtcHR5VHJhc2hCdXR0b25cbiAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc9e2NvbGxlY3Rpb25Db25maWd9XG4gICAgICAgICAgICBoYXNEZWxldGVQZXJtaXNzaW9uPXtoYXNEZWxldGVQZXJtaXNzaW9ufVxuICAgICAgICAgICAga2V5PVwibGlzdC1oZWFkZXItZW1wdHktdHJhc2hcIlxuICAgICAgICAgIC8+XG4gICAgICAgICksXG4gICAgICBdLmZpbHRlcihCb29sZWFuKX1cbiAgICAvPlxuICApXG59XG4iLCJpbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcblxuaW1wb3J0IHsgWEljb24gfSBmcm9tICcuLi8uLi9pY29ucy9YL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2Nsb3NlLW1vZGFsLWJ1dHRvbidcblxuZXhwb3J0IGZ1bmN0aW9uIENsb3NlTW9kYWxCdXR0b24oeyBzbHVnLCBjbGFzc05hbWUgfTogeyBjbGFzc05hbWU/OiBzdHJpbmc7IHNsdWc6IHN0cmluZyB9KSB7XG4gIGNvbnN0IHsgY2xvc2VNb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6Y2xvc2UnKX1cbiAgICAgIGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgICAga2V5PVwiY2xvc2UtYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgY2xvc2VNb2RhbChzbHVnKVxuICAgICAgfX1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIDxYSWNvbiAvPlxuICAgIDwvYnV0dG9uPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnLCBDbGllbnRDb25maWcsIFZpZXdUeXBlcyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlUHJlZmVyZW5jZXMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUHJlZmVyZW5jZXMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZGVmYXVsdC1saXN0LXZpZXctdGFicydcblxudHlwZSBEZWZhdWx0TGlzdFZpZXdUYWJzUHJvcHMgPSB7XG4gIGNvbGxlY3Rpb25Db25maWc6IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgY29uZmlnOiBDbGllbnRDb25maWdcbiAgb25DaGFuZ2U/OiAodmlld1R5cGU6IFZpZXdUeXBlcykgPT4gdm9pZFxuICB2aWV3VHlwZT86IFZpZXdUeXBlc1xufVxuXG5leHBvcnQgY29uc3QgRGVmYXVsdExpc3RWaWV3VGFiczogUmVhY3QuRkM8RGVmYXVsdExpc3RWaWV3VGFic1Byb3BzPiA9ICh7XG4gIGNvbGxlY3Rpb25Db25maWcsXG4gIGNvbmZpZyxcbiAgb25DaGFuZ2UsXG4gIHZpZXdUeXBlLFxufSkgPT4ge1xuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBzZXRQcmVmZXJlbmNlIH0gPSB1c2VQcmVmZXJlbmNlcygpXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IGlzVHJhc2hFbmFibGVkID0gY29sbGVjdGlvbkNvbmZpZy50cmFzaFxuICBjb25zdCBpc0ZvbGRlcnNFbmFibGVkID0gY29sbGVjdGlvbkNvbmZpZy5mb2xkZXJzICYmIGNvbmZpZy5mb2xkZXJzXG5cbiAgaWYgKCFpc1RyYXNoRW5hYmxlZCAmJiAhaXNGb2xkZXJzRW5hYmxlZCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gYXN5bmMgKG5ld1ZpZXdUeXBlOiBWaWV3VHlwZXMpID0+IHtcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKG5ld1ZpZXdUeXBlKVxuICAgIH1cblxuICAgIGlmIChuZXdWaWV3VHlwZSA9PT0gJ2xpc3QnIHx8IG5ld1ZpZXdUeXBlID09PSAnZm9sZGVycycpIHtcbiAgICAgIGF3YWl0IHNldFByZWZlcmVuY2UoYGNvbGxlY3Rpb24tJHtjb2xsZWN0aW9uQ29uZmlnLnNsdWd9YCwge1xuICAgICAgICBsaXN0Vmlld1R5cGU6IG5ld1ZpZXdUeXBlLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBsZXQgcGF0aDogYC8ke3N0cmluZ31gID0gYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25Db25maWcuc2x1Z31gXG4gICAgc3dpdGNoIChuZXdWaWV3VHlwZSkge1xuICAgICAgY2FzZSAnZm9sZGVycyc6XG4gICAgICAgIGlmIChjb25maWcuZm9sZGVycykge1xuICAgICAgICAgIHBhdGggPSBgL2NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbkNvbmZpZy5zbHVnfS8ke2NvbmZpZy5mb2xkZXJzLnNsdWd9YFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd0cmFzaCc6XG4gICAgICAgIHBhdGggPSBgL2NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvbkNvbmZpZy5zbHVnfS90cmFzaGBcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICBhZG1pblJvdXRlOiBjb25maWcucm91dGVzLmFkbWluLFxuICAgICAgcGF0aCxcbiAgICB9KVxuXG4gICAgcm91dGVyLnB1c2godXJsKVxuICB9XG5cbiAgY29uc3QgYWxsQnV0dG9uTGFiZWwgPSBgJHt0KCdnZW5lcmFsOmFsbCcpfSAke2dldFRyYW5zbGF0aW9uKGNvbGxlY3Rpb25Db25maWc/LmxhYmVscz8ucGx1cmFsLCBpMThuKX1gXG4gIGNvbnN0IGFsbEJ1dHRvbklkID0gYWxsQnV0dG9uTGFiZWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJylcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBidXR0b25TdHlsZT1cInRhYlwiXG4gICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31fX2J1dHRvbmAsIHZpZXdUeXBlID09PSAnbGlzdCcgJiYgYCR7YmFzZUNsYXNzfV9fYnV0dG9uLS1hY3RpdmVgXVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICBkaXNhYmxlZD17dmlld1R5cGUgPT09ICdsaXN0J31cbiAgICAgICAgZWw9XCJidXR0b25cIlxuICAgICAgICBpZD17YWxsQnV0dG9uSWR9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ2xpc3QnKX1cbiAgICAgID5cbiAgICAgICAge3QoJ2dlbmVyYWw6YWxsJyl9IHtnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHM/LnBsdXJhbCwgaTE4bil9XG4gICAgICA8L0J1dHRvbj5cblxuICAgICAge2lzRm9sZGVyc0VuYWJsZWQgJiYgKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYnV0dG9uU3R5bGU9XCJ0YWJcIlxuICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fYnV0dG9uYCxcbiAgICAgICAgICAgIHZpZXdUeXBlID09PSAnZm9sZGVycycgJiYgYCR7YmFzZUNsYXNzfV9fYnV0dG9uLS1hY3RpdmVgLFxuICAgICAgICAgIF1cbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgZGlzYWJsZWQ9e3ZpZXdUeXBlID09PSAnZm9sZGVycyd9XG4gICAgICAgICAgZWw9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ2ZvbGRlcnMnKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KCdmb2xkZXI6YnlGb2xkZXInKX1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICApfVxuXG4gICAgICB7aXNUcmFzaEVuYWJsZWQgJiYgKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYnV0dG9uU3R5bGU9XCJ0YWJcIlxuICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fYnV0dG9uYCxcbiAgICAgICAgICAgIHZpZXdUeXBlID09PSAndHJhc2gnICYmIGAke2Jhc2VDbGFzc31fX2J1dHRvbi0tYWN0aXZlYCxcbiAgICAgICAgICBdXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAgIGRpc2FibGVkPXt2aWV3VHlwZSA9PT0gJ3RyYXNoJ31cbiAgICAgICAgICBlbD1cImJ1dHRvblwiXG4gICAgICAgICAgaWQ9XCJ0cmFzaC12aWV3LXBpbGxcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ3RyYXNoJyl9XG4gICAgICAgID5cbiAgICAgICAgICB7dCgnZ2VuZXJhbDp0cmFzaCcpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcblxuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9GaWVsZExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTGlzdERyYXdlckNvbnRleHQgfSBmcm9tICcuLi8uLi9MaXN0RHJhd2VyL1Byb3ZpZGVyLmpzJ1xuaW1wb3J0IHsgUmVhY3RTZWxlY3QgfSBmcm9tICcuLi8uLi9SZWFjdFNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IGxpc3RIZWFkZXJDbGFzcyB9IGZyb20gJy4uL2luZGV4LmpzJ1xuXG5jb25zdCBkcmF3ZXJCYXNlQ2xhc3MgPSAnbGlzdC1kcmF3ZXInXG5cbmV4cG9ydCBjb25zdCBEcmF3ZXJSZWxhdGlvbnNoaXBTZWxlY3QgPSAoKSA9PiB7XG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7IGNvbGxlY3Rpb25zIH0sXG4gICAgZ2V0RW50aXR5Q29uZmlnLFxuICB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBlbmFibGVkQ29sbGVjdGlvbnMsIHNlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbiB9ID0gdXNlTGlzdERyYXdlckNvbnRleHQoKVxuICBjb25zdCBlbmFibGVkQ29sbGVjdGlvbkNvbmZpZ3MgPSBjb2xsZWN0aW9ucy5maWx0ZXIoKHsgc2x1ZyB9KSA9PlxuICAgIGVuYWJsZWRDb2xsZWN0aW9ucy5pbmNsdWRlcyhzbHVnKSxcbiAgKVxuICBpZiAoZW5hYmxlZENvbGxlY3Rpb25Db25maWdzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBhY3RpdmVDb2xsZWN0aW9uQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWc6IHNlbGVjdGVkT3B0aW9uLnZhbHVlIH0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2RyYXdlckJhc2VDbGFzc31fX3NlbGVjdC1jb2xsZWN0aW9uLXdyYXBgfT5cbiAgICAgICAgPEZpZWxkTGFiZWwgbGFiZWw9e3QoJ3VwbG9hZDpzZWxlY3RDb2xsZWN0aW9uVG9Ccm93c2UnKX0gLz5cbiAgICAgICAgPFJlYWN0U2VsZWN0XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtsaXN0SGVhZGVyQ2xhc3N9X19zZWxlY3QtY29sbGVjdGlvbmB9XG4gICAgICAgICAgaXNDbGVhcmFibGU9e2ZhbHNlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICBvcHRpb25zPXtlbmFibGVkQ29sbGVjdGlvbkNvbmZpZ3MubWFwKChjb2xsKSA9PiAoe1xuICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGNvbGwubGFiZWxzLnNpbmd1bGFyLCBpMThuKSxcbiAgICAgICAgICAgIHZhbHVlOiBjb2xsLnNsdWcsXG4gICAgICAgICAgfSkpfVxuICAgICAgICAgIHZhbHVlPXt7XG4gICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oYWN0aXZlQ29sbGVjdGlvbkNvbmZpZz8ubGFiZWxzLnNpbmd1bGFyLCBpMThuKSxcbiAgICAgICAgICAgIHZhbHVlOiBhY3RpdmVDb2xsZWN0aW9uQ29uZmlnPy5zbHVnLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBsaXN0SGVhZGVyQ2xhc3MgPSAnbGlzdC1oZWFkZXInXG5cbnR5cGUgTGlzdEhlYWRlclByb3BzID0ge1xuICByZWFkb25seSBBY3Rpb25zPzogUmVhY3QuUmVhY3ROb2RlW11cbiAgcmVhZG9ubHkgQWZ0ZXJMaXN0SGVhZGVyQ29udGVudD86IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZ1xuICByZWFkb25seSBUaXRsZUFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGVbXVxufVxuZXhwb3J0IGNvbnN0IExpc3RIZWFkZXI6IFJlYWN0LkZDPExpc3RIZWFkZXJQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8aGVhZGVyIGNsYXNzTmFtZT17W2xpc3RIZWFkZXJDbGFzcywgcHJvcHMuY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtsaXN0SGVhZGVyQ2xhc3N9X19jb250ZW50YH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtsaXN0SGVhZGVyQ2xhc3N9X190aXRsZS1hbmQtYWN0aW9uc2B9PlxuICAgICAgICAgIDxoMSBjbGFzc05hbWU9e2Ake2xpc3RIZWFkZXJDbGFzc31fX3RpdGxlYH0+e3Byb3BzLnRpdGxlfTwvaDE+XG4gICAgICAgICAge3Byb3BzLlRpdGxlQWN0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7bGlzdEhlYWRlckNsYXNzfV9fdGl0bGUtYWN0aW9uc2B9Pntwcm9wcy5UaXRsZUFjdGlvbnN9PC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7cHJvcHMuQWN0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2xpc3RIZWFkZXJDbGFzc31fX2FjdGlvbnNgfT57cHJvcHMuQWN0aW9uc308L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtwcm9wcy5BZnRlckxpc3RIZWFkZXJDb250ZW50ID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7bGlzdEhlYWRlckNsYXNzfV9fYWZ0ZXItaGVhZGVyLWNvbnRlbnRgfT5cbiAgICAgICAgICB7cHJvcHMuQWZ0ZXJMaXN0SGVhZGVyQ29udGVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2hlYWRlcj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTGlzdERyYXdlckNvbnRleHQgfSBmcm9tICcuLi8uLi9MaXN0RHJhd2VyL1Byb3ZpZGVyLmpzJ1xuaW1wb3J0IHsgUGlsbCB9IGZyb20gJy4uLy4uL1BpbGwvaW5kZXguanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdsaXN0LWhlYWRlcidcblxudHlwZSBEZWZhdWx0RHJhd2VyVGl0bGVBY3Rpb25zUHJvcHMgPSB7XG4gIGhhc0NyZWF0ZVBlcm1pc3Npb246IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExpc3REcmF3ZXJDcmVhdGVOZXdEb2NCdXR0b24oe1xuICBoYXNDcmVhdGVQZXJtaXNzaW9uLFxufTogRGVmYXVsdERyYXdlclRpdGxlQWN0aW9uc1Byb3BzKSB7XG4gIGNvbnN0IHsgRG9jdW1lbnREcmF3ZXJUb2dnbGVyIH0gPSB1c2VMaXN0RHJhd2VyQ29udGV4dCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGlmICghaGFzQ3JlYXRlUGVybWlzc2lvbikge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxEb2N1bWVudERyYXdlclRvZ2dsZXJcbiAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY3JlYXRlLW5ldy1idXR0b25gfVxuICAgICAga2V5PVwiY3JlYXRlLW5ldy1idXR0b24tdG9nZ2xlclwiXG4gICAgPlxuICAgICAgPFBpbGwgc2l6ZT1cInNtYWxsXCI+e3QoJ2dlbmVyYWw6Y3JlYXRlTmV3Jyl9PC9QaWxsPlxuICAgIDwvRG9jdW1lbnREcmF3ZXJUb2dnbGVyPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvblNsdWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQnVsa1VwbG9hZCB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0J1bGtVcGxvYWQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL0J1dHRvbi9pbmRleC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIExpc3RCdWxrVXBsb2FkQnV0dG9uKHtcbiAgY29sbGVjdGlvblNsdWcsXG4gIGhhc0NyZWF0ZVBlcm1pc3Npb24sXG4gIGlzQnVsa1VwbG9hZEVuYWJsZWQsXG4gIG9uQnVsa1VwbG9hZFN1Y2Nlc3MsXG4gIG9wZW5CdWxrVXBsb2FkOiBvcGVuQnVsa1VwbG9hZEZyb21Qcm9wcyxcbn06IHtcbiAgY29sbGVjdGlvblNsdWc6IENvbGxlY3Rpb25TbHVnXG4gIGhhc0NyZWF0ZVBlcm1pc3Npb246IGJvb2xlYW5cbiAgaXNCdWxrVXBsb2FkRW5hYmxlZDogYm9vbGVhblxuICBvbkJ1bGtVcGxvYWRTdWNjZXNzPzogKCkgPT4gdm9pZFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBwcm9wIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKlxuICAgKiBQcmVmZXIgdXNpbmcgYG9uQnVsa1VwbG9hZFN1Y2Nlc3NgXG4gICAqL1xuICBvcGVuQnVsa1VwbG9hZD86ICgpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgeyBkcmF3ZXJTbHVnOiBidWxrVXBsb2FkRHJhd2VyU2x1Zywgc2V0Q29sbGVjdGlvblNsdWcsIHNldE9uU3VjY2VzcyB9ID0gdXNlQnVsa1VwbG9hZCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuXG4gIGNvbnN0IG9wZW5CdWxrVXBsb2FkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3BlbkJ1bGtVcGxvYWRGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wZW5CdWxrVXBsb2FkRnJvbVByb3BzKClcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Q29sbGVjdGlvblNsdWcoY29sbGVjdGlvblNsdWcpXG4gICAgICBvcGVuTW9kYWwoYnVsa1VwbG9hZERyYXdlclNsdWcpXG4gICAgICBzZXRPblN1Y2Nlc3MoKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9uQnVsa1VwbG9hZFN1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJ1bGtVcGxvYWRTdWNjZXNzKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3V0ZXIucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgcm91dGVyLFxuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGJ1bGtVcGxvYWREcmF3ZXJTbHVnLFxuICAgIG9wZW5Nb2RhbCxcbiAgICBzZXRDb2xsZWN0aW9uU2x1ZyxcbiAgICBzZXRPblN1Y2Nlc3MsXG4gICAgb25CdWxrVXBsb2FkU3VjY2VzcyxcbiAgICBvcGVuQnVsa1VwbG9hZEZyb21Qcm9wcyxcbiAgXSlcblxuICBpZiAoIWhhc0NyZWF0ZVBlcm1pc3Npb24gfHwgIWlzQnVsa1VwbG9hZEVuYWJsZWQpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBhcmlhLWxhYmVsPXt0KCd1cGxvYWQ6YnVsa1VwbG9hZCcpfVxuICAgICAgYnV0dG9uU3R5bGU9XCJwaWxsXCJcbiAgICAgIGtleT1cImJ1bGstdXBsb2FkLWJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXtvcGVuQnVsa1VwbG9hZH1cbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgPlxuICAgICAge3QoJ3VwbG9hZDpidWxrVXBsb2FkJyl9XG4gICAgPC9CdXR0b24+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vQnV0dG9uL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbGlzdC1jcmVhdGUtbmV3LWRvYydcblxuZXhwb3J0IGZ1bmN0aW9uIExpc3RDcmVhdGVOZXdCdXR0b24oe1xuICBjb2xsZWN0aW9uQ29uZmlnLFxuICBoYXNDcmVhdGVQZXJtaXNzaW9uLFxuICBuZXdEb2N1bWVudFVSTCxcbn06IHtcbiAgY29sbGVjdGlvbkNvbmZpZzogQ2xpZW50Q29sbGVjdGlvbkNvbmZpZ1xuICBoYXNDcmVhdGVQZXJtaXNzaW9uOiBib29sZWFuXG4gIG5ld0RvY3VtZW50VVJMOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgaWYgKCFoYXNDcmVhdGVQZXJtaXNzaW9uKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpjcmVhdGVOZXdMYWJlbCcsIHtcbiAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGNvbGxlY3Rpb25Db25maWc/LmxhYmVscz8uc2luZ3VsYXIsIGkxOG4pLFxuICAgICAgfSl9XG4gICAgICBidXR0b25TdHlsZT1cInBpbGxcIlxuICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jcmVhdGUtbmV3LWJ1dHRvbmB9XG4gICAgICBlbD17J2xpbmsnfVxuICAgICAga2V5PVwiY3JlYXRlLW5ldy1idXR0b25cIlxuICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgIHRvPXtuZXdEb2N1bWVudFVSTH1cbiAgICA+XG4gICAgICB7dCgnZ2VuZXJhbDpjcmVhdGVOZXcnKX1cbiAgICA8L0J1dHRvbj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdXNlUm91dGVyLCB1c2VTZWFyY2hQYXJhbXMgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVDYWNoZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyByZXF1ZXN0cyB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9hcGkuanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gJy4uLy4uL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LmpzJ1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9UcmFuc2xhdGlvbi9pbmRleC5qcydcblxuY29uc3QgY29uZmlybUVtcHR5VHJhc2hTbHVnID0gJ2NvbmZpcm0tZW1wdHktdHJhc2gnXG5cbmV4cG9ydCBmdW5jdGlvbiBMaXN0RW1wdHlUcmFzaEJ1dHRvbih7XG4gIGNvbGxlY3Rpb25Db25maWcsXG4gIGhhc0RlbGV0ZVBlcm1pc3Npb24sXG59OiB7XG4gIGNvbGxlY3Rpb25Db25maWc6IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgaGFzRGVsZXRlUGVybWlzc2lvbjogYm9vbGVhblxufSkge1xuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKVxuICBjb25zdCB7IGNsZWFyUm91dGVDYWNoZSB9ID0gdXNlUm91dGVDYWNoZSgpXG5cbiAgY29uc3QgW3RyYXNoQ291bnQsIHNldFRyYXNoQ291bnRdID0gUmVhY3QudXNlU3RhdGU8bnVsbCB8IG51bWJlcj4obnVsbClcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZldGNoVHJhc2hDb3VudCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXMuc3RyaW5naWZ5KFxuICAgICAgICB7XG4gICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHRyYXNoOiB0cnVlLFxuICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICBkZWxldGVkQXQ6IHtcbiAgICAgICAgICAgICAgZXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgICApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlcXVlc3RzLmdldChcbiAgICAgICAgICBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICBhcGlSb3V0ZTogY29uZmlnLnJvdXRlcy5hcGksXG4gICAgICAgICAgICBwYXRoOiBgLyR7Y29sbGVjdGlvbkNvbmZpZy5zbHVnfSR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKClcbiAgICAgICAgc2V0VHJhc2hDb3VudChqc29uPy50b3RhbERvY3MgPz8gMClcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBzZXRUcmFzaENvdW50KDApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdm9pZCBmZXRjaFRyYXNoQ291bnQoKVxuICB9LCBbY29sbGVjdGlvbkNvbmZpZy5zbHVnLCBjb25maWcsIGkxOG4ubGFuZ3VhZ2UsIGxvY2FsZV0pXG5cbiAgY29uc3QgaGFuZGxlRW1wdHlUcmFzaCA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWhhc0RlbGV0ZVBlcm1pc3Npb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgc2x1ZywgbGFiZWxzIH0gPSBjb2xsZWN0aW9uQ29uZmlnXG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHFzLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdHJhc2g6IHRydWUsXG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgZGVsZXRlZEF0OiB7XG4gICAgICAgICAgICBleGlzdHM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgKVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdHMuZGVsZXRlKFxuICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICBhcGlSb3V0ZTogY29uZmlnLnJvdXRlcy5hcGksXG4gICAgICAgIHBhdGg6IGAvJHtzbHVnfSR7cXVlcnlTdHJpbmd9YCxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpXG4gICAgICBjb25zdCBkZWxldGVkQ291bnQgPSBqc29uPy5kb2NzPy5sZW5ndGggfHwgMFxuXG4gICAgICBpZiAocmVzLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICAgIHQoJ2dlbmVyYWw6cGVybWFuZW50bHlEZWxldGVkQ291bnRTdWNjZXNzZnVsbHknLCB7XG4gICAgICAgICAgICBjb3VudDogZGVsZXRlZENvdW50LFxuICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVscz8ucGx1cmFsLCBpMThuKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoanNvbj8uZXJyb3JzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKGpzb24ubWVzc2FnZSwge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBqc29uLmVycm9ycy5tYXAoKGVycikgPT4gZXJyLm1lc3NhZ2UpLmpvaW4oJ1xcbicpLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByb3V0ZXIucmVwbGFjZShcbiAgICAgICAgcXMuc3RyaW5naWZ5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhzZWFyY2hQYXJhbXMuZW50cmllcygpKSxcbiAgICAgICAgICAgIHBhZ2U6ICcxJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSxcbiAgICAgICAgKSxcbiAgICAgIClcblxuICAgICAgY2xlYXJSb3V0ZUNhY2hlKClcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVua25vd24nKSlcbiAgICB9XG4gIH0sIFtcbiAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgIGNvbmZpZyxcbiAgICBoYXNEZWxldGVQZXJtaXNzaW9uLFxuICAgIGkxOG4sXG4gICAgdCxcbiAgICBsb2NhbGUsXG4gICAgc2VhcmNoUGFyYW1zLFxuICAgIHJvdXRlcixcbiAgICBjbGVhclJvdXRlQ2FjaGUsXG4gIF0pXG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6ZW1wdHlUcmFzaExhYmVsJywge1xuICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uQ29uZmlnPy5sYWJlbHM/LnBsdXJhbCwgaTE4biksXG4gICAgICAgIH0pfVxuICAgICAgICBidXR0b25TdHlsZT1cInBpbGxcIlxuICAgICAgICBkaXNhYmxlZD17dHJhc2hDb3VudCA9PT0gMH1cbiAgICAgICAgaWQ9XCJlbXB0eS10cmFzaC1idXR0b25cIlxuICAgICAgICBrZXk9XCJlbXB0eS10cmFzaC1idXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgb3Blbk1vZGFsKGNvbmZpcm1FbXB0eVRyYXNoU2x1ZylcbiAgICAgICAgfX1cbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgID5cbiAgICAgICAge3QoJ2dlbmVyYWw6ZW1wdHlUcmFzaCcpfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8Q29uZmlybWF0aW9uTW9kYWxcbiAgICAgICAgYm9keT17XG4gICAgICAgICAgPFRyYW5zbGF0aW9uXG4gICAgICAgICAgICBlbGVtZW50cz17e1xuICAgICAgICAgICAgICAnMCc6ICh7IGNoaWxkcmVuIH0pID0+IDxzdHJvbmc+e2NoaWxkcmVufTwvc3Ryb25nPixcbiAgICAgICAgICAgICAgJzEnOiAoeyBjaGlsZHJlbiB9KSA9PiA8c3Ryb25nPntjaGlsZHJlbn08L3N0cm9uZz4sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaTE4bktleT1cImdlbmVyYWw6YWJvdXRUb1Blcm1hbmVudGx5RGVsZXRlVHJhc2hcIlxuICAgICAgICAgICAgdD17dH1cbiAgICAgICAgICAgIHZhcmlhYmxlcz17e1xuICAgICAgICAgICAgICBjb3VudDogdHJhc2hDb3VudCA/PyAwLFxuICAgICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgdHJhc2hDb3VudCA9PT0gMVxuICAgICAgICAgICAgICAgICAgPyBjb2xsZWN0aW9uQ29uZmlnLmxhYmVscz8uc2luZ3VsYXJcbiAgICAgICAgICAgICAgICAgIDogY29sbGVjdGlvbkNvbmZpZy5sYWJlbHM/LnBsdXJhbCxcbiAgICAgICAgICAgICAgICBpMThuLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIGNvbmZpcm1pbmdMYWJlbD17dCgnZ2VuZXJhbDpkZWxldGluZycpfVxuICAgICAgICBoZWFkaW5nPXt0KCdnZW5lcmFsOmNvbmZpcm1EZWxldGlvbicpfVxuICAgICAgICBtb2RhbFNsdWc9e2NvbmZpcm1FbXB0eVRyYXNoU2x1Z31cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVFbXB0eVRyYXNofVxuICAgICAgLz5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IExpc3RTZWxlY3Rpb24gfSBmcm9tICcuLi9MaXN0U2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdncm91cC1ieS1oZWFkZXInXG5cbmV4cG9ydCBjb25zdCBHcm91cEJ5SGVhZGVyOiBSZWFjdC5GQzx7XG4gIGNvbGxlY3Rpb25Db25maWc/OiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gIGdyb3VwQnlGaWVsZFBhdGg6IHN0cmluZ1xuICBncm91cEJ5VmFsdWU6IHN0cmluZ1xuICBoZWFkaW5nOiBzdHJpbmdcbn0+ID0gKHsgY29sbGVjdGlvbkNvbmZpZywgZ3JvdXBCeUZpZWxkUGF0aCwgZ3JvdXBCeVZhbHVlLCBoZWFkaW5nIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8aGVhZGVyIGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIDxoNCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRpbmdgfSBkYXRhLWdyb3VwLWlkPXtncm91cEJ5VmFsdWV9PlxuICAgICAgICB7aGVhZGluZ31cbiAgICAgIDwvaDQ+XG4gICAgICA8TGlzdFNlbGVjdGlvblxuICAgICAgICBjb2xsZWN0aW9uQ29uZmlnPXtjb2xsZWN0aW9uQ29uZmlnfVxuICAgICAgICBsYWJlbD17aGVhZGluZ31cbiAgICAgICAgbW9kYWxQcmVmaXg9e2dyb3VwQnlWYWx1ZX1cbiAgICAgICAgd2hlcmU9e3tcbiAgICAgICAgICBbZ3JvdXBCeUZpZWxkUGF0aF06IHtcbiAgICAgICAgICAgIGVxdWFsczogZ3JvdXBCeVZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvaGVhZGVyPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xpZW50Q29sbGVjdGlvbkNvbmZpZywgUGFnaW5hdGVkRG9jcyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBJTGlzdFF1ZXJ5Q29udGV4dCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXN0UXVlcnkvdHlwZXMuanMnXG5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9QYWdpbmF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGVyUGFnZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1BlclBhZ2UvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAncGFnZS1jb250cm9scydcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBhZ2VDb250cm9sc0NvbXBvbmVudDogUmVhY3QuRkM8e1xuICBBZnRlclBhZ2VDb250cm9scz86IFJlYWN0LlJlYWN0Tm9kZVxuICBjb2xsZWN0aW9uQ29uZmlnOiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gIGRhdGE6IFBhZ2luYXRlZERvY3NcbiAgaGFuZGxlUGFnZUNoYW5nZT86IElMaXN0UXVlcnlDb250ZXh0WydoYW5kbGVQYWdlQ2hhbmdlJ11cbiAgaGFuZGxlUGVyUGFnZUNoYW5nZT86IElMaXN0UXVlcnlDb250ZXh0WydoYW5kbGVQZXJQYWdlQ2hhbmdlJ11cbiAgbGltaXQ/OiBudW1iZXJcbn0+ID0gKHtcbiAgQWZ0ZXJQYWdlQ29udHJvbHMsXG4gIGNvbGxlY3Rpb25Db25maWcsXG4gIGRhdGEsXG4gIGhhbmRsZVBhZ2VDaGFuZ2UsXG4gIGhhbmRsZVBlclBhZ2VDaGFuZ2UsXG4gIGxpbWl0LFxufSkgPT4ge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPFBhZ2luYXRpb25cbiAgICAgICAgaGFzTmV4dFBhZ2U9e2RhdGEuaGFzTmV4dFBhZ2V9XG4gICAgICAgIGhhc1ByZXZQYWdlPXtkYXRhLmhhc1ByZXZQYWdlfVxuICAgICAgICBsaW1pdD17ZGF0YS5saW1pdH1cbiAgICAgICAgbmV4dFBhZ2U9e2RhdGEubmV4dFBhZ2V9XG4gICAgICAgIG51bWJlck9mTmVpZ2hib3JzPXsxfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlUGFnZUNoYW5nZX1cbiAgICAgICAgcGFnZT17ZGF0YS5wYWdlfVxuICAgICAgICBwcmV2UGFnZT17ZGF0YS5wcmV2UGFnZX1cbiAgICAgICAgdG90YWxQYWdlcz17ZGF0YS50b3RhbFBhZ2VzfVxuICAgICAgLz5cbiAgICAgIHtkYXRhLnRvdGFsRG9jcyA+IDAgJiYgKFxuICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3BhZ2UtaW5mb2B9PlxuICAgICAgICAgICAge2RhdGEucGFnZSAqIGRhdGEubGltaXQgLSAoZGF0YS5saW1pdCAtIDEpfS1cbiAgICAgICAgICAgIHtkYXRhLnRvdGFsUGFnZXMgPiAxICYmIGRhdGEudG90YWxQYWdlcyAhPT0gZGF0YS5wYWdlXG4gICAgICAgICAgICAgID8gZGF0YS5saW1pdCAqIGRhdGEucGFnZVxuICAgICAgICAgICAgICA6IGRhdGEudG90YWxEb2NzfXsnICd9XG4gICAgICAgICAgICB7aTE4bi50KCdnZW5lcmFsOm9mJyl9IHtkYXRhLnRvdGFsRG9jc31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8UGVyUGFnZVxuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlPXtoYW5kbGVQZXJQYWdlQ2hhbmdlfVxuICAgICAgICAgICAgbGltaXQ9e2xpbWl0fVxuICAgICAgICAgICAgbGltaXRzPXtjb2xsZWN0aW9uQ29uZmlnPy5hZG1pbj8ucGFnaW5hdGlvbj8ubGltaXRzfVxuICAgICAgICAgICAgcmVzZXRQYWdlPXtkYXRhLnRvdGFsRG9jcyA8PSBkYXRhLnBhZ2luZ0NvdW50ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7QWZ0ZXJQYWdlQ29udHJvbHN9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cbi8qKlxuICogVGhlc2UgcGFnZSBjb250cm9scyBhcmUgY29udHJvbGxlZCBieSB0aGUgZ2xvYmFsIExpc3RRdWVyeSBzdGF0ZS5cbiAqIFRvIG92ZXJyaWRlIHRoaSBiZWhhdmlvciwgYnVpbGQgeW91ciBvd24gd3JhcHBlciBhcm91bmQgUGFnZUNvbnRyb2xzQ29tcG9uZW50LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUGFnZUNvbnRyb2xzOiBSZWFjdC5GQzx7XG4gIEFmdGVyUGFnZUNvbnRyb2xzPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNvbGxlY3Rpb25Db25maWc6IENsaWVudENvbGxlY3Rpb25Db25maWdcbn0+ID0gKHsgQWZ0ZXJQYWdlQ29udHJvbHMsIGNvbGxlY3Rpb25Db25maWcgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBkZWZhdWx0TGltaXQ6IGluaXRpYWxMaW1pdCxcbiAgICBoYW5kbGVQYWdlQ2hhbmdlLFxuICAgIGhhbmRsZVBlclBhZ2VDaGFuZ2UsXG4gICAgcXVlcnksXG4gIH0gPSB1c2VMaXN0UXVlcnkoKVxuXG4gIHJldHVybiAoXG4gICAgPFBhZ2VDb250cm9sc0NvbXBvbmVudFxuICAgICAgQWZ0ZXJQYWdlQ29udHJvbHM9e0FmdGVyUGFnZUNvbnRyb2xzfVxuICAgICAgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgIGRhdGE9e2RhdGF9XG4gICAgICBoYW5kbGVQYWdlQ2hhbmdlPXtoYW5kbGVQYWdlQ2hhbmdlfVxuICAgICAgaGFuZGxlUGVyUGFnZUNoYW5nZT17aGFuZGxlUGVyUGFnZUNoYW5nZX1cbiAgICAgIGxpbWl0PXtpc051bWJlcihxdWVyeS5saW1pdCkgPyBxdWVyeS5saW1pdCA6IGluaXRpYWxMaW1pdH1cbiAgICAvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbi8vIFRPRE86IGFic3RyYWN0IHRoZSBgbmV4dC9uYXZpZ2F0aW9uYCBkZXBlbmRlbmN5IG91dCBmcm9tIHRoaXMgY29tcG9uZW50XG5pbXBvcnQgeyBjb2xsZWN0aW9uRGVmYXVsdHMsIGlzTnVtYmVyIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUG9wdXAsIFBvcHVwTGlzdCB9IGZyb20gJy4uL1BvcHVwL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdwZXItcGFnZSdcblxuY29uc3QgZGVmYXVsdExpbWl0cyA9IGNvbGxlY3Rpb25EZWZhdWx0cy5hZG1pbi5wYWdpbmF0aW9uLmxpbWl0c1xuXG5leHBvcnQgdHlwZSBQZXJQYWdlUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGRlZmF1bHRMaW1pdD86IG51bWJlclxuICByZWFkb25seSBoYW5kbGVDaGFuZ2U/OiAobGltaXQ6IG51bWJlcikgPT4gdm9pZFxuICByZWFkb25seSBsaW1pdDogbnVtYmVyXG4gIHJlYWRvbmx5IGxpbWl0czogbnVtYmVyW11cbiAgcmVhZG9ubHkgcmVzZXRQYWdlPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUGVyUGFnZTogUmVhY3QuRkM8UGVyUGFnZVByb3BzPiA9ICh7XG4gIGRlZmF1bHRMaW1pdCA9IDEwLFxuICBoYW5kbGVDaGFuZ2UsXG4gIGxpbWl0LFxuICBsaW1pdHMgPSBkZWZhdWx0TGltaXRzLFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBsaW1pdFRvVXNlID0gaXNOdW1iZXIobGltaXQpID8gbGltaXQgOiBkZWZhdWx0TGltaXRcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPFBvcHVwXG4gICAgICAgIGJ1dHRvbj17XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Jhc2UtYnV0dG9uYH0+XG4gICAgICAgICAgICA8c3Bhbj57dCgnZ2VuZXJhbDpwZXJQYWdlJywgeyBsaW1pdDogbGltaXRUb1VzZSB9KX08L3NwYW4+XG4gICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgIDxDaGV2cm9uSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ljb25gfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIGhvcml6b250YWxBbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgcmVuZGVyPXsoeyBjbG9zZSB9KSA9PiAoXG4gICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgIHtsaW1pdHMubWFwKChsaW1pdE51bWJlciwgaSkgPT4gKFxuICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fYnV0dG9uYCxcbiAgICAgICAgICAgICAgICAgIGxpbWl0TnVtYmVyID09PSBsaW1pdFRvVXNlICYmIGAke2Jhc2VDbGFzc31fX2J1dHRvbi1hY3RpdmVgLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlKGxpbWl0TnVtYmVyKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7bGltaXROdW1iZXIgPT09IGxpbWl0VG9Vc2UgJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NoZXZyb25gfT5cbiAgICAgICAgICAgICAgICAgICAgPENoZXZyb25JY29uIGRpcmVjdGlvbj1cInJpZ2h0XCIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgPHNwYW4+e2xpbWl0TnVtYmVyfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICl9XG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnc3RpY2t5LXRvb2xiYXInXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTdGlja3lUb29sYmFyOiBSZWFjdC5GQzx7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn0+ID0gKHsgY2hpbGRyZW4gfSkgPT4gPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+e2NoaWxkcmVufTwvZGl2PlxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudENvbGxlY3Rpb25Db25maWcsIFBhZ2luYXRlZERvY3MgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBJTGlzdFF1ZXJ5Q29udGV4dCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXN0UXVlcnkvdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZUxpc3RRdWVyeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXN0UXVlcnkvY29udGV4dC5qcydcbmltcG9ydCB7IFBhZ2VDb250cm9sc0NvbXBvbmVudCB9IGZyb20gJy4vaW5kZXguanMnXG5cbi8qKlxuICogSWYgYGdyb3VwQnlgIGlzIHNldCBpbiB0aGUgcXVlcnksIG11bHRpcGxlIHRhYmxlcyB3aWxsIHJlbmRlciwgb25lIGZvciBlYWNoIGdyb3VwLlxuICogSW4gdGhpcyBjYXNlLCBlYWNoIHRhYmxlIG5lZWRzIGl0cyBvd24gYFBhZ2VDb250cm9sc2AgdG8gaGFuZGxlIHBhZ2luYXRpb24uXG4gKiBUaGVzZSBwYWdlIGNvbnRyb2xzLCBob3dldmVyLCBzaG91bGQgbm90IG1vZGlmeSB0aGUgZ2xvYmFsIGBMaXN0UXVlcnlgIHN0YXRlLlxuICogSW5zdGVhZCwgdGhleSBzaG91bGQgb25seSBoYW5kbGUgdGhlIHBhZ2luYXRpb24gZm9yIHRoZSBjdXJyZW50IGdyb3VwLlxuICogVG8gZG8gdGhpcywgYnVpbGQgYSB3cmFwcGVyIGFyb3VuZCBgUGFnZUNvbnRyb2xzQ29tcG9uZW50YCB0aGF0IGhhbmRsZXMgdGhlIHBhZ2luYXRpb24gbG9naWMgZm9yIHRoZSBjdXJyZW50IGdyb3VwLlxuICovXG5leHBvcnQgY29uc3QgR3JvdXBCeVBhZ2VDb250cm9sczogUmVhY3QuRkM8e1xuICBBZnRlclBhZ2VDb250cm9scz86IFJlYWN0LlJlYWN0Tm9kZVxuICBjb2xsZWN0aW9uQ29uZmlnOiBDbGllbnRDb2xsZWN0aW9uQ29uZmlnXG4gIGRhdGE6IFBhZ2luYXRlZERvY3NcbiAgZ3JvdXBCeVZhbHVlPzogbnVtYmVyIHwgc3RyaW5nXG59PiA9ICh7IEFmdGVyUGFnZUNvbnRyb2xzLCBjb2xsZWN0aW9uQ29uZmlnLCBkYXRhLCBncm91cEJ5VmFsdWUgfSkgPT4ge1xuICBjb25zdCB7IHJlZmluZUxpc3REYXRhIH0gPSB1c2VMaXN0UXVlcnkoKVxuXG4gIGNvbnN0IGhhbmRsZVBhZ2VDaGFuZ2U6IElMaXN0UXVlcnlDb250ZXh0WydoYW5kbGVQYWdlQ2hhbmdlJ10gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFnZSkgPT4ge1xuICAgICAgYXdhaXQgcmVmaW5lTGlzdERhdGEoe1xuICAgICAgICBxdWVyeUJ5R3JvdXA6IHtcbiAgICAgICAgICBbZ3JvdXBCeVZhbHVlXToge1xuICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtyZWZpbmVMaXN0RGF0YSwgZ3JvdXBCeVZhbHVlXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVBlclBhZ2VDaGFuZ2U6IElMaXN0UXVlcnlDb250ZXh0WydoYW5kbGVQZXJQYWdlQ2hhbmdlJ10gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobGltaXQpID0+IHtcbiAgICAgIGF3YWl0IHJlZmluZUxpc3REYXRhKHtcbiAgICAgICAgcXVlcnlCeUdyb3VwOiB7XG4gICAgICAgICAgW2dyb3VwQnlWYWx1ZV06IHtcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtyZWZpbmVMaXN0RGF0YSwgZ3JvdXBCeVZhbHVlXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFBhZ2VDb250cm9sc0NvbXBvbmVudFxuICAgICAgQWZ0ZXJQYWdlQ29udHJvbHM9e0FmdGVyUGFnZUNvbnRyb2xzfVxuICAgICAgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgIGRhdGE9e2RhdGF9XG4gICAgICBoYW5kbGVQYWdlQ2hhbmdlPXtoYW5kbGVQYWdlQ2hhbmdlfVxuICAgICAgaGFuZGxlUGVyUGFnZUNoYW5nZT17aGFuZGxlUGVyUGFnZUNoYW5nZX1cbiAgICAvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IExvZ091dEljb24gfSBmcm9tICcuLi8uLi9pY29ucy9Mb2dPdXQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnLi4vTGluay9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ25hdidcblxuZXhwb3J0IGNvbnN0IExvZ291dDogUmVhY3QuRkM8e1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVGhpcyBwcm9wIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBDb21wb25lbnRzIG5vdyBpbXBvcnQgdGhlaXIgb3duIGBMaW5rYCBkaXJlY3RseSBmcm9tIGBuZXh0L2xpbmtgLlxuICAgKi9cbiAgTGluaz86IFJlYWN0LkNvbXBvbmVudFR5cGVcbiAgdGFiSW5kZXg/OiBudW1iZXJcbn0+ID0gKHsgdGFiSW5kZXggPSAwIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IHtcbiAgICBhZG1pbjoge1xuICAgICAgcm91dGVzOiB7IGxvZ291dDogbG9nb3V0Um91dGUgfSxcbiAgICB9LFxuICAgIHJvdXRlczogeyBhZG1pbjogYWRtaW5Sb3V0ZSB9LFxuICB9ID0gY29uZmlnXG5cbiAgcmV0dXJuIChcbiAgICA8TGlua1xuICAgICAgYXJpYS1sYWJlbD17dCgnYXV0aGVudGljYXRpb246bG9nT3V0Jyl9XG4gICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xvZy1vdXRgfVxuICAgICAgaHJlZj17Zm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICBhZG1pblJvdXRlLFxuICAgICAgICBwYXRoOiBsb2dvdXRSb3V0ZSxcbiAgICAgIH0pfVxuICAgICAgcHJlZmV0Y2g9e2ZhbHNlfVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgdGl0bGU9e3QoJ2F1dGhlbnRpY2F0aW9uOmxvZ091dCcpfVxuICAgID5cbiAgICAgIDxMb2dPdXRJY29uIC8+XG4gICAgPC9MaW5rPlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgY29uc3QgTG9nT3V0SWNvbjogUmVhY3QuRkMgPSAoKSA9PiAoXG4gIDxzdmdcbiAgICBjbGFzc05hbWU9XCJpY29uIGljb24tLWxvZ291dFwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIGhlaWdodD1cIjIwXCJcbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICB3aWR0aD1cIjIwXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgPlxuICAgIDxwYXRoXG4gICAgICBjbGFzc05hbWU9XCJzdHJva2VcIlxuICAgICAgZD1cIk0xMiAxNkgxNC42NjY3QzE1LjAyMDMgMTYgMTUuMzU5NCAxNS44NTk1IDE1LjYwOTUgMTUuNjA5NUMxNS44NTk1IDE1LjM1OTQgMTYgMTUuMDIwMyAxNiAxNC42NjY3VjUuMzMzMzNDMTYgNC45Nzk3MSAxNS44NTk1IDQuNjQwNTcgMTUuNjA5NSA0LjM5MDUyQzE1LjM1OTQgNC4xNDA0OCAxNS4wMjAzIDQgMTQuNjY2NyA0SDEyTTcuMzMzMzMgMTMuMzMzM0w0IDEwTTQgMTBMNy4zMzMzMyA2LjY2NjY3TTQgMTBIMTJcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInNxdWFyZVwiXG4gICAgLz5cbiAgPC9zdmc+XG4pXG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgTmF2UHJlZmVyZW5jZXMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBQUkVGRVJFTkNFX0tFWVMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBDaGV2cm9uSWNvbiB9IGZyb20gJy4uLy4uL2ljb25zL0NoZXZyb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9QcmVmZXJlbmNlcy9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgQW5pbWF0ZUhlaWdodCB9IGZyb20gJy4uL0FuaW1hdGVIZWlnaHQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VOYXYgfSBmcm9tICcuLi9OYXYvY29udGV4dC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ25hdi1ncm91cCdcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBpc09wZW4/OiBib29sZWFuXG4gIGxhYmVsOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE5hdkdyb3VwOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyBjaGlsZHJlbiwgaXNPcGVuOiBpc09wZW5Gcm9tUHJvcHMsIGxhYmVsIH0pID0+IHtcbiAgY29uc3QgW2NvbGxhcHNlZCwgc2V0Q29sbGFwc2VkXSA9IHVzZVN0YXRlKFxuICAgIHR5cGVvZiBpc09wZW5Gcm9tUHJvcHMgIT09ICd1bmRlZmluZWQnID8gIWlzT3BlbkZyb21Qcm9wcyA6IGZhbHNlLFxuICApXG5cbiAgY29uc3QgW2FuaW1hdGUsIHNldEFuaW1hdGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHsgc2V0UHJlZmVyZW5jZSB9ID0gdXNlUHJlZmVyZW5jZXMoKVxuICBjb25zdCB7IG5hdk9wZW4gfSA9IHVzZU5hdigpXG5cbiAgaWYgKGxhYmVsKSB7XG4gICAgY29uc3QgdG9nZ2xlQ29sbGFwc2VkID0gKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0ZSh0cnVlKVxuICAgICAgY29uc3QgbmV3R3JvdXBQcmVmczogTmF2UHJlZmVyZW5jZXNbJ2dyb3VwcyddID0ge31cblxuICAgICAgaWYgKCFuZXdHcm91cFByZWZzPy5bbGFiZWxdKSB7XG4gICAgICAgIG5ld0dyb3VwUHJlZnNbbGFiZWxdID0geyBvcGVuOiBCb29sZWFuKGNvbGxhcHNlZCkgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3R3JvdXBQcmVmc1tsYWJlbF0ub3BlbiA9IEJvb2xlYW4oY29sbGFwc2VkKVxuICAgICAgfVxuXG4gICAgICB2b2lkIHNldFByZWZlcmVuY2UoUFJFRkVSRU5DRV9LRVlTLk5BViwgeyBncm91cHM6IG5ld0dyb3VwUHJlZnMgfSwgdHJ1ZSlcbiAgICAgIHNldENvbGxhcHNlZCghY29sbGFwc2VkKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31gLCBgJHtsYWJlbH1gLCBjb2xsYXBzZWQgJiYgYCR7YmFzZUNsYXNzfS0tY29sbGFwc2VkYF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgaWQ9e2BuYXYtZ3JvdXAtJHtsYWJlbH1gfVxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X190b2dnbGVgLFxuICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fdG9nZ2xlLS0ke2NvbGxhcHNlZCA/ICdjb2xsYXBzZWQnIDogJ29wZW4nfWAsXG4gICAgICAgICAgXVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVDb2xsYXBzZWR9XG4gICAgICAgICAgdGFiSW5kZXg9eyFuYXZPcGVuID8gLTEgOiAwfVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xhYmVsYH0+e2xhYmVsfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbmRpY2F0b3JgfT5cbiAgICAgICAgICAgIDxDaGV2cm9uSWNvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2luZGljYXRvcmB9XG4gICAgICAgICAgICAgIGRpcmVjdGlvbj17IWNvbGxhcHNlZCA/ICd1cCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPEFuaW1hdGVIZWlnaHQgZHVyYXRpb249e2FuaW1hdGUgPyAyMDAgOiAwfSBoZWlnaHQ9e2NvbGxhcHNlZCA/IDAgOiAnYXV0byd9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250ZW50YH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L0FuaW1hdGVIZWlnaHQ+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gPFJlYWN0LkZyYWdtZW50PntjaGlsZHJlbn08L1JlYWN0LkZyYWdtZW50PlxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IFBvcHVwUHJvcHMgfSBmcm9tICcuLi9Qb3B1cC9pbmRleC5qcydcblxuaW1wb3J0IHsgUG9wdXAsIFBvcHVwTGlzdCB9IGZyb20gJy4uL1BvcHVwL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdjb21ib2JveCdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IHR5cGUgQ29tYm9ib3hFbnRyeSA9IHtcbiAgQ29tcG9uZW50OiBSZWFjdC5SZWFjdE5vZGVcbiAgbmFtZTogc3RyaW5nXG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCB0eXBlIENvbWJvYm94UHJvcHMgPSB7XG4gIGVudHJpZXM6IENvbWJvYm94RW50cnlbXVxuICAvKiogTWluaW11bSBudW1iZXIgb2YgZW50cmllcyByZXF1aXJlZCB0byBzaG93IHNlYXJjaCAqL1xuICBtaW5FbnRyaWVzRm9yU2VhcmNoPzogbnVtYmVyXG4gIG9uU2VsZWN0PzogKGVudHJ5OiBDb21ib2JveEVudHJ5KSA9PiB2b2lkXG4gIHNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nXG59ICYgT21pdDxQb3B1cFByb3BzLCAnY2hpbGRyZW4nIHwgJ3JlbmRlcic+XG5cbi8qKlxuICogQSB3cmFwcGVyIG9uIHRvcCBvZiBQb3B1cCArIFBvcHVwTGlzdC5CdXR0b25Hcm91cCB0aGF0IGFkZHMgc2VhcmNoIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQGludGVybmFsIC0gdGhpcyBjb21wb25lbnQgbWF5IGJlIHJlbW92ZWQgb3IgcmVjZWl2ZSBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzLlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY29uc3QgQ29tYm9ib3g6IFJlYWN0LkZDPENvbWJvYm94UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBlbnRyaWVzLFxuICAgIG1pbkVudHJpZXNGb3JTZWFyY2ggPSA4LFxuICAgIG9uU2VsZWN0LFxuICAgIG9uVG9nZ2xlQ2xvc2UsXG4gICAgb25Ub2dnbGVPcGVuLFxuICAgIHNlYXJjaFBsYWNlaG9sZGVyID0gJ1NlYXJjaC4uLicsXG4gICAgLi4ucG9wdXBQcm9wc1xuICB9ID0gcHJvcHNcbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgaXNPcGVuUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IGZpbHRlcmVkRW50cmllcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaCA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICByZXR1cm4gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSlcbiAgfSwgW2VudHJpZXMsIHNlYXJjaFZhbHVlXSlcblxuICBjb25zdCBzaG93U2VhcmNoID0gZW50cmllcy5sZW5ndGggPj0gbWluRW50cmllc0ZvclNlYXJjaFxuICBjb25zdCBoYXNSZXN1bHRzID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aCA+IDBcblxuICBjb25zdCBoYW5kbGVUb2dnbGVPcGVuID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGFjdGl2ZTogYm9vbGVhbikgPT4ge1xuICAgICAgaXNPcGVuUmVmLmN1cnJlbnQgPSBhY3RpdmVcbiAgICAgIGlmIChhY3RpdmUgJiYgc2hvd1NlYXJjaCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICAgIH0sIDEwMClcbiAgICAgIH1cbiAgICAgIG9uVG9nZ2xlT3Blbj8uKGFjdGl2ZSlcbiAgICB9LFxuICAgIFtzaG93U2VhcmNoLCBvblRvZ2dsZU9wZW5dLFxuICApXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldFNlYXJjaFZhbHVlKCcnKVxuICAgIG9uVG9nZ2xlQ2xvc2U/LigpXG4gIH0sIFtvblRvZ2dsZUNsb3NlXSlcblxuICByZXR1cm4gKFxuICAgIDxQb3B1cFxuICAgICAgey4uLnBvcHVwUHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc30gJHtwb3B1cFByb3BzLmNsYXNzTmFtZSB8fCAnJ31gfVxuICAgICAgb25Ub2dnbGVDbG9zZT17aGFuZGxlVG9nZ2xlQ2xvc2V9XG4gICAgICBvblRvZ2dsZU9wZW49e2hhbmRsZVRvZ2dsZU9wZW59XG4gICAgICByZW5kZXI9eyh7IGNsb3NlIH0pID0+IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfT5cbiAgICAgICAgICB7c2hvd1NlYXJjaCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2VhcmNoLXdyYXBwZXIkeyFoYXNSZXN1bHRzID8gYCAke2Jhc2VDbGFzc31fX3NlYXJjaC13cmFwcGVyLS1uby1yZXN1bHRzYCA6ICcnfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3NlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2VhcmNoLWlucHV0YH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17c2VhcmNoUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvbkdyb3VwPlxuICAgICAgICAgICAge2ZpbHRlcmVkRW50cmllcy5tYXAoKGVudHJ5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVDbGljayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob25TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0KGVudHJ5KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZW50cnlgfVxuICAgICAgICAgICAgICAgICAgZGF0YS1wb3B1cC1wcmV2ZW50LWNsb3NlXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2VudHJ5Lm5hbWV9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7ZW50cnkuQ29tcG9uZW50fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIC8+XG4gIClcbn1cbiIsImltcG9ydCB7IGZvcm1hdEFkbWluVVJMIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IExpbmsgfSBmcm9tICcuLi8uLi9MaW5rL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29sb3JlZEZvbGRlckljb24gfSBmcm9tICcuLi9Db2xvcmVkRm9sZGVySWNvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnYnJvd3NlLWJ5LWZvbGRlci1idXR0b24nXG5cbmV4cG9ydCBmdW5jdGlvbiBCcm93c2VCeUZvbGRlckJ1dHRvbih7IGFjdGl2ZSB9KSB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3Qge1xuICAgIGFkbWluOiB7XG4gICAgICByb3V0ZXM6IHsgYnJvd3NlQnlGb2xkZXI6IGZvbGRlcnNSb3V0ZSB9LFxuICAgIH0sXG4gICAgcm91dGVzOiB7IGFkbWluOiBhZG1pblJvdXRlIH0sXG4gIH0gPSBjb25maWdcblxuICByZXR1cm4gKFxuICAgIDxMaW5rXG4gICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGFjdGl2ZSAmJiAnYWN0aXZlJ10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgIGhyZWY9e2Zvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgYWRtaW5Sb3V0ZSxcbiAgICAgICAgcGF0aDogZm9sZGVyc1JvdXRlLFxuICAgICAgfSl9XG4gICAgICBpZD1cImJyb3dzZS1ieS1mb2xkZXJcIlxuICAgICAgcHJlZmV0Y2g9e2ZhbHNlfVxuICAgID5cbiAgICAgIDxDb2xvcmVkRm9sZGVySWNvbiAvPlxuICAgICAge3QoJ2ZvbGRlcjpicm93c2VCeUZvbGRlcicpfVxuICAgIDwvTGluaz5cbiAgKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBPcHRpb25PYmplY3QsIFNlbGVjdEZpZWxkQ2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgUmVhY3RTZWxlY3RBZGFwdGVyUHJvcHMgfSBmcm9tICcuLi8uLi9SZWFjdFNlbGVjdC90eXBlcy5qcydcblxuaW1wb3J0IHsgbWVyZ2VGaWVsZFN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9tZXJnZUZpZWxkU3R5bGVzLmpzJ1xuaW1wb3J0IHsgZm9ybWF0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9TZWxlY3QvaW5kZXguanMnXG5pbXBvcnQgeyBTZWxlY3RJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9TZWxlY3QvSW5wdXQuanMnXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9sZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0ZvbGRlcnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IEZvbGRlclR5cGVGaWVsZCA9IChwcm9wczogU2VsZWN0RmllbGRDbGllbnRQcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGQ6IHtcbiAgICAgIG5hbWUsXG4gICAgICBhZG1pbjoge1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGlzQ2xlYXJhYmxlID0gdHJ1ZSxcbiAgICAgICAgaXNTb3J0YWJsZSA9IHRydWUsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgfSA9IHt9IGFzIFNlbGVjdEZpZWxkQ2xpZW50UHJvcHNbJ2ZpZWxkJ11bJ2FkbWluJ10sXG4gICAgICBoYXNNYW55ID0gZmFsc2UsXG4gICAgICBsYWJlbCxcbiAgICAgIGxvY2FsaXplZCxcbiAgICAgIG9wdGlvbnM6IGFsbFNlbGVjdE9wdGlvbnMgPSBbXSxcbiAgICAgIHJlcXVpcmVkLFxuICAgIH0sXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlRnJvbVByb3BzLFxuICAgIHBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgcmVhZE9ubHksXG4gICAgdmFsaWRhdGUsXG4gIH0gPSBwcm9wc1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCB7IGZvbGRlclR5cGUgfSA9IHVzZUZvbGRlcigpXG5cbiAgY29uc3Qgb3B0aW9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZm9sZGVyVHlwZSB8fCBmb2xkZXJUeXBlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcm1hdE9wdGlvbnMoYWxsU2VsZWN0T3B0aW9ucylcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdE9wdGlvbnMoXG4gICAgICBhbGxTZWxlY3RPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZm9sZGVyVHlwZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pLFxuICAgIClcbiAgfSwgW2FsbFNlbGVjdE9wdGlvbnMsIGZvbGRlclR5cGVdKVxuXG4gIGNvbnN0IG1lbW9pemVkVmFsaWRhdGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmFsdWUsIHZhbGlkYXRpb25PcHRpb25zKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh2YWx1ZSwgeyAuLi52YWxpZGF0aW9uT3B0aW9ucywgaGFzTWFueSwgb3B0aW9ucywgcmVxdWlyZWQgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFt2YWxpZGF0ZSwgcmVxdWlyZWQsIGhhc01hbnksIG9wdGlvbnNdLFxuICApXG5cbiAgY29uc3Qge1xuICAgIGN1c3RvbUNvbXBvbmVudHM6IHsgQWZ0ZXJJbnB1dCwgQmVmb3JlSW5wdXQsIERlc2NyaXB0aW9uLCBFcnJvciwgTGFiZWwgfSA9IHt9LFxuICAgIGRpc2FibGVkLFxuICAgIHBhdGgsXG4gICAgc2VsZWN0RmlsdGVyT3B0aW9ucyxcbiAgICBzZXRWYWx1ZSxcbiAgICBzaG93RXJyb3IsXG4gICAgdmFsdWUsXG4gIH0gPSB1c2VGaWVsZCh7XG4gICAgcG90ZW50aWFsbHlTdGFsZVBhdGg6IHBhdGhGcm9tUHJvcHMsXG4gICAgdmFsaWRhdGU6IG1lbW9pemVkVmFsaWRhdGUsXG4gIH0pXG5cbiAgY29uc3Qgb25DaGFuZ2U6IFJlYWN0U2VsZWN0QWRhcHRlclByb3BzWydvbkNoYW5nZSddID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uOiBPcHRpb25PYmplY3QgfCBPcHRpb25PYmplY3RbXSkgPT4ge1xuICAgICAgaWYgKCFyZWFkT25seSB8fCBkaXNhYmxlZCkge1xuICAgICAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdID0gbnVsbFxuICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgaGFzTWFueSkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9uKSAmJiBzZWxlY3RlZE9wdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhQXJyYXkuaXNBcnJheShzZWxlY3RlZE9wdGlvbikpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25DaGFuZ2VGcm9tUHJvcHMobmV3VmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZWFkT25seSwgZGlzYWJsZWQsIGhhc01hbnksIHNldFZhbHVlLCBvbkNoYW5nZUZyb21Qcm9wc10sXG4gIClcblxuICBjb25zdCBzdHlsZXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IG1lcmdlRmllbGRTdHlsZXMoZmllbGQpLCBbZmllbGRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdElucHV0XG4gICAgICBBZnRlcklucHV0PXtBZnRlcklucHV0fVxuICAgICAgQmVmb3JlSW5wdXQ9e0JlZm9yZUlucHV0fVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBEZXNjcmlwdGlvbj17RGVzY3JpcHRpb259XG4gICAgICBkZXNjcmlwdGlvbj17dCgnZm9sZGVyOmZvbGRlclR5cGVEZXNjcmlwdGlvbicpfVxuICAgICAgRXJyb3I9e0Vycm9yfVxuICAgICAgZmlsdGVyT3B0aW9uPXtcbiAgICAgICAgc2VsZWN0RmlsdGVyT3B0aW9uc1xuICAgICAgICAgID8gKHsgdmFsdWUgfSkgPT5cbiAgICAgICAgICAgICAgc2VsZWN0RmlsdGVyT3B0aW9ucz8uc29tZShcbiAgICAgICAgICAgICAgICAob3B0aW9uKSA9PiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHRpb24gOiBvcHRpb24udmFsdWUpID09PSB2YWx1ZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBoYXNNYW55PXtoYXNNYW55fVxuICAgICAgaXNDbGVhcmFibGU9e2lzQ2xlYXJhYmxlfVxuICAgICAgaXNTb3J0YWJsZT17aXNTb3J0YWJsZX1cbiAgICAgIExhYmVsPXtMYWJlbH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIGxvY2FsaXplZD17bG9jYWxpemVkfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBwYXRoPXtwYXRofVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5IHx8IGRpc2FibGVkfVxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkIHx8IChBcnJheS5pc0FycmF5KGZvbGRlclR5cGUpICYmIGZvbGRlclR5cGUubGVuZ3RoID4gMCl9XG4gICAgICBzaG93RXJyb3I9e3Nob3dFcnJvcn1cbiAgICAgIHN0eWxlPXtzdHlsZXN9XG4gICAgICB2YWx1ZT17dmFsdWUgYXMgc3RyaW5nIHwgc3RyaW5nW119XG4gICAgLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgZXh0cmFjdElEIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IERvY3VtZW50SWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL0RvY3VtZW50L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvbGRlciB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Gb2xkZXJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL2Zvcm1hdERvY1RpdGxlL2Zvcm1hdERhdGVUaXRsZS5qcydcbmltcG9ydCB7IENvbG9yZWRGb2xkZXJJY29uIH0gZnJvbSAnLi4vQ29sb3JlZEZvbGRlckljb24vaW5kZXguanMnXG5pbXBvcnQgeyBEcmFnZ2FibGVUYWJsZVJvdyB9IGZyb20gJy4uL0RyYWdnYWJsZVRhYmxlUm93L2luZGV4LmpzJ1xuaW1wb3J0IHsgU2ltcGxlVGFibGUsIFRhYmxlSGVhZGVyIH0gZnJvbSAnLi4vU2ltcGxlVGFibGUvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZvbGRlci1maWxlLXRhYmxlJ1xuXG50eXBlIFByb3BzID0ge1xuICBzaG93UmVsYXRpb25DZWxsPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRm9sZGVyRmlsZVRhYmxlKHsgc2hvd1JlbGF0aW9uQ2VsbCA9IHRydWUgfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrSWZJdGVtSXNEaXNhYmxlZCxcbiAgICBkb2N1bWVudHMsXG4gICAgZm9jdXNlZFJvd0luZGV4LFxuICAgIG9uSXRlbUNsaWNrLFxuICAgIG9uSXRlbUtleVByZXNzLFxuICAgIHNlbGVjdGVkSXRlbUtleXMsXG4gICAgc3ViZm9sZGVycyxcbiAgfSA9IHVzZUZvbGRlcigpXG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBbcmVsYXRpb25Ub01hcF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCB7IHBsdXJhbDogc3RyaW5nOyBzaW5ndWxhcjogc3RyaW5nIH0+ID0ge31cbiAgICBjb25maWcuY29sbGVjdGlvbnMuZm9yRWFjaCgoY29sbGVjdGlvbikgPT4ge1xuICAgICAgbWFwW2NvbGxlY3Rpb24uc2x1Z10gPSB7XG4gICAgICAgIHBsdXJhbDogZ2V0VHJhbnNsYXRpb24oY29sbGVjdGlvbi5sYWJlbHM/LnBsdXJhbCwgaTE4biksXG4gICAgICAgIHNpbmd1bGFyOiBnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uLmxhYmVscz8uc2luZ3VsYXIsIGkxOG4pLFxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIG1hcFxuICB9KVxuXG4gIGNvbnN0IFtjb2x1bW5zXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICBjb25zdCBjb2x1bW5zVG9TaG93ID0gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOm5hbWUnKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjcmVhdGVkQXQnLFxuICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDpjcmVhdGVkQXQnKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd1cGRhdGVkQXQnLFxuICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDp1cGRhdGVkQXQnKSxcbiAgICAgIH0sXG4gICAgXVxuXG4gICAgaWYgKHNob3dSZWxhdGlvbkNlbGwpIHtcbiAgICAgIGNvbHVtbnNUb1Nob3cucHVzaCh7XG4gICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgbGFiZWw6IHQoJ3ZlcnNpb246dHlwZScpLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc1RvU2hvd1xuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFNpbXBsZVRhYmxlXG4gICAgICBoZWFkZXJDZWxscz17Y29sdW1ucy5tYXAoKHsgbmFtZSwgbGFiZWwgfSkgPT4gKFxuICAgICAgICA8VGFibGVIZWFkZXIga2V5PXtuYW1lfT57bGFiZWx9PC9UYWJsZUhlYWRlcj5cbiAgICAgICkpfVxuICAgICAgdGFibGVSb3dzPXtbXG4gICAgICAgIC4uLnN1YmZvbGRlcnMubWFwKChzdWJmb2xkZXIsIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBpdGVtS2V5LCByZWxhdGlvblRvLCB2YWx1ZSB9ID0gc3ViZm9sZGVyXG4gICAgICAgICAgY29uc3Qgc3ViZm9sZGVySUQgPSBleHRyYWN0SUQodmFsdWUpXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERyYWdnYWJsZVRhYmxlUm93XG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnMubWFwKCh7IG5hbWUgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbFZhbHVlOiBSZWFjdC5SZWFjdE5vZGUgPSAn4oCUJ1xuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnbmFtZScgJiYgdmFsdWUuX2ZvbGRlck9yRG9jdW1lbnRUaXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSB2YWx1ZS5fZm9sZGVyT3JEb2N1bWVudFRpdGxlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChuYW1lID09PSAnY3JlYXRlZEF0JyB8fCBuYW1lID09PSAndXBkYXRlZEF0JykgJiYgdmFsdWVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSA9IGZvcm1hdERhdGUoe1xuICAgICAgICAgICAgICAgICAgICBkYXRlOiB2YWx1ZVtuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogY29uZmlnLmFkbWluLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAndHlwZScpIHtcbiAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSA9IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVsYXRpb25Ub01hcFtyZWxhdGlvblRvXT8uc2luZ3VsYXIgfHwgcmVsYXRpb25Ub31cbiAgICAgICAgICAgICAgICAgICAgICB7QXJyYXkuaXNBcnJheShzdWJmb2xkZXIudmFsdWU/LmZvbGRlclR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN1YmZvbGRlci52YWx1ZT8uZm9sZGVyVHlwZS5yZWR1Y2UoKGFjYywgc2x1ZywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgIOKAlCAke3JlbGF0aW9uVG9NYXBbc2x1Z10/LnBsdXJhbCB8fCBzbHVnfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2FjY30sICR7cmVsYXRpb25Ub01hcFtzbHVnXT8ucGx1cmFsIHx8IHNsdWd9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NlbGwtd2l0aC1pY29uYH0ga2V5PXtgJHtpdGVtS2V5fS0ke25hbWV9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgPENvbG9yZWRGb2xkZXJJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgICAge2NlbGxWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NoZWNrSWZJdGVtSXNEaXNhYmxlZChzdWJmb2xkZXIpfVxuICAgICAgICAgICAgICBkcmFnRGF0YT17e1xuICAgICAgICAgICAgICAgIGlkOiBzdWJmb2xkZXJJRCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZm9sZGVyJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgaWQ9e3N1YmZvbGRlcklEfVxuICAgICAgICAgICAgICBpc0Ryb3BwYWJsZVxuICAgICAgICAgICAgICBpc0ZvY3VzZWQ9e2ZvY3VzZWRSb3dJbmRleCA9PT0gcm93SW5kZXh9XG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkSXRlbUtleXMuaGFzKGl0ZW1LZXkpfVxuICAgICAgICAgICAgICBpc1NlbGVjdGluZz17c2VsZWN0ZWRJdGVtS2V5cy5zaXplID4gMH1cbiAgICAgICAgICAgICAgaXRlbUtleT17aXRlbUtleX1cbiAgICAgICAgICAgICAga2V5PXtgJHtyb3dJbmRleH0tJHtpdGVtS2V5fWB9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHZvaWQgb25JdGVtQ2xpY2soe1xuICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICBpdGVtOiBzdWJmb2xkZXIsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB2b2lkIG9uSXRlbUtleVByZXNzKHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgaXRlbTogc3ViZm9sZGVyLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSksXG5cbiAgICAgICAgLi4uZG9jdW1lbnRzLm1hcCgoZG9jdW1lbnQsIHVuYWRqdXN0ZWRJbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgaXRlbUtleSwgcmVsYXRpb25UbywgdmFsdWUgfSA9IGRvY3VtZW50XG4gICAgICAgICAgY29uc3QgZG9jdW1lbnRJRCA9IGV4dHJhY3RJRCh2YWx1ZSlcbiAgICAgICAgICBjb25zdCByb3dJbmRleCA9IHVuYWRqdXN0ZWRJbmRleCArIHN1YmZvbGRlcnMubGVuZ3RoXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERyYWdnYWJsZVRhYmxlUm93XG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnMubWFwKCh7IG5hbWUgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbFZhbHVlOiBSZWFjdC5SZWFjdE5vZGUgPSAn4oCUJ1xuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnbmFtZScgJiYgdmFsdWUuX2ZvbGRlck9yRG9jdW1lbnRUaXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSB2YWx1ZS5fZm9sZGVyT3JEb2N1bWVudFRpdGxlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChuYW1lID09PSAnY3JlYXRlZEF0JyB8fCBuYW1lID09PSAndXBkYXRlZEF0JykgJiYgdmFsdWVbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSA9IGZvcm1hdERhdGUoe1xuICAgICAgICAgICAgICAgICAgICBkYXRlOiB2YWx1ZVtuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogY29uZmlnLmFkbWluLmRhdGVGb3JtYXQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAndHlwZScpIHtcbiAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSA9IHJlbGF0aW9uVG9NYXBbcmVsYXRpb25Ub10/LnNpbmd1bGFyIHx8IHJlbGF0aW9uVG9cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY2VsbC13aXRoLWljb25gfSBrZXk9e2Ake2l0ZW1LZXl9LSR7bmFtZX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICA8RG9jdW1lbnRJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgICAge2NlbGxWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NoZWNrSWZJdGVtSXNEaXNhYmxlZChkb2N1bWVudCl9XG4gICAgICAgICAgICAgIGRyYWdEYXRhPXt7XG4gICAgICAgICAgICAgICAgaWQ6IGRvY3VtZW50SUQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgaWQ9e2RvY3VtZW50SUR9XG4gICAgICAgICAgICAgIGlzRm9jdXNlZD17Zm9jdXNlZFJvd0luZGV4ID09PSByb3dJbmRleH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRJdGVtS2V5cy5oYXMoaXRlbUtleSl9XG4gICAgICAgICAgICAgIGlzU2VsZWN0aW5nPXtzZWxlY3RlZEl0ZW1LZXlzLnNpemUgPiAwfVxuICAgICAgICAgICAgICBpdGVtS2V5PXtpdGVtS2V5fVxuICAgICAgICAgICAgICBrZXk9e2Ake3Jvd0luZGV4fS0ke2l0ZW1LZXl9YH1cbiAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCBvbkl0ZW1DbGljayh7XG4gICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgIGl0ZW06IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCBvbkl0ZW1LZXlQcmVzcyh7XG4gICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgIGl0ZW06IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSksXG4gICAgICBdfVxuICAgIC8+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBjb25zdCBEb2N1bWVudEljb24gPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgY2xhc3NOYW1lPVwiaWNvbiBpY29uLS1kb2N1bWVudFwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgIHdpZHRoPVwiMTZcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgPHBhdGhcbiAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgZD1cIk0zLjUgMUMyLjk0NzcyIDEgMi41IDEuNDQ3NzIgMi41IDJWMTRDMi41IDE0LjU1MjMgMi45NDc3MSAxNSAzLjUgMTVIMTIuNUMxMy4wNTIzIDE1IDEzLjUgMTQuNTUyMyAxMy41IDE0VjQuNDE0MjFDMTMuNSA0LjE0OSAxMy4zOTQ2IDMuODk0NjQgMTMuMjA3MSAzLjcwNzExTDEwLjc5MjkgMS4yOTI4OUMxMC42MDU0IDEuMTA1MzYgMTAuMzUxIDEgMTAuMDg1OCAxSDMuNVpNNSA1LjVDNSA1LjIyMzg2IDUuMjIzODYgNSA1LjUgNUgxMC41QzEwLjc3NjEgNSAxMSA1LjIyMzg2IDExIDUuNUMxMSA1Ljc3NjE0IDEwLjc3NjEgNiAxMC41IDZINS41QzUuMjIzODYgNiA1IDUuNzc2MTQgNSA1LjVaTTUgOC41QzUgOC4yMjM4NiA1LjIyMzg2IDggNS41IDhIMTAuNUMxMC43NzYxIDggMTEgOC4yMjM4NiAxMSA4LjVDMTEgOC43NzYxNCAxMC43NzYxIDkgMTAuNSA5SDUuNUM1LjIyMzg2IDkgNSA4Ljc3NjE0IDUgOC41Wk01IDExLjVDNSAxMS4yMjM5IDUuMjIzODYgMTEgNS41IDExSDEwLjVDMTAuNzc2MSAxMSAxMSAxMS4yMjM5IDExIDExLjVDMTEgMTEuNzc2MSAxMC43NzYxIDEyIDEwLjUgMTJINS41QzUuMjIzODYgMTIgNSAxMS43NzYxIDUgMTEuNVpcIlxuICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgRHJhZ2dhYmxlV2l0aENsaWNrIH0gZnJvbSAnLi4vRHJhZ2dhYmxlV2l0aENsaWNrL2luZGV4LmpzJ1xuaW1wb3J0IHsgSGlkZGVuQ2VsbCwgVGFibGVDZWxsIH0gZnJvbSAnLi4vU2ltcGxlVGFibGUvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RyYWdnYWJsZS10YWJsZS1yb3cnXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjb2x1bW5zOiBSZWFjdC5SZWFjdE5vZGVbXVxuICByZWFkb25seSBkaXNhYmxlZD86IGJvb2xlYW5cbiAgcmVhZG9ubHkgZHJhZ0RhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICByZWFkb25seSBpZDogbnVtYmVyIHwgc3RyaW5nXG4gIHJlYWRvbmx5IGlzRHJvcHBhYmxlPzogYm9vbGVhblxuICByZWFkb25seSBpc0ZvY3VzZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IGlzU2VsZWN0ZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IGlzU2VsZWN0aW5nPzogYm9vbGVhblxuICByZWFkb25seSBpdGVtS2V5OiBzdHJpbmdcbiAgcmVhZG9ubHkgb25DbGljaz86IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkXG4gIHJlYWRvbmx5IG9uS2V5RG93bj86IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50KSA9PiB2b2lkXG59XG5leHBvcnQgZnVuY3Rpb24gRHJhZ2dhYmxlVGFibGVSb3coe1xuICBpZCxcbiAgY29sdW1ucyxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZHJhZ0RhdGEsXG4gIGlzRHJvcHBhYmxlOiBfaXNEcm9wcGFibGUsXG4gIGlzRm9jdXNlZCxcbiAgaXNTZWxlY3RlZCxcbiAgaXNTZWxlY3RpbmcsXG4gIGl0ZW1LZXksXG4gIG9uQ2xpY2ssXG4gIG9uS2V5RG93bixcbn06IFByb3BzKSB7XG4gIGNvbnN0IGlzRHJvcHBhYmxlID0gIWRpc2FibGVkICYmIF9pc0Ryb3BwYWJsZSAmJiAhaXNTZWxlY3RlZFxuICBjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZCxcbiAgICBkYXRhOiBkcmFnRGF0YSxcbiAgICBkaXNhYmxlZDogIWlzRHJvcHBhYmxlLFxuICB9KVxuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbClcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvcHlPZlJlZiA9IHJlZi5jdXJyZW50XG4gICAgaWYgKGlzRm9jdXNlZCAmJiByZWYuY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgIH0gZWxzZSBpZiAoIWlzRm9jdXNlZCAmJiByZWYuY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuYmx1cigpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjb3B5T2ZSZWYpIHtcbiAgICAgICAgY29weU9mUmVmLmJsdXIoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzRm9jdXNlZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8RHJhZ2dhYmxlV2l0aENsaWNrXG4gICAgICBhcz1cInRyXCJcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBiYXNlQ2xhc3MsXG4gICAgICAgIGlzU2VsZWN0ZWQgJiYgYCR7YmFzZUNsYXNzfS0tc2VsZWN0ZWRgLFxuICAgICAgICBpc1NlbGVjdGluZyAmJiBgJHtiYXNlQ2xhc3N9LS1zZWxlY3RpbmdgLFxuICAgICAgICBkaXNhYmxlZCAmJiBgJHtiYXNlQ2xhc3N9LS1kaXNhYmxlZGAsXG4gICAgICAgIGlzRm9jdXNlZCAmJiBgJHtiYXNlQ2xhc3N9LS1mb2N1c2VkYCxcbiAgICAgICAgaXNPdmVyICYmIGAke2Jhc2VDbGFzc30tLW92ZXJgLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBrZXk9e2l0ZW1LZXl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbCwgaSkgPT4gKFxuICAgICAgICA8VGFibGVDZWxsXG4gICAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19jZWxsLWNvbnRlbnRgLFxuICAgICAgICAgICAgaSA9PT0gMCAmJiBgJHtiYXNlQ2xhc3N9X19maXJzdC10ZGAsXG4gICAgICAgICAgICBpID09PSBjb2x1bW5zLmxlbmd0aCAtIDEgJiYgYCR7YmFzZUNsYXNzfV9fbGFzdC10ZGAsXG4gICAgICAgICAgXVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgICBrZXk9e2Ake2l0ZW1LZXl9LSR7aX1gfVxuICAgICAgICA+XG4gICAgICAgICAge2NvbH1cbiAgICAgICAgPC9UYWJsZUNlbGw+XG4gICAgICApKX1cblxuICAgICAge2lzRHJvcHBhYmxlID8gKFxuICAgICAgICA8SGlkZGVuQ2VsbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJvcC1hcmVhYH0gcmVmPXtzZXROb2RlUmVmfSAvPlxuICAgICAgICA8L0hpZGRlbkNlbGw+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0RyYWdnYWJsZVdpdGhDbGljaz5cbiAgKVxufVxuIiwiaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBSZWFjdCwgeyB1c2VJZCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZHJhZ2dhYmxlLXdpdGgtY2xpY2snXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGFzPzogUmVhY3QuRWxlbWVudFR5cGVcbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHJlYWRvbmx5IGRpc2FibGVkPzogYm9vbGVhblxuICByZWFkb25seSBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSBvbktleURvd24/OiAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSByZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+XG4gIHJlYWRvbmx5IHRocmVzaG9sZFBpeGVscz86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlV2l0aENsaWNrID0gKHtcbiAgYXMgPSAnZGl2JyxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb25DbGljayxcbiAgb25LZXlEb3duLFxuICByZWYsXG4gIHRocmVzaG9sZFBpeGVscyA9IDMsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCBpZCA9IHVzZUlkKClcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYgfSA9IHVzZURyYWdnYWJsZSh7IGlkLCBkaXNhYmxlZCB9KVxuICBjb25zdCBpbml0aWFsUG9zID0gdXNlUmVmKHsgeDogMCwgeTogMCB9KVxuICBjb25zdCBpc0RyYWdnaW5nID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGUpID0+IHtcbiAgICBpbml0aWFsUG9zLmN1cnJlbnQgPSB7IHg6IGUuY2xpZW50WCwgeTogZS5jbGllbnRZIH1cbiAgICBpc0RyYWdnaW5nLmN1cnJlbnQgPSBmYWxzZVxuXG4gICAgY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAobW92ZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkZWx0YVggPSBNYXRoLmFicyhtb3ZlRXZlbnQuY2xpZW50WCAtIGluaXRpYWxQb3MuY3VycmVudC54KVxuICAgICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMobW92ZUV2ZW50LmNsaWVudFkgLSBpbml0aWFsUG9zLmN1cnJlbnQueSlcbiAgICAgIGlmIChkZWx0YVggPiB0aHJlc2hvbGRQaXhlbHMgfHwgZGVsdGFZID4gdGhyZXNob2xkUGl4ZWxzKSB7XG4gICAgICAgIGlzRHJhZ2dpbmcuY3VycmVudCA9IHRydWVcbiAgICAgICAgaWYgKGxpc3RlbmVycz8ub25Qb2ludGVyRG93bikge1xuICAgICAgICAgIGxpc3RlbmVycy5vblBvaW50ZXJEb3duKGUpXG4gICAgICAgICAgLy8gd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmdcbiAgICAgICAgICAvLyAtIGNhbGwgdGhlIGNsaWNrIGhhbmRsZXJcbiAgICAgICAgICAvLyAtIHJlbW92ZSB0aGUgcG9pbnRlcm1vdmUgbGlzdGVuZXJcbiAgICAgICAgICBvbkNsaWNrKG1vdmVFdmVudClcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBoYW5kbGVQb2ludGVyTW92ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgaGFuZGxlUG9pbnRlck1vdmUpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgaGFuZGxlUG9pbnRlclVwKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9ICh1cEV2ZW50KSA9PiB7XG4gICAgICBjbGVhbnVwKClcbiAgICAgIGlmICghaXNEcmFnZ2luZy5jdXJyZW50KSB7XG4gICAgICAgIC8vIGlmIHRoZSB1c2VyIGRpZCBub3QgZHJhZyB0aGUgZWxlbWVudFxuICAgICAgICAvLyAtIGNhbGwgdGhlIGNsaWNrIGhhbmRsZXJcbiAgICAgICAgb25DbGljayh1cEV2ZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIGhhbmRsZVBvaW50ZXJNb3ZlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBoYW5kbGVQb2ludGVyVXApXG4gIH1cblxuICBjb25zdCBDb21wb25lbnQgPSBhcyB8fCAnZGl2J1xuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICB0YWJJbmRleD17MH1cbiAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWUsIGRpc2FibGVkID8gYCR7YmFzZUNsYXNzfS0tZGlzYWJsZWRgIDogJyddXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgIG9uS2V5RG93bj17ZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBvbktleURvd259XG4gICAgICBvblBvaW50ZXJEb3duPXtkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IG9uQ2xpY2sgPyBoYW5kbGVQb2ludGVyRG93biA6IHVuZGVmaW5lZH1cbiAgICAgIHJlZj17KG5vZGUpID0+IHtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2V0Tm9kZVJlZihub2RlKVxuICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgcmVmLmN1cnJlbnQgPSBub2RlXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3NpbXBsZS10YWJsZSdcblxudHlwZSBUYWJsZVByb3BzID0ge1xuICByZWFkb25seSBhcHBlYXJhbmNlPzogJ2NvbmRlbnNlZCcgfCAnZGVmYXVsdCdcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHJlYWRvbmx5IGhlYWRlckNlbGxzOiBSZWFjdC5SZWFjdE5vZGVbXVxuICByZWFkb25seSB0YWJsZVJvd3M6IFJlYWN0LlJlYWN0Tm9kZVtdXG59XG5leHBvcnQgY29uc3QgU2ltcGxlVGFibGUgPSAoe1xuICBhcHBlYXJhbmNlLFxuICBjbGFzc05hbWUsXG4gIGhlYWRlckNlbGxzOiBoZWFkZXJzLFxuICB0YWJsZVJvd3M6IHJvd3MsXG59OiBUYWJsZVByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbY2xhc3NOYW1lLCBiYXNlQ2xhc3MsIGFwcGVhcmFuY2UgJiYgYCR7YmFzZUNsYXNzfS0tYXBwZWFyYW5jZS0ke2FwcGVhcmFuY2V9YF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgID5cbiAgICAgIDx0YWJsZSBjZWxsUGFkZGluZz17MH0gY2VsbFNwYWNpbmc9ezB9IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGFibGVgfT5cbiAgICAgICAgPFRhYmxlSGVhZD5cbiAgICAgICAgICA8VGFibGVSb3c+e2hlYWRlcnN9PC9UYWJsZVJvdz5cbiAgICAgICAgPC9UYWJsZUhlYWQ+XG5cbiAgICAgICAgPFRhYmxlQm9keT57cm93c308L1RhYmxlQm9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFRhYmxlSGVhZCA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIC4uLnJlc3Rcbn06IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PikgPT4ge1xuICByZXR1cm4gKFxuICAgIDx0aGVhZCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RoZWFkICR7Y2xhc3NOYW1lIHx8ICcnfWAudHJpbSgpfSB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC90aGVhZD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgVGFibGVCb2R5ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgLi4ucmVzdFxufTogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHRib2R5IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGJvZHkgJHtjbGFzc05hbWUgfHwgJyd9YC50cmltKCl9IHsuLi5yZXN0fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3Rib2R5PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBUYWJsZVJvdyA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIC4uLnJlc3Rcbn06IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVJvd0VsZW1lbnQ+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHRyIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdHIgJHtjbGFzc05hbWUgfHwgJyd9YC50cmltKCl9IHsuLi5yZXN0fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3RyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBUYWJsZUNlbGwgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICAuLi5yZXN0XG59OiBSZWFjdC5UZEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PikgPT4ge1xuICByZXR1cm4gKFxuICAgIDx0ZCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RkICR7Y2xhc3NOYW1lIHx8ICcnfWAudHJpbSgpfSB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC90ZD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgVGFibGVIZWFkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICAuLi5yZXN0XG59OiBSZWFjdC5UaEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNlbGxFbGVtZW50PikgPT4ge1xuICByZXR1cm4gKFxuICAgIDx0aCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RoICR7Y2xhc3NOYW1lIHx8ICcnfWAudHJpbSgpfSB7Li4ucmVzdH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC90aD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgSGlkZGVuQ2VsbCA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIC4uLnJlc3Rcbn06IHsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGUgfSAmIFJlYWN0LlRkSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHRkIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faGlkZGVuLWNlbGwgJHtjbGFzc05hbWUgfHwgJyd9YC50cmltKCl9IHsuLi5yZXN0fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3RkPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBGb2xkZXJPckRvY3VtZW50IH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQ29udGV4dEZvbGRlckZpbGVDYXJkIH0gZnJvbSAnLi4vRm9sZGVyRmlsZUNhcmQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2l0ZW0tY2FyZC1ncmlkJ1xuXG50eXBlIEl0ZW1DYXJkR3JpZFByb3BzID0ge1xuICBpdGVtczogRm9sZGVyT3JEb2N1bWVudFtdXG4gIHRpdGxlPzogc3RyaW5nXG59ICYgKFxuICB8IHtcbiAgICAgIHN1YmZvbGRlckNvdW50OiBudW1iZXJcbiAgICAgIHR5cGU6ICdmaWxlJ1xuICAgIH1cbiAgfCB7XG4gICAgICBzdWJmb2xkZXJDb3VudD86IG5ldmVyXG4gICAgICB0eXBlOiAnZm9sZGVyJ1xuICAgIH1cbilcbmV4cG9ydCBmdW5jdGlvbiBJdGVtQ2FyZEdyaWQoeyB0eXBlLCBpdGVtcywgc3ViZm9sZGVyQ291bnQsIHRpdGxlIH06IEl0ZW1DYXJkR3JpZFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt0aXRsZSAmJiA8cCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RpdGxlYH0+e3RpdGxlfTwvcD59XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgICAgeyFpdGVtcyB8fCBpdGVtcz8ubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBpdGVtcy5tYXAoKGl0ZW0sIF9pbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IF9pbmRleCArIChzdWJmb2xkZXJDb3VudCB8fCAwKVxuICAgICAgICAgICAgICBjb25zdCB7IGl0ZW1LZXkgfSA9IGl0ZW1cblxuICAgICAgICAgICAgICByZXR1cm4gPENvbnRleHRGb2xkZXJGaWxlQ2FyZCBpbmRleD17aW5kZXh9IGl0ZW09e2l0ZW19IGtleT17aXRlbUtleX0gdHlwZT17dHlwZX0gLz5cbiAgICAgICAgICAgIH0pfVxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IEZvbGRlck9yRG9jdW1lbnQgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBEb2N1bWVudEljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9Eb2N1bWVudC9pbmRleC5qcydcbmltcG9ydCB7IFRocmVlRG90c0ljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9UaHJlZURvdHMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRm9sZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0ZvbGRlcnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSAnLi4vLi4vUG9wdXAvaW5kZXguanMnXG5pbXBvcnQgeyBUaHVtYm5haWwgfSBmcm9tICcuLi8uLi9UaHVtYm5haWwvaW5kZXguanMnXG5pbXBvcnQgeyBDb2xvcmVkRm9sZGVySWNvbiB9IGZyb20gJy4uL0NvbG9yZWRGb2xkZXJJY29uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlV2l0aENsaWNrIH0gZnJvbSAnLi4vRHJhZ2dhYmxlV2l0aENsaWNrL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdmb2xkZXItZmlsZS1jYXJkJ1xuXG50eXBlIFByb3BzID0ge1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmdcbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiBib29sZWFuXG4gIHJlYWRvbmx5IGZvbGRlclR5cGU/OiBzdHJpbmdbXVxuICByZWFkb25seSBpZDogbnVtYmVyIHwgc3RyaW5nXG4gIHJlYWRvbmx5IGlzRGVsZXRpbmc/OiBib29sZWFuXG4gIHJlYWRvbmx5IGlzRm9jdXNlZD86IGJvb2xlYW5cbiAgcmVhZG9ubHkgaXNTZWxlY3RlZD86IGJvb2xlYW5cbiAgcmVhZG9ubHkgaXRlbUtleTogc3RyaW5nXG4gIHJlYWRvbmx5IG9uQ2xpY2s/OiAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSBvbktleURvd24/OiAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSBQb3B1cEFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGVcbiAgcmVhZG9ubHkgcHJldmlld1VybD86IHN0cmluZ1xuICByZWFkb25seSBzZWxlY3RlZENvdW50PzogbnVtYmVyXG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmdcbiAgcmVhZG9ubHkgdHlwZTogJ2ZpbGUnIHwgJ2ZvbGRlcidcbn1cbmV4cG9ydCBmdW5jdGlvbiBGb2xkZXJGaWxlQ2FyZCh7XG4gIGlkLFxuICB0eXBlLFxuICBjbGFzc05hbWUgPSAnJyxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZm9sZGVyVHlwZSxcbiAgaXNEZWxldGluZyA9IGZhbHNlLFxuICBpc0ZvY3VzZWQgPSBmYWxzZSxcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBpdGVtS2V5LFxuICBvbkNsaWNrLFxuICBvbktleURvd24sXG4gIFBvcHVwQWN0aW9ucyxcbiAgcHJldmlld1VybCxcbiAgc2VsZWN0ZWRDb3VudCA9IDAsXG4gIHRpdGxlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgZGlzYWJsZURyb3AgPSAhaWQgfHwgZGlzYWJsZWQgfHwgdHlwZSAhPT0gJ2ZvbGRlcidcbiAgY29uc3QgeyBpc092ZXIsIHNldE5vZGVSZWYgfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQ6IGl0ZW1LZXksXG4gICAgZGF0YToge1xuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgZm9sZGVyVHlwZSxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJvcCxcbiAgfSlcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb3B5T2ZSZWYgPSByZWYuY3VycmVudFxuICAgIGlmIChpc0ZvY3VzZWQgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlZi5jdXJyZW50LmZvY3VzKClcbiAgICB9IGVsc2UgaWYgKCFpc0ZvY3VzZWQgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlZi5jdXJyZW50LmJsdXIoKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoY29weU9mUmVmKSB7XG4gICAgICAgIGNvcHlPZlJlZi5ibHVyKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc0ZvY3VzZWRdKVxuXG4gIHJldHVybiAoXG4gICAgPERyYWdnYWJsZVdpdGhDbGlja1xuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBpc1NlbGVjdGVkICYmIGAke2Jhc2VDbGFzc30tLXNlbGVjdGVkYCxcbiAgICAgICAgZGlzYWJsZWQgJiYgYCR7YmFzZUNsYXNzfS0tZGlzYWJsZWRgLFxuICAgICAgICBpc0RlbGV0aW5nICYmIGAke2Jhc2VDbGFzc30tLWRlbGV0aW5nYCxcbiAgICAgICAgaXNGb2N1c2VkICYmIGAke2Jhc2VDbGFzc30tLWZvY3VzZWRgLFxuICAgICAgICBpc092ZXIgJiYgYCR7YmFzZUNsYXNzfS0tb3ZlcmAsXG4gICAgICAgIGAke2Jhc2VDbGFzc30tLSR7dHlwZX1gLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgKCFvbkNsaWNrICYmICFvbktleURvd24pfVxuICAgICAga2V5PXtpdGVtS2V5fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAgeyFkaXNhYmxlRHJvcCA/IDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcm9wLWFyZWFgfSByZWY9e3NldE5vZGVSZWZ9IC8+IDogbnVsbH1cblxuICAgICAge3R5cGUgPT09ICdmaWxlJyA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3ByZXZpZXctYXJlYWB9PlxuICAgICAgICAgIHtwcmV2aWV3VXJsID8gPFRodW1ibmFpbCBmaWxlU3JjPXtwcmV2aWV3VXJsfSAvPiA6IDxEb2N1bWVudEljb24gLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IG51bGx9XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190aXRsZWJhci1hcmVhYH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pY29uLXdyYXBgfT5cbiAgICAgICAgICB7dHlwZSA9PT0gJ2ZpbGUnID8gPERvY3VtZW50SWNvbiAvPiA6IDxDb2xvcmVkRm9sZGVySWNvbiAvPn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190aXRsZWJhci1sYWJlbHNgfT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX25hbWVgfSB0aXRsZT17dGl0bGV9PlxuICAgICAgICAgICAgPHNwYW4+e3RpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAge2ZvbGRlclR5cGUgJiYgZm9sZGVyVHlwZS5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgPEFzc2lnbmVkQ29sbGVjdGlvbnMgZm9sZGVyVHlwZT17Zm9sZGVyVHlwZX0gLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtQb3B1cEFjdGlvbnMgPyAoXG4gICAgICAgICAgPFBvcHVwXG4gICAgICAgICAgICBidXR0b249ezxUaHJlZURvdHNJY29uIC8+fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQ291bnQgPiAxIHx8IChzZWxlY3RlZENvdW50ID09PSAxICYmICFpc1NlbGVjdGVkKX1cbiAgICAgICAgICAgIGhvcml6b250YWxBbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduPVwiYm90dG9tXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7UG9wdXBBY3Rpb25zfVxuICAgICAgICAgIDwvUG9wdXA+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9EcmFnZ2FibGVXaXRoQ2xpY2s+XG4gIClcbn1cblxuZnVuY3Rpb24gQXNzaWduZWRDb2xsZWN0aW9ucyh7IGZvbGRlclR5cGUgfTogeyBmb2xkZXJUeXBlOiBzdHJpbmdbXSB9KSB7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBjb2xsZWN0aW9uc0Rpc3BsYXlUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZvbGRlclR5cGUucmVkdWNlKChhY2MsIGNvbGxlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25Db25maWcgPSBjb25maWcuY29sbGVjdGlvbnM/LmZpbmQoKGMpID0+IGMuc2x1ZyA9PT0gY29sbGVjdGlvbilcbiAgICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnKSB7XG4gICAgICAgIHJldHVybiBbLi4uYWNjLCBnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5wbHVyYWwsIGkxOG4pXVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIFtdKVxuICB9LCBbZm9sZGVyVHlwZSwgY29uZmlnLmNvbGxlY3Rpb25zLCBpMThuXSlcblxuICByZXR1cm4gKFxuICAgIDxwIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYXNzaWduZWQtY29sbGVjdGlvbnNgfT5cbiAgICAgIHtjb2xsZWN0aW9uc0Rpc3BsYXlUZXh0Lm1hcCgobGFiZWwsIGluZGV4KSA9PiAoXG4gICAgICAgIDxzcGFuIGtleT17bGFiZWx9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICB7aW5kZXggPCBmb2xkZXJUeXBlLmxlbmd0aCAtIDEgPyAnLCAnIDogJyd9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkpfVxuICAgIDwvcD5cbiAgKVxufVxuXG50eXBlIENvbnRleHRDYXJkUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZ1xuICByZWFkb25seSBpbmRleDogbnVtYmVyIC8vIHRvZG86IHBvc3NpYmx5IHJlbW92ZVxuICByZWFkb25seSBpdGVtOiBGb2xkZXJPckRvY3VtZW50XG4gIHJlYWRvbmx5IHR5cGU6ICdmaWxlJyB8ICdmb2xkZXInXG59XG5leHBvcnQgZnVuY3Rpb24gQ29udGV4dEZvbGRlckZpbGVDYXJkKHsgdHlwZSwgY2xhc3NOYW1lLCBpbmRleCwgaXRlbSB9OiBDb250ZXh0Q2FyZFByb3BzKSB7XG4gIGNvbnN0IHsgY2hlY2tJZkl0ZW1Jc0Rpc2FibGVkLCBmb2N1c2VkUm93SW5kZXgsIG9uSXRlbUNsaWNrLCBvbkl0ZW1LZXlQcmVzcywgc2VsZWN0ZWRJdGVtS2V5cyB9ID1cbiAgICB1c2VGb2xkZXIoKVxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRJdGVtS2V5cy5oYXMoaXRlbS5pdGVtS2V5KVxuICBjb25zdCBpc0Rpc2FibGVkID0gY2hlY2tJZkl0ZW1Jc0Rpc2FibGVkKGl0ZW0pXG5cbiAgcmV0dXJuIChcbiAgICA8Rm9sZGVyRmlsZUNhcmRcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBmb2xkZXJUeXBlPXtpdGVtLnZhbHVlLmZvbGRlclR5cGUgfHwgW119XG4gICAgICBpZD17aXRlbS52YWx1ZS5pZH1cbiAgICAgIGlzRm9jdXNlZD17Zm9jdXNlZFJvd0luZGV4ID09PSBpbmRleH1cbiAgICAgIGlzU2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBpdGVtS2V5PXtpdGVtLml0ZW1LZXl9XG4gICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgdm9pZCBvbkl0ZW1DbGljayh7IGV2ZW50LCBpbmRleCwgaXRlbSB9KVxuICAgICAgfX1cbiAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgIHZvaWQgb25JdGVtS2V5UHJlc3MoeyBldmVudCwgaW5kZXgsIGl0ZW0gfSlcbiAgICAgIH19XG4gICAgICBwcmV2aWV3VXJsPXtpdGVtLnZhbHVlLnVybH1cbiAgICAgIHRpdGxlPXtpdGVtLnZhbHVlLl9mb2xkZXJPckRvY3VtZW50VGl0bGV9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgIC8+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmV4cG9ydCBmdW5jdGlvbiBUaHJlZURvdHNJY29uKHsgY2xhc3NOYW1lID0gJycgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgaWNvbiBpY29uLS1kb3RzICR7Y2xhc3NOYW1lfWAudHJpbSgpfT5cbiAgICAgIDxkaXYgLz5cbiAgICAgIDxkaXYgLz5cbiAgICAgIDxkaXYgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50VGl0bGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRUaXRsZS9pbmRleC5qcydcbmltcG9ydCB7IElETGFiZWwgfSBmcm9tICcuLi9JRExhYmVsL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdyZW5kZXItdGl0bGUnXG5cbmV4cG9ydCB0eXBlIFJlbmRlclRpdGxlUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBlbGVtZW50PzogUmVhY3QuRWxlbWVudFR5cGVcbiAgZmFsbGJhY2s/OiBzdHJpbmdcbiAgZmFsbGJhY2tUb0lEPzogYm9vbGVhblxuICB0aXRsZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVuZGVyVGl0bGU6IFJlYWN0LkZDPFJlbmRlclRpdGxlUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NOYW1lLCBlbGVtZW50ID0gJ2gxJywgZmFsbGJhY2ssIHRpdGxlOiB0aXRsZUZyb21Qcm9wcyB9ID0gcHJvcHNcblxuICBjb25zdCB7IGlkLCBpc0luaXRpYWxpemluZyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgeyB0aXRsZTogdGl0bGVGcm9tQ29udGV4dCB9ID0gdXNlRG9jdW1lbnRUaXRsZSgpXG5cbiAgY29uc3QgdGl0bGUgPSB0aXRsZUZyb21Qcm9wcyB8fCB0aXRsZUZyb21Db250ZXh0IHx8IGZhbGxiYWNrXG5cbiAgY29uc3QgaWRBc1RpdGxlID0gdGl0bGUgPT09IGlkXG5cbiAgY29uc3QgVGFnID0gZWxlbWVudFxuXG4gIC8vIFJlbmRlciBhbmQgaW52aXNpYmxlIGNoYXJhY3RlciB0byBwcmV2ZW50IGxheW91dCBzaGlmdCB3aGVuIHRoZSB0aXRsZSBwb3B1bGF0ZXMgZnJvbSBjb250ZXh0XG4gIGNvbnN0IEVtcHR5U3BhY2UgPSA8RnJhZ21lbnQ+Jm5ic3A7PC9GcmFnbWVudD5cblxuICByZXR1cm4gKFxuICAgIDxUYWdcbiAgICAgIGNsYXNzTmFtZT17W2NsYXNzTmFtZSwgYmFzZUNsYXNzLCBpZEFzVGl0bGUgJiYgYCR7YmFzZUNsYXNzfS0taGFzLWlkYF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgZGF0YS1kb2MtaWQ9e2lkfVxuICAgICAgdGl0bGU9e3RpdGxlfVxuICAgID5cbiAgICAgIHtpc0luaXRpYWxpemluZyA/IChcbiAgICAgICAgRW1wdHlTcGFjZVxuICAgICAgKSA6IChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgIHtpZEFzVGl0bGUgPyA8SURMYWJlbCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2lkYH0gaWQ9e2lkfSAvPiA6IHRpdGxlIHx8IEVtcHR5U3BhY2V9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApfVxuICAgIDwvVGFnPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTGluay9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvZm9ybWF0QWRtaW5VUkwuanMnXG5pbXBvcnQgeyBzYW5pdGl6ZUlEIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Nhbml0aXplSUQuanMnXG5pbXBvcnQgeyB1c2VEcmF3ZXJEZXB0aCB9IGZyb20gJy4uL0RyYXdlci9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2lkLWxhYmVsJ1xuXG5leHBvcnQgY29uc3QgSURMYWJlbDogUmVhY3QuRkM8eyBjbGFzc05hbWU/OiBzdHJpbmc7IGlkOiBzdHJpbmc7IHByZWZpeD86IHN0cmluZyB9PiA9ICh7XG4gIGlkLFxuICBjbGFzc05hbWUsXG4gIHByZWZpeCA9ICdJRDonLFxufSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUgfSxcbiAgICB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuICBjb25zdCBkcmF3ZXJEZXB0aCA9IHVzZURyYXdlckRlcHRoKClcblxuICBjb25zdCBkb2NQYXRoID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgIGFkbWluUm91dGUsXG4gICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnID8gYGNvbGxlY3Rpb25zLyR7Y29sbGVjdGlvblNsdWd9YCA6IGBnbG9iYWxzLyR7Z2xvYmFsU2x1Z31gfS8ke2lkfWAsXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfSB0aXRsZT17aWR9PlxuICAgICAge3ByZWZpeH1cbiAgICAgICZuYnNwO1xuICAgICAge2RyYXdlckRlcHRoID4gMSA/IDxMaW5rIGhyZWY9e2RvY1BhdGh9PntzYW5pdGl6ZUlEKGlkKX08L0xpbms+IDogc2FuaXRpemVJRChpZCl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUlEKGlkOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIgfCBzdHJpbmcge1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBpZFxuICB9XG5cbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoaWQpXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgU3RhdGljTGFiZWwgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEZpZWxkTGFiZWwgfSBmcm9tICcuLi8uLi9maWVsZHMvRmllbGRMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxpc3RRdWVyeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXN0UXVlcnkvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgdHlwZSBTb3J0Q29sdW1uUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGFwcGVhcmFuY2U/OiAnY29uZGVuc2VkJyB8ICdkZWZhdWx0J1xuICByZWFkb25seSBkaXNhYmxlPzogYm9vbGVhblxuICByZWFkb25seSBMYWJlbDogUmVhY3QuUmVhY3ROb2RlXG4gIHJlYWRvbmx5IGxhYmVsPzogU3RhdGljTGFiZWxcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG59XG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzb3J0LWNvbHVtbidcblxuZXhwb3J0IGNvbnN0IFNvcnRDb2x1bW46IFJlYWN0LkZDPFNvcnRDb2x1bW5Qcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBuYW1lLCBhcHBlYXJhbmNlLCBkaXNhYmxlID0gZmFsc2UsIExhYmVsLCBsYWJlbCB9ID0gcHJvcHNcbiAgY29uc3QgeyBoYW5kbGVTb3J0Q2hhbmdlLCBxdWVyeSB9ID0gdXNlTGlzdFF1ZXJ5KClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgeyBzb3J0IH0gPSBxdWVyeVxuXG4gIGNvbnN0IGRlc2MgPSBgLSR7bmFtZX1gXG4gIGNvbnN0IGFzYyA9IG5hbWVcblxuICBjb25zdCBhc2NDbGFzc2VzID0gW2Ake2Jhc2VDbGFzc31fX2FzY2BdXG4gIGlmIChzb3J0ID09PSBhc2MpIHtcbiAgICBhc2NDbGFzc2VzLnB1c2goYCR7YmFzZUNsYXNzfS0tYWN0aXZlYClcbiAgfVxuXG4gIGNvbnN0IGRlc2NDbGFzc2VzID0gW2Ake2Jhc2VDbGFzc31fX2Rlc2NgXVxuICBpZiAoc29ydCA9PT0gZGVzYykge1xuICAgIGRlc2NDbGFzc2VzLnB1c2goYCR7YmFzZUNsYXNzfS0tYWN0aXZlYClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBhcHBlYXJhbmNlICYmIGAke2Jhc2VDbGFzc30tLWFwcGVhcmFuY2UtJHthcHBlYXJhbmNlfWBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xhYmVsYH0+XG4gICAgICAgIHtMYWJlbCA/PyA8RmllbGRMYWJlbCBoaWRlTG9jYWxlIGxhYmVsPXtsYWJlbH0gdW5zdHlsZWQgLz59XG4gICAgICA8L3NwYW4+XG4gICAgICB7IWRpc2FibGUgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYnV0dG9uc2B9PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6c29ydEJ5TGFiZWxEaXJlY3Rpb24nLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGlvbjogdCgnZ2VuZXJhbDphc2NlbmRpbmcnKSxcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Wy4uLmFzY0NsYXNzZXMsIGAke2Jhc2VDbGFzc31fX2J1dHRvbmBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIGhhbmRsZVNvcnRDaGFuZ2UoYXNjKX1cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGV2cm9uSWNvbiBkaXJlY3Rpb249XCJ1cFwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDpzb3J0QnlMYWJlbERpcmVjdGlvbicsIHtcbiAgICAgICAgICAgICAgZGlyZWN0aW9uOiB0KCdnZW5lcmFsOmRlc2NlbmRpbmcnKSxcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Wy4uLmRlc2NDbGFzc2VzLCBgJHtiYXNlQ2xhc3N9X19idXR0b25gXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCBoYW5kbGVTb3J0Q2hhbmdlKGRlc2MpfVxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoZXZyb25JY29uIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IEkxOG5DbGllbnQgfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgdHlwZSB7IENsaWVudEJsb2NrLCBDbGllbnRXaWRnZXQsIExhYmVscyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB0b1dvcmRzIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBEZWZhdWx0QmxvY2tJbWFnZSB9IGZyb20gJy4uLy4uL2dyYXBoaWNzL0RlZmF1bHRCbG9ja0ltYWdlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhd2VyIH0gZnJvbSAnLi4vRHJhd2VyL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGh1bWJuYWlsQ2FyZCB9IGZyb20gJy4uL1RodW1ibmFpbENhcmQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IEl0ZW1TZWFyY2ggfSBmcm9tICcuL0l0ZW1TZWFyY2gvaW5kZXguanMnXG5cbmV4cG9ydCB0eXBlIERyYXdlckl0ZW0gPSBDbGllbnRCbG9jayB8IENsaWVudFdpZGdldFxuXG5leHBvcnQgdHlwZSBJdGVtc0RyYXdlclByb3BzID0ge1xuICByZWFkb25seSBhZGRSb3dJbmRleD86IG51bWJlclxuICByZWFkb25seSBkcmF3ZXJTbHVnOiBzdHJpbmdcbiAgcmVhZG9ubHkgaXRlbXM6IChEcmF3ZXJJdGVtIHwgc3RyaW5nKVtdXG4gIHJlYWRvbmx5IGxhYmVscz86IExhYmVsc1xuICByZWFkb25seSBvbkl0ZW1DbGljazogKGl0ZW06IERyYXdlckl0ZW0sIGluZGV4PzogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxuICByZWFkb25seSBzZWFyY2hQbGFjZWhvbGRlcj86IHN0cmluZ1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZ1xufVxuXG5jb25zdCBiYXNlQ2xhc3MgPSAnaXRlbXMtZHJhd2VyJ1xuXG5jb25zdCBnZXRJdGVtTGFiZWwgPSAoaXRlbTogRHJhd2VySXRlbSwgaTE4bjogSTE4bkNsaWVudCk6IHN0cmluZyA9PiB7XG4gIC8vIEhhbmRsZSBDbGllbnRCbG9ja1xuICBpZiAoJ2xhYmVscycgaW4gaXRlbSAmJiBpdGVtLmxhYmVscz8uc2luZ3VsYXIpIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0ubGFiZWxzLnNpbmd1bGFyID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGl0ZW0ubGFiZWxzLnNpbmd1bGFyLnRvTG93ZXJDYXNlKClcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpdGVtLmxhYmVscy5zaW5ndWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBnZXRUcmFuc2xhdGlvbihpdGVtLmxhYmVscy5zaW5ndWxhciwgaTE4bikudG9Mb3dlckNhc2UoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBDbGllbnRXaWRnZXQgd2l0aCBsYWJlbCAoYWxyZWFkeSByZXNvbHZlZCBmcm9tIGZ1bmN0aW9uIG9uIHNlcnZlcilcbiAgaWYgKCdsYWJlbCcgaW4gaXRlbSAmJiBpdGVtLmxhYmVsKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtLmxhYmVsID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGl0ZW0ubGFiZWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb24oaXRlbS5sYWJlbCwgaTE4bikudG9Mb3dlckNhc2UoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHNsdWdcbiAgaWYgKCdzbHVnJyBpbiBpdGVtKSB7XG4gICAgcmV0dXJuIHRvV29yZHMoaXRlbS5zbHVnKS50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gJydcbn1cblxuY29uc3QgZ2V0SXRlbVNsdWcgPSAoaXRlbTogRHJhd2VySXRlbSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBpdGVtLnNsdWdcbn1cblxuY29uc3QgZ2V0SXRlbUltYWdlSW5mbyA9IChpdGVtOiBEcmF3ZXJJdGVtKSA9PiB7XG4gIGlmICgnYWRtaW4nIGluIGl0ZW0gJiYgaXRlbT8uYWRtaW4/LmltYWdlcz8udGh1bWJuYWlsKSB7XG4gICAgY29uc3QgdGh1bWJuYWlsID0gaXRlbS5hZG1pbj8uaW1hZ2VzLnRodW1ibmFpbFxuICAgIHJldHVybiB7XG4gICAgICBpbWFnZUFsdFRleHQ6IHR5cGVvZiB0aHVtYm5haWwgPT09ICdzdHJpbmcnID8gdW5kZWZpbmVkIDogdGh1bWJuYWlsLmFsdCxcbiAgICAgIGltYWdlVVJMOiB0eXBlb2YgdGh1bWJuYWlsID09PSAnc3RyaW5nJyA/IHRodW1ibmFpbCA6IHRodW1ibmFpbC51cmwsXG4gICAgfVxuICB9XG4gIGlmICgnaW1hZ2VVUkwnIGluIGl0ZW0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VBbHRUZXh0OiBpdGVtLmltYWdlQWx0VGV4dCxcbiAgICAgIGltYWdlVVJMOiBpdGVtLmltYWdlVVJMLFxuICAgIH1cbiAgfVxuICByZXR1cm4geyBpbWFnZUFsdFRleHQ6IHVuZGVmaW5lZCwgaW1hZ2VVUkw6IHVuZGVmaW5lZCB9XG59XG5cbmNvbnN0IGdldEl0ZW1EaXNwbGF5TGFiZWwgPSAoaXRlbTogRHJhd2VySXRlbSwgaTE4bjogSTE4bkNsaWVudCk6IHN0cmluZyA9PiB7XG4gIC8vIEhhbmRsZSBDbGllbnRCbG9ja1xuICBpZiAoJ2xhYmVscycgaW4gaXRlbSAmJiBpdGVtLmxhYmVscz8uc2luZ3VsYXIpIHtcbiAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb24oaXRlbS5sYWJlbHMuc2luZ3VsYXIsIGkxOG4pXG4gIH1cblxuICAvLyBIYW5kbGUgQ2xpZW50V2lkZ2V0IHdpdGggbGFiZWwgKGFscmVhZHkgcmVzb2x2ZWQgZnJvbSBmdW5jdGlvbiBvbiBzZXJ2ZXIpXG4gIGlmICgnbGFiZWwnIGluIGl0ZW0gJiYgaXRlbS5sYWJlbCkge1xuICAgIGlmICh0eXBlb2YgaXRlbS5sYWJlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBpdGVtLmxhYmVsXG4gICAgfVxuICAgIGlmICh0eXBlb2YgaXRlbS5sYWJlbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBnZXRUcmFuc2xhdGlvbihpdGVtLmxhYmVsLCBpMThuKVxuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHNsdWcgLSBjb252ZXJ0IHRvIGh1bWFuLXJlYWRhYmxlIGxhYmVsXG4gIHJldHVybiB0b1dvcmRzKGl0ZW0uc2x1Zylcbn1cblxuZXhwb3J0IGNvbnN0IEl0ZW1zRHJhd2VyOiBSZWFjdC5GQzxJdGVtc0RyYXdlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGFkZFJvd0luZGV4LCBkcmF3ZXJTbHVnLCBpdGVtcywgbGFiZWxzLCBvbkl0ZW1DbGljaywgc2VhcmNoUGxhY2Vob2xkZXIsIHRpdGxlIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtzZWFyY2hUZXJtLCBzZXRTZWFyY2hUZXJtXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbZmlsdGVyZWRJdGVtcywgc2V0RmlsdGVyZWRJdGVtc10gPSB1c2VTdGF0ZShpdGVtcylcbiAgY29uc3QgeyBjbG9zZU1vZGFsLCBpc01vZGFsT3BlbiB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG5cbiAgY29uc3QgaXRlbUdyb3VwcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwczogUmVjb3JkPHN0cmluZywgKERyYXdlckl0ZW0gfCBzdHJpbmcpW10+ID0ge1xuICAgICAgX25vbmU6IFtdLFxuICAgIH1cbiAgICBmaWx0ZXJlZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgJ2FkbWluJyBpbiBpdGVtICYmIGl0ZW0uYWRtaW4/Lmdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gaXRlbS5hZG1pbi5ncm91cFxuICAgICAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBncm91cCA9PT0gJ3N0cmluZycgPyBncm91cCA6IGdldFRyYW5zbGF0aW9uKGdyb3VwLCBpMThuKVxuXG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGdyb3VwcywgbGFiZWwpKSB7XG4gICAgICAgICAgZ3JvdXBzW2xhYmVsXS5wdXNoKGl0ZW0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBzW2xhYmVsXSA9IFtpdGVtXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cHMuX25vbmUucHVzaChpdGVtKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGdyb3Vwc1xuICB9LCBbZmlsdGVyZWRJdGVtcywgaTE4bl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTW9kYWxPcGVuKGRyYXdlclNsdWcpKSB7XG4gICAgICBzZXRTZWFyY2hUZXJtKCcnKVxuICAgIH1cbiAgfSwgW2lzTW9kYWxPcGVuLCBkcmF3ZXJTbHVnXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFRlcm1Ub1VzZSA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKVxuXG4gICAgY29uc3QgbWF0Y2hpbmdJdGVtcyA9IGl0ZW1zPy5yZWR1Y2UoKG1hdGNoZWRJdGVtcywgX2l0ZW0pID0+IHtcbiAgICAgIGxldCBpdGVtOiBEcmF3ZXJJdGVtXG5cbiAgICAgIGlmICh0eXBlb2YgX2l0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhbmRsZSBzdHJpbmcgcmVmZXJlbmNlcyAoZm9yIGJsb2NrcylcbiAgICAgICAgaXRlbSA9IGNvbmZpZy5ibG9ja3NNYXA/LltfaXRlbV0gYXMgRHJhd2VySXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IF9pdGVtXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1MYWJlbCA9IGdldEl0ZW1MYWJlbChpdGVtLCBpMThuKVxuICAgICAgICBpZiAoaXRlbUxhYmVsLmluY2x1ZGVzKHNlYXJjaFRlcm1Ub1VzZSkpIHtcbiAgICAgICAgICBtYXRjaGVkSXRlbXMucHVzaChpdGVtKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2hlZEl0ZW1zXG4gICAgfSwgW10gYXMgRHJhd2VySXRlbVtdKVxuXG4gICAgc2V0RmlsdGVyZWRJdGVtcyhtYXRjaGluZ0l0ZW1zIHx8IFtdKVxuICB9LCBbc2VhcmNoVGVybSwgaXRlbXMsIGkxOG4sIGNvbmZpZy5ibG9ja3NNYXBdKVxuXG4gIGNvbnN0IGZpbmFsVGl0bGUgPVxuICAgIHRpdGxlIHx8XG4gICAgKGxhYmVsc1xuICAgICAgPyB0KCdmaWVsZHM6YWRkTGFiZWwnLCB7IGxhYmVsOiBnZXRUcmFuc2xhdGlvbihsYWJlbHMuc2luZ3VsYXIsIGkxOG4pIH0pXG4gICAgICA6IHQoJ2ZpZWxkczphZGROZXcnKSlcblxuICByZXR1cm4gKFxuICAgIDxEcmF3ZXIgc2x1Zz17ZHJhd2VyU2x1Z30gdGl0bGU9e2ZpbmFsVGl0bGV9PlxuICAgICAgPEl0ZW1TZWFyY2hcbiAgICAgICAgcGxhY2Vob2xkZXI9e3NlYXJjaFBsYWNlaG9sZGVyIHx8IHQoJ2ZpZWxkczpzZWFyY2hGb3JCbG9jaycpfVxuICAgICAgICBzZXRTZWFyY2hUZXJtPXtzZXRTZWFyY2hUZXJtfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pdGVtcy13cmFwcGVyYH0+XG4gICAgICAgIDx1bCBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2l0ZW0tZ3JvdXBzYH0+XG4gICAgICAgICAge09iamVjdC5lbnRyaWVzKGl0ZW1Hcm91cHMpLm1hcCgoW2dyb3VwTGFiZWwsIGdyb3VwSXRlbXNdKSA9PlxuICAgICAgICAgICAgIWdyb3VwSXRlbXMubGVuZ3RoID8gbnVsbCA6IChcbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19pdGVtLWdyb3VwYCxcbiAgICAgICAgICAgICAgICAgIGdyb3VwTGFiZWwgPT09ICdfbm9uZScgJiYgYCR7YmFzZUNsYXNzfV9faXRlbS1ncm91cC1ub25lYCxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAgICAgICAgIGtleT17Z3JvdXBMYWJlbH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtncm91cExhYmVsICE9PSAnX25vbmUnICYmIChcbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2l0ZW0tZ3JvdXAtbGFiZWxgfT57Z3JvdXBMYWJlbH08L2gzPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faXRlbXNgfT5cbiAgICAgICAgICAgICAgICAgIHtncm91cEl0ZW1zLm1hcCgoX2l0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfaXRlbSA9PT0gJ3N0cmluZycgPyAoY29uZmlnLmJsb2Nrc01hcD8uW19pdGVtXSBhcyBEcmF3ZXJJdGVtKSA6IF9pdGVtXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaW1hZ2VBbHRUZXh0LCBpbWFnZVVSTCB9ID0gZ2V0SXRlbUltYWdlSW5mbyhpdGVtKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TGFiZWwgPSBnZXRJdGVtRGlzcGxheUxhYmVsKGl0ZW0sIGkxOG4pXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pdGVtYH0ga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGh1bWJuYWlsQ2FyZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkxhYmVsPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2Rpc3BsYXlMYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgb25JdGVtQ2xpY2soaXRlbSwgYWRkUm93SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VNb2RhbChkcmF3ZXJTbHVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kZWZhdWx0LWltYWdlYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW1hZ2VVUkwgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PXtpbWFnZUFsdFRleHR9IHNyYz17aW1hZ2VVUkx9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGVmYXVsdEJsb2NrSW1hZ2UgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgKX1cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvRHJhd2VyPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyB1c2VJZCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvU2VhcmNoL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdpdGVtLXNlYXJjaCdcblxuZXhwb3J0IHR5cGUgUHJvcHMgPSB7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIHJlYWRvbmx5IHNldFNlYXJjaFRlcm06ICh0ZXJtOiBzdHJpbmcpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEl0ZW1TZWFyY2g6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHBsYWNlaG9sZGVyLCBzZXRTZWFyY2hUZXJtIH0pID0+IHtcbiAgY29uc3QgaW5wdXRJZCA9IHVzZUlkKClcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lucHV0SWR9LWxhYmVsYFxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIHNldFNlYXJjaFRlcm0oZS50YXJnZXQudmFsdWUpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNyLW9ubHlcIiBodG1sRm9yPXtpbnB1dElkfSBpZD17bGFiZWxJZH0+XG4gICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtsYWJlbElkfVxuICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2lucHV0YH1cbiAgICAgICAgaWQ9e2lucHV0SWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgLz5cbiAgICAgIDxTZWFyY2hJY29uIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IFNsdWdGaWVsZENsaWVudFByb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZm9ybXMvdXNlRmllbGQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlU2VydmVyRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlcnZlckZ1bmN0aW9ucy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgRmllbGRMYWJlbCB9IGZyb20gJy4uL0ZpZWxkTGFiZWwvaW5kZXguanMnXG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9UZXh0L2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbi8qKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGNvbXBvbmVudCBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2Ugb3IgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAqL1xuZXhwb3J0IGNvbnN0IFNsdWdGaWVsZDogUmVhY3QuRkM8U2x1Z0ZpZWxkQ2xpZW50UHJvcHM+ID0gKHtcbiAgZmllbGQsXG4gIHBhdGgsXG4gIHJlYWRPbmx5OiByZWFkT25seUZyb21Qcm9wcyxcbiAgdXNlQXNTbHVnLFxufSkgPT4ge1xuICBjb25zdCB7IGxhYmVsIH0gPSBmaWVsZFxuXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHsgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWcgfSA9IHVzZURvY3VtZW50SW5mbygpXG5cbiAgY29uc3QgeyBzbHVnaWZ5IH0gPSB1c2VTZXJ2ZXJGdW5jdGlvbnMoKVxuXG4gIGNvbnN0IHsgc2V0VmFsdWUsIHZhbHVlIH0gPSB1c2VGaWVsZDxzdHJpbmc+KHsgcGF0aDogcGF0aCB8fCBmaWVsZC5uYW1lIH0pXG5cbiAgY29uc3QgeyBnZXREYXRhLCBnZXREYXRhQnlQYXRoIH0gPSB1c2VGb3JtKClcblxuICBjb25zdCBbaXNMb2NrZWQsIHNldElzTG9ja2VkXSA9IHVzZVN0YXRlKHRydWUpXG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGFsbG93cyB0aGUgdXNlciB0byBnZW5lcmF0ZSB0aGVpciBzbHVnIG9uIGRlbWFuZCwgZS5nLiB3aGVuIHRoZXkgY2xpY2sgdGhlIFwiZ2VuZXJhdGVcIiBidXR0b24uXG4gICAqIEl0IHVzZXMgdGhlIGBzbHVnaWZ5YCBzZXJ2ZXIgZnVuY3Rpb24gdG8gZ2FpbiBhY2Nlc3MgdG8gdGhlaXIgY3VzdG9tIHNsdWdpZnkgZnVuY3Rpb24gZGVmaW5lZCBpbiB0aGVpciBmaWVsZCBjb25maWcuXG4gICAqL1xuICBjb25zdCBoYW5kbGVHZW5lcmF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChlOiBSZWFjdC5Nb3VzZUV2ZW50PEVsZW1lbnQ+KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgICAgY29uc3QgdmFsdWVUb1NsdWdpZnkgPSBnZXREYXRhQnlQYXRoKHVzZUFzU2x1ZylcblxuICAgICAgY29uc3QgZm9ybWF0dGVkU2x1ZyA9IGF3YWl0IHNsdWdpZnkoe1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgZGF0YTogZ2V0RGF0YSgpLFxuICAgICAgICBnbG9iYWxTbHVnLFxuICAgICAgICBwYXRoLFxuICAgICAgICB2YWx1ZVRvU2x1Z2lmeSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChmb3JtYXR0ZWRTbHVnID09PSBudWxsIHx8IGZvcm1hdHRlZFNsdWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRWYWx1ZSgnJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHJlc3VsdCBtYXkgYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgdmFsdWUsIGFuZCBpZiBzbywgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIGEgcmUtcmVuZGVyLlxuICAgICAgICovXG4gICAgICBpZiAodmFsdWUgIT09IGZvcm1hdHRlZFNsdWcpIHtcbiAgICAgICAgc2V0VmFsdWUoZm9ybWF0dGVkU2x1ZylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRWYWx1ZSwgdmFsdWUsIHVzZUFzU2x1ZywgZ2V0RGF0YSwgc2x1Z2lmeSwgZ2V0RGF0YUJ5UGF0aCwgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWcsIHBhdGhdLFxuICApXG5cbiAgY29uc3QgdG9nZ2xlTG9jayA9IHVzZUNhbGxiYWNrKChlOiBSZWFjdC5Nb3VzZUV2ZW50PEVsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgc2V0SXNMb2NrZWQoKHByZXYpID0+ICFwcmV2KVxuICB9LCBbXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmllbGQtdHlwZSBzbHVnLWZpZWxkLWNvbXBvbmVudFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYWJlbC13cmFwcGVyXCI+XG4gICAgICAgIDxGaWVsZExhYmVsIGh0bWxGb3I9e2BmaWVsZC0ke3BhdGh9YH0gbGFiZWw9e2xhYmVsfSAvPlxuICAgICAgICB7IWlzTG9ja2VkICYmIChcbiAgICAgICAgICA8QnV0dG9uIGJ1dHRvblN0eWxlPVwibm9uZVwiIGNsYXNzTmFtZT1cImxvY2stYnV0dG9uXCIgb25DbGljaz17aGFuZGxlR2VuZXJhdGV9PlxuICAgICAgICAgICAge3QoJ2F1dGhlbnRpY2F0aW9uOmdlbmVyYXRlJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIDxCdXR0b24gYnV0dG9uU3R5bGU9XCJub25lXCIgY2xhc3NOYW1lPVwibG9jay1idXR0b25cIiBvbkNsaWNrPXt0b2dnbGVMb2NrfT5cbiAgICAgICAgICB7aXNMb2NrZWQgPyB0KCdnZW5lcmFsOnVubG9jaycpIDogdCgnZ2VuZXJhbDpsb2NrJyl9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8VGV4dElucHV0XG4gICAgICAgIG9uQ2hhbmdlPXtzZXRWYWx1ZX1cbiAgICAgICAgcGF0aD17cGF0aCB8fCBmaWVsZC5uYW1lfVxuICAgICAgICByZWFkT25seT17Qm9vbGVhbihyZWFkT25seUZyb21Qcm9wcyB8fCBpc0xvY2tlZCl9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IENvZGVCbG9ja0ljb246IFJlYWN0LkZDID0gKCkgPT4gKFxuICA8c3ZnXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBjbGFzc05hbWU9XCJncmFwaGljIGNvZGUtYmxvY2staWNvblwiXG4gICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICA+XG4gICAgPHBhdGhcbiAgICAgIGNsYXNzTmFtZT1cInN0cm9rZVwiXG4gICAgICBkPVwiTTE0IDEyLjY2NjdMMTYuNjY2NyA5Ljk5OTk5TDE0IDcuMzMzMzJNNS45OTk5OSA3LjMzMzMyTDMuMzMzMzMgOS45OTk5OUw1Ljk5OTk5IDEyLjY2NjdNMTEuNjY2NyA0LjY2NjY2TDguMzMzMzMgMTUuMzMzM1wiXG4gICAgICBzdHJva2VMaW5lY2FwPVwic3F1YXJlXCJcbiAgICAvPlxuICA8L3N2Zz5cbilcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbWluaW1pemUtbWF4aW1pemUnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBpc01pbmltaXplZD86IGJvb2xlYW5cbn1cbmV4cG9ydCBjb25zdCBNaW5pbWl6ZU1heGltaXplSWNvbjogUmVhY3QuRkM8UHJvcHM+ID0gKHsgY2xhc3NOYW1lLCBpc01pbmltaXplZCB9KSA9PiB7XG4gIGNvbnN0IGNsYXNzZXMgPSBbXG4gICAgYmFzZUNsYXNzLFxuICAgIGlzTWluaW1pemVkID8gYCR7YmFzZUNsYXNzfS0tbWluaW1pemVkYCA6IGAke2Jhc2VDbGFzc30tLW1heGltaXplZGAsXG4gICAgY2xhc3NOYW1lLFxuICBdXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCcgJylcblxuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAge2lzTWluaW1pemVkID8gKFxuICAgICAgICA8cGF0aCBkPVwiTTcuMzMzMzMgNEg1LjMzMzMzQzQuOTc5NzEgNCA0LjY0MDU3IDQuMTQwNDggNC4zOTA1MiA0LjM5MDUyQzQuMTQwNDggNC42NDA1NyA0IDQuOTc5NzEgNCA1LjMzMzMzVjcuMzMzMzNNMTYgNy4zMzMzM1Y1LjMzMzMzQzE2IDQuOTc5NzEgMTUuODU5NSA0LjY0MDU3IDE1LjYwOTUgNC4zOTA1MkMxNS4zNTk0IDQuMTQwNDggMTUuMDIwMyA0IDE0LjY2NjcgNEgxMi42NjY3TTQgMTIuNjY2N1YxNC42NjY3QzQgMTUuMDIwMyA0LjE0MDQ4IDE1LjM1OTQgNC4zOTA1MiAxNS42MDk1QzQuNjQwNTcgMTUuODU5NSA0Ljk3OTcxIDE2IDUuMzMzMzMgMTZINy4zMzMzM00xMi42NjY3IDE2SDE0LjY2NjdDMTUuMDIwMyAxNiAxNS4zNTk0IDE1Ljg1OTUgMTUuNjA5NSAxNS42MDk1QzE1Ljg1OTUgMTUuMzU5NCAxNiAxNS4wMjAzIDE2IDE0LjY2NjdWMTIuNjY2N1wiIC8+XG4gICAgICApIDogKFxuICAgICAgICA8cGF0aCBkPVwiTTcuMzMzMzMgNFY2QzcuMzMzMzMgNi4zNTM2MiA3LjE5Mjg2IDYuNjkyNzYgNi45NDI4MSA2Ljk0MjgxQzYuNjkyNzYgNy4xOTI4NiA2LjM1MzYyIDcuMzMzMzMgNiA3LjMzMzMzSDRNMTYgNy4zMzMzM0gxNEMxMy42NDY0IDcuMzMzMzMgMTMuMzA3MiA3LjE5Mjg2IDEzLjA1NzIgNi45NDI4MUMxMi44MDcxIDYuNjkyNzYgMTIuNjY2NyA2LjM1MzYyIDEyLjY2NjcgNlY0TTQgMTIuNjY2N0g2QzYuMzUzNjIgMTIuNjY2NyA2LjY5Mjc2IDEyLjgwNzEgNi45NDI4MSAxMy4wNTcyQzcuMTkyODYgMTMuMzA3MiA3LjMzMzMzIDEzLjY0NjQgNy4zMzMzMyAxNFYxNk0xMi42NjY3IDE2VjE0QzEyLjY2NjcgMTMuNjQ2NCAxMi44MDcxIDEzLjMwNzIgMTMuMDU3MiAxMy4wNTcyQzEzLjMwNzIgMTIuODA3MSAxMy42NDY0IDEyLjY2NjcgMTQgMTIuNjY2N0gxNlwiIC8+XG4gICAgICApfVxuICAgIDwvc3ZnPlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZ2VhcidcblxuZXhwb3J0IGNvbnN0IEdlYXJJY29uOiBSZWFjdC5GQzx7XG4gIGFyaWFMYWJlbD86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn0+ID0gKHsgYXJpYUxhYmVsLCBjbGFzc05hbWUgfSkgPT4gKFxuICA8ZGl2IGFyaWEtbGFiZWw9e2FyaWFMYWJlbH0gY2xhc3NOYW1lPXtbY2xhc3NOYW1lLCBiYXNlQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9PlxuICAgIDxzdmdcbiAgICAgIGNsYXNzTmFtZT1cImljb24gaWNvbi0tZ2VhclwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk05LjMzMzM3IDguODQ2NzFMNi42NjY3MSA0LjIyNjcxTTkuMzMzMzcgMTEuMTUzNEw2LjY2NjcxIDE1Ljc3MzRNMTAgMTYuNjY2N1YxNS4zMzM0TTEwIDE1LjMzMzRDMTIuOTQ1NiAxNS4zMzM0IDE1LjMzMzQgMTIuOTQ1NiAxNS4zMzM0IDEwQzE1LjMzMzQgNy4wNTQ1MiAxMi45NDU2IDQuNjY2NzEgMTAgNC42NjY3MU0xMCAxNS4zMzM0QzcuMDU0NTIgMTUuMzMzNCA0LjY2NjcxIDEyLjk0NTYgNC42NjY3MSAxME0xMCAzLjMzMzM3VjQuNjY2NzFNMTAgNC42NjY3MUM3LjA1NDUyIDQuNjY2NzEgNC42NjY3MSA3LjA1NDUyIDQuNjY2NzEgMTBNMTEuMzMzNCAxMEgxNi42NjY3TTExLjMzMzQgMTBDMTEuMzMzNCAxMC43MzY0IDEwLjczNjQgMTEuMzMzNCAxMCAxMS4zMzM0QzkuMjYzNjYgMTEuMzMzNCA4LjY2NjcxIDEwLjczNjQgOC42NjY3MSAxMEM4LjY2NjcxIDkuMjYzNjYgOS4yNjM2NiA4LjY2NjcxIDEwIDguNjY2NzFDMTAuNzM2NCA4LjY2NjcxIDExLjMzMzQgOS4yNjM2NiAxMS4zMzM0IDEwWk0xMy4zMzM0IDE1Ljc3MzRMMTIuNjY2NyAxNC42Mk0xMy4zMzM0IDQuMjI2NzFMMTIuNjY2NyA1LjM4MDA0TTMuMzMzMzcgMTBINC42NjY3MU0xNS43NzM0IDEzLjMzMzRMMTQuNjIgMTIuNjY2N00xNS43NzM0IDYuNjY2NzFMMTQuNjIgNy4zMzMzN000LjIyNjcxIDEzLjMzMzRMNS4zODAwNCAxMi42NjY3TTQuMjI2NzEgNi42NjY3MUw1LjM4MDA0IDcuMzMzMzdcIlxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIDwvZGl2PlxuKVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IGZ1bmN0aW9uIE1vdmVGb2xkZXJJY29uKCkge1xuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIGNsYXNzTmFtZT1cImljb24gaWNvbi0tbW92ZS1mb2xkZXJcIlxuICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICB3aWR0aD1cIjI0XCJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgID5cbiAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzI3OF8xMDg2KVwiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNNS4zMzMzNCAxMFY3LjMzMzM0QzUuMzMzMzQgNi45Nzk3MSA1LjQ3MzgyIDYuNjQwNTggNS43MjM4NyA2LjM5MDUzQzUuOTczOTIgNi4xNDA0OCA2LjMxMzA1IDYgNi42NjY2OCA2SDkuMjY2NjhDOS40ODk2NyA1Ljk5NzgyIDkuNzA5NjUgNi4wNTE2IDkuOTA2NDggNi4xNTY0MkMxMC4xMDMzIDYuMjYxMjQgMTAuMjcwNyA2LjQxMzc1IDEwLjM5MzMgNi42TDEwLjkzMzMgNy40QzExLjA1NDcgNy41ODQzNiAxMS4yMiA3LjczNTY4IDExLjQxNDMgNy44NDA0MUMxMS42MDg3IDcuOTQ1MTMgMTEuODI1OSA3Ljk5OTk3IDEyLjA0NjcgOEgxNy4zMzMzQzE3LjY4NyA4IDE4LjAyNjEgOC4xNDA0OCAxOC4yNzYyIDguMzkwNTNDMTguNTI2MiA4LjY0MDU4IDE4LjY2NjcgOC45Nzk3MSAxOC42NjY3IDkuMzMzMzRWMTZDMTguNjY2NyAxNi4zNTM2IDE4LjUyNjIgMTYuNjkyOCAxOC4yNzYyIDE2Ljk0MjhDMTguMDI2MSAxNy4xOTI5IDE3LjY4NyAxNy4zMzMzIDE3LjMzMzMgMTcuMzMzM0g2LjY2NjY4QzYuMzEzMDUgMTcuMzMzMyA1Ljk3MzkyIDE3LjE5MjkgNS43MjM4NyAxNi45NDI4QzUuNDczODIgMTYuNjkyOCA1LjMzMzM0IDE2LjM1MzYgNS4zMzMzNCAxNlYxNS4zMzMzTTUuMzMzMzQgMTIuNjY2N0gxMk0xMiAxMi42NjY3TDEwIDE0LjY2NjdNMTIgMTIuNjY2N0wxMCAxMC42NjY3XCJcbiAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgIC8+XG4gICAgICA8L2c+XG4gICAgICA8ZGVmcz5cbiAgICAgICAgPGZpbHRlclxuICAgICAgICAgIGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM9XCJzUkdCXCJcbiAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgICBoZWlnaHQ9XCIyNlwiXG4gICAgICAgICAgaWQ9XCJmaWx0ZXIwX2RfMjc4XzEwODZcIlxuICAgICAgICAgIHdpZHRoPVwiMjZcIlxuICAgICAgICAgIHg9XCItMVwiXG4gICAgICAgICAgeT1cIi0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxmZUJsZW5kXG4gICAgICAgICAgICBpbj1cIlNvdXJjZUdyYXBoaWNcIlxuICAgICAgICAgICAgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzI3OF8xMDg2XCJcbiAgICAgICAgICAgIG1vZGU9XCJub3JtYWxcIlxuICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZmlsdGVyPlxuICAgICAgPC9kZWZzPlxuICAgIDwvc3ZnPlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgY29uc3QgR3JpZFZpZXdJY29uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIGNsYXNzTmFtZT1cImljb24gaWNvbi0tZ3JpZC12aWV3XCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTggNEg0LjY2NjY3QzQuMjk4NDggNCA0IDQuMjk4NDggNCA0LjY2NjY3VjhDNCA4LjM2ODE5IDQuMjk4NDggOC42NjY2NyA0LjY2NjY3IDguNjY2NjdIOEM4LjM2ODE5IDguNjY2NjcgOC42NjY2NyA4LjM2ODE5IDguNjY2NjcgOFY0LjY2NjY3QzguNjY2NjcgNC4yOTg0OCA4LjM2ODE5IDQgOCA0WlwiXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTUuMzMzMyA0SDEyQzExLjYzMTggNCAxMS4zMzMzIDQuMjk4NDggMTEuMzMzMyA0LjY2NjY3VjhDMTEuMzMzMyA4LjM2ODE5IDExLjYzMTggOC42NjY2NyAxMiA4LjY2NjY3SDE1LjMzMzNDMTUuNzAxNSA4LjY2NjY3IDE2IDguMzY4MTkgMTYgOFY0LjY2NjY3QzE2IDQuMjk4NDggMTUuNzAxNSA0IDE1LjMzMzMgNFpcIlxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTE1LjMzMzMgMTEuMzMzM0gxMkMxMS42MzE4IDExLjMzMzMgMTEuMzMzMyAxMS42MzE4IDExLjMzMzMgMTJWMTUuMzMzM0MxMS4zMzMzIDE1LjcwMTUgMTEuNjMxOCAxNiAxMiAxNkgxNS4zMzMzQzE1LjcwMTUgMTYgMTYgMTUuNzAxNSAxNiAxNS4zMzMzVjEyQzE2IDExLjYzMTggMTUuNzAxNSAxMS4zMzMzIDE1LjMzMzMgMTEuMzMzM1pcIlxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTggMTEuMzMzM0g0LjY2NjY3QzQuMjk4NDggMTEuMzMzMyA0IDExLjYzMTggNCAxMlYxNS4zMzMzQzQgMTUuNzAxNSA0LjI5ODQ4IDE2IDQuNjY2NjcgMTZIOEM4LjM2ODE5IDE2IDguNjY2NjcgMTUuNzAxNSA4LjY2NjY3IDE1LjMzMzNWMTJDOC42NjY2NyAxMS42MzE4IDguMzY4MTkgMTEuMzMzMyA4IDExLjMzMzNaXCJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5leHBvcnQgY29uc3QgTGlzdFZpZXdJY29uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzdmdcbiAgICAgIGNsYXNzTmFtZT1cImljb24gaWNvbi0tbGlzdC12aWV3XCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTQgMTBIMTZNNCAxNEgxNk00IDZIMTZcIlxuICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgRXJyb3I6IFJlYWN0LkZDID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIyNlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiB3aWR0aD1cIjI2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0xMyAyMUMxNy40MTgzIDIxIDIxIDE3LjQxODMgMjEgMTNDMjEgOC41ODE3MiAxNy40MTgzIDUgMTMgNUM4LjU4MTcyIDUgNSA4LjU4MTcyIDUgMTNDNSAxNy40MTgzIDguNTgxNzIgMjEgMTMgMjFaXCJcbiAgICAgICAgZmlsbD1cInZhcigtLXRoZW1lLWVycm9yLTUwMClcIlxuICAgICAgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTUuNDAwMSAxMC41OTk2TDEwLjYwMDEgMTUuMzk5Nk0xMC42MDAxIDEwLjU5OTZMMTUuNDAwMSAxNS4zOTk2XCJcbiAgICAgICAgc3Ryb2tlPVwidmFyKC0tdGhlbWUtZXJyb3ItNTApXCJcbiAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IEluZm86IFJlYWN0LkZDID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIyNlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiB3aWR0aD1cIjI2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0xMyAyMUMxNy40MTgzIDIxIDIxIDE3LjQxODMgMjEgMTNDMjEgOC41ODE3MiAxNy40MTgzIDUgMTMgNUM4LjU4MTcyIDUgNSA4LjU4MTcyIDUgMTNDNSAxNy40MTgzIDguNTgxNzIgMjEgMTMgMjFaXCJcbiAgICAgICAgZmlsbD1cInZhcigtLXRoZW1lLWVsZXZhdGlvbi01MDApXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTEzIDE2LjE5OThWMTIuOTk5OE0xMyA5Ljc5OThIMTMuMDA3N1wiXG4gICAgICAgIHN0cm9rZT1cInZhcigtLXRoZW1lLWVsZXZhdGlvbi01MClcIlxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgU3VjY2VzczogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2ZyBmaWxsPVwibm9uZVwiIGhlaWdodD1cIjI2XCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIHdpZHRoPVwiMjZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTEzIDIxQzE3LjQxODMgMjEgMjEgMTcuNDE4MyAyMSAxM0MyMSA4LjU4MTcyIDE3LjQxODMgNSAxMyA1QzguNTgxNzIgNSA1IDguNTgxNzIgNSAxM0M1IDE3LjQxODMgOC41ODE3MiAyMSAxMyAyMVpcIlxuICAgICAgICBmaWxsPVwidmFyKC0tdGhlbWUtc3VjY2Vzcy01MDApXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTEwLjYwMDEgMTMuMDAwNEwxMi4yMDAxIDE0LjYwMDRMMTUuNDAwMSAxMS40MDA0XCJcbiAgICAgICAgc3Ryb2tlPVwidmFyKC0tdGhlbWUtc3VjY2Vzcy01MClcIlxuICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgV2FybmluZzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2ZyBmaWxsPVwibm9uZVwiIGhlaWdodD1cIjI2XCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIHdpZHRoPVwiMjZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTEzIDIxQzE3LjQxODMgMjEgMjEgMTcuNDE4MyAyMSAxM0MyMSA4LjU4MTcyIDE3LjQxODMgNSAxMyA1QzguNTgxNzIgNSA1IDguNTgxNzIgNSAxM0M1IDE3LjQxODMgOC41ODE3MiAyMSAxMyAyMVpcIlxuICAgICAgICBmaWxsPVwidmFyKC0tdGhlbWUtd2FybmluZy01MDApXCJcbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTEzIDEwVjEzLjJNMTMgMTYuNEgxMy4wMDhcIlxuICAgICAgICBzdHJva2U9XCJ2YXIoLS10aGVtZS13YXJuaW5nLTUwKVwiXG4gICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbnR5cGUgTW9kaWZ5Q2xpZW50RnVuY3Rpb25Db250ZXh0VHlwZSA9IHtcbiAgYWRkQ2xpZW50RnVuY3Rpb246IChhcmdzOiBNb2RpZnlGdW5jdGlvbkFyZ3MpID0+IHZvaWRcbiAgcmVtb3ZlQ2xpZW50RnVuY3Rpb246IChhcmdzOiBNb2RpZnlGdW5jdGlvbkFyZ3MpID0+IHZvaWRcbn1cbnR5cGUgQ2xpZW50RnVuY3Rpb25zQ29udGV4dFR5cGUgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+XG5cbmNvbnN0IE1vZGlmeUNsaWVudEZ1bmN0aW9uQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8TW9kaWZ5Q2xpZW50RnVuY3Rpb25Db250ZXh0VHlwZT4oe1xuICBhZGRDbGllbnRGdW5jdGlvbjogKCkgPT4gbnVsbCxcbiAgcmVtb3ZlQ2xpZW50RnVuY3Rpb246ICgpID0+IG51bGwsXG59KVxuY29uc3QgQ2xpZW50RnVuY3Rpb25zQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Q2xpZW50RnVuY3Rpb25zQ29udGV4dFR5cGU+KHt9KVxuXG50eXBlIE1vZGlmeUZ1bmN0aW9uQXJncyA9IHsgZnVuYzogYW55OyBrZXk6IHN0cmluZyB9XG5cbmV4cG9ydCBjb25zdCBDbGllbnRGdW5jdGlvblByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IFtjbGllbnRGdW5jdGlvbnMsIHNldENsaWVudEZ1bmN0aW9uc10gPSBSZWFjdC51c2VTdGF0ZSh7fSlcblxuICBjb25zdCBhZGRDbGllbnRGdW5jdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKChhcmdzOiBNb2RpZnlGdW5jdGlvbkFyZ3MpID0+IHtcbiAgICBzZXRDbGllbnRGdW5jdGlvbnMoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuICAgICAgbmV3U3RhdGVbYXJncy5rZXldID0gYXJncy5mdW5jXG4gICAgICByZXR1cm4gbmV3U3RhdGVcbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCByZW1vdmVDbGllbnRGdW5jdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKChhcmdzOiBNb2RpZnlGdW5jdGlvbkFyZ3MpID0+IHtcbiAgICBzZXRDbGllbnRGdW5jdGlvbnMoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuICAgICAgZGVsZXRlIG5ld1N0YXRlW2FyZ3Mua2V5XVxuICAgICAgcmV0dXJuIG5ld1N0YXRlXG4gICAgfSlcbiAgfSwgW10pXG5cbiAgcmV0dXJuIChcbiAgICA8TW9kaWZ5Q2xpZW50RnVuY3Rpb25Db250ZXh0XG4gICAgICB2YWx1ZT17e1xuICAgICAgICBhZGRDbGllbnRGdW5jdGlvbixcbiAgICAgICAgcmVtb3ZlQ2xpZW50RnVuY3Rpb24sXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxDbGllbnRGdW5jdGlvbnNDb250ZXh0IHZhbHVlPXtjbGllbnRGdW5jdGlvbnN9PntjaGlsZHJlbn08L0NsaWVudEZ1bmN0aW9uc0NvbnRleHQ+XG4gICAgPC9Nb2RpZnlDbGllbnRGdW5jdGlvbkNvbnRleHQ+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUFkZENsaWVudEZ1bmN0aW9uID0gKGtleTogc3RyaW5nLCBmdW5jOiBhbnkpID0+IHtcbiAgY29uc3QgeyBhZGRDbGllbnRGdW5jdGlvbiwgcmVtb3ZlQ2xpZW50RnVuY3Rpb24gfSA9IFJlYWN0LnVzZShNb2RpZnlDbGllbnRGdW5jdGlvbkNvbnRleHQpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBhZGRDbGllbnRGdW5jdGlvbih7XG4gICAgICBmdW5jLFxuICAgICAga2V5LFxuICAgIH0pXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVtb3ZlQ2xpZW50RnVuY3Rpb24oe1xuICAgICAgICBmdW5jLFxuICAgICAgICBrZXksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW2Z1bmMsIGtleSwgYWRkQ2xpZW50RnVuY3Rpb24sIHJlbW92ZUNsaWVudEZ1bmN0aW9uXSlcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNsaWVudEZ1bmN0aW9ucyA9ICgpID0+IHtcbiAgcmV0dXJuIFJlYWN0LnVzZShDbGllbnRGdW5jdGlvbnNDb250ZXh0KVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25QcmVmZXJlbmNlcywgTGl2ZVByZXZpZXdDb25maWcsIExpdmVQcmV2aWV3VVJMVHlwZSB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IERuZENvbnRleHQgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUlkLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgTGl2ZVByZXZpZXdDb250ZXh0VHlwZSB9IGZyb20gJy4vY29udGV4dC5qcydcblxuaW1wb3J0IHsgdXNlUG9wdXBXaW5kb3cgfSBmcm9tICcuLi8uLi9ob29rcy91c2VQb3B1cFdpbmRvdy5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9QcmVmZXJlbmNlcy9pbmRleC5qcydcbmltcG9ydCB7IGZvcm1hdEFic29sdXRlVVJMIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2Zvcm1hdEFic29sdXRlVVJMLmpzJ1xuaW1wb3J0IHsgY3VzdG9tQ29sbGlzaW9uRGV0ZWN0aW9uIH0gZnJvbSAnLi9jb2xsaXNpb25EZXRlY3Rpb24uanMnXG5pbXBvcnQgeyBMaXZlUHJldmlld0NvbnRleHQgfSBmcm9tICcuL2NvbnRleHQuanMnXG5pbXBvcnQgeyBzaXplUmVkdWNlciB9IGZyb20gJy4vc2l6ZVJlZHVjZXIuanMnXG5cbmV4cG9ydCB0eXBlIExpdmVQcmV2aWV3UHJvdmlkZXJQcm9wcyA9IHtcbiAgYXBwSXNSZWFkeT86IGJvb2xlYW5cbiAgYnJlYWtwb2ludHM/OiBMaXZlUHJldmlld0NvbmZpZ1snYnJlYWtwb2ludHMnXVxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIGRldmljZVNpemU/OiB7XG4gICAgaGVpZ2h0OiBudW1iZXJcbiAgICB3aWR0aDogbnVtYmVyXG4gIH1cbiAgaXNMaXZlUHJldmlld0VuYWJsZWQ/OiBib29sZWFuXG4gIGlzTGl2ZVByZXZpZXdpbmc6IGJvb2xlYW5cbiAgLyoqXG4gICAqIFRoaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZXMgdG8gYGFkbWluLnByZXZpZXdgIGZ1bmN0aW9uIGluIHRoZSBjb25maWcgaW5zdGVhZCBvZiBsaXZlIHByZXZpZXcuXG4gICAqL1xuICBpc1ByZXZpZXdFbmFibGVkPzogYm9vbGVhblxuICAvKipcbiAgICogVGhpcyBzcGVjaWZpY2FsbHkgcmVsYXRlcyB0byBgYWRtaW4ucHJldmlld2AgZnVuY3Rpb24gaW4gdGhlIGNvbmZpZyBpbnN0ZWFkIG9mIGxpdmUgcHJldmlldy5cbiAgICovXG4gIHByZXZpZXdVUkw/OiBzdHJpbmdcbn0gJiBQaWNrPExpdmVQcmV2aWV3Q29udGV4dFR5cGUsICd0eXBlb2ZMaXZlUHJldmlld1VSTCcgfCAndXJsJz5cblxuZXhwb3J0IGNvbnN0IExpdmVQcmV2aWV3UHJvdmlkZXI6IFJlYWN0LkZDPExpdmVQcmV2aWV3UHJvdmlkZXJQcm9wcz4gPSAoe1xuICBicmVha3BvaW50czogaW5jb21pbmdCcmVha3BvaW50cyxcbiAgY2hpbGRyZW4sXG4gIGlzTGl2ZVByZXZpZXdFbmFibGVkLFxuICBpc0xpdmVQcmV2aWV3aW5nOiBpbmNvbWluZ0lzTGl2ZVByZXZpZXdpbmcsXG4gIGlzUHJldmlld0VuYWJsZWQsXG4gIHByZXZpZXdVUkw6IHByZXZpZXdVUkxGcm9tUHJvcHMsXG4gIHR5cGVvZkxpdmVQcmV2aWV3VVJMLFxuICB1cmw6IHVybEZyb21Qcm9wcyxcbn0pID0+IHtcbiAgY29uc3QgW3ByZXZpZXdXaW5kb3dUeXBlLCBzZXRQcmV2aWV3V2luZG93VHlwZV0gPSB1c2VTdGF0ZTwnaWZyYW1lJyB8ICdwb3B1cCc+KCdpZnJhbWUnKVxuXG4gIGNvbnN0IFtpc0xpdmVQcmV2aWV3aW5nLCBfc2V0SXNMaXZlUHJldmlld2luZ10gPVxuICAgIHVzZVN0YXRlPExpdmVQcmV2aWV3Q29udGV4dFR5cGVbJ2lzTGl2ZVByZXZpZXdpbmcnXT4oaW5jb21pbmdJc0xpdmVQcmV2aWV3aW5nKVxuXG4gIGNvbnN0IFtzaG91bGRSZW5kZXJJZnJhbWUsIHNldFNob3VsZFJlbmRlcklmcmFtZV0gPVxuICAgIHVzZVN0YXRlPExpdmVQcmV2aWV3Q29udGV4dFR5cGVbJ3Nob3VsZFJlbmRlcklmcmFtZSddPihpc0xpdmVQcmV2aWV3aW5nKVxuXG4gIC8qKlxuICAgKiBSZW5kZXJpbmcgdGhlIGlmcmFtZSBpcyBhIG9uZS13YXkgZXZlbnQsIGUuZy4gZGVmZXIgbG9hZCBhbmQgbmV2ZXIgdW5tb3VudC5cbiAgICogVGhpcyB3YXksIHN1YnNlcXVlbnQgdG9nZ2xlcyB3aWxsIGFwcGVhciB0byBsb2FkIGluc3RhbnRseS5cbiAgICovXG4gIGNvbnN0IHNldElzTGl2ZVByZXZpZXdpbmcgPSB1c2VDYWxsYmFjazxMaXZlUHJldmlld0NvbnRleHRUeXBlWydzZXRJc0xpdmVQcmV2aWV3aW5nJ10+KFxuICAgIChsaXZlUHJldmlld2luZykgPT4ge1xuICAgICAgaWYgKGxpdmVQcmV2aWV3aW5nKSB7XG4gICAgICAgIHNldFNob3VsZFJlbmRlcklmcmFtZSh0cnVlKVxuICAgICAgfVxuXG4gICAgICBfc2V0SXNMaXZlUHJldmlld2luZyhsaXZlUHJldmlld2luZylcbiAgICB9LFxuICAgIFtdLFxuICApXG5cbiAgY29uc3QgYnJlYWtwb2ludHM6IExpdmVQcmV2aWV3Q29uZmlnWydicmVha3BvaW50cyddID0gdXNlTWVtbyhcbiAgICAoKSA9PiBbXG4gICAgICAuLi4oaW5jb21pbmdCcmVha3BvaW50cyB8fCBbXSksXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXNwb25zaXZlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIGxhYmVsOiAnUmVzcG9uc2l2ZScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9LFxuICAgIF0sXG4gICAgW2luY29taW5nQnJlYWtwb2ludHNdLFxuICApXG5cbiAgY29uc3QgW3VybCwgc2V0VVJMXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpXG4gIGNvbnN0IFtwcmV2aWV3VVJMLCBzZXRQcmV2aWV3VVJMXSA9IHVzZVN0YXRlPHN0cmluZz4ocHJldmlld1VSTEZyb21Qcm9wcylcblxuICBjb25zdCB7IGlzUG9wdXBPcGVuLCBvcGVuUG9wdXBXaW5kb3csIHBvcHVwUmVmIH0gPSB1c2VQb3B1cFdpbmRvdyh7XG4gICAgZXZlbnRUeXBlOiAncGF5bG9hZC1saXZlLXByZXZpZXcnLFxuICAgIHVybCxcbiAgfSlcblxuICBjb25zdCBbYXBwSXNSZWFkeSwgc2V0QXBwSXNSZWFkeV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xpc3RlbmluZ0Zvck1lc3NhZ2VzLCBzZXRMaXN0ZW5pbmdGb3JNZXNzYWdlc10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCB7IGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIGNvbnN0IGlzRmlyc3RSZW5kZXIgPSB1c2VSZWYodHJ1ZSlcblxuICBjb25zdCB7IHNldFByZWZlcmVuY2UgfSA9IHVzZVByZWZlcmVuY2VzKClcblxuICBjb25zdCBpZnJhbWVSZWYgPSBSZWFjdC51c2VSZWY8SFRNTElGcmFtZUVsZW1lbnQ+KG51bGwpXG5cbiAgY29uc3QgW2xvYWRlZFVSTCwgc2V0TG9hZGVkVVJMXSA9IHVzZVN0YXRlPHN0cmluZz4oKVxuXG4gIGNvbnN0IFt6b29tLCBzZXRab29tXSA9IHVzZVN0YXRlKDEpXG5cbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZSh7IHg6IDAsIHk6IDAgfSlcblxuICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSBSZWFjdC51c2VSZWR1Y2VyKHNpemVSZWR1Y2VyLCB7IGhlaWdodDogMCwgd2lkdGg6IDAgfSlcblxuICBjb25zdCBbbWVhc3VyZWREZXZpY2VTaXplLCBzZXRNZWFzdXJlZERldmljZVNpemVdID0gdXNlU3RhdGUoe1xuICAgIGhlaWdodDogMCxcbiAgICB3aWR0aDogMCxcbiAgfSlcblxuICBjb25zdCBbYnJlYWtwb2ludCwgc2V0QnJlYWtwb2ludF0gPVxuICAgIFJlYWN0LnVzZVN0YXRlPExpdmVQcmV2aWV3Q29uZmlnWydicmVha3BvaW50cyddWzBdWyduYW1lJ10+KCdyZXNwb25zaXZlJylcblxuICAvKipcbiAgICogQSBcIm1pZGRsZXdhcmVcIiBjYWxsYmFjayBmbiB0aGF0IGRvZXMgc29tZSBhZGRpdGlvbmFsIHdvcmsgYmVmb3JlIGBzZXRVUkxgLlxuICAgKiBUaGlzIGlzIHdoYXQgd2UgcHJvdmlkZSB0aHJvdWdoIGNvbnRleHQsIGJjIGl0OlxuICAgKiAgLSBlbnN1cmVzIHRoZSBVUkwgaXMgYWJzb2x1dGVcbiAgICogIC0gcmVzZXRzIGBhcHBJc1JlYWR5YCB0byBgZmFsc2VgIHdoaWxlIHRoZSBuZXcgVVJMIGlzIGxvYWRpbmdcbiAgICovXG4gIGNvbnN0IHNldExpdmVQcmV2aWV3VVJMID0gdXNlQ2FsbGJhY2s8TGl2ZVByZXZpZXdDb250ZXh0VHlwZVsnc2V0VVJMJ10+KFxuICAgIChfaW5jb21pbmdVUkwpID0+IHtcbiAgICAgIGxldCBpbmNvbWluZ1VSTDogTGl2ZVByZXZpZXdVUkxUeXBlXG5cbiAgICAgIGlmICh0eXBlb2YgX2luY29taW5nVVJMID09PSAnc3RyaW5nJykge1xuICAgICAgICBpbmNvbWluZ1VSTCA9IGZvcm1hdEFic29sdXRlVVJMKF9pbmNvbWluZ1VSTClcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbmNvbWluZ1VSTCkge1xuICAgICAgICBzZXRJc0xpdmVQcmV2aWV3aW5nKGZhbHNlKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5jb21pbmdVUkwgIT09IHVybCkge1xuICAgICAgICBzZXRBcHBJc1JlYWR5KGZhbHNlKVxuICAgICAgICBzZXRVUkwoaW5jb21pbmdVUkwpXG4gICAgICB9XG4gICAgfSxcbiAgICBbdXJsXSxcbiAgKVxuXG4gIC8qKlxuICAgKiBgdXJsYCBuZWVkcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgd2luZG93LCB3aGljaCBjYW5ub3QgYmUgZG9uZSBvbiBpbml0aWFsIHJlbmRlci5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB1cmxGcm9tUHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZXRVUkwoZm9ybWF0QWJzb2x1dGVVUkwodXJsRnJvbVByb3BzKSlcbiAgICB9XG4gIH0sIFt1cmxGcm9tUHJvcHNdKVxuXG4gIC8vIFRoZSB0b29sYmFyIG5lZWRzIHRvIGZyZWVseSBkcmFnIGFuZCBkcm9wIGFyb3VuZCB0aGUgcGFnZVxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gKGV2KSA9PiB7XG4gICAgLy8gb25seSB1cGRhdGUgcG9zaXRpb24gaWYgdGhlIHRvb2xiYXIgaXMgY29tcGxldGVseSB3aXRoaW4gdGhlIHByZXZpZXcgYXJlYVxuICAgIC8vIG90aGVyd2lzZSByZXNldCBpdCBiYWNrIHRvIHRoZSBwcmV2aW91cyBwb3NpdGlvblxuICAgIC8vIFRPRE86IHJlc2V0IHRvIHRoZSBuZWFyZXN0IGVkZ2Ugb2YgdGhlIHByZXZpZXcgYXJlYVxuICAgIGlmIChldi5vdmVyICYmIGV2Lm92ZXIuaWQgPT09ICdsaXZlLXByZXZpZXctYXJlYScpIHtcbiAgICAgIGNvbnN0IG5ld1BvcyA9IHtcbiAgICAgICAgeDogcG9zaXRpb24ueCArIGV2LmRlbHRhLngsXG4gICAgICAgIHk6IHBvc2l0aW9uLnkgKyBldi5kZWx0YS55LFxuICAgICAgfVxuXG4gICAgICBzZXRQb3NpdGlvbihuZXdQb3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2V0V2lkdGggPSB1c2VDYWxsYmFjayhcbiAgICAod2lkdGgpID0+IHtcbiAgICAgIHNldFNpemUoeyB0eXBlOiAnd2lkdGgnLCB2YWx1ZTogd2lkdGggfSlcbiAgICB9LFxuICAgIFtzZXRTaXplXSxcbiAgKVxuXG4gIGNvbnN0IHNldEhlaWdodCA9IHVzZUNhbGxiYWNrKFxuICAgIChoZWlnaHQpID0+IHtcbiAgICAgIHNldFNpemUoeyB0eXBlOiAnaGVpZ2h0JywgdmFsdWU6IGhlaWdodCB9KVxuICAgIH0sXG4gICAgW3NldFNpemVdLFxuICApXG5cbiAgLy8gZXhwbGljaXRseSBzZXQgbmV3IHdpZHRoIGFuZCBoZWlnaHQgd2hlbiBhcyBuZXcgYnJlYWtwb2ludHMgYXJlIHNlbGVjdGVkXG4gIC8vIGV4Y2x1ZGUgYGN1c3RvbWAgYnJlYWtwb2ludCBhcyBpdCBpcyBoYW5kbGVkIGJ5IHRoZSBgc2V0V2lkdGhgIGFuZCBgc2V0SGVpZ2h0YCBkaXJlY3RseVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kQnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzPy5maW5kKChicCkgPT4gYnAubmFtZSA9PT0gYnJlYWtwb2ludClcblxuICAgIGlmIChcbiAgICAgIGZvdW5kQnJlYWtwb2ludCAmJlxuICAgICAgYnJlYWtwb2ludCAhPT0gJ3Jlc3BvbnNpdmUnICYmXG4gICAgICBicmVha3BvaW50ICE9PSAnY3VzdG9tJyAmJlxuICAgICAgdHlwZW9mIGZvdW5kQnJlYWtwb2ludD8ud2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICB0eXBlb2YgZm91bmRCcmVha3BvaW50Py5oZWlnaHQgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgdHlwZTogJ3Jlc2V0JyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGZvdW5kQnJlYWtwb2ludC5oZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IGZvdW5kQnJlYWtwb2ludC53aWR0aCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbYnJlYWtwb2ludCwgYnJlYWtwb2ludHNdKVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlIHRoZSBgcmVhZHlgIG1lc3NhZ2UgZnJvbSB0aGUgcG9wdXAgd2luZG93XG4gICAqIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGFwcCBpcyByZWFkeSB0byByZWNlaXZlIGB3aW5kb3cucG9zdE1lc3NhZ2VgIGV2ZW50c1xuICAgKiBUaGlzIGlzIGFsc28gdGhlIG9ubHkgY3Jvc3Mtb3JpZ2luIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiBhIHBvcHVwIHdpbmRvdyBoYXMgbG9hZGVkXG4gICAqIFVubGlrZSBpZnJhbWUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhbiBgb25Mb2FkYCBoYW5kbGVyLCB0aGVyZSBpcyBubyB3YXkgdG8gYWNjZXNzIGB3aW5kb3cub3BlbmAgb24gcG9wdXBzXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZU1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB1cmw/LnN0YXJ0c1dpdGgoZXZlbnQub3JpZ2luKSAmJlxuICAgICAgICBldmVudC5kYXRhICYmXG4gICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBldmVudC5kYXRhLnR5cGUgPT09ICdwYXlsb2FkLWxpdmUtcHJldmlldydcbiAgICAgICkge1xuICAgICAgICBpZiAoZXZlbnQuZGF0YS5yZWFkeSkge1xuICAgICAgICAgIHNldEFwcElzUmVhZHkodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlTWVzc2FnZSlcblxuICAgIHNldExpc3RlbmluZ0Zvck1lc3NhZ2VzKHRydWUpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVNZXNzYWdlKVxuICAgIH1cbiAgfSwgW3VybCwgbGlzdGVuaW5nRm9yTWVzc2FnZXNdKVxuXG4gIGNvbnN0IGhhbmRsZVdpbmRvd0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0eXBlOiAnaWZyYW1lJyB8ICdwb3B1cCcpID0+IHtcbiAgICAgIHNldEFwcElzUmVhZHkoZmFsc2UpXG4gICAgICBzZXRQcmV2aWV3V2luZG93VHlwZSh0eXBlKVxuICAgICAgaWYgKHR5cGUgPT09ICdwb3B1cCcpIHtcbiAgICAgICAgb3BlblBvcHVwV2luZG93KClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvcGVuUG9wdXBXaW5kb3ddLFxuICApXG5cbiAgLy8gd2hlbiB0aGUgdXNlciBjbG9zZXMgdGhlIHBvcHVwIHdpbmRvdywgc3dpdGNoIGJhY2sgdG8gdGhlIGlmcmFtZVxuICAvLyB0aGUgYHVzZVBvcHVwV2luZG93YCByZXBvcnRzIHRoZSBgaXNQb3B1cE9wZW5gIHN0YXRlIGZvciB1cyB0byB1c2UgaGVyZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5ld1ByZXZpZXdXaW5kb3dUeXBlID0gaXNQb3B1cE9wZW4gPyAncG9wdXAnIDogJ2lmcmFtZSdcblxuICAgIGlmIChuZXdQcmV2aWV3V2luZG93VHlwZSAhPT0gcHJldmlld1dpbmRvd1R5cGUpIHtcbiAgICAgIGhhbmRsZVdpbmRvd0NoYW5nZSgnaWZyYW1lJylcbiAgICB9XG4gIH0sIFtwcmV2aWV3V2luZG93VHlwZSwgaXNQb3B1cE9wZW4sIGhhbmRsZVdpbmRvd0NoYW5nZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGaXJzdFJlbmRlci5jdXJyZW50KSB7XG4gICAgICBpc0ZpcnN0UmVuZGVyLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdm9pZCBzZXRQcmVmZXJlbmNlPENvbGxlY3Rpb25QcmVmZXJlbmNlcz4oXG4gICAgICBjb2xsZWN0aW9uU2x1ZyA/IGBjb2xsZWN0aW9uLSR7Y29sbGVjdGlvblNsdWd9YCA6IGBnbG9iYWwtJHtnbG9iYWxTbHVnfWAsXG4gICAgICB7XG4gICAgICAgIGVkaXRWaWV3VHlwZTogaXNMaXZlUHJldmlld2luZyA/ICdsaXZlLXByZXZpZXcnIDogJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKVxuICB9LCBbaXNMaXZlUHJldmlld2luZywgc2V0UHJlZmVyZW5jZSwgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWddKVxuXG4gIGNvbnN0IGRuZENvbnRleHRJRCA9IHVzZUlkKClcblxuICByZXR1cm4gKFxuICAgIDxMaXZlUHJldmlld0NvbnRleHRcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGFwcElzUmVhZHksXG4gICAgICAgIGJyZWFrcG9pbnQsXG4gICAgICAgIGJyZWFrcG9pbnRzLFxuICAgICAgICBpZnJhbWVSZWYsXG4gICAgICAgIGlzTGl2ZVByZXZpZXdFbmFibGVkLFxuICAgICAgICBpc0xpdmVQcmV2aWV3aW5nLFxuICAgICAgICBpc1BvcHVwT3BlbixcbiAgICAgICAgaXNQcmV2aWV3RW5hYmxlZCxcbiAgICAgICAgbGlzdGVuaW5nRm9yTWVzc2FnZXMsXG4gICAgICAgIGxvYWRlZFVSTCxcbiAgICAgICAgbWVhc3VyZWREZXZpY2VTaXplLFxuICAgICAgICBvcGVuUG9wdXBXaW5kb3csXG4gICAgICAgIHBvcHVwUmVmLFxuICAgICAgICBwcmV2aWV3VVJMLFxuICAgICAgICBwcmV2aWV3V2luZG93VHlwZSxcbiAgICAgICAgc2V0QXBwSXNSZWFkeSxcbiAgICAgICAgc2V0QnJlYWtwb2ludCxcbiAgICAgICAgc2V0SGVpZ2h0LFxuICAgICAgICBzZXRJc0xpdmVQcmV2aWV3aW5nLFxuICAgICAgICBzZXRMb2FkZWRVUkwsXG4gICAgICAgIHNldE1lYXN1cmVkRGV2aWNlU2l6ZSxcbiAgICAgICAgc2V0UHJldmlld1VSTCxcbiAgICAgICAgc2V0UHJldmlld1dpbmRvd1R5cGU6IGhhbmRsZVdpbmRvd0NoYW5nZSxcbiAgICAgICAgc2V0U2l6ZSxcbiAgICAgICAgc2V0VG9vbGJhclBvc2l0aW9uOiBzZXRQb3NpdGlvbixcbiAgICAgICAgc2V0VVJMOiBzZXRMaXZlUHJldmlld1VSTCxcbiAgICAgICAgc2V0V2lkdGgsXG4gICAgICAgIHNldFpvb20sXG4gICAgICAgIHNob3VsZFJlbmRlcklmcmFtZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdG9vbGJhclBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgdHlwZW9mTGl2ZVByZXZpZXdVUkwsXG4gICAgICAgIHVybCxcbiAgICAgICAgem9vbSxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjdXN0b21Db2xsaXNpb25EZXRlY3Rpb259XG4gICAgICAgIC8vIFByb3ZpZGUgc3RhYmxlIElEIHRvIGZpeCBoeWRyYXRpb24gaXNzdWVzOiBodHRwczovL2dpdGh1Yi5jb20vY2xhdWRlcmljL2RuZC1raXQvaXNzdWVzLzkyNlxuICAgICAgICBpZD17ZG5kQ29udGV4dElEfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L0xpdmVQcmV2aWV3Q29udGV4dD5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvcHVwTWVzc2FnZSB7XG4gIHNlYXJjaFBhcmFtczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGNvZGU6IHN0cmluZ1xuICAgIGluc3RhbGxhdGlvbl9pZDogc3RyaW5nXG4gICAgc3RhdGU6IHN0cmluZ1xuICB9XG4gIHR5cGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgdXNlUG9wdXBXaW5kb3cgPSAocHJvcHM6IHtcbiAgZXZlbnRUeXBlPzogc3RyaW5nXG5cbiAgb25NZXNzYWdlPzogKHNlYXJjaFBhcmFtczogUG9wdXBNZXNzYWdlWydzZWFyY2hQYXJhbXMnXSkgPT4gUHJvbWlzZTx2b2lkPlxuICB1cmw6IHN0cmluZ1xufSk6IHtcbiAgaXNQb3B1cE9wZW46IGJvb2xlYW5cbiAgb3BlblBvcHVwV2luZG93OiAoKSA9PiB2b2lkXG4gIHBvcHVwUmVmPzogUmVhY3QuUmVmT2JqZWN0PG51bGwgfCBXaW5kb3c+XG59ID0+IHtcbiAgY29uc3QgeyBldmVudFR5cGUsIG9uTWVzc2FnZSwgdXJsIH0gPSBwcm9wc1xuICBjb25zdCBpc1JlY2VpdmluZ01lc3NhZ2UgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7IHNlcnZlclVSTCB9LFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBwb3B1cFJlZiA9IHVzZVJlZjxudWxsIHwgV2luZG93PihudWxsKVxuXG4gIC8vIE9wdGlvbmFsbHkgYnJvYWRjYXN0IG1lc3NhZ2VzIGJhY2sgb3V0IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVjZWl2ZU1lc3NhZ2UgPSBhc3luYyAoZXZlbnQ6IE1lc3NhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBldmVudC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gfHxcbiAgICAgICAgZXZlbnQub3JpZ2luICE9PSB1cmwgfHxcbiAgICAgICAgZXZlbnQub3JpZ2luICE9PSBzZXJ2ZXJVUkxcbiAgICAgICkge1xuICAgICAgICAvLyBjb25zb2xlLndhcm4oYE1lc3NhZ2UgcmVjZWl2ZWQgYnkgJHtldmVudC5vcmlnaW59OyBJR05PUkVELmApIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb25NZXNzYWdlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIGV2ZW50LmRhdGE/LnR5cGUgPT09IGV2ZW50VHlwZSAmJlxuICAgICAgICAhaXNSZWNlaXZpbmdNZXNzYWdlLmN1cnJlbnRcbiAgICAgICkge1xuICAgICAgICBpc1JlY2VpdmluZ01lc3NhZ2UuY3VycmVudCA9IHRydWVcbiAgICAgICAgYXdhaXQgb25NZXNzYWdlKGV2ZW50LmRhdGE/LnNlYXJjaFBhcmFtcylcbiAgICAgICAgaXNSZWNlaXZpbmdNZXNzYWdlLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09wZW4gJiYgcG9wdXBSZWYuY3VycmVudCkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcmVjZWl2ZU1lc3NhZ2UpXG4gICAgfVxuICB9LCBbb25NZXNzYWdlLCBldmVudFR5cGUsIHVybCwgc2VydmVyVVJMLCBpc09wZW5dKVxuXG4gIC8vIEN1c3RvbWl6ZSB0aGUgc2l6ZSwgcG9zaXRpb24sIGFuZCBzdHlsZSBvZiB0aGUgcG9wdXAgd2luZG93XG4gIGNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IHVzZUNhbGxiYWNrKFxuICAgIChlPzogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZlYXR1cmVzID0ge1xuICAgICAgICBoZWlnaHQ6IDcwMCxcbiAgICAgICAgbGVmdDogJ2F1dG8nLFxuICAgICAgICBtZW51YmFyOiAnbm8nLFxuICAgICAgICBwb3B1cDogJ3llcycsXG4gICAgICAgIHRvb2xiYXI6ICdubycsXG4gICAgICAgIHRvcDogJ2F1dG8nLFxuICAgICAgICB3aWR0aDogODAwLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3B1cE9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhmZWF0dXJlcylcbiAgICAgICAgLnJlZHVjZSgoc3RyLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBsZXQgc3RyQ29weSA9IHN0clxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAndG9wJykge1xuICAgICAgICAgICAgICBjb25zdCB2ID0gTWF0aC5yb3VuZCh3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gZmVhdHVyZXMuaGVpZ2h0IC8gMilcbiAgICAgICAgICAgICAgc3RyQ29weSArPSBgdG9wPSR7dn0sYFxuICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICBjb25zdCB2ID0gTWF0aC5yb3VuZCh3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBmZWF0dXJlcy53aWR0aCAvIDIpXG4gICAgICAgICAgICAgIHN0ckNvcHkgKz0gYGxlZnQ9JHt2fSxgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RyQ29weVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ckNvcHkgKz0gYCR7a2V5fT0ke3ZhbHVlfSxgXG4gICAgICAgICAgcmV0dXJuIHN0ckNvcHlcbiAgICAgICAgfSwgJycpXG4gICAgICAgIC5zbGljZSgwLCAtMSkgLy8gcmVtb3ZlIGxhc3QgJywnIChjb21tYSlcblxuICAgICAgY29uc3QgbmV3V2luZG93ID0gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJywgcG9wdXBPcHRpb25zKVxuXG4gICAgICBwb3B1cFJlZi5jdXJyZW50ID0gbmV3V2luZG93XG5cbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sXG4gICAgW3VybF0sXG4gIClcblxuICAvLyB0aGlzIGlzIHRoZSBtb3N0IHN0YWJsZSBhbmQgd2lkZWx5IHN1cHBvcnRlZCB3YXkgdG8gY2hlY2sgaWYgYSBwb3B1cCB3aW5kb3cgaXMgbm8gbG9uZ2VyIG9wZW5cbiAgLy8gd2UgcG9sbCBpdHMgcmVmIGV2ZXJ5IHggbXMgYW5kIHVzZSB0aGUgcG9wdXAgd2luZG93J3MgYGNsb3NlZGAgcHJvcGVydHlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdGltZXI6IE5vZGVKUy5UaW1lb3V0XG5cbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcilcbiAgICAgICAgICBzZXRJc09wZW4oZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgcG9wdXBSZWZdKVxuXG4gIHJldHVybiB7XG4gICAgaXNQb3B1cE9wZW46IGlzT3BlbixcbiAgICBvcGVuUG9wdXBXaW5kb3csXG4gICAgcG9wdXBSZWYsXG4gIH1cbn1cbiIsImNvbnN0IGdldEFic29sdXRlVXJsID0gKHVybCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHVybCwgd2luZG93LmxvY2F0aW9uLm9yaWdpbikuaHJlZlxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdXJsXG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBwcm92aWRlZCBVUkwgaXMgYWJzb2x1dGUuIElmIG5vdCwgaXQgY29udmVydHMgaXQgdG8gYW4gYWJzb2x1dGUgVVJMIGJhc2VkXG4gKiBvbiB0aGUgY3VycmVudCB3aW5kb3cgbG9jYXRpb24uXG4gKiBOb3RlOiBUaGlzIE1VU1QgYmUgY2FsbGVkIHdpdGhpbiB0aGUgY2xpZW50IGVudmlyb25tZW50IGFzIGl0IHJlbGllcyBvbiB0aGUgYHdpbmRvd2Agb2JqZWN0XG4gKiB0byBkZXRlcm1pbmUgdGhlIGFic29sdXRlIFVSTC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEFic29sdXRlVVJMID0gKGluY29taW5nVVJMOiBzdHJpbmcpID0+XG4gIGluY29taW5nVVJMPy5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgaW5jb21pbmdVUkw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJylcbiAgICA/IGluY29taW5nVVJMXG4gICAgOiBnZXRBYnNvbHV0ZVVybChpbmNvbWluZ1VSTClcbiIsImltcG9ydCB0eXBlIHsgQ29sbGlzaW9uRGV0ZWN0aW9uIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcblxuaW1wb3J0IHsgcmVjdEludGVyc2VjdGlvbiB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5cbi8vIElmIHRoZSB0b29sYmFyIGV4aXRzIHRoZSBwcmV2aWV3IGFyZWEsIHdlIG5lZWQgdG8gcmVzZXQgaXRzIHBvc2l0aW9uXG4vLyBUaGlzIHdpbGwgcHJldmVudCB0aGUgdG9vbGJhciBmcm9tIGdldHRpbmcgc3R1Y2sgb3V0c2lkZSB0aGUgcHJldmlldyBhcmVhXG5leHBvcnQgY29uc3QgY3VzdG9tQ29sbGlzaW9uRGV0ZWN0aW9uOiBDb2xsaXNpb25EZXRlY3Rpb24gPSAoe1xuICBjb2xsaXNpb25SZWN0LFxuICBkcm9wcGFibGVDb250YWluZXJzLFxuICAuLi5hcmdzXG59KSA9PiB7XG4gIGNvbnN0IGRyb3BwYWJsZUNvbnRhaW5lciA9IGRyb3BwYWJsZUNvbnRhaW5lcnMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gJ2xpdmUtcHJldmlldy1hcmVhJylcblxuICBjb25zdCByZWN0SW50ZXJzZWN0aW9uQ29sbGlzaW9ucyA9IHJlY3RJbnRlcnNlY3Rpb24oe1xuICAgIC4uLmFyZ3MsXG4gICAgY29sbGlzaW9uUmVjdCxcbiAgICBkcm9wcGFibGVDb250YWluZXJzOiBbZHJvcHBhYmxlQ29udGFpbmVyXSxcbiAgfSlcblxuICAvLyBDb2xsaXNpb24gZGV0ZWN0aW9uIGFsZ29yaXRobXMgcmV0dXJuIGFuIGFycmF5IG9mIGNvbGxpc2lvbnNcbiAgaWYgKHJlY3RJbnRlcnNlY3Rpb25Db2xsaXNpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIFRoZSBwcmV2aWV3IGFyZWEgaXMgbm90IGludGVyc2VjdGluZywgcmV0dXJuIGVhcmx5XG4gICAgcmV0dXJuIHJlY3RJbnRlcnNlY3Rpb25Db2xsaXNpb25zXG4gIH1cblxuICAvLyBDb21wdXRlIHdoZXRoZXIgdGhlIGRyYWdnYWJsZSBlbGVtZW50IGlzIGNvbXBsZXRlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgcHJldmlldyBhcmVhXG4gIGNvbnN0IHByZXZpZXdBcmVhUmVjdCA9IGRyb3BwYWJsZUNvbnRhaW5lcj8ucmVjdD8uY3VycmVudFxuXG4gIGNvbnN0IGlzQ29udGFpbmVkID1cbiAgICBjb2xsaXNpb25SZWN0LnRvcCA+PSBwcmV2aWV3QXJlYVJlY3QudG9wICYmXG4gICAgY29sbGlzaW9uUmVjdC5sZWZ0ID49IHByZXZpZXdBcmVhUmVjdC5sZWZ0ICYmXG4gICAgY29sbGlzaW9uUmVjdC5ib3R0b20gPD0gcHJldmlld0FyZWFSZWN0LmJvdHRvbSAmJlxuICAgIGNvbGxpc2lvblJlY3QucmlnaHQgPD0gcHJldmlld0FyZWFSZWN0LnJpZ2h0XG5cbiAgaWYgKGlzQ29udGFpbmVkKSB7XG4gICAgcmV0dXJuIHJlY3RJbnRlcnNlY3Rpb25Db2xsaXNpb25zXG4gIH1cbn1cbiIsIi8vIGV4cG9ydCBjb25zdCBzaXplUmVkdWNlcjogKHN0YXRlLCBhY3Rpb24pID0+IHtcbi8vICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuLy8gICAgIGNhc2UgJ3dpZHRoJzpcbi8vICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCB3aWR0aDogYWN0aW9uLnZhbHVlIH1cbi8vICAgICBjYXNlICdoZWlnaHQnOlxuLy8gICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGhlaWdodDogYWN0aW9uLnZhbHVlIH1cbi8vICAgICBkZWZhdWx0OlxuLy8gICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIC4uLihhY3Rpb24/LnZhbHVlIHx8IHt9KSB9XG4vLyAgIH1cbi8vIH0sXG5cbnR5cGUgU2l6ZVJlZHVjZXJTdGF0ZSA9IHtcbiAgaGVpZ2h0OiBudW1iZXJcbiAgd2lkdGg6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBTaXplUmVkdWNlckFjdGlvbiA9XG4gIHwge1xuICAgICAgdHlwZTogJ2hlaWdodCcgfCAnd2lkdGgnXG4gICAgICB2YWx1ZTogbnVtYmVyXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdyZXNldCdcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGhlaWdodDogbnVtYmVyXG4gICAgICAgIHdpZHRoOiBudW1iZXJcbiAgICAgIH1cbiAgICB9XG5cbmV4cG9ydCBjb25zdCBzaXplUmVkdWNlciA9IChzdGF0ZTogU2l6ZVJlZHVjZXJTdGF0ZSwgYWN0aW9uOiBTaXplUmVkdWNlckFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnaGVpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoZWlnaHQ6IGFjdGlvbi52YWx1ZSB9XG4gICAgY2FzZSAnd2lkdGgnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHdpZHRoOiBhY3Rpb24udmFsdWUgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4uKGFjdGlvbj8udmFsdWUgfHwge30pIH1cbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uID0gMjAwXG5jb25zdCBiYXNlQ2xhc3MgPSAncHJvZ3Jlc3MtYmFyJ1xuY29uc3QgaW5pdGlhbERlbGF5ID0gMTUwXG5cbi8qKlxuICogUmVuZGVycyBhIHByb2dyZXNzIGJhciB0aGF0IHNob3dzIHRoZSBwcm9ncmVzcyBvZiBhIHJvdXRlIHRyYW5zaXRpb24uXG4gKiBQbGFjZSB0aGlzIGF0IHRoZSByb290IG9mIHlvdXIgYXBwbGljYXRpb24sIGluc2lkZSBvZiB0aGUgYFJvdXRlVHJhbnNpdGlvblByb3ZpZGVyYC5cbiAqIFdoZW4gYSB0cmFuc2l0aW9uIGlzIHRyaWdnZXJlZCwgdGhlIHByb2dyZXNzIGJhciB3aWxsIHNob3cgdGhlIHByb2dyZXNzIG9mIHRoYXQgdHJhbnNpdGlvbiBhbmQgZXhpdCB3aGVuIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICogQHJldHVybnMgQSBwcm9ncmVzcyBiYXIgdGhhdCBzaG93cyB0aGUgcHJvZ3Jlc3Mgb2YgYSByb3V0ZSB0cmFuc2l0aW9uXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgUm91dGVUcmFuc2l0aW9uUHJvdmlkZXIsIFByb2dyZXNzQmFyLCBMaW5rIH0gZnJvbSAnQHBheWxvYWRjbXMvdWknXG4gKiBjb25zdCBBcHAgPSAoKSA9PiAoXG4gKiA8Um91dGVUcmFuc2l0aW9uUHJvdmlkZXI+XG4gKiAgPFByb2dyZXNzQmFyIC8+XG4gKiAgPExpbmsgaHJlZj1cIi9zb21ld2hlcmVcIj5HbyBTb21ld2hlcmU8L0xpbms+XG4gKiA8L1JvdXRlVHJhbnNpdGlvblByb3ZpZGVyPlxuICovXG5leHBvcnQgY29uc3QgUHJvZ3Jlc3NCYXIgPSAoKSA9PiB7XG4gIGNvbnN0IHsgaXNUcmFuc2l0aW9uaW5nLCB0cmFuc2l0aW9uUHJvZ3Jlc3MgfSA9IHVzZVJvdXRlVHJhbnNpdGlvbigpXG4gIGNvbnN0IFtwcm9ncmVzc1RvU2hvdywgc2V0UHJvZ3Jlc3NUb1Nob3ddID0gUmVhY3QudXNlU3RhdGU8bnVsbCB8IG51bWJlcj4obnVsbClcbiAgY29uc3Qgc2hvdWxkRGVsYXlQcm9ncmVzcyA9IHVzZVJlZih0cnVlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNsZWFyVGltZXJJRDogTm9kZUpTLlRpbWVvdXRcbiAgICBsZXQgZGVsYXlUaW1lcklEOiBOb2RlSlMuVGltZW91dFxuXG4gICAgaWYgKGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgaWYgKHNob3VsZERlbGF5UHJvZ3Jlc3MuY3VycmVudCkge1xuICAgICAgICBkZWxheVRpbWVySUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRQcm9ncmVzc1RvU2hvdyh0cmFuc2l0aW9uUHJvZ3Jlc3MpXG4gICAgICAgICAgc2hvdWxkRGVsYXlQcm9ncmVzcy5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfSwgaW5pdGlhbERlbGF5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0UHJvZ3Jlc3NUb1Nob3codHJhbnNpdGlvblByb2dyZXNzKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGREZWxheVByb2dyZXNzLmN1cnJlbnQgPSB0cnVlXG5cbiAgICAgIC8vIEZhc3QgZm9yd2FyZCB0byAxMDAlIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY29tcGxldGVcbiAgICAgIC8vIFRoZW4gZmFkZSBvdXQgdGhlIHByb2dyZXNzIGJhciBkaXJlY3RseSBhZnRlclxuICAgICAgc2V0UHJvZ3Jlc3NUb1Nob3coMSlcblxuICAgICAgLy8gV2FpdCBmb3IgQ1NTIHRyYW5zaXRpb24gdG8gZmluaXNoIGJlZm9yZSBoaWRpbmcgdGhlIHByb2dyZXNzIGJhclxuICAgICAgLy8gVGhpcyBpbmNsdWRlcyBib3RoIHRoZSBmYXN0LWZvcndhcmQgdG8gMTAwJSBhbmQgdGhlIHN1YnNlcXVlbnQgZmFkZS1vdXRcbiAgICAgIGNsZWFyVGltZXJJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRQcm9ncmVzc1RvU2hvdyhudWxsKVxuICAgICAgfSwgdHJhbnNpdGlvbkR1cmF0aW9uICogMilcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGNsZWFyVGltZXJJRClcbiAgICAgIGNsZWFyVGltZW91dChkZWxheVRpbWVySUQpXG4gICAgfVxuICB9LCBbaXNUcmFuc2l0aW9uaW5nLCB0cmFuc2l0aW9uUHJvZ3Jlc3NdKVxuXG4gIGlmICh0eXBlb2YgcHJvZ3Jlc3NUb1Nob3cgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBwcm9ncmVzc1RvU2hvdyA9PT0gMSAmJiBgJHtiYXNlQ2xhc3N9LS1mYWRlLW91dGBdXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRTIGRvZXNuJ3QgbGlrZSBjdXN0b20gQ1NTIHByb3BlcnRpZXNcbiAgICAgICAgICAnLS10cmFuc2l0aW9uLWR1cmF0aW9uJzogYCR7dHJhbnNpdGlvbkR1cmF0aW9ufW1zYCxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcHJvZ3Jlc3NgfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICB3aWR0aDogYCR7KHByb2dyZXNzVG9TaG93IHx8IDApICogMTAwfSVgLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcsIFNhbml0aXplZEdsb2JhbENvbmZpZywgVmlzaWJsZUVudGl0aWVzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHR5cGUgVmlzaWJsZUVudGl0aWVzQ29udGV4dFR5cGUgPSB7XG4gIGlzRW50aXR5VmlzaWJsZTogKHtcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBnbG9iYWxTbHVnLFxuICB9OiB7XG4gICAgY29sbGVjdGlvblNsdWc/OiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWydzbHVnJ11cbiAgICBnbG9iYWxTbHVnPzogU2FuaXRpemVkR2xvYmFsQ29uZmlnWydzbHVnJ11cbiAgfSkgPT4gYm9vbGVhblxuICB2aXNpYmxlRW50aXRpZXM6IFZpc2libGVFbnRpdGllc1xufVxuXG5leHBvcnQgY29uc3QgRW50aXR5VmlzaWJpbGl0eUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9IGFzIFZpc2libGVFbnRpdGllc0NvbnRleHRUeXBlKVxuXG5leHBvcnQgY29uc3QgRW50aXR5VmlzaWJpbGl0eVByb3ZpZGVyOiBSZWFjdC5GQzx7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgdmlzaWJsZUVudGl0aWVzPzogVmlzaWJsZUVudGl0aWVzXG59PiA9ICh7IGNoaWxkcmVuLCB2aXNpYmxlRW50aXRpZXMgfSkgPT4ge1xuICBjb25zdCBpc0VudGl0eVZpc2libGUgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICBnbG9iYWxTbHVnLFxuICAgIH06IHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWydzbHVnJ11cbiAgICAgIGdsb2JhbFNsdWc6IFNhbml0aXplZEdsb2JhbENvbmZpZ1snc2x1ZyddXG4gICAgfSkgPT4ge1xuICAgICAgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICAgIHJldHVybiB2aXNpYmxlRW50aXRpZXMuY29sbGVjdGlvbnMuaW5jbHVkZXMoY29sbGVjdGlvblNsdWcpXG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWxTbHVnKSB7XG4gICAgICAgIHJldHVybiB2aXNpYmxlRW50aXRpZXMuZ2xvYmFscy5pbmNsdWRlcyhnbG9iYWxTbHVnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuICAgIFt2aXNpYmxlRW50aXRpZXNdLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8RW50aXR5VmlzaWJpbGl0eUNvbnRleHQgdmFsdWU9e3sgaXNFbnRpdHlWaXNpYmxlLCB2aXNpYmxlRW50aXRpZXMgfX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9FbnRpdHlWaXNpYmlsaXR5Q29udGV4dD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlRW50aXR5VmlzaWJpbGl0eSA9ICgpOiBWaXNpYmxlRW50aXRpZXNDb250ZXh0VHlwZSA9PiB1c2UoRW50aXR5VmlzaWJpbGl0eUNvbnRleHQpXG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlUGFyYW1zIGFzIHVzZU5leHRQYXJhbXMgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIFBhcmFtcyA9IFJldHVyblR5cGU8dHlwZW9mIHVzZU5leHRQYXJhbXM+XG5pbnRlcmZhY2UgSVBhcmFtc0NvbnRleHQgZXh0ZW5kcyBQYXJhbXMge31cblxuY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SVBhcmFtc0NvbnRleHQ+KHt9IGFzIElQYXJhbXNDb250ZXh0KVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBUaGUgUGFyYW1zUHJvdmlkZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIEluc3RlYWQsIHVzZSB0aGUgYHVzZVBhcmFtc2AgaG9vayBmcm9tIGBuZXh0L25hdmlnYXRpb25gIGRpcmVjdGx5LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BheWxvYWRjbXMvcGF5bG9hZC9wdWxsLzk1ODEuXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VQYXJhbXMgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IFBhcmFtc1Byb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIH0+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSB1c2VOZXh0UGFyYW1zKClcbiAgcmV0dXJuIDxDb250ZXh0IHZhbHVlPXtwYXJhbXN9PntjaGlsZHJlbn08L0NvbnRleHQ+XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoZSBgdXNlUGFyYW1zYCBob29rIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiBJbnN0ZWFkLCB1c2UgdGhlIGB1c2VQYXJhbXNgIGhvb2sgZnJvbSBgbmV4dC9uYXZpZ2F0aW9uYCBkaXJlY3RseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC85NTgxLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VQYXJhbXMgPSAoKTogSVBhcmFtc0NvbnRleHQgPT4gdXNlKENvbnRleHQpXG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgSTE4bkNsaWVudCwgSTE4bk9wdGlvbnMsIExhbmd1YWdlIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHR5cGUge1xuICBDbGllbnRDb25maWcsXG4gIExhbmd1YWdlT3B0aW9ucyxcbiAgTG9jYWxlLFxuICBTYW5pdGl6ZWRQZXJtaXNzaW9ucyxcbiAgU2VydmVyRnVuY3Rpb25DbGllbnQsXG4gIFR5cGVkVXNlcixcbn0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgRG5kQ29udGV4dCwgcG9pbnRlcldpdGhpbiB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBNb2RhbENvbnRhaW5lciwgTW9kYWxQcm92aWRlciB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IFNjcm9sbEluZm9Qcm92aWRlciB9IGZyb20gJ0BmYWNlbGVzcy11aS9zY3JvbGwtaW5mbydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBUaGVtZSB9IGZyb20gJy4uL1RoZW1lL2luZGV4LmpzJ1xuXG5pbXBvcnQgeyBDbG9zZU1vZGFsT25Sb3V0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0Nsb3NlTW9kYWxPblJvdXRlQ2hhbmdlL2luZGV4LmpzJ1xuaW1wb3J0IHsgTG9hZGluZ092ZXJsYXlQcm92aWRlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0xvYWRpbmdPdmVybGF5L2luZGV4LmpzJ1xuaW1wb3J0IHsgTmF2UHJvdmlkZXIgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9OYXYvY29udGV4dC5qcydcbmltcG9ydCB7IFN0YXlMb2dnZWRJbk1vZGFsIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvU3RheUxvZ2dlZEluL2luZGV4LmpzJ1xuaW1wb3J0IHsgU3RlcE5hdlByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvU3RlcE5hdi9pbmRleC5qcydcbmltcG9ydCB7IENsaWNrT3V0c2lkZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NsaWNrT3V0c2lkZS9pbmRleC5qcydcbmltcG9ydCB7IFdpbmRvd0luZm9Qcm92aWRlciB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9XaW5kb3dJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgQXV0aFByb3ZpZGVyIH0gZnJvbSAnLi4vQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IENsaWVudEZ1bmN0aW9uUHJvdmlkZXIgfSBmcm9tICcuLi9DbGllbnRGdW5jdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IENvbmZpZ1Byb3ZpZGVyIH0gZnJvbSAnLi4vQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgRG9jdW1lbnRFdmVudHNQcm92aWRlciB9IGZyb20gJy4uL0RvY3VtZW50RXZlbnRzL2luZGV4LmpzJ1xuaW1wb3J0IHsgTG9jYWxlUHJvdmlkZXIgfSBmcm9tICcuLi9Mb2NhbGUvaW5kZXguanMnXG5pbXBvcnQgeyBQYXJhbXNQcm92aWRlciB9IGZyb20gJy4uL1BhcmFtcy9pbmRleC5qcydcbmltcG9ydCB7IFByZWZlcmVuY2VzUHJvdmlkZXIgfSBmcm9tICcuLi9QcmVmZXJlbmNlcy9pbmRleC5qcydcbmltcG9ydCB7IFJvdXRlQ2FjaGUgfSBmcm9tICcuLi9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgUm91dGVUcmFuc2l0aW9uUHJvdmlkZXIgfSBmcm9tICcuLi9Sb3V0ZVRyYW5zaXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBTZWFyY2hQYXJhbXNQcm92aWRlciB9IGZyb20gJy4uL1NlYXJjaFBhcmFtcy9pbmRleC5qcydcbmltcG9ydCB7IFNlcnZlckZ1bmN0aW9uc1Byb3ZpZGVyIH0gZnJvbSAnLi4vU2VydmVyRnVuY3Rpb25zL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciB9IGZyb20gJy4uL1RoZW1lL2luZGV4LmpzJ1xuaW1wb3J0IHsgVG9hc3RDb250YWluZXIgfSBmcm9tICcuLi9Ub2FzdENvbnRhaW5lci9pbmRleC5qcydcbmltcG9ydCB7IFRyYW5zbGF0aW9uUHJvdmlkZXIgfSBmcm9tICcuLi9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFVwbG9hZEhhbmRsZXJzUHJvdmlkZXIgfSBmcm9tICcuLi9VcGxvYWRIYW5kbGVycy9pbmRleC5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICByZWFkb25seSBjb25maWc6IENsaWVudENvbmZpZ1xuICByZWFkb25seSBkYXRlRk5TS2V5OiBMYW5ndWFnZVsnZGF0ZUZOU0tleSddXG4gIHJlYWRvbmx5IGZhbGxiYWNrTGFuZzogSTE4bk9wdGlvbnNbJ2ZhbGxiYWNrTGFuZ3VhZ2UnXVxuICByZWFkb25seSBpc05hdk9wZW4/OiBib29sZWFuXG4gIHJlYWRvbmx5IGxhbmd1YWdlQ29kZTogc3RyaW5nXG4gIHJlYWRvbmx5IGxhbmd1YWdlT3B0aW9uczogTGFuZ3VhZ2VPcHRpb25zXG4gIHJlYWRvbmx5IGxvY2FsZT86IExvY2FsZVsnY29kZSddXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBTYW5pdGl6ZWRQZXJtaXNzaW9uc1xuICByZWFkb25seSBzZXJ2ZXJGdW5jdGlvbjogU2VydmVyRnVuY3Rpb25DbGllbnRcbiAgcmVhZG9ubHkgc3dpdGNoTGFuZ3VhZ2VTZXJ2ZXJBY3Rpb24/OiAobGFuZzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIHJlYWRvbmx5IHRoZW1lOiBUaGVtZVxuICByZWFkb25seSB0cmFuc2xhdGlvbnM6IEkxOG5DbGllbnRbJ3RyYW5zbGF0aW9ucyddXG4gIHJlYWRvbmx5IHVzZXI6IG51bGwgfCBUeXBlZFVzZXJcbn1cblxuZXhwb3J0IGNvbnN0IFJvb3RQcm92aWRlcjogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNvbmZpZyxcbiAgZGF0ZUZOU0tleSxcbiAgZmFsbGJhY2tMYW5nLFxuICBpc05hdk9wZW4sXG4gIGxhbmd1YWdlQ29kZSxcbiAgbGFuZ3VhZ2VPcHRpb25zLFxuICBsb2NhbGUsXG4gIHBlcm1pc3Npb25zLFxuICBzZXJ2ZXJGdW5jdGlvbixcbiAgc3dpdGNoTGFuZ3VhZ2VTZXJ2ZXJBY3Rpb24sXG4gIHRoZW1lLFxuICB0cmFuc2xhdGlvbnMsXG4gIHVzZXIsXG59KSA9PiB7XG4gIGNvbnN0IGRuZENvbnRleHRJRCA9IFJlYWN0LnVzZUlkKClcblxuICByZXR1cm4gKFxuICAgIDxDbGlja091dHNpZGVQcm92aWRlcj5cbiAgICAgIDxTZXJ2ZXJGdW5jdGlvbnNQcm92aWRlciBzZXJ2ZXJGdW5jdGlvbj17c2VydmVyRnVuY3Rpb259PlxuICAgICAgICA8Um91dGVUcmFuc2l0aW9uUHJvdmlkZXI+XG4gICAgICAgICAgPFJvdXRlQ2FjaGVcbiAgICAgICAgICAgIGNhY2hpbmdFbmFibGVkPXtwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19FTkFCTEVfUk9VVEVSX0NBQ0hFX1JFRlJFU0ggPT09ICd0cnVlJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q29uZmlnUHJvdmlkZXIgY29uZmlnPXtjb25maWd9PlxuICAgICAgICAgICAgICA8Q2xpZW50RnVuY3Rpb25Qcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8VHJhbnNsYXRpb25Qcm92aWRlclxuICAgICAgICAgICAgICAgICAgZGF0ZUZOU0tleT17ZGF0ZUZOU0tleX1cbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrTGFuZz17ZmFsbGJhY2tMYW5nfVxuICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmd1YWdlQ29kZX1cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlT3B0aW9ucz17bGFuZ3VhZ2VPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgc3dpdGNoTGFuZ3VhZ2VTZXJ2ZXJBY3Rpb249e3N3aXRjaExhbmd1YWdlU2VydmVyQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFdpbmRvd0luZm9Qcm92aWRlclxuICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50cz17e1xuICAgICAgICAgICAgICAgICAgICAgIGw6ICcobWF4LXdpZHRoOiAxNDQwcHgpJyxcbiAgICAgICAgICAgICAgICAgICAgICBtOiAnKG1heC13aWR0aDogMTAyNHB4KScsXG4gICAgICAgICAgICAgICAgICAgICAgczogJyhtYXgtd2lkdGg6IDc2OHB4KScsXG4gICAgICAgICAgICAgICAgICAgICAgeHM6ICcobWF4LXdpZHRoOiA0MDBweCknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2Nyb2xsSW5mb1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hQYXJhbXNQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNb2RhbFByb3ZpZGVyIGNsYXNzUHJlZml4PVwicGF5bG9hZFwiIHRyYW5zVGltZT17MH0gekluZGV4PVwidmFyKC0tei1tb2RhbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPENsb3NlTW9kYWxPblJvdXRlQ2hhbmdlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxBdXRoUHJvdmlkZXIgcGVybWlzc2lvbnM9e3Blcm1pc3Npb25zfSB1c2VyPXt1c2VyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJlZmVyZW5jZXNQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQYXJhbXNQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TG9jYWxlUHJvdmlkZXIgbG9jYWxlPXtsb2NhbGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0ZXBOYXZQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExvYWRpbmdPdmVybGF5UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERvY3VtZW50RXZlbnRzUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TmF2UHJvdmlkZXIgaW5pdGlhbElzT3Blbj17aXNOYXZPcGVufT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVwbG9hZEhhbmRsZXJzUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERuZENvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3ZpZGUgc3RhYmxlIElEIHRvIGZpeCBoeWRyYXRpb24gaXNzdWVzOiBodHRwczovL2dpdGh1Yi5jb20vY2xhdWRlcmljL2RuZC1raXQvaXNzdWVzLzkyNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2RuZENvbnRleHRJRH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9EbmRDb250ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1VwbG9hZEhhbmRsZXJzUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L05hdlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRG9jdW1lbnRFdmVudHNQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Mb2FkaW5nT3ZlcmxheVByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGVwTmF2UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Mb2NhbGVQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9QYXJhbXNQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1ByZWZlcmVuY2VzUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1vZGFsQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXlMb2dnZWRJbk1vZGFsIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXV0aFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Nb2RhbFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VhcmNoUGFyYW1zUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvU2Nyb2xsSW5mb1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgPC9XaW5kb3dJbmZvUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9UcmFuc2xhdGlvblByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L0NsaWVudEZ1bmN0aW9uUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0NvbmZpZ1Byb3ZpZGVyPlxuICAgICAgICAgIDwvUm91dGVDYWNoZT5cbiAgICAgICAgPC9Sb3V0ZVRyYW5zaXRpb25Qcm92aWRlcj5cbiAgICAgIDwvU2VydmVyRnVuY3Rpb25zUHJvdmlkZXI+XG4gICAgICA8VG9hc3RDb250YWluZXIgY29uZmlnPXtjb25maWd9IC8+XG4gICAgPC9DbGlja091dHNpZGVQcm92aWRlcj5cbiAgKVxufVxuIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BmYWNlbGVzcy11aS9tb2RhbCdcbmltcG9ydCB7IHVzZVBhdGhuYW1lIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlRWZmZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VFZmZlY3RFdmVudC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIENsb3NlTW9kYWxPblJvdXRlQ2hhbmdlKCkge1xuICBjb25zdCB7IGNsb3NlQWxsTW9kYWxzIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxuXG4gIGNvbnN0IGNsb3NlQWxsTW9kYWxzRWZmZWN0RXZlbnQgPSB1c2VFZmZlY3RFdmVudCgoKSA9PiB7XG4gICAgY2xvc2VBbGxNb2RhbHMoKVxuICB9KVxuXG4gIGNvbnN0IGluaXRpYWxSZW5kZXJSZWYgPSB1c2VSZWYodHJ1ZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsUmVuZGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxSZW5kZXJSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbG9zZUFsbE1vZGFsc0VmZmVjdEV2ZW50KClcbiAgfSwgW3BhdGhuYW1lXSlcblxuICByZXR1cm4gbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgKiBhcyBmYWNlbGVzc1VJSW1wb3J0IGZyb20gJ0BmYWNlbGVzcy11aS93aW5kb3ctaW5mbydcbmNvbnN0IHsgV2luZG93SW5mb1Byb3ZpZGVyIH0gPVxuICBmYWNlbGVzc1VJSW1wb3J0ICYmICdXaW5kb3dJbmZvUHJvdmlkZXInIGluIGZhY2VsZXNzVUlJbXBvcnRcbiAgICA/IGZhY2VsZXNzVUlJbXBvcnRcbiAgICA6IHsgV2luZG93SW5mb1Byb3ZpZGVyOiB1bmRlZmluZWQgfVxuY29uc3QgeyB1c2VXaW5kb3dJbmZvIH0gPVxuICBmYWNlbGVzc1VJSW1wb3J0ICYmICd1c2VXaW5kb3dJbmZvJyBpbiBmYWNlbGVzc1VJSW1wb3J0XG4gICAgPyBmYWNlbGVzc1VJSW1wb3J0XG4gICAgOiB7IHVzZVdpbmRvd0luZm86IHVuZGVmaW5lZCB9XG5leHBvcnQgeyB1c2VXaW5kb3dJbmZvLCBXaW5kb3dJbmZvUHJvdmlkZXIgfVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcyBhcyB1c2VOZXh0U2VhcmNoUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0ICogYXMgcXMgZnJvbSAncXMtZXNtJ1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZSB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBTZWFyY2hQYXJhbXNDb250ZXh0ID0ge1xuICBzZWFyY2hQYXJhbXM6IHFzLlBhcnNlZFFzXG4gIHN0cmluZ2lmeVBhcmFtczogKHsgcGFyYW1zLCByZXBsYWNlIH06IHsgcGFyYW1zOiBxcy5QYXJzZWRRczsgcmVwbGFjZT86IGJvb2xlYW4gfSkgPT4gc3RyaW5nXG59XG5cbmNvbnN0IGluaXRpYWxDb250ZXh0OiBTZWFyY2hQYXJhbXNDb250ZXh0ID0ge1xuICBzZWFyY2hQYXJhbXM6IHt9LFxuICBzdHJpbmdpZnlQYXJhbXM6ICgpID0+ICcnLFxufVxuXG5jb25zdCBDb250ZXh0ID0gY3JlYXRlQ29udGV4dChpbml0aWFsQ29udGV4dClcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogVGhlIFNlYXJjaFBhcmFtc1Byb3ZpZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiBJbnN0ZWFkLCB1c2UgdGhlIGB1c2VTZWFyY2hQYXJhbXNgIGhvb2sgZnJvbSBgbmV4dC9uYXZpZ2F0aW9uYCBkaXJlY3RseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC85NTgxLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBTZWFyY2hQYXJhbXNQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgbmV4dFNlYXJjaFBhcmFtcyA9IHVzZU5leHRTZWFyY2hQYXJhbXMoKVxuICBjb25zdCBzZWFyY2hTdHJpbmcgPSBuZXh0U2VhcmNoUGFyYW1zLnRvU3RyaW5nKClcblxuICBjb25zdCBzZWFyY2hQYXJhbXMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBxcy5wYXJzZShzZWFyY2hTdHJpbmcsIHtcbiAgICAgICAgZGVwdGg6IDEwLFxuICAgICAgICBpZ25vcmVRdWVyeVByZWZpeDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgIFtzZWFyY2hTdHJpbmddLFxuICApXG5cbiAgY29uc3Qgc3RyaW5naWZ5UGFyYW1zID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKHsgcGFyYW1zLCByZXBsYWNlID0gZmFsc2UgfTogeyBwYXJhbXM6IHFzLlBhcnNlZFFzOyByZXBsYWNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgICByZXR1cm4gcXMuc3RyaW5naWZ5KFxuICAgICAgICB7XG4gICAgICAgICAgLi4uKHJlcGxhY2UgPyB7fSA6IHNlYXJjaFBhcmFtcyksXG4gICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgICB7IGFkZFF1ZXJ5UHJlZml4OiB0cnVlIH0sXG4gICAgICApXG4gICAgfSxcbiAgICBbc2VhcmNoUGFyYW1zXSxcbiAgKVxuXG4gIHJldHVybiA8Q29udGV4dCB2YWx1ZT17eyBzZWFyY2hQYXJhbXMsIHN0cmluZ2lmeVBhcmFtcyB9fT57Y2hpbGRyZW59PC9Db250ZXh0PlxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBUaGUgYHVzZVNlYXJjaFBhcmFtc2AgaG9vayBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gSW5zdGVhZCwgdXNlIHRoZSBgdXNlU2VhcmNoUGFyYW1zYCBob29rIGZyb20gYG5leHQvbmF2aWdhdGlvbmAgZGlyZWN0bHkuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGF5bG9hZGNtcy9wYXlsb2FkL3B1bGwvOTU4MS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcbiAqIGBgYFxuICogSWYgeW91IG5lZWQgdG8gcGFyc2UgdGhlIGB3aGVyZWAgcXVlcnksIHlvdSBjYW4gZG8gc28gd2l0aCB0aGUgYHBhcnNlU2VhcmNoUGFyYW1zYCB1dGlsaXR5LlxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyBwYXJzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ0BwYXlsb2FkY21zL3VpJ1xuICogY29uc3QgcGFyc2VkU2VhcmNoUGFyYW1zID0gcGFyc2VTZWFyY2hQYXJhbXMoc2VhcmNoUGFyYW1zKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VTZWFyY2hQYXJhbXMgPSAoKTogU2VhcmNoUGFyYW1zQ29udGV4dCA9PiB1c2UoQ29udGV4dClcbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBDbGllbnRDb25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUb2FzdGVyIH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgeyBFcnJvciB9IGZyb20gJy4vaWNvbnMvRXJyb3IuanMnXG5pbXBvcnQgeyBJbmZvIH0gZnJvbSAnLi9pY29ucy9JbmZvLmpzJ1xuaW1wb3J0IHsgU3VjY2VzcyB9IGZyb20gJy4vaWNvbnMvU3VjY2Vzcy5qcydcbmltcG9ydCB7IFdhcm5pbmcgfSBmcm9tICcuL2ljb25zL1dhcm5pbmcuanMnXG5cbmV4cG9ydCBjb25zdCBUb2FzdENvbnRhaW5lcjogUmVhY3QuRkM8e1xuICBjb25maWc6IENsaWVudENvbmZpZ1xufT4gPSAoeyBjb25maWcgfSkgPT4ge1xuICBjb25zdCB7IGFkbWluOiB7IHRvYXN0OiB7IGR1cmF0aW9uLCBleHBhbmQsIGxpbWl0LCBwb3NpdGlvbiB9ID0ge30gfSA9IHt9IH0gPSBjb25maWdcblxuICByZXR1cm4gKFxuICAgIDxUb2FzdGVyXG4gICAgICBjbGFzc05hbWU9XCJwYXlsb2FkLXRvYXN0LWNvbnRhaW5lclwiXG4gICAgICBjbG9zZUJ1dHRvblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgZGlyPVwidW5kZWZpbmVkXCJcbiAgICAgIGR1cmF0aW9uPXtkdXJhdGlvbiA/PyA0MDAwfVxuICAgICAgZXhwYW5kPXtleHBhbmQgPz8gZmFsc2V9XG4gICAgICBnYXA9ezh9XG4gICAgICBpY29ucz17e1xuICAgICAgICBlcnJvcjogPEVycm9yIC8+LFxuICAgICAgICBpbmZvOiA8SW5mbyAvPixcbiAgICAgICAgc3VjY2VzczogPFN1Y2Nlc3MgLz4sXG4gICAgICAgIHdhcm5pbmc6IDxXYXJuaW5nIC8+LFxuICAgICAgfX1cbiAgICAgIG9mZnNldD1cImNhbGModmFyKC0tZ3V0dGVyLWgpIC8gMilcIlxuICAgICAgcG9zaXRpb249e3Bvc2l0aW9uID8/ICdib3R0b20tcmlnaHQnfVxuICAgICAgdG9hc3RPcHRpb25zPXt7XG4gICAgICAgIGNsYXNzTmFtZXM6IHtcbiAgICAgICAgICBjbG9zZUJ1dHRvbjogJ3BheWxvYWQtdG9hc3QtY2xvc2UtYnV0dG9uJyxcbiAgICAgICAgICBjb250ZW50OiAndG9hc3QtY29udGVudCcsXG4gICAgICAgICAgZXJyb3I6ICd0b2FzdC1lcnJvcicsXG4gICAgICAgICAgaWNvbjogJ3RvYXN0LWljb24nLFxuICAgICAgICAgIGluZm86ICd0b2FzdC1pbmZvJyxcbiAgICAgICAgICBzdWNjZXNzOiAndG9hc3Qtc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICd0b2FzdC10aXRsZScsXG4gICAgICAgICAgdG9hc3Q6ICdwYXlsb2FkLXRvYXN0LWl0ZW0nLFxuICAgICAgICAgIHdhcm5pbmc6ICd0b2FzdC13YXJuaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgdW5zdHlsZWQ6IHRydWUsXG4gICAgICB9fVxuICAgICAgdmlzaWJsZVRvYXN0cz17bGltaXQgPz8gNX1cbiAgICAvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBURnVuY3Rpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgdHlwZSB7IExvZ2luV2l0aFVzZXJuYW1lT3B0aW9ucywgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9ucyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGVtYWlsLCBnZXRGaWVsZFBlcm1pc3Npb25zLCB1c2VybmFtZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBFbWFpbEZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL0VtYWlsL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGV4dEZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL1RleHQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IEZpZWxkUGF0aENvbnRleHQgfSBmcm9tICcuLi8uLi9mb3Jtcy9SZW5kZXJGaWVsZHMvY29udGV4dC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xvZ2luLWZpZWxkcydcbnR5cGUgUmVuZGVyRW1haWxBbmRVc2VybmFtZUZpZWxkc1Byb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgbG9naW5XaXRoVXNlcm5hbWU/OiBmYWxzZSB8IExvZ2luV2l0aFVzZXJuYW1lT3B0aW9uc1xuICBvcGVyYXRpb24/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gIHBlcm1pc3Npb25zPzpcbiAgICB8IHtcbiAgICAgICAgW2ZpZWxkTmFtZTogc3RyaW5nXTogU2FuaXRpemVkRmllbGRQZXJtaXNzaW9uc1xuICAgICAgfVxuICAgIHwgdHJ1ZVxuICByZWFkT25seTogYm9vbGVhblxuICB0OiBURnVuY3Rpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVtYWlsQW5kVXNlcm5hbWVGaWVsZHMocHJvcHM6IFJlbmRlckVtYWlsQW5kVXNlcm5hbWVGaWVsZHNQcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGxvZ2luV2l0aFVzZXJuYW1lLFxuICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uRnJvbVByb3BzLFxuICAgIHBlcm1pc3Npb25zLFxuICAgIHJlYWRPbmx5LFxuICAgIHQsXG4gIH0gPSBwcm9wc1xuXG4gIGZ1bmN0aW9uIGdldEF1dGhGaWVsZFBlcm1pc3Npb24oZmllbGROYW1lOiBzdHJpbmcsIG9wZXJhdGlvbjogJ3JlYWQnIHwgJ3VwZGF0ZScpIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uc1Jlc3VsdCA9IGdldEZpZWxkUGVybWlzc2lvbnMoe1xuICAgICAgZmllbGQ6IHsgbmFtZTogZmllbGROYW1lLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uRnJvbVByb3BzID09PSAnY3JlYXRlJyA/ICdjcmVhdGUnIDogb3BlcmF0aW9uLFxuICAgICAgcGFyZW50TmFtZTogJycsXG4gICAgICBwZXJtaXNzaW9ucyxcbiAgICB9KVxuICAgIHJldHVybiBwZXJtaXNzaW9uc1Jlc3VsdC5vcGVyYXRpb25cbiAgfVxuXG4gIGNvbnN0IGhhc0VtYWlsRmllbGRPdmVycmlkZSA9XG4gICAgdHlwZW9mIHBlcm1pc3Npb25zID09PSAnb2JqZWN0JyAmJiAnZW1haWwnIGluIHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmVtYWlsXG4gIGNvbnN0IGhhc1VzZXJuYW1lRmllbGRPdmVycmlkZSA9XG4gICAgdHlwZW9mIHBlcm1pc3Npb25zID09PSAnb2JqZWN0JyAmJiAndXNlcm5hbWUnIGluIHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLnVzZXJuYW1lXG5cbiAgY29uc3QgZW1haWxQZXJtaXNzaW9ucyA9IGhhc0VtYWlsRmllbGRPdmVycmlkZVxuICAgID8ge1xuICAgICAgICByZWFkOiBnZXRBdXRoRmllbGRQZXJtaXNzaW9uKCdlbWFpbCcsICdyZWFkJyksXG4gICAgICAgIHVwZGF0ZTogZ2V0QXV0aEZpZWxkUGVybWlzc2lvbignZW1haWwnLCAndXBkYXRlJyksXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHJlYWQ6IHRydWUsXG4gICAgICAgIHVwZGF0ZTogdHJ1ZSxcbiAgICAgIH1cblxuICBjb25zdCB1c2VybmFtZVBlcm1pc3Npb25zID0gaGFzVXNlcm5hbWVGaWVsZE92ZXJyaWRlXG4gICAgPyB7XG4gICAgICAgIHJlYWQ6IGdldEF1dGhGaWVsZFBlcm1pc3Npb24oJ3VzZXJuYW1lJywgJ3JlYWQnKSxcbiAgICAgICAgdXBkYXRlOiBnZXRBdXRoRmllbGRQZXJtaXNzaW9uKCd1c2VybmFtZScsICd1cGRhdGUnKSxcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgcmVhZDogdHJ1ZSxcbiAgICAgICAgdXBkYXRlOiB0cnVlLFxuICAgICAgfVxuXG4gIGNvbnN0IHNob3dFbWFpbEZpZWxkID1cbiAgICAoIWxvZ2luV2l0aFVzZXJuYW1lIHx8IGxvZ2luV2l0aFVzZXJuYW1lPy5yZXF1aXJlRW1haWwgfHwgbG9naW5XaXRoVXNlcm5hbWU/LmFsbG93RW1haWxMb2dpbikgJiZcbiAgICBlbWFpbFBlcm1pc3Npb25zLnJlYWRcblxuICBjb25zdCBzaG93VXNlcm5hbWVGaWVsZCA9IEJvb2xlYW4obG9naW5XaXRoVXNlcm5hbWUpICYmIHVzZXJuYW1lUGVybWlzc2lvbnMucmVhZFxuXG4gIGlmIChzaG93RW1haWxGaWVsZCB8fCBzaG93VXNlcm5hbWVGaWVsZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgY2xhc3NOYW1lICYmIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICAgIHtzaG93RW1haWxGaWVsZCA/IChcbiAgICAgICAgICA8RmllbGRQYXRoQ29udGV4dCB2YWx1ZT1cImVtYWlsXCI+XG4gICAgICAgICAgICA8RW1haWxGaWVsZFxuICAgICAgICAgICAgICBmaWVsZD17e1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogJ29mZicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDplbWFpbCcpLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOlxuICAgICAgICAgICAgICAgICAgIWxvZ2luV2l0aFVzZXJuYW1lIHx8IChsb2dpbldpdGhVc2VybmFtZSAmJiBsb2dpbldpdGhVc2VybmFtZS5yZXF1aXJlRW1haWwpLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBwYXRoPVwiZW1haWxcIlxuICAgICAgICAgICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgIWVtYWlsUGVybWlzc2lvbnMudXBkYXRlfVxuICAgICAgICAgICAgICBzY2hlbWFQYXRoPVwiZW1haWxcIlxuICAgICAgICAgICAgICB2YWxpZGF0ZT17ZW1haWx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRmllbGRQYXRoQ29udGV4dD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtzaG93VXNlcm5hbWVGaWVsZCAmJiAoXG4gICAgICAgICAgPEZpZWxkUGF0aENvbnRleHQgdmFsdWU9XCJ1c2VybmFtZVwiPlxuICAgICAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgICAgICBmaWVsZD17e1xuICAgICAgICAgICAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICAgICAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogJ29mZicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdCgnYXV0aGVudGljYXRpb246dXNlcm5hbWUnKSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogbG9naW5XaXRoVXNlcm5hbWUgJiYgbG9naW5XaXRoVXNlcm5hbWUucmVxdWlyZVVzZXJuYW1lLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBwYXRoPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICByZWFkT25seT17cmVhZE9ubHkgfHwgIXVzZXJuYW1lUGVybWlzc2lvbnMudXBkYXRlfVxuICAgICAgICAgICAgICBzY2hlbWFQYXRoPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICB2YWxpZGF0ZT17dXNlcm5hbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRmllbGRQYXRoQ29udGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9DaGVja2JveC9JbnB1dC5qcydcbmltcG9ydCB7IFNlbGVjdEFsbFN0YXR1cywgdXNlU2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzZWxlY3QtYWxsJ1xuXG5leHBvcnQgY29uc3QgU2VsZWN0QWxsOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBzZWxlY3RBbGwsIHRvZ2dsZUFsbCB9ID0gdXNlU2VsZWN0aW9uKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgcmV0dXJuIChcbiAgICA8Q2hlY2tib3hJbnB1dFxuICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgIHNlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLk5vbmVcbiAgICAgICAgICA/IGkxOG4udCgnZ2VuZXJhbDpzZWxlY3RBbGxSb3dzJylcbiAgICAgICAgICA6IGkxOG4udCgnZ2VuZXJhbDpkZXNlbGVjdEFsbFJvd3MnKVxuICAgICAgfVxuICAgICAgY2hlY2tlZD17XG4gICAgICAgIHNlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLkFsbEluUGFnZSB8fCBzZWxlY3RBbGwgPT09IFNlbGVjdEFsbFN0YXR1cy5BbGxBdmFpbGFibGVcbiAgICAgIH1cbiAgICAgIGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgYCR7YmFzZUNsYXNzfV9fY2hlY2tib3hgXS5qb2luKCcgJyl9XG4gICAgICBpZD1cInNlbGVjdC1hbGxcIlxuICAgICAgbmFtZT1cInNlbGVjdC1hbGxcIlxuICAgICAgb25Ub2dnbGU9eygpID0+IHRvZ2dsZUFsbCgpfVxuICAgICAgcGFydGlhbENoZWNrZWQ9e3NlbGVjdEFsbCA9PT0gU2VsZWN0QWxsU3RhdHVzLlNvbWV9XG4gICAgLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IENsaWVudFVzZXIgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENoZWNrYm94SW5wdXQgfSBmcm9tICcuLi8uLi9maWVsZHMvQ2hlY2tib3gvSW5wdXQuanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgTG9ja2VkIH0gZnJvbSAnLi4vTG9ja2VkL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzZWxlY3Qtcm93J1xuXG5leHBvcnQgY29uc3QgU2VsZWN0Um93OiBSZWFjdC5GQzx7XG4gIHJvd0RhdGE6IHtcbiAgICBfaXNMb2NrZWQ6IGJvb2xlYW5cbiAgICBfdXNlckVkaXRpbmc6IENsaWVudFVzZXJcbiAgICBpZDogc3RyaW5nXG4gIH1cbn0+ID0gKHsgcm93RGF0YSB9KSA9PiB7XG4gIGNvbnN0IHsgdXNlciB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgc2VsZWN0ZWQsIHNldFNlbGVjdGlvbiB9ID0gdXNlU2VsZWN0aW9uKClcbiAgY29uc3QgeyBfaXNMb2NrZWQsIF91c2VyRWRpdGluZyB9ID0gcm93RGF0YSB8fCB7fVxuXG4gIGNvbnN0IGRvY3VtZW50SXNMb2NrZWQgPSBfaXNMb2NrZWQgJiYgX3VzZXJFZGl0aW5nXG5cbiAgaWYgKGRvY3VtZW50SXNMb2NrZWQgJiYgX3VzZXJFZGl0aW5nLmlkICE9PSB1c2VyPy5pZCkge1xuICAgIHJldHVybiA8TG9ja2VkIHVzZXI9e191c2VyRWRpdGluZ30gLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENoZWNrYm94SW5wdXRcbiAgICAgIGNoZWNrZWQ9e0Jvb2xlYW4oc2VsZWN0ZWQuZ2V0KHJvd0RhdGEuaWQpKX1cbiAgICAgIGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgYCR7YmFzZUNsYXNzfV9fY2hlY2tib3hgXS5qb2luKCcgJyl9XG4gICAgICBvblRvZ2dsZT17KCkgPT4gc2V0U2VsZWN0aW9uKHJvd0RhdGEuaWQpfVxuICAgIC8+XG4gIClcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlU2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1NlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGlsbCB9IGZyb20gJy4uL1BpbGwvaW5kZXguanMnXG5cbmV4cG9ydCBjb25zdCBTZWxlY3RNYW55OiBSZWFjdC5GQzx7XG4gIG9uQ2xpY2s/OiAoaWRzOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VTZWxlY3Rpb24+WydzZWxlY3RlZCddKSA9PiB2b2lkXG59PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IG9uQ2xpY2sgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBjb3VudCwgc2VsZWN0ZWQgfSA9IHVzZVNlbGVjdGlvbigpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGlmICghc2VsZWN0ZWQgfHwgIWNvdW50KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBpbGxcbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25DbGljayhzZWxlY3RlZClcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIHBpbGxTdHlsZT1cIndoaXRlXCJcbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgPlxuICAgICAge3QoJ2dlbmVyYWw6c2VsZWN0Jyl9IHtjb3VudH1cbiAgICA8L1BpbGw+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IExpc3RWaWV3Q2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMLCBmb3JtYXRGaWxlc2l6ZSB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQnVsa1VwbG9hZCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0J1bGtVcGxvYWQvaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBHdXR0ZXIgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9HdXR0ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0Q29udHJvbHMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9MaXN0Q29udHJvbHMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0RHJhd2VyQ29udGV4dCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0xpc3REcmF3ZXIvUHJvdmlkZXIuanMnXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL01vZGFsL2luZGV4LmpzJ1xuaW1wb3J0IHsgTm9MaXN0UmVzdWx0cyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL05vTGlzdFJlc3VsdHMvaW5kZXguanMnXG5pbXBvcnQgeyBQYWdlQ29udHJvbHMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9QYWdlQ29udHJvbHMvaW5kZXguanMnXG5pbXBvcnQgeyBSZW5kZXJDdXN0b21Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9SZW5kZXJDdXN0b21Db21wb25lbnQvaW5kZXguanMnXG5pbXBvcnQgeyBTZWxlY3RNYW55IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvU2VsZWN0TWFueS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVN0ZXBOYXYgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9TdGVwTmF2L2luZGV4LmpzJ1xuaW1wb3J0IHsgU3RpY2t5VG9vbGJhciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1N0aWNreVRvb2xiYXIvaW5kZXguanMnXG5pbXBvcnQgeyBSZWxhdGlvbnNoaXBQcm92aWRlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1RhYmxlL1JlbGF0aW9uc2hpcFByb3ZpZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgVmlld0Rlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvVmlld0Rlc2NyaXB0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VDb250cm9sbGFibGVTdGF0ZS5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXN0UXVlcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvTGlzdFF1ZXJ5L2luZGV4LmpzJ1xuaW1wb3J0IHsgU2VsZWN0aW9uUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvU2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgVGFibGVDb2x1bW5zUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVGFibGVDb2x1bW5zL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VXaW5kb3dJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1dpbmRvd0luZm8vaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0U2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vdmlld3MvTGlzdC9MaXN0U2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29sbGVjdGlvbkxpc3RIZWFkZXIgfSBmcm9tICcuL0xpc3RIZWFkZXIvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2NvbGxlY3Rpb24tbGlzdCdcblxuZXhwb3J0IGZ1bmN0aW9uIERlZmF1bHRMaXN0Vmlldyhwcm9wczogTGlzdFZpZXdDbGllbnRQcm9wcykge1xuICBjb25zdCB7XG4gICAgQWZ0ZXJMaXN0LFxuICAgIEFmdGVyTGlzdFRhYmxlLFxuICAgIGJlZm9yZUFjdGlvbnMsXG4gICAgQmVmb3JlTGlzdCxcbiAgICBCZWZvcmVMaXN0VGFibGUsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgY29sdW1uU3RhdGUsXG4gICAgRGVzY3JpcHRpb24sXG4gICAgZGlzYWJsZUJ1bGtEZWxldGUsXG4gICAgZGlzYWJsZUJ1bGtFZGl0LFxuICAgIGRpc2FibGVRdWVyeVByZXNldHMsXG4gICAgZW5hYmxlUm93U2VsZWN0aW9ucyxcbiAgICBoYXNDcmVhdGVQZXJtaXNzaW9uOiBoYXNDcmVhdGVQZXJtaXNzaW9uRnJvbVByb3BzLFxuICAgIGhhc0RlbGV0ZVBlcm1pc3Npb24sXG4gICAgaGFzVHJhc2hQZXJtaXNzaW9uLFxuICAgIGxpc3RNZW51SXRlbXMsXG4gICAgbmV3RG9jdW1lbnRVUkwsXG4gICAgcXVlcnlQcmVzZXQsXG4gICAgcXVlcnlQcmVzZXRQZXJtaXNzaW9ucyxcbiAgICByZW5kZXJlZEZpbHRlcnMsXG4gICAgcmVzb2x2ZWRGaWx0ZXJPcHRpb25zLFxuICAgIFRhYmxlOiBJbml0aWFsVGFibGUsXG4gICAgdmlld1R5cGUsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtUYWJsZV0gPSB1c2VDb250cm9sbGFibGVTdGF0ZShJbml0aWFsVGFibGUpXG5cbiAgY29uc3QgeyBhbGxvd0NyZWF0ZSwgY3JlYXRlTmV3RHJhd2VyU2x1ZywgaXNJbkRyYXdlciwgb25CdWxrU2VsZWN0IH0gPSB1c2VMaXN0RHJhd2VyQ29udGV4dCgpXG5cbiAgY29uc3QgaGFzQ3JlYXRlUGVybWlzc2lvbiA9XG4gICAgYWxsb3dDcmVhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBhbGxvd0NyZWF0ZSAmJiBoYXNDcmVhdGVQZXJtaXNzaW9uRnJvbVByb3BzXG4gICAgICA6IGhhc0NyZWF0ZVBlcm1pc3Npb25Gcm9tUHJvcHNcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYWRtaW46IGFkbWluUm91dGUgfSxcbiAgICAgIHNlcnZlclVSTCxcbiAgICB9LFxuICAgIGdldEVudGl0eUNvbmZpZyxcbiAgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG5cbiAgY29uc3QgeyBkYXRhLCBpc0dyb3VwaW5nQnkgfSA9IHVzZUxpc3RRdWVyeSgpXG5cbiAgY29uc3QgeyBvcGVuTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyBkcmF3ZXJTbHVnOiBidWxrVXBsb2FkRHJhd2VyU2x1Zywgc2V0Q29sbGVjdGlvblNsdWcsIHNldE9uU3VjY2VzcyB9ID0gdXNlQnVsa1VwbG9hZCgpXG5cbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnIH0pXG5cbiAgY29uc3QgeyBsYWJlbHMsIHVwbG9hZCB9ID0gY29sbGVjdGlvbkNvbmZpZ1xuXG4gIGNvbnN0IGlzVXBsb2FkQ29sbGVjdGlvbiA9IEJvb2xlYW4odXBsb2FkKVxuXG4gIGNvbnN0IGlzQnVsa1VwbG9hZEVuYWJsZWQgPSBpc1VwbG9hZENvbGxlY3Rpb24gJiYgY29sbGVjdGlvbkNvbmZpZy51cGxvYWQuYnVsa1VwbG9hZFxuXG4gIGNvbnN0IGlzVHJhc2hFbmFibGVkID0gQm9vbGVhbihjb2xsZWN0aW9uQ29uZmlnLnRyYXNoKVxuXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHsgc2V0U3RlcE5hdiB9ID0gdXNlU3RlcE5hdigpXG5cbiAgY29uc3Qge1xuICAgIGJyZWFrcG9pbnRzOiB7IHM6IHNtYWxsQnJlYWsgfSxcbiAgfSA9IHVzZVdpbmRvd0luZm8oKVxuXG4gIGNvbnN0IGRvY3MgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNVcGxvYWRDb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gZGF0YS5kb2NzLm1hcCgoZG9jKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZG9jLFxuICAgICAgICAgIGZpbGVzaXplOiBmb3JtYXRGaWxlc2l6ZShkb2MuZmlsZXNpemUpLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGF0YT8uZG9jc1xuICAgIH1cbiAgfSwgW2RhdGE/LmRvY3MsIGlzVXBsb2FkQ29sbGVjdGlvbl0pXG5cbiAgY29uc3Qgb3BlbkJ1bGtVcGxvYWQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0Q29sbGVjdGlvblNsdWcoY29sbGVjdGlvblNsdWcpXG4gICAgb3Blbk1vZGFsKGJ1bGtVcGxvYWREcmF3ZXJTbHVnKVxuICAgIHNldE9uU3VjY2VzcygoKSA9PiByb3V0ZXIucmVmcmVzaCgpKVxuICB9LCBbcm91dGVyLCBjb2xsZWN0aW9uU2x1ZywgYnVsa1VwbG9hZERyYXdlclNsdWcsIG9wZW5Nb2RhbCwgc2V0Q29sbGVjdGlvblNsdWcsIHNldE9uU3VjY2Vzc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzSW5EcmF3ZXIpIHtcbiAgICAgIGNvbnN0IGJhc2VMYWJlbCA9IHtcbiAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVscz8ucGx1cmFsLCBpMThuKSxcbiAgICAgICAgdXJsOlxuICAgICAgICAgIGlzVHJhc2hFbmFibGVkICYmIHZpZXdUeXBlID09PSAndHJhc2gnXG4gICAgICAgICAgICA/IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICBhZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgIHBhdGg6IGAvY29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uU2x1Z31gLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYXNoTGFiZWwgPSB7XG4gICAgICAgIGxhYmVsOiBpMThuLnQoJ2dlbmVyYWw6dHJhc2gnKSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmF2SXRlbXMgPVxuICAgICAgICBpc1RyYXNoRW5hYmxlZCAmJiB2aWV3VHlwZSA9PT0gJ3RyYXNoJyA/IFtiYXNlTGFiZWwsIHRyYXNoTGFiZWxdIDogW2Jhc2VMYWJlbF1cblxuICAgICAgc2V0U3RlcE5hdihuYXZJdGVtcylcbiAgICB9XG4gIH0sIFtcbiAgICBhZG1pblJvdXRlLFxuICAgIHNldFN0ZXBOYXYsXG4gICAgc2VydmVyVVJMLFxuICAgIGxhYmVscyxcbiAgICBpc0luRHJhd2VyLFxuICAgIGlzVHJhc2hFbmFibGVkLFxuICAgIHZpZXdUeXBlLFxuICAgIGkxOG4sXG4gICAgY29sbGVjdGlvblNsdWcsXG4gIF0pXG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICA8VGFibGVDb2x1bW5zUHJvdmlkZXIgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25TbHVnfSBjb2x1bW5TdGF0ZT17Y29sdW1uU3RhdGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfSAke2Jhc2VDbGFzc30tLSR7Y29sbGVjdGlvblNsdWd9YH0+XG4gICAgICAgICAgPFNlbGVjdGlvblByb3ZpZGVyIGRvY3M9e2RvY3N9IHRvdGFsRG9jcz17ZGF0YT8udG90YWxEb2NzfT5cbiAgICAgICAgICAgIHtCZWZvcmVMaXN0fVxuICAgICAgICAgICAgPEd1dHRlciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgICAgICAgPENvbGxlY3Rpb25MaXN0SGVhZGVyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbj17XG4gICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiB8fCBjb2xsZWN0aW9uQ29uZmlnPy5hZG1pbj8uZGVzY3JpcHRpb24gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zdWItaGVhZGVyYH0+XG4gICAgICAgICAgICAgICAgICAgICAgPFJlbmRlckN1c3RvbUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIEZhbGxiYWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXdEZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17Y29sbGVjdGlvbkNvbmZpZz8uYWRtaW4/LmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlQnVsa0RlbGV0ZT17ZGlzYWJsZUJ1bGtEZWxldGV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZUJ1bGtFZGl0PXtkaXNhYmxlQnVsa0VkaXR9XG4gICAgICAgICAgICAgICAgaGFzQ3JlYXRlUGVybWlzc2lvbj17aGFzQ3JlYXRlUGVybWlzc2lvbn1cbiAgICAgICAgICAgICAgICBoYXNEZWxldGVQZXJtaXNzaW9uPXtoYXNEZWxldGVQZXJtaXNzaW9ufVxuICAgICAgICAgICAgICAgIGhhc1RyYXNoUGVybWlzc2lvbj17aGFzVHJhc2hQZXJtaXNzaW9ufVxuICAgICAgICAgICAgICAgIGkxOG49e2kxOG59XG4gICAgICAgICAgICAgICAgaXNCdWxrVXBsb2FkRW5hYmxlZD17aXNCdWxrVXBsb2FkRW5hYmxlZCAmJiAhdXBsb2FkLmhpZGVGaWxlSW5wdXRPbkNyZWF0ZX1cbiAgICAgICAgICAgICAgICBpc1RyYXNoRW5hYmxlZD17aXNUcmFzaEVuYWJsZWR9XG4gICAgICAgICAgICAgICAgbmV3RG9jdW1lbnRVUkw9e25ld0RvY3VtZW50VVJMfVxuICAgICAgICAgICAgICAgIG9wZW5CdWxrVXBsb2FkPXtvcGVuQnVsa1VwbG9hZH1cbiAgICAgICAgICAgICAgICBzbWFsbEJyZWFrPXtzbWFsbEJyZWFrfVxuICAgICAgICAgICAgICAgIHZpZXdUeXBlPXt2aWV3VHlwZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPExpc3RDb250cm9sc1xuICAgICAgICAgICAgICAgIGJlZm9yZUFjdGlvbnM9e1xuICAgICAgICAgICAgICAgICAgZW5hYmxlUm93U2VsZWN0aW9ucyAmJiB0eXBlb2Ygb25CdWxrU2VsZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gYmVmb3JlQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgID8gWy4uLmJlZm9yZUFjdGlvbnMsIDxTZWxlY3RNYW55IGtleT1cInNlbGVjdC1tYW55XCIgb25DbGljaz17b25CdWxrU2VsZWN0fSAvPl1cbiAgICAgICAgICAgICAgICAgICAgICA6IFs8U2VsZWN0TWFueSBrZXk9XCJzZWxlY3QtbWFueVwiIG9uQ2xpY2s9e29uQnVsa1NlbGVjdH0gLz5dXG4gICAgICAgICAgICAgICAgICAgIDogYmVmb3JlQWN0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnPXtjb2xsZWN0aW9uQ29uZmlnfVxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uU2x1Z31cbiAgICAgICAgICAgICAgICBkaXNhYmxlUXVlcnlQcmVzZXRzPXtcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc/LmVuYWJsZVF1ZXJ5UHJlc2V0cyAhPT0gdHJ1ZSB8fCBkaXNhYmxlUXVlcnlQcmVzZXRzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpc3RNZW51SXRlbXM9e2xpc3RNZW51SXRlbXN9XG4gICAgICAgICAgICAgICAgcXVlcnlQcmVzZXQ9e3F1ZXJ5UHJlc2V0fVxuICAgICAgICAgICAgICAgIHF1ZXJ5UHJlc2V0UGVybWlzc2lvbnM9e3F1ZXJ5UHJlc2V0UGVybWlzc2lvbnN9XG4gICAgICAgICAgICAgICAgcmVuZGVyZWRGaWx0ZXJzPXtyZW5kZXJlZEZpbHRlcnN9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRGaWx0ZXJPcHRpb25zPXtyZXNvbHZlZEZpbHRlck9wdGlvbnN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtCZWZvcmVMaXN0VGFibGV9XG4gICAgICAgICAgICAgIHtkb2NzPy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGFibGVzYH0+XG4gICAgICAgICAgICAgICAgICA8UmVsYXRpb25zaGlwUHJvdmlkZXI+e1RhYmxlfTwvUmVsYXRpb25zaGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtkb2NzPy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxOb0xpc3RSZXN1bHRzXG4gICAgICAgICAgICAgICAgICBBY3Rpb25zPXtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ3JlYXRlUGVybWlzc2lvbiAmJiBuZXdEb2N1bWVudFVSTCAmJiB2aWV3VHlwZSAhPT0gJ3RyYXNoJ1xuICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0luRHJhd2VyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1cImNyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoY3JlYXRlTmV3RHJhd2VyU2x1Zyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZ2VuZXJhbDpjcmVhdGVOZXdMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVscz8uc2luZ3VsYXIsIGkxOG4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBlbD1cImxpbmtcIiBrZXk9XCJjcmVhdGVcIiB0bz17bmV3RG9jdW1lbnRVUkx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZ2VuZXJhbDpjcmVhdGVOZXdMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVscz8uc2luZ3VsYXIsIGkxOG4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgTWVzc2FnZT17XG4gICAgICAgICAgICAgICAgICAgIHZpZXdUeXBlID09PSAndHJhc2gnID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZ2VuZXJhbDpub1RyYXNoUmVzdWx0cycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKGxhYmVscz8ucGx1cmFsLCBpMThuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzPntpMThuLnQoJ2dlbmVyYWw6bm9SZXN1bHRzRm91bmQnKX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZ2VuZXJhbDpub1Jlc3VsdHNEZXNjcmlwdGlvbicpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtBZnRlckxpc3RUYWJsZX1cbiAgICAgICAgICAgICAge2RvY3M/Lmxlbmd0aCA+IDAgJiYgIWlzR3JvdXBpbmdCeSAmJiAoXG4gICAgICAgICAgICAgICAgPFBhZ2VDb250cm9sc1xuICAgICAgICAgICAgICAgICAgQWZ0ZXJQYWdlQ29udHJvbHM9e1xuICAgICAgICAgICAgICAgICAgICBzbWFsbEJyZWFrID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19saXN0LXNlbGVjdGlvbmB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3RTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJ1bGtEZWxldGU9e2Rpc2FibGVCdWxrRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQnVsa0VkaXQ9e2Rpc2FibGVCdWxrRWRpdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2dldFRyYW5zbGF0aW9uKGNvbGxlY3Rpb25Db25maWcubGFiZWxzLnBsdXJhbCwgaTE4bil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWxlY3RBbGxBY3Jvc3NQYWdlcz17IWlzR3JvdXBpbmdCeX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGlzdC1zZWxlY3Rpb24tYWN0aW9uc2B9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZW5hYmxlUm93U2VsZWN0aW9ucyAmJiB0eXBlb2Ygb25CdWxrU2VsZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBiZWZvcmVBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5iZWZvcmVBY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RNYW55IGtleT1cInNlbGVjdC1tYW55XCIgb25DbGljaz17b25CdWxrU2VsZWN0fSAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbPFNlbGVjdE1hbnkga2V5PVwic2VsZWN0LW1hbnlcIiBvbkNsaWNrPXtvbkJ1bGtTZWxlY3R9IC8+XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYmVmb3JlQWN0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbkNvbmZpZz17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9HdXR0ZXI+XG4gICAgICAgICAgICB7QWZ0ZXJMaXN0fVxuICAgICAgICAgIDwvU2VsZWN0aW9uUHJvdmlkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9UYWJsZUNvbHVtbnNQcm92aWRlcj5cbiAgICAgIHtkb2NzPy5sZW5ndGggPiAwICYmIGlzR3JvdXBpbmdCeSAmJiBkYXRhLnRvdGFsUGFnZXMgPiAxICYmIChcbiAgICAgICAgPFN0aWNreVRvb2xiYXI+XG4gICAgICAgICAgPFBhZ2VDb250cm9scyBjb2xsZWN0aW9uQ29uZmlnPXtjb2xsZWN0aW9uQ29uZmlnfSAvPlxuICAgICAgICA8L1N0aWNreVRvb2xiYXI+XG4gICAgICApfVxuICAgIDwvRnJhZ21lbnQ+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IERyYWdFbmRFdmVudCB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IEZvbGRlckxpc3RWaWV3Q2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VEbmRNb25pdG9yIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgZm9ybWF0QWRtaW5VUkwgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBEZWZhdWx0TGlzdFZpZXdUYWJzIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRGVmYXVsdExpc3RWaWV3VGFicy9pbmRleC5qcydcbmltcG9ydCB7IERyb3BwYWJsZUJyZWFkY3J1bWIgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Gb2xkZXJWaWV3L0JyZWFkY3J1bWJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29sb3JlZEZvbGRlckljb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Gb2xkZXJWaWV3L0NvbG9yZWRGb2xkZXJJY29uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ3VycmVudEZvbGRlckFjdGlvbnMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Gb2xkZXJWaWV3L0N1cnJlbnRGb2xkZXJBY3Rpb25zL2luZGV4LmpzJ1xuaW1wb3J0IHsgRHJhZ092ZXJsYXlTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Gb2xkZXJWaWV3L0RyYWdPdmVybGF5U2VsZWN0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgU29ydEJ5UGlsbCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvU29ydEJ5UGlsbC9pbmRleC5qcydcbmltcG9ydCB7IFRvZ2dsZVZpZXdCdXR0b25zIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRm9sZGVyVmlldy9Ub2dnbGVWaWV3QnV0dG9ucy9pbmRleC5qcydcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0d1dHRlci9pbmRleC5qcydcbmltcG9ydCB7IExpc3RIZWFkZXIgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9MaXN0SGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHtcbiAgTGlzdEJ1bGtVcGxvYWRCdXR0b24sXG4gIExpc3RDcmVhdGVOZXdEb2NJbkZvbGRlckJ1dHRvbixcbn0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTGlzdEhlYWRlci9UaXRsZUFjdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyBOb0xpc3RSZXN1bHRzIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTm9MaXN0UmVzdWx0cy9pbmRleC5qcydcbmltcG9ydCB7IFNlYXJjaEJhciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1NlYXJjaEJhci9pbmRleC5qcydcbmltcG9ydCB7IHVzZVN0ZXBOYXYgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9TdGVwTmF2L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUVkaXREZXB0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9FZGl0RGVwdGgvaW5kZXguanMnXG5pbXBvcnQgeyBGb2xkZXJQcm92aWRlciwgdXNlRm9sZGVyIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0ZvbGRlcnMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9QcmVmZXJlbmNlcy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlQ2FjaGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUm91dGVDYWNoZS9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlV2luZG93SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9XaW5kb3dJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgTGlzdFNlbGVjdGlvbiB9IGZyb20gJy4vTGlzdFNlbGVjdGlvbi9pbmRleC5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2NvbGxlY3Rpb24tZm9sZGVyLWxpc3QnXG5cbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0Q29sbGVjdGlvbkZvbGRlclZpZXcoe1xuICBhbGxDb2xsZWN0aW9uRm9sZGVyU2x1Z3M6IGZvbGRlckNvbGxlY3Rpb25TbHVncyxcbiAgYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MsXG4gIGJhc2VGb2xkZXJQYXRoLFxuICBicmVhZGNydW1icyxcbiAgZG9jdW1lbnRzLFxuICBmb2xkZXJGaWVsZE5hbWUsXG4gIGZvbGRlcklELFxuICBGb2xkZXJSZXN1bHRzQ29tcG9uZW50LFxuICBzZWFyY2gsXG4gIHNvcnQsXG4gIHN1YmZvbGRlcnMsXG4gIC4uLnJlc3RPZlByb3BzXG59OiBGb2xkZXJMaXN0Vmlld0NsaWVudFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPEZvbGRlclByb3ZpZGVyXG4gICAgICBhbGxDb2xsZWN0aW9uRm9sZGVyU2x1Z3M9e2ZvbGRlckNvbGxlY3Rpb25TbHVnc31cbiAgICAgIGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzPXthbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVnc31cbiAgICAgIGJhc2VGb2xkZXJQYXRoPXtiYXNlRm9sZGVyUGF0aH1cbiAgICAgIGJyZWFkY3J1bWJzPXticmVhZGNydW1ic31cbiAgICAgIGRvY3VtZW50cz17ZG9jdW1lbnRzfVxuICAgICAgZm9sZGVyRmllbGROYW1lPXtmb2xkZXJGaWVsZE5hbWV9XG4gICAgICBmb2xkZXJJRD17Zm9sZGVySUR9XG4gICAgICBGb2xkZXJSZXN1bHRzQ29tcG9uZW50PXtGb2xkZXJSZXN1bHRzQ29tcG9uZW50fVxuICAgICAgc2VhcmNoPXtzZWFyY2h9XG4gICAgICBzb3J0PXtzb3J0fVxuICAgICAgc3ViZm9sZGVycz17c3ViZm9sZGVyc31cbiAgICA+XG4gICAgICA8Q29sbGVjdGlvbkZvbGRlclZpZXdJbkNvbnRleHQgey4uLnJlc3RPZlByb3BzfSAvPlxuICAgIDwvRm9sZGVyUHJvdmlkZXI+XG4gIClcbn1cblxudHlwZSBDb2xsZWN0aW9uRm9sZGVyVmlld0luQ29udGV4dFByb3BzID0gT21pdDxcbiAgRm9sZGVyTGlzdFZpZXdDbGllbnRQcm9wcyxcbiAgfCAnYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzJ1xuICB8ICdhbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVncydcbiAgfCAnYmFzZUZvbGRlclBhdGgnXG4gIHwgJ2JyZWFkY3J1bWJzJ1xuICB8ICdkb2N1bWVudHMnXG4gIHwgJ2ZvbGRlckZpZWxkTmFtZSdcbiAgfCAnZm9sZGVySUQnXG4gIHwgJ0ZvbGRlclJlc3VsdHNDb21wb25lbnQnXG4gIHwgJ3N1YmZvbGRlcnMnXG4+XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb25Gb2xkZXJWaWV3SW5Db250ZXh0KHByb3BzOiBDb2xsZWN0aW9uRm9sZGVyVmlld0luQ29udGV4dFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBBZnRlckZvbGRlckxpc3QsXG4gICAgQWZ0ZXJGb2xkZXJMaXN0VGFibGUsXG4gICAgQmVmb3JlRm9sZGVyTGlzdCxcbiAgICBCZWZvcmVGb2xkZXJMaXN0VGFibGUsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgRGVzY3JpcHRpb24sXG4gICAgZGlzYWJsZUJ1bGtEZWxldGUsXG4gICAgZGlzYWJsZUJ1bGtFZGl0LFxuICAgIHNlYXJjaCxcbiAgICB2aWV3UHJlZmVyZW5jZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgeyBjb25maWcsIGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IGRyYXdlckRlcHRoID0gdXNlRWRpdERlcHRoKClcbiAgY29uc3QgeyBzZXRTdGVwTmF2IH0gPSB1c2VTdGVwTmF2KClcbiAgY29uc3QgeyBzZXRQcmVmZXJlbmNlIH0gPSB1c2VQcmVmZXJlbmNlcygpXG4gIGNvbnN0IHtcbiAgICBhbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVncyxcbiAgICBicmVhZGNydW1icyxcbiAgICBkb2N1bWVudHMsXG4gICAgZHJhZ092ZXJsYXlJdGVtLFxuICAgIGZvbGRlckNvbGxlY3Rpb25Db25maWcsXG4gICAgZm9sZGVyQ29sbGVjdGlvblNsdWcsXG4gICAgRm9sZGVyUmVzdWx0c0NvbXBvbmVudCxcbiAgICBmb2xkZXJUeXBlLFxuICAgIGdldFNlbGVjdGVkSXRlbXMsXG4gICAgbW92ZVRvRm9sZGVyLFxuICAgIHJlZmluZUZvbGRlckRhdGEsXG4gICAgc2VsZWN0ZWRJdGVtS2V5cyxcbiAgICBzZXRJc0RyYWdnaW5nLFxuICAgIHN1YmZvbGRlcnMsXG4gIH0gPSB1c2VGb2xkZXIoKVxuXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IHsgc3RhcnRSb3V0ZVRyYW5zaXRpb24gfSA9IHVzZVJvdXRlVHJhbnNpdGlvbigpXG4gIGNvbnN0IHsgY2xlYXJSb3V0ZUNhY2hlIH0gPSB1c2VSb3V0ZUNhY2hlKClcblxuICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWcgfSlcblxuICBjb25zdCB7IGxhYmVscywgdXBsb2FkIH0gPSBjb2xsZWN0aW9uQ29uZmlnXG4gIGNvbnN0IGlzVXBsb2FkQ29sbGVjdGlvbiA9IEJvb2xlYW4odXBsb2FkKVxuICBjb25zdCBpc0J1bGtVcGxvYWRFbmFibGVkID0gaXNVcGxvYWRDb2xsZWN0aW9uICYmIGNvbGxlY3Rpb25Db25maWcudXBsb2FkLmJ1bGtVcGxvYWRcblxuICBjb25zdCB7XG4gICAgYnJlYWtwb2ludHM6IHsgczogc21hbGxCcmVhayB9LFxuICB9ID0gdXNlV2luZG93SW5mbygpXG5cbiAgY29uc3Qgb25EcmFnRW5kID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGV2ZW50OiBEcmFnRW5kRXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQub3Zlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50Lm92ZXIuZGF0YS5jdXJyZW50LnR5cGUgPT09ICdmb2xkZXInICYmICdpZCcgaW4gZXZlbnQub3Zlci5kYXRhLmN1cnJlbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBtb3ZlVG9Gb2xkZXIoe1xuICAgICAgICAgICAgaXRlbXNUb01vdmU6IGdldFNlbGVjdGVkSXRlbXMoKSxcbiAgICAgICAgICAgIHRvRm9sZGVySUQ6IGV2ZW50Lm92ZXIuZGF0YS5jdXJyZW50LmlkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBtb3ZpbmcgaXRlbXM6JywgZXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgICBjbGVhclJvdXRlQ2FjaGUoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW21vdmVUb0ZvbGRlciwgZ2V0U2VsZWN0ZWRJdGVtcywgY2xlYXJSb3V0ZUNhY2hlXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNldFZpZXdUeXBlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHZpZXc6ICdncmlkJyB8ICdsaXN0JykgPT4ge1xuICAgICAgYXdhaXQgc2V0UHJlZmVyZW5jZShgJHtjb2xsZWN0aW9uU2x1Z30tY29sbGVjdGlvbi1mb2xkZXJgLCB7XG4gICAgICAgIHZpZXdQcmVmZXJlbmNlOiB2aWV3LFxuICAgICAgfSlcbiAgICAgIGNsZWFyUm91dGVDYWNoZSgpXG4gICAgfSxcbiAgICBbY29sbGVjdGlvblNsdWcsIHNldFByZWZlcmVuY2UsIGNsZWFyUm91dGVDYWNoZV0sXG4gIClcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZHJhd2VyRGVwdGgpIHtcbiAgICAgIHNldFN0ZXBOYXYoW1xuICAgICAgICAhYnJlYWRjcnVtYnMubGVuZ3RoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGxhYmVsOiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3N0ZXAtbmF2LWljb24tbGFiZWxgfSBrZXk9XCJyb290XCI+XG4gICAgICAgICAgICAgICAgICA8Q29sb3JlZEZvbGRlckljb24gLz5cbiAgICAgICAgICAgICAgICAgIHtnZXRUcmFuc2xhdGlvbihsYWJlbHM/LnBsdXJhbCwgaTE4bil9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiAoXG4gICAgICAgICAgICAgICAgPERyb3BwYWJsZUJyZWFkY3J1bWJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19zdGVwLW5hdi1kcm9wcGFibGVgLFxuICAgICAgICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19zdGVwLW5hdi1pY29uLWxhYmVsYCxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAgICAgICAgICAgaWQ9e251bGx9XG4gICAgICAgICAgICAgICAgICBrZXk9XCJyb290XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZm9sZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pblJvdXRlOiBjb25maWcucm91dGVzLmFkbWluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGAvY29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uU2x1Z30vJHtjb25maWcuZm9sZGVycy5zbHVnfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPENvbG9yZWRGb2xkZXJJY29uIC8+XG4gICAgICAgICAgICAgICAgICB7Z2V0VHJhbnNsYXRpb24obGFiZWxzPy5wbHVyYWwsIGkxOG4pfVxuICAgICAgICAgICAgICAgIDwvRHJvcHBhYmxlQnJlYWRjcnVtYj5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIC4uLmJyZWFkY3J1bWJzLm1hcCgoY3J1bWIsIGNydW1iSW5kZXgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgIGNydW1iSW5kZXggPT09IGJyZWFkY3J1bWJzLmxlbmd0aCAtIDEgPyAoXG4gICAgICAgICAgICAgICAgY3J1bWIubmFtZVxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxEcm9wcGFibGVCcmVhZGNydW1iXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3N0ZXAtbmF2LWRyb3BwYWJsZWB9XG4gICAgICAgICAgICAgICAgICBpZD17Y3J1bWIuaWR9XG4gICAgICAgICAgICAgICAgICBrZXk9e2NydW1iLmlkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFJvdXRlVHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5mb2xkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IGNvbmZpZy5yb3V0ZXMuYWRtaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25TbHVnfS8ke2NvbmZpZy5mb2xkZXJzLnNsdWd9LyR7Y3J1bWIuaWR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3J1bWIubmFtZX1cbiAgICAgICAgICAgICAgICA8L0Ryb3BwYWJsZUJyZWFkY3J1bWI+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIF0pXG4gICAgfVxuICB9LCBbXG4gICAgYnJlYWRjcnVtYnMsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgY29uZmlnLmZvbGRlcnMsXG4gICAgY29uZmlnLnJvdXRlcy5hZG1pbixcbiAgICBjb25maWcuc2VydmVyVVJMLFxuICAgIGRyYXdlckRlcHRoLFxuICAgIGkxOG4sXG4gICAgbGFiZWxzPy5wbHVyYWwsXG4gICAgcm91dGVyLFxuICAgIHNldFN0ZXBOYXYsXG4gICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24sXG4gIF0pXG5cbiAgY29uc3QgdG90YWxEb2NzQW5kU3ViZm9sZGVycyA9IGRvY3VtZW50cy5sZW5ndGggKyBzdWJmb2xkZXJzLmxlbmd0aFxuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgPERuZEV2ZW50TGlzdGVuZXIgb25EcmFnRW5kPXtvbkRyYWdFbmR9IHNldElzRHJhZ2dpbmc9e3NldElzRHJhZ2dpbmd9IC8+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9ICR7YmFzZUNsYXNzfS0tJHtjb2xsZWN0aW9uU2x1Z31gfT5cbiAgICAgICAge0JlZm9yZUZvbGRlckxpc3R9XG4gICAgICAgIDxHdXR0ZXIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X193cmFwYH0+XG4gICAgICAgICAgPExpc3RIZWFkZXJcbiAgICAgICAgICAgIEFjdGlvbnM9e1tcbiAgICAgICAgICAgICAgIXNtYWxsQnJlYWsgJiYgKFxuICAgICAgICAgICAgICAgIDxMaXN0U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlQnVsa0RlbGV0ZT17ZGlzYWJsZUJ1bGtEZWxldGV9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlQnVsa0VkaXQ9e2NvbGxlY3Rpb25Db25maWcuZGlzYWJsZUJ1bGtFZGl0ID8/IGRpc2FibGVCdWxrRWRpdH1cbiAgICAgICAgICAgICAgICAgIGZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnM9e1xuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGZvbGRlclR5cGUpID8gZm9sZGVyVHlwZSA6IFtjb2xsZWN0aW9uU2x1Z11cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGtleT1cImxpc3Qtc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICA8RGVmYXVsdExpc3RWaWV3VGFic1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWc9e2NvbGxlY3Rpb25Db25maWd9XG4gICAgICAgICAgICAgICAgY29uZmlnPXtjb25maWd9XG4gICAgICAgICAgICAgICAga2V5PVwiZGVmYXVsdC1saXN0LWFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIHZpZXdUeXBlPVwiZm9sZGVyc1wiXG4gICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbil9XG4gICAgICAgICAgICBBZnRlckxpc3RIZWFkZXJDb250ZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIHRpdGxlPXtnZXRUcmFuc2xhdGlvbihsYWJlbHM/LnBsdXJhbCwgaTE4bil9XG4gICAgICAgICAgICBUaXRsZUFjdGlvbnM9e1tcbiAgICAgICAgICAgICAgYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICA8TGlzdENyZWF0ZU5ld0RvY0luRm9sZGVyQnV0dG9uXG4gICAgICAgICAgICAgICAgICBidXR0b25MYWJlbD17XG4gICAgICAgICAgICAgICAgICAgIGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2dlbmVyYWw6Y3JlYXRlTmV3JylcbiAgICAgICAgICAgICAgICAgICAgICA6IGAke3QoJ2dlbmVyYWw6Y3JlYXRlJyl9ICR7Z2V0VHJhbnNsYXRpb24oZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5sYWJlbHM/LnNpbmd1bGFyLCBpMThuKS50b0xvd2VyQ2FzZSgpfWBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVncz17YWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3N9XG4gICAgICAgICAgICAgICAgICBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zPXtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShmb2xkZXJUeXBlKSA/IGZvbGRlclR5cGUgOiBbY29sbGVjdGlvblNsdWddXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBrZXk9XCJjcmVhdGUtbmV3LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNyZWF0ZVN1Y2Nlc3M9e2NsZWFyUm91dGVDYWNoZX1cbiAgICAgICAgICAgICAgICAgIHNsdWdQcmVmaXg9XCJjcmVhdGUtZG9jdW1lbnQtLWhlYWRlci1waWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICA8TGlzdEJ1bGtVcGxvYWRCdXR0b25cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvblNsdWd9XG4gICAgICAgICAgICAgICAgaGFzQ3JlYXRlUGVybWlzc2lvbj17YWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MuaW5jbHVkZXMoY29sbGVjdGlvblNsdWcpfVxuICAgICAgICAgICAgICAgIGlzQnVsa1VwbG9hZEVuYWJsZWQ9e2lzQnVsa1VwbG9hZEVuYWJsZWR9XG4gICAgICAgICAgICAgICAga2V5PVwiYnVsay11cGxvYWQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICBdLmZpbHRlcihCb29sZWFuKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTZWFyY2hCYXJcbiAgICAgICAgICAgIEFjdGlvbnM9e1tcbiAgICAgICAgICAgICAgPFNvcnRCeVBpbGwga2V5PVwic29ydC1ieS1waWxsXCIgLz4sXG4gICAgICAgICAgICAgIDxUb2dnbGVWaWV3QnV0dG9uc1xuICAgICAgICAgICAgICAgIGFjdGl2ZVZpZXc9e3ZpZXdQcmVmZXJlbmNlfVxuICAgICAgICAgICAgICAgIGtleT1cInRvZ2dsZS12aWV3LWJ1dHRvbnNcIlxuICAgICAgICAgICAgICAgIHNldEFjdGl2ZVZpZXc9e2hhbmRsZVNldFZpZXdUeXBlfVxuICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgPEN1cnJlbnRGb2xkZXJBY3Rpb25zIGtleT1cImN1cnJlbnQtZm9sZGVyLWFjdGlvbnNcIiAvPixcbiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgICAgICAgbGFiZWw9e3QoJ2dlbmVyYWw6c2VhcmNoQnknLCB7XG4gICAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOm5hbWUnKSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgb25TZWFyY2hDaGFuZ2U9eyhzZWFyY2gpID0+IHJlZmluZUZvbGRlckRhdGEoeyBxdWVyeTogeyBzZWFyY2ggfSwgdXBkYXRlVVJMOiB0cnVlIH0pfVxuICAgICAgICAgICAgc2VhcmNoUXVlcnlQYXJhbT17c2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICAge0JlZm9yZUZvbGRlckxpc3RUYWJsZX1cbiAgICAgICAgICB7dG90YWxEb2NzQW5kU3ViZm9sZGVycyA+IDAgJiYgRm9sZGVyUmVzdWx0c0NvbXBvbmVudH1cbiAgICAgICAgICB7dG90YWxEb2NzQW5kU3ViZm9sZGVycyA9PT0gMCAmJiAoXG4gICAgICAgICAgICA8Tm9MaXN0UmVzdWx0c1xuICAgICAgICAgICAgICBBY3Rpb25zPXtbXG4gICAgICAgICAgICAgICAgYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MuaW5jbHVkZXMoZm9sZGVyQ29sbGVjdGlvblNsdWcpICYmIChcbiAgICAgICAgICAgICAgICAgIDxMaXN0Q3JlYXRlTmV3RG9jSW5Gb2xkZXJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGFiZWw9e2Ake3QoJ2dlbmVyYWw6Y3JlYXRlJyl9ICR7Z2V0VHJhbnNsYXRpb24oZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5sYWJlbHM/LnNpbmd1bGFyLCBpMThuKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvblNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Z3M9e1tmb2xkZXJDb2xsZWN0aW9uQ29uZmlnLnNsdWddfVxuICAgICAgICAgICAgICAgICAgICBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zPXtcbiAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGZvbGRlclR5cGUpID8gZm9sZGVyVHlwZSA6IFtjb2xsZWN0aW9uU2x1Z11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJjcmVhdGUtZm9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgb25DcmVhdGVTdWNjZXNzPXtjbGVhclJvdXRlQ2FjaGV9XG4gICAgICAgICAgICAgICAgICAgIHNsdWdQcmVmaXg9XCJjcmVhdGUtZm9sZGVyLS1uby1yZXN1bHRzXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVncy5pbmNsdWRlcyhjb2xsZWN0aW9uU2x1ZykgJiYgKFxuICAgICAgICAgICAgICAgICAgPExpc3RDcmVhdGVOZXdEb2NJbkZvbGRlckJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBidXR0b25MYWJlbD17YCR7dCgnZ2VuZXJhbDpjcmVhdGUnKX0gJHt0KCdnZW5lcmFsOmRvY3VtZW50JykudG9Mb3dlckNhc2UoKX1gfVxuICAgICAgICAgICAgICAgICAgICBidXR0b25TaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWdzPXtbY29sbGVjdGlvblNsdWddfVxuICAgICAgICAgICAgICAgICAgICBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zPXtcbiAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGZvbGRlclR5cGUpID8gZm9sZGVyVHlwZSA6IFtjb2xsZWN0aW9uU2x1Z11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJjcmVhdGUtZG9jdW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZVN1Y2Nlc3M9e2NsZWFyUm91dGVDYWNoZX1cbiAgICAgICAgICAgICAgICAgICAgc2x1Z1ByZWZpeD1cImNyZWF0ZS1kb2N1bWVudC0tbm8tcmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgICAgICAgICBNZXNzYWdlPXtcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGgzPntpMThuLnQoJ2dlbmVyYWw6bm9SZXN1bHRzRm91bmQnKX08L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZ2VuZXJhbDpub1Jlc3VsdHNEZXNjcmlwdGlvbicpfTwvcD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtBZnRlckZvbGRlckxpc3RUYWJsZX1cbiAgICAgICAgPC9HdXR0ZXI+XG4gICAgICAgIHtBZnRlckZvbGRlckxpc3R9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtzZWxlY3RlZEl0ZW1LZXlzLnNpemUgPiAwICYmIGRyYWdPdmVybGF5SXRlbSAmJiAoXG4gICAgICAgIDxEcmFnT3ZlcmxheVNlbGVjdGlvbiBpdGVtPXtkcmFnT3ZlcmxheUl0ZW19IHNlbGVjdGVkQ291bnQ9e3NlbGVjdGVkSXRlbUtleXMuc2l6ZX0gLz5cbiAgICAgICl9XG4gICAgPC9GcmFnbWVudD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEbmRFdmVudExpc3RlbmVyKHsgb25EcmFnRW5kLCBzZXRJc0RyYWdnaW5nIH0pIHtcbiAgdXNlRG5kTW9uaXRvcih7XG4gICAgb25EcmFnQ2FuY2VsKCkge1xuICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSlcbiAgICB9LFxuICAgIG9uRHJhZ0VuZChldmVudCkge1xuICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSlcbiAgICAgIG9uRHJhZ0VuZChldmVudClcbiAgICB9LFxuICAgIG9uRHJhZ1N0YXJ0KCkge1xuICAgICAgc2V0SXNEcmFnZ2luZyh0cnVlKVxuICAgIH0sXG4gIH0pXG5cbiAgcmV0dXJuIG51bGxcbn1cbiIsImltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24uanMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB7IERvdHMgfSBmcm9tICcuLi8uLi8uLi9pY29ucy9Eb3RzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvbGRlciB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Gb2xkZXJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVDYWNoZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9Db25maXJtYXRpb25Nb2RhbC9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50RHJhd2VyIH0gZnJvbSAnLi4vLi4vRG9jdW1lbnREcmF3ZXIvaW5kZXguanMnXG5pbXBvcnQgeyBQb3B1cCwgUG9wdXBMaXN0IH0gZnJvbSAnLi4vLi4vUG9wdXAvaW5kZXguanMnXG5pbXBvcnQgeyBUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgTW92ZUl0ZW1zVG9Gb2xkZXJEcmF3ZXIgfSBmcm9tICcuLi9EcmF3ZXJzL01vdmVUb0ZvbGRlci9pbmRleC5qcydcblxuY29uc3QgbW92ZVRvRm9sZGVyRHJhd2VyU2x1ZyA9ICdtb3ZlLXRvLWZvbGRlci0tY3VycmVudC1mb2xkZXInXG5jb25zdCBjb25maXJtRGVsZXRlRHJhd2VyU2x1ZyA9ICdjb25maXJtLW1hbnktZGVsZXRlJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY3VycmVudC1mb2xkZXItYWN0aW9ucydcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5leHBvcnQgZnVuY3Rpb24gQ3VycmVudEZvbGRlckFjdGlvbnMoeyBjbGFzc05hbWUgfTogUHJvcHMpIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcbiAgY29uc3Qge1xuICAgIGJyZWFkY3J1bWJzLFxuICAgIGN1cnJlbnRGb2xkZXIsXG4gICAgZm9sZGVyQ29sbGVjdGlvbkNvbmZpZyxcbiAgICBmb2xkZXJDb2xsZWN0aW9uU2x1ZyxcbiAgICBmb2xkZXJGaWVsZE5hbWUsXG4gICAgZm9sZGVySUQsXG4gICAgZ2V0Rm9sZGVyUm91dGUsXG4gICAgbW92ZVRvRm9sZGVyLFxuICB9ID0gdXNlRm9sZGVyKClcbiAgY29uc3QgW0ZvbGRlckRvY3VtZW50RHJhd2VyLCAsIHsgY2xvc2VEcmF3ZXI6IGNsb3NlRm9sZGVyRHJhd2VyLCBvcGVuRHJhd2VyOiBvcGVuRm9sZGVyRHJhd2VyIH1dID1cbiAgICB1c2VEb2N1bWVudERyYXdlcih7XG4gICAgICBpZDogZm9sZGVySUQsXG4gICAgICBjb2xsZWN0aW9uU2x1ZzogZm9sZGVyQ29sbGVjdGlvblNsdWcsXG4gICAgfSlcbiAgY29uc3QgeyBjbGVhclJvdXRlQ2FjaGUgfSA9IHVzZVJvdXRlQ2FjaGUoKVxuICBjb25zdCB7IGNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyByb3V0ZXMgfSA9IGNvbmZpZ1xuICBjb25zdCB7IGNsb3NlTW9kYWwsIG9wZW5Nb2RhbCB9ID0gdXNlTW9kYWwoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBkZWxldGVDdXJyZW50Rm9sZGVyID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGZldGNoKFxuICAgICAgZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICBhcGlSb3V0ZTogcm91dGVzLmFwaSxcbiAgICAgICAgcGF0aDogYC8ke2ZvbGRlckNvbGxlY3Rpb25TbHVnfS8ke2ZvbGRlcklEfT9kZXB0aD0wYCxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgfSxcbiAgICApXG4gICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgcm91dGVyLnB1c2goZ2V0Rm9sZGVyUm91dGUoYnJlYWRjcnVtYnNbYnJlYWRjcnVtYnMubGVuZ3RoIC0gMl0/LmlkIHx8IG51bGwpKVxuICAgIH0pXG4gIH0sIFtcbiAgICBicmVhZGNydW1icyxcbiAgICBmb2xkZXJDb2xsZWN0aW9uU2x1ZyxcbiAgICBmb2xkZXJJRCxcbiAgICBnZXRGb2xkZXJSb3V0ZSxcbiAgICByb3V0ZXIsXG4gICAgcm91dGVzLmFwaSxcbiAgICBzdGFydFJvdXRlVHJhbnNpdGlvbixcbiAgXSlcblxuICBpZiAoIWZvbGRlcklEKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxQb3B1cFxuICAgICAgICBidXR0b249ezxEb3RzIC8+fVxuICAgICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgICAgcmVuZGVyPXsoKSA9PiAoXG4gICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvcGVuRm9sZGVyRHJhd2VyKClcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2dlbmVyYWw6ZWRpdExhYmVsJywge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihmb2xkZXJDb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5zaW5ndWxhciwgaTE4biksXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIG9wZW5Nb2RhbChtb3ZlVG9Gb2xkZXJEcmF3ZXJTbHVnKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnZm9sZGVyOm1vdmVGb2xkZXInKX1cbiAgICAgICAgICAgIDwvUG9wdXBMaXN0LkJ1dHRvbj5cbiAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvcGVuTW9kYWwoY29uZmlybURlbGV0ZURyYXdlclNsdWcpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdmb2xkZXI6ZGVsZXRlRm9sZGVyJyl9XG4gICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICl9XG4gICAgICAvPlxuICAgICAgPE1vdmVJdGVtc1RvRm9sZGVyRHJhd2VyXG4gICAgICAgIGFjdGlvbj1cIm1vdmVJdGVtVG9Gb2xkZXJcIlxuICAgICAgICBkcmF3ZXJTbHVnPXttb3ZlVG9Gb2xkZXJEcmF3ZXJTbHVnfVxuICAgICAgICBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zPXtjdXJyZW50Rm9sZGVyPy52YWx1ZS5mb2xkZXJUeXBlfVxuICAgICAgICBmb2xkZXJDb2xsZWN0aW9uU2x1Zz17Zm9sZGVyQ29sbGVjdGlvblNsdWd9XG4gICAgICAgIGZvbGRlckZpZWxkTmFtZT17Zm9sZGVyRmllbGROYW1lfVxuICAgICAgICBmcm9tRm9sZGVySUQ9e2N1cnJlbnRGb2xkZXI/LnZhbHVlLmlkfVxuICAgICAgICBmcm9tRm9sZGVyTmFtZT17Y3VycmVudEZvbGRlcj8udmFsdWUuX2ZvbGRlck9yRG9jdW1lbnRUaXRsZX1cbiAgICAgICAgaXRlbXNUb01vdmU9e1tjdXJyZW50Rm9sZGVyXX1cbiAgICAgICAgb25Db25maXJtPXthc3luYyAoeyBpZCwgbmFtZSB9KSA9PiB7XG4gICAgICAgICAgYXdhaXQgbW92ZVRvRm9sZGVyKHtcbiAgICAgICAgICAgIGl0ZW1zVG9Nb3ZlOiBbY3VycmVudEZvbGRlcl0sXG4gICAgICAgICAgICB0b0ZvbGRlcklEOiBpZCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgLy8gbW92ZWQgdG8gZm9sZGVyXG4gICAgICAgICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICB0KCdmb2xkZXI6aXRlbUhhc0JlZW5Nb3ZlZCcsIHtcbiAgICAgICAgICAgICAgICBmb2xkZXJOYW1lOiBgXCIke25hbWV9XCJgLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBjdXJyZW50Rm9sZGVyLnZhbHVlLl9mb2xkZXJPckRvY3VtZW50VGl0bGUsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtb3ZlZCB0byByb290XG4gICAgICAgICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICB0KCdmb2xkZXI6aXRlbUhhc0JlZW5Nb3ZlZFRvUm9vdCcsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogY3VycmVudEZvbGRlci52YWx1ZS5fZm9sZGVyT3JEb2N1bWVudFRpdGxlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xvc2VNb2RhbChtb3ZlVG9Gb2xkZXJEcmF3ZXJTbHVnKVxuICAgICAgICB9fVxuICAgICAgICB0aXRsZT17Y3VycmVudEZvbGRlci52YWx1ZS5fZm9sZGVyT3JEb2N1bWVudFRpdGxlfVxuICAgICAgLz5cblxuICAgICAgPENvbmZpcm1hdGlvbk1vZGFsXG4gICAgICAgIGJvZHk9e1xuICAgICAgICAgIDxUcmFuc2xhdGlvblxuICAgICAgICAgICAgZWxlbWVudHM9e3tcbiAgICAgICAgICAgICAgJzEnOiAoeyBjaGlsZHJlbiB9KSA9PiA8c3Ryb25nPntjaGlsZHJlbn08L3N0cm9uZz4sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaTE4bktleT1cImdlbmVyYWw6YWJvdXRUb0RlbGV0ZVwiXG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgdmFyaWFibGVzPXt7XG4gICAgICAgICAgICAgIGxhYmVsOiBnZXRUcmFuc2xhdGlvbihmb2xkZXJDb2xsZWN0aW9uQ29uZmlnLmxhYmVscy5zaW5ndWxhciwgaTE4biksXG4gICAgICAgICAgICAgIHRpdGxlOiBjdXJyZW50Rm9sZGVyLnZhbHVlLl9mb2xkZXJPckRvY3VtZW50VGl0bGUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybWluZ0xhYmVsPXt0KCdnZW5lcmFsOmRlbGV0aW5nJyl9XG4gICAgICAgIGhlYWRpbmc9e3QoJ2dlbmVyYWw6Y29uZmlybURlbGV0aW9uJyl9XG4gICAgICAgIG1vZGFsU2x1Zz17Y29uZmlybURlbGV0ZURyYXdlclNsdWd9XG4gICAgICAgIG9uQ29uZmlybT17ZGVsZXRlQ3VycmVudEZvbGRlcn1cbiAgICAgIC8+XG5cbiAgICAgIDxGb2xkZXJEb2N1bWVudERyYXdlclxuICAgICAgICBvblNhdmU9eygpID0+IHtcbiAgICAgICAgICBjbG9zZUZvbGRlckRyYXdlcigpXG4gICAgICAgICAgY2xlYXJSb3V0ZUNhY2hlKClcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgTW9kaWZpZXIgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgeyBGb2xkZXJPckRvY3VtZW50IH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbmltcG9ydCB7IERyYWdPdmVybGF5IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IGdldEV2ZW50Q29vcmRpbmF0ZXMgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnXG5cbmltcG9ydCB7IEZvbGRlckZpbGVDYXJkIH0gZnJvbSAnLi4vRm9sZGVyRmlsZUNhcmQvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2RyYWctb3ZlcmxheS1zZWxlY3Rpb24nXG5cbnR5cGUgRHJhZ0NhcmRzUHJvcHMgPSB7XG4gIHJlYWRvbmx5IGl0ZW06IEZvbGRlck9yRG9jdW1lbnRcbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb3VudDogbnVtYmVyXG59XG5leHBvcnQgZnVuY3Rpb24gRHJhZ092ZXJsYXlTZWxlY3Rpb24oeyBpdGVtLCBzZWxlY3RlZENvdW50IH06IERyYWdDYXJkc1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPERyYWdPdmVybGF5XG4gICAgICBkcm9wQW5pbWF0aW9uPXtudWxsfVxuICAgICAgbW9kaWZpZXJzPXtbc25hcFRvcExlZnRUb0N1cnNvcl19XG4gICAgICBzdHlsZT17e1xuICAgICAgICBoZWlnaHQ6ICd1bnNldCcsXG4gICAgICAgIG1heFdpZHRoOiAnMjIwcHgnLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY2FyZHNgfT5cbiAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IHNlbGVjdGVkQ291bnQgPiAxID8gMiA6IDEgfSkubWFwKChfLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY2FyZGB9XG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcmlnaHQ6IGAke2luZGV4ICogM31weGAsXG4gICAgICAgICAgICAgIHRvcDogYC0ke2luZGV4ICogM31weGAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb2xkZXJGaWxlQ2FyZFxuICAgICAgICAgICAgICBpZD17bnVsbH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICBpdGVtS2V5PVwib3ZlcmxheS1jYXJkXCJcbiAgICAgICAgICAgICAgdGl0bGU9e2l0ZW0udmFsdWUuX2ZvbGRlck9yRG9jdW1lbnRUaXRsZX1cbiAgICAgICAgICAgICAgdHlwZT1cImZvbGRlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgICAge3NlbGVjdGVkQ291bnQgPiAxID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY2FyZC1jb3VudGB9PntzZWxlY3RlZENvdW50fTwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICA8L0RyYWdPdmVybGF5PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBzbmFwVG9wTGVmdFRvQ3Vyc29yOiBNb2RpZmllciA9ICh7IGFjdGl2YXRvckV2ZW50LCBkcmFnZ2luZ05vZGVSZWN0LCB0cmFuc2Zvcm0gfSkgPT4ge1xuICBpZiAoZHJhZ2dpbmdOb2RlUmVjdCAmJiBhY3RpdmF0b3JFdmVudCkge1xuICAgIGNvbnN0IGFjdGl2YXRvckNvb3JkaW5hdGVzID0gZ2V0RXZlbnRDb29yZGluYXRlcyhhY3RpdmF0b3JFdmVudClcblxuICAgIGlmICghYWN0aXZhdG9yQ29vcmRpbmF0ZXMpIHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1cbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXRYID0gYWN0aXZhdG9yQ29vcmRpbmF0ZXMueCAtIGRyYWdnaW5nTm9kZVJlY3QubGVmdFxuICAgIGNvbnN0IG9mZnNldFkgPSBhY3RpdmF0b3JDb29yZGluYXRlcy55IC0gZHJhZ2dpbmdOb2RlUmVjdC50b3BcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50cmFuc2Zvcm0sXG4gICAgICB4OiB0cmFuc2Zvcm0ueCArIG9mZnNldFggKyA1LFxuICAgICAgeTogdHJhbnNmb3JtLnkgKyBvZmZzZXRZICsgNSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRGdW5jdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCB0eXBlIHsgRm9sZGVyU29ydEtleXMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IENoZXZyb25JY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvQ2hldnJvbi9pbmRleC5qcydcbmltcG9ydCB7IFNvcnREb3duSWNvbiwgU29ydFVwSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL1NvcnQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb2xkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRm9sZGVycy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgUGlsbCB9IGZyb20gJy4uLy4uL1BpbGwvaW5kZXguanMnXG5pbXBvcnQgeyBQb3B1cCwgUG9wdXBMaXN0IH0gZnJvbSAnLi4vLi4vUG9wdXAvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ3NvcnQtYnktcGlsbCdcblxuY29uc3Qgc29ydE9uT3B0aW9uczoge1xuICBsYWJlbDogKHQ6IFRGdW5jdGlvbikgPT4gUmVhY3QuUmVhY3ROb2RlXG4gIHZhbHVlOiBGb2xkZXJTb3J0S2V5c1xufVtdID0gW1xuICB7IGxhYmVsOiAodCkgPT4gdCgnZ2VuZXJhbDpuYW1lJyksIHZhbHVlOiAnbmFtZScgfSxcbiAgeyBsYWJlbDogKHQpID0+IHQoJ2dlbmVyYWw6Y3JlYXRlZEF0JyksIHZhbHVlOiAnY3JlYXRlZEF0JyB9LFxuICB7IGxhYmVsOiAodCkgPT4gdCgnZ2VuZXJhbDp1cGRhdGVkQXQnKSwgdmFsdWU6ICd1cGRhdGVkQXQnIH0sXG5dXG5jb25zdCBvcmRlck9uT3B0aW9uczoge1xuICBsYWJlbDogKHQ6IFRGdW5jdGlvbikgPT4gUmVhY3QuUmVhY3ROb2RlXG4gIHZhbHVlOiAnYXNjJyB8ICdkZXNjJ1xufVtdID0gW1xuICB7XG4gICAgbGFiZWw6ICh0KSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U29ydFVwSWNvbiAvPlxuICAgICAgICB7dCgnZ2VuZXJhbDphc2NlbmRpbmcnKX1cbiAgICAgIDwvPlxuICAgICksXG4gICAgdmFsdWU6ICdhc2MnLFxuICB9LFxuICB7XG4gICAgbGFiZWw6ICh0KSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U29ydERvd25JY29uIC8+XG4gICAgICAgIHt0KCdnZW5lcmFsOmRlc2NlbmRpbmcnKX1cbiAgICAgIDwvPlxuICAgICksXG4gICAgdmFsdWU6ICdkZXNjJyxcbiAgfSxcbl1cbmV4cG9ydCBmdW5jdGlvbiBTb3J0QnlQaWxsKCkge1xuICBjb25zdCB7IHJlZmluZUZvbGRlckRhdGEsIHNvcnQgfSA9IHVzZUZvbGRlcigpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBzb3J0RGlyZWN0aW9uID0gc29ydC5zdGFydHNXaXRoKCctJykgPyAnZGVzYycgOiAnYXNjJ1xuICBjb25zdCBbc2VsZWN0ZWRTb3J0T3B0aW9uXSA9XG4gICAgc29ydE9uT3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IChzb3J0LnN0YXJ0c1dpdGgoJy0nKSA/IHNvcnQuc2xpY2UoMSkgOiBzb3J0KSkgfHxcbiAgICBzb3J0T25PcHRpb25zXG4gIGNvbnN0IFtzZWxlY3RlZE9yZGVyT3B0aW9uXSA9IG9yZGVyT25PcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gc29ydERpcmVjdGlvbilcblxuICByZXR1cm4gKFxuICAgIDxQb3B1cFxuICAgICAgYnV0dG9uPXtcbiAgICAgICAgPFBpbGwgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X190cmlnZ2VyYH0gaWNvbj17PENoZXZyb25JY29uIC8+fSBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICB7c29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAoXG4gICAgICAgICAgICA8U29ydFVwSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NvcnQtaWNvbmB9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxTb3J0RG93bkljb24gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zb3J0LWljb25gfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3NlbGVjdGVkU29ydE9wdGlvbj8ubGFiZWwodCl9XG4gICAgICAgIDwvUGlsbD5cbiAgICAgIH1cbiAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgaG9yaXpvbnRhbEFsaWduPVwicmlnaHRcIlxuICAgICAgcmVuZGVyPXsoeyBjbG9zZSB9KSA9PiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFBvcHVwTGlzdC5Hcm91cExhYmVsIGxhYmVsPVwiU29ydCBieVwiIC8+XG4gICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgIHtzb3J0T25PcHRpb25zLm1hcCgoeyBsYWJlbCwgdmFsdWUgfSkgPT4gKFxuICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgIGFjdGl2ZT17c2VsZWN0ZWRTb3J0T3B0aW9uPy52YWx1ZSA9PT0gdmFsdWV9XG4gICAgICAgICAgICAgICAga2V5PXt2YWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZWZpbmVGb2xkZXJEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgc29ydDogc29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gYC0ke3ZhbHVlfWAgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVVJMOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2xhYmVsKHQpfVxuICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICA8UG9wdXBMaXN0LkRpdmlkZXIgLz5cbiAgICAgICAgICA8UG9wdXBMaXN0Lkdyb3VwTGFiZWwgbGFiZWw9XCJPcmRlclwiIC8+XG4gICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgIHtvcmRlck9uT3B0aW9ucy5tYXAoKHsgbGFiZWwsIHZhbHVlIH0pID0+IChcbiAgICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgICBhY3RpdmU9e3NlbGVjdGVkT3JkZXJPcHRpb24/LnZhbHVlID09PSB2YWx1ZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX29yZGVyLW9wdGlvbmB9XG4gICAgICAgICAgICAgICAga2V5PXt2YWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc29ydERpcmVjdGlvbiAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmaW5lRm9sZGVyRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID09PSAnZGVzYydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAtJHtzZWxlY3RlZFNvcnRPcHRpb24/LnZhbHVlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkU29ydE9wdGlvbj8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVUkw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2xhYmVsKHQpfVxuICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgICAgc2hvd1Njcm9sbGJhclxuICAgICAgdmVydGljYWxBbGlnbj1cImJvdHRvbVwiXG4gICAgLz5cbiAgKVxufVxuIiwiaW1wb3J0IHsgR3JpZFZpZXdJY29uIH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvR3JpZFZpZXcvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0Vmlld0ljb24gfSBmcm9tICcuLi8uLi8uLi9pY29ucy9MaXN0Vmlldy9pbmRleC5qcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZm9sZGVyLXZpZXctdG9nZ2xlLWJ1dHRvbidcblxudHlwZSBQcm9wcyA9IHtcbiAgYWN0aXZlVmlldzogJ2dyaWQnIHwgJ2xpc3QnXG4gIHNldEFjdGl2ZVZpZXc6ICh2aWV3OiAnZ3JpZCcgfCAnbGlzdCcpID0+IHZvaWRcbn1cbmV4cG9ydCBmdW5jdGlvbiBUb2dnbGVWaWV3QnV0dG9ucyh7IGFjdGl2ZVZpZXcsIHNldEFjdGl2ZVZpZXcgfTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBidXR0b25TdHlsZT1cInBpbGxcIlxuICAgICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGFjdGl2ZVZpZXcgPT09ICdncmlkJyAmJiBgJHtiYXNlQ2xhc3N9LS1hY3RpdmVgXVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICBpY29uPXs8R3JpZFZpZXdJY29uIC8+fVxuICAgICAgICBtYXJnaW49e2ZhbHNlfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgc2V0QWN0aXZlVmlldygnZ3JpZCcpXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBidXR0b25TdHlsZT1cInBpbGxcIlxuICAgICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGFjdGl2ZVZpZXcgPT09ICdsaXN0JyAmJiBgJHtiYXNlQ2xhc3N9LS1hY3RpdmVgXVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICBpY29uPXs8TGlzdFZpZXdJY29uIC8+fVxuICAgICAgICBtYXJnaW49e2ZhbHNlfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgc2V0QWN0aXZlVmlldygnbGlzdCcpXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uU2x1ZyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IHsgZXh0cmFjdElEIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSAnc29ubmVyJ1xuXG5pbXBvcnQgeyBEZWxldGVNYW55X3Y0IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvRGVsZXRlTWFueS9pbmRleC5qcydcbmltcG9ydCB7IEVkaXRNYW55X3Y0IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvRWRpdE1hbnkvaW5kZXguanMnXG5pbXBvcnQgeyBFZGl0Rm9sZGVyQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvRm9sZGVyVmlldy9EcmF3ZXJzL0VkaXRGb2xkZXJBY3Rpb24vaW5kZXguanMnXG5pbXBvcnQgeyBNb3ZlSXRlbXNUb0ZvbGRlckRyYXdlciB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvRHJhd2Vycy9Nb3ZlVG9Gb2xkZXIvaW5kZXguanMnXG5pbXBvcnQgeyBMaXN0U2VsZWN0aW9uX3Y0LCBMaXN0U2VsZWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvTGlzdFNlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFB1Ymxpc2hNYW55X3Y0IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvUHVibGlzaE1hbnkvaW5kZXguanMnXG5pbXBvcnQgeyBVbnB1Ymxpc2hNYW55X3Y0IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvVW5wdWJsaXNoTWFueS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb2xkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRm9sZGVycy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVJvdXRlQ2FjaGUgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvUm91dGVDYWNoZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuXG5jb25zdCBtb3ZlVG9Gb2xkZXJEcmF3ZXJTbHVnID0gJ21vdmUtdG8tZm9sZGVyLS1saXN0J1xuXG50eXBlIEdyb3VwZWRTZWxlY3Rpb25zID0ge1xuICBbcmVsYXRpb25Ubzogc3RyaW5nXToge1xuICAgIGFsbD86IGJvb2xlYW5cbiAgICBpZHM/OiAobnVtYmVyIHwgc3RyaW5nKVtdXG4gICAgdG90YWxDb3VudDogbnVtYmVyXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTGlzdFNlbGVjdGlvblByb3BzID0ge1xuICBkaXNhYmxlQnVsa0RlbGV0ZT86IGJvb2xlYW5cbiAgZGlzYWJsZUJ1bGtFZGl0PzogYm9vbGVhblxuICBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uU2x1Z1tdXG59XG5cbmV4cG9ydCBjb25zdCBMaXN0U2VsZWN0aW9uOiBSZWFjdC5GQzxMaXN0U2VsZWN0aW9uUHJvcHM+ID0gKHtcbiAgZGlzYWJsZUJ1bGtEZWxldGUsXG4gIGRpc2FibGVCdWxrRWRpdCxcbiAgZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9ucyxcbn0pID0+IHtcbiAgY29uc3Qge1xuICAgIGNsZWFyU2VsZWN0aW9ucyxcbiAgICBjdXJyZW50Rm9sZGVyLFxuICAgIGZvbGRlckNvbGxlY3Rpb25TbHVnLFxuICAgIGZvbGRlckZpZWxkTmFtZSxcbiAgICBmb2xkZXJJRCxcbiAgICBnZXRTZWxlY3RlZEl0ZW1zLFxuICAgIG1vdmVUb0ZvbGRlcixcbiAgfSA9IHVzZUZvbGRlcigpXG5cbiAgY29uc3QgeyBjbGVhclJvdXRlQ2FjaGUgfSA9IHVzZVJvdXRlQ2FjaGUoKVxuICBjb25zdCB7IGNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IGl0ZW1zID0gZ2V0U2VsZWN0ZWRJdGVtcygpXG5cbiAgY29uc3QgZ3JvdXBlZFNlbGVjdGlvbnM6IEdyb3VwZWRTZWxlY3Rpb25zID0gaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKGFjY1tpdGVtLnJlbGF0aW9uVG9dKSB7XG4gICAgICAgIGFjY1tpdGVtLnJlbGF0aW9uVG9dLmlkcy5wdXNoKGV4dHJhY3RJRChpdGVtLnZhbHVlKSlcbiAgICAgICAgYWNjW2l0ZW0ucmVsYXRpb25Ub10udG90YWxDb3VudCArPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2NbaXRlbS5yZWxhdGlvblRvXSA9IHtcbiAgICAgICAgICBpZHM6IFtleHRyYWN0SUQoaXRlbS52YWx1ZSldLFxuICAgICAgICAgIHRvdGFsQ291bnQ6IDEsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9IGFzIEdyb3VwZWRTZWxlY3Rpb25zKVxuXG4gIGNvbnN0IGNvdW50ID0gaXRlbXMubGVuZ3RoXG4gIGNvbnN0IHNpbmdsZU5vbkZvbGRlckNvbGxlY3Rpb25TZWxlY3RlZCA9XG4gICAgT2JqZWN0LmtleXMoZ3JvdXBlZFNlbGVjdGlvbnMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKGdyb3VwZWRTZWxlY3Rpb25zKVswXSAhPT0gZm9sZGVyQ29sbGVjdGlvblNsdWdcbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IHNpbmdsZU5vbkZvbGRlckNvbGxlY3Rpb25TZWxlY3RlZFxuICAgID8gY29uZmlnLmNvbGxlY3Rpb25zLmZpbmQoKGNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc2x1ZyA9PT0gT2JqZWN0LmtleXMoZ3JvdXBlZFNlbGVjdGlvbnMpWzBdXG4gICAgICB9KVxuICAgIDogbnVsbFxuXG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBpZHMgPSBzaW5nbGVOb25Gb2xkZXJDb2xsZWN0aW9uU2VsZWN0ZWRcbiAgICA/IGdyb3VwZWRTZWxlY3Rpb25zW09iamVjdC5rZXlzKGdyb3VwZWRTZWxlY3Rpb25zKVswXV0/LmlkcyB8fCBbXVxuICAgIDogW11cblxuICByZXR1cm4gKFxuICAgIDxMaXN0U2VsZWN0aW9uX3Y0XG4gICAgICBjb3VudD17Y291bnR9XG4gICAgICBMaXN0QWN0aW9ucz17W1xuICAgICAgICBjb3VudCA+IDAgJiYgKFxuICAgICAgICAgIDxMaXN0U2VsZWN0aW9uQnV0dG9uIGtleT1cImNsZWFyLWFsbFwiIG9uQ2xpY2s9eygpID0+IGNsZWFyU2VsZWN0aW9ucygpfT5cbiAgICAgICAgICAgIHt0KCdnZW5lcmFsOmNsZWFyQWxsJyl9XG4gICAgICAgICAgPC9MaXN0U2VsZWN0aW9uQnV0dG9uPlxuICAgICAgICApLFxuICAgICAgXS5maWx0ZXIoQm9vbGVhbil9XG4gICAgICBTZWxlY3Rpb25BY3Rpb25zPXtbXG4gICAgICAgICFkaXNhYmxlQnVsa0VkaXQgJiYgaWRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPEZyYWdtZW50IGtleT1cImJ1bGstYWN0aW9uc1wiPlxuICAgICAgICAgICAgPEVkaXRNYW55X3Y0IGNvbGxlY3Rpb249e2NvbGxlY3Rpb25Db25maWd9IGNvdW50PXtjb3VudH0gaWRzPXtpZHN9IHNlbGVjdEFsbD17ZmFsc2V9IC8+XG4gICAgICAgICAgICA8UHVibGlzaE1hbnlfdjRcbiAgICAgICAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbkNvbmZpZ31cbiAgICAgICAgICAgICAgY291bnQ9e2NvdW50fVxuICAgICAgICAgICAgICBpZHM9e2lkc31cbiAgICAgICAgICAgICAgc2VsZWN0QWxsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VW5wdWJsaXNoTWFueV92NFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uPXtjb2xsZWN0aW9uQ29uZmlnfVxuICAgICAgICAgICAgICBjb3VudD17Y291bnR9XG4gICAgICAgICAgICAgIGlkcz17aWRzfVxuICAgICAgICAgICAgICBzZWxlY3RBbGw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApLFxuICAgICAgICBjb3VudCA9PT0gMSAmJiAhc2luZ2xlTm9uRm9sZGVyQ29sbGVjdGlvblNlbGVjdGVkICYmIChcbiAgICAgICAgICA8RWRpdEZvbGRlckFjdGlvblxuICAgICAgICAgICAgZm9sZGVyQ29sbGVjdGlvblNsdWc9e2ZvbGRlckNvbGxlY3Rpb25TbHVnfVxuICAgICAgICAgICAgaWQ9e2dyb3VwZWRTZWxlY3Rpb25zW2ZvbGRlckNvbGxlY3Rpb25TbHVnXS5pZHNbMF19XG4gICAgICAgICAgICBrZXk9XCJlZGl0LWZvbGRlci1hY3Rpb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgICksXG4gICAgICAgIGNvdW50ID4gMCA/IChcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXttb3ZlVG9Gb2xkZXJEcmF3ZXJTbHVnfT5cbiAgICAgICAgICAgIDxMaXN0U2VsZWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvcGVuTW9kYWwobW92ZVRvRm9sZGVyRHJhd2VyU2x1ZylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdnZW5lcmFsOm1vdmUnKX1cbiAgICAgICAgICAgIDwvTGlzdFNlbGVjdGlvbkJ1dHRvbj5cblxuICAgICAgICAgICAgPE1vdmVJdGVtc1RvRm9sZGVyRHJhd2VyXG4gICAgICAgICAgICAgIGFjdGlvbj1cIm1vdmVJdGVtc1RvRm9sZGVyXCJcbiAgICAgICAgICAgICAgZHJhd2VyU2x1Zz17bW92ZVRvRm9sZGVyRHJhd2VyU2x1Z31cbiAgICAgICAgICAgICAgZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9ucz17Zm9sZGVyQXNzaWduZWRDb2xsZWN0aW9uc31cbiAgICAgICAgICAgICAgZm9sZGVyQ29sbGVjdGlvblNsdWc9e2ZvbGRlckNvbGxlY3Rpb25TbHVnfVxuICAgICAgICAgICAgICBmb2xkZXJGaWVsZE5hbWU9e2ZvbGRlckZpZWxkTmFtZX1cbiAgICAgICAgICAgICAgZnJvbUZvbGRlcklEPXtmb2xkZXJJRH1cbiAgICAgICAgICAgICAgZnJvbUZvbGRlck5hbWU9e2N1cnJlbnRGb2xkZXI/LnZhbHVlPy5fZm9sZGVyT3JEb2N1bWVudFRpdGxlfVxuICAgICAgICAgICAgICBpdGVtc1RvTW92ZT17Z2V0U2VsZWN0ZWRJdGVtcygpfVxuICAgICAgICAgICAgICBvbkNvbmZpcm09e2FzeW5jICh7IGlkLCBuYW1lIH0pID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBtb3ZlVG9Gb2xkZXIoe1xuICAgICAgICAgICAgICAgICAgaXRlbXNUb01vdmU6IGdldFNlbGVjdGVkSXRlbXMoKSxcbiAgICAgICAgICAgICAgICAgIHRvRm9sZGVySUQ6IGlkLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIG1vdmVkIHRvIGZvbGRlclxuICAgICAgICAgICAgICAgICAgdG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdCgnZm9sZGVyOml0ZW1zTW92ZWRUb0ZvbGRlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJOYW1lOiBgXCIke25hbWV9XCJgLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBgJHtjb3VudH0gJHtjb3VudCA+IDEgPyB0KCdnZW5lcmFsOml0ZW1zJykgOiB0KCdnZW5lcmFsOml0ZW0nKX1gLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gbW92ZWQgdG8gcm9vdFxuICAgICAgICAgICAgICAgICAgdG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdCgnZm9sZGVyOml0ZW1zTW92ZWRUb1Jvb3QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGAke2NvdW50fSAke2NvdW50ID4gMSA/IHQoJ2dlbmVyYWw6aXRlbXMnKSA6IHQoJ2dlbmVyYWw6aXRlbScpfWAsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsZWFyUm91dGVDYWNoZSgpXG4gICAgICAgICAgICAgICAgY2xvc2VNb2RhbChtb3ZlVG9Gb2xkZXJEcmF3ZXJTbHVnKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICApIDogbnVsbCxcbiAgICAgICAgIWRpc2FibGVCdWxrRGVsZXRlICYmIChcbiAgICAgICAgICA8RGVsZXRlTWFueV92NFxuICAgICAgICAgICAgYWZ0ZXJEZWxldGU9eygpID0+IHtcbiAgICAgICAgICAgICAgY2xlYXJSb3V0ZUNhY2hlKClcbiAgICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb25zKClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBoYXNEZWxldGVQZXJtaXNzaW9uPXt0cnVlfVxuICAgICAgICAgICAga2V5PVwiYnVsay1kZWxldGVcIlxuICAgICAgICAgICAgc2VsZWN0aW9ucz17Z3JvdXBlZFNlbGVjdGlvbnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSxcbiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgIC8+XG4gIClcbn1cbiIsImltcG9ydCB7IHVzZVJvdXRlQ2FjaGUgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm92aWRlcnMvUm91dGVDYWNoZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnREcmF3ZXIgfSBmcm9tICcuLi8uLi8uLi9Eb2N1bWVudERyYXdlci9pbmRleC5qcydcbmltcG9ydCB7IExpc3RTZWxlY3Rpb25CdXR0b24gfSBmcm9tICcuLi8uLi8uLi9MaXN0U2VsZWN0aW9uL2luZGV4LmpzJ1xuXG50eXBlIEVkaXRGb2xkZXJBY3Rpb25Qcm9wcyA9IHtcbiAgZm9sZGVyQ29sbGVjdGlvblNsdWc6IHN0cmluZ1xuICBpZDogbnVtYmVyIHwgc3RyaW5nXG59XG5leHBvcnQgY29uc3QgRWRpdEZvbGRlckFjdGlvbiA9ICh7IGlkLCBmb2xkZXJDb2xsZWN0aW9uU2x1ZyB9OiBFZGl0Rm9sZGVyQWN0aW9uUHJvcHMpID0+IHtcbiAgY29uc3QgeyBjbGVhclJvdXRlQ2FjaGUgfSA9IHVzZVJvdXRlQ2FjaGUoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgW0ZvbGRlckRvY3VtZW50RHJhd2VyLCAsIHsgY2xvc2VEcmF3ZXIsIG9wZW5EcmF3ZXIgfV0gPSB1c2VEb2N1bWVudERyYXdlcih7XG4gICAgaWQsXG4gICAgY29sbGVjdGlvblNsdWc6IGZvbGRlckNvbGxlY3Rpb25TbHVnLFxuICB9KVxuXG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPExpc3RTZWxlY3Rpb25CdXR0b24gb25DbGljaz17b3BlbkRyYXdlcn0gdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICB7dCgnZ2VuZXJhbDplZGl0Jyl9XG4gICAgICA8L0xpc3RTZWxlY3Rpb25CdXR0b24+XG5cbiAgICAgIDxGb2xkZXJEb2N1bWVudERyYXdlclxuICAgICAgICBvblNhdmU9eygpID0+IHtcbiAgICAgICAgICBjbG9zZURyYXdlcigpXG4gICAgICAgICAgY2xlYXJSb3V0ZUNhY2hlKClcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IERyYWdFbmRFdmVudCB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IEZvbGRlckxpc3RWaWV3Q2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VEbmRNb25pdG9yIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uLmpzJ1xuaW1wb3J0IHsgUFJFRkVSRU5DRV9LRVlTIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgRHJvcHBhYmxlQnJlYWRjcnVtYiB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvQnJlYWRjcnVtYnMvaW5kZXguanMnXG5pbXBvcnQgeyBDb2xvcmVkRm9sZGVySWNvbiB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvQ29sb3JlZEZvbGRlckljb24vaW5kZXguanMnXG5pbXBvcnQgeyBDdXJyZW50Rm9sZGVyQWN0aW9ucyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvQ3VycmVudEZvbGRlckFjdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyBEcmFnT3ZlcmxheVNlbGVjdGlvbiB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvRHJhZ092ZXJsYXlTZWxlY3Rpb24vaW5kZXguanMnXG5pbXBvcnQgeyBGaWx0ZXJGb2xkZXJUeXBlUGlsbCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvRmlsdGVyRm9sZGVyVHlwZVBpbGwvaW5kZXguanMnXG5pbXBvcnQgeyBGb2xkZXJGaWxlVGFibGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Gb2xkZXJWaWV3L0ZvbGRlckZpbGVUYWJsZS9pbmRleC5qcydcbmltcG9ydCB7IEl0ZW1DYXJkR3JpZCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvSXRlbUNhcmRHcmlkL2luZGV4LmpzJ1xuaW1wb3J0IHsgU29ydEJ5UGlsbCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0ZvbGRlclZpZXcvU29ydEJ5UGlsbC9pbmRleC5qcydcbmltcG9ydCB7IFRvZ2dsZVZpZXdCdXR0b25zIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRm9sZGVyVmlldy9Ub2dnbGVWaWV3QnV0dG9ucy9pbmRleC5qcydcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0d1dHRlci9pbmRleC5qcydcbmltcG9ydCB7IExpc3RIZWFkZXIgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9MaXN0SGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgTGlzdENyZWF0ZU5ld0RvY0luRm9sZGVyQnV0dG9uIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTGlzdEhlYWRlci9UaXRsZUFjdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyBOb0xpc3RSZXN1bHRzIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTm9MaXN0UmVzdWx0cy9pbmRleC5qcydcbmltcG9ydCB7IFNlYXJjaEJhciB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL1NlYXJjaEJhci9pbmRleC5qcydcbmltcG9ydCB7IHVzZVN0ZXBOYXYgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9TdGVwTmF2L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWRpdERlcHRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IEZvbGRlclByb3ZpZGVyLCB1c2VGb2xkZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRm9sZGVycy9pbmRleC5qcydcbmltcG9ydCB7IHVzZVByZWZlcmVuY2VzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1ByZWZlcmVuY2VzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVDYWNoZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlV2luZG93SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9XaW5kb3dJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgTGlzdFNlbGVjdGlvbiB9IGZyb20gJy4uL0NvbGxlY3Rpb25Gb2xkZXIvTGlzdFNlbGVjdGlvbi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZm9sZGVyLWxpc3QnXG5cbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0QnJvd3NlQnlGb2xkZXJWaWV3KHtcbiAgYWN0aXZlQ29sbGVjdGlvbkZvbGRlclNsdWdzLFxuICBhbGxDb2xsZWN0aW9uRm9sZGVyU2x1Z3MsXG4gIGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzLFxuICBiYXNlRm9sZGVyUGF0aCxcbiAgYnJlYWRjcnVtYnMsXG4gIGRvY3VtZW50cyxcbiAgZm9sZGVyRmllbGROYW1lLFxuICBmb2xkZXJJRCxcbiAgRm9sZGVyUmVzdWx0c0NvbXBvbmVudCxcbiAgc2VhcmNoLFxuICBzdWJmb2xkZXJzLFxuICAuLi5yZXN0T2ZQcm9wc1xufTogRm9sZGVyTGlzdFZpZXdDbGllbnRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxGb2xkZXJQcm92aWRlclxuICAgICAgYWN0aXZlQ29sbGVjdGlvbkZvbGRlclNsdWdzPXthY3RpdmVDb2xsZWN0aW9uRm9sZGVyU2x1Z3N9XG4gICAgICBhbGxDb2xsZWN0aW9uRm9sZGVyU2x1Z3M9e2FsbENvbGxlY3Rpb25Gb2xkZXJTbHVnc31cbiAgICAgIGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzPXthbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVnc31cbiAgICAgIGJhc2VGb2xkZXJQYXRoPXtiYXNlRm9sZGVyUGF0aH1cbiAgICAgIGJyZWFkY3J1bWJzPXticmVhZGNydW1ic31cbiAgICAgIGRvY3VtZW50cz17ZG9jdW1lbnRzfVxuICAgICAgZm9sZGVyRmllbGROYW1lPXtmb2xkZXJGaWVsZE5hbWV9XG4gICAgICBmb2xkZXJJRD17Zm9sZGVySUR9XG4gICAgICBGb2xkZXJSZXN1bHRzQ29tcG9uZW50PXtGb2xkZXJSZXN1bHRzQ29tcG9uZW50fVxuICAgICAgc2VhcmNoPXtzZWFyY2h9XG4gICAgICBzdWJmb2xkZXJzPXtzdWJmb2xkZXJzfVxuICAgID5cbiAgICAgIDxCcm93c2VCeUZvbGRlclZpZXdJbkNvbnRleHQgey4uLnJlc3RPZlByb3BzfSAvPlxuICAgIDwvRm9sZGVyUHJvdmlkZXI+XG4gIClcbn1cblxudHlwZSBCcm93c2VCeUZvbGRlclZpZXdJbkNvbnRleHRQcm9wcyA9IE9taXQ8XG4gIEZvbGRlckxpc3RWaWV3Q2xpZW50UHJvcHMsXG4gIHwgJ2FjdGl2ZUNvbGxlY3Rpb25Gb2xkZXJTbHVncydcbiAgfCAnYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzJ1xuICB8ICdhbGxvd0NyZWF0ZUNvbGxlY3Rpb25TbHVncydcbiAgfCAnYmFzZUZvbGRlclBhdGgnXG4gIHwgJ2JyZWFkY3J1bWJzJ1xuICB8ICdkb2N1bWVudHMnXG4gIHwgJ2ZvbGRlckZpZWxkTmFtZSdcbiAgfCAnZm9sZGVySUQnXG4gIHwgJ0ZvbGRlclJlc3VsdHNDb21wb25lbnQnXG4gIHwgJ3N1YmZvbGRlcnMnXG4+XG5cbmZ1bmN0aW9uIEJyb3dzZUJ5Rm9sZGVyVmlld0luQ29udGV4dChwcm9wczogQnJvd3NlQnlGb2xkZXJWaWV3SW5Db250ZXh0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIEFmdGVyRm9sZGVyTGlzdCxcbiAgICBBZnRlckZvbGRlckxpc3RUYWJsZSxcbiAgICBCZWZvcmVGb2xkZXJMaXN0LFxuICAgIEJlZm9yZUZvbGRlckxpc3RUYWJsZSxcbiAgICBEZXNjcmlwdGlvbixcbiAgICBkaXNhYmxlQnVsa0RlbGV0ZSxcbiAgICBkaXNhYmxlQnVsa0VkaXQsXG4gICAgZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9ucyxcbiAgICB2aWV3UHJlZmVyZW5jZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IGRyYXdlckRlcHRoID0gdXNlRWRpdERlcHRoKClcbiAgY29uc3QgeyBzZXRTdGVwTmF2IH0gPSB1c2VTdGVwTmF2KClcbiAgY29uc3QgeyBzdGFydFJvdXRlVHJhbnNpdGlvbiB9ID0gdXNlUm91dGVUcmFuc2l0aW9uKClcbiAgY29uc3QgeyBjbGVhclJvdXRlQ2FjaGUgfSA9IHVzZVJvdXRlQ2FjaGUoKVxuICBjb25zdCB7XG4gICAgYnJlYWtwb2ludHM6IHsgczogc21hbGxCcmVhayB9LFxuICB9ID0gdXNlV2luZG93SW5mbygpXG4gIGNvbnN0IHsgc2V0UHJlZmVyZW5jZSB9ID0gdXNlUHJlZmVyZW5jZXMoKVxuICBjb25zdCB7XG4gICAgYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MsXG4gICAgYnJlYWRjcnVtYnMsXG4gICAgZG9jdW1lbnRzLFxuICAgIGRyYWdPdmVybGF5SXRlbSxcbiAgICBmb2xkZXJDb2xsZWN0aW9uQ29uZmlnLFxuICAgIGZvbGRlcklELFxuICAgIGZvbGRlclR5cGUsXG4gICAgZ2V0Rm9sZGVyUm91dGUsXG4gICAgZ2V0U2VsZWN0ZWRJdGVtcyxcbiAgICBtb3ZlVG9Gb2xkZXIsXG4gICAgcmVmaW5lRm9sZGVyRGF0YSxcbiAgICBzZWFyY2gsXG4gICAgc2VsZWN0ZWRJdGVtS2V5cyxcbiAgICBzZXRJc0RyYWdnaW5nLFxuICAgIHN1YmZvbGRlcnMsXG4gIH0gPSB1c2VGb2xkZXIoKVxuXG4gIGNvbnN0IFthY3RpdmVWaWV3LCBzZXRBY3RpdmVWaWV3XSA9IFJlYWN0LnVzZVN0YXRlPCdncmlkJyB8ICdsaXN0Jz4odmlld1ByZWZlcmVuY2UgfHwgJ2dyaWQnKVxuICBjb25zdCBbc2VhcmNoUGxhY2Vob2xkZXJdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uTGFiZWwgPVxuICAgICAgYnJlYWRjcnVtYnMubGVuZ3RoID09PSAwXG4gICAgICAgID8gZ2V0VHJhbnNsYXRpb24oZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5sYWJlbHM/LnBsdXJhbCwgaTE4bilcbiAgICAgICAgOiBicmVhZGNydW1ic1ticmVhZGNydW1icy5sZW5ndGggLSAxXS5uYW1lXG4gICAgcmV0dXJuIHQoJ2ZvbGRlcjpzZWFyY2hCeU5hbWVJbkZvbGRlcicsIHtcbiAgICAgIGZvbGRlck5hbWU6IGxvY2F0aW9uTGFiZWwsXG4gICAgfSlcbiAgfSlcblxuICBjb25zdCBvbkRyYWdFbmQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICBhc3luYyAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5vdmVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQub3Zlci5kYXRhLmN1cnJlbnQudHlwZSA9PT0gJ2ZvbGRlcicgJiYgJ2lkJyBpbiBldmVudC5vdmVyLmRhdGEuY3VycmVudCkge1xuICAgICAgICBhd2FpdCBtb3ZlVG9Gb2xkZXIoe1xuICAgICAgICAgIGl0ZW1zVG9Nb3ZlOiBnZXRTZWxlY3RlZEl0ZW1zKCksXG4gICAgICAgICAgdG9Gb2xkZXJJRDogZXZlbnQub3Zlci5kYXRhLmN1cnJlbnQuaWQgfHwgbnVsbCxcbiAgICAgICAgfSlcbiAgICAgICAgY2xlYXJSb3V0ZUNhY2hlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFttb3ZlVG9Gb2xkZXIsIGdldFNlbGVjdGVkSXRlbXMsIGNsZWFyUm91dGVDYWNoZV0sXG4gIClcblxuICBjb25zdCB0b3RhbERvY3NBbmRTdWJmb2xkZXJzID0gZG9jdW1lbnRzLmxlbmd0aCArIHN1YmZvbGRlcnMubGVuZ3RoXG4gIGNvbnN0IGxpc3RIZWFkZXJUaXRsZSA9ICFicmVhZGNydW1icy5sZW5ndGhcbiAgICA/IHQoJ2ZvbGRlcjpicm93c2VCeUZvbGRlcicpXG4gICAgOiBicmVhZGNydW1ic1ticmVhZGNydW1icy5sZW5ndGggLSAxXS5uYW1lXG5cbiAgY29uc3QgaGFuZGxlU2V0Vmlld1R5cGUgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAodmlldzogJ2dyaWQnIHwgJ2xpc3QnKSA9PiB7XG4gICAgICB2b2lkIHNldFByZWZlcmVuY2UoUFJFRkVSRU5DRV9LRVlTLkJST1dTRV9CWV9GT0xERVIsIHtcbiAgICAgICAgdmlld1ByZWZlcmVuY2U6IHZpZXcsXG4gICAgICB9KVxuICAgICAgc2V0QWN0aXZlVmlldyh2aWV3KVxuICAgIH0sXG4gICAgW3NldFByZWZlcmVuY2VdLFxuICApXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRyYXdlckRlcHRoKSB7XG4gICAgICBzZXRTdGVwTmF2KFtcbiAgICAgICAgIWJyZWFkY3J1bWJzLmxlbmd0aFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBsYWJlbDogKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zdGVwLW5hdi1pY29uLWxhYmVsYH0ga2V5PVwicm9vdFwiPlxuICAgICAgICAgICAgICAgICAgPENvbG9yZWRGb2xkZXJJY29uIC8+XG4gICAgICAgICAgICAgICAgICB7dCgnZm9sZGVyOmJyb3dzZUJ5Rm9sZGVyJyl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxhYmVsOiAoXG4gICAgICAgICAgICAgICAgPERyb3BwYWJsZUJyZWFkY3J1bWJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19zdGVwLW5hdi1kcm9wcGFibGVgLFxuICAgICAgICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19zdGVwLW5hdi1pY29uLWxhYmVsYCxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICAgICAgICAgICAgaWQ9e251bGx9XG4gICAgICAgICAgICAgICAgICBrZXk9XCJyb290XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlci5wdXNoKGdldEZvbGRlclJvdXRlKG51bGwpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Q29sb3JlZEZvbGRlckljb24gLz5cbiAgICAgICAgICAgICAgICAgIHt0KCdmb2xkZXI6YnJvd3NlQnlGb2xkZXInKX1cbiAgICAgICAgICAgICAgICA8L0Ryb3BwYWJsZUJyZWFkY3J1bWI+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAuLi5icmVhZGNydW1icy5tYXAoKGNydW1iLCBjcnVtYkluZGV4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICBjcnVtYkluZGV4ID09PSBicmVhZGNydW1icy5sZW5ndGggLSAxID8gKFxuICAgICAgICAgICAgICAgIGNydW1iLm5hbWVcbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQnJlYWRjcnVtYlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19zdGVwLW5hdi1kcm9wcGFibGVgfVxuICAgICAgICAgICAgICAgICAgaWQ9e2NydW1iLmlkfVxuICAgICAgICAgICAgICAgICAga2V5PXtjcnVtYi5pZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3V0ZVRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlci5wdXNoKGdldEZvbGRlclJvdXRlKGNydW1iLmlkKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2NydW1iLm5hbWV9XG4gICAgICAgICAgICAgICAgPC9Ecm9wcGFibGVCcmVhZGNydW1iPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICBdKVxuICAgIH1cbiAgfSwgW2JyZWFkY3J1bWJzLCBkcmF3ZXJEZXB0aCwgZ2V0Rm9sZGVyUm91dGUsIHJvdXRlciwgc2V0U3RlcE5hdiwgc3RhcnRSb3V0ZVRyYW5zaXRpb24sIHRdKVxuXG4gIGNvbnN0IG5vbkZvbGRlckNvbGxlY3Rpb25TbHVncyA9IGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzLmZpbHRlcihcbiAgICAoc2x1ZykgPT4gc2x1ZyAhPT0gZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5zbHVnLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICA8RG5kRXZlbnRMaXN0ZW5lciBvbkRyYWdFbmQ9e29uRHJhZ0VuZH0gc2V0SXNEcmFnZ2luZz17c2V0SXNEcmFnZ2luZ30gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9ICR7YmFzZUNsYXNzfS0tZm9sZGVyc2B9PlxuICAgICAgICB7QmVmb3JlRm9sZGVyTGlzdH1cbiAgICAgICAgPEd1dHRlciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBgfT5cbiAgICAgICAgICA8TGlzdEhlYWRlclxuICAgICAgICAgICAgQWN0aW9ucz17W1xuICAgICAgICAgICAgICAhc21hbGxCcmVhayAmJiAoXG4gICAgICAgICAgICAgICAgPExpc3RTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVCdWxrRGVsZXRlPXtkaXNhYmxlQnVsa0RlbGV0ZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVCdWxrRWRpdD17ZGlzYWJsZUJ1bGtFZGl0fVxuICAgICAgICAgICAgICAgICAgZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9ucz17Zm9sZGVyQXNzaWduZWRDb2xsZWN0aW9uc31cbiAgICAgICAgICAgICAgICAgIGtleT1cImxpc3Qtc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbil9XG4gICAgICAgICAgICBBZnRlckxpc3RIZWFkZXJDb250ZW50PXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIHRpdGxlPXtsaXN0SGVhZGVyVGl0bGV9XG4gICAgICAgICAgICBUaXRsZUFjdGlvbnM9e1tcbiAgICAgICAgICAgICAgYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICA8TGlzdENyZWF0ZU5ld0RvY0luRm9sZGVyQnV0dG9uXG4gICAgICAgICAgICAgICAgICBidXR0b25MYWJlbD17XG4gICAgICAgICAgICAgICAgICAgIGFsbG93Q3JlYXRlQ29sbGVjdGlvblNsdWdzLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2dlbmVyYWw6Y3JlYXRlTmV3JylcbiAgICAgICAgICAgICAgICAgICAgICA6IGAke3QoJ2dlbmVyYWw6Y3JlYXRlJyl9ICR7Z2V0VHJhbnNsYXRpb24oZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5sYWJlbHM/LnNpbmd1bGFyLCBpMThuKS50b0xvd2VyQ2FzZSgpfWBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVncz17YWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3N9XG4gICAgICAgICAgICAgICAgICBmb2xkZXJBc3NpZ25lZENvbGxlY3Rpb25zPXtBcnJheS5pc0FycmF5KGZvbGRlclR5cGUpID8gZm9sZGVyVHlwZSA6IFtdfVxuICAgICAgICAgICAgICAgICAga2V5PVwiY3JlYXRlLW5ldy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DcmVhdGVTdWNjZXNzPXtjbGVhclJvdXRlQ2FjaGV9XG4gICAgICAgICAgICAgICAgICBzbHVnUHJlZml4PVwiY3JlYXRlLWRvY3VtZW50LS1oZWFkZXItcGlsbFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFNlYXJjaEJhclxuICAgICAgICAgICAgQWN0aW9ucz17W1xuICAgICAgICAgICAgICA8U29ydEJ5UGlsbCBrZXk9XCJzb3J0LWJ5LXBpbGxcIiAvPixcbiAgICAgICAgICAgICAgZm9sZGVySUQgJiYgPEZpbHRlckZvbGRlclR5cGVQaWxsIGtleT1cImNvbGxlY3Rpb24tdHlwZVwiIC8+LFxuICAgICAgICAgICAgICA8VG9nZ2xlVmlld0J1dHRvbnNcbiAgICAgICAgICAgICAgICBhY3RpdmVWaWV3PXthY3RpdmVWaWV3fVxuICAgICAgICAgICAgICAgIGtleT1cInRvZ2dsZS12aWV3LWJ1dHRvbnNcIlxuICAgICAgICAgICAgICAgIHNldEFjdGl2ZVZpZXc9e2hhbmRsZVNldFZpZXdUeXBlfVxuICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgPEN1cnJlbnRGb2xkZXJBY3Rpb25zIGtleT1cImN1cnJlbnQtZm9sZGVyLWFjdGlvbnNcIiAvPixcbiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pfVxuICAgICAgICAgICAgbGFiZWw9e3NlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgb25TZWFyY2hDaGFuZ2U9eyhzZWFyY2gpID0+IHJlZmluZUZvbGRlckRhdGEoeyBxdWVyeTogeyBzZWFyY2ggfSwgdXBkYXRlVVJMOiB0cnVlIH0pfVxuICAgICAgICAgICAgc2VhcmNoUXVlcnlQYXJhbT17c2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICAge0JlZm9yZUZvbGRlckxpc3RUYWJsZX1cbiAgICAgICAgICB7dG90YWxEb2NzQW5kU3ViZm9sZGVycyA+IDAgJiYgKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAge2FjdGl2ZVZpZXcgPT09ICdncmlkJyA/IChcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAge3N1YmZvbGRlcnMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIDxJdGVtQ2FyZEdyaWQgaXRlbXM9e3N1YmZvbGRlcnN9IHRpdGxlPXsnRm9sZGVycyd9IHR5cGU9XCJmb2xkZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICAgICAgICB7ZG9jdW1lbnRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8SXRlbUNhcmRHcmlkXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcz17ZG9jdW1lbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViZm9sZGVyQ291bnQ9e3N1YmZvbGRlcnMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9eydEb2N1bWVudHMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPEZvbGRlckZpbGVUYWJsZSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7dG90YWxEb2NzQW5kU3ViZm9sZGVycyA9PT0gMCAmJiAoXG4gICAgICAgICAgICA8Tm9MaXN0UmVzdWx0c1xuICAgICAgICAgICAgICBBY3Rpb25zPXtbXG4gICAgICAgICAgICAgICAgYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MuaW5jbHVkZXMoZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5zbHVnKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8TGlzdENyZWF0ZU5ld0RvY0luRm9sZGVyQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxhYmVsPXtgJHt0KCdnZW5lcmFsOmNyZWF0ZScpfSAke2dldFRyYW5zbGF0aW9uKGZvbGRlckNvbGxlY3Rpb25Db25maWcubGFiZWxzPy5zaW5ndWxhciwgaTE4bikudG9Mb3dlckNhc2UoKX1gfVxuICAgICAgICAgICAgICAgICAgICBidXR0b25TaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWdzPXtbZm9sZGVyQ29sbGVjdGlvbkNvbmZpZy5zbHVnXX1cbiAgICAgICAgICAgICAgICAgICAgZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9ucz17QXJyYXkuaXNBcnJheShmb2xkZXJUeXBlKSA/IGZvbGRlclR5cGUgOiBbXX1cbiAgICAgICAgICAgICAgICAgICAga2V5PVwiY3JlYXRlLWZvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlU3VjY2Vzcz17Y2xlYXJSb3V0ZUNhY2hlfVxuICAgICAgICAgICAgICAgICAgICBzbHVnUHJlZml4PVwiY3JlYXRlLWZvbGRlci0tbm8tcmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZm9sZGVySUQgJiYgbm9uRm9sZGVyQ29sbGVjdGlvblNsdWdzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPExpc3RDcmVhdGVOZXdEb2NJbkZvbGRlckJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBidXR0b25MYWJlbD17YCR7dCgnZ2VuZXJhbDpjcmVhdGUnKX0gJHt0KCdnZW5lcmFsOmRvY3VtZW50JykudG9Mb3dlckNhc2UoKX1gfVxuICAgICAgICAgICAgICAgICAgICBidXR0b25TaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWdzPXtub25Gb2xkZXJDb2xsZWN0aW9uU2x1Z3N9XG4gICAgICAgICAgICAgICAgICAgIGZvbGRlckFzc2lnbmVkQ29sbGVjdGlvbnM9e0FycmF5LmlzQXJyYXkoZm9sZGVyVHlwZSkgPyBmb2xkZXJUeXBlIDogW119XG4gICAgICAgICAgICAgICAgICAgIGtleT1cImNyZWF0ZS1kb2N1bWVudFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlU3VjY2Vzcz17Y2xlYXJSb3V0ZUNhY2hlfVxuICAgICAgICAgICAgICAgICAgICBzbHVnUHJlZml4PVwiY3JlYXRlLWRvY3VtZW50LS1uby1yZXN1bHRzXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbil9XG4gICAgICAgICAgICAgIE1lc3NhZ2U9e1xuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8aDM+e2kxOG4udCgnZ2VuZXJhbDpub1Jlc3VsdHNGb3VuZCcpfTwvaDM+XG4gICAgICAgICAgICAgICAgICA8cD57aTE4bi50KCdnZW5lcmFsOm5vUmVzdWx0c0Rlc2NyaXB0aW9uJyl9PC9wPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge0FmdGVyRm9sZGVyTGlzdFRhYmxlfVxuICAgICAgICA8L0d1dHRlcj5cbiAgICAgICAge0FmdGVyRm9sZGVyTGlzdH1cbiAgICAgIDwvZGl2PlxuICAgICAge3NlbGVjdGVkSXRlbUtleXMuc2l6ZSA+IDAgJiYgZHJhZ092ZXJsYXlJdGVtICYmIChcbiAgICAgICAgPERyYWdPdmVybGF5U2VsZWN0aW9uIGl0ZW09e2RyYWdPdmVybGF5SXRlbX0gc2VsZWN0ZWRDb3VudD17c2VsZWN0ZWRJdGVtS2V5cy5zaXplfSAvPlxuICAgICAgKX1cbiAgICA8L0ZyYWdtZW50PlxuICApXG59XG5mdW5jdGlvbiBEbmRFdmVudExpc3RlbmVyKHsgb25EcmFnRW5kLCBzZXRJc0RyYWdnaW5nIH0pIHtcbiAgdXNlRG5kTW9uaXRvcih7XG4gICAgb25EcmFnQ2FuY2VsKCkge1xuICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSlcbiAgICB9LFxuICAgIG9uRHJhZ0VuZChldmVudCkge1xuICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSlcbiAgICAgIG9uRHJhZ0VuZChldmVudClcbiAgICB9LFxuICAgIG9uRHJhZ1N0YXJ0KCkge1xuICAgICAgc2V0SXNEcmFnZ2luZyh0cnVlKVxuICAgIH0sXG4gIH0pXG5cbiAgcmV0dXJuIG51bGxcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvbGRlciB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Gb2xkZXJzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24vaW5kZXguanMnXG5pbXBvcnQgeyBDaGVja2JveFBvcHVwIH0gZnJvbSAnLi4vLi4vQ2hlY2tib3hQb3B1cC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29sbGVjdGlvbi10eXBlJ1xuXG5leHBvcnQgZnVuY3Rpb24gRmlsdGVyRm9sZGVyVHlwZVBpbGwoKSB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVDb2xsZWN0aW9uRm9sZGVyU2x1Z3M6IHZpc2libGVDb2xsZWN0aW9uU2x1Z3MsXG4gICAgYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzOiBmb2xkZXJDb2xsZWN0aW9uU2x1Z3MsXG4gICAgZm9sZGVyQ29sbGVjdGlvblNsdWcsXG4gICAgcmVmaW5lRm9sZGVyRGF0YSxcbiAgfSA9IHVzZUZvbGRlcigpXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGNvbmZpZywgZ2V0RW50aXR5Q29uZmlnIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IFthbGxDb2xsZWN0aW9uT3B0aW9uc10gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgcmV0dXJuIGNvbmZpZy5jb2xsZWN0aW9ucy5yZWR1Y2UoXG4gICAgICAoYWNjLCBjb2xsZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uLmZvbGRlcnMgJiYgZm9sZGVyQ29sbGVjdGlvblNsdWdzLmluY2x1ZGVzKGNvbGxlY3Rpb24uc2x1ZykpIHtcbiAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24oY29sbGVjdGlvbi5sYWJlbHM/LnBsdXJhbCwgaTE4biksXG4gICAgICAgICAgICB2YWx1ZTogY29sbGVjdGlvbi5zbHVnLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IGdldFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWc6IGZvbGRlckNvbGxlY3Rpb25TbHVnIH0pLmxhYmVscz8ucGx1cmFsLFxuICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiBmb2xkZXJDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgKVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPENoZWNrYm94UG9wdXBcbiAgICAgIEJ1dHRvbj17XG4gICAgICAgIDxCdXR0b24gYnV0dG9uU3R5bGU9XCJwaWxsXCIgZWw9XCJkaXZcIiBpY29uPVwiY2hldnJvblwiIG1hcmdpbj17ZmFsc2V9IHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgIHt2aXNpYmxlQ29sbGVjdGlvblNsdWdzLmxlbmd0aCA/IChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY291bnRgfT57dmlzaWJsZUNvbGxlY3Rpb25TbHVncy5sZW5ndGh9PC9zcGFuPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt0KCd2ZXJzaW9uOnR5cGUnKX1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICB9XG4gICAgICBrZXk9XCJyZWxhdGlvbi10by1zZWxlY3Rpb24tcG9wdXBcIlxuICAgICAgb25DaGFuZ2U9eyh7IHNlbGVjdGVkVmFsdWVzOiByZWxhdGlvblRvIH0pID0+IHtcbiAgICAgICAgdm9pZCByZWZpbmVGb2xkZXJEYXRhKHsgcXVlcnk6IHsgcmVsYXRpb25UbyB9LCB1cGRhdGVVUkw6IHRydWUgfSlcbiAgICAgIH19XG4gICAgICBvcHRpb25zPXthbGxDb2xsZWN0aW9uT3B0aW9uc31cbiAgICAgIHNlbGVjdGVkVmFsdWVzPXt2aXNpYmxlQ29sbGVjdGlvblNsdWdzfVxuICAgIC8+XG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgUG9wdXBQcm9wcyB9IGZyb20gJy4uL1BvcHVwL2luZGV4LmpzJ1xuXG5pbXBvcnQgeyBDaGVja2JveElucHV0IH0gZnJvbSAnLi4vLi4vZmllbGRzL0NoZWNrYm94L0lucHV0LmpzJ1xuaW1wb3J0IHsgUG9wdXAgfSBmcm9tICcuLi9Qb3B1cC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY2hlY2tib3gtcG9wdXAnXG5cbnR5cGUgQ2hlY2tib3hQb3B1cFByb3BzID0ge1xuICBCdXR0b246IFJlYWN0LlJlYWN0Tm9kZVxuICBvbkNoYW5nZTogKGFyZ3M6IHsgY2xvc2U6ICgpID0+IHZvaWQ7IHNlbGVjdGVkVmFsdWVzOiBzdHJpbmdbXSB9KSA9PiB2b2lkXG4gIG9wdGlvbnM6IHtcbiAgICBsYWJlbDogc3RyaW5nXG4gICAgdmFsdWU6IHN0cmluZ1xuICB9W11cbiAgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdXG59ICYgT21pdDxQb3B1cFByb3BzLCAnYnV0dG9uJyB8ICdyZW5kZXInPlxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94UG9wdXAoe1xuICBCdXR0b24sXG4gIGNsYXNzTmFtZSxcbiAgb25DaGFuZ2UsXG4gIG9wdGlvbnMsXG4gIHNlbGVjdGVkVmFsdWVzLFxuICAuLi5wb3B1cFByb3BzXG59OiBDaGVja2JveFBvcHVwUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8UG9wdXBcbiAgICAgIGJ1dHRvbj17QnV0dG9ufVxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9XG4gICAgICBob3Jpem9udGFsQWxpZ249XCJyaWdodFwiXG4gICAgICByZW5kZXI9eyh7IGNsb3NlIH0pID0+IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX29wdGlvbnNgfT5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKHsgbGFiZWwsIHZhbHVlIH0pID0+IChcbiAgICAgICAgICAgIDxDaGVja2JveElucHV0XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkVmFsdWVzPy5pbmNsdWRlcyh2YWx1ZSl9XG4gICAgICAgICAgICAgIGtleT17dmFsdWV9XG4gICAgICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICAgICAgb25Ub2dnbGU9eygpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZFZhbHVlcyA9IHNlbGVjdGVkVmFsdWVzPy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gc2VsZWN0ZWRWYWx1ZXMuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgIDogWy4uLnNlbGVjdGVkVmFsdWVzLCB2YWx1ZV1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZSh7IGNsb3NlLCBzZWxlY3RlZFZhbHVlczogbmV3U2VsZWN0ZWRWYWx1ZXMgfSlcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHNob3dTY3JvbGxiYXJcbiAgICAgIHZlcnRpY2FsQWxpZ249XCJib3R0b21cIlxuICAgICAgey4uLnBvcHVwUHJvcHN9XG4gICAgLz5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50VXNlciwgRG9jdW1lbnRWaWV3Q2xpZW50UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VSb3V0ZXIsIHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMLCBoYXNBdXRvc2F2ZUVuYWJsZWQgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb25uZXInXG5cbmltcG9ydCB0eXBlIHsgRm9ybVByb3BzIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9pbmRleC5qcydcbmltcG9ydCB0eXBlIHsgRm9ybU9uU3VjY2VzcyB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vdHlwZXMuanMnXG5pbXBvcnQgdHlwZSB7IExvY2tlZFN0YXRlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2J1aWxkRm9ybVN0YXRlLmpzJ1xuXG5pbXBvcnQgeyBEb2N1bWVudENvbnRyb2xzIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRG9jdW1lbnRDb250cm9scy9pbmRleC5qcydcbmltcG9ydCB7IERvY3VtZW50RHJhd2VySGVhZGVyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRG9jdW1lbnREcmF3ZXIvRHJhd2VySGVhZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnREcmF3ZXJDb250ZXh0IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRG9jdW1lbnREcmF3ZXIvUHJvdmlkZXIuanMnXG5pbXBvcnQgeyBEb2N1bWVudEZpZWxkcyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0RvY3VtZW50RmllbGRzL2luZGV4LmpzJ1xuaW1wb3J0IHsgRG9jdW1lbnRMb2NrZWQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Eb2N1bWVudExvY2tlZC9pbmRleC5qcydcbmltcG9ydCB7IERvY3VtZW50U3RhbGVEYXRhIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRG9jdW1lbnRTdGFsZURhdGEvaW5kZXguanMnXG5pbXBvcnQgeyBEb2N1bWVudFRha2VPdmVyIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvRG9jdW1lbnRUYWtlT3Zlci9pbmRleC5qcydcbmltcG9ydCB7IExlYXZlV2l0aG91dFNhdmluZyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0xlYXZlV2l0aG91dFNhdmluZy9pbmRleC5qcydcbmltcG9ydCB7IExpdmVQcmV2aWV3V2luZG93IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvTGl2ZVByZXZpZXcvV2luZG93L2luZGV4LmpzJ1xuaW1wb3J0IHsgVXBsb2FkIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvVXBsb2FkL2luZGV4LmpzJ1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRFdmVudHMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRFdmVudHMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRWRpdERlcHRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0VkaXREZXB0aC9pbmRleC5qcydcbmltcG9ydCB7IHVzZUxpdmVQcmV2aWV3Q29udGV4dCwgdXNlUHJldmlld1VSTCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9MaXZlUHJldmlldy9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgT3BlcmF0aW9uUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvT3BlcmF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVDYWNoZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Sb3V0ZUNhY2hlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1JvdXRlVHJhbnNpdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZVNlcnZlckZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9TZXJ2ZXJGdW5jdGlvbnMvaW5kZXguanMnXG5pbXBvcnQgeyBVcGxvYWRDb250cm9sc1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1VwbG9hZENvbnRyb2xzL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVXBsb2FkRWRpdHMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvVXBsb2FkRWRpdHMvaW5kZXguanMnXG5pbXBvcnQgeyBhYm9ydEFuZElnbm9yZSwgaGFuZGxlQWJvcnRSZWYgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvYWJvcnRBbmRJZ25vcmUuanMnXG5pbXBvcnQgeyBoYW5kbGVCYWNrVG9EYXNoYm9hcmQgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvaGFuZGxlQmFja1RvRGFzaGJvYXJkLmpzJ1xuaW1wb3J0IHsgaGFuZGxlR29CYWNrIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2hhbmRsZUdvQmFjay5qcydcbmltcG9ydCB7IGhhbmRsZVRha2VPdmVyIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2hhbmRsZVRha2VPdmVyLmpzJ1xuaW1wb3J0IHsgQXV0aCB9IGZyb20gJy4vQXV0aC9pbmRleC5qcydcbmltcG9ydCB7IFNldERvY3VtZW50U3RlcE5hdiB9IGZyb20gJy4vU2V0RG9jdW1lbnRTdGVwTmF2L2luZGV4LmpzJ1xuaW1wb3J0IHsgU2V0RG9jdW1lbnRUaXRsZSB9IGZyb20gJy4vU2V0RG9jdW1lbnRUaXRsZS9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnY29sbGVjdGlvbi1lZGl0J1xuY29uc3QgUEVORElOR19TVUNDRVNTX1RPQVNUX0tFWSA9ICdwYXlsb2FkLXBlbmRpbmctc3VjY2Vzcy10b2FzdCdcblxuZXhwb3J0IHR5cGUgT25TYXZlQ29udGV4dCA9IHtcbiAgZ2V0RG9jUGVybWlzc2lvbnM/OiBib29sZWFuXG4gIGluY3JlbWVudFZlcnNpb25Db3VudD86IGJvb2xlYW5cbn1cblxuLy8gVGhpcyBjb21wb25lbnQgcmVjZWl2ZXMgcHJvcHMgb25seSBvbiBfcGFnZXNfXG4vLyBXaGVuIHJlbmRlcmVkIHdpdGhpbiBhIGRyYXdlciwgcHJvcHMgYXJlIGVtcHR5XG4vLyBUaGlzIGlzIHNvbGVseSB0byBzdXBwb3J0IGN1c3RvbSBlZGl0IHZpZXdzIHdoaWNoIGdldCBzZXJ2ZXItcmVuZGVyZWRcbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0RWRpdFZpZXcoe1xuICBCZWZvcmVEb2N1bWVudENvbnRyb2xzLFxuICBEZXNjcmlwdGlvbixcbiAgRWRpdE1lbnVJdGVtcyxcbiAgTGl2ZVByZXZpZXc6IEN1c3RvbUxpdmVQcmV2aWV3LFxuICBQcmV2aWV3QnV0dG9uLFxuICBQdWJsaXNoQnV0dG9uLFxuICBTYXZlQnV0dG9uLFxuICBTYXZlRHJhZnRCdXR0b24sXG4gIFN0YXR1cyxcbiAgVW5wdWJsaXNoQnV0dG9uLFxuICBVcGxvYWQ6IEN1c3RvbVVwbG9hZCxcbiAgVXBsb2FkQ29udHJvbHMsXG59OiBEb2N1bWVudFZpZXdDbGllbnRQcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgYWN0aW9uLFxuICAgIEFmdGVyRG9jdW1lbnQsXG4gICAgQWZ0ZXJGaWVsZHMsXG4gICAgYXBpVVJMLFxuICAgIEJlZm9yZUZpZWxkcyxcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBjdXJyZW50RWRpdG9yLFxuICAgIGRhdGEsXG4gICAgZGlzYWJsZUFjdGlvbnMsXG4gICAgZGlzYWJsZUNyZWF0ZSxcbiAgICBkaXNhYmxlTGVhdmVXaXRob3V0U2F2aW5nLFxuICAgIGRvY1Blcm1pc3Npb25zLFxuICAgIGRvY3VtZW50SXNMb2NrZWQsXG4gICAgZG9jdW1lbnRMb2NrU3RhdGUsXG4gICAgZ2V0RG9jUGVybWlzc2lvbnMsXG4gICAgZ2V0RG9jUHJlZmVyZW5jZXMsXG4gICAgZ2xvYmFsU2x1ZyxcbiAgICBoYXNQdWJsaXNoUGVybWlzc2lvbixcbiAgICBoYXNTYXZlUGVybWlzc2lvbixcbiAgICBpbmNyZW1lbnRWZXJzaW9uQ291bnQsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIGlzRWRpdGluZyxcbiAgICBpc0luaXRpYWxpemluZyxcbiAgICBpc0xvY2tlZCxcbiAgICBpc1RyYXNoZWQsXG4gICAgbGFzdFVwZGF0ZVRpbWUsXG4gICAgcmVkaXJlY3RBZnRlckNyZWF0ZSxcbiAgICByZWRpcmVjdEFmdGVyRGVsZXRlLFxuICAgIHJlZGlyZWN0QWZ0ZXJEdXBsaWNhdGUsXG4gICAgcmVkaXJlY3RBZnRlclJlc3RvcmUsXG4gICAgc2V0Q3VycmVudEVkaXRvcixcbiAgICBzZXREYXRhLFxuICAgIHNldERvY3VtZW50SXNMb2NrZWQsXG4gICAgc2V0TGFzdFVwZGF0ZVRpbWUsXG4gICAgdW5sb2NrRG9jdW1lbnQsXG4gICAgdXBkYXRlRG9jdW1lbnRFZGl0b3IsXG4gIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIGNvbnN0IHtcbiAgICBjbGVhckRvYyxcbiAgICBkcmF3ZXJTbHVnLFxuICAgIG9uRGVsZXRlLFxuICAgIG9uRHVwbGljYXRlLFxuICAgIG9uUmVzdG9yZSxcbiAgICBvblNhdmU6IG9uU2F2ZUZyb21Db250ZXh0LFxuICB9ID0gdXNlRG9jdW1lbnREcmF3ZXJDb250ZXh0KClcblxuICBjb25zdCBpc0luRHJhd2VyID0gQm9vbGVhbihkcmF3ZXJTbHVnKVxuXG4gIGNvbnN0IHsgcmVmcmVzaENvb2tpZUFzeW5jLCB1c2VyIH0gPSB1c2VBdXRoKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnLFxuICAgIGNvbmZpZzoge1xuICAgICAgYWRtaW46IHsgdXNlcjogdXNlclNsdWcgfSxcbiAgICAgIHJvdXRlczogeyBhZG1pbjogYWRtaW5Sb3V0ZSB9LFxuICAgICAgc2VydmVyVVJMLFxuICAgIH0sXG4gICAgZ2V0RW50aXR5Q29uZmlnLFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCBjb2xsZWN0aW9uQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHsgY29sbGVjdGlvblNsdWcgfSlcbiAgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2V0RW50aXR5Q29uZmlnKHsgZ2xvYmFsU2x1ZyB9KVxuXG4gIGNvbnN0IGRlcHRoID0gdXNlRWRpdERlcHRoKClcblxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICBjb25zdCBwYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKVxuICBjb25zdCB7IHJlcG9ydFVwZGF0ZSB9ID0gdXNlRG9jdW1lbnRFdmVudHMoKVxuICBjb25zdCB7IHJlc2V0VXBsb2FkRWRpdHMgfSA9IHVzZVVwbG9hZEVkaXRzKClcbiAgY29uc3QgeyBnZXRGb3JtU3RhdGUgfSA9IHVzZVNlcnZlckZ1bmN0aW9ucygpXG4gIGNvbnN0IHsgc3RhcnRSb3V0ZVRyYW5zaXRpb24gfSA9IHVzZVJvdXRlVHJhbnNpdGlvbigpXG4gIGNvbnN0IHsgY2xlYXJSb3V0ZUNhY2hlIH0gPSB1c2VSb3V0ZUNhY2hlKClcbiAgY29uc3Qge1xuICAgIGlzTGl2ZVByZXZpZXdFbmFibGVkLFxuICAgIGlzTGl2ZVByZXZpZXdpbmcsXG4gICAgcHJldmlld1dpbmRvd1R5cGUsXG4gICAgc2V0VVJMOiBzZXRMaXZlUHJldmlld1VSTCxcbiAgICB0eXBlb2ZMaXZlUHJldmlld1VSTCxcbiAgICB1cmw6IGxpdmVQcmV2aWV3VVJMLFxuICB9ID0gdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcbiAgY29uc3QgeyBpc1ByZXZpZXdFbmFibGVkLCBzZXRQcmV2aWV3VVJMIH0gPSB1c2VQcmV2aWV3VVJMKClcblxuICBjb25zdCBhYm9ydE9uQ2hhbmdlUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlcj4obnVsbClcbiAgY29uc3QgYWJvcnRPblNhdmVSZWYgPSB1c2VSZWY8QWJvcnRDb250cm9sbGVyPihudWxsKVxuXG4gIGNvbnN0IGxvY2FsZSA9IHBhcmFtcy5nZXQoJ2xvY2FsZScpXG5cbiAgY29uc3QgZW50aXR5U2x1ZyA9IGNvbGxlY3Rpb25Db25maWc/LnNsdWcgfHwgZ2xvYmFsQ29uZmlnPy5zbHVnXG5cbiAgY29uc3Qgb3BlcmF0aW9uID0gY29sbGVjdGlvblNsdWcgJiYgIWlkID8gJ2NyZWF0ZScgOiAndXBkYXRlJ1xuXG4gIGNvbnN0IGF1dGggPSBjb2xsZWN0aW9uQ29uZmlnID8gY29sbGVjdGlvbkNvbmZpZy5hdXRoIDogdW5kZWZpbmVkXG4gIGNvbnN0IHVwbG9hZCA9IGNvbGxlY3Rpb25Db25maWcgPyBjb2xsZWN0aW9uQ29uZmlnLnVwbG9hZCA6IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGRvY0NvbmZpZyA9IGNvbGxlY3Rpb25Db25maWcgfHwgZ2xvYmFsQ29uZmlnXG5cbiAgY29uc3QgbG9ja0RvY3VtZW50c1Byb3AgPSBkb2NDb25maWc/LmxvY2tEb2N1bWVudHMgIT09IHVuZGVmaW5lZCA/IGRvY0NvbmZpZz8ubG9ja0RvY3VtZW50cyA6IHRydWVcbiAgY29uc3QgaXNMb2NraW5nRW5hYmxlZCA9IGxvY2tEb2N1bWVudHNQcm9wICE9PSBmYWxzZVxuXG4gIGNvbnN0IGxvY2tEdXJhdGlvbkRlZmF1bHQgPSAzMDAgLy8gRGVmYXVsdCA1IG1pbnV0ZXMgaW4gc2Vjb25kc1xuICBjb25zdCBsb2NrRHVyYXRpb24gPVxuICAgIHR5cGVvZiBsb2NrRG9jdW1lbnRzUHJvcCA9PT0gJ29iamVjdCcgPyBsb2NrRG9jdW1lbnRzUHJvcC5kdXJhdGlvbiA6IGxvY2tEdXJhdGlvbkRlZmF1bHRcbiAgY29uc3QgbG9ja0R1cmF0aW9uSW5NaWxsaXNlY29uZHMgPSBsb2NrRHVyYXRpb24gKiAxMDAwXG5cbiAgY29uc3QgYXV0b3NhdmVFbmFibGVkID0gaGFzQXV0b3NhdmVFbmFibGVkKGRvY0NvbmZpZylcblxuICBjb25zdCBbaXNSZWFkT25seUZvckluY29taW5nVXNlciwgc2V0SXNSZWFkT25seUZvckluY29taW5nVXNlcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dUYWtlT3Zlck1vZGFsLCBzZXRTaG93VGFrZU92ZXJNb2RhbF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dTdGFsZURhdGFNb2RhbCwgc2V0U2hvd1N0YWxlRGF0YU1vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IFtlZGl0U2Vzc2lvblN0YXJ0VGltZSwgc2V0RWRpdFNlc3Npb25TdGFydFRpbWVdID0gdXNlU3RhdGUoRGF0ZS5ub3coKSlcblxuICBjb25zdCBoYXNDaGVja2VkRm9yU3RhbGVEYXRhUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBvcmlnaW5hbFVwZGF0ZWRBdFJlZiA9IHVzZVJlZihkYXRhPy51cGRhdGVkQXQpXG4gIGNvbnN0IHNhdmVDb3VudGVyUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IGlzU2F2aW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IGxvY2tFeHBpcnlUaW1lID0gbGFzdFVwZGF0ZVRpbWUgKyBsb2NrRHVyYXRpb25Jbk1pbGxpc2Vjb25kc1xuICBjb25zdCBpc0xvY2tFeHBpcmVkID0gRGF0ZS5ub3coKSA+IGxvY2tFeHBpcnlUaW1lXG5cbiAgY29uc3QgcHJldmVudExlYXZlV2l0aG91dFNhdmluZyA9XG4gICAgIWlzUmVhZE9ubHlGb3JJbmNvbWluZ1VzZXIgJiZcbiAgICAodHlwZW9mIGRpc2FibGVMZWF2ZVdpdGhvdXRTYXZpbmcgIT09ICd1bmRlZmluZWQnXG4gICAgICA/ICFkaXNhYmxlTGVhdmVXaXRob3V0U2F2aW5nXG4gICAgICA6ICFhdXRvc2F2ZUVuYWJsZWQpXG5cbiAgY29uc3Qgc2NoZW1hUGF0aFNlZ21lbnRzID0gdXNlTWVtbygoKSA9PiBbZW50aXR5U2x1Z10sIFtlbnRpdHlTbHVnXSlcblxuICBjb25zdCBbdmFsaWRhdGVCZWZvcmVTdWJtaXQsIHNldFZhbGlkYXRlQmVmb3JlU3VibWl0XSA9IHVzZVN0YXRlKCgpID0+IHtcbiAgICBpZiAob3BlcmF0aW9uID09PSAnY3JlYXRlJyAmJiBhdXRoICYmICFhdXRoLmRpc2FibGVMb2NhbFN0cmF0ZWd5KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9KVxuXG4gIGNvbnN0IG5leHRIcmVmUmVmID0gUmVhY3QudXNlUmVmPG51bGwgfCBzdHJpbmc+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlRG9jdW1lbnRMb2NraW5nID0gdXNlQ2FsbGJhY2soXG4gICAgKGxvY2tlZFN0YXRlOiBMb2NrZWRTdGF0ZSkgPT4ge1xuICAgICAgc2V0RG9jdW1lbnRJc0xvY2tlZCh0cnVlKVxuICAgICAgY29uc3QgcHJldmlvdXNPd25lcklEID1cbiAgICAgICAgdHlwZW9mIGRvY3VtZW50TG9ja1N0YXRlLmN1cnJlbnQ/LnVzZXIgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBkb2N1bWVudExvY2tTdGF0ZS5jdXJyZW50Py51c2VyPy5pZFxuICAgICAgICAgIDogZG9jdW1lbnRMb2NrU3RhdGUuY3VycmVudD8udXNlclxuXG4gICAgICBpZiAobG9ja2VkU3RhdGUgJiYgbG9ja2VkU3RhdGUudXNlcikge1xuICAgICAgICBjb25zdCBsb2NrZWRVc2VySUQgPVxuICAgICAgICAgIHR5cGVvZiBsb2NrZWRTdGF0ZS51c2VyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbG9ja2VkU3RhdGUudXNlciA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gbG9ja2VkU3RhdGUudXNlclxuICAgICAgICAgICAgOiBsb2NrZWRTdGF0ZS51c2VyLmlkXG5cbiAgICAgICAgaWYgKCFkb2N1bWVudExvY2tTdGF0ZS5jdXJyZW50IHx8IGxvY2tlZFVzZXJJRCAhPT0gcHJldmlvdXNPd25lcklEKSB7XG4gICAgICAgICAgaWYgKHByZXZpb3VzT3duZXJJRCA9PT0gdXNlci5pZCAmJiBsb2NrZWRVc2VySUQgIT09IHVzZXIuaWQpIHtcbiAgICAgICAgICAgIHNldFNob3dUYWtlT3Zlck1vZGFsKHRydWUpXG4gICAgICAgICAgICBkb2N1bWVudExvY2tTdGF0ZS5jdXJyZW50Lmhhc1Nob3duTG9ja2VkTW9kYWwgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnRMb2NrU3RhdGUuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGhhc1Nob3duTG9ja2VkTW9kYWw6IGRvY3VtZW50TG9ja1N0YXRlLmN1cnJlbnQ/Lmhhc1Nob3duTG9ja2VkTW9kYWwgfHwgZmFsc2UsXG4gICAgICAgICAgICBpc0xvY2tlZDogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IGxvY2tlZFN0YXRlLnVzZXIgYXMgQ2xpZW50VXNlcixcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0Q3VycmVudEVkaXRvcihsb2NrZWRTdGF0ZS51c2VyIGFzIENsaWVudFVzZXIpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgbGFzdFVwZGF0ZVRpbWUgd2hlbiBsb2NrIHN0YXRlIGNoYW5nZXNcbiAgICAgICAgaWYgKGxvY2tlZFN0YXRlLmxhc3RFZGl0ZWRBdCkge1xuICAgICAgICAgIHNldExhc3RVcGRhdGVUaW1lKG5ldyBEYXRlKGxvY2tlZFN0YXRlLmxhc3RFZGl0ZWRBdCkuZ2V0VGltZSgpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbZG9jdW1lbnRMb2NrU3RhdGUsIHNldEN1cnJlbnRFZGl0b3IsIHNldERvY3VtZW50SXNMb2NrZWQsIHNldExhc3RVcGRhdGVUaW1lLCB1c2VyPy5pZF0sXG4gIClcblxuICBjb25zdCBoYW5kbGVTdGFsZURhdGFSZWxvYWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gUmVzZXQgbW9kYWwgc3RhdGUgc28gaXQgY2FuIGFwcGVhciBhZ2FpbiBpZiBuZWVkZWRcbiAgICBzZXRTaG93U3RhbGVEYXRhTW9kYWwoZmFsc2UpXG5cbiAgICAvLyBSZWZyZXNoIHRvIGdldCB0aGUgbGF0ZXN0IGRhdGFcbiAgICByb3V0ZXIucmVmcmVzaCgpXG4gIH0sIFtyb3V0ZXJdKVxuXG4gIGNvbnN0IGhhbmRsZVByZXZlbnQgPSB1c2VDYWxsYmFjaygobmV4dEhyZWY6IG51bGwgfCBzdHJpbmcpID0+IHtcbiAgICBuZXh0SHJlZlJlZi5jdXJyZW50ID0gbmV4dEhyZWZcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlTGVhdmVDb25maXJtID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxvY2tVc2VyID0gZG9jdW1lbnRMb2NrU3RhdGUuY3VycmVudD8udXNlclxuXG4gICAgY29uc3QgaXNMb2NrT3duZWRCeUN1cnJlbnRVc2VyID1cbiAgICAgIHR5cGVvZiBsb2NrVXNlciA9PT0gJ29iamVjdCcgPyBsb2NrVXNlcj8uaWQgPT09IHVzZXI/LmlkIDogbG9ja1VzZXIgPT09IHVzZXI/LmlkXG5cbiAgICBpZiAoaXNMb2NraW5nRW5hYmxlZCAmJiBkb2N1bWVudElzTG9ja2VkICYmIChpZCB8fCBnbG9iYWxTbHVnKSkge1xuICAgICAgLy8gQ2hlY2sgd2hlcmUgdXNlciBpcyB0cnlpbmcgdG8gZ29cbiAgICAgIGNvbnN0IG5leHRQYXRoID0gbmV4dEhyZWZSZWYuY3VycmVudCA/IG5ldyBVUkwobmV4dEhyZWZSZWYuY3VycmVudCkucGF0aG5hbWUgOiAnJ1xuICAgICAgY29uc3QgaXNJbnRlcm5hbFZpZXcgPSBbJy9wcmV2aWV3JywgJy9hcGknLCAnL3ZlcnNpb25zJ10uc29tZSgocGF0aCkgPT5cbiAgICAgICAgbmV4dFBhdGguaW5jbHVkZXMocGF0aCksXG4gICAgICApXG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgbG9jayBpZiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIGF3YXkgZnJvbSB0aGUgZG9jdW1lbnQgdmlldyB0aGV5IGhhdmUgbG9ja2VkXG4gICAgICBpZiAoaXNMb2NrT3duZWRCeUN1cnJlbnRVc2VyICYmICFpc0ludGVybmFsVmlldykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHVubG9ja0RvY3VtZW50KGlkLCBjb2xsZWN0aW9uU2x1ZyA/PyBnbG9iYWxTbHVnKVxuICAgICAgICAgIHNldERvY3VtZW50SXNMb2NrZWQoZmFsc2UpXG4gICAgICAgICAgc2V0Q3VycmVudEVkaXRvcihudWxsKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdW5sb2NrIGJlZm9yZSBsZWF2ZScsIGVycikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICBkb2N1bWVudElzTG9ja2VkLFxuICAgIGRvY3VtZW50TG9ja1N0YXRlLFxuICAgIGdsb2JhbFNsdWcsXG4gICAgaWQsXG4gICAgaXNMb2NraW5nRW5hYmxlZCxcbiAgICBzZXRDdXJyZW50RWRpdG9yLFxuICAgIHNldERvY3VtZW50SXNMb2NrZWQsXG4gICAgdW5sb2NrRG9jdW1lbnQsXG4gICAgdXNlcj8uaWQsXG4gIF0pXG5cbiAgY29uc3Qgb25TYXZlOiBGb3JtT25TdWNjZXNzPGFueSwgT25TYXZlQ29udGV4dD4gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoanNvbiwgY3R4KSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRleHQsIGZvcm1TdGF0ZSB9ID0gY3R4IHx8IHt9XG5cbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBoYW5kbGVBYm9ydFJlZihhYm9ydE9uU2F2ZVJlZilcblxuICAgICAgY29uc3QgZG9jdW1lbnQgPSBqc29uPy5kb2MgfHwganNvbj8ucmVzdWx0XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRBdCA9IGRvY3VtZW50Py51cGRhdGVkQXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG5cbiAgICAgIC8vIElmIHdlJ3JlIGVkaXRpbmcgdGhlIGRvYyBvZiB0aGUgbG9nZ2VkLWluIHVzZXIsXG4gICAgICAvLyBSZWZyZXNoIHRoZSBjb29raWUgdG8gZ2V0IG5ldyBwZXJtaXNzaW9uc1xuICAgICAgaWYgKHVzZXIgJiYgY29sbGVjdGlvblNsdWcgPT09IHVzZXJTbHVnICYmIGlkID09PSB1c2VyLmlkKSB7XG4gICAgICAgIHZvaWQgcmVmcmVzaENvb2tpZUFzeW5jKClcbiAgICAgIH1cblxuICAgICAgc2V0TGFzdFVwZGF0ZVRpbWUobmV3IERhdGUodXBkYXRlZEF0KS5nZXRUaW1lKCkpXG5cbiAgICAgIC8vIFVwZGF0ZSBzdGFsZSBkYXRhIGNoZWNrIHJlZnMgYWZ0ZXIgc3VjY2Vzc2Z1bCBzYXZlXG4gICAgICAvLyBUaGlzIGFsbG93cyBkZXRlY3RpbmcgaWYgYW5vdGhlciB1c2VyIG1vZGlmaWVzIHRoZSBkb2N1bWVudCBhZnRlciB0aGlzIHNhdmVcbiAgICAgIG9yaWdpbmFsVXBkYXRlZEF0UmVmLmN1cnJlbnQgPSB1cGRhdGVkQXRcbiAgICAgIGhhc0NoZWNrZWRGb3JTdGFsZURhdGFSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1NhdmluZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgaWYgKGNvbnRleHQ/LmluY3JlbWVudFZlcnNpb25Db3VudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgaW5jcmVtZW50VmVyc2lvbkNvdW50KClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBzZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZvaWQgc2V0RGF0YShkb2N1bWVudCB8fCB7fSlcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNhdmVGcm9tQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBpZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSdcblxuICAgICAgICB2b2lkIG9uU2F2ZUZyb21Db250ZXh0KHtcbiAgICAgICAgICAuLi4oanNvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0b2RvOiB0aGlzIGlzIG5vdCByaWdodCwgc2hvdWxkIGJlIHVuZGVyIGBkb2NgP1xuICAgICAgICAgIHVwZGF0ZWRBdDpcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZSdcbiAgICAgICAgICAgICAgPyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgOiBkb2N1bWVudD8udXBkYXRlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0VkaXRpbmcgJiYgZGVwdGggPCAyICYmIHJlZGlyZWN0QWZ0ZXJDcmVhdGUgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIFN0b3JlIHN1Y2Nlc3MgbWVzc2FnZSB0byBzaG93IGFmdGVyIHJlZGlyZWN0XG4gICAgICAgIGlmIChqc29uLm1lc3NhZ2UgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShQRU5ESU5HX1NVQ0NFU1NfVE9BU1RfS0VZLCBqc29uLm1lc3NhZ2UpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgc2FtZSBsb2NhbGUgaWYgaXQncyBiZWVuIHNldFxuICAgICAgICBjb25zdCByZWRpcmVjdFJvdXRlID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgICAgICAgIGFkbWluUm91dGUsXG4gICAgICAgICAgcGF0aDogYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25TbHVnfS8ke2RvY3VtZW50Py5pZH0ke2xvY2FsZSA/IGA/bG9jYWxlPSR7bG9jYWxlfWAgOiAnJ31gLFxuICAgICAgICB9KVxuXG4gICAgICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uKCgpID0+IHJvdXRlci5wdXNoKHJlZGlyZWN0Um91dGUpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRVcGxvYWRFZGl0cygpXG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZXh0Py5nZXREb2NQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgZ2V0RG9jUGVybWlzc2lvbnMoanNvbilcbiAgICAgIH1cblxuICAgICAgaWYgKGlkIHx8IGdsb2JhbFNsdWcpIHtcbiAgICAgICAgY29uc3QgZG9jUHJlZmVyZW5jZXMgPSBhd2FpdCBnZXREb2NQcmVmZXJlbmNlcygpXG5cbiAgICAgICAgY29uc3QgeyBsaXZlUHJldmlld1VSTCwgcHJldmlld1VSTCwgc3RhdGUgfSA9IGF3YWl0IGdldEZvcm1TdGF0ZSh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgZGF0YTogZG9jdW1lbnQsXG4gICAgICAgICAgZG9jUGVybWlzc2lvbnMsXG4gICAgICAgICAgZG9jUHJlZmVyZW5jZXMsXG4gICAgICAgICAgZm9ybVN0YXRlLFxuICAgICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgIHJlbmRlckFsbEZpZWxkczogZmFsc2UsXG4gICAgICAgICAgcmV0dXJuTGl2ZVByZXZpZXdVUkw6IGlzTGl2ZVByZXZpZXdFbmFibGVkICYmIHR5cGVvZkxpdmVQcmV2aWV3VVJMID09PSAnZnVuY3Rpb24nLFxuICAgICAgICAgIHJldHVybkxvY2tTdGF0dXM6IGZhbHNlLFxuICAgICAgICAgIHJldHVyblByZXZpZXdVUkw6IGlzUHJldmlld0VuYWJsZWQsXG4gICAgICAgICAgc2NoZW1hUGF0aDogc2NoZW1hUGF0aFNlZ21lbnRzLmpvaW4oJy4nKSxcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIHNraXBWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEZvciB1cGxvYWQgY29sbGVjdGlvbnMsIGNsZWFyIHRoZSBmaWxlIGZpZWxkIGZyb20gdGhlIHJldHVybmVkIHN0YXRlXG4gICAgICAgIC8vIHRvIHByZXZlbnQgdGhlIEZpbGUgb2JqZWN0IGZyb20gcGVyc2lzdGluZyBpbiBmb3JtIHN0YXRlIGFmdGVyIHNhdmVcbiAgICAgICAgaWYgKHVwbG9hZCAmJiBzdGF0ZSkge1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5maWxlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBVbmxvY2sgdGhlIGRvY3VtZW50IGFmdGVyIHNhdmVcbiAgICAgICAgaWYgKGlzTG9ja2luZ0VuYWJsZWQpIHtcbiAgICAgICAgICBzZXREb2N1bWVudElzTG9ja2VkKGZhbHNlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGl2ZVByZXZpZXdFbmFibGVkICYmIHR5cGVvZkxpdmVQcmV2aWV3VVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc2V0TGl2ZVByZXZpZXdVUkwobGl2ZVByZXZpZXdVUkwpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQcmV2aWV3RW5hYmxlZCkge1xuICAgICAgICAgIHNldFByZXZpZXdVUkwocHJldmlld1VSTClcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9ydFVwZGF0ZSh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgZG9jOiBkb2N1bWVudCxcbiAgICAgICAgICBkcmF3ZXJTbHVnLFxuICAgICAgICAgIGVudGl0eVNsdWcsXG4gICAgICAgICAgb3BlcmF0aW9uOiAndXBkYXRlJyxcbiAgICAgICAgICB1cGRhdGVkQXQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWJvcnRPblNhdmVSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgICByZXR1cm4gc3RhdGVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcG9ydFVwZGF0ZSh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgZG9jOiBkb2N1bWVudCxcbiAgICAgICAgICBkcmF3ZXJTbHVnLFxuICAgICAgICAgIGVudGl0eVNsdWcsXG4gICAgICAgICAgb3BlcmF0aW9uOiAnY3JlYXRlJyxcbiAgICAgICAgICB1cGRhdGVkQXQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICB1c2VyLFxuICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICB1c2VyU2x1ZyxcbiAgICAgIGlkLFxuICAgICAgc2V0TGFzdFVwZGF0ZVRpbWUsXG4gICAgICBzZXREYXRhLFxuICAgICAgb25TYXZlRnJvbUNvbnRleHQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBkZXB0aCxcbiAgICAgIHJlZGlyZWN0QWZ0ZXJDcmVhdGUsXG4gICAgICBnbG9iYWxTbHVnLFxuICAgICAgcmVmcmVzaENvb2tpZUFzeW5jLFxuICAgICAgaW5jcmVtZW50VmVyc2lvbkNvdW50LFxuICAgICAgYWRtaW5Sb3V0ZSxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHN0YXJ0Um91dGVUcmFuc2l0aW9uLFxuICAgICAgcm91dGVyLFxuICAgICAgcmVzZXRVcGxvYWRFZGl0cyxcbiAgICAgIGdldERvY1Blcm1pc3Npb25zLFxuICAgICAgZ2V0RG9jUHJlZmVyZW5jZXMsXG4gICAgICBnZXRGb3JtU3RhdGUsXG4gICAgICBkb2NQZXJtaXNzaW9ucyxcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIGlzTGl2ZVByZXZpZXdFbmFibGVkLFxuICAgICAgdHlwZW9mTGl2ZVByZXZpZXdVUkwsXG4gICAgICBpc1ByZXZpZXdFbmFibGVkLFxuICAgICAgc2NoZW1hUGF0aFNlZ21lbnRzLFxuICAgICAgdXBsb2FkLFxuICAgICAgaXNMb2NraW5nRW5hYmxlZCxcbiAgICAgIHJlcG9ydFVwZGF0ZSxcbiAgICAgIGRyYXdlclNsdWcsXG4gICAgICBlbnRpdHlTbHVnLFxuICAgICAgc2V0RG9jdW1lbnRJc0xvY2tlZCxcbiAgICAgIHNldExpdmVQcmV2aWV3VVJMLFxuICAgICAgc2V0UHJldmlld1VSTCxcbiAgICBdLFxuICApXG5cbiAgY29uc3Qgb25DaGFuZ2U6IEZvcm1Qcm9wc1snb25DaGFuZ2UnXVswXSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGZvcm1TdGF0ZTogcHJldkZvcm1TdGF0ZSwgc3VibWl0dGVkIH0pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBoYW5kbGVBYm9ydFJlZihhYm9ydE9uQ2hhbmdlUmVmKVxuXG4gICAgICAvLyBDYXB0dXJlIHNhdmUgc3RhdGUgYmVmb3JlIHRoZSBhc3luYyBmb3JtLXN0YXRlIHJlcXVlc3Qgc28gd2UgY2FuIGRldGVjdFxuICAgICAgLy8gaWYgYSBzYXZlIHdhcyB0cmlnZ2VyZWQgd2hpbGUgdGhpcyByZXF1ZXN0IHdhcyBpbi1mbGlnaHRcbiAgICAgIGNvbnN0IHNhdmVDb3VudGVyQXRTdGFydCA9IHNhdmVDb3VudGVyUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzU2F2aW5nQXRTdGFydCA9IGlzU2F2aW5nUmVmLmN1cnJlbnRcblxuICAgICAgLy8gU3luYyBvcmlnaW5hbFVwZGF0ZWRBdCB3aXRoIGN1cnJlbnQgZGF0YSBpZiBpdCdzIE5FV0VSIChlLmcuLCBhZnRlciByb3V0ZXIucmVmcmVzaCgpKVxuICAgICAgaWYgKGRhdGE/LnVwZGF0ZWRBdCAmJiBkYXRhLnVwZGF0ZWRBdCA+IG9yaWdpbmFsVXBkYXRlZEF0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgb3JpZ2luYWxVcGRhdGVkQXRSZWYuY3VycmVudCA9IGRhdGEudXBkYXRlZEF0XG4gICAgICAgIC8vIFJlc2V0IGNoZWNrIGZsYWcgc28gd2UgY2FuIGRldGVjdCBuZXcgc3RhbGUgZGF0YVxuICAgICAgICBoYXNDaGVja2VkRm9yU3RhbGVEYXRhUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KClcbiAgICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RVcGRhdGUgPSBjdXJyZW50VGltZSAtIGVkaXRTZXNzaW9uU3RhcnRUaW1lXG5cbiAgICAgIGNvbnN0IHVwZGF0ZUxhc3RFZGl0ZWQgPSBpc0xvY2tpbmdFbmFibGVkICYmIHRpbWVTaW5jZUxhc3RVcGRhdGUgPj0gMTAwMDAgLy8gMTAgc2Vjb25kc1xuXG4gICAgICBpZiAodXBkYXRlTGFzdEVkaXRlZCkge1xuICAgICAgICBzZXRFZGl0U2Vzc2lvblN0YXJ0VGltZShjdXJyZW50VGltZSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHN0YWxlIGRhdGEgb24gZmlyc3QgZWRpdCBvbmx5XG4gICAgICAvLyBTa2lwIHRoaXMgY2hlY2sgZW50aXJlbHkgZm9yIGF1dG9zYXZlLWVuYWJsZWQgY29sbGVjdGlvbnMvZ2xvYmFscyB0byBwcmV2ZW50XG4gICAgICAvLyBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgdXNlcidzIG93biBhdXRvc2F2ZXNcbiAgICAgIGNvbnN0IGNoZWNrRm9yU3RhbGVEYXRhID1cbiAgICAgICAgIWhhc0NoZWNrZWRGb3JTdGFsZURhdGFSZWYuY3VycmVudCAmJlxuICAgICAgICBvcmlnaW5hbFVwZGF0ZWRBdFJlZi5jdXJyZW50ICYmXG4gICAgICAgIG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgJiZcbiAgICAgICAgIWF1dG9zYXZlRW5hYmxlZFxuXG4gICAgICBpZiAoY2hlY2tGb3JTdGFsZURhdGEpIHtcbiAgICAgICAgaGFzQ2hlY2tlZEZvclN0YWxlRGF0YVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkb2NQcmVmZXJlbmNlcyA9IGF3YWl0IGdldERvY1ByZWZlcmVuY2VzKClcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0Rm9ybVN0YXRlKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNoZWNrRm9yU3RhbGVEYXRhLFxuICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgZG9jUGVybWlzc2lvbnMsXG4gICAgICAgIGRvY1ByZWZlcmVuY2VzLFxuICAgICAgICBmb3JtU3RhdGU6IHByZXZGb3JtU3RhdGUsXG4gICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgb3JpZ2luYWxVcGRhdGVkQXQ6IGNoZWNrRm9yU3RhbGVEYXRhID8gb3JpZ2luYWxVcGRhdGVkQXRSZWYuY3VycmVudCA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVuZGVyQWxsRmllbGRzOiBmYWxzZSxcbiAgICAgICAgcmV0dXJuTG9ja1N0YXR1czogaXNMb2NraW5nRW5hYmxlZCxcbiAgICAgICAgc2NoZW1hUGF0aDogc2NoZW1hUGF0aFNlZ21lbnRzLmpvaW4oJy4nKSxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgc2tpcFZhbGlkYXRpb246ICFzdWJtaXR0ZWQsXG4gICAgICAgIHVwZGF0ZUxhc3RFZGl0ZWQsXG4gICAgICB9KVxuXG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBsb2NrZWRTdGF0ZSwgc3RhbGVEYXRhU3RhdGUsIHN0YXRlIH0gPSByZXN1bHRcblxuICAgICAgaWYgKGlzTG9ja2luZ0VuYWJsZWQpIHtcbiAgICAgICAgaGFuZGxlRG9jdW1lbnRMb2NraW5nKGxvY2tlZFN0YXRlKVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgc3RhbGUgZGF0YSBkZXRlY3Rpb24uXG4gICAgICAvLyBTa2lwIGlmIGEgc2F2ZSB3YXMgaW4tZmxpZ2h0IHdoZW4gdGhpcyByZXF1ZXN0IHN0YXJ0ZWQsIG9yIGlmIHRoZSBzYXZlIGNvdW50ZXJcbiAgICAgIC8vIGhhcyBhZHZhbmNlZCDigJQgZWl0aGVyIHdheSB0aGUgbmV3ZXIgdXBkYXRlZEF0IGlzIGZyb20gb3VyIE9XTiBzYXZlLlxuICAgICAgaWYgKFxuICAgICAgICBzdGFsZURhdGFTdGF0ZT8uaXNTdGFsZSAmJlxuICAgICAgICAhaXNTYXZpbmdBdFN0YXJ0ICYmXG4gICAgICAgIHNhdmVDb3VudGVyUmVmLmN1cnJlbnQgPT09IHNhdmVDb3VudGVyQXRTdGFydFxuICAgICAgKSB7XG4gICAgICAgIHNldFNob3dTdGFsZURhdGFNb2RhbCh0cnVlKVxuICAgICAgfVxuXG4gICAgICBhYm9ydE9uQ2hhbmdlUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0sXG4gICAgW1xuICAgICAgZGF0YT8udXBkYXRlZEF0LFxuICAgICAgZWRpdFNlc3Npb25TdGFydFRpbWUsXG4gICAgICBpc0xvY2tpbmdFbmFibGVkLFxuICAgICAgZ2V0RG9jUHJlZmVyZW5jZXMsXG4gICAgICBnZXRGb3JtU3RhdGUsXG4gICAgICBpZCxcbiAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgZG9jUGVybWlzc2lvbnMsXG4gICAgICBnbG9iYWxTbHVnLFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgc2NoZW1hUGF0aFNlZ21lbnRzLFxuICAgICAgaGFuZGxlRG9jdW1lbnRMb2NraW5nLFxuICAgICAgYXV0b3NhdmVFbmFibGVkLFxuICAgIF0sXG4gIClcblxuICAvLyBDbGVhbiB1cCB3aGVuIHRoZSBjb21wb25lbnQgdW5tb3VudHMgb3Igd2hlbiB0aGUgZG9jdW1lbnQgaXMgdW5sb2NrZWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2V0U2hvd1Rha2VPdmVyTW9kYWwoZmFsc2UpXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFib3J0T25DaGFuZ2UgPSBhYm9ydE9uQ2hhbmdlUmVmLmN1cnJlbnRcbiAgICBjb25zdCBhYm9ydE9uU2F2ZSA9IGFib3J0T25TYXZlUmVmLmN1cnJlbnRcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhYm9ydEFuZElnbm9yZShhYm9ydE9uQ2hhbmdlKVxuICAgICAgYWJvcnRBbmRJZ25vcmUoYWJvcnRPblNhdmUpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBTaG93IHBlbmRpbmcgc3VjY2VzcyB0b2FzdCBhZnRlciByZWRpcmVjdCBmcm9tIGNyZWF0ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNJbml0aWFsaXppbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IHBlbmRpbmdNZXNzYWdlID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oUEVORElOR19TVUNDRVNTX1RPQVNUX0tFWSlcblxuICAgICAgaWYgKHBlbmRpbmdNZXNzYWdlKSB7XG4gICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFBFTkRJTkdfU1VDQ0VTU19UT0FTVF9LRVkpXG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MocGVuZGluZ01lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNJbml0aWFsaXppbmddKVxuXG4gIGNvbnN0IHNob3VsZFNob3dEb2N1bWVudExvY2tlZE1vZGFsID1cbiAgICBkb2N1bWVudElzTG9ja2VkICYmXG4gICAgY3VycmVudEVkaXRvciAmJlxuICAgICh0eXBlb2YgY3VycmVudEVkaXRvciA9PT0gJ29iamVjdCdcbiAgICAgID8gY3VycmVudEVkaXRvci5pZCAhPT0gdXNlcj8uaWRcbiAgICAgIDogY3VycmVudEVkaXRvciAhPT0gdXNlcj8uaWQpICYmXG4gICAgIWlzUmVhZE9ubHlGb3JJbmNvbWluZ1VzZXIgJiZcbiAgICAhc2hvd1Rha2VPdmVyTW9kYWwgJiZcbiAgICAhZG9jdW1lbnRMb2NrU3RhdGUuY3VycmVudD8uaGFzU2hvd25Mb2NrZWRNb2RhbCAmJlxuICAgICFpc0xvY2tFeHBpcmVkXG5cbiAgY29uc3QgaXNGb2xkZXJDb2xsZWN0aW9uID0gY29uZmlnLmZvbGRlcnMgJiYgY29sbGVjdGlvblNsdWcgPT09IGNvbmZpZy5mb2xkZXJzPy5zbHVnXG5cbiAgcmV0dXJuIChcbiAgICA8bWFpblxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGJhc2VDbGFzcyxcbiAgICAgICAgKGlkIHx8IGdsb2JhbFNsdWcpICYmIGAke2Jhc2VDbGFzc30tLWlzLWVkaXRpbmdgLFxuICAgICAgICBnbG9iYWxTbHVnICYmIGBnbG9iYWwtZWRpdC0tJHtnbG9iYWxTbHVnfWAsXG4gICAgICAgIGNvbGxlY3Rpb25TbHVnICYmIGBjb2xsZWN0aW9uLWVkaXQtLSR7Y29sbGVjdGlvblNsdWd9YCxcbiAgICAgICAgaXNMaXZlUHJldmlld2luZyAmJiBwcmV2aWV3V2luZG93VHlwZSA9PT0gJ2lmcmFtZScgJiYgYCR7YmFzZUNsYXNzfS0taXMtbGl2ZS1wcmV2aWV3aW5nYCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgID5cbiAgICAgIDxPcGVyYXRpb25Qcm92aWRlciBvcGVyYXRpb249e29wZXJhdGlvbn0+XG4gICAgICAgIDxGb3JtXG4gICAgICAgICAgYWN0aW9uPXthY3Rpb259XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19mb3JtYH1cbiAgICAgICAgICBkaXNhYmxlZD17aXNSZWFkT25seUZvckluY29taW5nVXNlciB8fCBpc0luaXRpYWxpemluZyB8fCAhaGFzU2F2ZVBlcm1pc3Npb24gfHwgaXNUcmFzaGVkfVxuICAgICAgICAgIGRpc2FibGVTdWNjZXNzU3RhdHVzPXshaXNFZGl0aW5nICYmIGRlcHRoIDwgMiAmJiByZWRpcmVjdEFmdGVyQ3JlYXRlICE9PSBmYWxzZX1cbiAgICAgICAgICBkaXNhYmxlVmFsaWRhdGlvbk9uU3VibWl0PXshdmFsaWRhdGVCZWZvcmVTdWJtaXR9XG4gICAgICAgICAgaW5pdGlhbFN0YXRlPXshaXNJbml0aWFsaXppbmcgJiYgaW5pdGlhbFN0YXRlfVxuICAgICAgICAgIGlzRG9jdW1lbnRGb3JtPXt0cnVlfVxuICAgICAgICAgIGlzSW5pdGlhbGl6aW5nPXtpc0luaXRpYWxpemluZ31cbiAgICAgICAgICBrZXk9e2Ake2lzTG9ja2VkfWB9XG4gICAgICAgICAgbWV0aG9kPXtpZCA/ICdQQVRDSCcgOiAnUE9TVCd9XG4gICAgICAgICAgb25DaGFuZ2U9e1tvbkNoYW5nZV19XG4gICAgICAgICAgb25TdWJtaXQ9eygpID0+IHtcbiAgICAgICAgICAgIHNhdmVDb3VudGVyUmVmLmN1cnJlbnQgKz0gMVxuICAgICAgICAgICAgaXNTYXZpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU3VjY2Vzcz17b25TYXZlfVxuICAgICAgICA+XG4gICAgICAgICAge2lzSW5EcmF3ZXIgJiYgKFxuICAgICAgICAgICAgPERvY3VtZW50RHJhd2VySGVhZGVyXG4gICAgICAgICAgICAgIEFmdGVySGVhZGVyPXtEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgZHJhd2VyU2x1Zz17ZHJhd2VyU2x1Z31cbiAgICAgICAgICAgICAgc2hvd0RvY3VtZW50SUQ9eyFpc0ZvbGRlckNvbGxlY3Rpb259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzTG9ja2luZ0VuYWJsZWQgJiYgc2hvdWxkU2hvd0RvY3VtZW50TG9ja2VkTW9kYWwgJiYgKFxuICAgICAgICAgICAgPERvY3VtZW50TG9ja2VkXG4gICAgICAgICAgICAgIGhhbmRsZUdvQmFjaz17KCkgPT4gaGFuZGxlR29CYWNrKHsgYWRtaW5Sb3V0ZSwgY29sbGVjdGlvblNsdWcsIHJvdXRlciwgc2VydmVyVVJMIH0pfVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17c2hvdWxkU2hvd0RvY3VtZW50TG9ja2VkTW9kYWx9XG4gICAgICAgICAgICAgIG9uUmVhZE9ubHk9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRJc1JlYWRPbmx5Rm9ySW5jb21pbmdVc2VyKHRydWUpXG4gICAgICAgICAgICAgICAgc2V0U2hvd1Rha2VPdmVyTW9kYWwoZmFsc2UpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uVGFrZU92ZXI9eygpID0+XG4gICAgICAgICAgICAgICAgaGFuZGxlVGFrZU92ZXIoe1xuICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICBjbGVhclJvdXRlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50TG9ja1N0YXRlUmVmOiBkb2N1bWVudExvY2tTdGF0ZSxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgICAgICAgICAgICBpc0xvY2tpbmdFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgaXNXaXRoaW5Eb2M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudEVkaXRvcixcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZURvY3VtZW50RWRpdG9yLFxuICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHVwZGF0ZWRBdD17bGFzdFVwZGF0ZVRpbWV9XG4gICAgICAgICAgICAgIHVzZXI9e2N1cnJlbnRFZGl0b3J9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzTG9ja2luZ0VuYWJsZWQgJiYgc2hvd1Rha2VPdmVyTW9kYWwgJiYgKFxuICAgICAgICAgICAgPERvY3VtZW50VGFrZU92ZXJcbiAgICAgICAgICAgICAgaGFuZGxlQmFja1RvRGFzaGJvYXJkPXsoKSA9PiBoYW5kbGVCYWNrVG9EYXNoYm9hcmQoeyBhZG1pblJvdXRlLCByb3V0ZXIsIHNlcnZlclVSTCB9KX1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e3Nob3dUYWtlT3Zlck1vZGFsfVxuICAgICAgICAgICAgICBvblJlYWRPbmx5PXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0SXNSZWFkT25seUZvckluY29taW5nVXNlcih0cnVlKVxuICAgICAgICAgICAgICAgIHNldFNob3dUYWtlT3Zlck1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaG93U3RhbGVEYXRhTW9kYWwgJiYgKFxuICAgICAgICAgICAgPERvY3VtZW50U3RhbGVEYXRhIGlzQWN0aXZlPXtzaG93U3RhbGVEYXRhTW9kYWx9IG9uUmVsb2FkPXtoYW5kbGVTdGFsZURhdGFSZWxvYWR9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7cHJldmVudExlYXZlV2l0aG91dFNhdmluZyAmJiAoXG4gICAgICAgICAgICA8TGVhdmVXaXRob3V0U2F2aW5nIG9uQ29uZmlybT17aGFuZGxlTGVhdmVDb25maXJtfSBvblByZXZlbnQ9e2hhbmRsZVByZXZlbnR9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7IWlzSW5EcmF3ZXIgJiYgKFxuICAgICAgICAgICAgPFNldERvY3VtZW50U3RlcE5hdlxuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvbkNvbmZpZz8uc2x1Z31cbiAgICAgICAgICAgICAgZ2xvYmFsU2x1Zz17Z2xvYmFsQ29uZmlnPy5zbHVnfVxuICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgIGlzVHJhc2hlZD17aXNUcmFzaGVkfVxuICAgICAgICAgICAgICBwbHVyYWxMYWJlbD17Y29sbGVjdGlvbkNvbmZpZz8ubGFiZWxzPy5wbHVyYWx9XG4gICAgICAgICAgICAgIHVzZUFzVGl0bGU9e2NvbGxlY3Rpb25Db25maWc/LmFkbWluPy51c2VBc1RpdGxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxTZXREb2N1bWVudFRpdGxlXG4gICAgICAgICAgICBjb2xsZWN0aW9uQ29uZmlnPXtjb2xsZWN0aW9uQ29uZmlnfVxuICAgICAgICAgICAgY29uZmlnPXtjb25maWd9XG4gICAgICAgICAgICBmYWxsYmFjaz17ZGVwdGggPD0gMSA/IGlkPy50b1N0cmluZygpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgZ2xvYmFsQ29uZmlnPXtnbG9iYWxDb25maWd9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8RG9jdW1lbnRDb250cm9sc1xuICAgICAgICAgICAgYXBpVVJMPXthcGlVUkx9XG4gICAgICAgICAgICBCZWZvcmVEb2N1bWVudENvbnRyb2xzPXtCZWZvcmVEb2N1bWVudENvbnRyb2xzfVxuICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50cz17e1xuICAgICAgICAgICAgICBQcmV2aWV3QnV0dG9uLFxuICAgICAgICAgICAgICBQdWJsaXNoQnV0dG9uLFxuICAgICAgICAgICAgICBTYXZlQnV0dG9uLFxuICAgICAgICAgICAgICBTYXZlRHJhZnRCdXR0b24sXG4gICAgICAgICAgICAgIFN0YXR1cyxcbiAgICAgICAgICAgICAgVW5wdWJsaXNoQnV0dG9uLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICBkaXNhYmxlQWN0aW9ucz17ZGlzYWJsZUFjdGlvbnMgfHwgaXNGb2xkZXJDb2xsZWN0aW9uIHx8IGlzVHJhc2hlZH1cbiAgICAgICAgICAgIGRpc2FibGVDcmVhdGU9e2Rpc2FibGVDcmVhdGV9XG4gICAgICAgICAgICBFZGl0TWVudUl0ZW1zPXtFZGl0TWVudUl0ZW1zfVxuICAgICAgICAgICAgaGFzUHVibGlzaFBlcm1pc3Npb249e2hhc1B1Ymxpc2hQZXJtaXNzaW9ufVxuICAgICAgICAgICAgaGFzU2F2ZVBlcm1pc3Npb249e2hhc1NhdmVQZXJtaXNzaW9ufVxuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgaXNFZGl0aW5nPXtpc0VkaXRpbmd9XG4gICAgICAgICAgICBpc0luRHJhd2VyPXtpc0luRHJhd2VyfVxuICAgICAgICAgICAgaXNUcmFzaGVkPXtpc1RyYXNoZWR9XG4gICAgICAgICAgICBvbkRlbGV0ZT17b25EZWxldGV9XG4gICAgICAgICAgICBvbkRyYXdlckNyZWF0ZU5ldz17Y2xlYXJEb2N9XG4gICAgICAgICAgICBvbkR1cGxpY2F0ZT17b25EdXBsaWNhdGV9XG4gICAgICAgICAgICBvblJlc3RvcmU9e29uUmVzdG9yZX1cbiAgICAgICAgICAgIG9uU2F2ZT17b25TYXZlfVxuICAgICAgICAgICAgb25UYWtlT3Zlcj17KCkgPT5cbiAgICAgICAgICAgICAgaGFuZGxlVGFrZU92ZXIoe1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIGNsZWFyUm91dGVDYWNoZSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBkb2N1bWVudExvY2tTdGF0ZVJlZjogZG9jdW1lbnRMb2NrU3RhdGUsXG4gICAgICAgICAgICAgICAgZ2xvYmFsU2x1ZyxcbiAgICAgICAgICAgICAgICBpc0xvY2tpbmdFbmFibGVkLFxuICAgICAgICAgICAgICAgIGlzV2l0aGluRG9jOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNldEN1cnJlbnRFZGl0b3IsXG4gICAgICAgICAgICAgICAgc2V0SXNSZWFkT25seUZvckluY29taW5nVXNlcixcbiAgICAgICAgICAgICAgICB1cGRhdGVEb2N1bWVudEVkaXRvcixcbiAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGVybWlzc2lvbnM9e2RvY1Blcm1pc3Npb25zfVxuICAgICAgICAgICAgcmVhZE9ubHlGb3JJbmNvbWluZ1VzZXI9e2lzUmVhZE9ubHlGb3JJbmNvbWluZ1VzZXJ9XG4gICAgICAgICAgICByZWRpcmVjdEFmdGVyRGVsZXRlPXtyZWRpcmVjdEFmdGVyRGVsZXRlfVxuICAgICAgICAgICAgcmVkaXJlY3RBZnRlckR1cGxpY2F0ZT17cmVkaXJlY3RBZnRlckR1cGxpY2F0ZX1cbiAgICAgICAgICAgIHJlZGlyZWN0QWZ0ZXJSZXN0b3JlPXtyZWRpcmVjdEFmdGVyUmVzdG9yZX1cbiAgICAgICAgICAgIHNsdWc9e2NvbGxlY3Rpb25Db25maWc/LnNsdWcgfHwgZ2xvYmFsQ29uZmlnPy5zbHVnfVxuICAgICAgICAgICAgdXNlcj17Y3VycmVudEVkaXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgICBgJHtiYXNlQ2xhc3N9X19tYWluLXdyYXBwZXJgLFxuICAgICAgICAgICAgICBwcmV2aWV3V2luZG93VHlwZSA9PT0gJ3BvcHVwJyAmJiBgJHtiYXNlQ2xhc3N9LS1kZXRhY2hlZGAsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgICAgIGAke2Jhc2VDbGFzc31fX21haW5gLFxuICAgICAgICAgICAgICAgIHByZXZpZXdXaW5kb3dUeXBlID09PSAncG9wdXAnICYmIGAke2Jhc2VDbGFzc31fX21haW4tLXBvcHVwLW9wZW5gLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5qb2luKCcgJyl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxEb2N1bWVudEZpZWxkc1xuICAgICAgICAgICAgICAgIEFmdGVyRmllbGRzPXtBZnRlckZpZWxkc31cbiAgICAgICAgICAgICAgICBCZWZvcmVGaWVsZHM9e1xuICAgICAgICAgICAgICAgICAgQmVmb3JlRmllbGRzIHx8IChcbiAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgIHthdXRoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxBdXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYXV0aGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnPXtjb2xsZWN0aW9uQ29uZmlnLnNsdWd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVMb2NhbFN0cmF0ZWd5PXtjb2xsZWN0aW9uQ29uZmlnLmF1dGg/LmRpc2FibGVMb2NhbFN0cmF0ZWd5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbD17ZGF0YT8uZW1haWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2luV2l0aFVzZXJuYW1lPXthdXRoPy5sb2dpbldpdGhVc2VybmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uPXtvcGVyYXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXshaGFzU2F2ZVBlcm1pc3Npb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVQYXNzd29yZD17IWlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWxpZGF0ZUJlZm9yZVN1Ym1pdD17c2V0VmFsaWRhdGVCZWZvcmVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1jb21waWxlci9yZWFjdC1jb21waWxlclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VBUElLZXk9e2F1dGgudXNlQVBJS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZT17ZGF0YT8udXNlcm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeT17YXV0aC52ZXJpZnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge3VwbG9hZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxVcGxvYWRDb250cm9sc1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtDdXN0b21VcGxvYWQgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVwbG9hZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1Zz17Y29sbGVjdGlvbkNvbmZpZy5zbHVnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsU3RhdGU9e2luaXRpYWxTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQ29uZmlnPXt1cGxvYWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwbG9hZENvbnRyb2xzPXtVcGxvYWRDb250cm9sc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VcGxvYWRDb250cm9sc1Byb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbj17RGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgZG9jUGVybWlzc2lvbnM9e2RvY1Blcm1pc3Npb25zfVxuICAgICAgICAgICAgICAgIGZpZWxkcz17ZG9jQ29uZmlnLmZpZWxkc31cbiAgICAgICAgICAgICAgICBmb3JjZVNpZGViYXJXcmFwPXtpc0xpdmVQcmV2aWV3aW5nfVxuICAgICAgICAgICAgICAgIGlzVHJhc2hlZD17aXNUcmFzaGVkfVxuICAgICAgICAgICAgICAgIHJlYWRPbmx5PXtpc1JlYWRPbmx5Rm9ySW5jb21pbmdVc2VyIHx8ICFoYXNTYXZlUGVybWlzc2lvbiB8fCBpc1RyYXNoZWR9XG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aFNlZ21lbnRzPXtzY2hlbWFQYXRoU2VnbWVudHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtBZnRlckRvY3VtZW50fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7aXNMaXZlUHJldmlld0VuYWJsZWQgJiYgIWlzSW5EcmF3ZXIgJiYgbGl2ZVByZXZpZXdVUkwgJiYgKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtDdXN0b21MaXZlUHJldmlldyB8fCAoXG4gICAgICAgICAgICAgICAgICA8TGl2ZVByZXZpZXdXaW5kb3cgY29sbGVjdGlvblNsdWc9e2NvbGxlY3Rpb25TbHVnfSBnbG9iYWxTbHVnPXtnbG9iYWxTbHVnfSAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9Gb3JtPlxuICAgICAgPC9PcGVyYXRpb25Qcm92aWRlcj5cbiAgICA8L21haW4+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBHdXR0ZXIgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9HdXR0ZXIvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL01vZGFsL2luZGV4LmpzJ1xuaW1wb3J0IHsgUmVuZGVyVGl0bGUgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9SZW5kZXJUaXRsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm1Nb2RpZmllZCB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL0Zvcm0vaW5kZXguanMnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL1gvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRUaXRsZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudFRpdGxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBJRExhYmVsIH0gZnJvbSAnLi4vLi4vSURMYWJlbC9pbmRleC5qcydcbmltcG9ydCB7IExlYXZlV2l0aG91dFNhdmluZ01vZGFsIH0gZnJvbSAnLi4vLi4vTGVhdmVXaXRob3V0U2F2aW5nL2luZGV4LmpzJ1xuaW1wb3J0IHsgZG9jdW1lbnREcmF3ZXJCYXNlQ2xhc3MgfSBmcm9tICcuLi9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBsZWF2ZVdpdGhvdXRTYXZpbmdNb2RhbFNsdWcgPSAnbGVhdmUtd2l0aG91dC1zYXZpbmctZG9jLWRyYXdlcidcblxuZXhwb3J0IGNvbnN0IERvY3VtZW50RHJhd2VySGVhZGVyOiBSZWFjdC5GQzx7XG4gIEFmdGVySGVhZGVyPzogUmVhY3QuUmVhY3ROb2RlXG4gIGRyYXdlclNsdWc6IHN0cmluZ1xuICBzaG93RG9jdW1lbnRJRD86IGJvb2xlYW5cbn0+ID0gKHsgQWZ0ZXJIZWFkZXIsIGRyYXdlclNsdWcsIHNob3dEb2N1bWVudElEID0gdHJ1ZSB9KSA9PiB7XG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBpc01vZGlmaWVkID0gdXNlRm9ybU1vZGlmaWVkKClcblxuICBjb25zdCBoYW5kbGVPbkNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChpc01vZGlmaWVkKSB7XG4gICAgICBvcGVuTW9kYWwobGVhdmVXaXRob3V0U2F2aW5nTW9kYWxTbHVnKVxuICAgIH0gZWxzZSB7XG4gICAgICBjbG9zZU1vZGFsKGRyYXdlclNsdWcpXG4gICAgfVxuICB9LCBbaXNNb2RpZmllZCwgb3Blbk1vZGFsLCBjbG9zZU1vZGFsLCBkcmF3ZXJTbHVnXSlcblxuICByZXR1cm4gKFxuICAgIDxHdXR0ZXIgY2xhc3NOYW1lPXtgJHtkb2N1bWVudERyYXdlckJhc2VDbGFzc31fX2hlYWRlcmB9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2RvY3VtZW50RHJhd2VyQmFzZUNsYXNzfV9faGVhZGVyLWNvbnRlbnRgfT5cbiAgICAgICAgPGgyIGNsYXNzTmFtZT17YCR7ZG9jdW1lbnREcmF3ZXJCYXNlQ2xhc3N9X19oZWFkZXItdGV4dGB9PlxuICAgICAgICAgIHs8UmVuZGVyVGl0bGUgZWxlbWVudD1cInNwYW5cIiAvPn1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2dlbmVyYWw6Y2xvc2UnKX1cbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2RvY3VtZW50RHJhd2VyQmFzZUNsYXNzfV9faGVhZGVyLWNsb3NlYH1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPbkNsb3NlfVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvd0RvY3VtZW50SUQgJiYgPERvY3VtZW50SUQgLz59XG4gICAgICB7QWZ0ZXJIZWFkZXIgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtkb2N1bWVudERyYXdlckJhc2VDbGFzc31fX2FmdGVyLWhlYWRlcmB9PntBZnRlckhlYWRlcn08L2Rpdj5cbiAgICAgICkgOiBudWxsfVxuXG4gICAgICA8TGVhdmVXaXRob3V0U2F2aW5nTW9kYWxcbiAgICAgICAgbW9kYWxTbHVnPXtsZWF2ZVdpdGhvdXRTYXZpbmdNb2RhbFNsdWd9XG4gICAgICAgIG9uQ29uZmlybT17KCkgPT4gY2xvc2VNb2RhbChkcmF3ZXJTbHVnKX1cbiAgICAgIC8+XG4gICAgPC9HdXR0ZXI+XG4gIClcbn1cblxuY29uc3QgRG9jdW1lbnRJRDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgaWQgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IHsgdGl0bGUgfSA9IHVzZURvY3VtZW50VGl0bGUoKVxuICByZXR1cm4gaWQgJiYgaWQgIT09IHRpdGxlID8gPElETGFiZWwgaWQ9e2lkLnRvU3RyaW5nKCl9IC8+IDogbnVsbFxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVJvdXRlQ2FjaGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvUm91dGVDYWNoZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgTW9kYWwsIHVzZU1vZGFsIH0gZnJvbSAnLi4vTW9kYWwvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgbW9kYWxTbHVnID0gJ2RvY3VtZW50LXN0YWxlLWRhdGEnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdkb2N1bWVudC1zdGFsZS1kYXRhJ1xuXG5leHBvcnQgY29uc3QgRG9jdW1lbnRTdGFsZURhdGE6IFJlYWN0LkZDPHtcbiAgaXNBY3RpdmU6IGJvb2xlYW5cbiAgb25SZWxvYWQ6ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkXG59PiA9ICh7IGlzQWN0aXZlLCBvblJlbG9hZCB9KSA9PiB7XG4gIGNvbnN0IHsgY2xvc2VNb2RhbCwgb3Blbk1vZGFsIH0gPSB1c2VNb2RhbCgpXG4gIGNvbnN0IHsgY2xlYXJSb3V0ZUNhY2hlIH0gPSB1c2VSb3V0ZUNhY2hlKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgIG9wZW5Nb2RhbChtb2RhbFNsdWcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb3NlTW9kYWwobW9kYWxTbHVnKVxuICAgIH1cbiAgfSwgW2lzQWN0aXZlLCBvcGVuTW9kYWwsIGNsb3NlTW9kYWxdKVxuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsIGNsYXNzTmFtZT17YmFzZUNsYXNzfSBjbG9zZU9uQmx1cj17ZmFsc2V9IHNsdWc9e21vZGFsU2x1Z30+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcHBlcmB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udGVudGB9PlxuICAgICAgICAgIDxoMT57dCgnZ2VuZXJhbDpkb2N1bWVudE1vZGlmaWVkJyl9PC9oMT5cbiAgICAgICAgICA8cD57dCgnZ2VuZXJhbDpkb2N1bWVudE91dE9mRGF0ZScpfTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250cm9sc2B9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBpZD17YCR7bW9kYWxTbHVnfS1yZWxvYWRgfVxuICAgICAgICAgICAgbWFyZ2luPXtmYWxzZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgY2xvc2VNb2RhbChtb2RhbFNsdWcpXG4gICAgICAgICAgICAgIGNsZWFyUm91dGVDYWNoZSgpXG4gICAgICAgICAgICAgIGF3YWl0IG9uUmVsb2FkKClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dCgnZ2VuZXJhbDpyZWxvYWREb2N1bWVudCcpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvTW9kYWw+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IEVkaXRWaWV3UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyByZWR1Y2VGaWVsZHNUb1ZhbHVlcyB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VBbGxGb3JtRmllbGRzIH0gZnJvbSAnLi4vLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRFdmVudHMgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRFdmVudHMvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTGl2ZVByZXZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0xpdmVQcmV2aWV3L2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VMb2NhbGUgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvTG9jYWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgSWZyYW1lTG9hZGVyIH0gZnJvbSAnLi4vLi4vSWZyYW1lTG9hZGVyL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGV2aWNlQ29udGFpbmVyIH0gZnJvbSAnLi4vRGV2aWNlL2luZGV4LmpzJ1xuaW1wb3J0IHsgTGl2ZVByZXZpZXdUb29sYmFyIH0gZnJvbSAnLi4vVG9vbGJhci9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbGl2ZS1wcmV2aWV3LXdpbmRvdydcblxuZXhwb3J0IGNvbnN0IExpdmVQcmV2aWV3V2luZG93OiBSZWFjdC5GQzxFZGl0Vmlld1Byb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgYXBwSXNSZWFkeSxcbiAgICBicmVha3BvaW50LFxuICAgIGlmcmFtZVJlZixcbiAgICBpc0xpdmVQcmV2aWV3aW5nLFxuICAgIGxvYWRlZFVSTCxcbiAgICBwb3B1cFJlZixcbiAgICBwcmV2aWV3V2luZG93VHlwZSxcbiAgICBzZXRMb2FkZWRVUkwsXG4gICAgc2hvdWxkUmVuZGVySWZyYW1lLFxuICAgIHVybCxcbiAgICB6b29tLFxuICB9ID0gdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcblxuICBjb25zdCBsb2NhbGUgPSB1c2VMb2NhbGUoKVxuXG4gIGNvbnN0IHsgbW9zdFJlY2VudFVwZGF0ZSB9ID0gdXNlRG9jdW1lbnRFdmVudHMoKVxuXG4gIGNvbnN0IFtmb3JtU3RhdGVdID0gdXNlQWxsRm9ybUZpZWxkcygpXG4gIGNvbnN0IHsgaWQsIGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIC8qKlxuICAgKiBGb3IgY2xpZW50LXNpZGUgYXBwcywgc2VuZCBkYXRhIHRocm91Z2ggYHdpbmRvdy5wb3N0TWVzc2FnZWBcbiAgICogVGhlIHByZXZpZXcgY291bGQgZWl0aGVyIGJlIGFuIGlmcmFtZSBlbWJlZGRlZCBvbiB0aGUgcGFnZVxuICAgKiBPciBpdCBjb3VsZCBiZSBhIHNlcGFyYXRlIHBvcHVwIHdpbmRvd1xuICAgKiBXZSBuZWVkIHRvIHRyYW5zbWl0IGRhdGEgdG8gYm90aCBhY2NvcmRpbmdseVxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTGl2ZVByZXZpZXdpbmcgfHwgIWFwcElzUmVhZHkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgZG8gbm90IHJlZHVjZSBmaWVsZHMgdG8gdmFsdWVzIHVudGlsIGFmdGVyIHRoZSBpZnJhbWUgb3IgcG9wdXAgaGFzIGxvYWRlZFxuICAgIGlmIChmb3JtU3RhdGUpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGZvcm1TdGF0ZSwgdHJ1ZSlcblxuICAgICAgaWYgKCF2YWx1ZXMuaWQpIHtcbiAgICAgICAgdmFsdWVzLmlkID0gaWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdHlwZTogJ3BheWxvYWQtbGl2ZS1wcmV2aWV3JyxcbiAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgZXh0ZXJuYWxseVVwZGF0ZWRSZWxhdGlvbnNoaXA6IG1vc3RSZWNlbnRVcGRhdGUsXG4gICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgIGxvY2FsZTogbG9jYWxlLmNvZGUsXG4gICAgICB9XG5cbiAgICAgIC8vIFBvc3QgbWVzc2FnZSB0byBleHRlcm5hbCBwb3B1cCB3aW5kb3dcbiAgICAgIGlmIChwcmV2aWV3V2luZG93VHlwZSA9PT0gJ3BvcHVwJyAmJiBwb3B1cFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHBvcHVwUmVmLmN1cnJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgdXJsKVxuICAgICAgfVxuXG4gICAgICAvLyBQb3N0IG1lc3NhZ2UgdG8gZW1iZWRkZWQgaWZyYW1lXG4gICAgICBpZiAocHJldmlld1dpbmRvd1R5cGUgPT09ICdpZnJhbWUnICYmIGlmcmFtZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGlmcmFtZVJlZi5jdXJyZW50LmNvbnRlbnRXaW5kb3c/LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHVybClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBmb3JtU3RhdGUsXG4gICAgdXJsLFxuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGdsb2JhbFNsdWcsXG4gICAgaWQsXG4gICAgcHJldmlld1dpbmRvd1R5cGUsXG4gICAgcG9wdXBSZWYsXG4gICAgYXBwSXNSZWFkeSxcbiAgICBpZnJhbWVSZWYsXG4gICAgbW9zdFJlY2VudFVwZGF0ZSxcbiAgICBsb2NhbGUsXG4gICAgaXNMaXZlUHJldmlld2luZyxcbiAgICBsb2FkZWRVUkwsXG4gIF0pXG5cbiAgLyoqXG4gICAqIFRvIHN1cHBvcnQgU1NSLCB3ZSB0cmFuc21pdCBhIGB3aW5kb3cucG9zdE1lc3NhZ2VgIGV2ZW50IHdpdGhvdXQgYSBwYXlsb2FkXG4gICAqIFRoaXMgaXMgYmVjYXVzZSB0aGUgZXZlbnQgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgYSBzZXJ2ZXItc2lkZSByb3VuZHRyaXBcbiAgICogaS5lLiwgc2F2ZSwgc2F2ZSBkcmFmdCwgYXV0b3NhdmUsIGV0Yy4gd2lsbCBmaXJlIGByb3V0ZXIucmVmcmVzaCgpYFxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTGl2ZVByZXZpZXdpbmcgfHwgIWFwcElzUmVhZHkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICB0eXBlOiAncGF5bG9hZC1kb2N1bWVudC1ldmVudCcsXG4gICAgfVxuXG4gICAgLy8gUG9zdCBtZXNzYWdlIHRvIGV4dGVybmFsIHBvcHVwIHdpbmRvd1xuICAgIGlmIChwcmV2aWV3V2luZG93VHlwZSA9PT0gJ3BvcHVwJyAmJiBwb3B1cFJlZi5jdXJyZW50KSB7XG4gICAgICBwb3B1cFJlZi5jdXJyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHVybClcbiAgICB9XG5cbiAgICAvLyBQb3N0IG1lc3NhZ2UgdG8gZW1iZWRkZWQgaWZyYW1lXG4gICAgaWYgKHByZXZpZXdXaW5kb3dUeXBlID09PSAnaWZyYW1lJyAmJiBpZnJhbWVSZWYuY3VycmVudCkge1xuICAgICAgaWZyYW1lUmVmLmN1cnJlbnQuY29udGVudFdpbmRvdz8ucG9zdE1lc3NhZ2UobWVzc2FnZSwgdXJsKVxuICAgIH1cbiAgfSwgW21vc3RSZWNlbnRVcGRhdGUsIGlmcmFtZVJlZiwgcG9wdXBSZWYsIHByZXZpZXdXaW5kb3dUeXBlLCB1cmwsIGlzTGl2ZVByZXZpZXdpbmcsIGFwcElzUmVhZHldKVxuXG4gIGlmIChwcmV2aWV3V2luZG93VHlwZSAhPT0gJ2lmcmFtZScpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgYmFzZUNsYXNzLFxuICAgICAgICBpc0xpdmVQcmV2aWV3aW5nICYmIGAke2Jhc2VDbGFzc30tLWlzLWxpdmUtcHJldmlld2luZ2AsXG4gICAgICAgIGJyZWFrcG9pbnQgJiYgYnJlYWtwb2ludCAhPT0gJ3Jlc3BvbnNpdmUnICYmIGAke2Jhc2VDbGFzc30tLWhhcy1icmVha3BvaW50YCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X193cmFwcGVyYH0+XG4gICAgICAgIDxMaXZlUHJldmlld1Rvb2xiYXIgey4uLnByb3BzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbWFpbmB9PlxuICAgICAgICAgIDxEZXZpY2VDb250YWluZXI+XG4gICAgICAgICAgICB7c2hvdWxkUmVuZGVySWZyYW1lICYmIChcbiAgICAgICAgICAgICAgPElmcmFtZUxvYWRlclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpdmUtcHJldmlldy1pZnJhbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwibGl2ZS1wcmV2aWV3LWlmcmFtZVwiXG4gICAgICAgICAgICAgICAgb25Mb2FkPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRMb2FkZWRVUkwodXJsKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcmVmPXtpZnJhbWVSZWZ9XG4gICAgICAgICAgICAgICAgc3JjPXt1cmx9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHlwZW9mIHpvb20gPT09ICdudW1iZXInID8gYHNjYWxlKCR7em9vbX0pIGAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9EZXZpY2VDb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgU2hpbW1lckVmZmVjdCB9IGZyb20gJy4uL1NoaW1tZXJFZmZlY3QvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuZXhwb3J0IHR5cGUgSWZyYW1lTG9hZGVyUHJvcHMgPSB7XG4gIHJlZj86IFJlYWN0LlJlZjxIVE1MSUZyYW1lRWxlbWVudD5cbn0gJiBSZWFjdC5JZnJhbWVIVE1MQXR0cmlidXRlczxIVE1MSUZyYW1lRWxlbWVudD5cblxuY29uc3Qgc2hpbW1lckRlbGF5cyA9IHtcbiAgbWluVmlzaWJsZTogMzAwLFxuICBzaG93OiAxMDAwLFxufVxuXG5jb25zdCBiYXNlQ2xhc3MgPSAnaWZyYW1lLWxvYWRlcidcblxuLyoqXG4gKiBMb2FkcyBhbiBgaWZyYW1lYCBlbGVtZW50IHdpdGggdGhlIGdpdmVuIHNvdXJjZSBiZWhpbmQgYSBsb2FkaW5nIGluZGljYXRvci5cbiAqIE5vdGFibGUgYmVoYXZpb3JzOlxuICogMS4gT25seSBzaG93IGlmIHRoZSBsb2FkIHRha2VzIGxvbmdlciB0aGFuIHggbXMuXG4gKiAyLiBPbmNlIHNob3duLCBmb3JjZSBpdCB0byBiZSB2aXNpYmxlIGZvciBhdCBsZWFzdCB4IG1zIHRvIGF2b2lkIGZsaWNrZXJpbmcsIGV2ZW4gaWYgdGhlIGlmcmFtZSBsb2FkcyBiZWZvcmUgdGhlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IElmcmFtZUxvYWRlcjogUmVhY3QuRkM8SWZyYW1lTG9hZGVyUHJvcHM+ID0gKHtcbiAgb25Mb2FkOiBvbkxvYWRGcm9tUHJvcHMsXG4gIHNyYyxcbiAgdGl0bGUsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKEJvb2xlYW4oc3JjKSlcbiAgY29uc3QgW3Nob3dTaGltbWVyLCBzZXRTaG93U2hpbW1lcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3Qgc2hpbW1lclNob3duQXRSZWYgPSB1c2VSZWYoMClcblxuICBjb25zdCBzaG93VGltZXJSZWYgPSB1c2VSZWY8bnVsbCB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PihudWxsKVxuXG4gIGNvbnN0IGhpZGVUaW1lclJlZiA9IHVzZVJlZjxudWxsIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+KG51bGwpXG5cbiAgY29uc3QgY2xlYXJUaW1lcnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3dUaW1lclJlZi5jdXJyZW50KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2hvd1RpbWVyUmVmLmN1cnJlbnQpXG4gICAgICBzaG93VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoaGlkZVRpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChoaWRlVGltZXJSZWYuY3VycmVudClcbiAgICAgIGhpZGVUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjbGVhclRpbWVycygpXG4gICAgc2V0SXNMb2FkaW5nKEJvb2xlYW4oc3JjKSlcbiAgICBzZXRTaG93U2hpbW1lcihmYWxzZSlcbiAgICBzaGltbWVyU2hvd25BdFJlZi5jdXJyZW50ID0gMFxuXG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNob3dUaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRTaG93U2hpbW1lcih0cnVlKVxuICAgICAgc2hpbW1lclNob3duQXRSZWYuY3VycmVudCA9IERhdGUubm93KClcbiAgICAgIHNob3dUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH0sIHNoaW1tZXJEZWxheXMuc2hvdylcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2hvd1RpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNob3dUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICBzaG93VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtjbGVhclRpbWVycywgc3JjXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVycygpXG4gICAgfVxuICB9LCBbY2xlYXJUaW1lcnNdKVxuXG4gIGNvbnN0IG9uTG9hZCA9IHVzZUNhbGxiYWNrPFJlYWN0LklmcmFtZUhUTUxBdHRyaWJ1dGVzPEhUTUxJRnJhbWVFbGVtZW50Plsnb25Mb2FkJ10+KFxuICAgIChlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uTG9hZEZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbkxvYWRGcm9tUHJvcHMoZSlcbiAgICAgIH1cblxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuXG4gICAgICBpZiAoc2hvd1RpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNob3dUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICBzaG93VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG93U2hpbW1lcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxhcHNlZCA9IERhdGUubm93KCkgLSBzaGltbWVyU2hvd25BdFJlZi5jdXJyZW50XG4gICAgICBjb25zdCByZW1haW5pbmdWaXNpYmxlID0gTWF0aC5tYXgoMCwgc2hpbW1lckRlbGF5cy5taW5WaXNpYmxlIC0gZWxhcHNlZClcblxuICAgICAgaWYgKHJlbWFpbmluZ1Zpc2libGUgPT09IDApIHtcbiAgICAgICAgc2V0U2hvd1NoaW1tZXIoZmFsc2UpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBoaWRlVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRTaG93U2hpbW1lcihmYWxzZSlcbiAgICAgICAgaGlkZVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9LCByZW1haW5pbmdWaXNpYmxlKVxuICAgIH0sXG4gICAgW3Nob3dTaGltbWVyLCBvbkxvYWRGcm9tUHJvcHNdLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udGFpbmVyYH0+XG4gICAgICB7c2hvd1NoaW1tZXIgJiYgPFNoaW1tZXJFZmZlY3QgYXJpYS1saXZlPVwicG9saXRlXCIgaGVpZ2h0PVwiMTAwJVwiIHJvbGU9XCJzdGF0dXNcIiB0cmFuc3BhcmVudCAvPn1cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31fX2lmcmFtZWAsIGlzTG9hZGluZyAmJiBgJHtiYXNlQ2xhc3N9X19pZnJhbWUtLWlzLWxvYWRpbmdgXVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICBvbkxvYWQ9e29uTG9hZH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHNhbmRib3g9XCJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIGFsbG93LWZvcm1zIGFsbG93LXBvcHVwcyBhbGxvdy1tb2RhbHMgYWxsb3ctZG93bmxvYWRzXCJcbiAgICAgICAgc3JjPXtzcmN9XG4gICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VSZXNpemUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZXNpemUuanMnXG5pbXBvcnQgeyB1c2VMaXZlUHJldmlld0NvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvTGl2ZVByZXZpZXcvY29udGV4dC5qcydcblxuZXhwb3J0IGNvbnN0IERldmljZUNvbnRhaW5lcjogUmVhY3QuRkM8e1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuIH0gPSBwcm9wc1xuXG4gIGNvbnN0IGRldmljZUZyYW1lUmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBvdXRlckZyYW1lUmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IHsgYnJlYWtwb2ludCwgc2V0TWVhc3VyZWREZXZpY2VTaXplLCBzaXplOiBkZXNpcmVkU2l6ZSwgem9vbSB9ID0gdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcblxuICAvLyBLZWVwIGFuIGFjY3VyYXRlIG1lYXN1cmVtZW50IG9mIHRoZSBhY3R1YWwgZGV2aWNlIHNpemUgYXMgaXQgaXMgdHJ1bHkgcmVuZGVyZWRcbiAgLy8gVGhpcyBpcyBoZWxwZnVsIHdoZW4gYHNpemVzYCBhcmUgbm9uLW51bWJlciB1bml0cyBsaWtlIHBlcmNlbnRhZ2VzLCBldGMuXG5cbiAgY29uc3QgeyBzaXplOiBtZWFzdXJlZERldmljZVNpemUgfSA9IHVzZVJlc2l6ZShkZXZpY2VGcmFtZVJlZi5jdXJyZW50KVxuXG4gIGNvbnN0IHsgc2l6ZTogb3V0ZXJGcmFtZVNpemUgfSA9IHVzZVJlc2l6ZShvdXRlckZyYW1lUmVmLmN1cnJlbnQpXG5cbiAgbGV0IGRldmljZUlzTGFyZ2VyVGhhbkZyYW1lOiBib29sZWFuID0gZmFsc2VcblxuICAvLyBTeW5jIHRoZSBtZWFzdXJlZCBkZXZpY2Ugc2l6ZSB3aXRoIHRoZSBjb250ZXh0IHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gdXNlIGl0XG4gIC8vIFRoaXMgaGFwcGVucyBmcm9tIHRoZSBib3R0b20gdXAgc28gdGhhdCBhcyB0aGlzIGNvbXBvbmVudCBtb3VudHMgYW5kIHVubW91bnRzLFxuICAvLyBpdHMgc2l6ZSBpcyBmcmVzaGx5IHBvcHVsYXRlZCBhZ2FpbiB1cG9uIHJlLW1vdW50aW5nLCBpLmUuIGdvaW5nIGZyb20gaWZyYW1lLT5wb3B1cC0+aWZyYW1lXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lYXN1cmVkRGV2aWNlU2l6ZSkge1xuICAgICAgc2V0TWVhc3VyZWREZXZpY2VTaXplKG1lYXN1cmVkRGV2aWNlU2l6ZSlcbiAgICB9XG4gIH0sIFttZWFzdXJlZERldmljZVNpemUsIHNldE1lYXN1cmVkRGV2aWNlU2l6ZV0pXG5cbiAgbGV0IHggPSAnMCdcbiAgbGV0IG1hcmdpbiA9ICcwJ1xuXG4gIGlmIChicmVha3BvaW50ICYmIGJyZWFrcG9pbnQgIT09ICdyZXNwb25zaXZlJykge1xuICAgIHggPSAnLTUwJSdcblxuICAgIGlmIChcbiAgICAgIGRlc2lyZWRTaXplICYmXG4gICAgICBtZWFzdXJlZERldmljZVNpemUgJiZcbiAgICAgIHR5cGVvZiB6b29tID09PSAnbnVtYmVyJyAmJlxuICAgICAgdHlwZW9mIGRlc2lyZWRTaXplLndpZHRoID09PSAnbnVtYmVyJyAmJlxuICAgICAgdHlwZW9mIGRlc2lyZWRTaXplLmhlaWdodCA9PT0gJ251bWJlcicgJiZcbiAgICAgIHR5cGVvZiBtZWFzdXJlZERldmljZVNpemUud2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICB0eXBlb2YgbWVhc3VyZWREZXZpY2VTaXplLmhlaWdodCA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIG1hcmdpbiA9ICcwIGF1dG8nXG4gICAgICBjb25zdCBzY2FsZWREZXNpcmVkV2lkdGggPSBkZXNpcmVkU2l6ZS53aWR0aCAvIHpvb21cbiAgICAgIGNvbnN0IHNjYWxlZERldmljZVdpZHRoID0gbWVhc3VyZWREZXZpY2VTaXplLndpZHRoICogem9vbVxuICAgICAgY29uc3Qgc2NhbGVkRGV2aWNlRGlmZmVyZW5jZVBpeGVscyA9IHNjYWxlZERlc2lyZWRXaWR0aCAtIGRlc2lyZWRTaXplLndpZHRoXG4gICAgICBkZXZpY2VJc0xhcmdlclRoYW5GcmFtZSA9IHNjYWxlZERldmljZVdpZHRoID4gb3V0ZXJGcmFtZVNpemUud2lkdGhcblxuICAgICAgaWYgKGRldmljZUlzTGFyZ2VyVGhhbkZyYW1lKSB7XG4gICAgICAgIGlmICh6b29tID4gMSkge1xuICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2VGcm9tRGV2aWNlVG9GcmFtZSA9IG1lYXN1cmVkRGV2aWNlU2l6ZS53aWR0aCAtIG91dGVyRnJhbWVTaXplLndpZHRoXG4gICAgICAgICAgaWYgKGRpZmZlcmVuY2VGcm9tRGV2aWNlVG9GcmFtZSA8IDApIHtcbiAgICAgICAgICAgIHggPSBgJHtkaWZmZXJlbmNlRnJvbURldmljZVRvRnJhbWUgLyAyfXB4YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4ID0gJzAnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHggPSAnMCdcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHpvb20gPj0gMSkge1xuICAgICAgICAgIHggPSBgJHtzY2FsZWREZXZpY2VEaWZmZXJlbmNlUGl4ZWxzIC8gMn1weGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlRnJvbURldmljZVRvRnJhbWUgPSBvdXRlckZyYW1lU2l6ZS53aWR0aCAtIHNjYWxlZERldmljZVdpZHRoXG4gICAgICAgICAgeCA9IGAke2RpZmZlcmVuY2VGcm9tRGV2aWNlVG9GcmFtZSAvIDJ9cHhgXG4gICAgICAgICAgbWFyZ2luID0gJzAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgd2lkdGggPSB6b29tID8gYCR7MTAwIC8gem9vbX0lYCA6ICcxMDAlJ1xuICBsZXQgaGVpZ2h0ID0gem9vbSA/IGAkezEwMCAvIHpvb219JWAgOiAnMTAwJSdcblxuICBpZiAoYnJlYWtwb2ludCAhPT0gJ3Jlc3BvbnNpdmUnKSB7XG4gICAgd2lkdGggPSBgJHtkZXNpcmVkU2l6ZT8ud2lkdGggLyAodHlwZW9mIHpvb20gPT09ICdudW1iZXInID8gem9vbSA6IDEpfXB4YFxuICAgIGhlaWdodCA9IGAke2Rlc2lyZWRTaXplPy5oZWlnaHQgLyAodHlwZW9mIHpvb20gPT09ICdudW1iZXInID8gem9vbSA6IDEpfXB4YFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e291dGVyRnJhbWVSZWZ9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e2RldmljZUZyYW1lUmVmfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBtYXJnaW4sXG4gICAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlM2QoJHt4fSwgMCwgMClgLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IEVkaXRWaWV3UHJvcHMgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VEcmFnZ2FibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBEcmFnSGFuZGxlSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL0RyYWdIYW5kbGUvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VMaXZlUHJldmlld0NvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvTGl2ZVByZXZpZXcvY29udGV4dC5qcydcbmltcG9ydCB7IFRvb2xiYXJDb250cm9scyB9IGZyb20gJy4vQ29udHJvbHMvaW5kZXguanMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xpdmUtcHJldmlldy10b29sYmFyJ1xuXG5jb25zdCBEcmFnZ2FibGVUb29sYmFyOiBSZWFjdC5GQzxFZGl0Vmlld1Byb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHRvb2xiYXJQb3NpdGlvbiB9ID0gdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcblxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgdHJhbnNmb3JtIH0gPSB1c2VEcmFnZ2FibGUoe1xuICAgIGlkOiAnbGl2ZS1wcmV2aWV3LXRvb2xiYXInLFxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBgJHtiYXNlQ2xhc3N9LS1kcmFnZ2FibGVgXS5qb2luKCcgJyl9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBsZWZ0OiBgJHt0b29sYmFyUG9zaXRpb24ueH1weGAsXG4gICAgICAgIHRvcDogYCR7dG9vbGJhclBvc2l0aW9uLnl9cHhgLFxuICAgICAgICAuLi4odHJhbnNmb3JtXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgPyBgdHJhbnNsYXRlM2QoJHt0cmFuc2Zvcm0/LnggfHwgMH1weCwgJHt0cmFuc2Zvcm0/LnkgfHwgMH1weCwgMClgXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgey4uLmxpc3RlbmVyc31cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZHJhZy1oYW5kbGVgfVxuICAgICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgPlxuICAgICAgICA8RHJhZ0hhbmRsZUljb24gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPFRvb2xiYXJDb250cm9scyB7Li4ucHJvcHN9IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuY29uc3QgU3RhdGljVG9vbGJhcjogUmVhY3QuRkM8RWRpdFZpZXdQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17W2Jhc2VDbGFzcywgYCR7YmFzZUNsYXNzfS0tc3RhdGljYF0uam9pbignICcpfT5cbiAgICAgIDxUb29sYmFyQ29udHJvbHMgey4uLnByb3BzfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBMaXZlUHJldmlld1Rvb2xiYXI6IFJlYWN0LkZDPFxuICB7XG4gICAgZHJhZ2dhYmxlPzogYm9vbGVhblxuICB9ICYgRWRpdFZpZXdQcm9wc1xuPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGRyYWdnYWJsZSB9ID0gcHJvcHNcblxuICBpZiAoZHJhZ2dhYmxlKSB7XG4gICAgcmV0dXJuIDxEcmFnZ2FibGVUb29sYmFyIHsuLi5wcm9wc30gLz5cbiAgfVxuXG4gIHJldHVybiA8U3RhdGljVG9vbGJhciB7Li4ucHJvcHN9IC8+XG59XG4iLCIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBFZGl0Vmlld1Byb3BzIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBDaGV2cm9uSWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2ljb25zL0NoZXZyb24vaW5kZXguanMnXG5pbXBvcnQgeyBFeHRlcm5hbExpbmtJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vaWNvbnMvRXh0ZXJuYWxMaW5rL2luZGV4LmpzJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9pY29ucy9YL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTGl2ZVByZXZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL0xpdmVQcmV2aWV3L2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IFBvcHVwLCBQb3B1cExpc3QgfSBmcm9tICcuLi8uLi8uLi9Qb3B1cC9pbmRleC5qcydcbmltcG9ydCB7IFByZXZpZXdGcmFtZVNpemVJbnB1dCB9IGZyb20gJy4uL1NpemVJbnB1dC9pbmRleC5qcydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbGl2ZS1wcmV2aWV3LXRvb2xiYXItY29udHJvbHMnXG5jb25zdCB6b29tT3B0aW9ucyA9IFs1MCwgNzUsIDEwMCwgMTI1LCAxNTAsIDIwMF1cblxuZXhwb3J0IGNvbnN0IFRvb2xiYXJDb250cm9sczogUmVhY3QuRkM8RWRpdFZpZXdQcm9wcz4gPSAoKSA9PiB7XG4gIGNvbnN0IHsgYnJlYWtwb2ludCwgYnJlYWtwb2ludHMsIHNldEJyZWFrcG9pbnQsIHNldFByZXZpZXdXaW5kb3dUeXBlLCBzZXRab29tLCB1cmwsIHpvb20gfSA9XG4gICAgdXNlTGl2ZVByZXZpZXdDb250ZXh0KClcblxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcblxuICBjb25zdCBjdXN0b21PcHRpb24gPSB7XG4gICAgbGFiZWw6IHQoJ2dlbmVyYWw6Y3VzdG9tJyksXG4gICAgdmFsdWU6ICdjdXN0b20nLFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgIHticmVha3BvaW50cz8ubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxQb3B1cFxuICAgICAgICAgIGJ1dHRvbj17XG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIHticmVha3BvaW50cy5maW5kKChicCkgPT4gYnAubmFtZSA9PSBicmVha3BvaW50KT8ubGFiZWwgPz8gY3VzdG9tT3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxDaGV2cm9uSWNvbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NoZXZyb25gfSAvPlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19icmVha3BvaW50YH1cbiAgICAgICAgICBob3Jpem9udGFsQWxpZ249XCJyaWdodFwiXG4gICAgICAgICAgcmVuZGVyPXsoeyBjbG9zZSB9KSA9PiAoXG4gICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvbkdyb3VwPlxuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge2JyZWFrcG9pbnRzLm1hcCgoYnApID0+IChcbiAgICAgICAgICAgICAgICAgIDxQb3B1cExpc3QuQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17YnAubmFtZSA9PSBicmVha3BvaW50fVxuICAgICAgICAgICAgICAgICAgICBrZXk9e2JwLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRCcmVha3BvaW50KGJwLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7YnAubGFiZWx9XG4gICAgICAgICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgey8qIER5bmFtaWNhbGx5IGFkZCB0aGlzIG9wdGlvbiBzbyB0aGF0IGl0IG9ubHkgYXBwZWFycyB3aGVuIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGlucHV0cyBhcmUgZXhwbGljaXRseSBjaGFuZ2VkICovfVxuICAgICAgICAgICAgICAgIHticmVha3BvaW50ID09PSAnY3VzdG9tJyAmJiAoXG4gICAgICAgICAgICAgICAgICA8UG9wdXBMaXN0LkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU9e2JyZWFrcG9pbnQgPT0gY3VzdG9tT3B0aW9uLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0QnJlYWtwb2ludChjdXN0b21PcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Y3VzdG9tT3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8L1BvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHNob3dTY3JvbGxiYXJcbiAgICAgICAgICB2ZXJ0aWNhbEFsaWduPVwiYm90dG9tXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZGV2aWNlLXNpemVgfT5cbiAgICAgICAgPFByZXZpZXdGcmFtZVNpemVJbnB1dCBheGlzPVwieFwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc2l6ZS1kaXZpZGVyYH0+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPFByZXZpZXdGcmFtZVNpemVJbnB1dCBheGlzPVwieVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxQb3B1cFxuICAgICAgICBidXR0b249e1xuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxzcGFuPnt6b29tICogMTAwfSU8L3NwYW4+XG4gICAgICAgICAgICA8Q2hldnJvbkljb24gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jaGV2cm9uYH0gLz5cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICB9XG4gICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fem9vbWB9XG4gICAgICAgIGhvcml6b250YWxBbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgcmVuZGVyPXsoeyBjbG9zZSB9KSA9PiAoXG4gICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25Hcm91cD5cbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAge3pvb21PcHRpb25zLm1hcCgoem9vbVZhbHVlKSA9PiAoXG4gICAgICAgICAgICAgICAgPFBvcHVwTGlzdC5CdXR0b25cbiAgICAgICAgICAgICAgICAgIGFjdGl2ZT17em9vbSAqIDEwMCA9PSB6b29tVmFsdWV9XG4gICAgICAgICAgICAgICAgICBrZXk9e3pvb21WYWx1ZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Wm9vbSh6b29tVmFsdWUgLyAxMDApXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3pvb21WYWx1ZX0lXG4gICAgICAgICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgPC9Qb3B1cExpc3QuQnV0dG9uR3JvdXA+XG4gICAgICAgICl9XG4gICAgICAgIHNob3dTY3JvbGxiYXJcbiAgICAgICAgdmVydGljYWxBbGlnbj1cImJvdHRvbVwiXG4gICAgICAvPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19leHRlcm5hbGB9XG4gICAgICAgIGhyZWY9e3VybH1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBzZXRQcmV2aWV3V2luZG93VHlwZSgncG9wdXAnKVxuICAgICAgICB9fVxuICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICB0aXRsZT1cIk9wZW4gaW4gbmV3IHdpbmRvd1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgPlxuICAgICAgICA8RXh0ZXJuYWxMaW5rSWNvbiAvPlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUxpdmVQcmV2aWV3Q29udGV4dCB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9MaXZlUHJldmlldy9jb250ZXh0LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICd0b29sYmFyLWlucHV0J1xuXG5leHBvcnQgY29uc3QgUHJldmlld0ZyYW1lU2l6ZUlucHV0OiBSZWFjdC5GQzx7XG4gIGF4aXM/OiAneCcgfCAneSdcbn0+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgYXhpcyB9ID0gcHJvcHNcblxuICBjb25zdCB7IGJyZWFrcG9pbnQsIG1lYXN1cmVkRGV2aWNlU2l6ZSwgc2V0QnJlYWtwb2ludCwgc2V0U2l6ZSwgc2l6ZSwgem9vbSB9ID1cbiAgICB1c2VMaXZlUHJldmlld0NvbnRleHQoKVxuXG4gIGNvbnN0IFtpbnRlcm5hbFN0YXRlLCBzZXRJbnRlcm5hbFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlPG51bWJlcj4oXG4gICAgKGF4aXMgPT09ICd4JyA/IG1lYXN1cmVkRGV2aWNlU2l6ZT8ud2lkdGggOiBtZWFzdXJlZERldmljZVNpemU/LmhlaWdodCkgfHwgMCxcbiAgKVxuXG4gIC8vIHdoZW4gdGhlIGlucHV0IGlzIGNoYW5nZWQgbWFudWFsbHksIHdlIG5lZWQgdG8gc2V0IHRoZSBicmVha3BvaW50IGFzIGBjdXN0b21gXG4gIC8vIHRoaXMgd2lsbCB0aGVuIGFsbG93IHVzIHRvIHNldCBhbiBleHBsaWNpdCB3aWR0aCBhbmQgaGVpZ2h0XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgbGV0IG5ld1ZhbHVlID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKVxuXG4gICAgICBpZiAobmV3VmFsdWUgPCAwKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gMFxuICAgICAgfVxuXG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKG5ld1ZhbHVlKVxuICAgICAgc2V0QnJlYWtwb2ludCgnY3VzdG9tJylcblxuICAgICAgLy8gYmUgc3VyZSB0byBzZXQgX2JvdGhfIGF4aXMgdmFsdWVzIHRvIHNvIHRoYXQgdGhlIG90aGVyIGF4aXMgZG9lc24ndCBmYWxsYmFjayB0byAwIG9uIGluaXRpYWwgY2hhbmdlXG4gICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgdGhlIGByZXNwb25zaXZlYCBzaXplIGlzICcxMDAlJyBpbiBDU1MsIGFuZCBgMGAgaW4gaW5pdGlhbCBzdGF0ZVxuICAgICAgc2V0U2l6ZSh7XG4gICAgICAgIHR5cGU6ICdyZXNldCcsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBheGlzID09PSAneScgPyBuZXdWYWx1ZSA6IE51bWJlcihtZWFzdXJlZERldmljZVNpemU/LmhlaWdodC50b0ZpeGVkKDApKSAqIHpvb20sXG4gICAgICAgICAgd2lkdGg6IGF4aXMgPT09ICd4JyA/IG5ld1ZhbHVlIDogTnVtYmVyKG1lYXN1cmVkRGV2aWNlU2l6ZT8ud2lkdGgudG9GaXhlZCgwKSkgKiB6b29tLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtheGlzLCBzZXRCcmVha3BvaW50LCBtZWFzdXJlZERldmljZVNpemUsIHNldFNpemUsIHpvb21dLFxuICApXG5cbiAgLy8gaWYgdGhlIGJyZWFrcG9pbnQgaXMgYHJlc3BvbnNpdmVgIHRoZW4gdGhlIGRldmljZSdzIGRpdiB3aWxsIGhhdmUgYDEwMCVgIHdpZHRoIGFuZCBoZWlnaHRcbiAgLy8gc28gd2UgbmVlZCB0byB0YWtlIHRoZSBtZWFzdXJlbWVudHMgcHJvdmlkZWQgYnkgYGFjdHVhbERldmljZVNpemVgIGFuZCBzeW5jIGludGVybmFsIHN0YXRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGJyZWFrcG9pbnQgPT09ICdyZXNwb25zaXZlJyAmJiBtZWFzdXJlZERldmljZVNpemUpIHtcbiAgICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgc2V0SW50ZXJuYWxTdGF0ZShOdW1iZXIobWVhc3VyZWREZXZpY2VTaXplLndpZHRoLnRvRml4ZWQoMCkpICogem9vbSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEludGVybmFsU3RhdGUoTnVtYmVyKG1lYXN1cmVkRGV2aWNlU2l6ZS5oZWlnaHQudG9GaXhlZCgwKSkgKiB6b29tKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChicmVha3BvaW50ICE9PSAncmVzcG9uc2l2ZScgJiYgc2l6ZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShheGlzID09PSAneCcgPyBzaXplLndpZHRoIDogc2l6ZS5oZWlnaHQpXG4gICAgfVxuICB9LCBbYnJlYWtwb2ludCwgYXhpcywgbWVhc3VyZWREZXZpY2VTaXplLCBzaXplLCB6b29tXSlcblxuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9XG4gICAgICBtaW49ezB9XG4gICAgICBuYW1lPXtheGlzID09PSAneCcgPyAnbGl2ZS1wcmV2aWV3LXdpZHRoJyA6ICdsaXZlLXByZXZpZXctaGVpZ2h0J31cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBzdGVwPXsxfVxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICB2YWx1ZT17aW50ZXJuYWxTdGF0ZSB8fCAwfVxuICAgIC8+XG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgQXBwUm91dGVySW5zdGFuY2UgfSBmcm9tICduZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMnXG5cbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbnR5cGUgQmFja1RvRGFzaGJvYXJkUHJvcHMgPSB7XG4gIGFkbWluUm91dGU6IHN0cmluZ1xuICByb3V0ZXI6IEFwcFJvdXRlckluc3RhbmNlXG4gIHNlcnZlclVSTD86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlQmFja1RvRGFzaGJvYXJkID0gKHsgYWRtaW5Sb3V0ZSwgcm91dGVyLCBzZXJ2ZXJVUkwgfTogQmFja1RvRGFzaGJvYXJkUHJvcHMpID0+IHtcbiAgY29uc3QgcmVkaXJlY3RSb3V0ZSA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICBhZG1pblJvdXRlLFxuICAgIHBhdGg6ICcnLFxuICAgIHNlcnZlclVSTCxcbiAgfSlcbiAgcm91dGVyLnB1c2gocmVkaXJlY3RSb3V0ZSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQXBwUm91dGVySW5zdGFuY2UgfSBmcm9tICduZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMnXG5cbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5cbnR5cGUgR29CYWNrUHJvcHMgPSB7XG4gIGFkbWluUm91dGU6IHN0cmluZ1xuICBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gIHJvdXRlcjogQXBwUm91dGVySW5zdGFuY2VcbiAgc2VydmVyVVJMPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVHb0JhY2sgPSAoeyBhZG1pblJvdXRlLCBjb2xsZWN0aW9uU2x1Zywgcm91dGVyLCBzZXJ2ZXJVUkwgfTogR29CYWNrUHJvcHMpID0+IHtcbiAgY29uc3QgcmVkaXJlY3RSb3V0ZSA9IGZvcm1hdEFkbWluVVJMKHtcbiAgICBhZG1pblJvdXRlLFxuICAgIHBhdGg6IGNvbGxlY3Rpb25TbHVnID8gYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25TbHVnfWAgOiAnLycsXG4gIH0pXG4gIHJvdXRlci5wdXNoKHJlZGlyZWN0Um91dGUpXG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudFVzZXIgfSBmcm9tICdwYXlsb2FkJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZVRha2VPdmVyUGFyYW1zIHtcbiAgY2xlYXJSb3V0ZUNhY2hlPzogKCkgPT4gdm9pZFxuICBjb2xsZWN0aW9uU2x1Zz86IHN0cmluZ1xuICBkb2N1bWVudExvY2tTdGF0ZVJlZjogUmVhY3QuUmVmT2JqZWN0PHtcbiAgICBoYXNTaG93bkxvY2tlZE1vZGFsOiBib29sZWFuXG4gICAgaXNMb2NrZWQ6IGJvb2xlYW5cbiAgICB1c2VyOiBDbGllbnRVc2VyIHwgbnVtYmVyIHwgc3RyaW5nXG4gIH0+XG4gIGdsb2JhbFNsdWc/OiBzdHJpbmdcbiAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICBpc0xvY2tpbmdFbmFibGVkOiBib29sZWFuXG4gIGlzV2l0aGluRG9jOiBib29sZWFuXG4gIHNldEN1cnJlbnRFZGl0b3I6ICh2YWx1ZTogUmVhY3QuU2V0U3RhdGVBY3Rpb248Q2xpZW50VXNlciB8IG51bWJlciB8IHN0cmluZz4pID0+IHZvaWRcbiAgc2V0SXNSZWFkT25seUZvckluY29taW5nVXNlcj86ICh2YWx1ZTogUmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4pID0+IHZvaWRcbiAgdXBkYXRlRG9jdW1lbnRFZGl0b3I6IChcbiAgICBkb2NJRDogbnVtYmVyIHwgc3RyaW5nLFxuICAgIHNsdWc6IHN0cmluZyxcbiAgICB1c2VyOiBDbGllbnRVc2VyIHwgbnVtYmVyIHwgc3RyaW5nLFxuICApID0+IFByb21pc2U8dm9pZD5cbiAgdXNlcjogQ2xpZW50VXNlciB8IG51bWJlciB8IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlVGFrZU92ZXIgPSBhc3luYyAoe1xuICBpZCxcbiAgY2xlYXJSb3V0ZUNhY2hlLFxuICBjb2xsZWN0aW9uU2x1ZyxcbiAgZG9jdW1lbnRMb2NrU3RhdGVSZWYsXG4gIGdsb2JhbFNsdWcsXG4gIGlzTG9ja2luZ0VuYWJsZWQsXG4gIGlzV2l0aGluRG9jLFxuICBzZXRDdXJyZW50RWRpdG9yLFxuICBzZXRJc1JlYWRPbmx5Rm9ySW5jb21pbmdVc2VyLFxuICB1cGRhdGVEb2N1bWVudEVkaXRvcixcbiAgdXNlcixcbn06IEhhbmRsZVRha2VPdmVyUGFyYW1zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmICghaXNMb2NraW5nRW5hYmxlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDYWxsIHVwZGF0ZURvY3VtZW50RWRpdG9yIHRvIHVwZGF0ZSB0aGUgZG9jdW1lbnQncyBvd25lciB0byB0aGUgY3VycmVudCB1c2VyXG4gICAgYXdhaXQgdXBkYXRlRG9jdW1lbnRFZGl0b3IoaWQsIGNvbGxlY3Rpb25TbHVnID8/IGdsb2JhbFNsdWcsIHVzZXIpXG5cbiAgICBpZiAoIWlzV2l0aGluRG9jKSB7XG4gICAgICBkb2N1bWVudExvY2tTdGF0ZVJlZi5jdXJyZW50Lmhhc1Nob3duTG9ja2VkTW9kYWwgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBsb2NrZWQgc3RhdGUgdG8gcmVmbGVjdCB0aGUgY3VycmVudCB1c2VyIGFzIHRoZSBvd25lclxuICAgIGRvY3VtZW50TG9ja1N0YXRlUmVmLmN1cnJlbnQgPSB7XG4gICAgICBoYXNTaG93bkxvY2tlZE1vZGFsOiBkb2N1bWVudExvY2tTdGF0ZVJlZi5jdXJyZW50Py5oYXNTaG93bkxvY2tlZE1vZGFsLFxuICAgICAgaXNMb2NrZWQ6IHRydWUsXG4gICAgICB1c2VyLFxuICAgIH1cbiAgICBzZXRDdXJyZW50RWRpdG9yKHVzZXIpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdGFrZW92ZXIgd2l0aGluIHRoZSBkb2N1bWVudCwgZW5zdXJlIHRoZSBkb2N1bWVudCBpcyBlZGl0YWJsZVxuICAgIGlmIChpc1dpdGhpbkRvYyAmJiBzZXRJc1JlYWRPbmx5Rm9ySW5jb21pbmdVc2VyKSB7XG4gICAgICBzZXRJc1JlYWRPbmx5Rm9ySW5jb21pbmdVc2VyKGZhbHNlKVxuICAgIH1cblxuICAgIC8vIE5lZWQgdG8gY2xlYXIgdGhlIHJvdXRlIGNhY2hlIHRvIHJlZnJlc2ggdGhlIHBhZ2UgYW5kIHVwZGF0ZSByZWFkT25seSBzdGF0ZSBmb3Igc2VydmVyIHJlbmRlcmVkIGNvbXBvbmVudHNcbiAgICBpZiAoY2xlYXJSb3V0ZUNhY2hlKSB7XG4gICAgICBjbGVhclJvdXRlQ2FjaGUoKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBkb2N1bWVudCB0YWtlb3ZlcjonLCBlcnJvcilcbiAgfVxufVxuIiwiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9ucyB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCB7IGZvcm1hdEFkbWluVVJMLCBnZXRGaWVsZFBlcm1pc3Npb25zIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3Nvbm5lcidcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0J1dHRvbi9pbmRleC5qcydcbmltcG9ydCB7IEVtYWlsQW5kVXNlcm5hbWVGaWVsZHMgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9FbWFpbEFuZFVzZXJuYW1lL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ2hlY2tib3hGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2ZpZWxkcy9DaGVja2JveC9pbmRleC5qcydcbmltcG9ydCB7IENvbmZpcm1QYXNzd29yZEZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vZmllbGRzL0NvbmZpcm1QYXNzd29yZC9pbmRleC5qcydcbmltcG9ydCB7IFBhc3N3b3JkRmllbGQgfSBmcm9tICcuLi8uLi8uLi9maWVsZHMvUGFzc3dvcmQvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb3JtRmllbGRzLCB1c2VGb3JtTW9kaWZpZWQgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvQ29uZmlnL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mby9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyBBUElLZXkgfSBmcm9tICcuL0FQSUtleS5qcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2F1dGgtZmllbGRzJ1xuXG5leHBvcnQgY29uc3QgQXV0aDogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29sbGVjdGlvblNsdWcsXG4gICAgZGlzYWJsZUxvY2FsU3RyYXRlZ3ksXG4gICAgZW1haWwsXG4gICAgbG9naW5XaXRoVXNlcm5hbWUsXG4gICAgb3BlcmF0aW9uLFxuICAgIHJlYWRPbmx5LFxuICAgIHJlcXVpcmVQYXNzd29yZCxcbiAgICBzZXRWYWxpZGF0ZUJlZm9yZVN1Ym1pdCxcbiAgICB1c2VBUElLZXksXG4gICAgdXNlcm5hbWUsXG4gICAgdmVyaWZ5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbY2hhbmdpbmdQYXNzd29yZCwgc2V0Q2hhbmdpbmdQYXNzd29yZF0gPSB1c2VTdGF0ZShyZXF1aXJlUGFzc3dvcmQpXG4gIGNvbnN0IGVuYWJsZUFQSUtleSA9IHVzZUZvcm1GaWVsZHMoKFtmaWVsZHNdKSA9PiAoZmllbGRzICYmIGZpZWxkcz8uZW5hYmxlQVBJS2V5KSB8fCBudWxsKVxuICBjb25zdCBkaXNwYXRjaEZpZWxkcyA9IHVzZUZvcm1GaWVsZHMoKHJlZHVjZXIpID0+IHJlZHVjZXJbMV0pXG4gIGNvbnN0IG1vZGlmaWVkID0gdXNlRm9ybU1vZGlmaWVkKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHsgZG9jUGVybWlzc2lvbnMsIGlzRWRpdGluZywgaXNJbml0aWFsaXppbmcsIGlzVHJhc2hlZCB9ID0gdXNlRG9jdW1lbnRJbmZvKClcblxuICBjb25zdCB7XG4gICAgY29uZmlnOiB7XG4gICAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgfSxcbiAgfSA9IHVzZUNvbmZpZygpXG5cbiAgbGV0IHNob3dQYXNzd29yZEZpZWxkczogU2FuaXRpemVkRmllbGRQZXJtaXNzaW9ucyA9IHRydWVcbiAgbGV0IHNob3dVbmxvY2sgPSB0cnVlXG4gIGNvbnN0IGhhc1Bhc3N3b3JkRmllbGRPdmVycmlkZSA9XG4gICAgdHlwZW9mIGRvY1Blcm1pc3Npb25zLmZpZWxkcyA9PT0gJ29iamVjdCcgJiYgJ3Bhc3N3b3JkJyBpbiBkb2NQZXJtaXNzaW9ucy5maWVsZHNcbiAgY29uc3QgaGFzTG9naW5GaWVsZE92ZXJyaWRlID1cbiAgICB0eXBlb2YgZG9jUGVybWlzc2lvbnMuZmllbGRzID09PSAnb2JqZWN0JyAmJlxuICAgICgndXNlcm5hbWUnIGluIGRvY1Blcm1pc3Npb25zLmZpZWxkcyB8fCAnZW1haWwnIGluIGRvY1Blcm1pc3Npb25zLmZpZWxkcylcblxuICBpZiAoaGFzUGFzc3dvcmRGaWVsZE92ZXJyaWRlKSB7XG4gICAgY29uc3QgeyBwZXJtaXNzaW9uczogcGFzc3dvcmRQZXJtaXNzaW9ucyB9ID0gZ2V0RmllbGRQZXJtaXNzaW9ucyh7XG4gICAgICBmaWVsZDogeyBuYW1lOiAncGFzc3dvcmQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIHBhcmVudE5hbWU6ICcnLFxuICAgICAgcGVybWlzc2lvbnM6IGRvY1Blcm1pc3Npb25zPy5maWVsZHMsXG4gICAgfSlcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICBzaG93UGFzc3dvcmRGaWVsZHMgPVxuICAgICAgICBwYXNzd29yZFBlcm1pc3Npb25zID09PSB0cnVlIHx8XG4gICAgICAgICgodHlwZW9mIHBhc3N3b3JkUGVybWlzc2lvbnMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgcGFzc3dvcmRQZXJtaXNzaW9ucy5jcmVhdGUpIGFzIFNhbml0aXplZEZpZWxkUGVybWlzc2lvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3dQYXNzd29yZEZpZWxkcyA9XG4gICAgICAgIHBhc3N3b3JkUGVybWlzc2lvbnMgPT09IHRydWUgfHxcbiAgICAgICAgKCh0eXBlb2YgcGFzc3dvcmRQZXJtaXNzaW9ucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBwYXNzd29yZFBlcm1pc3Npb25zLnVwZGF0ZSkgYXMgU2FuaXRpemVkRmllbGRQZXJtaXNzaW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoaGFzTG9naW5GaWVsZE92ZXJyaWRlKSB7XG4gICAgY29uc3QgaGFzRW1haWxBbmRVc2VybmFtZUZpZWxkcyA9XG4gICAgICBsb2dpbldpdGhVc2VybmFtZSAmJiAobG9naW5XaXRoVXNlcm5hbWUucmVxdWlyZUVtYWlsIHx8IGxvZ2luV2l0aFVzZXJuYW1lLmFsbG93RW1haWxMb2dpbilcblxuICAgIGNvbnN0IHsgb3BlcmF0aW9uOiBlbWFpbFBlcm1pc3Npb24gfSA9IGdldEZpZWxkUGVybWlzc2lvbnMoe1xuICAgICAgZmllbGQ6IHsgbmFtZTogJ2VtYWlsJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICBvcGVyYXRpb246ICdyZWFkJyxcbiAgICAgIHBhcmVudE5hbWU6ICcnLFxuICAgICAgcGVybWlzc2lvbnM6IGRvY1Blcm1pc3Npb25zPy5maWVsZHMsXG4gICAgfSlcblxuICAgIGNvbnN0IHsgb3BlcmF0aW9uOiB1c2VybmFtZVBlcm1pc3Npb24gfSA9IGdldEZpZWxkUGVybWlzc2lvbnMoe1xuICAgICAgZmllbGQ6IHsgbmFtZTogJ3VzZXJuYW1lJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICBvcGVyYXRpb246ICdyZWFkJyxcbiAgICAgIHBhcmVudE5hbWU6ICcnLFxuICAgICAgcGVybWlzc2lvbnM6IGRvY1Blcm1pc3Npb25zPy5maWVsZHMsXG4gICAgfSlcblxuICAgIGlmIChoYXNFbWFpbEFuZFVzZXJuYW1lRmllbGRzKSB7XG4gICAgICBzaG93VW5sb2NrID0gdXNlcm5hbWVQZXJtaXNzaW9uIHx8IGVtYWlsUGVybWlzc2lvblxuICAgIH0gZWxzZSBpZiAobG9naW5XaXRoVXNlcm5hbWUgJiYgIWhhc0VtYWlsQW5kVXNlcm5hbWVGaWVsZHMpIHtcbiAgICAgIHNob3dVbmxvY2sgPSB1c2VybmFtZVBlcm1pc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgc2hvd1VubG9jayA9IGVtYWlsUGVybWlzc2lvblxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGVuYWJsZUZpZWxkcyA9XG4gICAgKCFkaXNhYmxlTG9jYWxTdHJhdGVneSB8fFxuICAgICAgKHR5cGVvZiBkaXNhYmxlTG9jYWxTdHJhdGVneSA9PT0gJ29iamVjdCcgJiYgZGlzYWJsZUxvY2FsU3RyYXRlZ3kuZW5hYmxlRmllbGRzID09PSB0cnVlKSkgJiZcbiAgICAoc2hvd1VubG9jayB8fCBzaG93UGFzc3dvcmRGaWVsZHMpXG5cbiAgY29uc3QgZGlzYWJsZWQgPSByZWFkT25seSB8fCBpc0luaXRpYWxpemluZyB8fCBpc1RyYXNoZWRcblxuICBjb25zdCBhcGlLZXlQZXJtaXNzaW9ucyA9XG4gICAgZG9jUGVybWlzc2lvbnM/LmZpZWxkcyA9PT0gdHJ1ZSA/IHRydWUgOiBkb2NQZXJtaXNzaW9ucz8uZmllbGRzPy5lbmFibGVBUElLZXlcblxuICBjb25zdCBhcGlLZXlSZWFkT25seSA9XG4gICAgcmVhZE9ubHkgfHxcbiAgICBhcGlLZXlQZXJtaXNzaW9ucyA9PT0gdHJ1ZSB8fFxuICAgIChhcGlLZXlQZXJtaXNzaW9ucyAmJiB0eXBlb2YgYXBpS2V5UGVybWlzc2lvbnMgPT09ICdvYmplY3QnICYmICFhcGlLZXlQZXJtaXNzaW9ucz8udXBkYXRlKVxuXG4gIGNvbnN0IGVuYWJsZUFQSUtleVJlYWRPbmx5ID1cbiAgICByZWFkT25seSB8fCAoYXBpS2V5UGVybWlzc2lvbnMgIT09IHRydWUgJiYgIWFwaUtleVBlcm1pc3Npb25zPy51cGRhdGUpXG5cbiAgY29uc3QgY2FuUmVhZEFwaUtleSA9IGFwaUtleVBlcm1pc3Npb25zID09PSB0cnVlIHx8IGFwaUtleVBlcm1pc3Npb25zPy5yZWFkXG5cbiAgY29uc3QgaGFzUGVybWlzc2lvblRvVW5sb2NrOiBib29sZWFuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGRvY1Blcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbigndW5sb2NrJyBpbiBkb2NQZXJtaXNzaW9ucyA/IGRvY1Blcm1pc3Npb25zLnVubG9jayA6IHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfSwgW2RvY1Blcm1pc3Npb25zXSlcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VQYXNzd29yZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGFuZ2luZ1Bhc3N3b3JkOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoY2hhbmdpbmdQYXNzd29yZCkge1xuICAgICAgICBzZXRWYWxpZGF0ZUJlZm9yZVN1Ym1pdCh0cnVlKVxuXG4gICAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgICB0eXBlOiAnVVBEQVRFJyxcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6IHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKSxcbiAgICAgICAgICBwYXRoOiAncGFzc3dvcmQnLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfSlcblxuICAgICAgICBkaXNwYXRjaEZpZWxkcyh7XG4gICAgICAgICAgdHlwZTogJ1VQREFURScsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJyksXG4gICAgICAgICAgcGF0aDogJ2NvbmZpcm0tcGFzc3dvcmQnLFxuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbGlkYXRlQmVmb3JlU3VibWl0KGZhbHNlKVxuICAgICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRU1PVkUnLCBwYXRoOiAncGFzc3dvcmQnIH0pXG4gICAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFTU9WRScsIHBhdGg6ICdjb25maXJtLXBhc3N3b3JkJyB9KVxuICAgICAgfVxuXG4gICAgICBzZXRDaGFuZ2luZ1Bhc3N3b3JkKGNoYW5naW5nUGFzc3dvcmQpXG4gICAgfSxcbiAgICBbZGlzcGF0Y2hGaWVsZHMsIHQsIHNldFZhbGlkYXRlQmVmb3JlU3VibWl0XSxcbiAgKVxuXG4gIGNvbnN0IHVubG9jayA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1cmwgPSBmb3JtYXRBZG1pblVSTCh7XG4gICAgICBhcGlSb3V0ZTogYXBpLFxuICAgICAgcGF0aDogYC8ke2NvbGxlY3Rpb25TbHVnfS91bmxvY2tgLFxuICAgIH0pXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIGJvZHk6XG4gICAgICAgIGxvZ2luV2l0aFVzZXJuYW1lICYmIHVzZXJuYW1lID8gSlNPTi5zdHJpbmdpZnkoeyB1c2VybmFtZSB9KSA6IEpTT04uc3RyaW5naWZ5KHsgZW1haWwgfSksXG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICB9KVxuXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICB0b2FzdC5zdWNjZXNzKHQoJ2F1dGhlbnRpY2F0aW9uOnN1Y2Nlc3NmdWxseVVubG9ja2VkJykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRvYXN0LmVycm9yKHQoJ2F1dGhlbnRpY2F0aW9uOmZhaWxlZFRvVW5sb2NrJykpXG4gICAgfVxuICB9LCBbaTE4biwgYXBpLCBjb2xsZWN0aW9uU2x1ZywgZW1haWwsIHVzZXJuYW1lLCB0LCBsb2dpbldpdGhVc2VybmFtZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1vZGlmaWVkKSB7XG4gICAgICBzZXRDaGFuZ2luZ1Bhc3N3b3JkKGZhbHNlKVxuICAgIH1cbiAgfSwgW21vZGlmaWVkXSlcblxuICBjb25zdCBzaG93QXV0aEJsb2NrID0gZW5hYmxlRmllbGRzXG4gIGNvbnN0IHNob3dBUElLZXlCbG9jayA9IHVzZUFQSUtleSAmJiBjYW5SZWFkQXBpS2V5XG4gIGNvbnN0IHNob3dWZXJpZnlCbG9jayA9IHZlcmlmeSAmJiBpc0VkaXRpbmdcblxuICBpZiAoIShzaG93QXV0aEJsb2NrIHx8IHNob3dBUElLZXlCbG9jayB8fCBzaG93VmVyaWZ5QmxvY2spKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICB7ZW5hYmxlRmllbGRzICYmIChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxFbWFpbEFuZFVzZXJuYW1lRmllbGRzXG4gICAgICAgICAgICBsb2dpbldpdGhVc2VybmFtZT17bG9naW5XaXRoVXNlcm5hbWV9XG4gICAgICAgICAgICBvcGVyYXRpb249e29wZXJhdGlvbn1cbiAgICAgICAgICAgIHBlcm1pc3Npb25zPXtkb2NQZXJtaXNzaW9ucz8uZmllbGRzfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3JlYWRPbmx5IHx8IGlzVHJhc2hlZH1cbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KGNoYW5naW5nUGFzc3dvcmQgfHwgcmVxdWlyZVBhc3N3b3JkKSAmJiAoIWRpc2FibGVMb2NhbFN0cmF0ZWd5IHx8ICFlbmFibGVGaWVsZHMpICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jaGFuZ2luZy1wYXNzd29yZGB9PlxuICAgICAgICAgICAgICA8UGFzc3dvcmRGaWVsZFxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgZmllbGQ9e3tcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdCgnYXV0aGVudGljYXRpb246bmV3UGFzc3dvcmQnKSxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaW5kZXhQYXRoPVwiXCJcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoPVwiXCJcbiAgICAgICAgICAgICAgICBwYXJlbnRTY2hlbWFQYXRoPVwiXCJcbiAgICAgICAgICAgICAgICBwYXRoPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxDb25maXJtUGFzc3dvcmRGaWVsZCBkaXNhYmxlZD17cmVhZE9ubHkgfHwgaXNUcmFzaGVkfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY29udHJvbHNgfT5cbiAgICAgICAgICAgIHtjaGFuZ2luZ1Bhc3N3b3JkICYmICFyZXF1aXJlUGFzc3dvcmQgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBpZD1cImNhbmNlbC1jaGFuZ2UtcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNoYW5nZVBhc3N3b3JkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0KCdnZW5lcmFsOmNhbmNlbCcpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWNoYW5naW5nUGFzc3dvcmQgJiZcbiAgICAgICAgICAgICAgIXJlcXVpcmVQYXNzd29yZCAmJlxuICAgICAgICAgICAgICAhZGlzYWJsZUxvY2FsU3RyYXRlZ3kgJiZcbiAgICAgICAgICAgICAgc2hvd1Bhc3N3b3JkRmllbGRzICYmIChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICBpZD1cImNoYW5nZS1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDaGFuZ2VQYXNzd29yZCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KCdhdXRoZW50aWNhdGlvbjpjaGFuZ2VQYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFjaGFuZ2luZ1Bhc3N3b3JkICYmIG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgJiYgaGFzUGVybWlzc2lvblRvVW5sb2NrICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgIXNob3dVbmxvY2t9XG4gICAgICAgICAgICAgICAgaWQ9XCJmb3JjZS11bmxvY2tcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgdW5sb2NrKCl9XG4gICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dCgnYXV0aGVudGljYXRpb246Zm9yY2VVbmxvY2snKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgKX1cbiAgICAgIHt1c2VBUElLZXkgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYXBpLWtleWB9PlxuICAgICAgICAgIHtjYW5SZWFkQXBpS2V5ICYmIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgPENoZWNrYm94RmllbGRcbiAgICAgICAgICAgICAgICBmaWVsZD17e1xuICAgICAgICAgICAgICAgICAgbmFtZTogJ2VuYWJsZUFQSUtleScsXG4gICAgICAgICAgICAgICAgICBhZG1pbjogeyBkaXNhYmxlZCwgcmVhZE9ubHk6IGVuYWJsZUFQSUtleVJlYWRPbmx5IH0sXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdCgnYXV0aGVudGljYXRpb246ZW5hYmxlQVBJS2V5JyksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwYXRoPVwiZW5hYmxlQVBJS2V5XCJcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoPXtgJHtjb2xsZWN0aW9uU2x1Z30uZW5hYmxlQVBJS2V5YH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEFQSUtleSBlbmFibGVkPXshIWVuYWJsZUFQSUtleT8udmFsdWV9IHJlYWRPbmx5PXthcGlLZXlSZWFkT25seX0gLz5cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge3ZlcmlmeSAmJiBpc0VkaXRpbmcgJiYgKFxuICAgICAgICA8Q2hlY2tib3hGaWVsZFxuICAgICAgICAgIGZpZWxkPXt7XG4gICAgICAgICAgICBuYW1lOiAnX3ZlcmlmaWVkJyxcbiAgICAgICAgICAgIGFkbWluOiB7IGRpc2FibGVkLCByZWFkT25seSB9LFxuICAgICAgICAgICAgbGFiZWw6IHQoJ2F1dGhlbnRpY2F0aW9uOnZlcmlmaWVkJyksXG4gICAgICAgICAgfX1cbiAgICAgICAgICBwYXRoPVwiX3ZlcmlmaWVkXCJcbiAgICAgICAgICBzY2hlbWFQYXRoPXtgJHtjb2xsZWN0aW9uU2x1Z30uX3ZlcmlmaWVkYH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsIid1c2UgY2xpZW50J1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCwgVGV4dEZpZWxkQ2xpZW50IH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyB0ZXh0IH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvQnV0dG9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgQ29weVRvQ2xpcGJvYXJkIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvQ29weVRvQ2xpcGJvYXJkL2luZGV4LmpzJ1xuaW1wb3J0IHsgR2VuZXJhdGVDb25maXJtYXRpb24gfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9HZW5lcmF0ZUNvbmZpcm1hdGlvbi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUZvcm1GaWVsZHMgfSBmcm9tICcuLi8uLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQuanMnXG5pbXBvcnQgeyB1c2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL3VzZUZpZWxkL2luZGV4LmpzJ1xuaW1wb3J0IHsgRXllSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb25zL0V5ZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5cbmNvbnN0IHBhdGggPSAnYXBpS2V5J1xuY29uc3QgYmFzZUNsYXNzID0gJ2FwaS1rZXknXG5jb25zdCBmaWVsZEJhc2VDbGFzcyA9ICdmaWVsZC10eXBlJ1xuXG5leHBvcnQgY29uc3QgQVBJS2V5OiBSZWFjdC5GQzx7IHJlYWRvbmx5IGVuYWJsZWQ6IGJvb2xlYW47IHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbiB9PiA9ICh7XG4gIGVuYWJsZWQsXG4gIHJlYWRPbmx5LFxufSkgPT4ge1xuICBjb25zdCBbaW5pdGlhbEFQSUtleV0gPSB1c2VTdGF0ZSh1dWlkdjQoKSlcbiAgY29uc3QgW2hpZ2hsaWdodGVkRmllbGQsIHNldEhpZ2hsaWdodGVkRmllbGRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93S2V5LCBzZXRTaG93S2V5XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBjb25maWcsIGdldEVudGl0eUNvbmZpZyB9ID0gdXNlQ29uZmlnKClcbiAgY29uc3QgeyBjb2xsZWN0aW9uU2x1ZyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcblxuICBjb25zdCBhcGlLZXkgPSB1c2VGb3JtRmllbGRzKChbZmllbGRzXSkgPT4gKGZpZWxkcyAmJiBmaWVsZHNbcGF0aF0pIHx8IG51bGwpXG5cbiAgY29uc3QgYXBpS2V5RmllbGQ6IFRleHRGaWVsZENsaWVudCA9IGdldEVudGl0eUNvbmZpZyh7IGNvbGxlY3Rpb25TbHVnIH0pPy5maWVsZHM/LmZpbmQoXG4gICAgKGZpZWxkKSA9PiAnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA9PT0gJ2FwaUtleScsXG4gICkgYXMgVGV4dEZpZWxkQ2xpZW50XG5cbiAgY29uc3QgdmFsaWRhdGUgPSAodmFsKSA9PlxuICAgIHRleHQodmFsLCB7XG4gICAgICBuYW1lOiAnYXBpS2V5JyxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIGJsb2NrRGF0YToge30sXG4gICAgICBkYXRhOiB7fSxcbiAgICAgIGV2ZW50OiAnb25DaGFuZ2UnLFxuICAgICAgbWF4TGVuZ3RoOiA0OCxcbiAgICAgIG1pbkxlbmd0aDogMjQsXG4gICAgICBwYXRoOiBbJ2FwaUtleSddLFxuICAgICAgcHJlZmVyZW5jZXM6IHsgZmllbGRzOiB7fSB9LFxuICAgICAgcmVxOiB7XG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICB9IGFzIHVua25vd24gYXMgUGF5bG9hZFJlcXVlc3QsXG4gICAgICBzaWJsaW5nRGF0YToge30sXG4gICAgfSlcblxuICBjb25zdCBhcGlLZXlWYWx1ZSA9IGFwaUtleT8udmFsdWVcblxuICBjb25zdCBhcGlLZXlMYWJlbCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBsYWJlbDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZyA9ICdBUEkgS2V5J1xuXG4gICAgaWYgKGFwaUtleUZpZWxkPy5sYWJlbCkge1xuICAgICAgbGFiZWwgPSBhcGlLZXlGaWVsZC5sYWJlbFxuICAgIH1cblxuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvbihsYWJlbCwgaTE4bilcbiAgfSwgW2FwaUtleUZpZWxkLCBpMThuXSlcblxuICBjb25zdCBBUElLZXlMYWJlbCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPGxhYmVsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbGFiZWwgZmllbGQtbGFiZWxgfSBodG1sRm9yPVwiYXBpS2V5XCI+XG4gICAgICAgIDxzcGFuPnthcGlLZXlMYWJlbH08L3NwYW4+XG4gICAgICAgIDxDb3B5VG9DbGlwYm9hcmQgdmFsdWU9e2FwaUtleVZhbHVlIGFzIHN0cmluZ30gLz5cbiAgICAgIDwvbGFiZWw+XG4gICAgKSxcbiAgICBbYXBpS2V5TGFiZWwsIGFwaUtleVZhbHVlXSxcbiAgKVxuXG4gIGNvbnN0IGZpZWxkVHlwZSA9IHVzZUZpZWxkKHtcbiAgICBwYXRoOiAnYXBpS2V5JyxcbiAgICB2YWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBoaWdobGlnaHRGaWVsZCA9ICgpID0+IHtcbiAgICBpZiAoaGlnaGxpZ2h0ZWRGaWVsZCkge1xuICAgICAgc2V0SGlnaGxpZ2h0ZWRGaWVsZChmYWxzZSlcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRIaWdobGlnaHRlZEZpZWxkKHRydWUpXG4gICAgfSwgMSlcbiAgfVxuXG4gIGNvbnN0IHsgc2V0VmFsdWUsIHZhbHVlIH0gPSBmaWVsZFR5cGVcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYXBpS2V5VmFsdWUgJiYgZW5hYmxlZCkge1xuICAgICAgc2V0VmFsdWUoaW5pdGlhbEFQSUtleSlcbiAgICB9XG4gICAgaWYgKCFlbmFibGVkICYmIGFwaUtleVZhbHVlKSB7XG4gICAgICBzZXRWYWx1ZShudWxsKVxuICAgIH1cbiAgfSwgW2FwaUtleVZhbHVlLCBlbmFibGVkLCBzZXRWYWx1ZSwgaW5pdGlhbEFQSUtleV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGlnaGxpZ2h0ZWRGaWVsZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldEhpZ2hsaWdodGVkRmllbGQoZmFsc2UpXG4gICAgICB9LCAxMDAwMClcbiAgICB9XG4gIH0sIFtoaWdobGlnaHRlZEZpZWxkXSlcblxuICBpZiAoIWVuYWJsZWQpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17W2ZpZWxkQmFzZUNsYXNzLCAnYXBpLWtleScsICdyZWFkLW9ubHknXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT5cbiAgICAgICAge0FQSUtleUxhYmVsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faW5wdXQtd3JhcGB9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YXBpS2V5TGFiZWx9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2hpZ2hsaWdodGVkRmllbGQgPyAnaGlnaGxpZ2h0JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICBpZD1cImFwaUtleVwiXG4gICAgICAgICAgICBuYW1lPVwiYXBpS2V5XCJcbiAgICAgICAgICAgIHR5cGU9e3Nob3dLZXkgPyAndGV4dCcgOiAncGFzc3dvcmQnfVxuICAgICAgICAgICAgdmFsdWU9eyh2YWx1ZSBhcyBzdHJpbmcpIHx8ICcnfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RvZ2dsZS1idXR0b24td3JhcGB9PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBidXR0b25TdHlsZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RvZ2dsZS1idXR0b25gfVxuICAgICAgICAgICAgICBpY29uPXs8RXllSWNvbiBhY3RpdmU9e3Nob3dLZXl9IC8+fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93S2V5KChwcmV2KSA9PiAhcHJldil9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgeyFyZWFkT25seSAmJiAoXG4gICAgICAgIDxHZW5lcmF0ZUNvbmZpcm1hdGlvbiBoaWdobGlnaHRGaWVsZD17aGlnaGxpZ2h0RmllbGR9IHNldEtleT17KCkgPT4gc2V0VmFsdWUodXVpZHY0KCkpfSAvPlxuICAgICAgKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZywgU2FuaXRpemVkR2xvYmFsQ29uZmlnIH0gZnJvbSAncGF5bG9hZCdcblxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tICdAcGF5bG9hZGNtcy90cmFuc2xhdGlvbnMnXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHsgU3RlcE5hdkl0ZW0gfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9TdGVwTmF2L2luZGV4LmpzJ1xuXG5pbXBvcnQgeyB1c2VTdGVwTmF2IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvU3RlcE5hdi9pbmRleC5qcydcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Db25maWcvaW5kZXguanMnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvRG9jdW1lbnRJbmZvL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRUaXRsZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudFRpdGxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlRW50aXR5VmlzaWJpbGl0eSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9FbnRpdHlWaXNpYmlsaXR5L2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5cbmV4cG9ydCBjb25zdCBTZXREb2N1bWVudFN0ZXBOYXY6IFJlYWN0LkZDPHtcbiAgY29sbGVjdGlvblNsdWc/OiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWydzbHVnJ11cbiAgZ2xvYmFsTGFiZWw/OiBTYW5pdGl6ZWRHbG9iYWxDb25maWdbJ2xhYmVsJ11cbiAgZ2xvYmFsU2x1Zz86IFNhbml0aXplZEdsb2JhbENvbmZpZ1snc2x1ZyddXG4gIGlkPzogbnVtYmVyIHwgc3RyaW5nXG4gIGlzVHJhc2hlZD86IGJvb2xlYW5cbiAgcGx1cmFsTGFiZWw/OiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnWydsYWJlbHMnXVsncGx1cmFsJ11cbiAgdXNlQXNUaXRsZT86IFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ2FkbWluJ11bJ3VzZUFzVGl0bGUnXVxuICB2aWV3Pzogc3RyaW5nXG59PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBjb2xsZWN0aW9uU2x1ZywgZ2xvYmFsU2x1ZywgaXNUcmFzaGVkLCBwbHVyYWxMYWJlbCwgdXNlQXNUaXRsZSB9ID0gcHJvcHNcblxuICBjb25zdCB2aWV3OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wcz8udmlldyB8fCB1bmRlZmluZWRcblxuICBjb25zdCB7IGlzRWRpdGluZywgaXNJbml0aWFsaXppbmcgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IHsgdGl0bGUgfSA9IHVzZURvY3VtZW50VGl0bGUoKVxuXG4gIGNvbnN0IHsgaXNFbnRpdHlWaXNpYmxlIH0gPSB1c2VFbnRpdHlWaXNpYmlsaXR5KClcbiAgY29uc3QgaXNWaXNpYmxlID0gaXNFbnRpdHlWaXNpYmxlKHsgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWcgfSlcblxuICBjb25zdCB7IHNldFN0ZXBOYXYgfSA9IHVzZVN0ZXBOYXYoKVxuXG4gIGNvbnN0IHsgaTE4biwgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuXG4gIGNvbnN0IHtcbiAgICBjb25maWc6IHtcbiAgICAgIHJvdXRlczogeyBhZG1pbjogYWRtaW5Sb3V0ZSB9LFxuICAgICAgc2VydmVyVVJMLFxuICAgIH0sXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbmF2OiBTdGVwTmF2SXRlbVtdID0gW11cblxuICAgIGlmICghaXNJbml0aWFsaXppbmcpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uU2x1Zykge1xuICAgICAgICAvLyBDb2xsZWN0aW9uIGxhYmVsXG4gICAgICAgIG5hdi5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogZ2V0VHJhbnNsYXRpb24ocGx1cmFsTGFiZWwsIGkxOG4pLFxuICAgICAgICAgIHVybDogaXNWaXNpYmxlXG4gICAgICAgICAgICA/IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICBhZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgIHBhdGg6IGAvY29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uU2x1Z31gLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gVHJhc2ggYnJlYWRjcnVtYiAoaWYgaW4gdHJhc2ggdmlldylcbiAgICAgICAgaWYgKGlzVHJhc2hlZCkge1xuICAgICAgICAgIG5hdi5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOnRyYXNoJyksXG4gICAgICAgICAgICB1cmw6IGlzVmlzaWJsZVxuICAgICAgICAgICAgICA/IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICAgIGFkbWluUm91dGUsXG4gICAgICAgICAgICAgICAgICBwYXRoOiBgL2NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvblNsdWd9L3RyYXNoYCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9jdW1lbnQgbGFiZWxcbiAgICAgICAgaWYgKGlzRWRpdGluZykge1xuICAgICAgICAgIG5hdi5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAodXNlQXNUaXRsZSAmJiB1c2VBc1RpdGxlICE9PSAnaWQnICYmIHRpdGxlKSB8fCBgJHtpZH1gLFxuICAgICAgICAgICAgdXJsOiBpc1Zpc2libGVcbiAgICAgICAgICAgICAgPyBmb3JtYXRBZG1pblVSTCh7XG4gICAgICAgICAgICAgICAgICBhZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgICAgcGF0aDogaXNUcmFzaGVkXG4gICAgICAgICAgICAgICAgICAgID8gYC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25TbHVnfS90cmFzaC8ke2lkfWBcbiAgICAgICAgICAgICAgICAgICAgOiBgL2NvbGxlY3Rpb25zLyR7Y29sbGVjdGlvblNsdWd9LyR7aWR9YCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5hdi5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOmNyZWF0ZU5ldycpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsU2x1Zykge1xuICAgICAgICBuYXYucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgICAgIHVybDogaXNWaXNpYmxlXG4gICAgICAgICAgICA/IGZvcm1hdEFkbWluVVJMKHtcbiAgICAgICAgICAgICAgICBhZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgIHBhdGg6IGAvZ2xvYmFscy8ke2dsb2JhbFNsdWd9YCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBGYWxsYmFjayB2aWV3ICh1c2VkIGZvciB2ZXJzaW9ucywgcHJldmlld3MsIGV0Yy4pXG4gICAgICBpZiAodmlldykge1xuICAgICAgICBuYXYucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IHZpZXcsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHNldFN0ZXBOYXYobmF2KVxuICAgIH1cbiAgfSwgW1xuICAgIHNldFN0ZXBOYXYsXG4gICAgaXNJbml0aWFsaXppbmcsXG4gICAgaXNFZGl0aW5nLFxuICAgIHBsdXJhbExhYmVsLFxuICAgIGlkLFxuICAgIGlzVHJhc2hlZCxcbiAgICB1c2VBc1RpdGxlLFxuICAgIGFkbWluUm91dGUsXG4gICAgdCxcbiAgICBpMThuLFxuICAgIHRpdGxlLFxuICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgIGdsb2JhbFNsdWcsXG4gICAgc2VydmVyVVJMLFxuICAgIHZpZXcsXG4gICAgaXNWaXNpYmxlLFxuICBdKVxuXG4gIHJldHVybiBudWxsXG59XG4iLCIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgQ2xpZW50Q29sbGVjdGlvbkNvbmZpZywgQ2xpZW50Q29uZmlnLCBDbGllbnRHbG9iYWxDb25maWcgfSBmcm9tICdwYXlsb2FkJ1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VGb3JtRmllbGRzIH0gZnJvbSAnLi4vLi4vLi4vZm9ybXMvRm9ybS9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRUaXRsZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudFRpdGxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvVHJhbnNsYXRpb24vaW5kZXguanMnXG5pbXBvcnQgeyBmb3JtYXREb2NUaXRsZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9mb3JtYXREb2NUaXRsZS9pbmRleC5qcydcblxuZXhwb3J0IGNvbnN0IFNldERvY3VtZW50VGl0bGU6IFJlYWN0LkZDPHtcbiAgY29sbGVjdGlvbkNvbmZpZz86IENsaWVudENvbGxlY3Rpb25Db25maWdcbiAgY29uZmlnPzogQ2xpZW50Q29uZmlnXG4gIGZhbGxiYWNrOiBzdHJpbmdcbiAgZ2xvYmFsQ29uZmlnPzogQ2xpZW50R2xvYmFsQ29uZmlnXG59PiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNvbGxlY3Rpb25Db25maWcsIGNvbmZpZywgZmFsbGJhY2ssIGdsb2JhbENvbmZpZyB9ID0gcHJvcHNcblxuICBjb25zdCB1c2VBc1RpdGxlID0gY29sbGVjdGlvbkNvbmZpZz8uYWRtaW4/LnVzZUFzVGl0bGVcblxuICBjb25zdCBmaWVsZCA9IHVzZUZvcm1GaWVsZHMoKFtmaWVsZHNdKSA9PiAodXNlQXNUaXRsZSAmJiBmaWVsZHMgJiYgZmllbGRzPy5bdXNlQXNUaXRsZV0pIHx8IG51bGwpXG5cbiAgY29uc3QgaGFzSW5pdGlhbGl6ZWQgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpXG5cbiAgY29uc3QgeyBzZXREb2N1bWVudFRpdGxlIH0gPSB1c2VEb2N1bWVudFRpdGxlKClcblxuICBjb25zdCBkYXRlRm9ybWF0RnJvbUNvbmZpZyA9IGNvbmZpZz8uYWRtaW4/LmRhdGVGb3JtYXRcblxuICBjb25zdCB0aXRsZSA9IGZvcm1hdERvY1RpdGxlKHtcbiAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgIGRhdGE6IHsgaWQ6ICcnLCBbdXNlQXNUaXRsZV06IGZpZWxkPy52YWx1ZSB8fCAnJyB9LFxuICAgIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXRGcm9tQ29uZmlnLFxuICAgIGZhbGxiYWNrLFxuICAgIGdsb2JhbENvbmZpZyxcbiAgICBpMThuLFxuICB9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFoYXNJbml0aWFsaXplZC5jdXJyZW50KSB7XG4gICAgICBoYXNJbml0aWFsaXplZC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RG9jdW1lbnRUaXRsZSh0aXRsZSlcbiAgfSwgW3NldERvY3VtZW50VGl0bGUsIHRpdGxlXSlcblxuICByZXR1cm4gbnVsbFxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZpZWxkLWRpZmYtbGFiZWwnXG5cbmV4cG9ydCBjb25zdCBGaWVsZERpZmZMYWJlbDogUmVhY3QuRkM8eyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IChcbiAgPGRpdiBjbGFzc05hbWU9e2Jhc2VDbGFzc30+e2NoaWxkcmVufTwvZGl2PlxuKVxuIiwiaW1wb3J0IHR5cGUgeyBMYWJlbEZ1bmN0aW9uLCBTdGF0aWNMYWJlbCB9IGZyb20gJ3BheWxvYWQnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiwgdHlwZSBJMThuQ2xpZW50IH0gZnJvbSAnQHBheWxvYWRjbXMvdHJhbnNsYXRpb25zJ1xuXG5pbXBvcnQgeyBGaWVsZERpZmZMYWJlbCB9IGZyb20gJy4uL0ZpZWxkRGlmZkxhYmVsL2luZGV4LmpzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZmllbGQtZGlmZidcblxuZXhwb3J0IGNvbnN0IEZpZWxkRGlmZkNvbnRhaW5lcjogUmVhY3QuRkM8e1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgRnJvbTogUmVhY3QuUmVhY3ROb2RlXG4gIGkxOG46IEkxOG5DbGllbnRcbiAgbGFiZWw6IHtcbiAgICBsYWJlbD86IGZhbHNlIHwgTGFiZWxGdW5jdGlvbiB8IFN0YXRpY0xhYmVsXG4gICAgbG9jYWxlPzogc3RyaW5nXG4gIH1cbiAgbmVzdGluZ0xldmVsPzogbnVtYmVyXG4gIFRvOiBSZWFjdC5SZWFjdE5vZGVcbn0+ID0gKGFyZ3MpID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBGcm9tLFxuICAgIGkxOG4sXG4gICAgbGFiZWw6IHsgbGFiZWwsIGxvY2FsZSB9LFxuICAgIG5lc3RpbmdMZXZlbCA9IDAsXG4gICAgVG8sXG4gIH0gPSBhcmdzXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc30tY29udGFpbmVyJHtjbGFzc05hbWUgPyBgICR7Y2xhc3NOYW1lfWAgOiAnJ30gbmVzdGVkLWxldmVsLSR7bmVzdGluZ0xldmVsfWB9XG4gICAgICBzdHlsZT17XG4gICAgICAgIG5lc3RpbmdMZXZlbFxuICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgLy8gTmVlZCB0byB1c2UgJSBpbnN0ZWFkIG9mIGZyLCBhcyBjYWxjKCkgZG9lc24ndCB3b3JrIHdpdGggZnIgd2hlbiB0aGlzIGlzIHVzZWQgaW4gZ3JpZFRlbXBsYXRlQ29sdW1uc1xuICAgICAgICAgICAgICAnLS1sZWZ0LW9mZnNldCc6IGBjYWxjKDUwJSAgLSAoJHtuZXN0aW5nTGV2ZWx9ICogY2FsYyggY2FsYyh2YXIoLS1iYXNlKSogMC41KSAtIDIuNXB4ICApKSlgLFxuICAgICAgICAgICAgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKVxuICAgICAgICAgIDogKHtcbiAgICAgICAgICAgICAgJy0tbGVmdC1vZmZzZXQnOiAnNTAlJyxcbiAgICAgICAgICAgIH0gYXMgUmVhY3QuQ1NTUHJvcGVydGllcylcbiAgICAgIH1cbiAgICA+XG4gICAgICA8RmllbGREaWZmTGFiZWw+XG4gICAgICAgIHtsb2NhbGUgJiYgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19sb2NhbGUtbGFiZWxgfT57bG9jYWxlfTwvc3Bhbj59XG4gICAgICAgIHt0eXBlb2YgbGFiZWwgIT09ICdmdW5jdGlvbicgJiYgZ2V0VHJhbnNsYXRpb24obGFiZWwgfHwgJycsIGkxOG4pfVxuICAgICAgPC9GaWVsZERpZmZMYWJlbD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9LWNvbnRlbnRgfVxuICAgICAgICBzdHlsZT17XG4gICAgICAgICAgbmVzdGluZ0xldmVsXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiBgY2FsYyh2YXIoLS1sZWZ0LW9mZnNldCkgLSBjYWxjKHZhcigtLWJhc2UpKjAuNSkgKSAgICAgY2FsYyg1MCUgLSBjYWxjKHZhcigtLWJhc2UpKjAuNSkgKyBjYWxjKDUwJSAtIHZhcigtLWxlZnQtb2Zmc2V0KSkpYCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICB7RnJvbX1cbiAgICAgICAge1RvfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXF1aXJlX3NjaGVkdWxlcl9wcm9kdWN0aW9uIiwiX19jb21tb25KU01pbiIsImV4cG9ydHMiLCJwdXNoIiwiaGVhcCIsIm5vZGUiLCJpbmRleCIsImEiLCJwYXJlbnRJbmRleCIsInBhcmVudCIsImNvbXBhcmUiLCJwZWVrIiwicG9wIiwiZmlyc3QiLCJsYXN0IiwibGVuZ3RoIiwiaGFsZkxlbmd0aCIsImxlZnRJbmRleCIsImxlZnQiLCJyaWdodEluZGV4IiwicmlnaHQiLCJiIiwiZGlmZiIsImxvY2FsUGVyZm9ybWFuY2UiLCJsb2NhbERhdGUiLCJpbml0aWFsVGltZSIsInRhc2tRdWV1ZSIsInRpbWVyUXVldWUiLCJ0YXNrSWRDb3VudGVyIiwiY3VycmVudFRhc2siLCJjdXJyZW50UHJpb3JpdHlMZXZlbCIsImlzUGVyZm9ybWluZ1dvcmsiLCJpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCIsImlzSG9zdFRpbWVvdXRTY2hlZHVsZWQiLCJsb2NhbFNldFRpbWVvdXQiLCJsb2NhbENsZWFyVGltZW91dCIsImxvY2FsU2V0SW1tZWRpYXRlIiwiYWR2YW5jZVRpbWVycyIsImN1cnJlbnRUaW1lIiwidGltZXIiLCJoYW5kbGVUaW1lb3V0IiwicmVxdWVzdEhvc3RDYWxsYmFjayIsImZpcnN0VGltZXIiLCJyZXF1ZXN0SG9zdFRpbWVvdXQiLCJpc01lc3NhZ2VMb29wUnVubmluZyIsInRhc2tUaW1lb3V0SUQiLCJmcmFtZUludGVydmFsIiwic3RhcnRUaW1lIiwic2hvdWxkWWllbGRUb0hvc3QiLCJwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUiLCJoYXNNb3JlV29yayIsInByZXZpb3VzUHJpb3JpdHlMZXZlbCIsImNhbGxiYWNrIiwiY29udGludWF0aW9uQ2FsbGJhY2siLCJzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSIsImNoYW5uZWwiLCJwb3J0IiwibXMiLCJ0YXNrIiwiZnBzIiwiZXZlbnRIYW5kbGVyIiwicHJpb3JpdHlMZXZlbCIsIm9wdGlvbnMiLCJ0aW1lb3V0IiwicGFyZW50UHJpb3JpdHlMZXZlbCIsInJlcXVpcmVfc2NoZWR1bGVyIiwibW9kdWxlIiwicmVxdWlyZV9vYmplY3RpZCIsIk1BQ0hJTkVfSUQiLCJPYmplY3RJRCIsInBpZCIsIkJ1ZmZlckN0ciIsImlzQnVmZmVyIiwib2JqIiwiaGV4VGFibGUiLCJpIiwiY2hlY2tGb3JIZXhSZWdFeHAiLCJkZWNvZGVMb29rdXAiLCJpZCIsInZhbGlkIiwidGltZSIsImhleCIsImhleFN0cmluZyIsImRhdGEiLCJvdGhlcklkIiwidGltZXN0YW1wIiwiaW5jIiwibmV4dCIsIm4iLCJpbnNwZWN0IiwicmVxdWlyZV9yZWFjdF9pc19wcm9kdWN0aW9uX21pbiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImsiLCJsIiwibSIsInAiLCJxIiwiciIsInQiLCJ2IiwidyIsIngiLCJ5IiwieiIsInUiLCJBIiwicmVxdWlyZV9yZWFjdF9pcyIsInJlcXVpcmVfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfY2pzIiwicmVhY3RJcyIsIlJFQUNUX1NUQVRJQ1MiLCJLTk9XTl9TVEFUSUNTIiwiRk9SV0FSRF9SRUZfU1RBVElDUyIsIk1FTU9fU1RBVElDUyIsIlRZUEVfU1RBVElDUyIsImdldFN0YXRpY3MiLCJjb21wb25lbnQiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXRQcm90b3R5cGVPZiIsIm9iamVjdFByb3RvdHlwZSIsImhvaXN0Tm9uUmVhY3RTdGF0aWNzIiwidGFyZ2V0Q29tcG9uZW50Iiwic291cmNlQ29tcG9uZW50IiwiYmxhY2tsaXN0IiwiaW5oZXJpdGVkQ29tcG9uZW50Iiwia2V5cyIsInRhcmdldFN0YXRpY3MiLCJzb3VyY2VTdGF0aWNzIiwia2V5IiwiZGVzY3JpcHRvciIsInJlcXVpcmVfc3JjIiwiaXNVbmRlZmluZWQiLCJ2YWx1ZSIsImlzTnVsbCIsImlzQm9vbGVhbiIsImlzT2JqZWN0IiwiaXNBcnJheSIsImlzRGF0ZSIsImlzQmxvYiIsImlzUmVhY3ROYXRpdmUiLCJpc0ZpbGUiLCJpbml0Q2ZnIiwic2VyaWFsaXplIiwiY2ZnIiwiZmQiLCJwcmUiLCJwcm9wIiwicmVxdWlyZV9jcnlwdCIsImJhc2U2NG1hcCIsImNyeXB0IiwiYnl0ZXMiLCJ3b3JkcyIsImJhc2U2NCIsInRyaXBsZXQiLCJqIiwiaW1vZDQiLCJyZXF1aXJlX2NoYXJlbmMiLCJjaGFyZW5jIiwic3RyIiwicmVxdWlyZV9pc19idWZmZXIiLCJpc1Nsb3dCdWZmZXIiLCJyZXF1aXJlX21kNSIsInV0ZjgiLCJiaW4iLCJtZDUiLCJtZXNzYWdlIiwiRkYiLCJHRyIsIkhIIiwiSUkiLCJhYSIsImJiIiwiY2MiLCJkZCIsInMiLCJkaWdlc3RieXRlcyIsIlJlbmRlckN1c3RvbUNvbXBvbmVudCIsIkN1c3RvbUNvbXBvbmVudCIsIkZhbGxiYWNrIiwidW5kZWZpbmVkIiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwidXNlIiwiaW1wb3J0X3NjaGVkdWxlciIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVDb250ZXh0T3JpZyIsInVzZUNvbnRleHRPcmlnIiwidXNlRWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVkdWNlciIsInVzZVJlZiIsInVzZVN0YXRlIiwiQ09OVEVYVF9WQUxVRSIsIk9SSUdJTkFMX1BST1ZJREVSIiwiaXNTU1IiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwicnVuV2l0aE5vcm1hbFByaW9yaXR5IiwicnVuV2l0aFByaW9yaXR5IiwiZm4iLCJOb3JtYWxQcmlvcml0eSIsImNyZWF0ZVByb3ZpZGVyIiwiUHJvdmlkZXJPcmlnIiwiY2hpbGRyZW4iLCJ2YWx1ZVJlZiIsInZlcnNpb25SZWYiLCJyZXNvbHZlIiwic2V0UmVzb2x2ZSIsImNvbnRleHRWYWx1ZSIsImxpc3RlbmVycyIsInVwZGF0ZSIsImFjdGlvbiIsImxpc3RlbmVyIiwiaWRlbnRpdHkiLCJkZWZhdWx0VmFsdWUiLCJjb250ZXh0IiwidXNlQ29udGV4dFNlbGVjdG9yIiwic2VsZWN0b3IiLCJ2ZXJzaW9uIiwic2VsZWN0ZWQiLCJzdGF0ZSIsImRpc3BhdGNoIiwicHJldiIsIm5leHRTZWxlY3RlZCIsInVzZUNvbnRleHQiLCJGb3JtQ29udGV4dCIsIkRvY3VtZW50Rm9ybUNvbnRleHQiLCJGb3JtV2F0Y2hDb250ZXh0IiwiU3VibWl0dGVkQ29udGV4dCIsIlByb2Nlc3NpbmdDb250ZXh0IiwiQmFja2dyb3VuZFByb2Nlc3NpbmdDb250ZXh0IiwiTW9kaWZpZWRDb250ZXh0IiwiSW5pdGlhbGl6aW5nQ29udGV4dCIsIkZvcm1GaWVsZHNDb250ZXh0IiwiY3JlYXRlU2VsZWN0b3JDb250ZXh0IiwidXNlRm9ybSIsInVzZURvY3VtZW50Rm9ybSIsInVzZVdhdGNoRm9ybSIsInVzZUZvcm1TdWJtaXR0ZWQiLCJ1c2VGb3JtUHJvY2Vzc2luZyIsInVzZUZvcm1CYWNrZ3JvdW5kUHJvY2Vzc2luZyIsInVzZUZvcm1Nb2RpZmllZCIsInVzZUZvcm1Jbml0aWFsaXppbmciLCJ1c2VGb3JtRmllbGRzIiwidXNlQWxsRm9ybUZpZWxkcyIsInVzZUZ1bGxDb250ZXh0IiwiUm93TGFiZWwiLCJwYXRoIiwicm93TnVtYmVyIiwiUm93TGFiZWxQcm92aWRlciIsImdldERhdGFCeVBhdGgiLCJnZXRTaWJsaW5nRGF0YSIsImNvbGxhcHNpYmxlRGF0YSIsInVzZU1lbW8iLCJfanN4IiwidXNlUm93TGFiZWwiLCJiYXNlQ2xhc3MiLCJwcm9wcyIsImNsYXNzTmFtZSIsImxhYmVsIiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJzdHlsZSIsInBvaW50ZXJFdmVudHMiLCJnZXRUcmFuc2xhdGlvbiIsIkZyYWdtZW50IiwidXNlQ2FsbGJhY2siLCJ1c2VJZCIsImZvcndhcmRSZWYiLCJpc1ZhbGlkRWxlbWVudCIsIlJlYWN0RE9NIiwiZ2V0QXNzZXQiLCJ0eXBlIiwiU3VjY2Vzc0ljb24iLCJJbmZvSWNvbiIsIldhcm5pbmdJY29uIiwiRXJyb3JJY29uIiwiYmFycyIsIkxvYWRlciIsInZpc2libGUiLCJfIiwiQ2xvc2VJY29uIiwidXNlSXNEb2N1bWVudEhpZGRlbiIsImlzRG9jdW1lbnRIaWRkZW4iLCJzZXRJc0RvY3VtZW50SGlkZGVuIiwidG9hc3RzQ291bnRlciIsIk9ic2VydmVyIiwic3Vic2NyaWJlciIsIl9hIiwicmVzdCIsImFscmVhZHlFeGlzdHMiLCJ0b2FzdCIsImRpc21pc3NpYmxlIiwicHJvbWlzZSIsInNob3VsZERpc21pc3MiLCJyZXN1bHQiLCJvcmlnaW5hbFByb21pc2UiLCJyZXNwb25zZSIsImlzSHR0cFJlc3BvbnNlIiwiZGVzY3JpcHRpb24iLCJlcnJvciIsInVud3JhcCIsInJlamVjdCIsImpzeCIsIlRvYXN0U3RhdGUiLCJ0b2FzdEZ1bmN0aW9uIiwiYmFzaWNUb2FzdCIsImdldEhpc3RvcnkiLCJnZXRUb2FzdHMiLCJzdHlsZUluamVjdCIsImNzcyIsImluc2VydEF0IiwiaGVhZCIsImlzQWN0aW9uIiwiVklTSUJMRV9UT0FTVFNfQU1PVU5UIiwiVklFV1BPUlRfT0ZGU0VUIiwiTU9CSUxFX1ZJRVdQT1JUX09GRlNFVCIsIlRPQVNUX0xJRkVUSU1FIiwiVE9BU1RfV0lEVEgiLCJHQVAiLCJTV0lQRV9USFJFU0hPTEQiLCJUSU1FX0JFRk9SRV9VTk1PVU5UIiwiY24iLCJjbGFzc2VzIiwiZ2V0RGVmYXVsdFN3aXBlRGlyZWN0aW9ucyIsInBvc2l0aW9uIiwiZGlyZWN0aW9ucyIsIlRvYXN0IiwiX2IiLCJfYyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaSIsIl9qIiwiX2siLCJUb2FzdGVySW52ZXJ0IiwidW5zdHlsZWQiLCJpbnRlcmFjdGluZyIsInNldEhlaWdodHMiLCJ2aXNpYmxlVG9hc3RzIiwiaGVpZ2h0cyIsInRvYXN0cyIsImV4cGFuZGVkIiwicmVtb3ZlVG9hc3QiLCJkZWZhdWx0UmljaENvbG9ycyIsImNsb3NlQnV0dG9uRnJvbVRvYXN0ZXIiLCJjYW5jZWxCdXR0b25TdHlsZSIsImFjdGlvbkJ1dHRvblN0eWxlIiwiZGVzY3JpcHRpb25DbGFzc05hbWUiLCJkdXJhdGlvbkZyb21Ub2FzdGVyIiwiZ2FwIiwibG9hZGluZ0ljb25Qcm9wIiwiZXhwYW5kQnlEZWZhdWx0IiwiY2xhc3NOYW1lcyIsImljb25zIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiLCJwYXVzZVdoZW5QYWdlSXNIaWRkZW4iLCJzd2lwZURpcmVjdGlvbiIsInNldFN3aXBlRGlyZWN0aW9uIiwic3dpcGVPdXREaXJlY3Rpb24iLCJzZXRTd2lwZU91dERpcmVjdGlvbiIsIm1vdW50ZWQiLCJzZXRNb3VudGVkIiwicmVtb3ZlZCIsInNldFJlbW92ZWQiLCJzd2lwaW5nIiwic2V0U3dpcGluZyIsInN3aXBlT3V0Iiwic2V0U3dpcGVPdXQiLCJpc1N3aXBlZCIsInNldElzU3dpcGVkIiwib2Zmc2V0QmVmb3JlUmVtb3ZlIiwic2V0T2Zmc2V0QmVmb3JlUmVtb3ZlIiwiaW5pdGlhbEhlaWdodCIsInNldEluaXRpYWxIZWlnaHQiLCJyZW1haW5pbmdUaW1lIiwiZHJhZ1N0YXJ0VGltZSIsInRvYXN0UmVmIiwiaXNGcm9udCIsImlzVmlzaWJsZSIsInRvYXN0VHlwZSIsInRvYXN0Q2xhc3NuYW1lIiwidG9hc3REZXNjcmlwdGlvbkNsYXNzbmFtZSIsImhlaWdodEluZGV4IiwiaGVpZ2h0IiwiY2xvc2VCdXR0b24iLCJkdXJhdGlvbiIsImNsb3NlVGltZXJTdGFydFRpbWVSZWYiLCJvZmZzZXQiLCJsYXN0Q2xvc2VUaW1lclN0YXJ0VGltZVJlZiIsInBvaW50ZXJTdGFydFJlZiIsInRvYXN0c0hlaWdodEJlZm9yZSIsImN1cnIiLCJyZWR1Y2VySW5kZXgiLCJpbnZlcnQiLCJkaXNhYmxlZCIsInRvYXN0Tm9kZSIsIm9yaWdpbmFsSGVpZ2h0IiwibmV3SGVpZ2h0IiwiZGVsZXRlVG9hc3QiLCJ0aW1lb3V0SWQiLCJlbGFwc2VkVGltZSIsImdldExvYWRpbmdJY29uIiwiZXZlbnQiLCJzd2lwZUFtb3VudFgiLCJzd2lwZUFtb3VudFkiLCJ0aW1lVGFrZW4iLCJzd2lwZUFtb3VudCIsInZlbG9jaXR5IiwieURlbHRhIiwieERlbHRhIiwic3dpcGVEaXJlY3Rpb25zIiwiZ2V0RG9jdW1lbnREaXJlY3Rpb24iLCJkaXJBdHRyaWJ1dGUiLCJhc3NpZ25PZmZzZXQiLCJkZWZhdWx0T2Zmc2V0IiwibW9iaWxlT2Zmc2V0Iiwic3R5bGVzIiwiaXNNb2JpbGUiLCJwcmVmaXgiLCJhc3NpZ25BbGwiLCJUb2FzdGVyIiwicmVmIiwiaG90a2V5IiwiZXhwYW5kIiwidGhlbWUiLCJyaWNoQ29sb3JzIiwidG9hc3RPcHRpb25zIiwiZGlyIiwibG9hZGluZ0ljb24iLCJjb250YWluZXJBcmlhTGFiZWwiLCJzZXRUb2FzdHMiLCJwb3NzaWJsZVBvc2l0aW9ucyIsInNldEV4cGFuZGVkIiwic2V0SW50ZXJhY3RpbmciLCJhY3R1YWxUaGVtZSIsInNldEFjdHVhbFRoZW1lIiwibGlzdFJlZiIsImhvdGtleUxhYmVsIiwibGFzdEZvY3VzZWRFbGVtZW50UmVmIiwiaXNGb2N1c1dpdGhpblJlZiIsInRvYXN0VG9SZW1vdmUiLCJpbmRleE9mRXhpc3RpbmdUb2FzdCIsImRhcmtNZWRpYVF1ZXJ5IiwibWF0Y2hlcyIsImhhbmRsZUtleURvd24iLCJOZXh0TGlua0ltcG9ydCIsInVzZVJvdXRlciIsInN0YXJ0VHJhbnNpdGlvbiIsInVzZU9wdGltaXN0aWMiLCJSb3V0ZVRyYW5zaXRpb25Qcm92aWRlciIsInQwIiwiJCIsImlzVHJhbnNpdGlvbmluZyIsInNldElzVHJhbnNpdGlvbmluZyIsInRyYW5zaXRpb25Qcm9ncmVzcyIsInNldFRyYW5zaXRpb25Qcm9ncmVzcyIsInRyYW5zaXRpb25Qcm9ncmVzc1JlZiIsInRpbWVySUQiLCJ0MSIsIlN5bWJvbCIsImZvciIsImN1cnJlbnQiLCJzZXRJbnRlcnZhbCIsIm5ld1Byb2dyZXNzIiwiTWF0aCIsInJhbmRvbSIsInBvdyIsImxvZyIsImluaXRpYXRlUHJvZ3Jlc3MiLCJ0MiIsInQzIiwiY2xlYXJJbnRlcnZhbCIsInQ0Iiwic3RhcnRSb3V0ZVRyYW5zaXRpb24iLCJ0NSIsIlJvdXRlVHJhbnNpdGlvbkNvbnRleHQiLCJ1c2VSb3V0ZVRyYW5zaXRpb24iLCJzbGFzaGVkUHJvdG9jb2xzIiwic3RyaW5naWZ5VXJsUXVlcnlQYXJhbSIsInBhcmFtIiwiaXNOYU4iLCJTdHJpbmciLCJ1cmxRdWVyeVRvU2VhcmNoUGFyYW1zIiwidXJsUXVlcnkiLCJVUkxTZWFyY2hQYXJhbXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsIkFycmF5IiwiaXRlbSIsImFwcGVuZCIsInNldCIsImZvcm1hdFVybCIsInVybE9iaiIsImF1dGgiLCJob3N0bmFtZSIsInByb3RvY29sIiwicGF0aG5hbWUiLCJoYXNoIiwicXVlcnkiLCJob3N0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImluZGV4T2YiLCJzZWFyY2giLCJlbmRzV2l0aCIsInNsYXNoZXMiLCJ0ZXN0IiwiTmV4dExpbmsiLCJkZWZhdWx0IiwiaXNNb2RpZmllZEV2ZW50IiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImdldEF0dHJpYnV0ZSIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJhbHRLZXkiLCJuYXRpdmVFdmVudCIsIndoaWNoIiwiTGluayIsImhyZWYiLCJvbkNsaWNrIiwicHJldmVudERlZmF1bHQiLCJzY3JvbGwiLCJyb3V0ZXIiLCJ1cmwiLCJuYXZpZ2F0ZSIsImFsaWduSWNvbiIsImljb24iLCJ0byIsIlJlbmRlcmVkVHlwZSIsIl9qc3hzIiwiQ2hldnJvbkljb24iLCJhcmlhTGFiZWwiLCJkaXJlY3Rpb24iLCJzaXplIiwidmlld0JveCIsIndpZHRoIiwieG1sbnMiLCJFZGl0SWNvbiIsIkxpbmtJY29uIiwiZmlsbCIsImZvY3VzYWJsZSIsIlBsdXNJY29uIiwiU3dhcEljb24iLCJQb3B1cEJ1dHRvbkxpc3RfZXhwb3J0cyIsIl9fZXhwb3J0IiwiQnV0dG9uIiwiQnV0dG9uR3JvdXAiLCJQb3B1cExpc3REaXZpZGVyIiwiUG9wdXBMaXN0R3JvdXBMYWJlbCIsImJ1dHRvblNpemUiLCJ0ZXh0QWxpZ24iLCJhY3RpdmUiLCJwcmVmZXRjaCIsImNyZWF0ZVBvcnRhbCIsInVzZUluc2VydGlvbkVmZmVjdCIsInVzZUVmZmVjdEV2ZW50IiwiYXJncyIsImxhdGVzdEZuIiwiYnV0dG9uIiwiYnV0dG9uVHlwZSIsIm5vQmFja2dyb3VuZCIsInNldEFjdGl2ZSIsImhhbmRsZUNsaWNrIiwib25LZXlEb3duIiwicm9sZSIsInRhYkluZGV4IiwiUG9wdXBUcmlnZ2VyIiwiYnV0dG9uQ2xhc3NOYW1lIiwiY2FyZXQiLCJmb3JjZU9wZW4iLCJob3Jpem9udGFsQWxpZ24iLCJpbml0QWN0aXZlIiwib25Ub2dnbGVDbG9zZSIsIm9uVG9nZ2xlT3BlbiIsInBvcnRhbENsYXNzTmFtZSIsInJlbmRlciIsInNob3dPbkhvdmVyIiwic2hvd1Njcm9sbGJhciIsInZlcnRpY2FsQWxpZ24iLCJwb3B1cFJlZiIsIm9wZW5lZFZpYUtleWJvYXJkUmVmIiwic2V0QWN0aXZlSW50ZXJuYWwiLCJpc0FjdGl2ZSIsInZpYUtleWJvYXJkIiwidXBkYXRlUG9zaXRpb24iLCJ0cmlnZ2VyIiwidHJpZ2dlclJlZiIsInRyaWdnZXJSZWN0IiwicG9wdXAiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJvblRvcCIsInBvcHVwUmVjdCIsInNjcm9sbFkiLCJib3R0b20iLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsInNldElzT25Ub3AiLCJ0cmlnZ2VyQ2VudGVyIiwibmV3VG9wIiwicm91bmQiLCJuZXdMZWZ0IiwiY2FyZXRMZWZ0Iiwic2Nyb2xsWCIsIm5ld0NhcmV0TGVmdCIsImdldFByb3BlcnR5VmFsdWUiLCJoYW5kbGVDbGlja091dHNpZGUiLCJpc091dHNpZGVQb3B1cCIsImNvbnRhaW5zIiwiaXNPdXRzaWRlVHJpZ2dlciIsImVfMCIsInBvcHVwXzAiLCJmcm9tIiwiZWwiLCJjdXJyZW50SW5kZXgiLCJmaW5kSW5kZXgiLCJkb2N1bWVudCIsImFjdGl2ZUVsZW1lbnQiLCJuZXh0SW5kZXgiLCJnb0JhY2t3YXJkIiwiaGFuZGxlQWN0aW9uYWJsZUNsaWNrIiwiZV8xIiwiYWN0aW9uYWJsZSIsImNsb3Nlc3QiLCJwb3B1cF8xIiwiVEFCQkFCTEVfU0VMRUNUT1IiLCJmaXJzdEZvY3VzYWJsZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIlRyaWdnZXIiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJpc09uVG9wIiwiY2xvc2UiLCJ1c2VJbnRlcnNlY3QiLCJkaXNhYmxlIiwicm9vdCIsInJvb3RNYXJnaW4iLCJ0aHJlc2hvbGQiLCJlbnRyeSIsInVwZGF0ZUVudHJ5Iiwic2V0Tm9kZSIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJlbnQiLCJ0NiIsImN1cnJlbnRPYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwidDciLCJUb29sdGlwIiwiYWxpZ25DYXJldCIsImJvdW5kaW5nUmVmIiwiZGVsYXkiLCJwb3NpdGlvbkZyb21Qcm9wcyIsInNob3ciLCJzdGF0aWNQb3NpdGlvbmluZyIsInNldFNob3ciLCJzaG93RnJvbVByb3BzIiwiZ2V0VGl0bGVBdHRyaWJ1dGUiLCJzZXRQb3NpdGlvbiIsImNvbnRlbnQiLCJpbnRlcnNlY3Rpb25FbnRyeSIsInNldFRpbWVvdXQiLCJpc0ludGVyc2VjdGluZyIsInRpdGxlIiwiY2hldnJvbiIsImVkaXQiLCJsaW5rIiwicGx1cyIsInN3YXAiLCJzaG93VG9vbHRpcCIsInRvb2x0aXAiLCJCdWlsdEluSWNvbiIsImJ1dHRvblN0eWxlIiwiZW5hYmxlU3ViTWVudSIsImV4dHJhQnV0dG9uUHJvcHMiLCJpY29uUG9zaXRpb24iLCJpY29uU3R5bGUiLCJtYXJnaW4iLCJuZXdUYWIiLCJvbk1vdXNlRG93biIsIlN1Yk1lbnVQb3B1cENvbnRlbnQiLCJzZXRTaG93VG9vbHRpcCIsInN0eWxlQ2xhc3NlcyIsIm9uUG9pbnRlckVudGVyIiwib25Qb2ludGVyTGVhdmUiLCJyZWwiLCJidXR0b25FbGVtZW50IiwiYnV0dG9uUHJvcHMiLCJCdXR0b25Db250ZW50cyIsIlBvcHVwIiwiZmllbGRBZmZlY3RzRGF0YSIsImZpZWxkSGFzU3ViRmllbGRzIiwiaXNDbGlwYm9hcmREYXRhVmFsaWQiLCJpc0NsaXBib2FyZEJsb2Nrc1ZhbGlkIiwiYmxvY2tzRnJvbUNsaXBib2FyZCIsImJsb2NrcyIsImJsb2Nrc0Zyb21Db25maWciLCJzY2hlbWFCbG9ja3MiLCJpc0NsaXBib2FyZEZpZWxkc1ZhbGlkIiwiZmllbGRzRnJvbUNsaXBib2FyZCIsImZpZWxkcyIsImZpZWxkc0Zyb21Db25maWciLCJzY2hlbWFGaWVsZHMiLCJldmVyeSIsImNsaXBib2FyZEZpZWxkIiwiY29uZmlnRmllbGQiLCJuYW1lIiwiaGFzTmVzdGVkRmllbGRzQ29uZmlnIiwiaGFzTmVzdGVkRmllbGRzQ2xpcGJvYXJkIiwiY29uZmlnQmxvY2tNYXAiLCJNYXAiLCJtYXAiLCJibG9jayIsInNsdWciLCJjaGVja2VkU2x1Z3MiLCJTZXQiLCJjdXJyQmxvY2siLCJjdXJyU2x1ZyIsImhhcyIsImNvbmZpZ0Jsb2NrIiwiZ2V0IiwiYWRkIiwibG9jYWxTdG9yYWdlQ2xpcGJvYXJkS2V5IiwiY2xpcGJvYXJkQ29weSIsImdldERhdGFUb0NvcHkiLCJkYXRhVG9Xcml0ZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiY2xpcGJvYXJkUGFzdGUiLCJvblBhc3RlIiwiZmllbGRQYXRoIiwiZGF0YVRvUGFzdGUiLCJqc29uRnJvbUNsaXBib2FyZCIsImdldEl0ZW0iLCJwYXJzZSIsImRhdGFUb1ZhbGlkYXRlIiwiTW9yZUljb24iLCJzdHJva2VMaW5lY2FwIiwiQ29weUljb24iLCJDbGlwYm9hcmRBY3Rpb25MYWJlbCIsImlzUGFzdGUiLCJpc1JvdyIsInVzZVRyYW5zbGF0aW9uIiwiQ2xpcGJvYXJkQWN0aW9uIiwiYWxsb3dDb3B5IiwiYWxsb3dQYXN0ZSIsImNvcHlDbGFzc05hbWUiLCJwYXN0ZUNsYXNzTmFtZSIsImhhbmRsZUNvcHkiLCJjbGlwYm9hcmRSZXN1bHQiLCJzdWNjZXNzIiwiaGFuZGxlUGFzdGUiLCJQb3B1cExpc3QiLCJpbXBvcnRfYnNvbl9vYmplY3RpZCIsIk9iamVjdElkIiwiT2JqZWN0SWRJbXBvcnQiLCJyZWR1Y2VGb3JtU3RhdGVCeVBhdGgiLCJmb3JtU3RhdGUiLCJyb3dJbmRleCIsImZpbHRlcmVkU3RhdGUiLCJzdGFydHNXaXRoIiwiY3VzdG9tQ29tcG9uZW50cyIsInZhbGlkYXRlIiwiX18iLCJmaWVsZCIsInJvd3MiLCJyb3ciLCJzZXJpYWxpemFibGVSb3ciLCJtZXJnZUZvcm1TdGF0ZUZyb21DbGlwYm9hcmQiLCJkYXRhRnJvbUNsaXBib2FyZCIsImNsaXBib2FyZERhdGEiLCJ0eXBlRnJvbUNsaXBib2FyZCIsInBhdGhGcm9tQ2xpcGJvYXJkIiwicm93SW5kZXhGcm9tQ2xpcGJvYXJkIiwiY29weUZyb21GaWVsZCIsInBhc3RlSW50b0ZpZWxkIiwiZnJvbVJvd1RvRmllbGQiLCJwYXRoVG9SZXBsYWNlIiwidGFyZ2V0U2VnbWVudCIsImxhc3RSZW5kZXJlZFBhdGgiLCJyb3dJREZyb21DbGlwYm9hcmQiLCJoYXNSb3dzIiwiaXNMb2FkaW5nIiwiaW5pdGlhbFZhbHVlIiwiZGlzYWJsZUZvcm1EYXRhIiwiaWRSZXBsYWNlbWVudHMiLCJjbGlwYm9hcmRQYXRoIiwibmV3UGF0aCIsIm9sZElEIiwiaXNWYWxpZCIsIm5ld0lEIiwidG9IZXhTdHJpbmciLCJzZWdtZW50cyIsInNwbGl0IiwicGFyc2VJbnQiLCJwYXJlbnRGaWVsZFBhdGgiLCJzbGljZSIsImZ1bGxQYXJlbnRQYXRoIiwicGFyZW50Um93cyIsInRhcmdldFBhcnRzIiwibGFzdFBhcnQiLCJyb3dJbmRleEZyb21UYXJnZXQiLCJ1c2VDb21iaW5lZFJlZnMiLCJyZWZzIiwiY2FuVXNlRE9NIiwiaXNXaW5kb3ciLCJlbGVtZW50IiwiZWxlbWVudFN0cmluZyIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImlzTm9kZSIsImdldFdpbmRvdyIsIl90YXJnZXQkb3duZXJEb2N1bWVudCIsIl90YXJnZXQkb3duZXJEb2N1bWVudDIiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciLCJpZHMiLCJ1c2VVbmlxdWVJZCIsImNyZWF0ZUFkanVzdG1lbnRGbiIsIm1vZGlmaWVyIiwib2JqZWN0IiwiYWRqdXN0bWVudHMiLCJyZWR1Y2UiLCJhY2N1bXVsYXRvciIsImFkanVzdG1lbnQiLCJ2YWx1ZUFkanVzdG1lbnQiLCJzdWJ0cmFjdCIsImhhc1ZpZXdwb3J0UmVsYXRpdmVDb29yZGluYXRlcyIsImlzS2V5Ym9hcmRFdmVudCIsIktleWJvYXJkRXZlbnQiLCJpc1RvdWNoRXZlbnQiLCJUb3VjaEV2ZW50IiwiZ2V0RXZlbnRDb29yZGluYXRlcyIsInRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsImNoYW5nZWRUb3VjaGVzIiwiQ1NTIiwiZnJlZXplIiwiVHJhbnNsYXRlIiwidHJhbnNmb3JtIiwiU2NhbGUiLCJzY2FsZVgiLCJzY2FsZVkiLCJUcmFuc2Zvcm0iLCJUcmFuc2l0aW9uIiwiX3JlZiIsInByb3BlcnR5IiwiZWFzaW5nIiwiYXJyYXlNb3ZlIiwiYXJyYXkiLCJuZXdBcnJheSIsInNwbGljZSIsImdldFNvcnRlZFJlY3RzIiwiaXRlbXMiLCJyZWN0cyIsInJlY3QiLCJpc1ZhbGlkSW5kZXgiLCJpdGVtc0VxdWFsIiwibm9ybWFsaXplRGlzYWJsZWQiLCJkcmFnZ2FibGUiLCJkcm9wcGFibGUiLCJyZWN0U29ydGluZ1N0cmF0ZWd5IiwiYWN0aXZlSW5kZXgiLCJvdmVySW5kZXgiLCJuZXdSZWN0cyIsIm9sZFJlY3QiLCJuZXdSZWN0IiwiSURfUFJFRklYIiwiQ29udGV4dCIsImNvbnRhaW5lcklkIiwiZGlzYWJsZVRyYW5zZm9ybXMiLCJ1c2VEcmFnT3ZlcmxheSIsInNvcnRlZFJlY3RzIiwic3RyYXRlZ3kiLCJTb3J0YWJsZUNvbnRleHQiLCJ1c2VyRGVmaW5lZEl0ZW1zIiwiZGlzYWJsZWRQcm9wIiwiZHJhZ092ZXJsYXkiLCJkcm9wcGFibGVSZWN0cyIsIm92ZXIiLCJtZWFzdXJlRHJvcHBhYmxlQ29udGFpbmVycyIsInVzZURuZENvbnRleHQiLCJpc0RyYWdnaW5nIiwicHJldmlvdXNJdGVtc1JlZiIsIml0ZW1zSGF2ZUNoYW5nZWQiLCJQcm92aWRlciIsImRlZmF1bHROZXdJbmRleEdldHRlciIsImRlZmF1bHRBbmltYXRlTGF5b3V0Q2hhbmdlcyIsIl9yZWYyIiwiaXNTb3J0aW5nIiwid2FzRHJhZ2dpbmciLCJuZXdJbmRleCIsInByZXZpb3VzSXRlbXMiLCJwcmV2aW91c0NvbnRhaW5lcklkIiwidHJhbnNpdGlvbiIsImRlZmF1bHRUcmFuc2l0aW9uIiwidHJhbnNpdGlvblByb3BlcnR5IiwiZGlzYWJsZWRUcmFuc2l0aW9uIiwiZGVmYXVsdEF0dHJpYnV0ZXMiLCJyb2xlRGVzY3JpcHRpb24iLCJ1c2VEZXJpdmVkVHJhbnNmb3JtIiwiZGVyaXZlZFRyYW5zZm9ybSIsInNldERlcml2ZWR0cmFuc2Zvcm0iLCJwcmV2aW91c0luZGV4IiwiaW5pdGlhbCIsImdldENsaWVudFJlY3QiLCJpZ25vcmVUcmFuc2Zvcm0iLCJkZWx0YSIsInVzZVNvcnRhYmxlIiwiYW5pbWF0ZUxheW91dENoYW5nZXMiLCJhdHRyaWJ1dGVzIiwidXNlckRlZmluZWRBdHRyaWJ1dGVzIiwibG9jYWxEaXNhYmxlZCIsImN1c3RvbURhdGEiLCJnZXROZXdJbmRleCIsImxvY2FsU3RyYXRlZ3kiLCJyZXNpemVPYnNlcnZlckNvbmZpZyIsImdsb2JhbERpc2FibGVkIiwiZ2xvYmFsU3RyYXRlZ3kiLCJub3JtYWxpemVMb2NhbERpc2FibGVkIiwic29ydGFibGUiLCJpdGVtc0FmdGVyQ3VycmVudFNvcnRhYmxlIiwiaXNPdmVyIiwic2V0Tm9kZVJlZiIsInNldERyb3BwYWJsZU5vZGVSZWYiLCJ1c2VEcm9wcGFibGUiLCJ1cGRhdGVNZWFzdXJlbWVudHNGb3IiLCJhY3RpdmF0b3JFdmVudCIsImFjdGl2ZU5vZGVSZWN0Iiwic2V0RHJhZ2dhYmxlTm9kZVJlZiIsInNldEFjdGl2YXRvck5vZGVSZWYiLCJ1c2VEcmFnZ2FibGUiLCJkaXNwbGFjZUl0ZW0iLCJzaG91bGREaXNwbGFjZURyYWdTb3VyY2UiLCJkcmFnU291cmNlRGlzcGxhY2VtZW50IiwiZmluYWxUcmFuc2Zvcm0iLCJhY3RpdmVJZCIsInByZXZpb3VzIiwic2hvdWxkQW5pbWF0ZUxheW91dENoYW5nZXMiLCJjbGVhclRpbWVvdXQiLCJnZXRUcmFuc2l0aW9uIiwiX2xvY2FsRGlzYWJsZWQkZHJhZ2dhIiwiX2xvY2FsRGlzYWJsZWQkZHJvcHBhIiwiaGFzU29ydGFibGVEYXRhIiwiS2V5Ym9hcmRDb2RlIiwiRG93biIsIlJpZ2h0IiwiVXAiLCJMZWZ0Iiwic29ydGFibGVLZXlib2FyZENvb3JkaW5hdGVzIiwiY29sbGlzaW9uUmVjdCIsImRyb3BwYWJsZUNvbnRhaW5lcnMiLCJzY3JvbGxhYmxlQW5jZXN0b3JzIiwiaW5jbHVkZXMiLCJjb2RlIiwiZmlsdGVyZWRDb250YWluZXJzIiwiZ2V0RW5hYmxlZCIsImNvbGxpc2lvbnMiLCJjbG9zZXN0Q29ybmVycyIsInBvaW50ZXJDb29yZGluYXRlcyIsImNsb3Nlc3RJZCIsImdldEZpcnN0Q29sbGlzaW9uIiwiYWN0aXZlRHJvcHBhYmxlIiwibmV3RHJvcHBhYmxlIiwibmV3Tm9kZSIsImhhc0RpZmZlcmVudFNjcm9sbEFuY2VzdG9ycyIsImdldFNjcm9sbGFibGVBbmNlc3RvcnMiLCJzb21lIiwiaGFzU2FtZUNvbnRhaW5lciIsImlzU2FtZUNvbnRhaW5lciIsImlzQWZ0ZXJBY3RpdmUiLCJpc0FmdGVyIiwicmVjdENvb3JkaW5hdGVzIiwidXNlRHJhZ2dhYmxlU29ydGFibGUiLCJjdXJzb3IiLCJEcmFnZ2FibGVTb3J0YWJsZUl0ZW0iLCJjbG9zZXN0Q2VudGVyIiwiRG5kQ29udGV4dCIsIktleWJvYXJkU2Vuc29yIiwiTW91c2VTZW5zb3IiLCJUb3VjaFNlbnNvciIsInVzZVNlbnNvciIsInVzZVNlbnNvcnMiLCJEcmFnZ2FibGVTb3J0YWJsZSIsIm9uRHJhZ0VuZCIsIm9uRHJhZ1N0YXJ0IiwiZG5kQ29udGV4dElEIiwic29ydGFibGVDb250ZXh0SUQiLCJhY3RpdmF0aW9uQ29uc3RyYWludCIsImRpc3RhbmNlIiwidG9sZXJhbmNlIiwiY29vcmRpbmF0ZUdldHRlciIsInNlbnNvcnMiLCJzdG9wUHJvcGFnYXRpb24iLCJtb3ZlRnJvbUluZGV4IiwiX2lkIiwibW92ZVRvSW5kZXgiLCJfaWRfMCIsImhhbmRsZURyYWdFbmQiLCJldmVudF8wIiwiYWN0aXZlXzAiLCJoYW5kbGVEcmFnU3RhcnQiLCJjb2xsaXNpb25EZXRlY3Rpb24iLCJjb3VudCIsImkxOG4iLCJ3aXRoTWVzc2FnZSIsImxlc3NUaGFuM0NoYXJzIiwiRmllbGREZXNjcmlwdGlvbiIsIm1hcmdpblBsYWNlbWVudCIsIkZpZWxkRXJyb3IiLCJzaG93RXJyb3JGcm9tUHJvcHMiLCJzaG93RXJyb3IiLCJoYXNTdWJtaXR0ZWQiLCJtZXNzYWdlRnJvbVByb3BzIiwiZXJyb3JNZXNzYWdlIiwic2hvd01lc3NhZ2UiLCJiYjAiLCJFZGl0RGVwdGhDb250ZXh0IiwiRWRpdERlcHRoUHJvdmlkZXIiLCJkZXB0aCIsInVzZUVkaXREZXB0aCIsInVzZVNlYXJjaFBhcmFtcyIsImZvcm1hdEFkbWluVVJMIiwiZmluZExvY2FsZUZyb21Db2RlIiwibG9jYWxpemF0aW9uQ29uZmlnIiwibG9jYWxlIiwibG9jYWxlcyIsImZpbmQiLCJfZXh0ZW5kcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiX3NldFByb3RvdHlwZU9mIiwiX2luaGVyaXRzTG9vc2UiLCJvIiwiaGFzQ2xhc3MiLCJhZGRDbGFzcyIsInJlcGxhY2VDbGFzc05hbWUiLCJvcmlnQ2xhc3MiLCJjbGFzc1RvUmVtb3ZlIiwicmVtb3ZlQ2xhc3MiLCJjb25maWdfZGVmYXVsdCIsIlRyYW5zaXRpb25Hcm91cENvbnRleHRfZGVmYXVsdCIsImZvcmNlUmVmbG93IiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsInBhcmVudEdyb3VwIiwiYXBwZWFyIiwiaW5pdGlhbFN0YXR1cyIsInByZXZTdGF0ZSIsIm5leHRJbiIsIl9wcm90byIsInByZXZQcm9wcyIsIm5leHRTdGF0dXMiLCJzdGF0dXMiLCJleGl0IiwiZW50ZXIiLCJtb3VudGluZyIsIl90aGlzMiIsImFwcGVhcmluZyIsIm1heWJlTm9kZSIsIm1heWJlQXBwZWFyaW5nIiwidGltZW91dHMiLCJlbnRlclRpbWVvdXQiLCJfdGhpczMiLCJuZXh0U3RhdGUiLCJfdGhpczQiLCJoYW5kbGVyIiwiZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciIsIl9yZWYzIiwibWF5YmVOZXh0Q2FsbGJhY2siLCJfdGhpcyRwcm9wcyIsIl9pbiIsIl9tb3VudE9uRW50ZXIiLCJfdW5tb3VudE9uRXhpdCIsIl9hcHBlYXIiLCJfZW50ZXIiLCJfZXhpdCIsIl90aW1lb3V0IiwiX2FkZEVuZExpc3RlbmVyIiwiX29uRW50ZXIiLCJfb25FbnRlcmluZyIsIl9vbkVudGVyZWQiLCJfb25FeGl0IiwiX29uRXhpdGluZyIsIl9vbkV4aXRlZCIsIl9ub2RlUmVmIiwiY2hpbGRQcm9wcyIsIm5vb3AiLCJUcmFuc2l0aW9uX2RlZmF1bHQiLCJfYWRkQ2xhc3MiLCJDU1NUcmFuc2l0aW9uIiwiX2xlbiIsIl9rZXkiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsIl90aGlzJHJlc29sdmVBcmd1bWVudDQiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQ1IiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NiIsImlzU3RyaW5nQ2xhc3NOYW1lcyIsImJhc2VDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkb25lQ2xhc3NOYW1lIiwicGhhc2UiLCJfdGhpcyRnZXRDbGFzc05hbWVzIiwiX3RoaXMkYXBwbGllZENsYXNzZXMkIiwiQ1NTVHJhbnNpdGlvbl9kZWZhdWx0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIk1vZGFsQ29udGV4dCIsInVzZU1vZGFsIiwiZ2VuZXJhdGVUcmFuc2l0aW9uQ2xhc3NlcyIsImFjdGl2ZUZvY3VzVHJhcHMiLCJhY3RpdmF0ZVRyYXAiLCJ0cmFwU3RhY2siLCJ0cmFwIiwiYWN0aXZlVHJhcCIsInBhdXNlIiwidHJhcEluZGV4IiwiZGVhY3RpdmF0ZVRyYXAiLCJ1bnBhdXNlIiwiaXNTZWxlY3RhYmxlSW5wdXQiLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJzZWxlY3QiLCJpc0VzY2FwZUV2ZW50Iiwia2V5Q29kZSIsImlzVGFiRXZlbnQiLCJpc0tleUZvcndhcmQiLCJpc0tleUJhY2t3YXJkIiwiYXJyIiwiaWR4IiwidmFsdWVPckhhbmRsZXIiLCJhcmd1bWVudHMiLCJwYXJhbXMiLCJhcHBseSIsImdldEFjdHVhbFRhcmdldCIsInNoYWRvd1Jvb3QiLCJjb21wb3NlZFBhdGgiLCJpbnRlcm5hbFRyYXBTdGFjayIsImNyZWF0ZUZvY3VzVHJhcCIsImVsZW1lbnRzIiwidXNlck9wdGlvbnMiLCJkb2MiLCJjb25maWciLCJfb2JqZWN0U3ByZWFkIiwicmV0dXJuRm9jdXNPbkRlYWN0aXZhdGUiLCJlc2NhcGVEZWFjdGl2YXRlcyIsImRlbGF5SW5pdGlhbEZvY3VzIiwiY29udGFpbmVycyIsImNvbnRhaW5lckdyb3VwcyIsInRhYmJhYmxlR3JvdXBzIiwibm9kZUZvY3VzZWRCZWZvcmVBY3RpdmF0aW9uIiwibW9zdFJlY2VudGx5Rm9jdXNlZE5vZGUiLCJwYXVzZWQiLCJkZWxheUluaXRpYWxGb2N1c1RpbWVyIiwicmVjZW50TmF2RXZlbnQiLCJnZXRPcHRpb24iLCJjb25maWdPdmVycmlkZU9wdGlvbnMiLCJvcHRpb25OYW1lIiwiY29uZmlnT3B0aW9uTmFtZSIsImZpbmRDb250YWluZXJJbmRleCIsImNvbnRhaW5lciIsInRhYmJhYmxlTm9kZXMiLCJnZXROb2RlRm9yT3B0aW9uIiwib3B0aW9uVmFsdWUiLCJfbGVuMiIsIl9rZXkyIiwiRXJyb3IiLCJjb25jYXQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0SW5pdGlhbEZvY3VzTm9kZSIsImlzRm9jdXNhYmxlIiwidGFiYmFibGVPcHRpb25zIiwiZmlyc3RUYWJiYWJsZUdyb3VwIiwiZmlyc3RUYWJiYWJsZU5vZGUiLCJ1cGRhdGVUYWJiYWJsZU5vZGVzIiwidGFiYmFibGUiLCJmb2N1c2FibGVOb2RlcyIsImxhc3RUYWJiYWJsZU5vZGUiLCJmaXJzdERvbVRhYmJhYmxlTm9kZSIsImlzVGFiYmFibGUiLCJsYXN0RG9tVGFiYmFibGVOb2RlIiwicmV2ZXJzZSIsInBvc1RhYkluZGV4ZXNGb3VuZCIsImdldFRhYkluZGV4IiwibmV4dFRhYmJhYmxlTm9kZSIsImZvcndhcmQiLCJub2RlSWR4IiwiZ3JvdXAiLCJnZXRBY3RpdmVFbGVtZW50IiwidHJ5Rm9jdXMiLCJmb2N1cyIsInByZXZlbnRTY3JvbGwiLCJnZXRSZXR1cm5Gb2N1c05vZGUiLCJwcmV2aW91c0FjdGl2ZUVsZW1lbnQiLCJmaW5kTmV4dE5hdk5vZGUiLCJfcmVmMiRpc0JhY2t3YXJkIiwiaXNCYWNrd2FyZCIsImRlc3RpbmF0aW9uTm9kZSIsImNvbnRhaW5lckluZGV4IiwiY29udGFpbmVyR3JvdXAiLCJzdGFydE9mR3JvdXBJbmRleCIsImRlc3RpbmF0aW9uR3JvdXBJbmRleCIsImRlc3RpbmF0aW9uR3JvdXAiLCJsYXN0T2ZHcm91cEluZGV4IiwiX3JlZjQiLCJjaGVja1BvaW50ZXJEb3duIiwiY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXMiLCJkZWFjdGl2YXRlIiwicmV0dXJuRm9jdXMiLCJhbGxvd091dHNpZGVDbGljayIsImNoZWNrRm9jdXNJbiIsInRhcmdldENvbnRhaW5lZCIsIkRvY3VtZW50Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwibmV4dE5vZGUiLCJuYXZBY3Jvc3NDb250YWluZXJzIiwibXJ1Q29udGFpbmVySWR4IiwibXJ1VGFiSWR4IiwiY2hlY2tLZXlOYXYiLCJjaGVja0tleSIsImNoZWNrQ2xpY2siLCJhZGRMaXN0ZW5lcnMiLCJwYXNzaXZlIiwicmVtb3ZlTGlzdGVuZXJzIiwiY2hlY2tEb21SZW1vdmFsIiwibXV0YXRpb25zIiwiaXNGb2N1c2VkTm9kZVJlbW92ZWQiLCJtdXRhdGlvbiIsInJlbW92ZWROb2RlcyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwidXBkYXRlT2JzZXJ2ZWROb2RlcyIsInN1YnRyZWUiLCJjaGlsZExpc3QiLCJhY3RpdmF0ZSIsImFjdGl2YXRlT3B0aW9ucyIsIm9uQWN0aXZhdGUiLCJvblBvc3RBY3RpdmF0ZSIsImNoZWNrQ2FuRm9jdXNUcmFwIiwiZmluaXNoQWN0aXZhdGlvbiIsInRoZW4iLCJkZWFjdGl2YXRlT3B0aW9ucyIsIm9uRGVhY3RpdmF0ZSIsIm9uUG9zdERlYWN0aXZhdGUiLCJjaGVja0NhblJldHVybkZvY3VzIiwiZmluaXNoRGVhY3RpdmF0aW9uIiwicGF1c2VPcHRpb25zIiwib25QYXVzZSIsIm9uUG9zdFBhdXNlIiwidW5wYXVzZU9wdGlvbnMiLCJvblVucGF1c2UiLCJvblBvc3RVbnBhdXNlIiwidXBkYXRlQ29udGFpbmVyRWxlbWVudHMiLCJjb250YWluZXJFbGVtZW50cyIsImVsZW1lbnRzQXNBcnJheSIsIml0ZW1CYXNlQ2xhc3MiLCJhc01vZGFsIiwiTW9kYWxDb21wb25lbnQiLCJzbHVnRnJvbUFyZyIsIm1vZGFsIiwibW9kYWxSZWYiLCJsYXlUcmFwIiwic2V0TGF5VHJhcCIsInRyYXBIYXNCZWVuTGF5ZWQiLCJzZXRUcmFwIiwibW9kYWxTdGF0ZSIsImNsYXNzUHJlZml4RnJvbUNvbnRleHQiLCJjb250YWluZXJSZWYiLCJ0cmFuc1RpbWUiLCJzZXRDbG9zZU9uQmx1ciIsInNldEJvZHlTY3JvbGxMb2NrIiwib3Blbk1vZGFsIiwiVGFnIiwic2x1Z0Zyb21Qcm9wIiwiY2xvc2VPbkJsdXIiLCJsb2NrQm9keVNjcm9sbCIsImNsYXNzUHJlZml4RnJvbVByb3BzIiwib25FbnRlciIsIm9uRW50ZXJpbmciLCJvbkVudGVyZWQiLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJvbkV4aXRlZCIsIm9wZW5PbkluaXQiLCJ0cmFwRm9jdXMiLCJmb2N1c1RyYXBPcHRpb25zIiwiX19yZXN0IiwiY2xhc3NQcmVmaXhUb1VzZSIsImlzT3BlbiIsImN1cnJlbnRNb2RhbCIsIm5ld1RyYXAiLCJ0aW1lZE9wZW4iLCJzZXRUaW1lZE9wZW4iLCJtZXJnZWRDbGFzc2VzIiwibWVyZ2VkQXR0cmlidXRlcyIsIl9Nb2RhbCIsIk1vZGFsIiwiY29udGFpbmVyQmFzZUNsYXNzIiwiTW9kYWxDb250YWluZXIiLCJvbmVNb2RhbElzT3BlbiIsImNsYXNzUHJlZml4Iiwic2V0Q29udGFpbmVyUmVmIiwiY2xvc2VBbGxNb2RhbHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIyIiwiaGFzUGFzc2l2ZUV2ZW50cyIsInBhc3NpdmVUZXN0T3B0aW9ucyIsImlzSW9zRGV2aWNlIiwibG9ja3MiLCJkb2N1bWVudExpc3RlbmVyQWRkZWQiLCJpbml0aWFsQ2xpZW50WSIsInByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZyIsInByZXZpb3VzQm9keVBvc2l0aW9uIiwicHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0IiwiYWxsb3dUb3VjaE1vdmUiLCJsb2NrIiwicmF3RXZlbnQiLCJzZXRPdmVyZmxvd0hpZGRlbiIsIl9yZXNlcnZlU2Nyb2xsQmFyR2FwIiwic2Nyb2xsQmFyR2FwIiwiY29tcHV0ZWRCb2R5UGFkZGluZ1JpZ2h0IiwicmVzdG9yZU92ZXJmbG93U2V0dGluZyIsInNldFBvc2l0aW9uRml4ZWQiLCJfd2luZG93IiwiYm90dG9tQmFySGVpZ2h0IiwicmVzdG9yZVBvc2l0aW9uU2V0dGluZyIsImlzVGFyZ2V0RWxlbWVudFRvdGFsbHlTY3JvbGxlZCIsInRhcmdldEVsZW1lbnQiLCJoYW5kbGVTY3JvbGwiLCJkaXNhYmxlQm9keVNjcm9sbCIsImVuYWJsZUJvZHlTY3JvbGwiLCJnZW5lcmF0ZUNTUyIsInpJbmRleCIsInByZWZpeFRvVXNlIiwicmVkdWNlciIsIm5ld1N0YXRlIiwicGF5bG9hZCIsImlzQ3VycmVudGx5T3BlbiIsImxhdGVzdE1vZGFsIiwiYWNjIiwiZ2V0U2VhcmNoUXVlcnkiLCJnZXRNb2RhbFBhcmFtQXJyYXkiLCJzZWFyY2hRdWVyeSIsIm1vZGFsUGFyYW0iLCJNb2RhbFByb3ZpZGVyIiwibWluaWZ5Q1NTIiwic2hvdWxkR2VuZXJhdGVDU1MiLCJoYW5kbGVQYXJhbUNoYW5nZSIsImRpc3BhdGNoTW9kYWxTdGF0ZSIsIm9uZUlzT3BlbiIsInNldE9uZUlzT3BlbiIsImJvZHlTY3JvbGxJc0xvY2tlZCIsInNldEJvZHlTY3JvbGxJc0xvY2tlZCIsImNzc1N0cmluZyIsInNldENTU1N0cmluZyIsImVzY0lzQm91bmQiLCJiaW5kRXNjIiwibmV3U3RyaW5nIiwib3Blbk1vZGFscyIsInF1ZXJ5V2l0aE1vZGFsIiwibmV3VVJMIiwiaXNPbmVPcGVuIiwic2hvdWxkTG9jayIsImV4Y2x1ZGluZ1JlZiIsImNsb3NlTW9kYWwiLCJ0b2dnbGVNb2RhbCIsImlzTW9kYWxPcGVuIiwiaW5oZXJpdGVkUHJvcHMiLCJ1c2VQYXRobmFtZSIsInFzIiwibmVnYXRpdmVMZWZ0IiwibmVnYXRpdmVSaWdodCIsInNob3VsZFBhZExlZnQiLCJzaG91bGRQYWRSaWdodCIsInVzZURyYXdlclNsdWciLCJ1dWlkIiwiZWRpdERlcHRoIiwiZm9ybWF0RHJhd2VyU2x1ZyIsImRyYXdlclpCYXNlIiwiRHJhd2VyVG9nZ2xlciIsIkRyYXdlciIsImd1dHRlciIsIkhlYWRlciIsImhvdmVyVGl0bGUiLCJ1c2VEcmF3ZXJEZXB0aCIsImRyYXdlckRlcHRoIiwic2V0QW5pbWF0ZUluIiwiYW5pbWF0ZUluIiwidDkiLCJ0OCIsInQxMCIsIkRyYXdlckRlcHRoUHJvdmlkZXIiLCJHdXR0ZXIiLCJYSWNvbiIsIkRyYXdlckRlcHRoQ29udGV4dCIsInBhcmVudERlcHRoIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJib2R5IiwiY2FuY2VsTGFiZWwiLCJjb25maXJtaW5nTGFiZWwiLCJjb25maXJtTGFiZWwiLCJoZWFkaW5nIiwibW9kYWxTbHVnIiwib25DYW5jZWxGcm9tUHJvcHMiLCJvbkNhbmNlbCIsIm9uQ29uZmlybSIsImNvbmZpcm1pbmciLCJvbkNvbmZpcm1Gcm9tUHJvcHMiLCJzZXRDb25maXJtaW5nIiwic3RheUxvZ2dlZEluTW9kYWxTbHVnIiwiU3RheUxvZ2dlZEluTW9kYWwiLCJyZWZyZXNoQ29va2llIiwidXNlQXV0aCIsInVzZUNvbmZpZyIsImFkbWluIiwicm91dGVzIiwibG9nb3V0IiwibG9nb3V0Um91dGUiLCJhZG1pblJvdXRlIiwicmVxdWVzdHMiLCJkZWxldGUiLCJoZWFkZXJzIiwiZm9ybWF0dGVkT3B0aW9ucyIsImNyZWRlbnRpYWxzIiwibWV0aG9kIiwiZmV0Y2giLCJhZGRRdWVyeVByZWZpeCIsInBhdGNoIiwicG9zdCIsInB1dCIsIm1heFRpbWVvdXRNcyIsIkF1dGhQcm92aWRlciIsInBlcm1pc3Npb25zIiwiaW5pdGlhbFBlcm1pc3Npb25zIiwidXNlciIsImluaXRpYWxVc2VyIiwiYXV0b0xvZ2luIiwiYXV0b1JlZnJlc2giLCJpbmFjdGl2aXR5IiwibG9nb3V0SW5hY3Rpdml0eVJvdXRlIiwidXNlclNsdWciLCJhcGkiLCJhcGlSb3V0ZSIsInNldFVzZXJJbk1lbW9yeSIsInRva2VuSW5NZW1vcnkiLCJzZXRUb2tlbkluTWVtb3J5IiwidG9rZW5FeHBpcmF0aW9uTXMiLCJzZXRUb2tlbkV4cGlyYXRpb25NcyIsInNldFBlcm1pc3Npb25zIiwiZm9yY2VMb2dvdXRCdWZmZXJNcyIsInNldEZvcmNlTG9nb3V0QnVmZmVyTXMiLCJmZXRjaGVkVXNlck9uTW91bnQiLCJzZXRGZXRjaGVkVXNlck9uTW91bnQiLCJyZWZyZXNoVG9rZW5UaW1lb3V0UmVmIiwicmVtaW5kZXJUaW1lb3V0UmVmIiwiZm9yY2VMb2dPdXRUaW1lb3V0UmVmIiwicmVkaXJlY3RUb0luYWN0aXZpdHlSb3V0ZSIsImJhc2VBZG1pblJvdXRlIiwibG9jYXRpb24iLCJyZXZva2VUb2tlbkFuZEV4cGlyZSIsImhhbmRsZVJlbWluZGVyVGltZW91dCIsInJlZnJlc2hDb29raWVFdmVudCIsInNldE5ld1VzZXIiLCJ1c2VyUmVzcG9uc2UiLCJ0b2tlbiIsInJlZnJlc2hlZFRva2VuIiwiZXhwIiwiZXhwaXJlc0luTXMiLCJtYXgiLCJtaW4iLCJEYXRlIiwibm93IiwibmV4dEZvcmNlTG9nb3V0QnVmZmVyTXMiLCJmb3JjZVJlZnJlc2giLCJyZXF1ZXN0IiwibGFuZ3VhZ2UiLCJqc29uIiwicmVmcmVzaENvb2tpZUFzeW5jIiwic2tpcFNldFVzZXIiLCJsb2dPdXQiLCJjb2xsZWN0aW9uIiwicmVmcmVzaFBlcm1pc3Npb25zIiwiZmV0Y2hGdWxsVXNlciIsImZldGNoRnVsbFVzZXJFdmVudCIsImZldGNoVXNlck9uTW91bnQiLCJwcmVmaWxsT25seSIsInNldFVzZXIiLCJMb2NhbGVDb250ZXh0IiwiTG9jYWxlTG9hZGluZ0NvbnRleHQiLCJsb2NhbGVJc0xvYWRpbmciLCJzZXRMb2NhbGVJc0xvYWRpbmciLCJmZXRjaFByZWZlcmVuY2VzIiwiYmFzZVVSTCIsInJlcyIsIkxvY2FsZVByb3ZpZGVyIiwiaW5pdGlhbExvY2FsZUZyb21QcmVmcyIsImxvY2FsaXphdGlvbiIsImRlZmF1bHRMb2NhbGUiLCJsb2NhbGVGcm9tUGFyYW1zIiwic2V0TG9jYWxlIiwicHJldkxvY2FsZSIsImZldGNoVVJMIiwibG9jYWxlVG9Vc2UiLCJfdGVtcCIsIm5ld0xvY2FsZSIsInQxMSIsInQxMiIsInQxMyIsInVzZUxvY2FsZUxvYWRpbmciLCJ1c2VMb2NhbGUiLCJnZW5lcmF0ZUZpZWxkSUQiLCJGaWVsZExhYmVsIiwiYXMiLCJoaWRlTG9jYWxlIiwiaHRtbEZvciIsImxvY2FsaXplZCIsInJlcXVpcmVkIiwiRWxlbWVudEZyb21Qcm9wcyIsImh0bWxGb3JGcm9tUHJvcHMiLCJsb2NhbExhYmVsIiwiRWxlbWVudCIsImV4dHJhY3RSb3dzQW5kQ29sbGFwc2VkSURzIiwiY29sbGFwc2VkIiwicm93SUQiLCJjb2xsYXBzZWRJRHMiLCJ1cGRhdGVkUm93cyIsInRvZ2dsZUFsbFJvd3MiLCJydGxMYW5ndWFnZXMiLCJ1c2VUaHJvdHRsZWRFZmZlY3QiLCJkZXBzIiwibGFzdFJhbiIsIm9mZnNldEZvcm1hdENhY2hlIiwib2Zmc2V0Q2FjaGUiLCJ0ek9mZnNldCIsInRpbWVab25lIiwiZGF0ZSIsIm9mZnNldFN0ciIsImNhbGNPZmZzZXQiLCJjYXB0dXJlcyIsIm9mZnNldFJlIiwiY2FjaGVTdHIiLCJ2YWx1ZXMiLCJob3VycyIsIm1pbnV0ZXMiLCJUWkRhdGVNaW5pIiwiX1RaRGF0ZU1pbmkiLCJhZGp1c3RUb1N5c3RlbVRaIiwic3luY1RvSW50ZXJuYWwiLCJ0eiIsInJlIiwidXRjTWV0aG9kIiwic3luY0Zyb21JbnRlcm5hbCIsInByZXZIb3VyIiwic3lzdGVtT2Zmc2V0IiwicHJldkhvdXJTeXN0ZW1PZmZzZXQiLCJzeXN0ZW1EU1RDaGFuZ2UiLCJkc3RTaGlmdCIsIm9mZnNldERpZmYiLCJwb3N0T2Zmc2V0IiwicG9zdE9mZnNldERpZmYiLCJvZmZzZXRDaGFuZ2VkIiwicG9zdERpZmYiLCJuZXdPZmZzZXQiLCJvZmZzZXRDaGFuZ2UiLCJtYXhUaW1lIiwibWluVGltZSIsIm1pbGxpc2Vjb25kc0luV2VlayIsIm1pbGxpc2Vjb25kc0luRGF5IiwibWludXRlc0luTW9udGgiLCJtaW51dGVzSW5EYXkiLCJzZWNvbmRzSW5Ib3VyIiwic2Vjb25kc0luRGF5Iiwic2Vjb25kc0luV2VlayIsInNlY29uZHNJblllYXIiLCJzZWNvbmRzSW5Nb250aCIsInNlY29uZHNJblF1YXJ0ZXIiLCJjb25zdHJ1Y3RGcm9tU3ltYm9sIiwiY29uc3RydWN0RnJvbSIsInRvRGF0ZSIsImFyZ3VtZW50IiwiZGVmYXVsdE9wdGlvbnMiLCJnZXREZWZhdWx0T3B0aW9ucyIsInN0YXJ0T2ZXZWVrIiwid2Vla1N0YXJ0c09uIiwiX2RhdGUiLCJkYXkiLCJzdGFydE9mSVNPV2VlayIsImdldElTT1dlZWtZZWFyIiwieWVhciIsImZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIiLCJzdGFydE9mTmV4dFllYXIiLCJmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyIiwic3RhcnRPZlRoaXNZZWFyIiwiZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyIsInV0Y0RhdGUiLCJub3JtYWxpemVEYXRlcyIsImRhdGVzIiwibm9ybWFsaXplIiwic3RhcnRPZkRheSIsImRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyIsImxhdGVyRGF0ZSIsImVhcmxpZXJEYXRlIiwibGF0ZXJEYXRlXyIsImVhcmxpZXJEYXRlXyIsImxhdGVyU3RhcnRPZkRheSIsImVhcmxpZXJTdGFydE9mRGF5IiwibGF0ZXJUaW1lc3RhbXAiLCJlYXJsaWVyVGltZXN0YW1wIiwic3RhcnRPZklTT1dlZWtZZWFyIiwiZm91cnRoT2ZKYW51YXJ5IiwiY29tcGFyZUFzYyIsImRhdGVMZWZ0IiwiZGF0ZVJpZ2h0IiwiY29uc3RydWN0Tm93IiwiaXNTYW1lRGF5IiwiZGF0ZUxlZnRfIiwiZGF0ZVJpZ2h0XyIsImRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzIiwieWVhcnNEaWZmIiwibW9udGhzRGlmZiIsImdldFJvdW5kaW5nTWV0aG9kIiwibnVtYmVyIiwiZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzIiwiZW5kT2ZEYXkiLCJlbmRPZk1vbnRoIiwibW9udGgiLCJpc0xhc3REYXlPZk1vbnRoIiwiZGlmZmVyZW5jZUluTW9udGhzIiwid29ya2luZ0xhdGVyRGF0ZSIsInNpZ24iLCJkaWZmZXJlbmNlIiwiaXNMYXN0TW9udGhOb3RGdWxsIiwiZGlmZmVyZW5jZUluU2Vjb25kcyIsInN0YXJ0T2ZZZWFyIiwiZGF0ZV8iLCJlbmRPZlRvZGF5IiwiZ2V0RGF5T2ZZZWFyIiwiZ2V0SVNPV2VlayIsImdldFdlZWtZZWFyIiwiZmlyc3RXZWVrQ29udGFpbnNEYXRlIiwiZmlyc3RXZWVrT2ZOZXh0WWVhciIsImZpcnN0V2Vla09mVGhpc1llYXIiLCJzdGFydE9mV2Vla1llYXIiLCJmaXJzdFdlZWsiLCJnZXRXZWVrIiwiYWRkTGVhZGluZ1plcm9zIiwidGFyZ2V0TGVuZ3RoIiwib3V0cHV0IiwibGlnaHRGb3JtYXR0ZXJzIiwic2lnbmVkWWVhciIsImRheVBlcmlvZEVudW1WYWx1ZSIsIm51bWJlck9mRGlnaXRzIiwibWlsbGlzZWNvbmRzIiwiZnJhY3Rpb25hbFNlY29uZHMiLCJkYXlQZXJpb2RFbnVtIiwiZm9ybWF0dGVycyIsImxvY2FsaXplIiwiZXJhIiwic2lnbmVkV2Vla1llYXIiLCJ3ZWVrWWVhciIsInR3b0RpZ2l0WWVhciIsImlzb1dlZWtZZWFyIiwicXVhcnRlciIsIndlZWsiLCJpc29XZWVrIiwiZGF5T2ZZZWFyIiwiZGF5T2ZXZWVrIiwibG9jYWxEYXlPZldlZWsiLCJpc29EYXlPZldlZWsiLCJfbG9jYWxpemUiLCJ0aW1lem9uZU9mZnNldCIsImZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyIsImZvcm1hdFRpbWV6b25lIiwiZm9ybWF0VGltZXpvbmVTaG9ydCIsImRlbGltaXRlciIsImFic09mZnNldCIsImRhdGVMb25nRm9ybWF0dGVyIiwicGF0dGVybiIsImZvcm1hdExvbmciLCJ0aW1lTG9uZ0Zvcm1hdHRlciIsImRhdGVUaW1lTG9uZ0Zvcm1hdHRlciIsIm1hdGNoUmVzdWx0IiwiZGF0ZVBhdHRlcm4iLCJ0aW1lUGF0dGVybiIsImRhdGVUaW1lRm9ybWF0IiwibG9uZ0Zvcm1hdHRlcnMiLCJkYXlPZlllYXJUb2tlblJFIiwid2Vla1llYXJUb2tlblJFIiwidGhyb3dUb2tlbnMiLCJpc1Byb3RlY3RlZERheU9mWWVhclRva2VuIiwiaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuIiwid2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvciIsImZvcm1hdCIsImlucHV0IiwiX21lc3NhZ2UiLCJzdWJqZWN0IiwiZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCIsImxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwIiwiZXNjYXBlZFN0cmluZ1JlZ0V4cCIsImRvdWJsZVF1b3RlUmVnRXhwIiwidW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAiLCJmb3JtYXRTdHIiLCJlblVTIiwib3JpZ2luYWxEYXRlIiwicGFydHMiLCJzdWJzdHJpbmciLCJmaXJzdENoYXJhY3RlciIsImxvbmdGb3JtYXR0ZXIiLCJjbGVhbkVzY2FwZWRTdHJpbmciLCJmb3JtYXR0ZXJPcHRpb25zIiwicGFydCIsImZvcm1hdHRlciIsIm1hdGNoZWQiLCJmb3JtYXREaXN0YW5jZSIsIm1pbnV0ZXNJbkFsbW9zdFR3b0RheXMiLCJjb21wYXJpc29uIiwibG9jYWxpemVPcHRpb25zIiwic2Vjb25kcyIsIm9mZnNldEluU2Vjb25kcyIsIm1vbnRocyIsImRheXMiLCJuZWFyZXN0TW9udGgiLCJtb250aHNTaW5jZVN0YXJ0T2ZZZWFyIiwieWVhcnMiLCJmb3JtYXREaXN0YW5jZVRvTm93IiwidHJhbnNwb3NlIiwiY29uc3RydWN0b3IiLCJpc0NvbnN0cnVjdG9yIiwiaXNUb2RheSIsImZvcm1hdERhdGUiLCJ0aW1lem9uZSIsInRoZURhdGUiLCJUWkRhdGUiLCJEYXRlV2l0aE9yaWdpbmFsVHoiLCJtb2RpZmllZERhdGUiLCJ3aXRoVGltZVpvbmUiLCJkYXRlV2l0aFRpbWV6b25lIiwiZGF0ZUZOUyIsImZvcm1hdFRpbWVUb05vdyIsImlzU2VyaWFsaXplZExleGljYWxFZGl0b3IiLCJmb3JtYXRMZXhpY2FsRG9jVGl0bGUiLCJlZGl0b3JTdGF0ZSIsInRleHRDb250ZW50IiwidGV4dCIsImZvcm1hdFJlbGF0aW9uc2hpcFRpdGxlIiwiZm9ybWF0RG9jVGl0bGUiLCJjb2xsZWN0aW9uQ29uZmlnIiwiZGF0ZUZvcm1hdCIsImRhdGVGb3JtYXRGcm9tQ29uZmlnIiwiZmFsbGJhY2siLCJnbG9iYWxDb25maWciLCJ1c2VBc1RpdGxlIiwiZmllbGRDb25maWciLCJpc1JlbGF0aW9uc2hpcCIsImRpc3BsYXlGb3JtYXQiLCJEb2N1bWVudFRpdGxlQ29udGV4dCIsInVzZURvY3VtZW50VGl0bGUiLCJEb2N1bWVudFRpdGxlUHJvdmlkZXIiLCJjb2xsZWN0aW9uU2x1ZyIsImRvY0NvbmZpZyIsImdsb2JhbFNsdWciLCJpbml0aWFsRGF0YSIsInVzZURvY3VtZW50SW5mbyIsInNldERvY3VtZW50VGl0bGUiLCJkZXF1YWwiLCJkZWVwTWVyZ2VTaW1wbGUiLCJvYmoxIiwib2JqMiIsImhhc093blByb3BlcnR5IiwicmVxdWVzdE9wdGlvbnMiLCJQcmVmZXJlbmNlc1Byb3ZpZGVyIiwiY29udGV4dFJlZiIsInByZWZlcmVuY2VzUmVmIiwicGVuZGluZ1VwZGF0ZSIsImdldFByZWZlcmVuY2UiLCJwcmVmcyIsIlByb21pc2UiLCJzZXRQcmVmZXJlbmNlIiwibWVyZ2UiLCJuZXdWYWx1ZSIsImN1cnJlbnRQcmVmZXJlbmNlIiwidXBkYXRlUHJlZmVyZW5jZSIsInVzZVByZWZlcmVuY2VzIiwiZ2V0VXBsb2FkRWRpdHMiLCJyZXNldFVwbG9hZEVkaXRzIiwidXBkYXRlVXBsb2FkRWRpdHMiLCJ1cGxvYWRFZGl0cyIsIlVwbG9hZEVkaXRzUHJvdmlkZXIiLCJpbml0aWFsVXBsb2FkRWRpdHMiLCJzZXRVcGxvYWRFZGl0cyIsImVkaXRzIiwicHJldkVkaXRzIiwidXNlVXBsb2FkRWRpdHMiLCJoYXNTYXZlUGVybWlzc2lvbiIsImRvY1Blcm1pc3Npb25zIiwiaXNFZGl0aW5nIiwiY3JlYXRlIiwidXNlR2V0RG9jUGVybWlzc2lvbnMiLCJzZXREb2NQZXJtaXNzaW9ucyIsInNldEhhc1B1Ymxpc2hQZXJtaXNzaW9uIiwic2V0SGFzU2F2ZVBlcm1pc3Npb24iLCJpZFRvVXNlIiwibmV3SXNFZGl0aW5nIiwiZ2V0SXNFZGl0aW5nIiwiZG9jQWNjZXNzUGF0aCIsIl9zdGF0dXMiLCJwdWJsaXNoZWRBY2Nlc3NKU09OIiwiZ2V0SGFzU2F2ZVBlcm1pc3Npb24iLCJuZXdEb2NQZXJtaXNzaW9ucyIsImNvbGxlY3Rpb25zIiwiZ2xvYmFscyIsIkRvY3VtZW50SW5mbyIsImN1cnJlbnRFZGl0b3IiLCJjdXJyZW50RWRpdG9yRnJvbVByb3BzIiwiZG9jUGVybWlzc2lvbnNGcm9tUHJvcHMiLCJoYXNQdWJsaXNoZWREb2MiLCJoYXNQdWJsaXNoZWREb2NGcm9tUHJvcHMiLCJoYXNQdWJsaXNoUGVybWlzc2lvbiIsImhhc1B1Ymxpc2hQZXJtaXNzaW9uRnJvbVByb3BzIiwiaGFzU2F2ZVBlcm1pc3Npb25Gcm9tUHJvcHMiLCJpbml0aWFsU3RhdGUiLCJpc0xvY2tlZCIsImlzTG9ja2VkRnJvbVByb3BzIiwibGFzdFVwZGF0ZVRpbWUiLCJsYXN0VXBkYXRlVGltZUZyb21Qcm9wcyIsIm1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQiLCJtb3N0UmVjZW50VmVyc2lvbklzQXV0b3NhdmVkRnJvbVByb3BzIiwidW5wdWJsaXNoZWRWZXJzaW9uQ291bnQiLCJ1bnB1Ymxpc2hlZFZlcnNpb25Db3VudEZyb21Qcm9wcyIsInZlcnNpb25Db3VudCIsInZlcnNpb25Db3VudEZyb21Qcm9wcyIsInVzZUNvbnRyb2xsYWJsZVN0YXRlIiwiZ2V0RW50aXR5Q29uZmlnIiwiaGFzTG9ja2VkRG9jdW1lbnRzQ29sbGVjdGlvbiIsImFib3J0Q29udHJvbGxlclJlZiIsIkFib3J0Q29udHJvbGxlciIsInNldE1vc3RSZWNlbnRWZXJzaW9uSXNBdXRvc2F2ZWQiLCJzZXRWZXJzaW9uQ291bnQiLCJzZXRIYXNQdWJsaXNoZWREb2MiLCJzZXRVbnB1Ymxpc2hlZFZlcnNpb25Db3VudCIsImRvY3VtZW50SXNMb2NrZWQiLCJzZXREb2N1bWVudElzTG9ja2VkIiwic2V0Q3VycmVudEVkaXRvciIsInNldExhc3RVcGRhdGVUaW1lIiwic2V0RGF0YSIsInVwbG9hZFN0YXR1cyIsInNldFVwbG9hZFN0YXR1cyIsImRvY3VtZW50TG9ja1N0YXRlIiwiaGFzU2hvd25Mb2NrZWRNb2RhbCIsInVwZGF0ZVVwbG9hZFN0YXR1cyIsImlzSW5pdGlhbGl6aW5nIiwiYmFzZUFQSVBhdGgiLCJwbHVyYWxUeXBlIiwicHJlZmVyZW5jZXNLZXkiLCJ1bmxvY2tEb2N1bWVudCIsImRvY0lEIiwiaXNHbG9iYWwiLCJkb2NzIiwibG9ja0lEIiwiY29uc29sZSIsInVwZGF0ZURvY3VtZW50RWRpdG9yIiwidXNlckRhdGEiLCJyZWxhdGlvblRvIiwiZ2V0RG9jUGVybWlzc2lvbnMiLCJnZXREb2NQcmVmZXJlbmNlcyIsInNldERvY0ZpZWxkUHJlZmVyZW5jZXMiLCJmaWVsZFByZWZlcmVuY2VzIiwiYWxsUHJlZmVyZW5jZXMiLCJpbmNyZW1lbnRWZXJzaW9uQ291bnQiLCJuZXdDb3VudCIsInZlcnNpb25zIiwibWF4UGVyRG9jIiwicmUxIiwiYWJvcnQiLCJkb2NQYXRoIiwic2F2ZWREb2N1bWVudERhdGEiLCJ1cGRhdGVTYXZlZERvY3VtZW50RGF0YSIsIkRvY3VtZW50SW5mb1Byb3ZpZGVyIiwiT3BlcmF0aW9uQ29udGV4dCIsIk9wZXJhdGlvblByb3ZpZGVyIiwib3BlcmF0aW9uIiwidXNlT3BlcmF0aW9uIiwiRmllbGRQYXRoQ29udGV4dCIsInVzZUZpZWxkUGF0aCIsInVzZUZpZWxkSW5Gb3JtIiwicGF0aEZyb21PcHRpb25zIiwicG90ZW50aWFsbHlTdGFsZVBhdGgiLCJwYXRoRnJvbUNvbnRleHQiLCJzdWJtaXR0ZWQiLCJwcm9jZXNzaW5nIiwiaW5pdGlhbGl6aW5nIiwiZGlzcGF0Y2hGaWVsZCIsImdldERhdGEiLCJzZXRNb2RpZmllZCIsImRvY3VtZW50Rm9ybSIsImZpbHRlck9wdGlvbnMiLCJwcmV2VmFsaWQiLCJwcmV2RXJyb3JNZXNzYWdlIiwicGF0aFNlZ21lbnRzIiwiZGlzYWJsZU1vZGlmeWluZ0Zvcm0iLCJ2YWwiLCJzZXRWYWx1ZSIsImJsb2Nrc0ZpbHRlck9wdGlvbnMiLCJlcnJvclBhdGhzIiwic2VsZWN0RmlsdGVyT3B0aW9ucyIsImZvcm1Jbml0aWFsaXppbmciLCJmb3JtUHJvY2Vzc2luZyIsImZvcm1TdWJtaXR0ZWQiLCJ0MTQiLCJ2YWx1ZVRvVmFsaWRhdGUiLCJ2YWxpZF8wIiwiYmxvY2tEYXRhIiwicHJlZmVyZW5jZXMiLCJyZXEiLCJzaWJsaW5nRGF0YSIsInQxNSIsInQxNiIsIkZpZWxkQ29udGV4dCIsInVzZUZpZWxkIiwiZmllbGRDb250ZXh0IiwiaGFzRmllbGRDb250ZXh0IiwiY3VycmVudFBhdGgiLCJXYXRjaENvbmRpdGlvbiIsInBhc3Nlc0NvbmRpdGlvbiIsIndpdGhDb25kaXRpb24iLCJGaWVsZCIsIm1lcmdlRmllbGRTdHlsZXMiLCJmbGV4IiwiZmllbGRCYXNlQ2xhc3MiLCJpc0ZpZWxkUlRMIiwiZmllbGRMb2NhbGl6ZWQiLCJmaWVsZFJUTCIsImhhc011bHRpcGxlTG9jYWxlcyIsImlzQ3VycmVudExvY2FsZURlZmF1bHRMb2NhbGUiLCJydGwiLCJDaGVja0ljb24iLCJMaW5lSWNvbiIsImlucHV0QmFzZUNsYXNzIiwiQ2hlY2tib3hJbnB1dCIsImlkRnJvbVByb3BzIiwiQWZ0ZXJJbnB1dCIsIkJlZm9yZUlucHV0IiwiY2hlY2tlZCIsImlucHV0UmVmIiwiTGFiZWwiLCJvblRvZ2dsZSIsInBhcnRpYWxDaGVja2VkIiwicmVhZE9ubHkiLCJyZWFkT25seUZyb21Qcm9wcyIsImlzSHlkcmF0ZWQiLCJzZXRJc0h5ZHJhdGVkIiwiZmFsbGJhY2tJRCIsIm9uQ2hhbmdlIiwiQ2hlY2tib3hGaWVsZENvbXBvbmVudCIsImNoZWNrZWRGcm9tUHJvcHMiLCJvbkNoYW5nZUZyb21Qcm9wcyIsImlzUlRMIiwibWVtb2l6ZWRWYWxpZGF0ZSIsIkRlc2NyaXB0aW9uIiwicGF0aEZyb21Qcm9wcyIsInZhbHVlXzAiLCJmaWVsZElEIiwiQ2hlY2tib3hGaWVsZCIsIk51bGxpZnlMb2NhbGVGaWVsZCIsImZpZWxkVmFsdWUiLCJjdXJyZW50TG9jYWxlIiwic2V0Q2hlY2tlZCIsImRpc3BhdGNoRmllbGRzIiwidXNlRmFsbGJhY2siLCJoaWRlQ2hlY2tib3giLCJCYW5uZXIiLCJzY3JvbGxUb0lEIiwiZ2V0RWxlbWVudEJ5SWQiLCJib3VuZHMiLCJzY3JvbGxCeSIsImJlaGF2aW9yIiwiQXJyYXlBY3Rpb24iLCJhZGRSb3ciLCJjb3B5Um93IiwiZHVwbGljYXRlUm93IiwiaGFzTWF4Um93cyIsImlzU29ydGFibGUiLCJtb3ZlUm93IiwicGFzdGVSb3ciLCJyZW1vdmVSb3ciLCJyb3dDb3VudCIsIkRyYWdIYW5kbGVJY29uIiwidXNlUGF0Y2hBbmltYXRlSGVpZ2h0IiwiY29udGVudFJlZiIsIm9wZW4iLCJicm93c2VyU3VwcG9ydHNLZXl3b3JkQW5pbWF0aW9uIiwic3VwcG9ydHMiLCJoYXNJbml0aWFsaXplZCIsInByZXZpb3VzT3BlblN0YXRlIiwiaXNBbmltYXRpbmciLCJzZXRJc0FuaW1hdGluZyIsInJlc2l6ZU9ic2VydmVyUmVmIiwic2V0Q29udGFpbmVySGVpZ2h0IiwiaGFuZGxlVHJhbnNpdGlvbkVuZCIsImFuaW1hdGUiLCJzY3JvbGxIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvblRyYW5zaXRpb25FbmQiLCJSZXNpemVPYnNlcnZlciIsIkFuaW1hdGVIZWlnaHQiLCJzZXRPcGVuIiwicHJldklzT3BlbiIsImNoaWxkcmVuRGlzcGxheSIsInNldFBhcmVudE92ZXJmbG93Iiwic2V0Q2hpbGRyZW5EaXNwbGF5IiwicGFyZW50T3ZlcmZsb3ciLCJkaXNwbGF5VGltZXIiLCJvdmVyZmxvd1RpbWVyIiwibmV3SXNPcGVuIiwiaGFzQ2hhbmdlZCIsIm92ZXJmbG93IiwiaXNDb2xsYXBzZWQiLCJpc1dpdGhpbkNvbGxhcHNpYmxlIiwidG9nZ2xlIiwiQ29sbGFwc2libGVQcm92aWRlciIsInBhcmVudElzQ29sbGFwc2VkIiwidXNlQ29sbGFwc2libGUiLCJDb2xsYXBzaWJsZSIsImFjdGlvbnMiLCJBZnRlckNvbGxhcHNpYmxlIiwiY29sbGFwc2libGVTdHlsZSIsImRpc2FibGVIZWFkZXJUb2dnbGUiLCJkaXNhYmxlVG9nZ2xlSW5kaWNhdG9yIiwiZHJhZ0hhbmRsZVByb3BzIiwiaGVhZGVyIiwiaW5pdENvbGxhcHNlZCIsImNvbGxhcHNlZEZyb21Qcm9wcyIsImNvbGxhcHNlZExvY2FsIiwic2V0Q29sbGFwc2VkTG9jYWwiLCJ0b2dnbGVDb2xsYXBzaWJsZSIsImhvdmVyaW5nVG9nZ2xlIiwic2V0SG92ZXJpbmdUb2dnbGUiLCJmaWVsZElzSGlkZGVuT3JEaXNhYmxlZCIsImdldEZpZWxkUGF0aHMiLCJnZXRGaWVsZFBlcm1pc3Npb25zIiwiUmVuZGVySWZJblZpZXdwb3J0IiwiZm9yY2VSZW5kZXIiLCJoYXNSZW5kZXJlZCIsInNldEhhc1JlbmRlcmVkIiwiaW50ZXJzZWN0aW9uUmVmIiwiaXNBYm92ZVZpZXdwb3J0IiwiYm91bmRpbmdDbGllbnRSZWN0Iiwic2hvdWxkUmVuZGVyIiwiRHJhZ2dhYmxlUGlsbCIsIlN0YXRpY1BpbGwiLCJlbGVtZW50UHJvcHMiLCJhcmlhQ2hlY2tlZCIsImFyaWFDb250cm9scyIsInBpbGxTdHlsZSIsInJvdW5kZWQiLCJpc0J1dHRvbiIsInQxOCIsImFyaWFFeHBhbmRlZCIsInQxNyIsIlBpbGwiLCJ1c2VUaHJvdHRsZWRWYWx1ZSIsInRocm90dGxlZFZhbHVlIiwic2V0VGhyb3R0bGVkVmFsdWUiLCJUaHVtYm5haWxDYXJkIiwiYWxpZ25MYWJlbCIsImxhYmVsRnJvbVByb3BzIiwidGh1bWJuYWlsIiwiYnl0ZVRvSGV4IiwidW5zYWZlU3RyaW5naWZ5IiwiZ2V0UmFuZG9tVmFsdWVzIiwicm5kczgiLCJybmciLCJyYW5kb21VVUlEIiwibmF0aXZlX2RlZmF1bHQiLCJ2NCIsImJ1ZiIsInJuZHMiLCJ2NF9kZWZhdWx0IiwiRGVmYXVsdEJsb2NrSW1hZ2UiLCJwYXR0ZXJuSUQiLCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwiY2xpcFBhdGgiLCJyeCIsImN4IiwiY3kiLCJTZWFyY2hJY29uIiwiQmxvY2tTZWFyY2giLCJzZXRTZWFyY2hUZXJtIiwiaGFuZGxlQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJnZXRCbG9ja0xhYmVsIiwibGFiZWxzIiwic2luZ3VsYXIiLCJCbG9ja1NlbGVjdG9yIiwib25TZWxlY3QiLCJzZWFyY2hUZXJtRnJvbVByb3BzIiwic2VhcmNoVGVybSIsImJsb2NrR3JvdXBzIiwiZ3JvdXBzIiwiZmlsdGVyZWRCbG9ja3MiLCJoYXNPd24iLCJzZWFyY2hUZXJtVG9Vc2UiLCJfYmxvY2siLCJtYXRjaGluZ0Jsb2NrcyIsIm1hdGNoZWRCbG9ja3MiLCJibG9ja18wIiwiYmxvY2tMYWJlbCIsInNldEZpbHRlcmVkQmxvY2tzIiwiZ3JvdXBMYWJlbCIsImdyb3VwQmxvY2tzIiwiX2Jsb2NrXzAiLCJpbWFnZUFsdFRleHQiLCJpbWFnZVVSTCIsImJsb2NrTGFiZWxzIiwidGh1bWJuYWlsVVJMIiwiaW1hZ2VzIiwiYWx0IiwidGh1bWJuYWlsQWx0IiwiQmxvY2tzRHJhd2VyIiwiYWRkUm93SW5kZXgiLCJkcmF3ZXJTbHVnIiwic2VhcmNoVGVybU92ZXJyaWRlIiwic2V0U2VhcmNoVGVybU92ZXJyaWRlIiwiUm93QWN0aW9ucyIsImJsb2NrVHlwZSIsImluZGV4VG9BZGQiLCJzZXRJbmRleFRvQWRkIiwicm93QmxvY2tUeXBlIiwiU2VjdGlvblRpdGxlIiwiY3VzdG9tT25DaGFuZ2UiLCJjdXN0b21WYWx1ZSIsIkJsb2NrUm93IiwiZXJyb3JDb3VudCIsImlzTG9hZGluZ0Zyb21Qcm9wcyIsInBhcmVudFBhdGgiLCJzY2hlbWFQYXRoIiwic2V0Q29sbGFwc2UiLCJmaWVsZEhhc0Vycm9ycyIsInNob3dCbG9ja05hbWUiLCJkaXNhYmxlQmxvY2tOYW1lIiwiYmxvY2tQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zQmxvY2tTcGVjaWZpYyIsImhhc1JlYWRQZXJtaXNzaW9uIiwicmVhZCIsIm1pc3NpbmdDcmVhdGVPclVwZGF0ZSIsIlNoaW1tZXJFZmZlY3QiLCJfRnJhZ21lbnQiLCJwYWRTdGFydCIsIkVycm9yUGlsbCIsIlJlbmRlckZpZWxkcyIsIm1hcmdpbnMiLCJwYXJlbnRJbmRleFBhdGgiLCJwYXJlbnRTY2hlbWFQYXRoIiwiQmxvY2tzRmllbGRDb21wb25lbnQiLCJibG9ja1JlZmVyZW5jZXMiLCJsYWJlbHNGcm9tUHJvcHMiLCJtYXhSb3dzIiwibWluUm93c1Byb3AiLCJtaW5Sb3dzIiwic2NoZW1hUGF0aEZyb21Qcm9wcyIsImFkZEZpZWxkUm93IiwiZ2V0RmllbGRzIiwibW92ZUZpZWxkUm93IiwicmVtb3ZlRmllbGRSb3ciLCJyZXBsYWNlU3RhdGUiLCJwbHVyYWwiLCJlZGl0aW5nRGVmYXVsdExvY2FsZSIsImNsaWVudEJsb2NrcyIsImNsaWVudEJsb2Nrc0FmdGVyRmlsdGVyXzAiLCJjbGllbnRCbG9ja3NBZnRlckZpbHRlciIsInJlc29sdmVkQmxvY2tzIiwiYmxvY2tSZWZlcmVuY2UiLCJibG9ja1NsdWciLCJyb3dJbmRleF8wIiwicm93SW5kZXhfMSIsInRvZ2dsZUNvbGxhcHNlQWxsIiwiY29sbGFwc2VkSURzXzAiLCJ1cGRhdGVkUm93c18wIiwicm93SW5kZXhfMiIsInVlIiwiY2xpcGJvYXJkUmVzdWx0XzAiLCJwYXN0ZUFyZ3MiLCJyb3dJbmRleF8zIiwicGFzdGVCbG9ja3MiLCJuZXdTdGF0ZV8wIiwiZmllbGRFcnJvckNvdW50Iiwic2hvd01pblJvd3MiLCJzaG93UmVxdWlyZWQiLCJtb3ZlRnJvbUluZGV4XzAiLCJtb3ZlVG9JbmRleF8wIiwiYmxvY2tUeXBlXzAiLCJibG9ja18xIiwiYmxvY2tDb25maWciLCJyb3dQYXRoIiwiZXJyb3JQYXRoIiwiZHJhZ2dhYmxlU29ydGFibGVJdGVtUHJvcHMiLCJyb3dFcnJvckNvdW50IiwiQmxvY2tzRmllbGQiLCJsYXp5IiwiU3VzcGVuc2UiLCJMYXp5RWRpdG9yIiwiQ29kZUVkaXRvciIsInByaXNtVG9Nb25hY29MYW5ndWFnZU1hcCIsImpzIiwidHMiLCJDb2RlRmllbGRDb21wb25lbnQiLCJlZGl0b3JPcHRpb25zIiwiZWRpdG9yUHJvcHMiLCJvbk1vdW50IiwiaW5wdXRDaGFuZ2VGcm9tUmVmIiwicmVjYWxjdWxhdGVkSGVpZ2h0QXQiLCJzZXRSZWNhbGN1bGF0ZWRIZWlnaHRBdCIsInN0cmluZ1ZhbHVlUmVmIiwiZGVmYXVsdExhbmd1YWdlIiwid3JhcHBlclByb3BzIiwiQ29kZUZpZWxkIiwiYnVpbGRQYXRoU2VnbWVudHMiLCJ0YWJzIiwidGFiIiwiV2F0Y2hDaGlsZEVycm9ycyIsInNldEVycm9yQ291bnQiLCJzZWdtZW50c1RvTWF0Y2giLCJzZWdtZW50Iiwic2VnbWVudFRvTWF0Y2giLCJwYXRoV2l0aG91dERvdCIsInBhdGhTdGF0ZSIsIkNvbGxhcHNpYmxlRmllbGRDb21wb25lbnQiLCJpbmRleFBhdGgiLCJzZXRDb2xsYXBzZWRPbk1vdW50IiwiZmllbGRQcmVmZXJlbmNlc0tleSIsIm5ld0NvbGxhcHNlZFN0YXRlIiwiZXhpc3RpbmdQcmVmZXJlbmNlcyIsImZldGNoSW5pdGlhbFN0YXRlIiwic3BlY2lmaWNQcmVmZXJlbmNlIiwiQ29sbGFwc2libGVGaWVsZCIsIkRhdGVQaWNrZXIiLCJEYXRlUGlja2VyRmllbGQiLCJfdHlwZW9mIiwidG9QcmltaXRpdmUiLCJ0b1Byb3BlcnR5S2V5IiwiX2RlZmluZVByb3BlcnR5Iiwib3duS2V5cyIsIl9vYmplY3RTcHJlYWQyIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX3NsaWNlZFRvQXJyYXkiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJ1c2VTdGF0ZU1hbmFnZXIiLCJfcmVmJGRlZmF1bHRJbnB1dFZhbHUiLCJkZWZhdWx0SW5wdXRWYWx1ZSIsIl9yZWYkZGVmYXVsdE1lbnVJc09wZSIsImRlZmF1bHRNZW51SXNPcGVuIiwiX3JlZiRkZWZhdWx0VmFsdWUiLCJwcm9wc0lucHV0VmFsdWUiLCJwcm9wc01lbnVJc09wZW4iLCJwcm9wc09uQ2hhbmdlIiwicHJvcHNPbklucHV0Q2hhbmdlIiwicHJvcHNPbk1lbnVDbG9zZSIsInByb3BzT25NZW51T3BlbiIsInByb3BzVmFsdWUiLCJyZXN0U2VsZWN0UHJvcHMiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwic3RhdGVJbnB1dFZhbHVlIiwic2V0U3RhdGVJbnB1dFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzdGF0ZU1lbnVJc09wZW4iLCJzZXRTdGF0ZU1lbnVJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInN0YXRlVmFsdWUiLCJzZXRTdGF0ZVZhbHVlIiwiYWN0aW9uTWV0YSIsIm9uSW5wdXRDaGFuZ2UiLCJvbk1lbnVPcGVuIiwib25NZW51Q2xvc2UiLCJpbnB1dFZhbHVlIiwibWVudUlzT3BlbiIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUNsYXNzIiwiX2luaGVyaXRzIiwiX2dldFByb3RvdHlwZU9mIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2NyZWF0ZVN1cGVyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIkNvbXBvbmVudCIsImlzRGV2ZWxvcG1lbnQiLCJzaGVldEZvclRhZyIsInRhZyIsImNyZWF0ZVN0eWxlRWxlbWVudCIsIlN0eWxlU2hlZXQiLCJiZWZvcmUiLCJub2RlcyIsInJ1bGUiLCJzaGVldCIsIl90YWckcGFyZW50Tm9kZSIsIk1TIiwiTU9aIiwiV0VCS0lUIiwiQ09NTUVOVCIsIlJVTEVTRVQiLCJERUNMQVJBVElPTiIsIklNUE9SVCIsIktFWUZSQU1FUyIsIkxBWUVSIiwiYWJzIiwiYXNzaWduIiwiY2hhcmF0IiwidHJpbSIsIm1hdGNoIiwicmVwbGFjZW1lbnQiLCJpbmRleG9mIiwic3Vic3RyIiwiYmVnaW4iLCJlbmQiLCJzdHJsZW4iLCJzaXplb2YiLCJjb21iaW5lIiwibGluZSIsImNvbHVtbiIsImNoYXJhY3RlciIsImNoYXJhY3RlcnMiLCJjb3B5IiwiY2hhciIsImFsbG9jIiwiZGVhbGxvYyIsImRlbGltaXQiLCJ3aGl0ZXNwYWNlIiwiZXNjYXBpbmciLCJjb21tZW50ZXIiLCJpZGVudGlmaWVyIiwiY29tcGlsZSIsInJ1bGVzIiwicnVsZXNldHMiLCJwc2V1ZG8iLCJwb2ludHMiLCJkZWNsYXJhdGlvbnMiLCJhdHJ1bGUiLCJ2YXJpYWJsZSIsInNjYW5uaW5nIiwiYW1wZXJzYW5kIiwicmVmZXJlbmNlIiwiY29tbWVudCIsImRlY2xhcmF0aW9uIiwicnVsZXNldCIsIm1pZGRsZXdhcmUiLCJydWxlc2hlZXQiLCJtZW1vaXplIiwiY2FjaGUiLCJhcmciLCJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCJ0b1J1bGVzIiwicGFyc2VkIiwiZ2V0UnVsZXMiLCJmaXhlZEVsZW1lbnRzIiwiY29tcGF0IiwiaXNJbXBsaWNpdFJ1bGUiLCJwYXJlbnRSdWxlcyIsInJlbW92ZUxhYmVsIiwicHJlZml4ZXIiLCJkZWZhdWx0U3R5bGlzUGx1Z2lucyIsImNyZWF0ZUNhY2hlIiwic3NyU3R5bGVzIiwiZGF0YUVtb3Rpb25BdHRyaWJ1dGUiLCJzdHlsaXNQbHVnaW5zIiwiaW5zZXJ0ZWQiLCJub2Rlc1RvSHlkcmF0ZSIsImF0dHJpYiIsIl9pbnNlcnQiLCJvbW5pcHJlc2VudFBsdWdpbnMiLCJjdXJyZW50U2hlZXQiLCJmaW5hbGl6aW5nUGx1Z2lucyIsInNlcmlhbGl6ZXIiLCJzdHlsaXMiLCJzZXJpYWxpemVkIiwic2hvdWxkQ2FjaGUiLCJpc0Jyb3dzZXIiLCJnZXRSZWdpc3RlcmVkU3R5bGVzIiwicmVnaXN0ZXJlZCIsInJlZ2lzdGVyZWRTdHlsZXMiLCJyYXdDbGFzc05hbWUiLCJyZWdpc3RlclN0eWxlcyIsImlzU3RyaW5nVGFnIiwiaW5zZXJ0U3R5bGVzIiwibXVybXVyMiIsImxlbiIsInVuaXRsZXNzS2V5cyIsImh5cGhlbmF0ZVJlZ2V4IiwiYW5pbWF0aW9uUmVnZXgiLCJpc0N1c3RvbVByb3BlcnR5IiwiaXNQcm9jZXNzYWJsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsInByb2Nlc3NTdHlsZVZhbHVlIiwicDEiLCJwMiIsIm5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlIiwiaGFuZGxlSW50ZXJwb2xhdGlvbiIsIm1lcmdlZFByb3BzIiwiaW50ZXJwb2xhdGlvbiIsImNvbXBvbmVudFNlbGVjdG9yIiwia2V5ZnJhbWVzIiwic2VyaWFsaXplZFN0eWxlcyIsImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCJwcmV2aW91c0N1cnNvciIsImFzU3RyaW5nIiwiY2FjaGVkIiwic3RyaW5nIiwiaW50ZXJwb2xhdGVkIiwibGFiZWxQYXR0ZXJuIiwic2VyaWFsaXplU3R5bGVzIiwic3RyaW5nTW9kZSIsInN0cmluZ3MiLCJhc1RlbXBsYXRlU3RyaW5nc0FyciIsInRlbXBsYXRlU3RyaW5nc0FyciIsImlkZW50aWZpZXJOYW1lIiwic3luY0ZhbGxiYWNrIiwidXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayIsIkVtb3Rpb25DYWNoZUNvbnRleHQiLCJDYWNoZVByb3ZpZGVyIiwid2l0aEVtb3Rpb25DYWNoZSIsImZ1bmMiLCJUaGVtZUNvbnRleHQiLCJ0eXBlUHJvcE5hbWUiLCJjcmVhdGVFbW90aW9uUHJvcHMiLCJuZXdQcm9wcyIsIkluc2VydGlvbiIsIkVtb3Rpb24iLCJjc3NQcm9wIiwiV3JhcHBlZENvbXBvbmVudCIsIkVtb3Rpb24kMSIsImltcG9ydF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljcyIsImFyZ3NMZW5ndGgiLCJjcmVhdGVFbGVtZW50QXJnQXJyYXkiLCJKU1giLCJpbnNlcnRhYmxlIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsImluaXRfZmxvYXRpbmdfdWlfZG9tIiwiX2V4Y2x1ZGVkJDQiLCJhcHBseVByZWZpeFRvTmFtZSIsImNsYXNzTmFtZUxpc3QiLCJjbGVhblZhbHVlIiwiY2xlYW5Db21tb25Qcm9wcyIsImlubmVyUHJvcHMiLCJnZXRTdHlsZVByb3BzIiwiY2xhc3NOYW1lc1N0YXRlIiwiZ2V0U3R5bGVzIiwiZ2V0Q2xhc3NOYW1lcyIsImlzRG9jdW1lbnRFbGVtZW50Iiwibm9ybWFsaXplZEhlaWdodCIsImdldFNjcm9sbFRvcCIsInNjcm9sbFRvIiwiZ2V0U2Nyb2xsUGFyZW50IiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsIm92ZXJmbG93UngiLCJlYXNlT3V0Q3ViaWMiLCJhbmltYXRlZFNjcm9sbFRvIiwic3RhcnQiLCJjaGFuZ2UiLCJpbmNyZW1lbnQiLCJhbmltYXRlU2Nyb2xsIiwic2Nyb2xsSW50b1ZpZXciLCJtZW51RWwiLCJmb2N1c2VkRWwiLCJtZW51UmVjdCIsImZvY3VzZWRSZWN0Iiwib3ZlclNjcm9sbCIsImdldEJvdW5kaW5nQ2xpZW50T2JqIiwiaXNUb3VjaENhcGFibGUiLCJpc01vYmlsZURldmljZSIsInBhc3NpdmVPcHRpb25BY2Nlc3NlZCIsInN1cHBvcnRzUGFzc2l2ZUV2ZW50cyIsIm5vdE51bGxpc2giLCJ2YWx1ZVRlcm5hcnkiLCJpc011bHRpIiwibXVsdGlWYWx1ZSIsInNpbmdsZVZhbHVlIiwicmVtb3ZlUHJvcHMiLCJwcm9wc09iaiIsInByb3BlcnRpZXMiLCJwcm9wc01hcCIsIl9leGNsdWRlZCQzIiwiX2V4Y2x1ZGVkMiQxIiwiZ2V0TWVudVBsYWNlbWVudCIsInByZWZlcnJlZE1heEhlaWdodCIsIm1pbkhlaWdodCIsInByZWZlcnJlZFBsYWNlbWVudCIsInNob3VsZFNjcm9sbCIsImlzRml4ZWRQb3NpdGlvbiIsImNvbnRyb2xIZWlnaHQiLCJzY3JvbGxQYXJlbnQiLCJkZWZhdWx0U3RhdGUiLCJfc2Nyb2xsUGFyZW50JGdldEJvdW4iLCJfbWVudUVsJGdldEJvdW5kaW5nQ2wiLCJtZW51Qm90dG9tIiwibWVudUhlaWdodCIsIm1lbnVUb3AiLCJfbWVudUVsJG9mZnNldFBhcmVudCQiLCJjb250YWluZXJUb3AiLCJ2aWV3SGVpZ2h0Iiwic2Nyb2xsVG9wIiwibWFyZ2luQm90dG9tIiwibWFyZ2luVG9wIiwidmlld1NwYWNlQWJvdmUiLCJ2aWV3U3BhY2VCZWxvdyIsInNjcm9sbFNwYWNlQWJvdmUiLCJzY3JvbGxTcGFjZUJlbG93Iiwic2Nyb2xsRG93biIsInNjcm9sbFVwIiwic2Nyb2xsRHVyYXRpb24iLCJjb25zdHJhaW5lZEhlaWdodCIsIl9jb25zdHJhaW5lZEhlaWdodCIsInNwYWNlQWJvdmUiLCJfY29uc3RyYWluZWRIZWlnaHQyIiwiYWxpZ25Ub0NvbnRyb2wiLCJwbGFjZW1lbnQiLCJwbGFjZW1lbnRUb0NTU1Byb3AiLCJjb2VyY2VQbGFjZW1lbnQiLCJtZW51Q1NTIiwiX3JlZjIkdGhlbWUiLCJib3JkZXJSYWRpdXMiLCJzcGFjaW5nIiwiY29sb3JzIiwiUG9ydGFsUGxhY2VtZW50Q29udGV4dCIsIk1lbnVQbGFjZXIiLCJtaW5NZW51SGVpZ2h0IiwibWF4TWVudUhlaWdodCIsIm1lbnVQbGFjZW1lbnQiLCJtZW51UG9zaXRpb24iLCJtZW51U2hvdWxkU2Nyb2xsSW50b1ZpZXciLCJzZXRQb3J0YWxQbGFjZW1lbnQiLCJtYXhIZWlnaHQiLCJzZXRNYXhIZWlnaHQiLCJzZXRQbGFjZW1lbnQiLCJNZW51IiwiaW5uZXJSZWYiLCJNZW51JDEiLCJtZW51TGlzdENTUyIsImJhc2VVbml0IiwiTWVudUxpc3QiLCJub3RpY2VDU1MiLCJfcmVmNSIsIl9yZWY1JHRoZW1lIiwibm9PcHRpb25zTWVzc2FnZUNTUyIsImxvYWRpbmdNZXNzYWdlQ1NTIiwiTm9PcHRpb25zTWVzc2FnZSIsIl9yZWY2IiwiX3JlZjYkY2hpbGRyZW4iLCJyZXN0UHJvcHMiLCJMb2FkaW5nTWVzc2FnZSIsIl9yZWY3IiwiX3JlZjckY2hpbGRyZW4iLCJtZW51UG9ydGFsQ1NTIiwiX3JlZjgiLCJNZW51UG9ydGFsIiwiYXBwZW5kVG8iLCJjb250cm9sRWxlbWVudCIsIm1lbnVQb3J0YWxSZWYiLCJjbGVhbnVwUmVmIiwicG9ydGFsUGxhY2VtZW50Q29udGV4dCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiY29tcHV0ZWRQb3NpdGlvbiIsInNldENvbXB1dGVkUG9zaXRpb24iLCJ1cGRhdGVDb21wdXRlZFBvc2l0aW9uIiwic2Nyb2xsRGlzdGFuY2UiLCJydW5BdXRvVXBkYXRlIiwiYXV0b1VwZGF0ZSIsInNldE1lbnVQb3J0YWxFbGVtZW50IiwibWVudVBvcnRhbEVsZW1lbnQiLCJtZW51V3JhcHBlciIsImNvbnRhaW5lckNTUyIsImlzRGlzYWJsZWQiLCJpc1J0bCIsIlNlbGVjdENvbnRhaW5lciIsInZhbHVlQ29udGFpbmVyQ1NTIiwiaGFzVmFsdWUiLCJjb250cm9sU2hvdWxkUmVuZGVyVmFsdWUiLCJWYWx1ZUNvbnRhaW5lciIsImluZGljYXRvcnNDb250YWluZXJDU1MiLCJJbmRpY2F0b3JzQ29udGFpbmVyIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2V4Y2x1ZGVkJDIiLCJfZXhjbHVkZWQyIiwiU3ZnIiwiQ3Jvc3NJY29uIiwiRG93bkNoZXZyb24iLCJiYXNlQ1NTIiwiaXNGb2N1c2VkIiwiX3JlZjMkdGhlbWUiLCJkcm9wZG93bkluZGljYXRvckNTUyIsIkRyb3Bkb3duSW5kaWNhdG9yIiwiY2xlYXJJbmRpY2F0b3JDU1MiLCJDbGVhckluZGljYXRvciIsImluZGljYXRvclNlcGFyYXRvckNTUyIsIl9yZWY0JHRoZW1lIiwiSW5kaWNhdG9yU2VwYXJhdG9yIiwibG9hZGluZ0RvdEFuaW1hdGlvbnMiLCJsb2FkaW5nSW5kaWNhdG9yQ1NTIiwiTG9hZGluZ0RvdCIsIkxvYWRpbmdJbmRpY2F0b3IiLCJfcmVmNyRzaXplIiwiY3NzJDEiLCJfcmVmJHRoZW1lIiwiQ29udHJvbCIsIkNvbnRyb2wkMSIsIl9leGNsdWRlZCQxIiwiZ3JvdXBDU1MiLCJHcm91cCIsIkhlYWRpbmciLCJoZWFkaW5nUHJvcHMiLCJzZWxlY3RQcm9wcyIsImdyb3VwSGVhZGluZ0NTUyIsIkdyb3VwSGVhZGluZyIsIl9jbGVhbkNvbW1vblByb3BzIiwiR3JvdXAkMSIsImlucHV0Q1NTIiwiY29udGFpbmVyU3R5bGUiLCJzcGFjaW5nU3R5bGUiLCJpbnB1dFN0eWxlIiwiaXNIaWRkZW4iLCJJbnB1dCIsImlucHV0Q2xhc3NOYW1lIiwiSW5wdXQkMSIsIm11bHRpVmFsdWVDU1MiLCJtdWx0aVZhbHVlTGFiZWxDU1MiLCJjcm9wV2l0aEVsbGlwc2lzIiwibXVsdGlWYWx1ZVJlbW92ZUNTUyIsIk11bHRpVmFsdWVHZW5lcmljIiwiTXVsdGlWYWx1ZUNvbnRhaW5lciIsIk11bHRpVmFsdWVMYWJlbCIsIk11bHRpVmFsdWVSZW1vdmUiLCJNdWx0aVZhbHVlIiwiY29tcG9uZW50cyIsIkNvbnRhaW5lciIsIlJlbW92ZSIsIk11bHRpVmFsdWUkMSIsIm9wdGlvbkNTUyIsImlzU2VsZWN0ZWQiLCJPcHRpb24iLCJPcHRpb24kMSIsInBsYWNlaG9sZGVyQ1NTIiwiUGxhY2Vob2xkZXIiLCJQbGFjZWhvbGRlciQxIiwiU2luZ2xlVmFsdWUiLCJTaW5nbGVWYWx1ZSQxIiwiZGVmYXVsdENvbXBvbmVudHMiLCJzYWZlSXNOYU4iLCJpc0VxdWFsIiwic2Vjb25kIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwibWVtb2l6ZU9uZSIsInJlc3VsdEZuIiwibWVtb2l6ZWQiLCJuZXdBcmdzIiwibGFzdFJlc3VsdCIsIkExMXlUZXh0IiwiQTExeVRleHQkMSIsImRlZmF1bHRBcmlhTGl2ZU1lc3NhZ2VzIiwiaXNTZWFyY2hhYmxlIiwidGFiU2VsZWN0c1ZhbHVlIiwiaXNJbml0aWFsRm9jdXMiLCJfcHJvcHMkbGFiZWwiLCJmb2N1c2VkIiwiX3Byb3BzJGxhYmVsMiIsInNlbGVjdFZhbHVlIiwiaXNBcHBsZURldmljZSIsImdldEFycmF5SW5kZXgiLCJyZXN1bHRzTWVzc2FnZSIsIkxpdmVSZWdpb24iLCJhcmlhU2VsZWN0aW9uIiwiZm9jdXNlZE9wdGlvbiIsImZvY3VzZWRWYWx1ZSIsImZvY3VzYWJsZU9wdGlvbnMiLCJhcmlhTGl2ZU1lc3NhZ2VzIiwiZ2V0T3B0aW9uTGFiZWwiLCJpc09wdGlvbkRpc2FibGVkIiwic2NyZWVuUmVhZGVyU3RhdHVzIiwiYXJpYUxpdmUiLCJtZXNzYWdlcyIsImFyaWFTZWxlY3RlZCIsIm9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInJlbW92ZWRWYWx1ZSIsInJlbW92ZWRWYWx1ZXMiLCJhc09wdGlvbiIsIm11bHRpU2VsZWN0ZWQiLCJvbkNoYW5nZVByb3BzIiwiYXJpYUZvY3VzZWQiLCJmb2N1c01zZyIsIm9uRm9jdXNQcm9wcyIsImFyaWFSZXN1bHRzIiwicmVzdWx0c01zZyIsImFyaWFHdWlkYW5jZSIsImd1aWRhbmNlTXNnIiwiU2NyZWVuUmVhZGVyVGV4dCIsIkxpdmVSZWdpb24kMSIsImRpYWNyaXRpY3MiLCJhbnlEaWFjcml0aWMiLCJkaWFjcml0aWNUb0Jhc2UiLCJkaWFjcml0aWMiLCJzdHJpcERpYWNyaXRpY3MiLCJtZW1vaXplZFN0cmlwRGlhY3JpdGljc0ZvcklucHV0IiwidHJpbVN0cmluZyIsImRlZmF1bHRTdHJpbmdpZnkiLCJjcmVhdGVGaWx0ZXIiLCJyYXdJbnB1dCIsIl9pZ25vcmVDYXNlJGlnbm9yZUFjYyIsImlnbm9yZUNhc2UiLCJpZ25vcmVBY2NlbnRzIiwibWF0Y2hGcm9tIiwiY2FuZGlkYXRlIiwiRHVtbXlJbnB1dCIsImZpbHRlcmVkUHJvcHMiLCJjYW5jZWxTY3JvbGwiLCJ1c2VTY3JvbGxDYXB0dXJlIiwiaXNFbmFibGVkIiwib25Cb3R0b21BcnJpdmUiLCJvbkJvdHRvbUxlYXZlIiwib25Ub3BBcnJpdmUiLCJvblRvcExlYXZlIiwiaXNCb3R0b20iLCJpc1RvcCIsInRvdWNoU3RhcnQiLCJzY3JvbGxUYXJnZXQiLCJoYW5kbGVFdmVudERlbHRhIiwiX3Njcm9sbFRhcmdldCRjdXJyZW50IiwiY2xpZW50SGVpZ2h0IiwiaXNEZWx0YVBvc2l0aXZlIiwiYXZhaWxhYmxlU2Nyb2xsIiwic2hvdWxkQ2FuY2VsU2Nyb2xsIiwib25XaGVlbCIsIm9uVG91Y2hTdGFydCIsIm9uVG91Y2hNb3ZlIiwiZGVsdGFZIiwic3RhcnRMaXN0ZW5pbmciLCJub3RQYXNzaXZlIiwic3RvcExpc3RlbmluZyIsIlNUWUxFX0tFWVMiLCJMT0NLX1NUWUxFUyIsInByZXZlbnRUb3VjaE1vdmUiLCJwcmV2ZW50SW5lcnRpYVNjcm9sbCIsInRvdGFsU2Nyb2xsIiwiY3VycmVudFNjcm9sbCIsImlzVG91Y2hEZXZpY2UiLCJhY3RpdmVTY3JvbGxMb2NrcyIsImxpc3RlbmVyT3B0aW9ucyIsInVzZVNjcm9sbExvY2siLCJfcmVmJGFjY291bnRGb3JTY3JvbGwiLCJhY2NvdW50Rm9yU2Nyb2xsYmFycyIsIm9yaWdpbmFsU3R5bGVzIiwiYWRkU2Nyb2xsTG9jayIsInRvdWNoU2Nyb2xsVGFyZ2V0IiwidGFyZ2V0U3R5bGUiLCJjdXJyZW50UGFkZGluZyIsImNsaWVudFdpZHRoIiwiYWRqdXN0ZWRQYWRkaW5nIiwicmVtb3ZlU2Nyb2xsTG9jayIsImJsdXJTZWxlY3RJbnB1dCIsIl9yZWYyJDEiLCJTY3JvbGxNYW5hZ2VyIiwibG9ja0VuYWJsZWQiLCJfcmVmJGNhcHR1cmVFbmFibGVkIiwiY2FwdHVyZUVuYWJsZWQiLCJzZXRTY3JvbGxDYXB0dXJlVGFyZ2V0Iiwic2V0U2Nyb2xsTG9ja1RhcmdldCIsInRhcmdldFJlZiIsIlJlcXVpcmVkSW5wdXQiLCJvbkZvY3VzIiwiUmVxdWlyZWRJbnB1dCQxIiwidGVzdFBsYXRmb3JtIiwiX3dpbmRvdyRuYXZpZ2F0b3IkdXNlIiwiaXNJUGhvbmUiLCJpc01hYyIsImlzSVBhZCIsImlzSU9TIiwiZm9ybWF0R3JvdXBMYWJlbCIsImdldE9wdGlvbkxhYmVsJDEiLCJnZXRPcHRpb25WYWx1ZSQxIiwiZGVmYXVsdFN0eWxlcyIsIm1lbnVHdXR0ZXIiLCJkZWZhdWx0VGhlbWUiLCJkZWZhdWx0UHJvcHMiLCJ0b0NhdGVnb3JpemVkT3B0aW9uIiwiX2lzT3B0aW9uRGlzYWJsZWQiLCJfaXNPcHRpb25TZWxlY3RlZCIsImdldE9wdGlvblZhbHVlIiwiYnVpbGRDYXRlZ29yaXplZE9wdGlvbnMiLCJncm91cE9yT3B0aW9uIiwiZ3JvdXBPck9wdGlvbkluZGV4IiwiY2F0ZWdvcml6ZWRPcHRpb25zIiwib3B0aW9uSW5kZXgiLCJjYXRlZ29yaXplZE9wdGlvbiIsImJ1aWxkRm9jdXNhYmxlT3B0aW9uc0Zyb21DYXRlZ29yaXplZE9wdGlvbnMiLCJvcHRpb25zQWNjdW11bGF0b3IiLCJidWlsZEZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzIiwib3B0aW9uSWQiLCJidWlsZEZvY3VzYWJsZU9wdGlvbnMiLCJfcHJvcHMkaW5wdXRWYWx1ZSIsInNob3VsZEhpZGVTZWxlY3RlZE9wdGlvbnMiLCJfZmlsdGVyT3B0aW9uIiwiZ2V0TmV4dEZvY3VzZWRWYWx1ZSIsIm5leHRTZWxlY3RWYWx1ZSIsImxhc3RTZWxlY3RWYWx1ZSIsImxhc3RGb2N1c2VkSW5kZXgiLCJuZXh0Rm9jdXNlZEluZGV4IiwiZ2V0TmV4dEZvY3VzZWRPcHRpb24iLCJsYXN0Rm9jdXNlZE9wdGlvbiIsImdldEZvY3VzZWRPcHRpb25JZCIsImZvY3VzYWJsZU9wdGlvbnNXaXRoSWRzIiwiX2ZvY3VzYWJsZU9wdGlvbnNXaXRoIiwiZm9jdXNlZE9wdGlvbklkIiwiaGlkZVNlbGVjdGVkT3B0aW9ucyIsImluc3RhbmNlSWQiLCJTZWxlY3QiLCJfQ29tcG9uZW50IiwiX3N1cGVyIiwiX3Byb3BzIiwiX3RoaXMkcHJvcHMyIiwiY2xvc2VNZW51T25TZWxlY3QiLCJfdGhpcyRwcm9wczMiLCJibHVySW5wdXRPblNlbGVjdCIsImRlc2VsZWN0ZWQiLCJuZXdWYWx1ZUFycmF5IiwibGFzdFNlbGVjdGVkVmFsdWUiLCJiYXNlIiwiY3VzdG9tIiwiX3RoaXMkcHJvcHMkY2xhc3NOYW1lIiwiX3RoaXMkcHJvcHMkY2xhc3NOYW1lMiIsIm9wZW5NZW51T25DbGljayIsIl90aGlzJHByb3BzNCIsInRvdWNoIiwiZGVsdGFYIiwibW92ZVRocmVzaG9sZCIsInByZXZJbnB1dFZhbHVlIiwiZm9jdXNlZE9wdGlvbkluZGV4IiwiX3RoaXMkcHJvcHM1IiwiYmFja3NwYWNlUmVtb3Zlc1ZhbHVlIiwiZXNjYXBlQ2xlYXJzVmFsdWUiLCJpc0NsZWFyYWJsZSIsIm9wZW5NZW51T25Gb2N1cyIsIl90aGlzJHN0YXRlIiwiX3RoaXMkcHJvcHM2IiwiZm9jdXNPcHRpb24iLCJfdGhpcyRzdGF0ZTIiLCJvcGVuQXRJbmRleCIsInNlbGVjdGVkSW5kZXgiLCJfdGhpcyRzdGF0ZTMiLCJmb2N1c2VkSW5kZXgiLCJsYXN0SW5kZXgiLCJuZXh0Rm9jdXMiLCJwYWdlU2l6ZSIsImNsZWFyVmFsdWUiLCJnZXRWYWx1ZSIsInNlbGVjdE9wdGlvbiIsIl90aGlzJHByb3BzNyIsIl9pbnB1dFZhbHVlIiwiX3NlbGVjdFZhbHVlIiwiX3RoaXMkcHJvcHM4IiwiaW5wdXRJZCIsImZvcm0iLCJfdGhpcyRnZXRDb21wb25lbnRzIiwiX3RoaXMkc3RhdGU0IiwiaW5wdXRJc0hpZGRlbiIsImNvbW1vblByb3BzIiwiYXJpYUF0dHJpYnV0ZXMiLCJfdGhpcyRnZXRDb21wb25lbnRzMiIsIl90aGlzJHByb3BzOSIsIl90aGlzJHN0YXRlNSIsIm9wdCIsImlzT3B0aW9uRm9jdXNlZCIsIl90aGlzJGdldENvbXBvbmVudHMzIiwiX3RoaXMkcHJvcHMxMCIsIl90aGlzJGdldENvbXBvbmVudHM0IiwiX3RoaXMkcHJvcHMxMSIsIl90aGlzJGdldENvbXBvbmVudHM1IiwiX3RoaXMkZ2V0Q29tcG9uZW50czYiLCJfdGhpcyRnZXRDb21wb25lbnRzNyIsIl90aGlzJHByb3BzMTIiLCJjYXB0dXJlTWVudVNjcm9sbCIsImxvYWRpbmdNZXNzYWdlIiwibWVudVBvcnRhbFRhcmdldCIsIm1lbnVTaG91bGRCbG9ja1Njcm9sbCIsIm5vT3B0aW9uc01lc3NhZ2UiLCJvbk1lbnVTY3JvbGxUb1RvcCIsIm9uTWVudVNjcm9sbFRvQm90dG9tIiwib25Ib3ZlciIsIm1lbnVVSSIsIl9kYXRhIiwiZ3JvdXBJbmRleCIsImdyb3VwSWQiLCJoZWFkaW5nSWQiLCJtZW51UGxhY2VtZW50UHJvcHMiLCJtZW51RWxlbWVudCIsIl9yZWY0JHBsYWNlclByb3BzIiwic2Nyb2xsVGFyZ2V0UmVmIiwiaW5zdGFuY2UiLCJfdGhpczUiLCJfdGhpcyRwcm9wczEzIiwiX3ZhbHVlIiwiX3RoaXMkc3RhdGU2IiwiX3RoaXMkZ2V0Q29tcG9uZW50czgiLCJfdGhpcyRwcm9wczE0IiwiY2xlYXJGb2N1c1ZhbHVlT25VcGRhdGUiLCJpbnB1dElzSGlkZGVuQWZ0ZXJVcGRhdGUiLCJwcmV2V2FzRm9jdXNlZCIsImluc3RhbmNlUHJlZml4IiwibmV3TWVudU9wdGlvbnNTdGF0ZSIsIm5ld0lucHV0SXNIaWRkZW5TdGF0ZSIsIm5ld0FyaWFTZWxlY3Rpb24iLCJoYXNLZXB0Rm9jdXMiLCJTdGF0ZU1hbmFnZWRTZWxlY3QiLCJiYXNlU2VsZWN0UHJvcHMiLCJTdGF0ZU1hbmFnZWRTZWxlY3QkMSIsImNvbXBhcmVPcHRpb24iLCJhY2Nlc3NvcnMiLCJvcHRpb25MYWJlbCIsImJ1aWx0aW5zIiwic2VsZWN0T3B0aW9ucyIsInVzZUNyZWF0YWJsZSIsIl9yZWYkYWxsb3dDcmVhdGVXaGlsZSIsImFsbG93Q3JlYXRlV2hpbGVMb2FkaW5nIiwiX3JlZiRjcmVhdGVPcHRpb25Qb3NpIiwiY3JlYXRlT3B0aW9uUG9zaXRpb24iLCJfcmVmJGZvcm1hdENyZWF0ZUxhYmUiLCJmb3JtYXRDcmVhdGVMYWJlbCIsIl9yZWYkaXNWYWxpZE5ld09wdGlvbiIsImlzVmFsaWROZXdPcHRpb24iLCJfcmVmJGdldE5ld09wdGlvbkRhdGEiLCJnZXROZXdPcHRpb25EYXRhIiwib25DcmVhdGVPcHRpb24iLCJfcmVmJG9wdGlvbnMiLCJwcm9wc09wdGlvbnMiLCJfcmVzdFNlbGVjdFByb3BzJGdldE8iLCJfcmVzdFNlbGVjdFByb3BzJGdldE8yIiwibmV3T3B0aW9uIiwidmFsdWVBcnJheSIsIm5ld09wdGlvbkRhdGEiLCJuZXdBY3Rpb25NZXRhIiwiQ3JlYXRhYmxlU2VsZWN0IiwiY3JlYXRhYmxlUHJvcHMiLCJDcmVhdGFibGVTZWxlY3QkMSIsInJlc3RJbm5lclByb3BzIiwiY3VzdG9tUHJvcHMiLCJkaXNhYmxlS2V5RG93biIsImRpc2FibGVNb3VzZURvd24iLCJTZWxlY3RDb21wb25lbnRzIiwiYnlwYXNzRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRpc3BhdGNoRXZlbnQiLCJnZW5lcmF0ZU11bHRpVmFsdWVEcmFnZ2FibGVJRCIsIm9wdGlvbkRhdGEiLCJ2YWx1ZUZ1bmN0aW9uIiwibGlzdGVuZXJzTW91c2VEb3duIiwicmVzdExpc3RlbmVycyIsImRyYWdnYWJsZVByb3BzIiwiZWRpdGFibGVQcm9wcyIsInRpdGxlVGV4dCIsImxhYmVsVGV4dCIsIm9uVG91Y2hFbmQiLCJfdGVtcDIiLCJ2YWx1ZUNvbnRhaW5lckxhYmVsIiwiY3JlYXRlT3B0aW9uIiwiU2VsZWN0QWRhcHRlciIsInNldElucHV0VmFsdWUiLCJzZXRIYXNNb3VudGVkIiwiaGFzTW91bnRlZCIsImZpbHRlck9wdGlvbiIsImlzQ3JlYXRhYmxlIiwibnVtYmVyT25seSIsInJzU3R5bGVzIiwibWVudSIsImNsYXNzTmFtZVByZWZpeCIsImFjY2VwdGFibGVLZXlzIiwiaXNOdW1iZXIiLCJpc0FjdGlvbktleSIsIlNvcnRhYmxlU2VsZWN0IiwiZHJhZ2dhYmxlSURzIiwic29ydGVkIiwiUmVhY3RTZWxlY3QiLCJmb3JtYXRPcHRpb25zIiwib3B0aW9uc0Zyb21Qcm9wcyIsInNlbGVjdGVkVGltZXpvbmVGcm9tUHJvcHMiLCJzZWxlY3RlZFRpbWV6b25lIiwidF8wIiwiRGF0ZVRpbWVGaWVsZENvbXBvbmVudCIsImRhdGVQaWNrZXJQcm9wcyIsInVzZXJUaW1lem9uZSIsInRpbWV6b25lUGF0aCIsInRpbWV6b25lRmllbGQiLCJzdXBwb3J0ZWRUaW1lem9uZXMiLCJ0aW1lem9uZXMiLCJpc0RhdGVPbmx5IiwiZGlzcGxheWVkVmFsdWUiLCJEYXRlV2l0aFVzZXJUeiIsImluY29taW5nRGF0ZSIsIlRaRGF0ZVdpdGhTZWxlY3RlZFR6IiwiaW5jb21pbmdPZmZzZXQiLCJnZXRUaW1lem9uZU9mZnNldCIsIm9yaWdpbmFsSG91ciIsImdldEhvdXJzIiwiZGF0ZVRvU2VsZWN0ZWRUeiIsImRhdGVUb1VzZXJUeiIsImRhdGVXaXRoVGltZXpvbmVfMCIsIm9uQ2hhbmdlVGltZXpvbmUiLCJvdmVycmlkZXMiLCJ0aW1lem9uZVJlcXVpcmVkIiwiRGF0ZVRpbWVGaWVsZCIsIkVtYWlsRmllbGRDb21wb25lbnQiLCJhdXRvQ29tcGxldGUiLCJFbWFpbEZpZWxkIiwiZ3JvdXBIYXNOYW1lIiwiUm93UHJvdmlkZXIiLCJ3aXRoaW5Sb3ciLCJ1c2VSb3ciLCJUYWJzUHJvdmlkZXIiLCJ3aXRoaW5UYWIiLCJ1c2VUYWJzIiwiR3JvdXBDb250ZXh0IiwiR3JvdXBQcm92aWRlciIsIndpdGhpbkdyb3VwIiwidXNlR3JvdXAiLCJoaWRlR3V0dGVyIiwiaXNXaXRoaW5Hcm91cCIsImlzV2l0aGluUm93IiwiaXNXaXRoaW5UYWIiLCJpc1RvcExldmVsIiwiR3JvdXBGaWVsZENvbXBvbmVudCIsIkhpZGRlbkZpZWxkQ29tcG9uZW50IiwidmFsdWVGcm9tUHJvcHMiLCJIaWRkZW5GaWVsZCIsImZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyIsImhvaXN0UXVlcnlQYXJhbXNUb0FuZCIsInRyYW5zZm9ybUNvbHVtbnNUb1ByZWZlcmVuY2VzIiwiTGlzdERyYXdlckNvbnRleHQiLCJMaXN0RHJhd2VyQ29udGV4dFByb3ZpZGVyIiwiaXNJbkRyYXdlciIsInVzZUxpc3REcmF3ZXJDb250ZXh0IiwicGFyc2VTZWFyY2hQYXJhbXMiLCJzZWFyY2hQYXJhbXMiLCJpZ25vcmVRdWVyeVByZWZpeCIsIkxpc3RRdWVyeUNvbnRleHQiLCJ1c2VMaXN0UXVlcnkiLCJMaXN0UXVlcnlNb2RpZmllZENvbnRleHQiLCJtZXJnZVF1ZXJ5IiwiY3VycmVudFF1ZXJ5IiwibmV3UXVlcnkiLCJwYWdlIiwic2hvdWxkUmVzZXRRdWVyeUJ5R3JvdXAiLCJtZXJnZWRRdWVyeUJ5R3JvdXAiLCJxdWVyeUJ5R3JvdXAiLCJmcm9tRW50cmllcyIsImNvbHVtbnMiLCJncm91cEJ5IiwiZGVmYXVsdHMiLCJsaW1pdCIsInByZXNldCIsInNvcnQiLCJ3aGVyZSIsInNhbml0aXplUXVlcnkiLCJ0b1Nhbml0aXplIiwic2FuaXRpemVkIiwiTnVtYmVyIiwiTGlzdFF1ZXJ5UHJvdmlkZXIiLCJtb2RpZnlTZWFyY2hQYXJhbXMiLCJvblF1ZXJ5Q2hhbmdlIiwib25RdWVyeUNoYW5nZUZyb21Qcm9wcyIsIm9yZGVyYWJsZUZpZWxkTmFtZSIsInF1ZXJ5RnJvbVByb3BzIiwicmF3U2VhcmNoUGFyYW1zIiwibW9kaWZpZWQiLCJvblF1ZXJ5Q2hhbmdlRnJvbUNvbnRleHQiLCJxdWVyeUZyb21VUkwiLCJzZXRRdWVyeSIsInJlZmluZUxpc3REYXRhIiwiaW5jb21pbmdRdWVyeSIsImhhbmRsZVBhZ2VDaGFuZ2UiLCJoYW5kbGVQZXJQYWdlQ2hhbmdlIiwiaGFuZGxlU2VhcmNoQ2hhbmdlIiwiaGFuZGxlU29ydENoYW5nZSIsImhhbmRsZVdoZXJlQ2hhbmdlIiwic3luY1Byb3BzVG9VUkwiLCJoaXN0b3J5IiwiZGVmYXVsdExpbWl0IiwiaXNHcm91cGluZ0J5IiwiU2VydmVyRnVuY3Rpb25zQ29udGV4dCIsInVzZVNlcnZlckZ1bmN0aW9ucyIsIlNlcnZlckZ1bmN0aW9uc1Byb3ZpZGVyIiwic2VydmVyRnVuY3Rpb24iLCJnZXREb2N1bWVudFNsb3RzIiwic2NoZWR1bGVQdWJsaXNoIiwic2lnbmFsIiwicmVtb3RlU2lnbmFsIiwiYWJvcnRlZCIsIl9lcnIiLCJnZXRGb3JtU3RhdGUiLCJmYWxsYmFja0xvY2FsZSIsImdldFRhYmxlU3RhdGUiLCJyZW5kZXJEb2N1bWVudCIsImNvcHlEYXRhRnJvbUxvY2FsZSIsImdldEZvbGRlclJlc3VsdHNDb21wb25lbnRBbmREYXRhIiwiX2ludGVybmFsX3JlbmRlckZpZWxkIiwic2x1Z2lmeSIsInRyYW5zZm9ybUNvbHVtbnNUb1NlYXJjaFBhcmFtcyIsIlRhYmxlQ29sdW1uQ29udGV4dCIsInVzZVRhYmxlQ29sdW1ucyIsIlRhYmxlQ29sdW1uc1Byb3ZpZGVyIiwiY29sdW1uU3RhdGUiLCJjb2x1bW5TdGF0ZUZyb21Qcm9wcyIsIkxpbmtlZENlbGxPdmVycmlkZSIsImRlZmF1bHRDb2x1bW5zIiwic2V0T3B0aW1pc3RpY0NvbHVtblN0YXRlIiwidG9nZ2xlQ29sdW1uIiwibmV3Q29sdW1uU3RhdGUiLCJjb2wiLCJhY2Nlc3NvciIsIm1vdmVDb2x1bW4iLCJmcm9tSW5kZXgiLCJ0b0luZGV4IiwiY29sdW1uVG9Nb3ZlIiwic2V0QWN0aXZlQ29sdW1ucyIsImNvbE5hbWUiLCJjb2xJbmRleCIsInJlc2V0Q29sdW1uc1N0YXRlIiwiZmllbGRJc0lEIiwicGlsbHMiLCJwaWxsRWxlbWVudHMiLCJwaWxsIiwicGlsbF8wIiwiQ29sdW1uU2VsZWN0b3IiLCJmaWx0ZXJlZENvbHVtbnMiLCJkaXNhYmxlTGlzdENvbHVtbiIsImxhYmVsV2l0aFByZWZpeCIsIlBpbGxTZWxlY3RvciIsInVzZVJlbGF0ZWRDb2xsZWN0aW9ucyIsInJlbGF0aW9uIiwicmVsYXRlZENvbGxlY3Rpb25zIiwidXNlRGVsYXllZFJlbmRlciIsImRlbGF5QmVmb3JlU2hvdyIsImluVGltZW91dCIsIm1pblNob3dUaW1lIiwib3V0VGltZW91dCIsInRvdGFsTW91bnRUaW1lIiwiaGFzRGVsYXllZCIsInRyaWdnZXJEZWxheSIsInVzZURlbGF5IiwiaXNNb3VudGVkIiwic2V0SXNNb3VudGVkIiwiaXNVbm1vdW50aW5nIiwic2V0SXNVbm1vdW50aW5nIiwib25Nb3VudFRpbWVzdGFtcFJlZiIsInVubW91bnRUaW1lb3V0UmVmIiwidW5tb3VudCIsInNob3VsZE1vdW50Iiwic2hvdWxkVW5tb3VudCIsInRvdGFsVGltZU1vdW50ZWQiLCJ0cmlnZ2VyRGVsYXllZFJlbmRlciIsImRlZmF1bHRMb2FkaW5nT3ZlcmxheVN0YXRlIiwibG9hZGVycyIsImxvYWRpbmdUZXh0Iiwib3ZlcmxheVR5cGUiLCJsb2FkZXJzQ29weSIsIm5leHRMb2FkZXIiLCJhbmltYXRlZER1cmF0aW9uIiwiaXNPblNjcmVlbiIsInRvZ2dsZUxvYWRpbmdPdmVybGF5IiwiTG9hZGluZ092ZXJsYXlQcm92aWRlciIsImZhbGxiYWNrVGV4dCIsIm92ZXJsYXlzIiwiZGlzcGF0Y2hPdmVybGF5IiwiTG9hZGluZ092ZXJsYXkiLCJhbmltYXRpb25EdXJhdGlvbiIsInVzZUxvYWRpbmdPdmVybGF5IiwiY29udGV4dEhvb2siLCJMb2FkaW5nT3ZlcmxheVRvZ2dsZSIsIkZvcm1Mb2FkaW5nT3ZlcmxheVRvZ2dsZSIsImZvcm1Jc0xvYWRpbmciLCJsb2FkaW5nU3VmZml4IiwiaXNQcm9jZXNzaW5nIiwibG9hZGluZyIsImFib3J0QW5kSWdub3JlIiwiYWJvcnRDb250cm9sbGVyIiwiaGFuZGxlQWJvcnRSZWYiLCJuZXdDb250cm9sbGVyIiwiRG9jdW1lbnREcmF3ZXJDYWxsYmFja3NDb250ZXh0IiwiRG9jdW1lbnREcmF3ZXJDb250ZXh0UHJvdmlkZXIiLCJ1c2VEb2N1bWVudERyYXdlckNvbnRleHQiLCJEb2N1bWVudERyYXdlckNvbnRlbnQiLCJkaXNhYmxlQWN0aW9ucyIsIm9uRGVsZXRlIiwib25EZWxldGVGcm9tUHJvcHMiLCJvbkR1cGxpY2F0ZSIsIm9uRHVwbGljYXRlRnJvbVByb3BzIiwib25TYXZlIiwib25TYXZlRnJvbVByb3BzIiwib3ZlcnJpZGVFbnRpdHlWaXNpYmlsaXR5IiwicmVkaXJlY3RBZnRlckNyZWF0ZSIsInJlZGlyZWN0QWZ0ZXJEZWxldGUiLCJyZWRpcmVjdEFmdGVyRHVwbGljYXRlIiwicmVkaXJlY3RBZnRlclJlc3RvcmUiLCJhYm9ydEdldERvY3VtZW50Vmlld1JlZiIsIkRvY3VtZW50VmlldyIsInNldERvY3VtZW50VmlldyIsInNldElzTG9hZGluZyIsImdldERvY3VtZW50VmlldyIsInNob3dMb2FkaW5nSW5kaWNhdG9yIiwiY29udHJvbGxlciIsImNsZWFyRG9jIiwiYWJvcnRHZXREb2N1bWVudFZpZXciLCJkb2N1bWVudERyYXdlckJhc2VDbGFzcyIsImZvcm1hdERvY3VtZW50RHJhd2VyU2x1ZyIsIkRvY3VtZW50RHJhd2VyVG9nZ2xlciIsIkRvY3VtZW50RHJhd2VyIiwidXNlRG9jdW1lbnREcmF3ZXIiLCJzZXRJc09wZW4iLCJ0b2dnbGVEcmF3ZXIiLCJjbG9zZURyYXdlciIsIm9wZW5EcmF3ZXIiLCJwcm9wc18wIiwiaXNEcmF3ZXJPcGVuIiwiTWVtb2l6ZWREcmF3ZXJTdGF0ZSIsIk1lbW9pemVkRHJhd2VyIiwiTWVtb2l6ZWREcmF3ZXJUb2dnbGVyIiwiTm9MaXN0UmVzdWx0cyIsIkFjdGlvbnMiLCJNZXNzYWdlIiwiYXBwZW5kVXBsb2FkU2VsZWN0RmllbGRzIiwidXNlRGVib3VuY2UiLCJkZWJvdW5jZWRWYWx1ZSIsInNldERlYm91bmNlZFZhbHVlIiwidW5yZXR1cm5lZElEcyIsImlkc1RvTG9hZCIsIlJlbGF0aW9uc2hpcFByb3ZpZGVyIiwiZG9jdW1lbnRzIiwiZGlzcGF0Y2hEb2N1bWVudHMiLCJkZWJvdW5jZWREb2N1bWVudHMiLCJyZWxvYWRBbGwiLCJlbmFibGVMaXN0Vmlld1NlbGVjdEFQSSIsImZpZWxkVG9TZWxlY3QiLCJ1cGxvYWQiLCJpZHNUb1N0cmluZyIsIm9rIiwibG9hZFJlbGF0aW9uc2hpcERvY3MiLCJyZWxhdGlvbnNoaXBzIiwiZ2V0UmVsYXRpb25zaGlwcyIsInVzZUxpc3RSZWxhdGlvbnNoaXBzIiwiaWRfMCIsIkFkZE5ld0J1dHRvbiIsImFsbG93Q3JlYXRlIiwiY2xvc2VQb3B1cCIsInJlbGF0ZWRDb2xsZWN0aW9uIiwiZWFjaCIsIkxhenlSZWFjdENvbXBvbmVudFN5bWJvbCIsImlzVmFsaWRSZWFjdEVsZW1lbnQiLCJnZXREaXNwbGF5ZWRGaWVsZFZhbHVlIiwiY2VsbERhdGEiLCJzZWxlY3RlZE9wdGlvbiIsIkNvZGVDZWxsIiwibm93cmFwIiwidGV4dFRvU2hvdyIsIm5vV3JhcFN0eWxlIiwid2hpdGVTcGFjZSIsIkFycmF5Q2VsbCIsImFycmF5RmllbGRzIiwiQmxvY2tzQ2VsbCIsInNlbGVjdGVkQmxvY2tzIiwidHJhbnNsYXRlZEJsb2NrTGFiZWxzIiwiYmxvY2tzTWFwIiwiZm9ybWF0QmxvY2tMaXN0IiwiYmxvY2tzXzAiLCJiXzAiLCJtb3JlIiwiQ2hlY2tib3hDZWxsIiwiZ2V0T2JqZWN0RG90Tm90YXRpb24iLCJEYXRlQ2VsbCIsInJvd0RhdGEiLCJ0aW1lem9uZUZyb21GaWVsZCIsImRhdGVGb3JtYXRGcm9tUm9vdCIsInRpbWV6b25lRmllbGROYW1lIiwiZ2V0QmVzdEZpdEZyb21TaXplcyIsImlzSW1hZ2UiLCJGaWxlIiwiYmFja2dyb3VuZENvbG9yIiwiVGh1bWJuYWlsIiwiZmlsZVNyYyIsImltYWdlQ2FjaGVUYWciLCJmaWxlbmFtZSIsImZpbGVFeGlzdHMiLCJzZXRGaWxlRXhpc3RzIiwiaW1nIiwic3JjIiwicXVlcnlDaGFyIiwiVGh1bWJuYWlsQ29tcG9uZW50IiwiZGlzcGxheVByZXZpZXciLCJwcmV2aWV3QWxsb3dlZCIsImlzRmlsZUltYWdlIiwibWltZVR5cGUiLCJzaXplcyIsInN0cmluZ2lmeVRydW5jYXRlZCIsIm1heExlbmd0aCIsInN0cmluZ2lmaWVkSlNPTiIsIkpTT05DZWxsIiwiY2VsbERhdGFTdHJpbmciLCJ0b3RhbFRvU2hvdyIsIlJlbGF0aW9uc2hpcENlbGwiLCJjZWxsRGF0YUZyb21Qcm9wcyIsImN1c3RvbUNlbGxQcm9wcyIsInNldFZhbHVlcyIsImhhc1JlcXVlc3RlZCIsImZvcm1hdHRlZFZhbHVlcyIsImFycmF5Q2VsbERhdGEiLCJjZWxsIiwic2V0SGFzUmVxdWVzdGVkIiwiY3VzdG9tQ2VsbENvbnRleHQiLCJyZWxhdGlvblRvXzAiLCJsYWJlbF8wIiwiZmlsZUZpZWxkIiwiRmlsZUNlbGwiLCJvcHRpb25zQXJlT2JqZWN0cyIsIlNlbGVjdENlbGwiLCJmb3VuZCIsImZpbmRMYWJlbCIsIlRleHRhcmVhQ2VsbCIsImNlbGxDb21wb25lbnRzIiwiY2hlY2tib3giLCJyYWRpbyIsInJlbGF0aW9uc2hpcCIsInRleHRhcmVhIiwiRGVmYXVsdENlbGwiLCJjbGFzc05hbWVGcm9tUHJvcHMiLCJsaW5rVVJMIiwib25DbGlja0Zyb21Qcm9wcyIsInZpZXdUeXBlIiwiY2xhc3NOYW1lRnJvbUNvbmZpZ0NvbnRleHQiLCJXcmFwRWxlbWVudCIsIndyYXBFbGVtZW50UHJvcHMiLCJEZWZhdWx0Q2VsbENvbXBvbmVudCIsIkNlbGxDb21wb25lbnQiLCJGaWxlQ2VsbENvbXBvbmVudCIsImNsYXNzTmFtZV8wIiwiQ2VsbFByb3BzQ29udGV4dCIsInVzZUNlbGxQcm9wcyIsIlJlbmRlckRlZmF1bHRDZWxsIiwiY2xpZW50UHJvcHMiLCJjb2x1bW5JbmRleCIsImlzTGlua2VkQ29sdW1uIiwicHJvcHNUb1Bhc3MiLCJyb3dDb2xsIiwiRHJhd2VyTGluayIsIm9uRHJhd2VyT3BlbiIsImNlbGxQcm9wcyIsInVwZGF0ZVBhZ2UiLCJQYWdlIiwiaXNDdXJyZW50IiwiaXNGaXJzdFBhZ2UiLCJpc0xhc3RQYWdlIiwiU2VwYXJhdG9yIiwibm9kZVR5cGVzIiwiQ2xpY2thYmxlQXJyb3ciLCJoYXNOZXh0UGFnZSIsImhhc1ByZXZQYWdlIiwibmV4dFBhZ2UiLCJudW1iZXJPZk5laWdoYm9ycyIsImN1cnJlbnRQYWdlIiwicHJldlBhZ2UiLCJ0b3RhbFBhZ2VzIiwicGFnZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZUVuZEluZGV4IiwidW5zaGlmdCIsIk5vZGVUeXBlIiwiUmVsYXRpb25zaGlwVGFibGVQYWdpbmF0aW9uIiwiUGFnaW5hdGlvbiIsImRpc2FibGVUYWJsZSIsImluaXRpYWxEYXRhRnJvbVByb3BzIiwiaW5pdGlhbERyYXdlckRhdGEiLCJzZXRUYWJsZSIsIm9wZW5Db2x1bW5TZWxlY3RvciIsInNldE9wZW5Db2x1bW5TZWxlY3RvciIsImlzUG9seW1vcnBoaWMiLCJzZXRTZWxlY3RlZENvbGxlY3Rpb24iLCJvcGVuRHJhd2VyV2hlblJlbGF0aW9uQ2hhbmdlcyIsImN1cnJlbnREcmF3ZXJJRCIsInNldEN1cnJlbnREcmF3ZXJJRCIsImlzTG9hZGluZ1RhYmxlIiwic2V0SXNMb2FkaW5nVGFibGUiLCJzZXRDb2x1bW5TdGF0ZSIsInJlbmRlclRhYmxlIiwiZGVmYXVsdFNvcnQiLCJyZW5kZXJSb3dUeXBlcyIsIm5ld0RhdGEiLCJUYWJsZSIsIk5ld1RhYmxlIiwiZW5hYmxlUm93U2VsZWN0aW9ucyIsImhhbmRsZVRhYmxlUmVuZGVyIiwiZm91bmREb2NJbmRleCIsIndpdGhOZXdPclVwZGF0ZWREYXRhIiwibmV3RG9jcyIsIm9uRHJhd2VyRGVsZXRlIiwiY2FuQ3JlYXRlIiwic2VsZWN0ZWRDb2xsZWN0aW9uIiwibWVtb2l6ZWRMaXN0UXVlcnkiLCJvbkRyYXdlclNhdmUiLCJnZXRJbml0aWFsRHJhd2VyRGF0YSIsImZsYXR0ZW5lZEZpZWxkcyIsImtlZXBQcmVzZW50YXRpb25hbEZpZWxkcyIsImhhc01hbnkiLCJuZXh0U2VnbWVudHMiLCJibG9ja0luaXRpYWxEYXRhIiwiSm9pbkZpZWxkQ29tcG9uZW50Iiwib24iLCJ0YXJnZXRGaWVsZCIsImVxdWFscyIsImFuZCIsIlJlbGF0aW9uc2hpcFRhYmxlIiwiam9pblBhdGgiLCJKb2luRmllbGQiLCJKU09ORmllbGRDb21wb25lbnQiLCJqc29uU2NoZW1hIiwiaW5zZXJ0U3BhY2VzIiwidGFiU2l6ZSIsImZvcm1hdEpTT04iLCJzZXRKc29uRXJyb3IiLCJqc29uRXJyb3IiLCJ2YWx1ZV8xIiwiaGFuZGxlTW91bnQiLCJtb25hY28iLCJqc29uRGVmYXVsdHMiLCJlbmFibGVTY2hlbWFSZXF1ZXN0Iiwic2NoZW1hcyIsInVyaSIsImVkaXRvciIsIm5ld1VyaSIsImNyeXB0byIsInV1aWR2NCIsInNldE1vZGVsIiwiY3JlYXRlTW9kZWwiLCJuZXdTdHJpbmdWYWx1ZSIsIkpTT05GaWVsZCIsIk51bWJlckZpZWxkQ29tcG9uZW50IiwicGxhY2Vob2xkZXJGcm9tUHJvcHMiLCJzdGVwIiwiSW5maW5pdHkiLCJuZXdWYWwiLCJwYXJzZUZsb2F0Iiwic2V0VmFsdWVUb1JlbmRlciIsImhhbmRsZUhhc01hbnlDaGFuZ2UiLCJ2YWxfMCIsImlzT3Zlckhhc01hbnkiLCJ2YWx1ZVRvUmVuZGVyIiwiTnVtYmVyRmllbGQiLCJjb29yZGluYXRlcyIsImdldENvb3JkaW5hdGVGaWVsZExhYmVsIiwic3VmZml4IiwiZmllbGRMYWJlbCIsIlBvaW50RmllbGQiLCJQb2ludEZpZWxkQ29tcG9uZW50Iiwib3B0aW9uSXNPYmplY3QiLCJSYWRpbyIsIlJhZGlvR3JvdXBGaWVsZENvbXBvbmVudCIsImRpc2FibGVNb2RpZnlpbmdGb3JtRnJvbVByb3BzIiwibGF5b3V0IiwidmFsaWRhdGlvbk9wdGlvbnMiLCJ2YWx1ZUZyb21Db250ZXh0IiwiUmFkaW9Hcm91cEZpZWxkIiwid29yZEJvdW5kYXJpZXNSZWdleCIsImhhc0F1dG9zYXZlRW5hYmxlZCIsIkFkZE5ld1JlbGF0aW9uIiwiQnV0dG9uRnJvbVByb3BzIiwicmVsYXRlZFRvTWFueSIsInNldENvbGxlY3Rpb25Db25maWciLCJpc05ld1ZhbHVlIiwic2V0UG9wdXBPcGVuIiwib25Qb3B1cFRvZ2dsZSIsImNvbGxlY3Rpb25fMCIsInBvcHVwT3BlbiIsIkxpc3REcmF3ZXJDb250ZW50IiwiY29sbGVjdGlvblNsdWdzIiwiZGlzYWJsZVF1ZXJ5UHJlc2V0cyIsIm9uQnVsa1NlbGVjdCIsImNvbGxlY3Rpb25TbHVnRnJvbVByb3BzIiwiTGlzdFZpZXciLCJzZXRMaXN0VmlldyIsImVuYWJsZWRDb2xsZWN0aW9ucyIsInNldFNlbGVjdGVkT3B0aW9uIiwiaW5pdGlhbFNlbGVjdGlvbiIsImRvY3VtZW50RHJhd2VyU2x1ZyIsInVwZGF0ZVNlbGVjdGVkT3B0aW9uIiwicmVmcmVzaCIsImRpc2FibGVCdWxrRGVsZXRlIiwiZGlzYWJsZUJ1bGtFZGl0IiwiTGlzdCIsIm9uQ3JlYXRlTmV3Iiwic2V0TXlTZWxlY3RlZE9wdGlvbiIsImluY29taW5nU2VsZWN0aW9uIiwicmVmcmVzaFNlbGYiLCJpbmNvbWluZ0NvbGxlY3Rpb25TbHVnIiwiY3JlYXRlTmV3RHJhd2VyU2x1ZyIsImZvcm1hdExpc3REcmF3ZXJTbHVnIiwiTGlzdERyYXdlclRvZ2dsZXIiLCJMaXN0RHJhd2VyIiwidXNlTGlzdERyYXdlciIsImNvbGxlY3Rpb25TbHVnc0Zyb21Qcm9wcyIsInVwbG9hZHMiLCJzZXRDb2xsZWN0aW9uU2x1Z3MiLCJmaWx0ZXJlZENvbGxlY3Rpb25TbHVncyIsIl9jcmVhdGVFbGVtZW50IiwidXNlRGVib3VuY2VkQ2FsbGJhY2siLCJ3YWl0IiwibGF0ZXIiLCJ1c2VRdWV1ZSIsInF1ZXVlIiwicXVldWVUYXNrIiwicHJvY2Vzc1F1ZXVlIiwiYmVmb3JlUHJvY2VzcyIsImxhdGVzdFRhc2siLCJlcnIiLCJhZnRlclByb2Nlc3MiLCJtb3N0UmVjZW50VXBkYXRlIiwicmVwb3J0VXBkYXRlIiwiRG9jdW1lbnRFdmVudHNQcm92aWRlciIsInVzZURvY3VtZW50RXZlbnRzIiwic2FuaXRpemVGaWx0ZXJPcHRpb25zUXVlcnkiLCJpbiIsImV4aXN0cyIsImNyZWF0ZVJlbGF0aW9uTWFwIiwicmVsYXRpb25NYXAiLCJmaW5kT3B0aW9uc0J5VmFsdWUiLCJhbGxvd0VkaXQiLCJtYXRjaGVkT3B0aW9uIiwib3B0R3JvdXAiLCJyZWR1Y2VUb0lEcyIsInNvcnRPcHRpb25zIiwibG9jYWxlQ29tcGFyZSIsIm9wdGlvbnNSZWR1Y2VyIiwibG9hZGVkSURzIiwibmV3T3B0aW9ucyIsIm9wdGlvbnNUb0FkZFRvIiwib3B0aW9uR3JvdXAiLCJuZXdTdWJPcHRpb25zIiwiZG9jU3ViT3B0aW9ucyIsImRvY1RpdGxlIiwic3ViT3B0aW9ucyIsImV4ZW1wdFZhbHVlcyIsImNsZWFyZWRPcHRpb25zIiwiZXhlbXB0VmFsdWUiLCJpbmRleE9mR3JvdXAiLCJmb3VuZE9wdGlvbiIsIm9uRG9jdW1lbnRPcGVuIiwiX3RlbXAzIiwiYXBwZWFyYW5jZSIsImZvcm1hdERpc3BsYXllZE9wdGlvbnMiLCJtYXhSZXN1bHRzUGVyUmVxdWVzdCIsInNlcnZlclVSTCIsInNldEN1cnJlbnRseU9wZW5SZWxhdGlvbnNoaXAiLCJsYXN0RnVsbHlMb2FkZWRSZWxhdGlvbiIsInNldExhc3RGdWxseUxvYWRlZFJlbGF0aW9uIiwibGFzdExvYWRlZFBhZ2UiLCJzZXRFcnJvckxvYWRpbmciLCJzZXRMYXN0TG9hZGVkUGFnZSIsImVycm9yTG9hZGluZyIsInNldFNlYXJjaCIsInNldEVuYWJsZVdvcmRCb3VuZGFyeVNlYXJjaCIsImVuYWJsZVdvcmRCb3VuZGFyeVNlYXJjaCIsImhhc0xvYWRlZEZpcnN0UGFnZVJlZiIsInNldE1lbnVJc09wZW4iLCJkaXNwYXRjaE9wdGlvbnMiLCJjdXJyZW50bHlPcGVuUmVsYXRpb25zaGlwIiwibGlzdERyYXdlckZpbHRlck9wdGlvbnMiLCJuZXdGaWx0ZXJPcHRpb25zIiwidmFsdWVzQnlSZWxhdGlvbiIsImNsb3NlTGlzdERyYXdlciIsIm9wZW5MaXN0RHJhd2VyIiwib25MaXN0U2VsZWN0IiwidXBkYXRlUmVzdWx0cyIsImxhc3RGdWxseUxvYWRlZFJlbGF0aW9uQXJnIiwib25TdWNjZXNzIiwidmFsdWVBcmciLCJsYXN0RnVsbHlMb2FkZWRSZWxhdGlvblRvVXNlIiwicmVsYXRpb25zIiwicmVzdWx0c0ZldGNoZWQiLCJyZWxhdGlvbnNUb0ZldGNoIiwiaGFzTWFueUFyZyIsInByaW9yUmVsYXRpb24iLCJyZWxhdGlvbl8wIiwiZmlsdGVyT3B0aW9uc18wIiwibGFzdExvYWRlZFBhZ2VUb1VzZSIsImxhc3RMb2FkZWRQYWdlQXJnIiwicmVsYXRpb25GaWx0ZXJPcHRpb24iLCJmaWVsZFRvU2VhcmNoIiwiZmllbGRUb1NvcnQiLCJkcmFmdCIsInNlYXJjaEFyZyIsInVwZGF0ZVNlYXJjaCIsInNlYXJjaEFyZ18wIiwidXBkYXRlUmVzdWx0c0VmZmVjdEV2ZW50IiwiaGFzTWFueUFyZ18wIiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJvcHRpb25zXzAiLCJoYW5kbGVWYWx1ZUNoYW5nZSIsInJlbGF0aW9uTWFwXzAiLCJoYXNNYW55QXJnXzEiLCJwcmlvclJlbGF0aW9uXzAiLCJyZWxhdGlvbl8xIiwicXVlcnlfMCIsInJlc3BvbnNlXzAiLCJtb3N0UmVjZW50VXBkYXRlXzAiLCJoYW5kbGVEb2N1bWVudFVwZGF0ZUV2ZW50IiwiaXNNYXRjaGluZ1VwZGF0ZSIsImN1cnJlbnRWYWx1ZSIsInZhbHVlc1RvU2V0Iiwib3B0aW9uXzEiLCJhcmdzXzAiLCJvcHRpb25fMiIsInNlYXJjaEZpbHRlciIsImJyZWFrQXBhcnRUaHJlc2hvbGQiLCJsYWJlbFN0cmluZyIsImluZGV4T2ZTcGFjZSIsImNvbGxlY3Rpb25TbHVnXzAiLCJvcGVuSW5OZXdUYWIiLCJkb2NVcmwiLCJhcmdzXzEiLCJwcmV2VmFsdWUiLCJpc0ZpcnN0UmVuZGVyUmVmIiwicmVsYXRpb25fMiIsImlkT25seSIsImlzSWRPbmx5IiwiaXNMaXN0RHJhd2VyT3BlbiIsIm9wdGlvbl8zIiwibmV3U2VhcmNoIiwiUmVsYXRpb25zaGlwRmllbGRDb21wb25lbnQiLCJyZWxhdGlvblRvUHJvcCIsImhhbmRsZUNoYW5nZUhhc011bHRpIiwiZGlzYWJsZUZvcm1Nb2RpZmljYXRpb24iLCJpZHhfMCIsImRhdGFUb1NldCIsInZhbF8xIiwibmV3VmFsdWVfMCIsImhhbmRsZUNoYW5nZVNpbmdsZSIsImRpc2FibGVGb3JtTW9kaWZpY2F0aW9uXzAiLCJkYXRhVG9TZXRfMCIsIm1lbW9pemVkVmFsdWUiLCJ2YWxfMiIsIm1lbW9pemVkSW5pdGlhbFZhbHVlIiwidmFsXzMiLCJSZWxhdGlvbnNoaXBGaWVsZCIsIlJpY2hUZXh0RmllbGQiLCJSb3dGaWVsZENvbXBvbmVudCIsIlJvd0ZpZWxkIiwiU2VsZWN0SW5wdXQiLCJtYXRjaGluZ09wdGlvbiIsIm9wdGlvbl8wIiwibWF0Y2hpbmdPcHRpb25fMCIsIlNlbGVjdEZpZWxkQ29tcG9uZW50IiwiU2VsZWN0RmllbGQiLCJ0b0tlYmFiQ2FzZSIsImltcG9ydF9vYmplY3RfdG9fZm9ybWRhdGEiLCJkZWVwQ29weU9iamVjdFNpbXBsZVdpdGhvdXRSZWFjdENvbXBvbmVudHMiLCJnZXREYXRhQnlQYXRoRnVuYyIsImdldFNpYmxpbmdEYXRhRnVuYyIsImhhc0RyYWZ0VmFsaWRhdGlvbkVuYWJsZWQiLCJyZWR1Y2VGaWVsZHNUb1ZhbHVlcyIsImdyb3VwU2ltaWxhckVycm9ycyIsImNyZWF0ZUVycm9yc0Zyb21NZXNzYWdlIiwiY29sb25JbmRleCIsImludHJvIiwiZXJyb3JzU3RyaW5nIiwiZXJyb3JzIiwicmVwbGFjZUFsbCIsIkZpZWxkRXJyb3JzVG9hc3QiLCJ1c2VEZWJvdW5jZWRFZmZlY3QiLCJlZmZlY3QiLCJkZWJvdW5jZWRFZmZlY3QiLCJzZXREZWJvdW5jZWRFZmZlY3QiLCJVcGxvYWRIYW5kbGVyc1Byb3ZpZGVyIiwidXBsb2FkSGFuZGxlcnMiLCJzZXRVcGxvYWRIYW5kbGVycyIsImdldFVwbG9hZEhhbmRsZXIiLCJ1cGxvYWRIYW5kbGVyc18wIiwiY2xvbmUiLCJzZXRVcGxvYWRIYW5kbGVyIiwidXNlVXBsb2FkSGFuZGxlcnMiLCJlcnJvck1lc3NhZ2VzIiwicGFyc2VBcnJheUZpZWxkUGF0aCIsImxhc3ROdW1lcmljSW5kZXgiLCJhcnJheVBhdGgiLCJtZXJnZVNlcnZlckZvcm1TdGF0ZSIsImFjY2VwdFZhbHVlcyIsImN1cnJlbnRTdGF0ZSIsImluY29taW5nU3RhdGUiLCJpbmNvbWluZ0ZpZWxkIiwiYWRkZWRCeVNlcnZlciIsInNob3VsZEFjY2VwdFZhbHVlIiwib3ZlcnJpZGVMb2NhbENoYW5nZXMiLCJpc01vZGlmaWVkIiwiY2xpZW50Um93SWQiLCJzZXJ2ZXJSb3dJZCIsInNhbml0aXplZEluY29taW5nRmllbGQiLCJzZXJ2ZXJSb3ciLCJpbmRleEluQ3VycmVudFN0YXRlIiwiZXhpc3RpbmdSb3ciLCJuZXdSb3ciLCJzZXBhcmF0ZVJvd3MiLCJyZW1haW5pbmdGaWVsZHMiLCJpbmNvbWluZ1Jvd3MiLCJuZXdSb3dzIiwiZmxhdHRlblJvd3MiLCJzdWJGaWVsZHMiLCJzdWJQYXRoIiwic3ViRmllbGQiLCJmaWVsZFJlZHVjZXIiLCJyb3dJbmRleEZyb21BcmdzIiwic3ViRmllbGRTdGF0ZSIsIndpdGhOZXdSb3ciLCJzaWJsaW5nUm93cyIsImZpZWxkRXJyb3JQYXRoIiwiZmllbGRTdGF0ZSIsImZpZWxkRXJyb3JQYXRocyIsImVycm9yQUNDIiwiY2hhbmdlZCIsIm5ld0Vycm9yUGF0aHMiLCJuZXdSb3dJRCIsIm5ld1Jvd1N0YXRlIiwiaWRTdGF0ZSIsIm5ld05lc3RlZEZpZWxkSUQiLCJwYXJlbnRGaWVsZFJvd3MiLCJwcmV2U3RhdGVSZWYiLCJzZXJ2ZXJTdGF0ZSIsInRvcExldmVsUm93cyIsImNvcHlPZk1vdmluZ1JvdyIsInJvd3NXaXRoaW5GaWVsZCIsImNvcHlPZk1vdmluZ1JvdzIiLCJyb3dzTWV0YWRhdGEiLCJyb3dJbmRleEFyZyIsIm9wdGltaXplIiwibmV3RmllbGQiLCJvbGRGaWVsZCIsInNhbml0aXplIiwic3VibWl0IiwidmFsaWRhdGVGb3JtIiwiY3JlYXRlRm9ybURhdGEiLCJzZXRQcm9jZXNzaW5nIiwic2V0QmFja2dyb3VuZFByb2Nlc3NpbmciLCJzZXRTdWJtaXR0ZWQiLCJyZXNldCIsImluaXRDb250ZXh0U3RhdGUiLCJidWlsZFJvd0Vycm9ycyIsImZvcm1SZWYiLCJnZXRGaWVsZCIsInJlcGxhY2VGaWVsZFJvdyIsInNldERpc2FibGVkIiwic2V0SXNWYWxpZCIsIkZvcm0iLCJ2YWxpZGF0ZURyYWZ0cyIsImJlZm9yZVN1Ym1pdCIsImRpc2FibGVkRnJvbVByb3BzIiwiZGlzYWJsZVN1Y2Nlc3NTdGF0dXMiLCJkaXNhYmxlVmFsaWRhdGlvbk9uU3VibWl0IiwiaGFuZGxlUmVzcG9uc2UiLCJpc0RvY3VtZW50Rm9ybSIsImluaXRpYWxpemluZ0Zyb21Qcm9wcyIsIm9uU3VibWl0IiwicmVkaXJlY3QiLCJzdWJtaXR0ZWRGcm9tUHJvcHMiLCJ3YWl0Rm9yQXV0b2NvbXBsZXRlIiwic2V0SW5pdGlhbGl6aW5nIiwiYmFja2dyb3VuZFByb2Nlc3NpbmciLCJfc2V0QmFja2dyb3VuZFByb2Nlc3NpbmciLCJiYWNrZ3JvdW5kUHJvY2Vzc2luZ1JlZiIsIm1vZGlmaWVkV2hpbGVQcm9jZXNzaW5nUmVmIiwiX3NldE1vZGlmaWVkIiwiYWJvcnRSZXNldEZvcm1SZWYiLCJmaWVsZHNSZWR1Y2VyIiwicHJldkZvcm1TdGF0ZSIsInZhbGlkYXRlZEZpZWxkU3RhdGUiLCJ2YWxpZGF0aW9uUHJvbWlzZXMiLCJ2YWxpZGF0ZWRGaWVsZCIsInZhbGlkYXRpb25SZXN1bHQiLCJhbGwiLCJhY3Rpb25BcmciLCJkaXNhYmxlRm9ybVdoaWxlUHJvY2Vzc2luZyIsImRpc2FibGVTdWNjZXNzU3RhdHVzRnJvbUFyZ3MiLCJtZXRob2RUb1VzZSIsIm92ZXJyaWRlc0Zyb21BcmdzIiwic2tpcFZhbGlkYXRpb24iLCJkaXNhYmxlVG9hc3QiLCJlcnJvclRvYXN0Iiwic3VjY2Vzc1RvYXN0IiwiaGFzRm9ybVN1Ym1pdEFjdGlvbiIsInNlcmlhbGl6YWJsZUZvcm1TdGF0ZSIsImV4Y2x1ZGVGaWxlcyIsInJldmFsaWRhdGVkRm9ybVN0YXRlIiwicHJpb3JPbkNoYW5nZSIsImJlZm9yZVN1Ym1pdEZuIiwiZm9ybURhdGEiLCJtZXJnZU92ZXJyaWRlRGF0YSIsImNvbnRlbnRUeXBlIiwiaXNKU09OIiwibmV3Rm9ybVN0YXRlIiwiZmllbGRFcnJvcnMiLCJub25GaWVsZEVycm9ycyIsImZpZWxkRXJycyIsIm5vbkZpZWxkRXJycyIsIm5ld0ZpZWxkRXJycyIsIm5ld05vbkZpZWxkRXJycyIsImRhdGFFcnJvciIsInN0YXR1c1RleHQiLCJkYXRhRnJvbUFyZ3MiLCJmaWxlIiwiY2xpZW50VXBsb2FkQ29udGV4dCIsInVwZGF0ZUZpbGVuYW1lIiwiZGF0YVRvU2VyaWFsaXplIiwiX3BheWxvYWQiLCJpbmRpY2VzIiwibnVsbHNBc1VuZGVmaW5lZHMiLCJkb2NQcmVmZXJlbmNlcyIsInJlbmRlckFsbEZpZWxkcyIsImN1cnJlbnRSb3dzIiwiYWJvcnRPbkNoYW5nZSIsImhhbmRsZUxvY2FsZUNoYW5nZSIsImV4ZWN1dGVPbkNoYW5nZSIsIm9uQ2hhbmdlRm4iLCJEb2N1bWVudEZvcm1Db250ZXh0Q29tcG9uZW50IiwiZG9jdW1lbnRGb3JtQ29udGV4dFByb3BzIiwibm9WYWxpZGF0ZSIsInRhYkhhc05hbWUiLCJUYWJDb21wb25lbnQiLCJoaWRkZW4iLCJzZXRJc0FjdGl2ZSIsIlRhYnNGaWVsZENvbXBvbmVudCIsInRhYlN0YXRlcyIsImFjdGl2ZVRhYkluZGV4Iiwic2V0QWN0aXZlVGFiSW5kZXgiLCJ0YWJzUHJlZktleSIsImFjdGl2ZVRhYkluZm8iLCJhY3RpdmVUYWJDb25maWciLCJhY3RpdmVUYWJEZXNjcmlwdGlvbiIsImluY29taW5nVGFiSW5kZXgiLCJoYW5kbGVUYWJDaGFuZ2UiLCJnZXRJbml0aWFsUHJlZiIsImV4aXN0aW5nUHJlZmVyZW5jZXNfMCIsImluaXRpYWxJbmRleCIsIm5leHRUYWIiLCJ0MjAiLCJ0MTkiLCJ0MjEiLCJ0MjIiLCJpbmRleF8wIiwicGFzc2VzQ29uZGl0aW9uXzIiLCJ0YWJfMCIsIlRhYkNvbnRlbnQiLCJUYWJzRmllbGQiLCJwYXNzZXNDb25kaXRpb25fMCIsInBhc3Nlc0NvbmRpdGlvbl8xIiwiVGV4dElucHV0IiwiaHRtbEF0dHJpYnV0ZXMiLCJlZGl0YWJsZUNsYXNzTmFtZSIsIm9uQmx1ciIsImNvbnRlbnRFZGl0YWJsZSIsImNsYXNzTGlzdCIsImV2ZW50XzEiLCJpbm5lclRleHQiLCJuZXdWYWx1ZXMiLCJUZXh0RmllbGRDb21wb25lbnQiLCJtaW5MZW5ndGgiLCJyZW5kZXJSVEwiLCJUZXh0RmllbGQiLCJUZXh0YXJlYUlucHV0IiwiVGV4dGFyZWFGaWVsZENvbXBvbmVudCIsIlRleHRhcmVhRmllbGQiLCJVSUZpZWxkIiwidmFsaWRhdGVNaW1lVHlwZSIsIlVwbG9hZENvbnRyb2xzUHJvdmlkZXIiLCJ1cGxvYWRDb250cm9sRmlsZU5hbWUiLCJzZXRVcGxvYWRDb250cm9sRmlsZU5hbWUiLCJ1cGxvYWRDb250cm9sRmlsZVVybCIsInNldFVwbG9hZENvbnRyb2xGaWxlVXJsIiwidXBsb2FkQ29udHJvbEZpbGUiLCJzZXRVcGxvYWRDb250cm9sRmlsZSIsInVzZVVwbG9hZENvbnRyb2xzIiwiaGFuZGxlRHJhZ092ZXIiLCJEcm9wem9uZSIsImRyb3B6b25lU3R5bGUiLCJtdWx0aXBsZUZpbGVzIiwiZHJvcFJlZiIsImFkZEZpbGVzIiwic2V0RHJhZ2dpbmciLCJmaWxlcyIsImRhdGFUcmFuc2ZlciIsIkRhdGFUcmFuc2ZlciIsImhhbmRsZURyYWdFbnRlciIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZURyb3AiLCJlXzIiLCJkaXYiLCJEcmF3ZXJDbG9zZUJ1dHRvbiIsIkRyYXdlckhlYWRlciIsIm9uQ2xvc2UiLCJBZGRGaWxlc1ZpZXciLCJhY2NlcHRNaW1lVHlwZXMiLCJvbkRyb3AiLCJhY2NlcHQiLCJtdWx0aXBsZSIsInVwbG9hZEhhbmRsZXIiLCJkYXRhV2l0aE92ZXJyaWRlcyIsImZvcm1zTWFuYWdlbWVudFJlZHVjZXIiLCJuZXdGb3JtcyIsImZvcm1zIiwiZm9ybUlEIiwicmVtYWluaW5nRm9ybVN0YXRlcyIsInJlbW92ZWRGb3JtIiwiYWZmZWN0ZWRCeVNoaWZ0IiwiYm91bmRlZEFjdGl2ZUluZGV4IiwidG90YWxFcnJvckNvdW50IiwidXBkYXRlZEZvcm1zIiwiYnVsa1VwZGF0ZUZvcm0iLCJkb2N1bWVudFNsb3RzIiwiZ2V0Rm9ybURhdGFSZWYiLCJyZW1vdmVGaWxlIiwic2F2ZUFsbERvY3MiLCJzZXRBY3RpdmVJbmRleCIsInNldEZvcm1Ub3RhbEVycm9yQ291bnQiLCJGb3Jtc01hbmFnZXJQcm92aWRlciIsInNldERvY3VtZW50U2xvdHMiLCJzZXRIYXNTdWJtaXR0ZWQiLCJoYXNJbml0aWFsaXplZFN0YXRlIiwic2V0SGFzSW5pdGlhbGl6ZWRTdGF0ZSIsImhhc0luaXRpYWxpemVkRG9jUGVybWlzc2lvbnMiLCJzZXRIYXNJbml0aWFsaXplZERvY1Blcm1pc3Npb25zIiwic2V0SXNJbml0aWFsaXppbmciLCJmb3Jtc1JlZiIsImluaXRpYWxGaWxlcyIsImluaXRpYWxGb3JtcyIsInNldEluaXRpYWxGaWxlcyIsInNldEluaXRpYWxGb3JtcyIsInNldFN1Y2Nlc3NmdWxseVVwbG9hZGVkIiwidXNlQnVsa1VwbG9hZCIsImlzVXBsb2FkaW5nIiwic2V0SXNVcGxvYWRpbmciLCJzZXRMb2FkaW5nVGV4dCIsImhhc0luaXRpYWxpemVkV2l0aEZpbGVzIiwiaW5pdGlhbFN0YXRlUmVmIiwiYWN0aW9uVVJMIiwiaW5pdGlhbGl6ZVNoYXJlZERvY1Blcm1pc3Npb25zIiwiZG9jQWNjZXNzVVJMIiwiaW5pdGlhbGl6ZVNoYXJlZEZvcm1TdGF0ZSIsImZvcm1TdGF0ZVdpdGhvdXRGaWxlcyIsImN1cnJlbnRGb3Jtc0RhdGEiLCJhZGRGaWxlc0VmZmVjdEV2ZW50IiwiYWRkSW5pdGlhbEZvcm1zIiwiY3VycmVudEZvcm1zIiwiYWN0aXZlRm9ybUlEIiwiZmlsZVZhbHVlIiwidG90YWwiLCJhY3Rpb25VUkxXaXRoUGFyYW1zIiwibWlzc2luZ0ZpbGUiLCJleGNlZWRzTGltaXQiLCJtaXNzaW5nRmlsZW5hbWUiLCJvcmlnaW5hbEZpbGVWYWx1ZSIsImZvcm1TdGF0ZUZvclNlcnZlciIsInJlbWFpbmluZ0Zvcm1zIiwic3VjY2Vzc0NvdW50IiwidXBkYXRlZEZpZWxkcyIsImFmdGVyU3RhdGVVcGRhdGUiLCJuZXdGb3JtRXJyb3JDb3VudCIsInVzZUZvcm1zTWFuYWdlciIsInVuZmxhdHRlbiIsImZpbHRlck91dFVwbG9hZEZpZWxkcyIsImJhc2VVcGxvYWRGaWVsZE5hbWVzIiwiY3JlYXRlTmVzdGVkQ2xpZW50RmllbGRQYXRoIiwiY29tYmluZUZpZWxkTGFiZWwiLCJDdXN0b21MYWJlbCIsImRpc3BsYXkiLCJyZWR1Y2VGaWVsZE9wdGlvbnMiLCJsYWJlbFByZWZpeCIsImZpZWxkc1RvVXNlIiwiaGFzT3BlcmF0aW9uUGVybWlzc2lvbiIsImZpZWxkUGVybWlzc2lvbnMiLCJwYXJlbnROYW1lIiwidW5pcXVlIiwidGFiRmllbGRzIiwiaXNOYW1lZFRhYiIsImZvcm1hdHRlZEZpZWxkIiwiRmllbGRTZWxlY3QiLCJFZGl0TWFueUJ1bGtVcGxvYWRzRHJhd2VyQ29udGVudCIsInNldFNlbGVjdGVkRmllbGRzIiwiYWJvcnRGb3JtU3RhdGVSZWYiLCJzZWxlY3RlZEZpZWxkcyIsImNvbGxlY3Rpb25QZXJtaXNzaW9ucyIsImFib3J0Rm9ybVN0YXRlIiwiaGFuZGxlU3VibWl0IiwicGFpcmVkRGF0YSIsImFjY18wIiwib25GaWVsZFNlbGVjdCIsImFjY18xIiwiUmVuZGVyRmllbGQiLCJjbGllbnRGaWVsZENvbmZpZyIsIkVkaXRNYW55QnVsa1VwbG9hZHMiLCJoYXNVcGRhdGVQZXJtaXNzaW9uIiwiQWN0aW9uc0JhciIsIm5leHRJbmRleF8wIiwiZGlzY2FyZEJ1bGtVcGxvYWRNb2RhbFNsdWciLCJEaXNjYXJkV2l0aG91dFNhdmluZyIsImZpZWxkSXNTaWRlYmFyIiwiVHJhc2hJY29uIiwic3Ryb2tlIiwiQWZ0ZXJGaWVsZHMiLCJCZWZvcmVGaWVsZHMiLCJmb3JjZVNpZGViYXJXcmFwIiwiaXNUcmFzaGVkIiwic2NoZW1hUGF0aFNlZ21lbnRzIiwiaGFzU2lkZWJhckZpZWxkcyIsIm1haW5GaWVsZHMiLCJzaWRlYmFyRmllbGRzIiwiVHJhc2hCYW5uZXIiLCJGb2xkZXJJY29uIiwiZXh0cmFjdElEIiwiZm9ybWF0Rm9sZGVyT3JEb2N1bWVudEl0ZW0iLCJncm91cEl0ZW1JRHNCeVJlbGF0aW9uIiwiYWN0aXZlQ29sbGVjdGlvbkZvbGRlclNsdWdzIiwiYWxsQ29sbGVjdGlvbkZvbGRlclNsdWdzIiwiYWxsb3dDcmVhdGVDb2xsZWN0aW9uU2x1Z3MiLCJicmVhZGNydW1icyIsImNoZWNrSWZJdGVtSXNEaXNhYmxlZCIsImNsZWFyU2VsZWN0aW9ucyIsImN1cnJlbnRGb2xkZXIiLCJkcmFnT3ZlcmxheUl0ZW0iLCJmb2N1c2VkUm93SW5kZXgiLCJmb2xkZXJDb2xsZWN0aW9uQ29uZmlnIiwiZm9sZGVyQ29sbGVjdGlvblNsdWciLCJmb2xkZXJGaWVsZE5hbWUiLCJmb2xkZXJJRCIsIkZvbGRlclJlc3VsdHNDb21wb25lbnQiLCJmb2xkZXJUeXBlIiwiZ2V0Rm9sZGVyUm91dGUiLCJnZXRTZWxlY3RlZEl0ZW1zIiwiaXRlbUtleXNUb01vdmUiLCJtb3ZlVG9Gb2xkZXIiLCJvbkl0ZW1DbGljayIsIm9uSXRlbUtleVByZXNzIiwicmVmaW5lRm9sZGVyRGF0YSIsInNlbGVjdGVkRm9sZGVyQ29sbGVjdGlvbnMiLCJzZWxlY3RlZEl0ZW1LZXlzIiwic2V0QnJlYWRjcnVtYnMiLCJzZXRGb2N1c2VkUm93SW5kZXgiLCJzZXRJc0RyYWdnaW5nIiwic3ViZm9sZGVycyIsIkZvbGRlclByb3ZpZGVyIiwiYWN0aXZlQ29sbGVjdGlvblNsdWdzIiwiYWxsb3dNdWx0aVNlbGVjdGlvbiIsImJhc2VGb2xkZXJQYXRoIiwiX2JyZWFkY3J1bWJzRnJvbVByb3BzIiwiSW5pdGlhbEZvbGRlclJlc3VsdHNDb21wb25lbnQiLCJvbkl0ZW1DbGlja0Zyb21Qcm9wcyIsInBhcmVudEZvbGRlckNvbnRleHQiLCJ1c2VGb2xkZXIiLCJsb2NhbGVDb2RlIiwiY3VycmVudGx5U2VsZWN0ZWRJbmRleGVzIiwic2V0U2VsZWN0ZWRGb2xkZXJDb2xsZWN0aW9ucyIsInNldEZvbGRlclJlc3VsdHNDb21wb25lbnQiLCJmb2xkZXJzIiwic2V0Q3VycmVudFF1ZXJ5Iiwic2V0U2VsZWN0ZWRJdGVtS2V5cyIsInNldERyYWdPdmVybGF5SXRlbSIsImxhc3RDbGlja1RpbWUiLCJ0b3RhbENvdW50IiwidXBkYXRlVVJMIiwicXVlcnlQYXJhbXMiLCJ0b0ZvbGRlcklEIiwiaXRlbUtleSIsIm5hdmlnYXRlQWZ0ZXJTZWxlY3Rpb24iLCJoYW5kbGVTaGlmdFNlbGVjdGlvbiIsInRhcmdldEluZGV4IiwiZXhpc3RpbmdJbmRleGVzIiwiZmlyc3RTZWxlY3RlZEluZGV4IiwibGFzdFNlbGVjdGVkSW5kZXgiLCJpc1dpdGhpbkJvdW5kcyIsImFuY2hvckluZGV4IiwiZGlzdGFuY2VUb0ZpcnN0IiwiZGlzdGFuY2VUb0xhc3QiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJuZXdSYW5nZUluZGV4ZXMiLCJ1cGRhdGVTZWxlY3Rpb25zIiwiaW5kZXhlcyIsImFsbEl0ZW1zIiwibmV3U2VsZWN0ZWRGb2xkZXJDb2xsZWN0aW9ucyIsIm5ld1NlbGVjdGVkSXRlbUtleXMiLCJjdXJyZW50SXRlbSIsImlzU2hpZnRQcmVzc2VkIiwiaXNDdHJsUHJlc3NlZCIsImlzQ3VycmVudGx5U2VsZWN0ZWQiLCJjdXJyZW50SXRlbUluZGV4IiwibmV3SXRlbUluZGV4Iiwic2VsZWN0ZWRJbmRleGVzIiwibmV3SXRlbSIsInByZXZJbmRleCIsImNsaWNrZWRJdGVtIiwiZG91YmxlQ2xpY2tlZCIsIm92ZXJsYXlJdGVtS2V5IiwiaXRlbXNUb01vdmUiLCJmb2xkZXJBY2NlcHRzSXRlbSIsImlzVXBsb2FkIiwiY2FjaGluZ0VuYWJsZWQiLCJjbGVhclJvdXRlQ2FjaGUiLCJSb3V0ZUNhY2hlIiwiY2xlYXJBZnRlclBhdGhuYW1lQ2hhbmdlIiwiaGFuZGxlUG9wU3RhdGUiLCJwYXRobmFtZV8wIiwiaGFuZGxlUGF0aG5hbWVDaGFuZ2UiLCJ1c2VSb3V0ZUNhY2hlIiwiYnV0dG9uSWQiLCJwcm9ncmFtbWF0aWNTdWJtaXQiLCJEcmF3ZXJBY3Rpb25IZWFkZXIiLCJzYXZlTGFiZWwiLCJGb3JtU3VibWl0IiwiRHJhd2VyQ29udGVudENvbnRhaW5lciIsIkxpc3RDcmVhdGVOZXdEb2NJbkZvbGRlckJ1dHRvbiIsImJ1dHRvbkxhYmVsIiwiZm9sZGVyQXNzaWduZWRDb2xsZWN0aW9ucyIsIm9uQ3JlYXRlU3VjY2VzcyIsInNsdWdQcmVmaXgiLCJuZXdEb2NJbkZvbGRlckRyYXdlclNsdWciLCJGb2xkZXJEb2N1bWVudERyYXdlciIsImNsb3NlRm9sZGVyRHJhd2VyIiwib3BlbkZvbGRlckRyYXdlciIsImNyZWF0ZUNvbGxlY3Rpb25TbHVnIiwic2V0Q3JlYXRlQ29sbGVjdGlvblNsdWciLCJSZWN1cnNpdmVUcmFuc2xhdGlvbiIsInRyYW5zbGF0aW9uU3RyaW5nIiwicmVnZXgiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJlbGVtZW50S2V5IiwiUmVnRXhwIiwiVHJhbnNsYXRpb24iLCJpMThuS2V5IiwidmFyaWFibGVzIiwic3RyaW5nV2l0aFZhcmlhYmxlcyIsIkZvbGRlckJyZWFkY3J1bWJzIiwiY3J1bWIiLCJEcm9wcGFibGVCcmVhZGNydW1iIiwiQ29sb3JlZEZvbGRlckljb24iLCJiYXNlTW9kYWxTbHVnIiwiY29uZmlybU1vZGFsU2x1ZyIsIk1vdmVJdGVtc1RvRm9sZGVyRHJhd2VyIiwiTG9hZEZvbGRlckRhdGEiLCJzZXRTdWJmb2xkZXJzIiwic2V0RG9jdW1lbnRzIiwiaGFzTG9hZGVkIiwic2V0Rm9sZGVySUQiLCJzZXRIYXNMb2FkZWQiLCJoYXNMb2FkZWRSZWYiLCJmb2xkZXJJRFRvUG9wdWxhdGUiLCJwb3B1bGF0ZU1vdmVUb0ZvbGRlckRyYXdlciIsImJyb3dzZUJ5Rm9sZGVyIiwiY29sbGVjdGlvbnNUb0Rpc3BsYXkiLCJDb250ZW50IiwiZnJvbUZvbGRlcklEIiwiZnJvbUZvbGRlck5hbWUiLCJza2lwQ29uZmlybU1vZGFsIiwic2V0Rm9sZGVyQWRkZWRUb1VuZGVybHlpbmdGb2xkZXIiLCJsYXN0Q3J1bWIiLCJnZXRTZWxlY3RlZEZvbGRlciIsIm9uQ29uZmlybU1vdmUiLCJmb2xkZXJBZGRlZFRvVW5kZXJseWluZ0ZvbGRlciIsIkRyYXdlckhlYWRpbmciLCJDb25maXJtYXRpb25NZXNzYWdlIiwiZnJvbUZvbGRlciIsIjEiLCJfdGVtcDQiLCJjaGlsZHJlbl8xIiwiY2hpbGRyZW5fMCIsImNoaWxkcmVuXzQiLCJjaGlsZHJlbl8zIiwiY2hpbGRyZW5fMiIsIk1vdmVEb2NUb0ZvbGRlciIsImN1cnJlbnRQYXJlbnRGb2xkZXIiLCJzZXRGcm9tRm9sZGVyTmFtZSIsImZldGNoRm9sZGVyTGFiZWwiLCJmb2xkZXJEYXRhIiwibW9kYWxJRCIsIk1vdmVEb2NUb0ZvbGRlckJ1dHRvbiIsImRvY0RhdGEiLCJ0aXRsZVRvUmVuZGVyIiwiZm9sZGVyTmFtZSIsIkUiLCJNIiwiUyIsIlAiLCJEIiwiWCIsIkMiLCJSIiwiSyIsIlkiLCJJIiwiZGVmYXVsdENyb3AiLCJ1bml0IiwiRWRpdFVwbG9hZCIsImZpbGVOYW1lIiwiaW5pdGlhbENyb3AiLCJpbml0aWFsRm9jYWxQb2ludCIsInNob3dDcm9wIiwic2hvd0ZvY2FsUG9pbnQiLCJkZWZhdWx0Rm9jYWxQb3NpdGlvbiIsImZvY2FsUG9zaXRpb24iLCJzZXRGb2NhbFBvc2l0aW9uIiwiY2hlY2tCb3VuZHMiLCJzZXRDaGVja0JvdW5kcyIsInVuY3JvcHBlZFBpeGVsSGVpZ2h0Iiwic2V0VW5jcm9wcGVkUGl4ZWxXaWR0aCIsInNldFVuY3JvcHBlZFBpeGVsSGVpZ2h0IiwiZm9jYWxXcmFwUmVmIiwidW5jcm9wcGVkUGl4ZWxXaWR0aCIsImltYWdlUmVmIiwiY3JvcFJlZiIsImhlaWdodElucHV0UmVmIiwid2lkdGhJbnB1dFJlZiIsInNldEltYWdlTG9hZGVkIiwib25JbWFnZUxvYWQiLCJuYXR1cmFsSGVpZ2h0IiwiZmluZVR1bmVDcm9wIiwiZGltZW5zaW9uIiwiaW50VmFsdWUiLCJwZXJjZW50YWdlIiwic2V0Q3JvcCIsImZpbmVUdW5lRm9jYWxQb3NpdGlvbiIsImNvb3JkaW5hdGUiLCJpbnRWYWx1ZV8wIiwicHJldlBvc2l0aW9uIiwic2F2ZUVkaXRzIiwiY3JvcCIsImZvY2FsUG9pbnQiLCJoZWlnaHRJblBpeGVscyIsImVkaXREcmF3ZXJTbHVnIiwiY2VudGVyRm9jYWxQb2ludCIsImNvbnRhaW5lclJlY3QiLCJib3VuZHNSZWN0IiwieENlbnRlciIsImZpbGVTcmNUb1VzZSIsImltYWdlTG9hZGVkIiwib25Db21wbGV0ZSIsInJlbmRlclNlbGVjdGlvbkFkZG9uIiwib25Mb2FkIiwiYm91bmRzUmVmIiwiaW5pdGlhbFBvc2l0aW9uIiwidmFsdWVfMiIsInZhbHVlXzMiLCJ0b0ZpeGVkIiwidmFsdWVfNCIsIkRyYWdnYWJsZUVsZW1lbnQiLCJkcmFnUmVmIiwibW91c2VYQXJnIiwibW91c2VZQXJnIiwicmVjZW50ZXIiLCJnZXRDb29yZGluYXRlcyIsIm1vdXNlWCIsIm1vdXNlWSIsInhPdXRPZkJvdW5kcyIsInlPdXRPZkJvdW5kcyIsImhhbmRsZU1vdXNlRG93biIsImhhbmRsZU1vdXNlTW92ZSIsInhfMCIsInhfMSIsIm9uTW91c2VNb3ZlIiwib25Nb3VzZVVwIiwiRHJhZ2dhYmxlRmlsZURldGFpbHMiLCJoaWRlUmVtb3ZlRmlsZSIsInJlbW92ZUl0ZW0iLCJ1cGxvYWRDb25maWciLCJmb3JtYXRGaWxlc2l6ZSIsIkNvcHlUb0NsaXBib2FyZCIsImRlZmF1bHRNZXNzYWdlIiwic3VjY2Vzc01lc3NhZ2UiLCJjb3BpZWQiLCJzZXRDb3BpZWQiLCJuYXZpZ2F0b3IiLCJzZXRIb3ZlcmVkIiwiaG92ZXJlZCIsImZpbGVzaXplIiwiY3VzdG9tVXBsb2FkQWN0aW9ucyIsImVuYWJsZUFkanVzdG1lbnRzIiwiaGFuZGxlUmVtb3ZlIiwiaGFzSW1hZ2VTaXplcyIsIkZpbGVNZXRhIiwiY3VzdG9tQWN0aW9ucyIsImVuYWJsZVByZXZpZXdTaXplcyIsIkZpbGVEZXRhaWxzIiwiU3RhdGljRmlsZURldGFpbHMiLCJpbWFnZVNpemVzIiwic29ydFNpemVzIiwib3JkZXJlZFNpemVzIiwiUHJldmlld1NpemVDYXJkIiwibWV0YSIsIlByZXZpZXdTaXplcyIsInNldE9yZGVyZWRTaXplcyIsImdlbmVyYXRlSW1hZ2VVcmwiLCJzZXRTZWxlY3RlZFNpemUiLCJkb2NfMCIsInNlbGVjdGVkU2l6ZSIsIm1haW5QcmV2aWV3U3JjIiwib3JpZ2luYWxJbWFnZSIsIm9yaWdpbmFsRmlsZW5hbWUiLCJwcmV2aWV3U3JjIiwic2l6ZVByZXZpZXdTbHVnIiwiVXBsb2FkQWN0aW9ucyIsImZpbGVUeXBlSXNBZGp1c3RhYmxlIiwiVXBsb2FkIiwiVXBsb2FkX3Y0IiwiVXBsb2FkQ29udHJvbHMiLCJpc0Zvcm1TdWJtaXR0aW5nIiwic2V0RmlsZVNyYyIsInJlbW92ZWRGaWxlIiwic2V0UmVtb3ZlZEZpbGUiLCJzZXRGaWxlbmFtZSIsInNob3dVcmxJbnB1dCIsInNldFNob3dVcmxJbnB1dCIsInVybElucHV0UmVmIiwic2V0RmlsZVVybCIsInVzZVNlcnZlclNpZGVGZXRjaCIsImlzTmV3RmlsZSIsImZpbGVUb0NoYW5nZSIsIm5ld05hbWUiLCJuZXdGaWxlIiwiaGFuZGxlRmlsZU5hbWVDaGFuZ2UiLCJoYW5kbGVGaWxlQ2hhbmdlIiwidXBkYXRlZEZpbGVOYW1lIiwicmVuYW1lRmlsZSIsImhhbmRsZUZpbGVTZWxlY3Rpb24iLCJmaWxlVG9VcGxvYWQiLCJoYW5kbGVGaWxlUmVtb3ZhbCIsIm9uRWRpdHNTYXZlIiwiaGFuZGxlVXJsU3VibWl0IiwiY2xpZW50UmVzcG9uc2UiLCJmaWxlVXJsIiwiYmxvYiIsImRlY29kZVVSSUNvbXBvbmVudCIsInBhc3RlVVJMIiwic2VydmVyUmVzcG9uc2UiLCJibG9iXzAiLCJfc2VydmVyRXJyb3IiLCJjcmVhdGVPYmplY3RVUkwiLCJjYW5SZW1vdmVVcGxvYWQiLCJmb2NhbFBvaW50RW5hYmxlZCIsImhhc1Jlc2l6ZU9wdGlvbnMiLCJoYW5kbGVDb250cm9sRmlsZVVybCIsImhhbmRsZUNvbnRyb2xGaWxlIiwiaGlkZUZpbGVJbnB1dE9uQ3JlYXRlIiwiZm9jYWxYIiwiQ3VzdG9tQWN0aW9uIiwiRWRpdEZvcm0iLCJkb2NTbHVnIiwiQ3VzdG9tVXBsb2FkIiwib25TYXZlRnJvbUNvbnRleHQiLCJhYm9ydE9uQ2hhbmdlUmVmIiwiZW50aXR5U2x1ZyIsIkRvY3VtZW50RmllbGRzIiwiZmllbGROYW1lIiwiUmVwb3J0QWxsRXJyb3JzIiwiR2V0RmllbGRQcm94eSIsImVycm9yQ291bnRSZWYiLCJjdXJyZW50Rm9ybSIsInJlcG9ydEZvcm1FcnJvckNvdW50IiwiZmlsZUlzVmFsaWQiLCJuZXdFcnJvckNvdW50IiwiZGlzdF9leHBvcnRzIiwiV2luZG93SW5mbyIsIldpbmRvd0luZm9Db250ZXh0IiwiV2luZG93SW5mb1Byb3ZpZGVyIiwidXNlV2luZG93SW5mbyIsIndpdGhXaW5kb3dJbmZvIiwid2luZG93SW5mbyIsImJyZWFrcG9pbnRzIiwiYW5pbWF0aW9uUmVmIiwicHJldkV2ZW50c0ZpcmVkIiwid2luZG93V2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJ2aWV3cG9ydFdpZHRoIiwidmlld3BvcnRIZWlnaHQiLCJ3YXRjaGVkQnJlYWtwb2ludHMiLCJtYXRjaE1lZGlhQnJlYWtwb2ludHMiLCJyZXF1ZXN0QW5pbWF0aW9uIiwicmVxdWVzdFRocm90dGxlZEFuaW1hdGlvbiIsIlBhc3NlZENvbXBvbmVudCIsIndpbmRvd0luZm9Db250ZXh0IiwiY3JlYXRlVGh1bWJuYWlsIiwiSW1hZ2UiLCJVUkwiLCJvbmxvYWQiLCJkcmF3SGVpZ2h0IiwiZHJhd1dpZHRoIiwiYXNwZWN0UmF0aW8iLCJtYXhEaW1lbnNpb24iLCJjYW52YXMiLCJPZmZzY3JlZW5DYW52YXMiLCJjdHgiLCJnZXRDb250ZXh0Iiwib3V0cHV0Rm9ybWF0IiwicXVhbGl0eSIsImRyYXdJbWFnZSIsImNvbnZlcnRUb0Jsb2IiLCJyZXZva2VPYmplY3RVUkwiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25lcnJvciIsInJlYWRBc0RhdGFVUkwiLCJjYXRjaCIsImFkZE1vcmVGaWxlc0RyYXdlclNsdWciLCJGaWxlU2lkZWJhciIsIm1heEZpbGVzIiwic2V0U2hvd0ZpbGVzIiwiaW5kZXhUb1JlbW92ZSIsImhhbmRsZVJlbW92ZUZpbGUiLCJmaWxlbGlzdCIsImhhbmRsZUFkZEZpbGVzIiwiZ2V0RmlsZVNpemUiLCJ0b3RhbEZpbGVDb3VudCIsImJ1bGtVcGxvYWRDb2xsZWN0aW9uU2x1ZyIsInNlbGVjdGFibGVDb2xsZWN0aW9ucyIsInNldENvbGxlY3Rpb25TbHVnIiwic2hvd0ZpbGVzIiwiY3VycmVudEZpbGUiLCJTaWRlYmFyVGh1bWJuYWlsIiwiY29sbCIsImFuaW1hdGlvbkRlbGF5IiwiZGVjaW1hbHMiLCJzZXRUaHVtYm5haWxVUkwiLCJnZW5lcmF0ZVRodW1ibmFpbCIsImlzQ2FuY2VsbGVkIiwiQWRkaW5nRmlsZXNWaWV3IiwiYWN0aXZlRm9ybSIsIkRyYXdlckNvbnRlbnQiLCJ1cGxvYWRNaW1lVHlwZXMiLCJtaW1lVHlwZXMiLCJhY2NlcHRlZEZpbGVzIiwiZmlsZVRyYW5zZmVyIiwiY2FuZGlkYXRlRmlsZSIsIkJ1bGtVcGxvYWREcmF3ZXIiLCJzZXRPbkNhbmNlbCIsInNldE9uU3VjY2VzcyIsInNldFNlbGVjdGFibGVDb2xsZWN0aW9ucyIsInN1Y2Nlc3NmdWxseVVwbG9hZGVkIiwicHJldmlvdXNNb2RhbFN0YXRlUmVmIiwibW9kYWxTdGF0ZV8wIiwicHJldmlvdXNNb2RhbFN0YXRlIiwiY3VycmVudE1vZGFsU3RhdGUiLCJvbk1vZGFsU3RhdGVDaGFuZ2VkIiwic2V0TWF4RmlsZXMiLCJCdWxrVXBsb2FkUHJvdmlkZXIiLCJkcmF3ZXJTbHVnUHJlZml4Iiwic2V0Q29sbGVjdGlvbiIsIm9uU3VjY2Vzc0Z1bmN0aW9uIiwic2V0T25TdWNjZXNzRnVuY3Rpb24iLCJvbkNhbmNlbEZ1bmN0aW9uIiwic2V0T25DYW5jZWxGdW5jdGlvbiIsInVzZUJ1bGtVcGxvYWREcmF3ZXJTbHVnIiwibm9ybWFsaXplUmVsYXRpb25zaGlwVmFsdWUiLCJpc1BvbHkiLCJpZFZhbHVlIiwiUmVsYXRpb25zaGlwQ29udGVudCIsImFsbG93UmVtb3ZlIiwiYnl0ZVNpemUiLCJvblJlbW92ZSIsInJlbG9hZERvYyIsInNob3dDb2xsZWN0aW9uU2x1ZyIsInRodW1ibmFpbFNyYyIsInVwZGF0ZWRBdCIsIndpdGhNZXRhIiwibWltZVR5cGVfMCIsImdlbmVyYXRlTWV0YVRleHQiLCJtZXRhVGV4dCIsIlVwbG9hZENhcmQiLCJVcGxvYWRDb21wb25lbnRIYXNNYW55IiwiZmlsZURvY3MiLCJvblJlb3JkZXIiLCJyZWFkb25seSIsInVwZGF0ZWRBcnJheSIsInVwZGF0ZWRBcnJheV8wIiwiVXBsb2FkQ29tcG9uZW50SGFzT25lIiwiZmlsZURvYyIsImZpbHRlck9wdGlvbnNGcm9tUHJvcHMiLCJzZXRQb3B1bGF0ZWREb2NzIiwicG9wdWxhdGVkRG9jcyIsImNvbGxlY3Rpb25TbHVnc1dpdGhDcmVhdGVQZXJtaXNzaW9uIiwiZXhpc3RpbmdJZHNCeVJlbGF0aW9uIiwiZXhpc3RpbmdJZHMiLCJDcmVhdGVEb2NEcmF3ZXIiLCJvcGVuQ3JlYXRlRG9jRHJhd2VyIiwibG9hZGVkVmFsdWVSZWYiLCJhY3RpdmVSZWxhdGlvblRvIiwicG9wdWxhdGVEb2NzIiwiZ3JvdXBlZCIsImZldGNoZXMiLCJkb2NzQnlJZCIsInJlc3VsdHMiLCJsb29rdXAiLCJkb2NzQnlJZF8wIiwiY29sbGVjdGlvbl8xIiwic29ydGVkRG9jcyIsInJlbGF0aW9uVG9fMSIsIm5vcm1hbGl6ZVZhbHVlIiwib25VcGxvYWRTdWNjZXNzIiwidXBsb2FkZWRGb3JtcyIsImlzUG9seV8wIiwibm9ybWFsaXplZEV4aXN0aW5nIiwibWVyZ2VkVmFsdWUiLCJjdXJyZW50RG9jcyIsImZvcm1fMCIsImZpcnN0RG9jIiwib25Mb2NhbEZpbGVTZWxlY3Rpb24iLCJmaWxlTGlzdFRvVXNlIiwiZmlsZUxpc3QiLCJjb2xsZWN0aW9uVG9Vc2UiLCJvbkxpc3RCdWxrU2VsZWN0IiwiZG9jc18wIiwic2VsZWN0ZWREb2NJRHMiLCJpdGVtc1RvTG9hZCIsImlkXzEiLCJsb2FkZWREb2NzIiwiY3VycmVudERvY3NfMCIsIm5ld1ZhbHVlc18wIiwiaWRfMiIsImlzUG9seV8xIiwibm9ybWFsaXplZEV4aXN0aW5nXzAiLCJkYXRhXzAiLCJvbkRvY0NyZWF0ZSIsImN1cnJlbnREb2NzXzEiLCJuZXdWYWx1ZV8xIiwiaXNQb2x5XzIiLCJjbG9zZUNyZWF0ZURvY0RyYXdlciIsImlzUG9seV8zIiwic2VsZWN0ZWREb2MiLCJjdXJyZW50RG9jc18yIiwidmFsdWVUb1VzZSIsInZhbHVlVG9Vc2VfMCIsImRvY3NfMSIsInVwZGF0ZWREb2NzVG9Qcm9wb2dhdGUiLCJkb2NfMiIsImV4aXN0aW5nRG9jSW5kZXgiLCJjdXJyZW50RG9jc18zIiwidXBkYXRlZERvY3MiLCJkb2NfMyIsIm5ld1ZhbHVlXzMiLCJuZXdWYWx1ZVRvU2F2ZSIsIm5ld1ZhbHVlXzQiLCJuZXdWYWx1ZVRvU2F2ZV8wIiwicmVsXzAiLCJsb2FkSW5pdGlhbERvY3MiLCJpdGVtc1RvTG9hZF8wIiwidl8wIiwiaWRWYWx1ZV8wIiwiaWRWYWx1ZV8xIiwiaWRfMyIsImxvYWRlZERvY3NfMSIsInZhbHVlQ2hhbmdlZCIsImlkXzQiLCJzaG93RHJvcHpvbmUiLCJyZWxhdGlvblRvRnJvbVByb3BzIiwiVXBsb2FkRmllbGQiLCJVcGxvYWRDb21wb25lbnQiLCJDdXN0b21GaWVsZCIsImJhc2VGaWVsZFByb3BzIiwiaXRlcmFibGVGaWVsZFByb3BzIiwiQXJyYXlGaWVsZCIsIkdyb3VwRmllbGQiLCJyZWFkT25seUZyb21QYXJlbnQiLCJpc1JlYWRPbmx5IiwiQXJyYXlSb3ciLCJDdXN0b21Sb3dMYWJlbCIsInNjcm9sbElkUHJlZml4IiwiZmFsbGJhY2tMYWJlbCIsImdldExhYmVscyIsImNvbXBvbmVudElkIiwicGFzdGVGaWVsZCIsInJvd0lEXzAiLCJBcnJheUZpZWxkQ29tcG9uZW50IiwiY29uZmlybVBhc3N3b3JkIiwiQ29uZmlybVBhc3N3b3JkRmllbGQiLCJwYXNzd29yZCIsIlBhc3N3b3JkSW5wdXQiLCJQYXNzd29yZEZpZWxkQ29tcG9uZW50IiwiUGFzc3dvcmRGaWVsZCIsImZpZWxkQ29tcG9uZW50cyIsImNvbGxhcHNpYmxlIiwiZW1haWwiLCJwb2ludCIsInJpY2hUZXh0IiwidWkiLCJhbGxGaWVsZENvbXBvbmVudHMiLCJzZXRzQXJlRXF1YWwiLCJwcmVzc2VkS2V5cyIsImFsdGxlZnQiLCJhbHRyaWdodCIsImNvbnRyb2xsZWZ0IiwiY29udHJvbHJpZ2h0IiwiY3RybGxlZnQiLCJjdHJscmlnaHQiLCJlc2NhcGUiLCJtZXRhbGVmdCIsIm1ldGFyaWdodCIsIm9zbGVmdCIsIm9zcmlnaHQiLCJzaGlmdGxlZnQiLCJzaGlmdHJpZ2h0Iiwic3RyaXBLZXkiLCJwdXNoVG9LZXlzIiwicHJlc3NlZEtleSIsInJlbW92ZUZyb21LZXlzIiwiY2xlYXIiLCJ1c2VIb3RrZXkiLCJjbWRDdHJsS2V5Iiwia2V5Q29kZXMiLCJoYXNDbWQiLCJ1c2VyQWdlbnQiLCJwcmVzc2VkV2l0aG91dE1vZGlmaWVyIiwia2V5XzEiLCJrZXlkb3duIiwia2V5dXAiLCJrZXlfMCIsInVzZVBheWxvYWRBUEkiLCJpbml0aWFsUGFyYW1zIiwic2V0UGFyYW1zIiwiaXNFcnJvciIsInNldElzRXJyb3IiLCJ1c2VSZXNpemUiLCJzZXRTaXplIiwiY29udGVudEJveFNpemUiLCJjb250ZW50UmVjdCIsIm5ld1dpZHRoIiwibmV3U2l6ZSIsImJsb2NrU2l6ZSIsImlubGluZVNpemUiLCJ1bm9ic2VydmUiLCJ1c2VVc2VUaXRsZUZpZWxkIiwibW92ZVN1YkZpZWxkc1RvVG9wIiwiU29ydERvd25JY29uIiwidXNlU29ydCIsInF1ZXJ5U29ydCIsImhhbmRsZVNvcnRQcmVzcyIsIlNvcnRIZWFkZXIiLCJTb3J0Um93IiwiRHJhZ092ZXJsYXkiLCJPcmRlcmFibGVSb3ciLCJjZWxsTWFwIiwiZHJhZ0F0dHJpYnV0ZXMiLCJkcmFnTGlzdGVuZXJzIiwicm93SWQiLCJyZW5kZXJlZENlbGxzIiwiT3JkZXJhYmxlUm93RHJhZ1ByZXZpZXciLCJjZWxsUGFkZGluZyIsImNlbGxTcGFjaW5nIiwiT3JkZXJhYmxlVGFibGUiLCJCZWZvcmVUYWJsZSIsImxpc3RRdWVyeURhdGEiLCJzZXJ2ZXJEYXRhIiwibG9jYWxEYXRhIiwic2V0TG9jYWxEYXRhIiwic2V0Q2VsbE1hcCIsImFjdGl2ZUNvbHVtbnMiLCJjb2xfMCIsInNldERyYWdBY3RpdmVSb3dJZCIsIm1vdmVkSWQiLCJuZXdCZWZvcmVSb3ciLCJwcmV2aW91c0RhdGEiLCJjdXJyZW50RGF0YSIsIm5ld0FmdGVyUm93IiwibmV3S2V5V2lsbEJlIiwiZG9jc1RvTW92ZSIsImpzb25Cb2R5Iiwicm93SWRzIiwiY29sXzEiLCJyb3dfMCIsIm9wYWNpdHkiLCJkcmFnQWN0aXZlUm93SWQiLCJ0b1dvcmRzIiwiaXNDb2x1bW5BY3RpdmUiLCJ0cmFuc2Zvcm1XaGVyZVRvTmF0dXJhbExhbmd1YWdlIiwib3IiLCJhbmRRdWVyeSIsIm9wZXJhdG9yIiwiUXVlcnlQcmVzZXRzV2hlcmVDZWxsIiwiUXVlcnlQcmVzZXRzQWNjZXNzQ2VsbCIsIm9wZXJhdGlvbnMiLCJvcGVyYXRpb25EYXRhIiwiY29uc3RyYWludCIsImVxdWFsc09wZXJhdG9ycyIsImFycmF5T3BlcmF0b3JzIiwibnVtZXJpYyIsImdlbyIsIndpdGhpbiIsImludGVyc2VjdHMiLCJsaWtlIiwibm90TGlrZSIsImZpZWxkVHlwZUNvbmRpdGlvbnMiLCJvcGVyYXRvcnMiLCJnZXRWYWxpZEZpZWxkT3BlcmF0b3JzIiwidmFsaWRPcGVyYXRvcnMiLCJ2YWxpZE9wZXJhdG9yIiwicmVkdWNlRmllbGRzVG9PcHRpb25zIiwicGF0aFByZWZpeCIsInBhdGhQcmVmaXhGcm9tQXJncyIsInJlZHVjZWQiLCJ2aXJ0dWFsIiwic2hvdWxkSWdub3JlRmllbGROYW1lIiwibG9jYWxpemVkVGFiTGFiZWwiLCJ0YWJQYXRoUHJlZml4IiwidHJhbnNsYXRlZExhYmVsIiwicGF0aFdpdGhQcmVmaXgiLCJvcGVyYXRvcktleXMiLCJvcGVyYXRvcktleSIsImxvY2FsaXplZExhYmVsIiwiZm9ybWF0dGVkTGFiZWwiLCJwbGFpblRleHRMYWJlbCIsIlF1ZXJ5UHJlc2V0c0dyb3VwQnlDZWxsIiwicmVkdWNlZEZpZWxkcyIsImlzRGVzY2VuZGluZyIsImRpc3BsYXlMYWJlbCIsInNob3VsZFNraXBGaWVsZCIsImZpbHRlckZpZWxkc1dpdGhQZXJtaXNzaW9ucyIsImZpZWxkUGVybWlzc2lvbiIsImdldFJlbWFpbmluZ0NvbHVtbnMiLCJyZW1haW5pbmciLCJ0YWJGaWVsZENvbHVtbnMiLCJnZXRJbml0aWFsQ29sdW1ucyIsImluaXRpYWxDb2x1bW5zIiwicmVtYWluaW5nQ29sdW1ucyIsImdldENvbHVtbnMiLCJjbGllbnRDb25maWciLCJjbGllbnRDb2xsZWN0aW9uQ29uZmlnIiwiUXVlcnlQcmVzZXRzQ29sdW1uRmllbGQiLCJyZWxhdGVkQ29sbGVjdGlvbkZpZWxkIiwiYWNjZXNzb3JUb0xhYmVsIiwiY3VycmVudENvbHVtbnMiLCJuZXdDb2x1bW5zIiwidHJhbnNmb3JtV2hlcmVRdWVyeSIsInZhbGlkYXRlV2hlcmVRdWVyeSIsIkRhdGVGaWx0ZXIiLCJOdW1iZXJGaWx0ZXIiLCJoYXNNdWx0aXBsZVJlbGF0aW9ucyIsImxhYmVsS2V5Iiwib3B0aW9uc1JlZHVjZXJfZGVmYXVsdCIsImlzTXVsdGlWYWx1ZSIsImRlYm91bmNlZFNlYXJjaCIsInJlbGF0aW9uU2x1Z3MiLCJsb2FkZWRSZWxhdGlvbnNoaXBzIiwiaGFzTG9hZGVkQWxsIiwiYWRkT3B0aW9ucyIsInJlbGF0aW9uU2x1ZyIsImxvYWRlZFJlbGF0aW9uc2hpcCIsInNldEhhc0xvYWRlZEZpcnN0T3B0aW9ucyIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwicmVsYXRpb25zaGlwVG9Mb2FkIiwibG9hZE9wdGlvbnMiLCJhYm9ydENvbnRyb2xsZXJfMCIsInN1Yk9wdCIsIm9wdF8wIiwidmFsdWVXaXRoUmVsYXRpb24iLCJvcHRfMSIsInN1Yk9wdF8wIiwibWF0Y2hlZE9wdGlvbl8wIiwib3B0XzIiLCJyZWxhdGlvblNsdWdzXzAiLCJhZGRPcHRpb25CeUlEIiwiYWJvcnRDb250cm9sbGVycyIsImFib3J0Q29udHJvbGxlcl8xIiwiaGFzTG9hZGVkRmlyc3RPcHRpb25zIiwibWF0Y2hlZE9wdGlvbnMiLCJ2YWx1ZVdpdGhSZWxhdGlvbl8wIiwic2V0T3B0aW9ucyIsIlRleHQiLCJEZWZhdWx0RmlsdGVyIiwiYm9vbGVhblNlbGVjdCIsImludGVybmFsRmllbGQiLCJSZWxhdGlvbnNoaXBGaWx0ZXIiLCJnZXRPcGVyYXRvclZhbHVlVHlwZXMiLCJmaWVsZFR5cGUiLCJncmVhdGVyX3RoYW4iLCJncmVhdGVyX3RoYW5fZXF1YWwiLCJsZXNzX3RoYW4iLCJsZXNzX3RoYW5fZXF1YWwiLCJuZWFyIiwibm90X2VxdWFscyIsIm5vdF9pbiIsIm5vdF9saWtlIiwiYWRkQ29uZGl0aW9uIiwiYW5kSW5kZXgiLCJvckluZGV4IiwicmVtb3ZlQ29uZGl0aW9uIiwiUmVuZGVyZWRGaWx0ZXIiLCJ1cGRhdGVDb25kaXRpb24iLCJyZWR1Y2VkRmllbGQiLCJzZXRJbnRlcm5hbFZhbHVlIiwiaW50ZXJuYWxWYWx1ZSIsInZhbHVlT3B0aW9ucyIsInVwZGF0ZVZhbHVlIiwiZGVib3VuY2VkVmFsdWVfMCIsImZpZWxkXzAiLCJoYW5kbGVGaWVsZENoYW5nZSIsIm9wZXJhdG9yXzAiLCJvcGVyYXRvclZhbHVlVHlwZXMiLCJ2YWxpZE9wZXJhdG9yVmFsdWUiLCJpc1ZhbGlkVmFsdWUiLCJmaWVsZF8xIiwiaGFuZGxlT3BlcmF0b3JDaGFuZ2UiLCJmaWVsZF8yIiwiY29sbGVjdGlvblBsdXJhbExhYmVsUHJvcCIsImNvbGxlY3Rpb25QbHVyYWxMYWJlbCIsInJlbmRlcmVkRmlsdGVycyIsInJlc29sdmVkRmlsdGVyT3B0aW9ucyIsImxpc3RRdWVyeSIsImlzRm9ybU1vZGUiLCJmaWVsZHNTYWZlIiwiY29uZGl0aW9ucyIsInZhbHVlUHJvcCIsIndoZXJlRnJvbVNlYXJjaCIsInRyYW5zZm9ybWVkV2hlcmUiLCJuZXdDb25kaXRpb25zIiwiZGVmYXVsdE9wZXJhdG9yIiwib3JJbmRleF8wIiwiZXhpc3RpbmdDb25kaXRpb24iLCJhbmRJbmRleF8wIiwiZXhpc3RpbmdWYWx1ZSIsIm5ld1Jvd0NvbmRpdGlvbiIsIm5ld0NvbmRpdGlvbnNfMCIsIm9ySW5kZXhfMSIsIm5ld0NvbmRpdGlvbnNfMSIsImFuZEluZGV4XzEiLCJvckluZGV4XzIiLCJhbmRJbmRleF8yIiwiY29uZGl0aW9uIiwiQ29uZGl0aW9uIiwiUXVlcnlQcmVzZXRzV2hlcmVGaWVsZCIsIldoZXJlQnVpbGRlciIsInN1cHBvcnRlZEZpZWxkVHlwZXMiLCJncm91cEJ5UmF3IiwiZ3JvdXBCeUZpZWxkTmFtZSIsImdyb3VwQnlGaWVsZCIsIm5ld0dyb3VwQnkiLCJoYW5kbGVDbGVhciIsImhhbmRsZURpcmVjdGlvbkNoYW5nZSIsIlF1ZXJ5UHJlc2V0c0dyb3VwQnlGaWVsZCIsIm9mZiIsInVzZUJlZm9yZVVubG9hZCIsImVuYWJsZWQiLCJyZXR1cm5WYWx1ZSIsInVzZVByZXZlbnRMZWF2ZSIsImhhc0FjY2VwdGVkIiwib25BY2NlcHQiLCJvblByZXZlbnQiLCJwcmV2ZW50IiwiY2FuY2VsbGVkVVJMIiwiaXNBbmNob3JPZkN1cnJlbnRVcmwiLCJjdXJyZW50VXJsIiwibmV3VXJsIiwiY3VycmVudFVybE9iaiIsIm5ld1VybE9iaiIsImN1cnJlbnRIYXNoIiwibmV3SGFzaCIsImZpbmRDbG9zZXN0QW5jaG9yIiwicGFyZW50RWxlbWVudCIsImFuY2hvciIsImlzQW5jaG9yIiwiaXNEb3dubG9hZExpbmsiLCJkb3dubG9hZCIsImlzTmV3VGFiIiwiY29uZmlybSIsImxlYXZlV2l0aG91dFNhdmluZ01vZGFsU2x1ZyIsIkxlYXZlV2l0aG91dFNhdmluZyIsImRpc2FibGVQcmV2ZW50TGVhdmUiLCJzZXRIYXNBY2NlcHRlZCIsImFjdGl2ZUhyZWYiLCJoYW5kbGVQcmV2ZW50IiwiaGFuZGxlQWNjZXB0IiwiaGFuZGxlQ29uZmlybSIsIkxlYXZlV2l0aG91dFNhdmluZ01vZGFsIiwiRG9jdW1lbnRUYWtlT3ZlciIsImhhbmRsZUJhY2tUb0Rhc2hib2FyZCIsIm9uUmVhZE9ubHkiLCJpc0NsaWVudFVzZXJPYmplY3QiLCJob3VyIiwiaG91cjEyIiwibWludXRlIiwiRG9jdW1lbnRMb2NrZWQiLCJoYW5kbGVHb0JhY2siLCJvblRha2VPdmVyIiwiVmlld0Rlc2NyaXB0aW9uIiwiRGVmYXVsdEFjY291bnRJY29uIiwiaW1wb3J0X21kNSIsIkdyYXZhdGFyQWNjb3VudEljb24iLCJBY2NvdW50IiwiYXZhdGFyIiwiYWNjb3VudCIsImFjY291bnRSb3V0ZSIsImlzT25BY2NvdW50UGFnZSIsIkFjdGlvbnNDb250ZXh0Iiwic2V0Vmlld0FjdGlvbnMiLCJ1c2VBY3Rpb25zIiwiQWN0aW9uc1Byb3ZpZGVyIiwidmlld0FjdGlvbnMiLCJDbG9zZU1lbnVJY29uIiwiTWVudUljb24iLCJIYW1idXJnZXIiLCJjbG9zZUljb24iLCJMb2NhbGl6ZXJMYWJlbCIsIkxvY2FsaXplciIsImxvY2FsZU9wdGlvbkxhYmVsIiwibG9jYWxlT3B0aW9uIiwiUFJFRkVSRU5DRV9LRVlTIiwiTmF2Q29udGV4dCIsImh5ZHJhdGVkIiwibmF2T3BlbiIsIm5hdlJlZiIsInNldE5hdk9wZW4iLCJzaG91bGRBbmltYXRlIiwidXNlTmF2IiwiZ2V0TmF2UHJlZmVyZW5jZSIsInByZWZlcnJlZFN0YXRlIiwiTkFWIiwiTmF2UHJvdmlkZXIiLCJpbml0aWFsSXNPcGVuIiwibGFyZ2VCcmVhayIsIm1pZEJyZWFrIiwic21hbGxCcmVhayIsInNldFNob3VsZEFuaW1hdGUiLCJzZXRIeWRyYXRlZCIsIm92ZXJzY3JvbGxCZWhhdmlvciIsIk5hdlRvZ2dsZXIiLCJQYXlsb2FkSWNvbiIsImZpbGxGcm9tUHJvcHMiLCJ1c2VTdGVwTmF2Iiwic2V0U3RlcE5hdiIsInN0ZXBOYXYiLCJTdGVwTmF2UHJvdmlkZXIiLCJTZXRTdGVwTmF2IiwibmF2IiwiU3RlcE5hdiIsIkN1c3RvbUljb24iLCJpc0xhc3QiLCJTdGVwTGFiZWwiLCJBcHBIZWFkZXIiLCJDdXN0b21BdmF0YXIiLCJjdXN0b21Db250cm9sc1JlZiIsImlzU2Nyb2xsYWJsZSIsImNoZWNrSXNTY3JvbGxhYmxlIiwic2Nyb2xsYWJsZSIsInNldElzU2Nyb2xsYWJsZSIsInNjcm9sbFdpZHRoIiwiQWN0aW9uQ29tcG9uZW50cyIsIkFjdGlvbiIsImJ1dHRvbkFyaWFMYWJlbCIsInRpdGxlQXMiLCJDb3B5TG9jYWxlRGF0YSIsImxvY2FsZV8wIiwibG9jYWxlT3B0aW9uc1dpdGhvdXRDdXJyZW50IiwibG9jYWxlT3B0aW9ucyIsImNvZGVfMCIsImxvY2FsZV8xIiwiZ2V0TG9jYWxlTGFiZWwiLCJjb3B5aW5nIiwic2V0Q29weWluZyIsInRvTG9jYWxlIiwic2V0VG9Mb2NhbGUiLCJmcm9tTG9jYWxlIiwic2V0RnJvbUxvY2FsZSIsIm92ZXJ3cml0ZUV4aXN0aW5nIiwib3ZlcnJpZGVEYXRhIiwidHJhbnNsYXRlZE1lc3NhZ2UiLCJjb3B5TG9jYWxlRGF0YSIsInNlbGVjdGVkT3B0aW9uXzAiLCJtZXJnZUxpc3RTZWFyY2hBbmRXaGVyZSIsIlNlbGVjdEFsbFN0YXR1cyIsImdldFF1ZXJ5UGFyYW1zIiwiYWRkaXRpb25hbFBhcmFtcyIsImdldFNlbGVjdGVkSWRzIiwic2VsZWN0QWxsIiwic2VsZWN0ZWRJRHMiLCJzZXRTZWxlY3Rpb24iLCJ0b2dnbGVBbGwiLCJ0b3RhbERvY3MiLCJyZWR1Y2VBY3RpdmVTZWxlY3Rpb25zIiwiU2VsZWN0aW9uUHJvdmlkZXIiLCJzZXRTZWxlY3RlZCIsInNldFNlbGVjdEFsbCIsInNldENvdW50IiwiYWxsQXZhaWxhYmxlIiwiX2lzTG9ja2VkIiwiX3VzZXJFZGl0aW5nIiwic2hvdWxkU2VsZWN0IiwibmV3TWFwIiwiYWRkaXRpb25hbFdoZXJlUGFyYW1zIiwidXNlU2VsZWN0aW9uIiwic2hvdWxkUGVybWFuZW50bHlEZWxldGUiLCJkZWxldGVQZXJtYW5lbnRseSIsImhhc0RlbGV0ZVBlcm1pc3Npb24iLCJoYXNUcmFzaFBlcm1pc3Npb24iLCJpc1RyYXNoVmlldyIsIkxpc3RTZWxlY3Rpb25fdjQiLCJMaXN0QWN0aW9ucyIsIlNlbGVjdGlvbkFjdGlvbnMiLCJEZWxldGVNYW55IiwiaGFzRGVsZXRlUGVybWlzc2lvbkZyb21Qcm9wcyIsImhhc1RyYXNoUGVybWlzc2lvbkZyb21Qcm9wcyIsIm1vZGFsUHJlZml4IiwidHJhc2giLCJzZWxlY3RpbmdBbGwiLCJjYW5TaG93RGVsZXRlQnV0dG9uIiwiYmFzZVdoZXJlIiwiZmluYWxXaGVyZSIsImRlbGV0ZWRBdCIsIkRlbGV0ZU1hbnlfdjQiLCJhZnRlckRlbGV0ZSIsInNlbGVjdGlvbnMiLCJzZXREZWxldGVQZXJtYW5lbnRseSIsImNvbmZpcm1NYW55RGVsZXRlRHJhd2VyU2x1ZyIsImhhbmRsZURlbGV0ZSIsImRlbGV0aW5nT25lQ29sbGVjdGlvbiIsIndoZXJlQ29uc3RyYWludCIsInBlcm1hbmVudGx5RGVsZXRlIiwiZGVsZXRlTWFueVJlc3BvbnNlIiwiZGVsZXRlZERvY3MiLCJzdWNjZXNzS2V5Iiwic3VjY2Vzc0xhYmVsIiwiZGVsZXRlZENvdW50IiwibGFiZWxDb3VudCIsInNsdWdfMCIsImNvbGxlY3Rpb25Db25maWdfMCIsIm5ld0xhYmVsIiwiY29sbGVjdGlvbkxhYmVsIiwiTGlzdFNlbGVjdGlvbkJ1dHRvbiIsImxhYmVsQ291bnRfMCIsImhhc0RyYWZ0c0VuYWJsZWQiLCJMaXZlUHJldmlld0NvbnRleHQiLCJhcHBJc1JlYWR5IiwiYnJlYWtwb2ludCIsImlmcmFtZVJlZiIsImlzTGl2ZVByZXZpZXdFbmFibGVkIiwiaXNMaXZlUHJldmlld2luZyIsImlzUG9wdXBPcGVuIiwiaXNQcmV2aWV3RW5hYmxlZCIsIm1lYXN1cmVkRGV2aWNlU2l6ZSIsIm9wZW5Qb3B1cFdpbmRvdyIsInByZXZpZXdVUkwiLCJwcmV2aWV3V2luZG93VHlwZSIsInNldEFwcElzUmVhZHkiLCJzZXRCcmVha3BvaW50Iiwic2V0SGVpZ2h0Iiwic2V0SXNMaXZlUHJldmlld2luZyIsInNldExvYWRlZFVSTCIsInNldE1lYXN1cmVkRGV2aWNlU2l6ZSIsInNldFByZXZpZXdVUkwiLCJzZXRQcmV2aWV3V2luZG93VHlwZSIsInNldFRvb2xiYXJQb3NpdGlvbiIsInNldFVSTCIsInNldFdpZHRoIiwic2V0Wm9vbSIsInNob3VsZFJlbmRlcklmcmFtZSIsInRvb2xiYXJQb3NpdGlvbiIsInR5cGVvZkxpdmVQcmV2aWV3VVJMIiwiem9vbSIsInVzZUxpdmVQcmV2aWV3Q29udGV4dCIsInVzZVByZXZpZXdVUkwiLCJnZXRBdXRvc2F2ZUludGVydmFsIiwidXNlRGVmZXJyZWRWYWx1ZSIsImZsYXRsZXlVbmZsYXR0ZW4iLCJyZWR1Y2VGaWVsZHNUb1ZhbHVlc1dpdGhWYWxpZGF0aW9uIiwiaWdub3JlRGlzYWJsZUZvcm1EYXRhIiwibWluaW11bUFuaW1hdGlvblRpbWUiLCJnbG9iYWwiLCJpbnRlcnZhbCIsInZhbGlkYXRlT25EcmFmdCIsInNhdmluZyIsImRlYm91bmNlZEZvcm1TdGF0ZSIsImF1dG9zYXZlVGltZW91dFJlZiIsInN0YXJ0VGltZXN0YW1wIiwiZW5kVGltZXN0YW1wIiwic2V0U2F2aW5nIiwic3RvcEF1dG9TYXZlSW5kaWNhdG9yIiwiYXV0b3NhdmUiLCJnbG9iYWxEb2MiLCJza2lwU3VibWlzc2lvbiIsImRpZE1vdW50IiwicHJldmlvdXNEZWJvdW5jZWREYXRhIiwicHJldkZvcm1EYXRhIiwiaGFuZGxlQXV0b3NhdmUiLCJzaW5ndWxhckxhYmVsIiwiYWRkRGVmYXVsdEVycm9yIiwidHJhdmVyc2VGb3JMb2NhbGl6ZWRGaWVsZHMiLCJnZXRMb2NhbGVPcHRpb25zIiwic2V0U2VsZWN0ZWRMb2NhbGVzIiwiYWxsTG9jYWxlcyIsInNlbGVjdGVkTG9jYWxlcyIsImFsbExvY2FsZXNTZWxlY3RlZCIsImxvY2FsZVZhbHVlIiwiaGFuZGxlVG9nZ2xlTG9jYWxlIiwiaGFuZGxlU2VsZWN0QWxsIiwiRHVwbGljYXRlRG9jdW1lbnQiLCJzZWxlY3RMb2NhbGVzIiwiaXNEdXBsaWNhdGVCeUxvY2FsZUVuYWJsZWQiLCJoYW5kbGVEdXBsaWNhdGUiLCJoYXNTZWxlY3RlZExvY2FsZXMiLCJoYW5kbGVDb25maXJtV2l0aG91dFNhdmluZyIsIlNlbGVjdExvY2FsZXNEcmF3ZXIiLCJFeWVJY29uIiwibGl2ZVByZXZpZXdVUkwiLCJMb2NrSWNvbiIsInN0cm9rZUxpbmVqb2luIiwic3RvcE9wYWNpdHkiLCJMb2NrZWQiLCJ1c2VyVG9Vc2UiLCJQZXJtYW5lbnRseURlbGV0ZUJ1dHRvbiIsInRpdGxlRnJvbVByb3BzIiwiRXh0ZXJuYWxMaW5rSWNvbiIsIlByZXZpZXdCdXR0b24iLCJoYXNMb2NhbGl6ZVN0YXR1c0VuYWJsZWQiLCJoYXNTY2hlZHVsZWRQdWJsaXNoRW5hYmxlZCIsImJ1aWxkVXBjb21pbmdDb2x1bW5zIiwiZGVsZXRlSGFuZGxlciIsIndhaXRVbnRpbCIsIm1hdGNoZWRMb2NhbGUiLCJkZWZhdWx0TG9jYWxlT3B0aW9uIiwiU2NoZWR1bGVEcmF3ZXIiLCJkZWZhdWx0VHlwZSIsInNjaGVkdWxlUHVibGlzaENvbmZpZyIsImRlZmF1bHRUaW1lem9uZSIsInNldFR5cGUiLCJzZXREYXRlIiwic2V0VGltZXpvbmUiLCJtb2RhbFRpdGxlIiwidXBjb21pbmciLCJzZXRVcGNvbWluZyIsImRlbGV0ZUhhbmRsZXJSZWYiLCJzZXRVcGNvbWluZ0NvbHVtbnMiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJmZXRjaFVwY29taW5nIiwidGFza1NsdWciLCJoYW5kbGVTYXZlIiwibG9jYWxlVG9QdWJsaXNoIiwiZXJyXzAiLCJvbkNoYW5nZURhdGUiLCJ0ekRhdGVXaXRoVVRDIiwiZmV0Y2hJbml0aWFsVXBjb21pbmciLCJtaW5EYXRlIiwicGlja2VyQXBwZWFyYW5jZSIsInRpbWVGb3JtYXQiLCJ0aW1lSW50ZXJ2YWxzIiwiUHVibGlzaEJ1dHRvbiIsImxhYmVsUHJvcCIsImVudGl0eUNvbmZpZyIsImhhc05ld2VyVmVyc2lvbnMiLCJjYW5QdWJsaXNoIiwic2NoZWR1bGVkUHVibGlzaEVuYWJsZWQiLCJoYXNBdXRvc2F2ZSIsImNhblNjaGVkdWxlUHVibGlzaCIsImhhc0xvY2FsaXplZEZpZWxkcyIsInNldEhhc0xvY2FsaXplZEZpZWxkcyIsImhhc0xvY2FsaXplZEZpZWxkIiwiaXNTcGVjaWZpY0xvY2FsZVB1Ymxpc2hFbmFibGVkIiwic2F2ZURyYWZ0IiwibG9jYWxpemVTdGF0dXNFbmFibGVkIiwicHVibGlzaCIsInB1Ymxpc2hBbGxMb2NhbGVzIiwicHVibGlzaFNwZWNpZmljTG9jYWxlIiwicGF0aFNlZ21lbnQiLCJpc0RlZmF1bHRQdWJsaXNoQWxsIiwiZGVmYXVsdExvY2FsZVB1Ymxpc2hPcHRpb24iLCJhY3RpdmVMb2NhbGUiLCJhY3RpdmVMb2NhbGVMYWJlbCIsImRyYWZ0cyIsIm9uUmVzdG9yZSIsInNldFJlc3RvcmVBc1B1Ymxpc2hlZCIsInJlc3RvcmVBc1B1Ymxpc2hlZCIsImhhbmRsZVJlc3RvcmUiLCJTYXZlQnV0dG9uIiwiY2xpY2siLCJTYXZlRHJhZnRCdXR0b24iLCJyZXNldEZvcm0iLCJzdGF0dXNUb1JlbmRlciIsImRpc3BsYXlTdGF0dXNLZXkiLCJwZXJmb3JtQWN0aW9uIiwicHVibGlzaGVkRG9jIiwicmVzXzAiLCJqc29uXzAiLCJjYW5VcGRhdGUiLCJyZXZlcnRNb2RhbFNsdWciLCJVbnB1Ymxpc2hCdXR0b24iLCJkYXRhRnJvbVByb3BzIiwibG9jYWxlTGFiZWwiLCJ1bnB1Ymxpc2hBbGwiLCJzZXRVbnB1Ymxpc2hBbGwiLCJ1blB1Ymxpc2hNb2RhbFNsdWciLCJ1bnB1Ymxpc2giLCJxdWVyeVN0cmluZyIsInVucHVibGlzaEFsbExvY2FsZXMiLCJjYW5VbnB1Ymxpc2giLCJjYW5VbnB1Ymxpc2hDdXJyZW50TG9jYWxlIiwiaXNMb2NhbGl6ZVN0YXR1c0VuYWJsZWQiLCJsb2NhbGl6ZVN0YXR1cyIsImlzRXhwZXJpbWVudGFsRW5hYmxlZCIsImV4cGVyaW1lbnRhbCIsIkRvY3VtZW50Q29udHJvbHMiLCJCZWZvcmVEb2N1bWVudENvbnRyb2xzIiwiZGlzYWJsZUNyZWF0ZSIsIkVkaXRNZW51SXRlbXMiLCJpc0FjY291bnRWaWV3Iiwib25EcmF3ZXJDcmVhdGVOZXciLCJyZWFkT25seUZvckluY29taW5nVXNlciIsIkN1c3RvbVByZXZpZXdCdXR0b24iLCJDdXN0b21TYXZlQnV0dG9uIiwiU3RhdHVzIiwiQ3VzdG9tU3RhdHVzIiwiQ3VzdG9tVW5wdWJsaXNoQnV0dG9uIiwiZG9jSGFzRGVsZXRlUGVybWlzc2lvbiIsImRvY0hhc1RyYXNoUGVybWlzc2lvbiIsInNldFVwZGF0ZWRBdCIsInNldENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsImhhc0NyZWF0ZVBlcm1pc3Npb24iLCJjb2xsZWN0aW9uRGVsZXRlUGVybWlzc2lvbiIsInNob3dEb3RNZW51IiwidW5zYXZlZERyYWZ0V2l0aFZhbGlkYXRpb25zIiwiZ2xvYmFsSGFzRHJhZnRzRW5hYmxlZCIsImNvbGxlY3Rpb25IYXNEcmFmdHNFbmFibGVkIiwiY29sbGVjdGlvbkF1dG9zYXZlRW5hYmxlZCIsImdsb2JhbEF1dG9zYXZlRW5hYmxlZCIsImF1dG9zYXZlRW5hYmxlZCIsInNob3dTYXZlRHJhZnRCdXR0b24iLCJzaG93Q29weVRvTG9jYWxlIiwic2hvd0ZvbGRlck1ldGFJY29uIiwic2hvd0xvY2tlZE1ldGFJY29uIiwidGltZXN0YW1wcyIsIkxpdmVQcmV2aWV3VG9nZ2xlciIsIkN1c3RvbVNhdmVEcmFmdEJ1dHRvbiIsIkN1c3RvbVB1Ymxpc2hCdXR0b24iLCJodG1sU3RhcnRUYWdSZWciLCJodG1sVGFnV2l0aE5hbWVSZWciLCJodG1sVGFnUmVnIiwiaHRtbEltZ1RhZ1JlZyIsImh0bWxWaWRlb1RhZ1JlZyIsIkh0bWxEaWZmIiwibGVhc3RDb21tb25MZW5ndGgiLCJtYXRjaGVkQmxvY2tMaXN0IiwibmV3VG9rZW5zIiwib2xkVG9rZW5zIiwib3BlcmF0aW9uTGlzdCIsInNpZGVCeVNpZGVDb250ZW50cyIsInVuaWZpZWRDb250ZW50Iiwib2xkSHRtbCIsIm5ld0h0bWwiLCJjcmVhdGVCbG9jayIsImNyZWF0ZUlubGluZSIsImRlbGV0ZUJsb2NrIiwiZGVsZXRlSW5saW5lIiwiZ3JlZWR5Qm91bmRhcnkiLCJncmVlZHlNYXRjaCIsIm1pbk1hdGNoZWRTaXplIiwidG9rZW5pemVCeUNoYXJhY3RlciIsImVxdWFsU2VxdWVuY2UiLCJ0YWdOYW1lTGVuZ3RoIiwidG9rZW5pemVGbiIsInRva2VuaXplQnlXb3JkIiwiZ2V0TWF0Y2hlZEJsb2NrTGlzdCIsImdldE9wZXJhdGlvbkxpc3QiLCJjb21wdXRlQmVzdE1hdGNoZWRCbG9jayIsIm9sZFN0YXJ0Iiwib2xkRW5kIiwibmV3U3RhcnQiLCJuZXdFbmQiLCJiZXN0TWF0Y2hlZEJsb2NrIiwicmV0Iiwic2xpZGVCZXN0TWF0Y2hlZEJsb2NrIiwiY29tcHV0ZU1hdGNoZWRCbG9ja0xpc3QiLCJtYXRjaEJsb2NrIiwiZHJlc3NVcEJsb2NrVGFnIiwiZHJlc3NVcERpZmZDb250ZW50IiwidG9rZW5zIiwidG9rZW5zTGVuZ3RoIiwidGV4dFN0YXJ0SW5kZXgiLCJpc01hdGNoRWxlbWVudCIsImlzTWF0Y2hFeHBsaWNpdGx5RGlzYWJsZWQiLCJpc0h0bWxUYWciLCJkcmVzc1VwVGV4dCIsIm5ld1Rva2VuIiwiZHJlc3N1cE1hdGNoRW5hYmxlZEh0bWxUYWciLCJkcmVzc1VwSW5saW5lVGFnIiwibWF0Y2hUeXBlIiwibjEiLCJuMiIsImUxIiwiZTIiLCJjb21tb25MZW5ndGgiLCJmbG9vciIsIndhbGtJbmRleE9sZCIsIndhbGtJbmRleE5ldyIsIm1hdGNoZWRCbG9jayIsImlzT2xkU3RhcnRJbmRleE1hdGNoZWQiLCJpc05ld1N0YXJ0SW5kZXhNYXRjaGVkIiwib3BlcmF0aW9uQmFzZSIsIm1heEluZGV4T2xkIiwibWF4SW5kZXhOZXciLCJ0YWlsT3BlcmF0aW9uQmFzZSIsImlzT2xkRmluaXNoZWQiLCJpc05ld0ZpbmlzaGVkIiwiYWRkQSIsImFkZEIiLCJtYXhTaXplIiwiY29udGludW91c1NpemUiLCJodG1sIiwiY3VycmVudFBvcyIsInRhZ1JlZ2V4IiwiZXhlYyIsImJlZm9yZVRhZyIsImdldFNpZGVCeVNpZGVDb250ZW50cyIsImRlbGV0ZWRUb2tlbnMiLCJlcXVhbFRva2VucyIsImVxdWFsU3RyaW5nIiwic3RhcnRUYWdNYXRjaCIsImdldFVuaWZpZWRDb250ZW50Iiwib2xkcyIsIm5ld3MiLCJjcmVhdGVkVG9rZW5zIiwiY3JlYXRlSW5kZXgiLCJkZWxldGVJbmRleCIsImRlbGV0ZWRUb2tlbiIsIm1hdGNoVGFnUmVzdWx0RCIsImlzVGFnSW5OZXdGaW5kIiwidGVtcENyZWF0ZUluZGV4IiwiY3JlYXRlZFRva2VuIiwibWF0Y2hUYWdSZXN1bHRDIiwiaXNFbmQiLCJFU0NBUEVfTUFQIiwiVU5FU0NBUEVfTUFQIiwiZXNjYXBlRGlmZkhUTUwiLCJ1bmVzY2FwZURpZmZIVE1MIiwiZnJvbUhUTUwiLCJwb3N0UHJvY2VzcyIsInRvSFRNTCIsImRpZmZIVE1MIiwib2xkSFRNTCIsIm5ld0hUTUwiLCJGcm9tIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJUbyIsIkNsaWNrT3V0c2lkZUNvbnRleHQiLCJDbGlja091dHNpZGVQcm92aWRlciIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsInVzZUNsaWNrT3V0c2lkZUNvbnRleHQiLCJ1c2VDbGlja091dHNpZGUiLCJjb21iaW5lV2hlcmVDb25zdHJhaW50cyIsIlN1Ym1pdCIsInNhdmUiLCJvblN1Y2Nlc3NGcm9tUHJvcHMiLCJ3aGVyZUNvbnN0cmFpbnRzIiwicXVlcnlXaXRoU2VhcmNoIiwiX3IiLCJFZGl0TWFueSIsIkVkaXRNYW55X3Y0IiwiRnVsbHNjcmVlbk1vZGFsIiwiY3VycmVudERlcHRoIiwiR2VuZXJhdGVDb25maXJtYXRpb24iLCJoaWdobGlnaHRGaWVsZCIsInNldEtleSIsImhhbmRsZUdlbmVyYXRlIiwiSHlkcmF0ZUF1dGhQcm92aWRlciIsIm9yaWVudGF0aW9uIiwiUGVvcGxlSWNvbiIsIlF1ZXJ5UHJlc2V0VG9nZ2xlciIsImFjdGl2ZVByZXNldCIsIm9wZW5QcmVzZXRMaXN0RHJhd2VyIiwicmVzZXRQcmVzZXQiLCJwcmVzZXRzQ29uZmlnIiwiaXNTaGFyZWQiLCJjb25maXJtRGVsZXRlUHJlc2V0TW9kYWxTbHVnIiwicXVlcnlQcmVzZXRzU2x1ZyIsInF1ZXJ5UHJlc2V0UGVybWlzc2lvbnMiLCJzZXRRdWVyeU1vZGlmaWVkIiwiUHJlc2V0RG9jdW1lbnREcmF3ZXIiLCJvcGVuRG9jdW1lbnREcmF3ZXIiLCJDcmVhdGVOZXdQcmVzZXREcmF3ZXIiLCJvcGVuQ3JlYXRlTmV3RHJhd2VyIiwiaXNUZW1wIiwiaGFuZGxlUHJlc2V0Q2hhbmdlIiwicmVzZXRRdWVyeVByZXNldCIsImhhbmRsZURlbGV0ZVByZXNldCIsInByZXNldENvbmZpZyIsInNhdmVDdXJyZW50Q2hhbmdlcyIsImhhc01vZGlmaWVkUHJlc2V0IiwiY2xvc2VDcmVhdGVOZXdEcmF3ZXIiLCJTZWFyY2hGaWx0ZXIiLCJzZWFyY2hRdWVyeVBhcmFtIiwic2VhcmNoUGFyYW0iLCJwcmV2aW91c1NlYXJjaCIsInNob3VsZFVwZGF0ZVN0YXRlIiwiU2VhcmNoQmFyIiwib25TZWFyY2hDaGFuZ2UiLCJnZXRUZXh0RmllbGRzVG9CZVNlYXJjaGVkIiwibGlzdFNlYXJjaGFibGVGaWVsZHMiLCJzZWFyY2hhYmxlRmllbGROYW1lcyIsIm1hdGNoaW5nRmllbGRzIiwiYmVmb3JlQWN0aW9ucyIsImVuYWJsZUNvbHVtbnMiLCJlbmFibGVGaWx0ZXJzIiwiZW5hYmxlU29ydCIsImxpc3RNZW51SXRlbXMiLCJxdWVyeVByZXNldCIsInRpdGxlRmllbGQiLCJzZWFyY2hMYWJlbCIsInNlYXJjaExhYmVsVHJhbnNsYXRlZCIsImhhc1doZXJlUGFyYW0iLCJzaG91bGRJbml0aWFsaXplV2hlcmVPcGVuZWQiLCJ2aXNpYmxlRHJhd2VyIiwic2V0VmlzaWJsZURyYXdlciIsInBsYWNlaG9sZGVyVGV4dCIsIlF1ZXJ5UHJlc2V0QmFyIiwiaV8wIiwiR3JvdXBCeUJ1aWxkZXIiLCJQdWJsaXNoTWFueURyYXdlckNvbnRlbnQiLCJoYW5kbGVQdWJsaXNoIiwiUHVibGlzaE1hbnkiLCJBbGxBdmFpbGFibGUiLCJQdWJsaXNoTWFueV92NCIsImhhc1Blcm1pc3Npb24iLCJjb25maXJtTWFueVJlc3RvcmVEcmF3ZXJTbHVnIiwicmVzdG9yZU1hbnlSZXNwb25zZSIsInJlc3RvcmVkRG9jcyIsIlVucHVibGlzaE1hbnlEcmF3ZXJDb250ZW50IiwiaGFuZGxlVW5wdWJsaXNoIiwiVW5wdWJsaXNoTWFueSIsIlVucHVibGlzaE1hbnlfdjQiLCJMaXN0U2VsZWN0aW9uIiwic2hvd1NlbGVjdEFsbEFjcm9zc1BhZ2VzIiwib25BY3Rpb25TdWNjZXNzIiwiUmVzdG9yZU1hbnkiLCJDbG9zZU1vZGFsQnV0dG9uIiwiRGVmYXVsdExpc3RWaWV3VGFicyIsImlzVHJhc2hFbmFibGVkIiwiaXNGb2xkZXJzRW5hYmxlZCIsIm5ld1ZpZXdUeXBlIiwiYmIyMSIsImhhbmRsZVZpZXdDaGFuZ2UiLCJhbGxCdXR0b25MYWJlbCIsImFsbEJ1dHRvbklkIiwibGlzdEhlYWRlckNsYXNzIiwiTGlzdEhlYWRlciIsIlRpdGxlQWN0aW9ucyIsIkFmdGVyTGlzdEhlYWRlckNvbnRlbnQiLCJkcmF3ZXJCYXNlQ2xhc3MiLCJEcmF3ZXJSZWxhdGlvbnNoaXBTZWxlY3QiLCJlbmFibGVkQ29sbGVjdGlvbkNvbmZpZ3MiLCJhY3RpdmVDb2xsZWN0aW9uQ29uZmlnIiwiTGlzdERyYXdlckNyZWF0ZU5ld0RvY0J1dHRvbiIsIkxpc3RCdWxrVXBsb2FkQnV0dG9uIiwiaXNCdWxrVXBsb2FkRW5hYmxlZCIsIm9uQnVsa1VwbG9hZFN1Y2Nlc3MiLCJvcGVuQnVsa1VwbG9hZCIsIm9wZW5CdWxrVXBsb2FkRnJvbVByb3BzIiwiYnVsa1VwbG9hZERyYXdlclNsdWciLCJMaXN0Q3JlYXRlTmV3QnV0dG9uIiwibmV3RG9jdW1lbnRVUkwiLCJjb25maXJtRW1wdHlUcmFzaFNsdWciLCJMaXN0RW1wdHlUcmFzaEJ1dHRvbiIsInRyYXNoQ291bnQiLCJzZXRUcmFzaENvdW50IiwiaGFuZGxlRW1wdHlUcmFzaCIsIjAiLCJpc1RyYXNoUm91dGUiLCJncm91cEJ5RmllbGRQYXRoIiwiZ3JvdXBCeVZhbHVlIiwiY29sbGVjdGlvbkRlZmF1bHRzIiwiZGVmYXVsdExpbWl0cyIsIlBlclBhZ2UiLCJsaW1pdHMiLCJsaW1pdFRvVXNlIiwibGltaXROdW1iZXIiLCJQYWdlQ29udHJvbHNDb21wb25lbnQiLCJBZnRlclBhZ2VDb250cm9scyIsInBhZ2luYXRpb24iLCJyZXNldFBhZ2UiLCJQYWdlQ29udHJvbHMiLCJpbml0aWFsTGltaXQiLCJHcm91cEJ5UGFnZUNvbnRyb2xzIiwiTG9nT3V0SWNvbiIsIkxvZ291dCIsIk5hdkdyb3VwIiwiaXNPcGVuRnJvbVByb3BzIiwic2V0Q29sbGFwc2VkIiwic2V0QW5pbWF0ZSIsIm5ld0dyb3VwUHJlZnMiLCJ0b2dnbGVDb2xsYXBzZWQiLCJtaW5FbnRyaWVzRm9yU2VhcmNoIiwic2VhcmNoUGxhY2Vob2xkZXIiLCJzZXRTZWFyY2hWYWx1ZSIsImlzT3BlblJlZiIsInNlYXJjaElucHV0UmVmIiwiZmlsdGVyZWRFbnRyaWVzIiwic2VhcmNoVmFsdWUiLCJzaG93U2VhcmNoIiwiaGFzUmVzdWx0cyIsImhhbmRsZVRvZ2dsZU9wZW4iLCJoYW5kbGVUb2dnbGVDbG9zZSIsInBvcHVwUHJvcHMiLCJlbnRyeV8wIiwiQnJvd3NlQnlGb2xkZXJCdXR0b24iLCJmb2xkZXJzUm91dGUiLCJGb2xkZXJUeXBlRmllbGQiLCJhbGxTZWxlY3RPcHRpb25zIiwiRG9jdW1lbnRJY29uIiwiY2xpcFJ1bGUiLCJ0aHJlc2hvbGRQaXhlbHMiLCJpbml0aWFsUG9zIiwiaGFuZGxlUG9pbnRlckRvd24iLCJtb3ZlRXZlbnQiLCJoYW5kbGVQb2ludGVyTW92ZSIsIm9uUG9pbnRlckRvd24iLCJjbGVhbnVwIiwiaGFuZGxlUG9pbnRlclVwIiwidXBFdmVudCIsImhlYWRlckNlbGxzIiwiVGFibGVIZWFkIiwiVGFibGVCb2R5IiwiVGFibGVSb3ciLCJUYWJsZUNlbGwiLCJUYWJsZUhlYWRlciIsIkhpZGRlbkNlbGwiLCJEcmFnZ2FibGVUYWJsZVJvdyIsImRyYWdEYXRhIiwiX2lzRHJvcHBhYmxlIiwiaXNEcm9wcGFibGUiLCJpc1NlbGVjdGluZyIsImNvcHlPZlJlZiIsIkRyYWdnYWJsZVdpdGhDbGljayIsIkZvbGRlckZpbGVUYWJsZSIsInNob3dSZWxhdGlvbkNlbGwiLCJyZWxhdGlvblRvTWFwIiwiY29sdW1uc1RvU2hvdyIsInN1YmZvbGRlciIsInN1YmZvbGRlcklEIiwibmFtZV8wIiwiY2VsbFZhbHVlIiwiaXRlbUtleV8wIiwiZG9jdW1lbnRJRCIsInVuYWRqdXN0ZWRJbmRleCIsIm5hbWVfMSIsImNlbGxWYWx1ZV8wIiwiaW5kZXhfMSIsImV2ZW50XzIiLCJTaW1wbGVUYWJsZSIsIlRocmVlRG90c0ljb24iLCJGb2xkZXJGaWxlQ2FyZCIsImlzRGVsZXRpbmciLCJQb3B1cEFjdGlvbnMiLCJwcmV2aWV3VXJsIiwic2VsZWN0ZWRDb3VudCIsImRpc2FibGVEcm9wIiwiQXNzaWduZWRDb2xsZWN0aW9ucyIsImNvbGxlY3Rpb25zRGlzcGxheVRleHQiLCJDb250ZXh0Rm9sZGVyRmlsZUNhcmQiLCJJdGVtQ2FyZEdyaWQiLCJzdWJmb2xkZXJDb3VudCIsIl9pbmRleCIsInNhbml0aXplSUQiLCJJRExhYmVsIiwiUmVuZGVyVGl0bGUiLCJ0aXRsZUZyb21Db250ZXh0IiwiaWRBc1RpdGxlIiwiRW1wdHlTcGFjZSIsIlNvcnRDb2x1bW4iLCJkZXNjIiwiYXNjQ2xhc3NlcyIsImFzYyIsImRlc2NDbGFzc2VzIiwiSXRlbVNlYXJjaCIsImxhYmVsSWQiLCJnZXRJdGVtSW1hZ2VJbmZvIiwiZ2V0SXRlbURpc3BsYXlMYWJlbCIsIkl0ZW1zRHJhd2VyIiwiaXRlbUdyb3VwcyIsImZpbHRlcmVkSXRlbXMiLCJfaXRlbSIsIm1hdGNoaW5nSXRlbXMiLCJpdGVtXzAiLCJnZXRJdGVtTGFiZWwiLCJpdGVtTGFiZWwiLCJtYXRjaGVkSXRlbXMiLCJzZXRGaWx0ZXJlZEl0ZW1zIiwiZmluYWxUaXRsZSIsImdyb3VwSXRlbXMiLCJfaXRlbV8wIiwiaXRlbV8xIiwiU2x1Z0ZpZWxkIiwidXNlQXNTbHVnIiwic2V0SXNMb2NrZWQiLCJ2YWx1ZVRvU2x1Z2lmeSIsImZvcm1hdHRlZFNsdWciLCJ0b2dnbGVMb2NrIiwiQ29kZUJsb2NrSWNvbiIsIk1pbmltaXplTWF4aW1pemVJY29uIiwiaXNNaW5pbWl6ZWQiLCJNb3ZlRm9sZGVySWNvbiIsImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMiLCJmaWx0ZXJVbml0cyIsImluMiIsIm1vZGUiLCJHcmlkVmlld0ljb24iLCJMaXN0Vmlld0ljb24iLCJJbmZvIiwiU3VjY2VzcyIsIldhcm5pbmciLCJNb2RpZnlDbGllbnRGdW5jdGlvbkNvbnRleHQiLCJhZGRDbGllbnRGdW5jdGlvbiIsInJlbW92ZUNsaWVudEZ1bmN0aW9uIiwiQ2xpZW50RnVuY3Rpb25zQ29udGV4dCIsIkNsaWVudEZ1bmN0aW9uUHJvdmlkZXIiLCJjbGllbnRGdW5jdGlvbnMiLCJzZXRDbGllbnRGdW5jdGlvbnMiLCJzdGF0ZV8wIiwidXNlQWRkQ2xpZW50RnVuY3Rpb24iLCJ1c2VDbGllbnRGdW5jdGlvbnMiLCJ1c2VQb3B1cFdpbmRvdyIsImV2ZW50VHlwZSIsIm9uTWVzc2FnZSIsImlzUmVjZWl2aW5nTWVzc2FnZSIsInJlY2VpdmVNZXNzYWdlIiwib3JpZ2luIiwiZmVhdHVyZXMiLCJtZW51YmFyIiwidG9vbGJhciIsInBvcHVwT3B0aW9ucyIsInN0ckNvcHkiLCJpbm5lcldpZHRoIiwibmV3V2luZG93IiwiY2xvc2VkIiwiZ2V0QWJzb2x1dGVVcmwiLCJmb3JtYXRBYnNvbHV0ZVVSTCIsImluY29taW5nVVJMIiwicmVjdEludGVyc2VjdGlvbiIsImN1c3RvbUNvbGxpc2lvbkRldGVjdGlvbiIsImRyb3BwYWJsZUNvbnRhaW5lciIsInJlY3RJbnRlcnNlY3Rpb25Db2xsaXNpb25zIiwicHJldmlld0FyZWFSZWN0Iiwic2l6ZVJlZHVjZXIiLCJMaXZlUHJldmlld1Byb3ZpZGVyIiwiaW5jb21pbmdCcmVha3BvaW50cyIsImluY29taW5nSXNMaXZlUHJldmlld2luZyIsInByZXZpZXdVUkxGcm9tUHJvcHMiLCJ1cmxGcm9tUHJvcHMiLCJfc2V0SXNMaXZlUHJldmlld2luZyIsInNldFNob3VsZFJlbmRlcklmcmFtZSIsImxpdmVQcmV2aWV3aW5nIiwibGlzdGVuaW5nRm9yTWVzc2FnZXMiLCJzZXRMaXN0ZW5pbmdGb3JNZXNzYWdlcyIsImlzRmlyc3RSZW5kZXIiLCJsb2FkZWRVUkwiLCJzZXRMaXZlUHJldmlld1VSTCIsIl9pbmNvbWluZ1VSTCIsImV2IiwibmV3UG9zIiwiZm91bmRCcmVha3BvaW50IiwiYnAiLCJoYW5kbGVNZXNzYWdlIiwicmVhZHkiLCJoYW5kbGVXaW5kb3dDaGFuZ2UiLCJlZGl0Vmlld1R5cGUiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJQcm9ncmVzc0JhciIsInNldFByb2dyZXNzVG9TaG93Iiwic2hvdWxkRGVsYXlQcm9ncmVzcyIsImNsZWFyVGltZXJJRCIsImRlbGF5VGltZXJJRCIsInByb2dyZXNzVG9TaG93IiwiRW50aXR5VmlzaWJpbGl0eUNvbnRleHQiLCJFbnRpdHlWaXNpYmlsaXR5UHJvdmlkZXIiLCJ2aXNpYmxlRW50aXRpZXMiLCJpc0VudGl0eVZpc2libGUiLCJ1c2VFbnRpdHlWaXNpYmlsaXR5IiwidXNlUGFyYW1zIiwidXNlTmV4dFBhcmFtcyIsIlBhcmFtc1Byb3ZpZGVyIiwicG9pbnRlcldpdGhpbiIsIlNjcm9sbEluZm9Db250ZXh0IiwidXNlU2Nyb2xsSW5mbyIsInByZXZTY3JvbGxYIiwicHJldlNjcm9sbFkiLCJwcmV2WERpcmVjdGlvbiIsInByZXZZRGlyZWN0aW9uIiwicHJldkhhc1Njcm9sbGVkIiwiaGFzU2Nyb2xsZWQiLCJjdXJyZW50U2Nyb2xsWCIsImN1cnJlbnRTY3JvbGxZIiwiZXZlbnRzRmlyZWQiLCJ4RGlmZmVyZW5jZSIsInlEaWZmZXJlbmNlIiwieFBlcmNlbnRhZ2UiLCJ5UGVyY2VudGFnZSIsInRvdGFsUGVyY2VudGFnZSIsInhEaXJlY3Rpb24iLCJ5RGlyZWN0aW9uIiwiU2Nyb2xsSW5mb1Byb3ZpZGVyIiwiQ2xvc2VNb2RhbE9uUm91dGVDaGFuZ2UiLCJjbG9zZUFsbE1vZGFsc0VmZmVjdEV2ZW50IiwiaW5pdGlhbFJlbmRlclJlZiIsImZhY2VsZXNzVUlJbXBvcnQiLCJ1c2VOZXh0U2VhcmNoUGFyYW1zIiwiaW5pdGlhbENvbnRleHQiLCJzdHJpbmdpZnlQYXJhbXMiLCJTZWFyY2hQYXJhbXNQcm92aWRlciIsInNlYXJjaFN0cmluZyIsIlRvYXN0Q29udGFpbmVyIiwiaW5mbyIsIndhcm5pbmciLCJSb290UHJvdmlkZXIiLCJkYXRlRk5TS2V5IiwiZmFsbGJhY2tMYW5nIiwiaXNOYXZPcGVuIiwibGFuZ3VhZ2VDb2RlIiwibGFuZ3VhZ2VPcHRpb25zIiwic3dpdGNoTGFuZ3VhZ2VTZXJ2ZXJBY3Rpb24iLCJ0cmFuc2xhdGlvbnMiLCJwcm9jZXNzIiwiZW52IiwiTkVYVF9QVUJMSUNfRU5BQkxFX1JPVVRFUl9DQUNIRV9SRUZSRVNIIiwiQ29uZmlnUHJvdmlkZXIiLCJUcmFuc2xhdGlvblByb3ZpZGVyIiwieHMiLCJUaGVtZVByb3ZpZGVyIiwidXNlcm5hbWUiLCJFbWFpbEFuZFVzZXJuYW1lRmllbGRzIiwibG9naW5XaXRoVXNlcm5hbWUiLCJnZXRBdXRoRmllbGRQZXJtaXNzaW9uIiwicGVybWlzc2lvbnNSZXN1bHQiLCJvcGVyYXRpb25Gcm9tUHJvcHMiLCJoYXNFbWFpbEZpZWxkT3ZlcnJpZGUiLCJoYXNVc2VybmFtZUZpZWxkT3ZlcnJpZGUiLCJlbWFpbFBlcm1pc3Npb25zIiwidXNlcm5hbWVQZXJtaXNzaW9ucyIsInNob3dFbWFpbEZpZWxkIiwicmVxdWlyZUVtYWlsIiwic2hvd1VzZXJuYW1lRmllbGQiLCJTZWxlY3RBbGwiLCJTZWxlY3RSb3ciLCJTZWxlY3RNYW55IiwiRGVmYXVsdExpc3RWaWV3IiwiQWZ0ZXJMaXN0IiwiQWZ0ZXJMaXN0VGFibGUiLCJCZWZvcmVMaXN0IiwiQmVmb3JlTGlzdFRhYmxlIiwiaGFzQ3JlYXRlUGVybWlzc2lvbkZyb21Qcm9wcyIsIkluaXRpYWxUYWJsZSIsImlzVXBsb2FkQ29sbGVjdGlvbiIsImJhc2VMYWJlbCIsInRyYXNoTGFiZWwiLCJDb2xsZWN0aW9uTGlzdEhlYWRlciIsInVzZURuZE1vbml0b3IiLCJtb3ZlVG9Gb2xkZXJEcmF3ZXJTbHVnIiwiY29uZmlybURlbGV0ZURyYXdlclNsdWciLCJDdXJyZW50Rm9sZGVyQWN0aW9ucyIsImRlbGV0ZUN1cnJlbnRGb2xkZXIiLCJEb3RzIiwiX2ZvbGRlck9yRG9jdW1lbnRUaXRsZSIsIkRyYWdPdmVybGF5U2VsZWN0aW9uIiwiZHJvcEFuaW1hdGlvbiIsIm1vZGlmaWVycyIsInNuYXBUb3BMZWZ0VG9DdXJzb3IiLCJkcmFnZ2luZ05vZGVSZWN0IiwiYWN0aXZhdG9yQ29vcmRpbmF0ZXMiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInNvcnRPbk9wdGlvbnMiLCJvcmRlck9uT3B0aW9ucyIsIlNvcnRCeVBpbGwiLCJzb3J0RGlyZWN0aW9uIiwiU29ydFVwSWNvbiIsInNlbGVjdGVkU29ydE9wdGlvbiIsInNlbGVjdGVkT3JkZXJPcHRpb24iLCJUb2dnbGVWaWV3QnV0dG9ucyIsImFjdGl2ZVZpZXciLCJzZXRBY3RpdmVWaWV3IiwiRWRpdEZvbGRlckFjdGlvbiIsImdyb3VwZWRTZWxlY3Rpb25zIiwic2luZ2xlTm9uRm9sZGVyQ29sbGVjdGlvblNlbGVjdGVkIiwiRGVmYXVsdENvbGxlY3Rpb25Gb2xkZXJWaWV3IiwiZm9sZGVyQ29sbGVjdGlvblNsdWdzIiwiQ29sbGVjdGlvbkZvbGRlclZpZXdJbkNvbnRleHQiLCJBZnRlckZvbGRlckxpc3QiLCJBZnRlckZvbGRlckxpc3RUYWJsZSIsIkJlZm9yZUZvbGRlckxpc3QiLCJCZWZvcmVGb2xkZXJMaXN0VGFibGUiLCJ2aWV3UHJlZmVyZW5jZSIsInZpZXciLCJoYW5kbGVTZXRWaWV3VHlwZSIsImNydW1iSW5kZXgiLCJzZWFyY2hfMCIsInRvdGFsRG9jc0FuZFN1YmZvbGRlcnMiLCJEbmRFdmVudExpc3RlbmVyIiwib25EcmFnQ2FuY2VsIiwiQ2hlY2tib3hQb3B1cCIsInNlbGVjdGVkVmFsdWVzIiwibmV3U2VsZWN0ZWRWYWx1ZXMiLCJGaWx0ZXJGb2xkZXJUeXBlUGlsbCIsInZpc2libGVDb2xsZWN0aW9uU2x1Z3MiLCJhbGxDb2xsZWN0aW9uT3B0aW9ucyIsIkRlZmF1bHRCcm93c2VCeUZvbGRlclZpZXciLCJCcm93c2VCeUZvbGRlclZpZXdJbkNvbnRleHQiLCJsb2NhdGlvbkxhYmVsIiwibGlzdEhlYWRlclRpdGxlIiwibm9uRm9sZGVyQ29sbGVjdGlvblNsdWdzIiwiRG9jdW1lbnREcmF3ZXJIZWFkZXIiLCJBZnRlckhlYWRlciIsInNob3dEb2N1bWVudElEIiwiaGFuZGxlT25DbG9zZSIsIkRvY3VtZW50SUQiLCJEb2N1bWVudFN0YWxlRGF0YSIsIm9uUmVsb2FkIiwic2hpbW1lckRlbGF5cyIsIm1pblZpc2libGUiLCJvbkxvYWRGcm9tUHJvcHMiLCJzaGltbWVyU2hvd25BdFJlZiIsInNldFNob3dTaGltbWVyIiwic2hvd1RpbWVyUmVmIiwiaGlkZVRpbWVyUmVmIiwiY2xlYXJUaW1lcnMiLCJzaG93U2hpbW1lciIsImVsYXBzZWQiLCJyZW1haW5pbmdWaXNpYmxlIiwic2FuZGJveCIsIkRldmljZUNvbnRhaW5lciIsImRldmljZUZyYW1lUmVmIiwib3V0ZXJGcmFtZVJlZiIsImRlc2lyZWRTaXplIiwib3V0ZXJGcmFtZVNpemUiLCJkZXZpY2VJc0xhcmdlclRoYW5GcmFtZSIsInNjYWxlZERlc2lyZWRXaWR0aCIsInNjYWxlZERldmljZVdpZHRoIiwic2NhbGVkRGV2aWNlRGlmZmVyZW5jZVBpeGVscyIsImRpZmZlcmVuY2VGcm9tRGV2aWNlVG9GcmFtZSIsIlByZXZpZXdGcmFtZVNpemVJbnB1dCIsImF4aXMiLCJzZXRJbnRlcm5hbFN0YXRlIiwiem9vbU9wdGlvbnMiLCJUb29sYmFyQ29udHJvbHMiLCJjdXN0b21PcHRpb24iLCJjbG9zZV8wIiwiem9vbVZhbHVlIiwiYnBfMCIsIkRyYWdnYWJsZVRvb2xiYXIiLCJTdGF0aWNUb29sYmFyIiwiTGl2ZVByZXZpZXdUb29sYmFyIiwiZXh0ZXJuYWxseVVwZGF0ZWRSZWxhdGlvbnNoaXAiLCJtZXNzYWdlXzAiLCJJZnJhbWVMb2FkZXIiLCJyZWRpcmVjdFJvdXRlIiwiaGFuZGxlVGFrZU92ZXIiLCJkb2N1bWVudExvY2tTdGF0ZVJlZiIsImlzTG9ja2luZ0VuYWJsZWQiLCJpc1dpdGhpbkRvYyIsInNldElzUmVhZE9ubHlGb3JJbmNvbWluZ1VzZXIiLCJBUElLZXkiLCJpbml0aWFsQVBJS2V5IiwiaGlnaGxpZ2h0ZWRGaWVsZCIsInNldEhpZ2hsaWdodGVkRmllbGQiLCJzaG93S2V5Iiwic2V0U2hvd0tleSIsImFwaUtleSIsImFwaUtleUZpZWxkIiwiYXBpS2V5VmFsdWUiLCJhcGlLZXlMYWJlbCIsIkFQSUtleUxhYmVsIiwiQXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwicmVxdWlyZVBhc3N3b3JkIiwic2V0VmFsaWRhdGVCZWZvcmVTdWJtaXQiLCJ1c2VBUElLZXkiLCJ2ZXJpZnkiLCJzZXRDaGFuZ2luZ1Bhc3N3b3JkIiwiZW5hYmxlQVBJS2V5IiwiY2hhbmdpbmdQYXNzd29yZCIsInNob3dQYXNzd29yZEZpZWxkcyIsInNob3dVbmxvY2siLCJoYXNQYXNzd29yZEZpZWxkT3ZlcnJpZGUiLCJwYXNzd29yZFBlcm1pc3Npb25zIiwiaGFzTG9naW5GaWVsZE92ZXJyaWRlIiwiZW1haWxQZXJtaXNzaW9uIiwidXNlcm5hbWVQZXJtaXNzaW9uIiwiaGFzRW1haWxBbmRVc2VybmFtZUZpZWxkcyIsImVuYWJsZUZpZWxkcyIsImFwaUtleVBlcm1pc3Npb25zIiwiYXBpS2V5UmVhZE9ubHkiLCJlbmFibGVBUElLZXlSZWFkT25seSIsImhhc1Blcm1pc3Npb25Ub1VubG9jayIsImNoYW5naW5nUGFzc3dvcmRfMCIsImhhbmRsZUNoYW5nZVBhc3N3b3JkIiwidW5sb2NrIiwiY2FuUmVhZEFwaUtleSIsInNob3dBdXRoQmxvY2siLCJTZXREb2N1bWVudFN0ZXBOYXYiLCJwbHVyYWxMYWJlbCIsIlNldERvY3VtZW50VGl0bGUiLCJEZWZhdWx0RWRpdFZpZXciLCJDdXN0b21MaXZlUHJldmlldyIsIkxpdmVQcmV2aWV3IiwiQWZ0ZXJEb2N1bWVudCIsImFwaVVSTCIsImRpc2FibGVMZWF2ZVdpdGhvdXRTYXZpbmciLCJhYm9ydE9uU2F2ZVJlZiIsImxvY2tEb2N1bWVudHNQcm9wIiwibG9ja0RvY3VtZW50cyIsImxvY2tEdXJhdGlvbiIsImxvY2tEdXJhdGlvbkluTWlsbGlzZWNvbmRzIiwiaXNSZWFkT25seUZvckluY29taW5nVXNlciIsInNob3dUYWtlT3Zlck1vZGFsIiwic2V0U2hvd1Rha2VPdmVyTW9kYWwiLCJzaG93U3RhbGVEYXRhTW9kYWwiLCJzZXRTaG93U3RhbGVEYXRhTW9kYWwiLCJoYXNDaGVja2VkRm9yU3RhbGVEYXRhUmVmIiwic2V0RWRpdFNlc3Npb25TdGFydFRpbWUiLCJvcmlnaW5hbFVwZGF0ZWRBdFJlZiIsInNhdmVDb3VudGVyUmVmIiwiaXNTYXZpbmdSZWYiLCJsb2NrRXhwaXJ5VGltZSIsImlzTG9ja0V4cGlyZWQiLCJwcmV2ZW50TGVhdmVXaXRob3V0U2F2aW5nIiwidmFsaWRhdGVCZWZvcmVTdWJtaXQiLCJuZXh0SHJlZlJlZiIsImxvY2tlZFN0YXRlIiwiaGFuZGxlRG9jdW1lbnRMb2NraW5nIiwicHJldmlvdXNPd25lcklEIiwibG9ja2VkVXNlcklEIiwibGFzdEVkaXRlZEF0IiwibmV4dEhyZWYiLCJoYW5kbGVMZWF2ZUNvbmZpcm0iLCJsb2NrVXNlciIsImlzTG9ja093bmVkQnlDdXJyZW50VXNlciIsIm5leHRQYXRoIiwiaXNJbnRlcm5hbFZpZXciLCJvcGVyYXRpb25fMCIsImxpdmVQcmV2aWV3VVJMXzAiLCJyZXR1cm5MaXZlUHJldmlld1VSTCIsInJldHVybkxvY2tTdGF0dXMiLCJyZXR1cm5QcmV2aWV3VVJMIiwiY29udHJvbGxlcl8wIiwic2F2ZUNvdW50ZXJBdFN0YXJ0IiwiZWRpdFNlc3Npb25TdGFydFRpbWUiLCJ0aW1lU2luY2VMYXN0VXBkYXRlIiwidXBkYXRlTGFzdEVkaXRlZCIsImNoZWNrRm9yU3RhbGVEYXRhIiwiZG9jUHJlZmVyZW5jZXNfMCIsIm9yaWdpbmFsVXBkYXRlZEF0IiwibG9ja2VkU3RhdGVfMCIsInN0YWxlRGF0YVN0YXRlIiwiaXNTYXZpbmdBdFN0YXJ0IiwiaXNTdGFsZSIsImFib3J0T25TYXZlIiwiUEVORElOR19TVUNDRVNTX1RPQVNUX0tFWSIsInBlbmRpbmdNZXNzYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJzaG91bGRTaG93RG9jdW1lbnRMb2NrZWRNb2RhbCIsImlzRm9sZGVyQ29sbGVjdGlvbiIsImhhbmRsZVN0YWxlRGF0YVJlbG9hZCIsIkZpZWxkRGlmZkxhYmVsIiwibmVzdGluZ0xldmVsIiwiZ3JpZFRlbXBsYXRlQ29sdW1ucyJdLCJpZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxNSwxNywxOCwxOSwyMCwyMSwyMiwyMyw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMjIxLDIyMiwyMjMsMjI0LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDQzMiw0NDAsNDQxLDQ0Miw0NDMsNDQ0LDQ0NSw2MjEsNjIyLDYyMyw2MjQsNjI1XSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@payloadcms+ui@3.81.0_@types+react@19.2.14_monaco-editor@0.55.1_next@16.1.6_@babel+core_1a0723ff7d32d4449bba15efd7ede2a4/node_modules/@payloadcms/ui/dist/exports/client/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js": /*!********************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js ***! \********************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0;\nconst core_1 = __webpack_require__(/*! ./core */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/core.js\");\nconst draft7_1 = __webpack_require__(/*! ./vocabularies/draft7 */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js\");\nconst discriminator_1 = __webpack_require__(/*! ./vocabularies/discriminator */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js\");\nconst draft7MetaSchema = __webpack_require__(/*! ./refs/json-schema-draft-07.json */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\";\nclass Ajv extends core_1.default {\n _addVocabularies() {\n super._addVocabularies();\n draft7_1.default.forEach((v) => this.addVocabulary(v));\n if (this.opts.discriminator)\n this.addKeyword(discriminator_1.default);\n }\n _addDefaultMetaSchema() {\n super._addDefaultMetaSchema();\n if (!this.opts.meta)\n return;\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema;\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n }\n defaultMeta() {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n }\n}\nexports.Ajv = Ajv;\nmodule.exports = exports = Ajv;\nmodule.exports.Ajv = Ajv;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports[\"default\"] = Ajv;\nvar validate_1 = __webpack_require__(/*! ./compile/validate */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js\");\nObject.defineProperty(exports, \"KeywordCxt\", ({ enumerable: true, get: function () { return validate_1.KeywordCxt; } }));\nvar codegen_1 = __webpack_require__(/*! ./compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nObject.defineProperty(exports, \"_\", ({ enumerable: true, get: function () { return codegen_1._; } }));\nObject.defineProperty(exports, \"str\", ({ enumerable: true, get: function () { return codegen_1.str; } }));\nObject.defineProperty(exports, \"stringify\", ({ enumerable: true, get: function () { return codegen_1.stringify; } }));\nObject.defineProperty(exports, \"nil\", ({ enumerable: true, get: function () { return codegen_1.nil; } }));\nObject.defineProperty(exports, \"Name\", ({ enumerable: true, get: function () { return codegen_1.Name; } }));\nObject.defineProperty(exports, \"CodeGen\", ({ enumerable: true, get: function () { return codegen_1.CodeGen; } }));\nvar validation_error_1 = __webpack_require__(/*! ./runtime/validation_error */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js\");\nObject.defineProperty(exports, \"ValidationError\", ({ enumerable: true, get: function () { return validation_error_1.default; } }));\nvar ref_error_1 = __webpack_require__(/*! ./compile/ref_error */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js\");\nObject.defineProperty(exports, \"MissingRefError\", ({ enumerable: true, get: function () { return ref_error_1.default; } }));\n//# sourceMappingURL=ajv.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUJBQXVCLEdBQUcsdUJBQXVCLEdBQUcsZUFBZSxHQUFHLFlBQVksR0FBRyxXQUFXLEdBQUcsaUJBQWlCLEdBQUcsV0FBVyxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsR0FBRyxXQUFXO0FBQ2pMLGVBQWUsbUJBQU8sQ0FBQyxpR0FBUTtBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQywrSEFBdUI7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsbUpBQThCO0FBQzlELHlCQUF5QixtQkFBTyxDQUFDLGtKQUFrQztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxrQkFBa0I7QUFDbEIsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFlO0FBQ2YsaUJBQWlCLG1CQUFPLENBQUMsK0hBQW9CO0FBQzdDLDhDQUE2QyxFQUFFLHFDQUFxQyxpQ0FBaUMsRUFBQztBQUN0SCxnQkFBZ0IsbUJBQU8sQ0FBQyw2SEFBbUI7QUFDM0MscUNBQW9DLEVBQUUscUNBQXFDLHVCQUF1QixFQUFDO0FBQ25HLHVDQUFzQyxFQUFFLHFDQUFxQyx5QkFBeUIsRUFBQztBQUN2Ryw2Q0FBNEMsRUFBRSxxQ0FBcUMsK0JBQStCLEVBQUM7QUFDbkgsdUNBQXNDLEVBQUUscUNBQXFDLHlCQUF5QixFQUFDO0FBQ3ZHLHdDQUF1QyxFQUFFLHFDQUFxQywwQkFBMEIsRUFBQztBQUN6RywyQ0FBMEMsRUFBRSxxQ0FBcUMsNkJBQTZCLEVBQUM7QUFDL0cseUJBQXlCLG1CQUFPLENBQUMseUlBQTRCO0FBQzdELG1EQUFrRCxFQUFFLHFDQUFxQyxzQ0FBc0MsRUFBQztBQUNoSSxrQkFBa0IsbUJBQU8sQ0FBQywySEFBcUI7QUFDL0MsbURBQWtELEVBQUUscUNBQXFDLCtCQUErQixFQUFDO0FBQ3pIIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2Fqdi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWlzc2luZ1JlZkVycm9yID0gZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3IgPSBleHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLktleXdvcmRDeHQgPSBleHBvcnRzLkFqdiA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCBkcmFmdDdfMSA9IHJlcXVpcmUoXCIuL3ZvY2FidWxhcmllcy9kcmFmdDdcIik7XG5jb25zdCBkaXNjcmltaW5hdG9yXzEgPSByZXF1aXJlKFwiLi92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvclwiKTtcbmNvbnN0IGRyYWZ0N01ldGFTY2hlbWEgPSByZXF1aXJlKFwiLi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA3Lmpzb25cIik7XG5jb25zdCBNRVRBX1NVUFBPUlRfREFUQSA9IFtcIi9wcm9wZXJ0aWVzXCJdO1xuY29uc3QgTUVUQV9TQ0hFTUFfSUQgPSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hXCI7XG5jbGFzcyBBanYgZXh0ZW5kcyBjb3JlXzEuZGVmYXVsdCB7XG4gICAgX2FkZFZvY2FidWxhcmllcygpIHtcbiAgICAgICAgc3VwZXIuX2FkZFZvY2FidWxhcmllcygpO1xuICAgICAgICBkcmFmdDdfMS5kZWZhdWx0LmZvckVhY2goKHYpID0+IHRoaXMuYWRkVm9jYWJ1bGFyeSh2KSk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZGlzY3JpbWluYXRvcilcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5d29yZChkaXNjcmltaW5hdG9yXzEuZGVmYXVsdCk7XG4gICAgfVxuICAgIF9hZGREZWZhdWx0TWV0YVNjaGVtYSgpIHtcbiAgICAgICAgc3VwZXIuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmICghdGhpcy5vcHRzLm1ldGEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG1ldGFTY2hlbWEgPSB0aGlzLm9wdHMuJGRhdGFcbiAgICAgICAgICAgID8gdGhpcy4kZGF0YU1ldGFTY2hlbWEoZHJhZnQ3TWV0YVNjaGVtYSwgTUVUQV9TVVBQT1JUX0RBVEEpXG4gICAgICAgICAgICA6IGRyYWZ0N01ldGFTY2hlbWE7XG4gICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBNRVRBX1NDSEVNQV9JRCwgZmFsc2UpO1xuICAgICAgICB0aGlzLnJlZnNbXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYVwiXSA9IE1FVEFfU0NIRU1BX0lEO1xuICAgIH1cbiAgICBkZWZhdWx0TWV0YSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPVxuICAgICAgICAgICAgc3VwZXIuZGVmYXVsdE1ldGEoKSB8fCAodGhpcy5nZXRTY2hlbWEoTUVUQV9TQ0hFTUFfSUQpID8gTUVUQV9TQ0hFTUFfSUQgOiB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnRzLkFqdiA9IEFqdjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IEFqdjtcbm1vZHVsZS5leHBvcnRzLkFqdiA9IEFqdjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEFqdjtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG52YXIgdmFsaWRhdGlvbl9lcnJvcl8xID0gcmVxdWlyZShcIi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbnZhciByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWlzc2luZ1JlZkVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWZfZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWp2LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js": /*!*************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js ***! \*************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n constructor(s) {\n super();\n if (!exports.IDENTIFIER.test(s))\n throw new Error(\"CodeGen: name must be a valid identifier\");\n this.str = s;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n return false;\n }\n get names() {\n return { [this.str]: 1 };\n }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n constructor(code) {\n super();\n this._items = typeof code === \"string\" ? [code] : code;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n if (this._items.length > 1)\n return false;\n const item = this._items[0];\n return item === \"\" || item === '\"\"';\n }\n get str() {\n var _a;\n return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n }\n get names() {\n var _a;\n return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n if (c instanceof Name)\n names[c.str] = (names[c.str] || 0) + 1;\n return names;\n }, {})));\n }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n const code = [strs[0]];\n let i = 0;\n while (i < args.length) {\n addCodeArg(code, args[i]);\n code.push(strs[++i]);\n }\n return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n const expr = [safeStringify(strs[0])];\n let i = 0;\n while (i < args.length) {\n expr.push(plus);\n addCodeArg(expr, args[i]);\n expr.push(plus, safeStringify(strs[++i]));\n }\n optimize(expr);\n return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n if (arg instanceof _Code)\n code.push(...arg._items);\n else if (arg instanceof Name)\n code.push(arg);\n else\n code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n let i = 1;\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n if (res !== undefined) {\n expr.splice(i - 1, 3, res);\n continue;\n }\n expr[i++] = \"+\";\n }\n i++;\n }\n}\nfunction mergeExprItems(a, b) {\n if (b === '\"\"')\n return a;\n if (a === '\"\"')\n return b;\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"')\n return;\n if (typeof b != \"string\")\n return `${a.slice(0, -1)}${b}\"`;\n if (b[0] === '\"')\n return a.slice(0, -1) + b.slice(1);\n return;\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n return `\"${a}${b.slice(1)}`;\n return;\n}\nfunction strConcat(c1, c2) {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n return new _Code(`${key}`);\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vY29kZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsR0FBRyx3QkFBd0IsR0FBRyxtQkFBbUIsR0FBRyxxQkFBcUIsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUIsR0FBRyxrQkFBa0IsR0FBRyxXQUFXLEdBQUcsU0FBUyxHQUFHLFdBQVcsR0FBRyxhQUFhLEdBQUcsWUFBWSxHQUFHLGtCQUFrQixHQUFHLG1CQUFtQjtBQUMxUTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtHQUErRyxFQUFFLEVBQUUsRUFBRTtBQUNySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsSUFBSTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGVBQWUsRUFBRSxFQUFFO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxFQUFFLFdBQVc7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsNERBQTRELEdBQUcsRUFBRSxHQUFHO0FBQ3BFO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0Esa0ZBQWtGLElBQUksV0FBVyxJQUFJO0FBQ3JHO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixJQUFJO0FBQ2hDO0FBQ0EscURBQXFELElBQUk7QUFDekQ7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5nZXRFc21FeHBvcnROYW1lID0gZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJDb25jYXQgPSBleHBvcnRzLmFkZENvZGVBcmcgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5fQ29kZSA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMuSURFTlRJRklFUiA9IGV4cG9ydHMuX0NvZGVPck5hbWUgPSB2b2lkIDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhbmVvdXMtY2xhc3NcbmNsYXNzIF9Db2RlT3JOYW1lIHtcbn1cbmV4cG9ydHMuX0NvZGVPck5hbWUgPSBfQ29kZU9yTmFtZTtcbmV4cG9ydHMuSURFTlRJRklFUiA9IC9eW2EteiRfXVthLXokXzAtOV0qJC9pO1xuY2xhc3MgTmFtZSBleHRlbmRzIF9Db2RlT3JOYW1lIHtcbiAgICBjb25zdHJ1Y3RvcihzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICghZXhwb3J0cy5JREVOVElGSUVSLnRlc3QocykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBuYW1lIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXCIpO1xuICAgICAgICB0aGlzLnN0ciA9IHM7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHI7XG4gICAgfVxuICAgIGVtcHR5U3RyKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHsgW3RoaXMuc3RyXTogMSB9O1xuICAgIH1cbn1cbmV4cG9ydHMuTmFtZSA9IE5hbWU7XG5jbGFzcyBfQ29kZSBleHRlbmRzIF9Db2RlT3JOYW1lIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdHlwZW9mIGNvZGUgPT09IFwic3RyaW5nXCIgPyBbY29kZV0gOiBjb2RlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9pdGVtc1swXTtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiXCIgfHwgaXRlbSA9PT0gJ1wiXCInO1xuICAgIH1cbiAgICBnZXQgc3RyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fc3RyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAodGhpcy5fc3RyID0gdGhpcy5faXRlbXMucmVkdWNlKChzLCBjKSA9PiBgJHtzfSR7Y31gLCBcIlwiKSkpO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLl9uYW1lcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX25hbWVzID0gdGhpcy5faXRlbXMucmVkdWNlKChuYW1lcywgYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBOYW1lKVxuICAgICAgICAgICAgICAgIG5hbWVzW2Muc3RyXSA9IChuYW1lc1tjLnN0cl0gfHwgMCkgKyAxO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgICB9LCB7fSkpKTtcbiAgICB9XG59XG5leHBvcnRzLl9Db2RlID0gX0NvZGU7XG5leHBvcnRzLm5pbCA9IG5ldyBfQ29kZShcIlwiKTtcbmZ1bmN0aW9uIF8oc3RycywgLi4uYXJncykge1xuICAgIGNvbnN0IGNvZGUgPSBbc3Ryc1swXV07XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgICAgYWRkQ29kZUFyZyhjb2RlLCBhcmdzW2ldKTtcbiAgICAgICAgY29kZS5wdXNoKHN0cnNbKytpXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX0NvZGUoY29kZSk7XG59XG5leHBvcnRzLl8gPSBfO1xuY29uc3QgcGx1cyA9IG5ldyBfQ29kZShcIitcIik7XG5mdW5jdGlvbiBzdHIoc3RycywgLi4uYXJncykge1xuICAgIGNvbnN0IGV4cHIgPSBbc2FmZVN0cmluZ2lmeShzdHJzWzBdKV07XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMpO1xuICAgICAgICBhZGRDb2RlQXJnKGV4cHIsIGFyZ3NbaV0pO1xuICAgICAgICBleHByLnB1c2gocGx1cywgc2FmZVN0cmluZ2lmeShzdHJzWysraV0pKTtcbiAgICB9XG4gICAgb3B0aW1pemUoZXhwcik7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShleHByKTtcbn1cbmV4cG9ydHMuc3RyID0gc3RyO1xuZnVuY3Rpb24gYWRkQ29kZUFyZyhjb2RlLCBhcmcpIHtcbiAgICBpZiAoYXJnIGluc3RhbmNlb2YgX0NvZGUpXG4gICAgICAgIGNvZGUucHVzaCguLi5hcmcuX2l0ZW1zKTtcbiAgICBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBOYW1lKVxuICAgICAgICBjb2RlLnB1c2goYXJnKTtcbiAgICBlbHNlXG4gICAgICAgIGNvZGUucHVzaChpbnRlcnBvbGF0ZShhcmcpKTtcbn1cbmV4cG9ydHMuYWRkQ29kZUFyZyA9IGFkZENvZGVBcmc7XG5mdW5jdGlvbiBvcHRpbWl6ZShleHByKSB7XG4gICAgbGV0IGkgPSAxO1xuICAgIHdoaWxlIChpIDwgZXhwci5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChleHByW2ldID09PSBwbHVzKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBtZXJnZUV4cHJJdGVtcyhleHByW2kgLSAxXSwgZXhwcltpICsgMV0pO1xuICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZXhwci5zcGxpY2UoaSAtIDEsIDMsIHJlcyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByW2krK10gPSBcIitcIjtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxufVxuZnVuY3Rpb24gbWVyZ2VFeHBySXRlbXMoYSwgYikge1xuICAgIGlmIChiID09PSAnXCJcIicpXG4gICAgICAgIHJldHVybiBhO1xuICAgIGlmIChhID09PSAnXCJcIicpXG4gICAgICAgIHJldHVybiBiO1xuICAgIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChiIGluc3RhbmNlb2YgTmFtZSB8fCBhW2EubGVuZ3RoIC0gMV0gIT09ICdcIicpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuIGAke2Euc2xpY2UoMCwgLTEpfSR7Yn1cImA7XG4gICAgICAgIGlmIChiWzBdID09PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuIGEuc2xpY2UoMCwgLTEpICsgYi5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGIgPT0gXCJzdHJpbmdcIiAmJiBiWzBdID09PSAnXCInICYmICEoYSBpbnN0YW5jZW9mIE5hbWUpKVxuICAgICAgICByZXR1cm4gYFwiJHthfSR7Yi5zbGljZSgxKX1gO1xuICAgIHJldHVybjtcbn1cbmZ1bmN0aW9uIHN0ckNvbmNhdChjMSwgYzIpIHtcbiAgICByZXR1cm4gYzIuZW1wdHlTdHIoKSA/IGMxIDogYzEuZW1wdHlTdHIoKSA/IGMyIDogc3RyIGAke2MxfSR7YzJ9YDtcbn1cbmV4cG9ydHMuc3RyQ29uY2F0ID0gc3RyQ29uY2F0O1xuLy8gVE9ETyBkbyBub3QgYWxsb3cgYXJyYXlzIGhlcmVcbmZ1bmN0aW9uIGludGVycG9sYXRlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgeCA9PSBcImJvb2xlYW5cIiB8fCB4ID09PSBudWxsXG4gICAgICAgID8geFxuICAgICAgICA6IHNhZmVTdHJpbmdpZnkoQXJyYXkuaXNBcnJheSh4KSA/IHguam9pbihcIixcIikgOiB4KTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeSh4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShzYWZlU3RyaW5naWZ5KHgpKTtcbn1cbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZnVuY3Rpb24gc2FmZVN0cmluZ2lmeSh4KSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHgpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDI4L2csIFwiXFxcXHUyMDI4XCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csIFwiXFxcXHUyMDI5XCIpO1xufVxuZXhwb3J0cy5zYWZlU3RyaW5naWZ5ID0gc2FmZVN0cmluZ2lmeTtcbmZ1bmN0aW9uIGdldFByb3BlcnR5KGtleSkge1xuICAgIHJldHVybiB0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIgJiYgZXhwb3J0cy5JREVOVElGSUVSLnRlc3Qoa2V5KSA/IG5ldyBfQ29kZShgLiR7a2V5fWApIDogXyBgWyR7a2V5fV1gO1xufVxuZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGdldFByb3BlcnR5O1xuLy9Eb2VzIGJlc3QgZWZmb3J0IHRvIGZvcm1hdCB0aGUgbmFtZSBwcm9wZXJseVxuZnVuY3Rpb24gZ2V0RXNtRXhwb3J0TmFtZShrZXkpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfQ29kZShgJHtrZXl9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogaW52YWxpZCBleHBvcnQgbmFtZTogJHtrZXl9LCB1c2UgZXhwbGljaXQgJGlkIG5hbWUgbWFwcGluZ2ApO1xufVxuZXhwb3J0cy5nZXRFc21FeHBvcnROYW1lID0gZ2V0RXNtRXhwb3J0TmFtZTtcbmZ1bmN0aW9uIHJlZ2V4cENvZGUocngpIHtcbiAgICByZXR1cm4gbmV3IF9Db2RlKHJ4LnRvU3RyaW5nKCkpO1xufVxuZXhwb3J0cy5yZWdleHBDb2RlID0gcmVnZXhwQ29kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvZGUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js": /*!**************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = __webpack_require__(/*! ./code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js\");\nconst scope_1 = __webpack_require__(/*! ./scope */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js\");\nvar code_2 = __webpack_require__(/*! ./code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js\");\nObject.defineProperty(exports, \"_\", ({ enumerable: true, get: function () { return code_2._; } }));\nObject.defineProperty(exports, \"str\", ({ enumerable: true, get: function () { return code_2.str; } }));\nObject.defineProperty(exports, \"strConcat\", ({ enumerable: true, get: function () { return code_2.strConcat; } }));\nObject.defineProperty(exports, \"nil\", ({ enumerable: true, get: function () { return code_2.nil; } }));\nObject.defineProperty(exports, \"getProperty\", ({ enumerable: true, get: function () { return code_2.getProperty; } }));\nObject.defineProperty(exports, \"stringify\", ({ enumerable: true, get: function () { return code_2.stringify; } }));\nObject.defineProperty(exports, \"regexpCode\", ({ enumerable: true, get: function () { return code_2.regexpCode; } }));\nObject.defineProperty(exports, \"Name\", ({ enumerable: true, get: function () { return code_2.Name; } }));\nvar scope_2 = __webpack_require__(/*! ./scope */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js\");\nObject.defineProperty(exports, \"Scope\", ({ enumerable: true, get: function () { return scope_2.Scope; } }));\nObject.defineProperty(exports, \"ValueScope\", ({ enumerable: true, get: function () { return scope_2.ValueScope; } }));\nObject.defineProperty(exports, \"ValueScopeName\", ({ enumerable: true, get: function () { return scope_2.ValueScopeName; } }));\nObject.defineProperty(exports, \"varKinds\", ({ enumerable: true, get: function () { return scope_2.varKinds; } }));\nexports.operators = {\n GT: new code_1._Code(\">\"),\n GTE: new code_1._Code(\">=\"),\n LT: new code_1._Code(\"<\"),\n LTE: new code_1._Code(\"<=\"),\n EQ: new code_1._Code(\"===\"),\n NEQ: new code_1._Code(\"!==\"),\n NOT: new code_1._Code(\"!\"),\n OR: new code_1._Code(\"||\"),\n AND: new code_1._Code(\"&&\"),\n ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n optimizeNodes() {\n return this;\n }\n optimizeNames(_names, _constants) {\n return this;\n }\n}\nclass Def extends Node {\n constructor(varKind, name, rhs) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.rhs = rhs;\n }\n render({ es5, _n }) {\n const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n return `${varKind} ${this.name}${rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (!names[this.name.str])\n return;\n if (this.rhs)\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n }\n}\nclass Assign extends Node {\n constructor(lhs, rhs, sideEffects) {\n super();\n this.lhs = lhs;\n this.rhs = rhs;\n this.sideEffects = sideEffects;\n }\n render({ _n }) {\n return `${this.lhs} = ${this.rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n return;\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n return addExprNames(names, this.rhs);\n }\n}\nclass AssignOp extends Assign {\n constructor(lhs, op, rhs, sideEffects) {\n super(lhs, rhs, sideEffects);\n this.op = op;\n }\n render({ _n }) {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n }\n}\nclass Label extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n return `${this.label}:` + _n;\n }\n}\nclass Break extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n const label = this.label ? ` ${this.label}` : \"\";\n return `break${label};` + _n;\n }\n}\nclass Throw extends Node {\n constructor(error) {\n super();\n this.error = error;\n }\n render({ _n }) {\n return `throw ${this.error};` + _n;\n }\n get names() {\n return this.error.names;\n }\n}\nclass AnyCode extends Node {\n constructor(code) {\n super();\n this.code = code;\n }\n render({ _n }) {\n return `${this.code};` + _n;\n }\n optimizeNodes() {\n return `${this.code}` ? this : undefined;\n }\n optimizeNames(names, constants) {\n this.code = optimizeExpr(this.code, names, constants);\n return this;\n }\n get names() {\n return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n }\n}\nclass ParentNode extends Node {\n constructor(nodes = []) {\n super();\n this.nodes = nodes;\n }\n render(opts) {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n }\n optimizeNodes() {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n const n = nodes[i].optimizeNodes();\n if (Array.isArray(n))\n nodes.splice(i, 1, ...n);\n else if (n)\n nodes[i] = n;\n else\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n optimizeNames(names, constants) {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i];\n if (n.optimizeNames(names, constants))\n continue;\n subtractNames(names, n.names);\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n get names() {\n return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n }\n}\nclass BlockNode extends ParentNode {\n render(opts) {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n constructor(condition, nodes) {\n super(nodes);\n this.condition = condition;\n }\n render(opts) {\n let code = `if(${this.condition})` + super.render(opts);\n if (this.else)\n code += \"else \" + this.else.render(opts);\n return code;\n }\n optimizeNodes() {\n super.optimizeNodes();\n const cond = this.condition;\n if (cond === true)\n return this.nodes; // else is ignored here\n let e = this.else;\n if (e) {\n const ns = e.optimizeNodes();\n e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n }\n if (e) {\n if (cond === false)\n return e instanceof If ? e : e.nodes;\n if (this.nodes.length)\n return this;\n return new If(not(cond), e instanceof If ? [e] : e.nodes);\n }\n if (cond === false || !this.nodes.length)\n return undefined;\n return this;\n }\n optimizeNames(names, constants) {\n var _a;\n this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n if (!(super.optimizeNames(names, constants) || this.else))\n return;\n this.condition = optimizeExpr(this.condition, names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n addExprNames(names, this.condition);\n if (this.else)\n addNames(names, this.else.names);\n return names;\n }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n constructor(iteration) {\n super();\n this.iteration = iteration;\n }\n render(opts) {\n return `for(${this.iteration})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iteration = optimizeExpr(this.iteration, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iteration.names);\n }\n}\nclass ForRange extends For {\n constructor(varKind, name, from, to) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.from = from;\n this.to = to;\n }\n render(opts) {\n const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n const { name, from, to } = this;\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n }\n get names() {\n const names = addExprNames(super.names, this.from);\n return addExprNames(names, this.to);\n }\n}\nclass ForIter extends For {\n constructor(loop, varKind, name, iterable) {\n super();\n this.loop = loop;\n this.varKind = varKind;\n this.name = name;\n this.iterable = iterable;\n }\n render(opts) {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iterable = optimizeExpr(this.iterable, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iterable.names);\n }\n}\nclass Func extends BlockNode {\n constructor(name, args, async) {\n super();\n this.name = name;\n this.args = args;\n this.async = async;\n }\n render(opts) {\n const _async = this.async ? \"async \" : \"\";\n return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n render(opts) {\n return \"return \" + super.render(opts);\n }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n render(opts) {\n let code = \"try\" + super.render(opts);\n if (this.catch)\n code += this.catch.render(opts);\n if (this.finally)\n code += this.finally.render(opts);\n return code;\n }\n optimizeNodes() {\n var _a, _b;\n super.optimizeNodes();\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n return this;\n }\n optimizeNames(names, constants) {\n var _a, _b;\n super.optimizeNames(names, constants);\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n if (this.catch)\n addNames(names, this.catch.names);\n if (this.finally)\n addNames(names, this.finally.names);\n return names;\n }\n}\nclass Catch extends BlockNode {\n constructor(error) {\n super();\n this.error = error;\n }\n render(opts) {\n return `catch(${this.error})` + super.render(opts);\n }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n render(opts) {\n return \"finally\" + super.render(opts);\n }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n constructor(extScope, opts = {}) {\n this._values = {};\n this._blockStarts = [];\n this._constants = {};\n this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n this._extScope = extScope;\n this._scope = new scope_1.Scope({ parent: extScope });\n this._nodes = [new Root()];\n }\n toString() {\n return this._root.render(this.opts);\n }\n // returns unique name in the internal scope\n name(prefix) {\n return this._scope.name(prefix);\n }\n // reserves unique name in the external scope\n scopeName(prefix) {\n return this._extScope.name(prefix);\n }\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName, value) {\n const name = this._extScope.value(prefixOrName, value);\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n vs.add(name);\n return name;\n }\n getScopeValue(prefix, keyOrRef) {\n return this._extScope.getValue(prefix, keyOrRef);\n }\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName) {\n return this._extScope.scopeRefs(scopeName, this._values);\n }\n scopeCode() {\n return this._extScope.scopeCode(this._values);\n }\n _def(varKind, nameOrPrefix, rhs, constant) {\n const name = this._scope.toName(nameOrPrefix);\n if (rhs !== undefined && constant)\n this._constants[name.str] = rhs;\n this._leafNode(new Def(varKind, name, rhs));\n return name;\n }\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n }\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n }\n // `var` declaration with optional assignment\n var(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n }\n // assignment code\n assign(lhs, rhs, sideEffects) {\n return this._leafNode(new Assign(lhs, rhs, sideEffects));\n }\n // `+=` code\n add(lhs, rhs) {\n return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n }\n // appends passed SafeExpr to code or executes Block\n code(c) {\n if (typeof c == \"function\")\n c();\n else if (c !== code_1.nil)\n this._leafNode(new AnyCode(c));\n return this;\n }\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues) {\n const code = [\"{\"];\n for (const [key, value] of keyValues) {\n if (code.length > 1)\n code.push(\",\");\n code.push(key);\n if (key !== value || this.opts.es5) {\n code.push(\":\");\n (0, code_1.addCodeArg)(code, value);\n }\n }\n code.push(\"}\");\n return new code_1._Code(code);\n }\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition, thenBody, elseBody) {\n this._blockNode(new If(condition));\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf();\n }\n else if (thenBody) {\n this.code(thenBody).endIf();\n }\n else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body');\n }\n return this;\n }\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition) {\n return this._elseNode(new If(condition));\n }\n // `else` clause - only valid after `if` or `else if` clauses\n else() {\n return this._elseNode(new Else());\n }\n // end `if` statement (needed if gen.if was used only with condition)\n endIf() {\n return this._endBlockNode(If, Else);\n }\n _for(node, forBody) {\n this._blockNode(node);\n if (forBody)\n this.code(forBody).endFor();\n return this;\n }\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration, forBody) {\n return this._for(new ForLoop(iteration), forBody);\n }\n // `for` statement for a range of values\n forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n }\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n const name = this._scope.toName(nameOrPrefix);\n if (this.opts.es5) {\n const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n this.var(name, (0, code_1._) `${arr}[${i}]`);\n forBody(name);\n });\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n }\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n }\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n }\n // end `for` loop\n endFor() {\n return this._endBlockNode(For);\n }\n // `label` statement\n label(label) {\n return this._leafNode(new Label(label));\n }\n // `break` statement\n break(label) {\n return this._leafNode(new Break(label));\n }\n // `return` statement\n return(value) {\n const node = new Return();\n this._blockNode(node);\n this.code(value);\n if (node.nodes.length !== 1)\n throw new Error('CodeGen: \"return\" should have one node');\n return this._endBlockNode(Return);\n }\n // `try` statement\n try(tryBody, catchCode, finallyCode) {\n if (!catchCode && !finallyCode)\n throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n const node = new Try();\n this._blockNode(node);\n this.code(tryBody);\n if (catchCode) {\n const error = this.name(\"e\");\n this._currNode = node.catch = new Catch(error);\n catchCode(error);\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally();\n this.code(finallyCode);\n }\n return this._endBlockNode(Catch, Finally);\n }\n // `throw` statement\n throw(error) {\n return this._leafNode(new Throw(error));\n }\n // start self-balancing block\n block(body, nodeCount) {\n this._blockStarts.push(this._nodes.length);\n if (body)\n this.code(body).endBlock(nodeCount);\n return this;\n }\n // end the current self-balancing block\n endBlock(nodeCount) {\n const len = this._blockStarts.pop();\n if (len === undefined)\n throw new Error(\"CodeGen: not in self-balancing block\");\n const toClose = this._nodes.length - len;\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n }\n this._nodes.length = len;\n return this;\n }\n // `function` heading (or definition if funcBody is passed)\n func(name, args = code_1.nil, async, funcBody) {\n this._blockNode(new Func(name, args, async));\n if (funcBody)\n this.code(funcBody).endFunc();\n return this;\n }\n // end function definition\n endFunc() {\n return this._endBlockNode(Func);\n }\n optimize(n = 1) {\n while (n-- > 0) {\n this._root.optimizeNodes();\n this._root.optimizeNames(this._root.names, this._constants);\n }\n }\n _leafNode(node) {\n this._currNode.nodes.push(node);\n return this;\n }\n _blockNode(node) {\n this._currNode.nodes.push(node);\n this._nodes.push(node);\n }\n _endBlockNode(N1, N2) {\n const n = this._currNode;\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop();\n return this;\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n }\n _elseNode(node) {\n const n = this._currNode;\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"');\n }\n this._currNode = n.else = node;\n return this;\n }\n get _root() {\n return this._nodes[0];\n }\n get _currNode() {\n const ns = this._nodes;\n return ns[ns.length - 1];\n }\n set _currNode(node) {\n const ns = this._nodes;\n ns[ns.length - 1] = node;\n }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) + (from[n] || 0);\n return names;\n}\nfunction addExprNames(names, from) {\n return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n if (expr instanceof code_1.Name)\n return replaceName(expr);\n if (!canOptimize(expr))\n return expr;\n return new code_1._Code(expr._items.reduce((items, c) => {\n if (c instanceof code_1.Name)\n c = replaceName(c);\n if (c instanceof code_1._Code)\n items.push(...c._items);\n else\n items.push(c);\n return items;\n }, []));\n function replaceName(n) {\n const c = constants[n.str];\n if (c === undefined || names[n.str] !== 1)\n return n;\n delete names[n.str];\n return c;\n }\n function canOptimize(e) {\n return (e instanceof code_1._Code &&\n e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n }\n}\nfunction subtractNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsVUFBVSxHQUFHLFdBQVcsR0FBRyxXQUFXLEdBQUcsZUFBZSxHQUFHLGlCQUFpQixHQUFHLGdCQUFnQixHQUFHLHNCQUFzQixHQUFHLGtCQUFrQixHQUFHLGFBQWEsR0FBRyxZQUFZLEdBQUcsa0JBQWtCLEdBQUcsaUJBQWlCLEdBQUcsbUJBQW1CLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxTQUFTO0FBQ3ZTLGVBQWUsbUJBQU8sQ0FBQyxpSEFBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxtSEFBUztBQUNqQyxhQUFhLG1CQUFPLENBQUMsaUhBQVE7QUFDN0IscUNBQW9DLEVBQUUscUNBQXFDLG9CQUFvQixFQUFDO0FBQ2hHLHVDQUFzQyxFQUFFLHFDQUFxQyxzQkFBc0IsRUFBQztBQUNwRyw2Q0FBNEMsRUFBRSxxQ0FBcUMsNEJBQTRCLEVBQUM7QUFDaEgsdUNBQXNDLEVBQUUscUNBQXFDLHNCQUFzQixFQUFDO0FBQ3BHLCtDQUE4QyxFQUFFLHFDQUFxQyw4QkFBOEIsRUFBQztBQUNwSCw2Q0FBNEMsRUFBRSxxQ0FBcUMsNEJBQTRCLEVBQUM7QUFDaEgsOENBQTZDLEVBQUUscUNBQXFDLDZCQUE2QixFQUFDO0FBQ2xILHdDQUF1QyxFQUFFLHFDQUFxQyx1QkFBdUIsRUFBQztBQUN0RyxjQUFjLG1CQUFPLENBQUMsbUhBQVM7QUFDL0IseUNBQXdDLEVBQUUscUNBQXFDLHlCQUF5QixFQUFDO0FBQ3pHLDhDQUE2QyxFQUFFLHFDQUFxQyw4QkFBOEIsRUFBQztBQUNuSCxrREFBaUQsRUFBRSxxQ0FBcUMsa0NBQWtDLEVBQUM7QUFDM0gsNENBQTJDLEVBQUUscUNBQXFDLDRC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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsUUFBUSxRQUFRLEdBQUcsUUFBUSxZQUFZO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdHQUFnRyxPQUFPO0FBQ3ZHO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHFGQUFxRixRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU87QUFDNUc7QUFDQTtBQUNBLDREQUE0RCxFQUFFO0FBQzlEO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vciA9IGV4cG9ydHMuYW5kID0gZXhwb3J0cy5ub3QgPSBleHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLm9wZXJhdG9ycyA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5WYWx1ZVNjb3BlID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJDb25jYXQgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5jb25zdCBzY29wZV8xID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG52YXIgY29kZV8yID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyQ29uY2F0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyQ29uY2F0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0UHJvcGVydHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5nZXRQcm9wZXJ0eTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZ2V4cENvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5yZWdleHBDb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLk5hbWU7IH0gfSk7XG52YXIgc2NvcGVfMiA9IHJlcXVpcmUoXCIuL3Njb3BlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuU2NvcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWx1ZVNjb3BlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWx1ZVNjb3BlTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5WYWx1ZVNjb3BlTmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhcktpbmRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLnZhcktpbmRzOyB9IH0pO1xuZXhwb3J0cy5vcGVyYXRvcnMgPSB7XG4gICAgR1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCI+XCIpLFxuICAgIEdURTogbmV3IGNvZGVfMS5fQ29kZShcIj49XCIpLFxuICAgIExUOiBuZXcgY29kZV8xLl9Db2RlKFwiPFwiKSxcbiAgICBMVEU6IG5ldyBjb2RlXzEuX0NvZGUoXCI8PVwiKSxcbiAgICBFUTogbmV3IGNvZGVfMS5fQ29kZShcIj09PVwiKSxcbiAgICBORVE6IG5ldyBjb2RlXzEuX0NvZGUoXCIhPT1cIiksXG4gICAgTk9UOiBuZXcgY29kZV8xLl9Db2RlKFwiIVwiKSxcbiAgICBPUjogbmV3IGNvZGVfMS5fQ29kZShcInx8XCIpLFxuICAgIEFORDogbmV3IGNvZGVfMS5fQ29kZShcIiYmXCIpLFxuICAgIEFERDogbmV3IGNvZGVfMS5fQ29kZShcIitcIiksXG59O1xuY2xhc3MgTm9kZSB7XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMoX25hbWVzLCBfY29uc3RhbnRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbmNsYXNzIERlZiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIHJocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICB9XG4gICAgcmVuZGVyKHsgZXM1LCBfbiB9KSB7XG4gICAgICAgIGNvbnN0IHZhcktpbmQgPSBlczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHRoaXMudmFyS2luZDtcbiAgICAgICAgY29uc3QgcmhzID0gdGhpcy5yaHMgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgID0gJHt0aGlzLnJoc31gO1xuICAgICAgICByZXR1cm4gYCR7dmFyS2luZH0gJHt0aGlzLm5hbWV9JHtyaHN9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghbmFtZXNbdGhpcy5uYW1lLnN0cl0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnJocylcbiAgICAgICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmhzIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5yaHMubmFtZXMgOiB7fTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ24gZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsaHMsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5saHMgPSBsaHM7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgICAgICB0aGlzLnNpZGVFZmZlY3RzID0gc2lkZUVmZmVjdHM7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSA9ICR7dGhpcy5yaHN9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lICYmICFuYW1lc1t0aGlzLmxocy5zdHJdICYmICF0aGlzLnNpZGVFZmZlY3RzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnJocyA9IG9wdGltaXplRXhwcih0aGlzLnJocywgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gdGhpcy5saHMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHt9IDogeyAuLi50aGlzLmxocy5uYW1lcyB9O1xuICAgICAgICByZXR1cm4gYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLnJocyk7XG4gICAgfVxufVxuY2xhc3MgQXNzaWduT3AgZXh0ZW5kcyBBc3NpZ24ge1xuICAgIGNvbnN0cnVjdG9yKGxocywgb3AsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgc3VwZXIobGhzLCByaHMsIHNpZGVFZmZlY3RzKTtcbiAgICAgICAgdGhpcy5vcCA9IG9wO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxoc30gJHt0aGlzLm9wfT0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIExhYmVsIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9OmAgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBCcmVhayBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5uYW1lcyA9IHt9O1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCA/IGAgJHt0aGlzLmxhYmVsfWAgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYGJyZWFrJHtsYWJlbH07YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIFRocm93IGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgdGhyb3cgJHt0aGlzLmVycm9yfTtgICsgX247XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IubmFtZXM7XG4gICAgfVxufVxuY2xhc3MgQW55Q29kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2RlfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9YCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB0aGlzLmNvZGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5jb2RlLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29kZSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IHRoaXMuY29kZS5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIFBhcmVudE5vZGUgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihub2RlcyA9IFtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubm9kZXMgPSBub2RlcztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChjb2RlLCBuKSA9PiBjb2RlICsgbi5yZW5kZXIob3B0cyksIFwiXCIpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICBjb25zdCB7IG5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IG5vZGVzW2ldLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG4pKVxuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxLCAuLi5uKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKG4pXG4gICAgICAgICAgICAgICAgbm9kZXNbaV0gPSBuO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBjb25zdCB7IG5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgLy8gaXRlcmF0aW5nIGJhY2t3YXJkcyBpbXByb3ZlcyAxLXBhc3Mgb3B0aW1pemF0aW9uXG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV07XG4gICAgICAgICAgICBpZiAobi5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgc3VidHJhY3ROYW1lcyhuYW1lcywgbi5uYW1lcyk7XG4gICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLnJlZHVjZSgobmFtZXMsIG4pID0+IGFkZE5hbWVzKG5hbWVzLCBuLm5hbWVzKSwge30pO1xuICAgIH1cbn1cbmNsYXNzIEJsb2NrTm9kZSBleHRlbmRzIFBhcmVudE5vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcIntcIiArIG9wdHMuX24gKyBzdXBlci5yZW5kZXIob3B0cykgKyBcIn1cIiArIG9wdHMuX247XG4gICAgfVxufVxuY2xhc3MgUm9vdCBleHRlbmRzIFBhcmVudE5vZGUge1xufVxuY2xhc3MgRWxzZSBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5FbHNlLmtpbmQgPSBcImVsc2VcIjtcbmNsYXNzIElmIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25kaXRpb24sIG5vZGVzKSB7XG4gICAgICAgIHN1cGVyKG5vZGVzKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGxldCBjb2RlID0gYGlmKCR7dGhpcy5jb25kaXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmVsc2UpXG4gICAgICAgICAgICBjb2RlICs9IFwiZWxzZSBcIiArIHRoaXMuZWxzZS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIGNvbnN0IGNvbmQgPSB0aGlzLmNvbmRpdGlvbjtcbiAgICAgICAgaWYgKGNvbmQgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlczsgLy8gZWxzZSBpcyBpZ25vcmVkIGhlcmVcbiAgICAgICAgbGV0IGUgPSB0aGlzLmVsc2U7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBjb25zdCBucyA9IGUub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgZSA9IHRoaXMuZWxzZSA9IEFycmF5LmlzQXJyYXkobnMpID8gbmV3IEVsc2UobnMpIDogbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGlmIChjb25kID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIElmID8gZSA6IGUubm9kZXM7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gbmV3IElmKG5vdChjb25kKSwgZSBpbnN0YW5jZW9mIElmID8gW2VdIDogZS5ub2Rlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlIHx8ICF0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmVsc2UgPSAoX2EgPSB0aGlzLmVsc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICBpZiAoIShzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHx8IHRoaXMuZWxzZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuY29uZGl0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIGlmICh0aGlzLmVsc2UpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5lbHNlLm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbklmLmtpbmQgPSBcImlmXCI7XG5jbGFzcyBGb3IgZXh0ZW5kcyBCbG9ja05vZGUge1xufVxuRm9yLmtpbmQgPSBcImZvclwiO1xuY2xhc3MgRm9yTG9vcCBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IoaXRlcmF0aW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gaXRlcmF0aW9uO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMuaXRlcmF0aW9ufSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLml0ZXJhdGlvbiA9IG9wdGltaXplRXhwcih0aGlzLml0ZXJhdGlvbiwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYXRpb24ubmFtZXMpO1xuICAgIH1cbn1cbmNsYXNzIEZvclJhbmdlIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3Rvcih2YXJLaW5kLCBuYW1lLCBmcm9tLCB0bykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLnRvID0gdG87XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IHZhcktpbmQgPSBvcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCB7IG5hbWUsIGZyb20sIHRvIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYGZvcigke3ZhcktpbmR9ICR7bmFtZX09JHtmcm9tfTsgJHtuYW1lfTwke3RvfTsgJHtuYW1lfSsrKWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBhZGRFeHByTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuZnJvbSk7XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMudG8pO1xuICAgIH1cbn1cbmNsYXNzIEZvckl0ZXIgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKGxvb3AsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9vcCA9IGxvb3A7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBpdGVyYWJsZTtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt0aGlzLnZhcktpbmR9ICR7dGhpcy5uYW1lfSAke3RoaXMubG9vcH0gJHt0aGlzLml0ZXJhYmxlfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLml0ZXJhYmxlID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmFibGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gYWRkTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuaXRlcmFibGUubmFtZXMpO1xuICAgIH1cbn1cbmNsYXNzIEZ1bmMgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MsIGFzeW5jKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgICAgIHRoaXMuYXN5bmMgPSBhc3luYztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgX2FzeW5jID0gdGhpcy5hc3luYyA/IFwiYXN5bmMgXCIgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYCR7X2FzeW5jfWZ1bmN0aW9uICR7dGhpcy5uYW1lfSgke3RoaXMuYXJnc30pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5GdW5jLmtpbmQgPSBcImZ1bmNcIjtcbmNsYXNzIFJldHVybiBleHRlbmRzIFBhcmVudE5vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcInJldHVybiBcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5SZXR1cm4ua2luZCA9IFwicmV0dXJuXCI7XG5jbGFzcyBUcnkgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGxldCBjb2RlID0gXCJ0cnlcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuY2F0Y2gucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5maW5hbGx5KVxuICAgICAgICAgICAgY29kZSArPSB0aGlzLmZpbmFsbHkucmVuZGVyKG9wdHMpO1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAoX2IgPSB0aGlzLmZpbmFsbHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9hID0gdGhpcy5jYXRjaCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gc3VwZXIubmFtZXM7XG4gICAgICAgIGlmICh0aGlzLmNhdGNoKVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuY2F0Y2gubmFtZXMpO1xuICAgICAgICBpZiAodGhpcy5maW5hbGx5KVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuZmluYWxseS5uYW1lcyk7XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG59XG5jbGFzcyBDYXRjaCBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGNhdGNoKCR7dGhpcy5lcnJvcn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5DYXRjaC5raW5kID0gXCJjYXRjaFwiO1xuY2xhc3MgRmluYWxseSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwiZmluYWxseVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZpbmFsbHkua2luZCA9IFwiZmluYWxseVwiO1xuY2xhc3MgQ29kZUdlbiB7XG4gICAgY29uc3RydWN0b3IoZXh0U2NvcGUsIG9wdHMgPSB7fSkge1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBcIlxcblwiIDogXCJcIiB9O1xuICAgICAgICB0aGlzLl9leHRTY29wZSA9IGV4dFNjb3BlO1xuICAgICAgICB0aGlzLl9zY29wZSA9IG5ldyBzY29wZV8xLlNjb3BlKHsgcGFyZW50OiBleHRTY29wZSB9KTtcbiAgICAgICAgdGhpcy5fbm9kZXMgPSBbbmV3IFJvb3QoKV07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5yZW5kZXIodGhpcy5vcHRzKTtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB1bmlxdWUgbmFtZSBpbiB0aGUgaW50ZXJuYWwgc2NvcGVcbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGUubmFtZShwcmVmaXgpO1xuICAgIH1cbiAgICAvLyByZXNlcnZlcyB1bmlxdWUgbmFtZSBpbiB0aGUgZXh0ZXJuYWwgc2NvcGVcbiAgICBzY29wZU5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZSBhbmQgYXNzaWducyB2YWx1ZSB0byBpdFxuICAgIHNjb3BlVmFsdWUocHJlZml4T3JOYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fZXh0U2NvcGUudmFsdWUocHJlZml4T3JOYW1lLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHZzID0gdGhpcy5fdmFsdWVzW25hbWUucHJlZml4XSB8fCAodGhpcy5fdmFsdWVzW25hbWUucHJlZml4XSA9IG5ldyBTZXQoKSk7XG4gICAgICAgIHZzLmFkZChuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGdldFNjb3BlVmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZik7XG4gICAgfVxuICAgIC8vIHJldHVybiBjb2RlIHRoYXQgYXNzaWducyB2YWx1ZXMgaW4gdGhlIGV4dGVybmFsIHNjb3BlIHRvIHRoZSBuYW1lcyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHlcbiAgICAvLyAoc2FtZSBuYW1lcyB0aGF0IHdlcmUgcmV0dXJuZWQgYnkgZ2VuLnNjb3BlTmFtZSBvciBnZW4uc2NvcGVWYWx1ZSlcbiAgICBzY29wZVJlZnMoc2NvcGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5zY29wZVJlZnMoc2NvcGVOYW1lLCB0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBzY29wZUNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5zY29wZUNvZGUodGhpcy5fdmFsdWVzKTtcbiAgICB9XG4gICAgX2RlZih2YXJLaW5kLCBuYW1lT3JQcmVmaXgsIHJocywgY29uc3RhbnQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBpZiAocmhzICE9PSB1bmRlZmluZWQgJiYgY29uc3RhbnQpXG4gICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbbmFtZS5zdHJdID0gcmhzO1xuICAgICAgICB0aGlzLl9sZWFmTm9kZShuZXcgRGVmKHZhcktpbmQsIG5hbWUsIHJocykpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgLy8gYGNvbnN0YCBkZWNsYXJhdGlvbiAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgY29uc3QobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMuY29uc3QsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBgbGV0YCBkZWNsYXJhdGlvbiB3aXRoIG9wdGlvbmFsIGFzc2lnbm1lbnQgKGB2YXJgIGluIGVzNSBtb2RlKVxuICAgIGxldChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5sZXQsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBgdmFyYCBkZWNsYXJhdGlvbiB3aXRoIG9wdGlvbmFsIGFzc2lnbm1lbnRcbiAgICB2YXIobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMudmFyLCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYXNzaWdubWVudCBjb2RlXG4gICAgYXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEFzc2lnbihsaHMsIHJocywgc2lkZUVmZmVjdHMpKTtcbiAgICB9XG4gICAgLy8gYCs9YCBjb2RlXG4gICAgYWRkKGxocywgcmhzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduT3AobGhzLCBleHBvcnRzLm9wZXJhdG9ycy5BREQsIHJocykpO1xuICAgIH1cbiAgICAvLyBhcHBlbmRzIHBhc3NlZCBTYWZlRXhwciB0byBjb2RlIG9yIGV4ZWN1dGVzIEJsb2NrXG4gICAgY29kZShjKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBjKCk7XG4gICAgICAgIGVsc2UgaWYgKGMgIT09IGNvZGVfMS5uaWwpXG4gICAgICAgICAgICB0aGlzLl9sZWFmTm9kZShuZXcgQW55Q29kZShjKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIGNvZGUgZm9yIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgcGFzc2VkIGFyZ3VtZW50IGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzXG4gICAgb2JqZWN0KC4uLmtleVZhbHVlcykge1xuICAgICAgICBjb25zdCBjb2RlID0gW1wie1wiXTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Yga2V5VmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoY29kZS5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIixcIik7XG4gICAgICAgICAgICBjb2RlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IHZhbHVlIHx8IHRoaXMub3B0cy5lczUpIHtcbiAgICAgICAgICAgICAgICBjb2RlLnB1c2goXCI6XCIpO1xuICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuYWRkQ29kZUFyZykoY29kZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvZGUucHVzaChcIn1cIik7XG4gICAgICAgIHJldHVybiBuZXcgY29kZV8xLl9Db2RlKGNvZGUpO1xuICAgIH1cbiAgICAvLyBgaWZgIGNsYXVzZSAob3Igc3RhdGVtZW50IGlmIGB0aGVuQm9keWAgYW5kLCBvcHRpb25hbGx5LCBgZWxzZUJvZHlgIGFyZSBwYXNzZWQpXG4gICAgaWYoY29uZGl0aW9uLCB0aGVuQm9keSwgZWxzZUJvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBJZihjb25kaXRpb24pKTtcbiAgICAgICAgaWYgKHRoZW5Cb2R5ICYmIGVsc2VCb2R5KSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUodGhlbkJvZHkpLmVsc2UoKS5jb2RlKGVsc2VCb2R5KS5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoZW5Cb2R5KSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUodGhlbkJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJlbHNlXCIgYm9keSB3aXRob3V0IFwidGhlblwiIGJvZHknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGVsc2UgaWZgIGNsYXVzZSAtIGludmFsaWQgd2l0aG91dCBgaWZgIG9yIGFmdGVyIGBlbHNlYCBjbGF1c2VzXG4gICAgZWxzZUlmKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgIH1cbiAgICAvLyBgZWxzZWAgY2xhdXNlIC0gb25seSB2YWxpZCBhZnRlciBgaWZgIG9yIGBlbHNlIGlmYCBjbGF1c2VzXG4gICAgZWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBFbHNlKCkpO1xuICAgIH1cbiAgICAvLyBlbmQgYGlmYCBzdGF0ZW1lbnQgKG5lZWRlZCBpZiBnZW4uaWYgd2FzIHVzZWQgb25seSB3aXRoIGNvbmRpdGlvbilcbiAgICBlbmRJZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShJZiwgRWxzZSk7XG4gICAgfVxuICAgIF9mb3Iobm9kZSwgZm9yQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIGlmIChmb3JCb2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGZvckJvZHkpLmVuZEZvcigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYSBnZW5lcmljIGBmb3JgIGNsYXVzZSAob3Igc3RhdGVtZW50IGlmIGBmb3JCb2R5YCBpcyBwYXNzZWQpXG4gICAgZm9yKGl0ZXJhdGlvbiwgZm9yQm9keSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JMb29wKGl0ZXJhdGlvbiksIGZvckJvZHkpO1xuICAgIH1cbiAgICAvLyBgZm9yYCBzdGF0ZW1lbnQgZm9yIGEgcmFuZ2Ugb2YgdmFsdWVzXG4gICAgZm9yUmFuZ2UobmFtZU9yUHJlZml4LCBmcm9tLCB0bywgZm9yQm9keSwgdmFyS2luZCA9IHRoaXMub3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHNjb3BlXzEudmFyS2luZHMubGV0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9yUmFuZ2UodmFyS2luZCwgbmFtZSwgZnJvbSwgdG8pLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gYGZvci1vZmAgc3RhdGVtZW50IChpbiBlczUgbW9kZSByZXBsYWNlIHdpdGggYSBub3JtYWwgZm9yIGxvb3ApXG4gICAgZm9yT2YobmFtZU9yUHJlZml4LCBpdGVyYWJsZSwgZm9yQm9keSwgdmFyS2luZCA9IHNjb3BlXzEudmFyS2luZHMuY29uc3QpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gaXRlcmFibGUgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IGl0ZXJhYmxlIDogdGhpcy52YXIoXCJfYXJyXCIsIGl0ZXJhYmxlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKFwiX2lcIiwgMCwgKDAsIGNvZGVfMS5fKSBgJHthcnJ9Lmxlbmd0aGAsIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXIobmFtZSwgKDAsIGNvZGVfMS5fKSBgJHthcnJ9WyR7aX1dYCk7XG4gICAgICAgICAgICAgICAgZm9yQm9keShuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckl0ZXIoXCJvZlwiLCB2YXJLaW5kLCBuYW1lLCBpdGVyYWJsZSksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLWluYCBzdGF0ZW1lbnQuXG4gICAgLy8gV2l0aCBvcHRpb24gYG93blByb3BlcnRpZXNgIHJlcGxhY2VkIHdpdGggYSBgZm9yLW9mYCBsb29wIGZvciBvYmplY3Qga2V5c1xuICAgIGZvckluKG5hbWVPclByZWZpeCwgb2JqLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBpZiAodGhpcy5vcHRzLm93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvck9mKG5hbWVPclByZWZpeCwgKDAsIGNvZGVfMS5fKSBgT2JqZWN0LmtleXMoJHtvYmp9KWAsIGZvckJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcImluXCIsIHZhcktpbmQsIG5hbWUsIG9iaiksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBlbmQgYGZvcmAgbG9vcFxuICAgIGVuZEZvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShGb3IpO1xuICAgIH1cbiAgICAvLyBgbGFiZWxgIHN0YXRlbWVudFxuICAgIGxhYmVsKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgTGFiZWwobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYGJyZWFrYCBzdGF0ZW1lbnRcbiAgICBicmVhayhsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEJyZWFrKGxhYmVsKSk7XG4gICAgfVxuICAgIC8vIGByZXR1cm5gIHN0YXRlbWVudFxuICAgIHJldHVybih2YWx1ZSkge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFJldHVybigpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh2YWx1ZSk7XG4gICAgICAgIGlmIChub2RlLm5vZGVzLmxlbmd0aCAhPT0gMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJyZXR1cm5cIiBzaG91bGQgaGF2ZSBvbmUgbm9kZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKFJldHVybik7XG4gICAgfVxuICAgIC8vIGB0cnlgIHN0YXRlbWVudFxuICAgIHRyeSh0cnlCb2R5LCBjYXRjaENvZGUsIGZpbmFsbHlDb2RlKSB7XG4gICAgICAgIGlmICghY2F0Y2hDb2RlICYmICFmaW5hbGx5Q29kZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJ0cnlcIiB3aXRob3V0IFwiY2F0Y2hcIiBhbmQgXCJmaW5hbGx5XCInKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBUcnkoKTtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmNvZGUodHJ5Qm9keSk7XG4gICAgICAgIGlmIChjYXRjaENvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5uYW1lKFwiZVwiKTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbm9kZS5jYXRjaCA9IG5ldyBDYXRjaChlcnJvcik7XG4gICAgICAgICAgICBjYXRjaENvZGUoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbGx5Q29kZSkge1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmZpbmFsbHkgPSBuZXcgRmluYWxseSgpO1xuICAgICAgICAgICAgdGhpcy5jb2RlKGZpbmFsbHlDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKENhdGNoLCBGaW5hbGx5KTtcbiAgICB9XG4gICAgLy8gYHRocm93YCBzdGF0ZW1lbnRcbiAgICB0aHJvdyhlcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IFRocm93KGVycm9yKSk7XG4gICAgfVxuICAgIC8vIHN0YXJ0IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgYmxvY2soYm9keSwgbm9kZUNvdW50KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrU3RhcnRzLnB1c2godGhpcy5fbm9kZXMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoYm9keSkuZW5kQmxvY2sobm9kZUNvdW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGVuZCB0aGUgY3VycmVudCBzZWxmLWJhbGFuY2luZyBibG9ja1xuICAgIGVuZEJsb2NrKG5vZGVDb3VudCkge1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLl9ibG9ja1N0YXJ0cy5wb3AoKTtcbiAgICAgICAgaWYgKGxlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbm90IGluIHNlbGYtYmFsYW5jaW5nIGJsb2NrXCIpO1xuICAgICAgICBjb25zdCB0b0Nsb3NlID0gdGhpcy5fbm9kZXMubGVuZ3RoIC0gbGVuO1xuICAgICAgICBpZiAodG9DbG9zZSA8IDAgfHwgKG5vZGVDb3VudCAhPT0gdW5kZWZpbmVkICYmIHRvQ2xvc2UgIT09IG5vZGVDb3VudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogd3JvbmcgbnVtYmVyIG9mIG5vZGVzOiAke3RvQ2xvc2V9IHZzICR7bm9kZUNvdW50fSBleHBlY3RlZGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vZGVzLmxlbmd0aCA9IGxlbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGBmdW5jdGlvbmAgaGVhZGluZyAob3IgZGVmaW5pdGlvbiBpZiBmdW5jQm9keSBpcyBwYXNzZWQpXG4gICAgZnVuYyhuYW1lLCBhcmdzID0gY29kZV8xLm5pbCwgYXN5bmMsIGZ1bmNCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShuZXcgRnVuYyhuYW1lLCBhcmdzLCBhc3luYykpO1xuICAgICAgICBpZiAoZnVuY0JvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZnVuY0JvZHkpLmVuZEZ1bmMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGVuZCBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgZW5kRnVuYygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShGdW5jKTtcbiAgICB9XG4gICAgb3B0aW1pemUobiA9IDEpIHtcbiAgICAgICAgd2hpbGUgKG4tLSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Qub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5hbWVzKHRoaXMuX3Jvb3QubmFtZXMsIHRoaXMuX2NvbnN0YW50cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2xlYWZOb2RlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIF9ibG9ja05vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICB0aGlzLl9ub2Rlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgICBfZW5kQmxvY2tOb2RlKE4xLCBOMikge1xuICAgICAgICBjb25zdCBuID0gdGhpcy5fY3Vyck5vZGU7XG4gICAgICAgIGlmIChuIGluc3RhbmNlb2YgTjEgfHwgKE4yICYmIG4gaW5zdGFuY2VvZiBOMikpIHtcbiAgICAgICAgICAgIHRoaXMuX25vZGVzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBub3QgaW4gYmxvY2sgXCIke04yID8gYCR7TjEua2luZH0vJHtOMi5raW5kfWAgOiBOMS5raW5kfVwiYCk7XG4gICAgfVxuICAgIF9lbHNlTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKCEobiBpbnN0YW5jZW9mIElmKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiB3aXRob3V0IFwiaWZcIicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbi5lbHNlID0gbm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBfcm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzWzBdO1xuICAgIH1cbiAgICBnZXQgX2N1cnJOb2RlKCkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuX25vZGVzO1xuICAgICAgICByZXR1cm4gbnNbbnMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHNldCBfY3Vyck5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuX25vZGVzO1xuICAgICAgICBuc1tucy5sZW5ndGggLSAxXSA9IG5vZGU7XG4gICAgfVxufVxuZXhwb3J0cy5Db2RlR2VuID0gQ29kZUdlbjtcbmZ1bmN0aW9uIGFkZE5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgZm9yIChjb25zdCBuIGluIGZyb20pXG4gICAgICAgIG5hbWVzW25dID0gKG5hbWVzW25dIHx8IDApICsgKGZyb21bbl0gfHwgMCk7XG4gICAgcmV0dXJuIG5hbWVzO1xufVxuZnVuY3Rpb24gYWRkRXhwck5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgcmV0dXJuIGZyb20gaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyBhZGROYW1lcyhuYW1lcywgZnJvbS5uYW1lcykgOiBuYW1lcztcbn1cbmZ1bmN0aW9uIG9wdGltaXplRXhwcihleHByLCBuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSlcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VOYW1lKGV4cHIpO1xuICAgIGlmICghY2FuT3B0aW1pemUoZXhwcikpXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIHJldHVybiBuZXcgY29kZV8xLl9Db2RlKGV4cHIuX2l0ZW1zLnJlZHVjZSgoaXRlbXMsIGMpID0+IHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSlcbiAgICAgICAgICAgIGMgPSByZXBsYWNlTmFtZShjKTtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUpXG4gICAgICAgICAgICBpdGVtcy5wdXNoKC4uLmMuX2l0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaXRlbXMucHVzaChjKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdKSk7XG4gICAgZnVuY3Rpb24gcmVwbGFjZU5hbWUobikge1xuICAgICAgICBjb25zdCBjID0gY29uc3RhbnRzW24uc3RyXTtcbiAgICAgICAgaWYgKGMgPT09IHVuZGVmaW5lZCB8fCBuYW1lc1tuLnN0cl0gIT09IDEpXG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgZGVsZXRlIG5hbWVzW24uc3RyXTtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbk9wdGltaXplKGUpIHtcbiAgICAgICAgcmV0dXJuIChlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlICYmXG4gICAgICAgICAgICBlLl9pdGVtcy5zb21lKChjKSA9PiBjIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgbmFtZXNbYy5zdHJdID09PSAxICYmIGNvbnN0YW50c1tjLnN0cl0gIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHN1YnRyYWN0TmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgLSAoZnJvbVtuXSB8fCAwKTtcbn1cbmZ1bmN0aW9uIG5vdCh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwiYm9vbGVhblwiIHx8IHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgeCA9PT0gbnVsbCA/ICF4IDogKDAsIGNvZGVfMS5fKSBgISR7cGFyKHgpfWA7XG59XG5leHBvcnRzLm5vdCA9IG5vdDtcbmNvbnN0IGFuZENvZGUgPSBtYXBwZW5kKGV4cG9ydHMub3BlcmF0b3JzLkFORCk7XG4vLyBib29sZWFuIEFORCAoJiYpIGV4cHJlc3Npb24gd2l0aCB0aGUgcGFzc2VkIGFyZ3VtZW50c1xuZnVuY3Rpb24gYW5kKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoYW5kQ29kZSk7XG59XG5leHBvcnRzLmFuZCA9IGFuZDtcbmNvbnN0IG9yQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuT1IpO1xuLy8gYm9vbGVhbiBPUiAofHwpIGV4cHJlc3Npb24gd2l0aCB0aGUgcGFzc2VkIGFyZ3VtZW50c1xuZnVuY3Rpb24gb3IoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShvckNvZGUpO1xufVxuZXhwb3J0cy5vciA9IG9yO1xuZnVuY3Rpb24gbWFwcGVuZChvcCkge1xuICAgIHJldHVybiAoeCwgeSkgPT4gKHggPT09IGNvZGVfMS5uaWwgPyB5IDogeSA9PT0gY29kZV8xLm5pbCA/IHggOiAoMCwgY29kZV8xLl8pIGAke3Bhcih4KX0gJHtvcH0gJHtwYXIoeSl9YCk7XG59XG5mdW5jdGlvbiBwYXIoeCkge1xuICAgIHJldHVybiB4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyB4IDogKDAsIGNvZGVfMS5fKSBgKCR7eH0pYDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js": /*!**************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = __webpack_require__(/*! ./code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js\");\nclass ValueError extends Error {\n constructor(name) {\n super(`CodeGen: \"code\" for ${name} not defined`);\n this.value = name.value;\n }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState || (exports.UsedValueState = UsedValueState = {}));\nexports.varKinds = {\n const: new code_1.Name(\"const\"),\n let: new code_1.Name(\"let\"),\n var: new code_1.Name(\"var\"),\n};\nclass Scope {\n constructor({ prefixes, parent } = {}) {\n this._names = {};\n this._prefixes = prefixes;\n this._parent = parent;\n }\n toName(nameOrPrefix) {\n return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n }\n name(prefix) {\n return new code_1.Name(this._newName(prefix));\n }\n _newName(prefix) {\n const ng = this._names[prefix] || this._nameGroup(prefix);\n return `${prefix}${ng.index++}`;\n }\n _nameGroup(prefix) {\n var _a, _b;\n if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n }\n return (this._names[prefix] = { prefix, index: 0 });\n }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n constructor(prefix, nameStr) {\n super(nameStr);\n this.prefix = prefix;\n }\n setValue(value, { property, itemIndex }) {\n this.value = value;\n this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n constructor(opts) {\n super(opts);\n this._values = {};\n this._scope = opts.scope;\n this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n }\n get() {\n return this._scope;\n }\n name(prefix) {\n return new ValueScopeName(prefix, this._newName(prefix));\n }\n value(nameOrPrefix, value) {\n var _a;\n if (value.ref === undefined)\n throw new Error(\"CodeGen: ref must be passed in value\");\n const name = this.toName(nameOrPrefix);\n const { prefix } = name;\n const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n let vs = this._values[prefix];\n if (vs) {\n const _name = vs.get(valueKey);\n if (_name)\n return _name;\n }\n else {\n vs = this._values[prefix] = new Map();\n }\n vs.set(valueKey, name);\n const s = this._scope[prefix] || (this._scope[prefix] = []);\n const itemIndex = s.length;\n s[itemIndex] = value.ref;\n name.setValue(value, { property: prefix, itemIndex });\n return name;\n }\n getValue(prefix, keyOrRef) {\n const vs = this._values[prefix];\n if (!vs)\n return;\n return vs.get(keyOrRef);\n }\n scopeRefs(scopeName, values = this._values) {\n return this._reduceValues(values, (name) => {\n if (name.scopePath === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return (0, code_1._) `${scopeName}${name.scopePath}`;\n });\n }\n scopeCode(values = this._values, usedValues, getCode) {\n return this._reduceValues(values, (name) => {\n if (name.value === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return name.value.code;\n }, usedValues, getCode);\n }\n _reduceValues(values, valueCode, usedValues = {}, getCode) {\n let code = code_1.nil;\n for (const prefix in values) {\n const vs = values[prefix];\n if (!vs)\n continue;\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n vs.forEach((name) => {\n if (nameSet.has(name))\n return;\n nameSet.set(name, UsedValueState.Started);\n let c = valueCode(name);\n if (c) {\n const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n }\n else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n code = (0, code_1._) `${code}${c}${this.opts._n}`;\n }\n else {\n throw new ValueError(name);\n }\n nameSet.set(name, UsedValueState.Completed);\n });\n }\n return code;\n }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vc2NvcGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsa0JBQWtCLEdBQUcsc0JBQXNCLEdBQUcsYUFBYSxHQUFHLGdCQUFnQixHQUFHLHNCQUFzQjtBQUN2RyxlQUFlLG1CQUFPLENBQUMsaUhBQVE7QUFDL0I7QUFDQTtBQUNBLHFDQUFxQyxNQUFNO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxxQkFBcUIsc0JBQXNCLHNCQUFzQjtBQUNsRSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUIsSUFBSTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsT0FBTyxFQUFFLFdBQVc7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBLHdDQUF3QyxrQkFBa0I7QUFDMUQ7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHFCQUFxQjtBQUMzQztBQUNBLDJDQUEyQywwQkFBMEIsR0FBRyxVQUFVO0FBQ2xGO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsNkJBQTZCO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsS0FBSztBQUN2RCxvQ0FBb0MsVUFBVSxFQUFFLGVBQWU7QUFDL0QsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELEtBQUs7QUFDdkQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksR0FBRyxFQUFFLGFBQWE7QUFDdEY7QUFDQTtBQUNBLDRDQUE0QyxLQUFLLEVBQUUsRUFBRSxFQUFFLGFBQWE7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vc2NvcGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSB8fCAoZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IFVzZWRWYWx1ZVN0YXRlID0ge30pKTtcbmV4cG9ydHMudmFyS2luZHMgPSB7XG4gICAgY29uc3Q6IG5ldyBjb2RlXzEuTmFtZShcImNvbnN0XCIpLFxuICAgIGxldDogbmV3IGNvZGVfMS5OYW1lKFwibGV0XCIpLFxuICAgIHZhcjogbmV3IGNvZGVfMS5OYW1lKFwidmFyXCIpLFxufTtcbmNsYXNzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3Rvcih7IHByZWZpeGVzLCBwYXJlbnQgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX25hbWVzID0ge307XG4gICAgICAgIHRoaXMuX3ByZWZpeGVzID0gcHJlZml4ZXM7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdG9OYW1lKG5hbWVPclByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmFtZU9yUHJlZml4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBuYW1lT3JQcmVmaXggOiB0aGlzLm5hbWUobmFtZU9yUHJlZml4KTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuTmFtZSh0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICBfbmV3TmFtZShwcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbmcgPSB0aGlzLl9uYW1lc1twcmVmaXhdIHx8IHRoaXMuX25hbWVHcm91cChwcmVmaXgpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bmcuaW5kZXgrK31gO1xuICAgIH1cbiAgICBfbmFtZUdyb3VwKHByZWZpeCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKChfYiA9IChfYSA9IHRoaXMuX3BhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9wcmVmaXhlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhwcmVmaXgpKSB8fCAodGhpcy5fcHJlZml4ZXMgJiYgIXRoaXMuX3ByZWZpeGVzLmhhcyhwcmVmaXgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggXCIke3ByZWZpeH1cIiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHNjb3BlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLl9uYW1lc1twcmVmaXhdID0geyBwcmVmaXgsIGluZGV4OiAwIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2NvcGUgPSBTY29wZTtcbmNsYXNzIFZhbHVlU2NvcGVOYW1lIGV4dGVuZHMgY29kZV8xLk5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgbmFtZVN0cikge1xuICAgICAgICBzdXBlcihuYW1lU3RyKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5LCBpdGVtSW5kZXggfSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2NvcGVQYXRoID0gKDAsIGNvZGVfMS5fKSBgLiR7bmV3IGNvZGVfMS5OYW1lKHByb3BlcnR5KX1bJHtpdGVtSW5kZXh9XWA7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IFZhbHVlU2NvcGVOYW1lO1xuY29uc3QgbGluZSA9ICgwLCBjb2RlXzEuXykgYFxcbmA7XG5jbGFzcyBWYWx1ZVNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zY29wZSA9IG9wdHMuc2NvcGU7XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBsaW5lIDogY29kZV8xLm5pbCB9O1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZVNjb3BlTmFtZShwcmVmaXgsIHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIHZhbHVlKG5hbWVPclByZWZpeCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodmFsdWUucmVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWVcIik7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBjb25zdCB7IHByZWZpeCB9ID0gbmFtZTtcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSAoX2EgPSB2YWx1ZS5rZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlLnJlZjtcbiAgICAgICAgbGV0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgICAgY29uc3QgX25hbWUgPSB2cy5nZXQodmFsdWVLZXkpO1xuICAgICAgICAgICAgaWYgKF9uYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF0gPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdnMuc2V0KHZhbHVlS2V5LCBuYW1lKTtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuX3Njb3BlW3ByZWZpeF0gfHwgKHRoaXMuX3Njb3BlW3ByZWZpeF0gPSBbXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHMubGVuZ3RoO1xuICAgICAgICBzW2l0ZW1JbmRleF0gPSB2YWx1ZS5yZWY7XG4gICAgICAgIG5hbWUuc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHk6IHByZWZpeCwgaXRlbUluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdnMuZ2V0KGtleU9yUmVmKTtcbiAgICB9XG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSwgdmFsdWVzID0gdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUuc2NvcGVQYXRoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlXzEuXykgYCR7c2NvcGVOYW1lfSR7bmFtZS5zY29wZVBhdGh9YDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSh2YWx1ZXMgPSB0aGlzLl92YWx1ZXMsIHVzZWRWYWx1ZXMsIGdldENvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnZhbHVlLmNvZGU7XG4gICAgICAgIH0sIHVzZWRWYWx1ZXMsIGdldENvZGUpO1xuICAgIH1cbiAgICBfcmVkdWNlVmFsdWVzKHZhbHVlcywgdmFsdWVDb2RlLCB1c2VkVmFsdWVzID0ge30sIGdldENvZGUpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBjb2RlXzEubmlsO1xuICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZzID0gdmFsdWVzW3ByZWZpeF07XG4gICAgICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbmFtZVNldCA9ICh1c2VkVmFsdWVzW3ByZWZpeF0gPSB1c2VkVmFsdWVzW3ByZWZpeF0gfHwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHZzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZVNldC5oYXMobmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5TdGFydGVkKTtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IHZhbHVlQ29kZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWYgPSB0aGlzLm9wdHMuZXM1ID8gZXhwb3J0cy52YXJLaW5kcy52YXIgOiBleHBvcnRzLnZhcktpbmRzLmNvbnN0O1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7ZGVmfSAke25hbWV9ID0gJHtjfTske3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgoYyA9IGdldENvZGUgPT09IG51bGwgfHwgZ2V0Q29kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0Q29kZShuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2N9JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5Db21wbGV0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlID0gVmFsdWVTY29wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js": /*!*******************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js ***! \*******************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = __webpack_require__(/*! ./codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst names_1 = __webpack_require__(/*! ./names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nexports.keywordError = {\n message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n message: ({ keyword, schemaType }) => schemaType\n ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n addError(gen, errObj);\n }\n else {\n returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n addError(gen, errObj);\n if (!(compositeRule || allErrors)) {\n returnErrors(it, names_1.default.vErrors);\n }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n gen.assign(names_1.default.errors, errsCount);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n /* istanbul ignore if */\n if (errsCount === undefined)\n throw new Error(\"ajv implementation error\");\n const err = gen.name(\"err\");\n gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n if (it.opts.verbose) {\n gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n gen.assign((0, codegen_1._) `${err}.data`, data);\n }\n });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n const err = gen.const(\"err\", errObj);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n const { gen, validateName, schemaEnv } = it;\n if (schemaEnv.$async) {\n gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n gen.return(false);\n }\n}\nconst E = {\n keyword: new codegen_1.Name(\"keyword\"),\n schemaPath: new codegen_1.Name(\"schemaPath\"), // also used in JTD errors\n params: new codegen_1.Name(\"params\"),\n propertyName: new codegen_1.Name(\"propertyName\"),\n message: new codegen_1.Name(\"message\"),\n schema: new codegen_1.Name(\"schema\"),\n parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n const { createErrors } = cxt.it;\n if (createErrors === false)\n return (0, codegen_1._) `{}`;\n return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n const { gen, it } = cxt;\n const keyValues = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ];\n extraErrorProps(cxt, error, keyValues);\n return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n const instPath = instancePath\n ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n : errorPath;\n return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n if (schemaPath) {\n schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n }\n return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n const { keyword, data, schemaValue, it } = cxt;\n const { opts, propertyName, topSchemaRef, schemaPath } = it;\n keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n }\n if (opts.verbose) {\n keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n }\n if (propertyName)\n keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2Vycm9ycy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxvQkFBb0IsR0FBRyx3QkFBd0IsR0FBRyx3QkFBd0IsR0FBRyxtQkFBbUIsR0FBRyx5QkFBeUIsR0FBRyxvQkFBb0I7QUFDbkosa0JBQWtCLG1CQUFPLENBQUMscUhBQVc7QUFDckMsZUFBZSxtQkFBTyxDQUFDLHlHQUFRO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLDJHQUFTO0FBQ2pDLG9CQUFvQjtBQUNwQixnQkFBZ0IsU0FBUyxzQ0FBc0MsUUFBUTtBQUN2RTtBQUNBLHlCQUF5QjtBQUN6QixnQkFBZ0IscUJBQXFCO0FBQ3JDLGlDQUFpQyxRQUFRLG9CQUFvQixZQUFZO0FBQ3pFLGlDQUFpQyxRQUFRO0FBQ3pDO0FBQ0E7QUFDQSxZQUFZLEtBQUs7QUFDakIsWUFBWSxnQ0FBZ0M7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSxZQUFZLEtBQUs7QUFDakIsWUFBWSxnQ0FBZ0M7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSwrQkFBK0IseUJBQXlCLHdFQUF3RSx3QkFBd0I7QUFDeEo7QUFDQSx3QkFBd0I7QUFDeEIsd0JBQXdCLGlEQUFpRDtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHdCQUF3QixHQUFHLEVBQUU7QUFDeEUsbUNBQW1DLElBQUksbUVBQW1FLElBQUk7QUFDOUcsdUNBQXVDLElBQUksb0NBQW9DLGlCQUFpQixHQUFHLFFBQVE7QUFDM0c7QUFDQSwyQ0FBMkMsSUFBSTtBQUMvQywyQ0FBMkMsSUFBSTtBQUMvQztBQUNBLEtBQUs7QUFDTDtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0EsK0JBQStCLHlCQUF5QiwwRUFBMEUsSUFBSSx5QkFBeUIsd0JBQXdCLFFBQVEsSUFBSTtBQUNuTSxpQ0FBaUMsdUJBQXVCO0FBQ3hEO0FBQ0E7QUFDQSxZQUFZLCtCQUErQjtBQUMzQztBQUNBLDBDQUEwQyxtQkFBbUIsR0FBRyxLQUFLO0FBQ3JFO0FBQ0E7QUFDQSx1Q0FBdUMsYUFBYTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZUFBZTtBQUMzQjtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hELFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixXQUFXLElBQUksY0FBYztBQUMxRDtBQUNBLGdDQUFnQyxVQUFVLEVBQUUsd0RBQXdEO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixlQUFlLGlCQUFpQixJQUFJLDBCQUEwQjtBQUN6Rix1RUFBdUUsY0FBYyxHQUFHLFFBQVE7QUFDaEc7QUFDQSx3Q0FBd0MsUUFBUSxFQUFFLHNEQUFzRDtBQUN4RztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsaUJBQWlCO0FBQ2pELFlBQVksaUNBQWlDO0FBQzdDLFlBQVksK0NBQStDO0FBQzNELDhIQUE4SDtBQUM5SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFGQUFxRixhQUFhLEVBQUUsV0FBVztBQUMvRztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSBleHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSBleHBvcnRzLnJlcG9ydEVycm9yID0gZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5leHBvcnRzLmtleXdvcmRFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBwYXNzIFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgdmFsaWRhdGlvbmAsXG59O1xuZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFUeXBlIH0pID0+IHNjaGVtYVR5cGVcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgbXVzdCBiZSAke3NjaGVtYVR5cGV9ICgkZGF0YSlgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0RXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzLCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgaWYgKG92ZXJyaWRlQWxsRXJyb3JzICE9PSBudWxsICYmIG92ZXJyaWRlQWxsRXJyb3JzICE9PSB2b2lkIDAgPyBvdmVycmlkZUFsbEVycm9ycyA6IChjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJPYmp9XWApO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXJyb3IgPSByZXBvcnRFcnJvcjtcbmZ1bmN0aW9uIHJlcG9ydEV4dHJhRXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgaWYgKCEoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IHJlcG9ydEV4dHJhRXJyb3I7XG5mdW5jdGlvbiByZXNldEVycm9yc0NvdW50KGdlbiwgZXJyc0NvdW50KSB7XG4gICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCBlcnJzQ291bnQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsICgpID0+IGdlbi5pZihlcnJzQ291bnQsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCwgZXJyc0NvdW50KSwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCkpKTtcbn1cbmV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IHJlc2V0RXJyb3JzQ291bnQ7XG5mdW5jdGlvbiBleHRlbmRFcnJvcnMoeyBnZW4sIGtleXdvcmQsIHNjaGVtYVZhbHVlLCBkYXRhLCBlcnJzQ291bnQsIGl0LCB9KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgZXJyID0gZ2VuLm5hbWUoXCJlcnJcIik7XG4gICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBlcnJzQ291bnQsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIChpKSA9PiB7XG4gICAgICAgIGdlbi5jb25zdChlcnIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9WyR7aX1dYCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaXQuZXJyb3JQYXRoKSkpO1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHIpIGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hYCwgc2NoZW1hVmFsdWUpO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uZGF0YWAsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4dGVuZEVycm9ycztcbmZ1bmN0aW9uIGFkZEVycm9yKGdlbiwgZXJyT2JqKSB7XG4gICAgY29uc3QgZXJyID0gZ2VuLmNvbnN0KFwiZXJyXCIsIGVyck9iaik7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsYCwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyfV1gKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ucHVzaCgke2Vycn0pYCk7XG4gICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSsrYCk7XG59XG5mdW5jdGlvbiByZXR1cm5FcnJvcnMoaXQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWFFbnYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KCR7ZXJyc30pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBlcnJzKTtcbiAgICAgICAgZ2VuLnJldHVybihmYWxzZSk7XG4gICAgfVxufVxuY29uc3QgRSA9IHtcbiAgICBrZXl3b3JkOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJrZXl3b3JkXCIpLFxuICAgIHNjaGVtYVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVBhdGhcIiksIC8vIGFsc28gdXNlZCBpbiBKVEQgZXJyb3JzXG4gICAgcGFyYW1zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJhbXNcIiksXG4gICAgcHJvcGVydHlOYW1lOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwcm9wZXJ0eU5hbWVcIiksXG4gICAgbWVzc2FnZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwibWVzc2FnZVwiKSxcbiAgICBzY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVwiKSxcbiAgICBwYXJlbnRTY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudFNjaGVtYVwiKSxcbn07XG5mdW5jdGlvbiBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgY3JlYXRlRXJyb3JzIH0gPSBjeHQuaXQ7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7fWA7XG4gICAgcmV0dXJuIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xufVxuZnVuY3Rpb24gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyA9IHt9KSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW1xuICAgICAgICBlcnJvckluc3RhbmNlUGF0aChpdCwgZXJyb3JQYXRocyksXG4gICAgICAgIGVycm9yU2NoZW1hUGF0aChjeHQsIGVycm9yUGF0aHMpLFxuICAgIF07XG4gICAgZXh0cmFFcnJvclByb3BzKGN4dCwgZXJyb3IsIGtleVZhbHVlcyk7XG4gICAgcmV0dXJuIGdlbi5vYmplY3QoLi4ua2V5VmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGVycm9ySW5zdGFuY2VQYXRoKHsgZXJyb3JQYXRoIH0sIHsgaW5zdGFuY2VQYXRoIH0pIHtcbiAgICBjb25zdCBpbnN0UGF0aCA9IGluc3RhbmNlUGF0aFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoaW5zdGFuY2VQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWBcbiAgICAgICAgOiBlcnJvclBhdGg7XG4gICAgcmV0dXJuIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaW5zdFBhdGgpXTtcbn1cbmZ1bmN0aW9uIGVycm9yU2NoZW1hUGF0aCh7IGtleXdvcmQsIGl0OiB7IGVyclNjaGVtYVBhdGggfSB9LCB7IHNjaGVtYVBhdGgsIHBhcmVudFNjaGVtYSB9KSB7XG4gICAgbGV0IHNjaFBhdGggPSBwYXJlbnRTY2hlbWEgPyBlcnJTY2hlbWFQYXRoIDogKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gO1xuICAgIGlmIChzY2hlbWFQYXRoKSB7XG4gICAgICAgIHNjaFBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7c2NoUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShzY2hlbWFQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWA7XG4gICAgfVxuICAgIHJldHVybiBbRS5zY2hlbWFQYXRoLCBzY2hQYXRoXTtcbn1cbmZ1bmN0aW9uIGV4dHJhRXJyb3JQcm9wcyhjeHQsIHsgcGFyYW1zLCBtZXNzYWdlIH0sIGtleVZhbHVlcykge1xuICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hVmFsdWUsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBvcHRzLCBwcm9wZXJ0eU5hbWUsIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAga2V5VmFsdWVzLnB1c2goW0Uua2V5d29yZCwga2V5d29yZF0sIFtFLnBhcmFtcywgdHlwZW9mIHBhcmFtcyA9PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoY3h0KSA6IHBhcmFtcyB8fCAoMCwgY29kZWdlbl8xLl8pIGB7fWBdKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlcykge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5tZXNzYWdlLCB0eXBlb2YgbWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgPyBtZXNzYWdlKGN4dCkgOiBtZXNzYWdlXSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnZlcmJvc2UpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0Uuc2NoZW1hLCBzY2hlbWFWYWx1ZV0sIFtFLnBhcmVudFNjaGVtYSwgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWBdLCBbbmFtZXNfMS5kZWZhdWx0LmRhdGEsIGRhdGFdKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5TmFtZSlcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js": /*!******************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = __webpack_require__(/*! ./codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst validation_error_1 = __webpack_require__(/*! ../runtime/validation_error */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js\");\nconst names_1 = __webpack_require__(/*! ./names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nconst resolve_1 = __webpack_require__(/*! ./resolve */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst validate_1 = __webpack_require__(/*! ./validate */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js\");\nclass SchemaEnv {\n constructor(env) {\n var _a;\n this.refs = {};\n this.dynamicAnchors = {};\n let schema;\n if (typeof env.schema == \"object\")\n schema = env.schema;\n this.schema = env.schema;\n this.schemaId = env.schemaId;\n this.root = env.root || this;\n this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n this.schemaPath = env.schemaPath;\n this.localRefs = env.localRefs;\n this.meta = env.meta;\n this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n this.refs = {};\n }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch);\n if (_sch)\n return _sch;\n const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n const { es5, lines } = this.opts.code;\n const { ownProperties } = this.opts;\n const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n let _ValidationError;\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: validation_error_1.default,\n code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n });\n }\n const validateName = gen.scopeName(\"validate\");\n sch.validateName = validateName;\n const schemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: names_1.default.data,\n parentData: names_1.default.parentData,\n parentDataProperty: names_1.default.parentDataProperty,\n dataNames: [names_1.default.data],\n dataPathArr: [codegen_1.nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set(),\n topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n : { ref: sch.schema }),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: codegen_1.nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: (0, codegen_1._) `\"\"`,\n opts: this.opts,\n self: this,\n };\n let sourceCode;\n try {\n this._compilations.add(sch);\n (0, validate_1.validateFunctionCode)(schemaCxt);\n gen.optimize(this.opts.code.optimize);\n // gen.optimize(1)\n const validateCode = gen.toString();\n sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process)\n sourceCode = this.opts.code.process(sourceCode, sch);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n const validate = makeValidate(this, this.scope.get());\n this.scope.value(validateName, { ref: validate });\n validate.errors = null;\n validate.schema = sch.schema;\n validate.schemaEnv = sch;\n if (sch.$async)\n validate.$async = true;\n if (this.opts.code.source === true) {\n validate.source = { validateName, validateCode, scopeValues: gen._values };\n }\n if (this.opts.unevaluated) {\n const { props, items } = schemaCxt;\n validate.evaluated = {\n props: props instanceof codegen_1.Name ? undefined : props,\n items: items instanceof codegen_1.Name ? undefined : items,\n dynamicProps: props instanceof codegen_1.Name,\n dynamicItems: items instanceof codegen_1.Name,\n };\n if (validate.source)\n validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n }\n sch.validate = validate;\n return sch;\n }\n catch (e) {\n delete sch.validate;\n delete sch.validateName;\n if (sourceCode)\n this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e;\n }\n finally {\n this._compilations.delete(sch);\n }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n var _a;\n ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n const schOrFunc = root.refs[ref];\n if (schOrFunc)\n return schOrFunc;\n let _sch = resolve.call(this, root, ref);\n if (_sch === undefined) {\n const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n const { schemaId } = this.opts;\n if (schema)\n _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n }\n if (_sch === undefined)\n return;\n return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n return sch.schema;\n return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv))\n return sch;\n }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n let sch;\n while (typeof (sch = this.refs[ref]) == \"string\")\n ref = sch;\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n const p = this.opts.uriResolver.parse(ref);\n const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root);\n }\n const id = (0, resolve_1.normalizeId)(refPath);\n const schOrRef = this.refs[id] || this.schemas[id];\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef);\n if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n return;\n return getJsonPointer.call(this, p, sch);\n }\n if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n return;\n if (!schOrRef.validate)\n compileSchema.call(this, schOrRef);\n if (id === (0, resolve_1.normalizeId)(ref)) {\n const { schema } = schOrRef;\n const { schemaId } = this.opts;\n const schId = schema[schemaId];\n if (schId)\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n return new SchemaEnv({ schema, schemaId, root, baseId });\n }\n return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n var _a;\n if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n return;\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\")\n return;\n const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n if (partSchema === undefined)\n return;\n schema = partSchema;\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n }\n }\n let env;\n if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n env = resolveSchema.call(this, root, $ref);\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const { schemaId } = this.opts;\n env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n if (env.schema !== env.root.schema)\n return env;\n return undefined;\n}\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHFCQUFxQixHQUFHLDBCQUEwQixHQUFHLGtCQUFrQixHQUFHLHFCQUFxQixHQUFHLGlCQUFpQjtBQUNuSCxrQkFBa0IsbUJBQU8sQ0FBQyxxSEFBVztBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQywwSUFBNkI7QUFDaEUsZ0JBQWdCLG1CQUFPLENBQUMsMkdBQVM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsK0dBQVc7QUFDckMsZUFBZSxtQkFBTyxDQUFDLHlHQUFRO0FBQy9CLG1CQUFtQixtQkFBTyxDQUFDLHVIQUFZO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RkFBdUY7QUFDdkYsWUFBWSxhQUFhO0FBQ3pCLFlBQVksZ0JBQWdCO0FBQzVCLG9EQUFvRCwyQkFBMkI7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQ0FBcUMsU0FBUyxhQUFhO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHFCQUFxQixNQUFNLHNCQUFzQjtBQUM5RjtBQUNBLHlDQUF5QyxlQUFlO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkY7QUFDM0YsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekIsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGdDQUFnQztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsc0JBQXNCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkIsaUNBQWlDLGdDQUFnQztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSBleHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGV4cG9ydHMucmVzb2x2ZVJlZiA9IGV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGV4cG9ydHMuU2NoZW1hRW52ID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVwiKTtcbmNsYXNzIFNjaGVtYUVudiB7XG4gICAgY29uc3RydWN0b3IoZW52KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZHluYW1pY0FuY2hvcnMgPSB7fTtcbiAgICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYuc2NoZW1hID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBzY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hSWQgPSBlbnYuc2NoZW1hSWQ7XG4gICAgICAgIHRoaXMucm9vdCA9IGVudi5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuYmFzZUlkID0gKF9hID0gZW52LmJhc2VJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hW2Vudi5zY2hlbWFJZCB8fCBcIiRpZFwiXSk7XG4gICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IGVudi5zY2hlbWFQYXRoO1xuICAgICAgICB0aGlzLmxvY2FsUmVmcyA9IGVudi5sb2NhbFJlZnM7XG4gICAgICAgIHRoaXMubWV0YSA9IGVudi5tZXRhO1xuICAgICAgICB0aGlzLiRhc3luYyA9IHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYS4kYXN5bmM7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2NoZW1hRW52ID0gU2NoZW1hRW52O1xuLy8gbGV0IGNvZGVTaXplID0gMFxuLy8gbGV0IG5vZGVDb3VudCA9IDBcbi8vIENvbXBpbGVzIHNjaGVtYSBpbiBTY2hlbWFFbnZcbmZ1bmN0aW9uIGNvbXBpbGVTY2hlbWEoc2NoKSB7XG4gICAgLy8gVE9ETyByZWZhY3RvciAtIHJlbW92ZSBjb21waWxhdGlvbnNcbiAgICBjb25zdCBfc2NoID0gZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICBpZiAoX3NjaClcbiAgICAgICAgcmV0dXJuIF9zY2g7XG4gICAgY29uc3Qgcm9vdElkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBzY2gucm9vdC5iYXNlSWQpOyAvLyBUT0RPIGlmIGdldEZ1bGxQYXRoIHJlbW92ZWQgMSB0ZXN0cyBmYWlsc1xuICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgY29uc3QgeyBvd25Qcm9wZXJ0aWVzIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3QgZ2VuID0gbmV3IGNvZGVnZW5fMS5Db2RlR2VuKHRoaXMuc2NvcGUsIHsgZXM1LCBsaW5lcywgb3duUHJvcGVydGllcyB9KTtcbiAgICBsZXQgX1ZhbGlkYXRpb25FcnJvcjtcbiAgICBpZiAoc2NoLiRhc3luYykge1xuICAgICAgICBfVmFsaWRhdGlvbkVycm9yID0gZ2VuLnNjb3BlVmFsdWUoXCJFcnJvclwiLCB7XG4gICAgICAgICAgICByZWY6IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0LFxuICAgICAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKS5kZWZhdWx0YCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IGdlbi5zY29wZU5hbWUoXCJ2YWxpZGF0ZVwiKTtcbiAgICBzY2gudmFsaWRhdGVOYW1lID0gdmFsaWRhdGVOYW1lO1xuICAgIGNvbnN0IHNjaGVtYUN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBhbGxFcnJvcnM6IHRoaXMub3B0cy5hbGxFcnJvcnMsXG4gICAgICAgIGRhdGE6IG5hbWVzXzEuZGVmYXVsdC5kYXRhLFxuICAgICAgICBwYXJlbnREYXRhOiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSxcbiAgICAgICAgcGFyZW50RGF0YVByb3BlcnR5OiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LFxuICAgICAgICBkYXRhTmFtZXM6IFtuYW1lc18xLmRlZmF1bHQuZGF0YV0sXG4gICAgICAgIGRhdGFQYXRoQXJyOiBbY29kZWdlbl8xLm5pbF0sIC8vIFRPRE8gY2FuIGl0cyBsZW5ndGggYmUgdXNlZCBhcyBkYXRhTGV2ZWwgaWYgbmlsIGlzIHJlbW92ZWQ/XG4gICAgICAgIGRhdGFMZXZlbDogMCxcbiAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgZGVmaW5lZFByb3BlcnRpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCB0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWVcbiAgICAgICAgICAgID8geyByZWY6IHNjaC5zY2hlbWEsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2guc2NoZW1hKSB9XG4gICAgICAgICAgICA6IHsgcmVmOiBzY2guc2NoZW1hIH0pLFxuICAgICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjogX1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgc2NoZW1hOiBzY2guc2NoZW1hLFxuICAgICAgICBzY2hlbWFFbnY6IHNjaCxcbiAgICAgICAgcm9vdElkLFxuICAgICAgICBiYXNlSWQ6IHNjaC5iYXNlSWQgfHwgcm9vdElkLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBzY2guc2NoZW1hUGF0aCB8fCAodGhpcy5vcHRzLmp0ZCA/IFwiXCIgOiBcIiNcIiksXG4gICAgICAgIGVycm9yUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgXCJcImAsXG4gICAgICAgIG9wdHM6IHRoaXMub3B0cyxcbiAgICAgICAgc2VsZjogdGhpcyxcbiAgICB9O1xuICAgIGxldCBzb3VyY2VDb2RlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5hZGQoc2NoKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlXzEudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHNjaGVtYUN4dCk7XG4gICAgICAgIGdlbi5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7XG4gICAgICAgIC8vIGdlbi5vcHRpbWl6ZSgxKVxuICAgICAgICBjb25zdCB2YWxpZGF0ZUNvZGUgPSBnZW4udG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlQ29kZSA9IGAke2dlbi5zY29wZVJlZnMobmFtZXNfMS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHt2YWxpZGF0ZUNvZGV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coKGNvZGVTaXplICs9IHNvdXJjZUNvZGUubGVuZ3RoKSwgKG5vZGVDb3VudCArPSBnZW4ubm9kZUNvdW50KSlcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnByb2Nlc3MpXG4gICAgICAgICAgICBzb3VyY2VDb2RlID0gdGhpcy5vcHRzLmNvZGUucHJvY2Vzcyhzb3VyY2VDb2RlLCBzY2gpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUpXG4gICAgICAgIGNvbnN0IG1ha2VWYWxpZGF0ZSA9IG5ldyBGdW5jdGlvbihgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn1gLCBgJHtuYW1lc18xLmRlZmF1bHQuc2NvcGV9YCwgc291cmNlQ29kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKHRoaXMsIHRoaXMuc2NvcGUuZ2V0KCkpO1xuICAgICAgICB0aGlzLnNjb3BlLnZhbHVlKHZhbGlkYXRlTmFtZSwgeyByZWY6IHZhbGlkYXRlIH0pO1xuICAgICAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWEgPSBzY2guc2NoZW1hO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWFFbnYgPSBzY2g7XG4gICAgICAgIGlmIChzY2guJGFzeW5jKVxuICAgICAgICAgICAgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlID0geyB2YWxpZGF0ZU5hbWUsIHZhbGlkYXRlQ29kZSwgc2NvcGVWYWx1ZXM6IGdlbi5fdmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy51bmV2YWx1YXRlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgaXRlbXMgfSA9IHNjaGVtYUN4dDtcbiAgICAgICAgICAgIHZhbGlkYXRlLmV2YWx1YXRlZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IHByb3BzLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogaXRlbXMsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNJdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodmFsaWRhdGUuc291cmNlKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZS5ldmFsdWF0ZWQgPSAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkodmFsaWRhdGUuZXZhbHVhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzY2gudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZTtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZU5hbWU7XG4gICAgICAgIGlmIChzb3VyY2VDb2RlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOlwiLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlLCB0aGlzLm9wdHMpXG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKHNjaCk7XG4gICAgfVxufVxuZXhwb3J0cy5jb21waWxlU2NoZW1hID0gY29tcGlsZVNjaGVtYTtcbmZ1bmN0aW9uIHJlc29sdmVSZWYocm9vdCwgYmFzZUlkLCByZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICBjb25zdCBzY2hPckZ1bmMgPSByb290LnJlZnNbcmVmXTtcbiAgICBpZiAoc2NoT3JGdW5jKVxuICAgICAgICByZXR1cm4gc2NoT3JGdW5jO1xuICAgIGxldCBfc2NoID0gcmVzb2x2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSAoX2EgPSByb290LmxvY2FsUmVmcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3JlZl07IC8vIFRPRE8gbWF5YmUgbG9jYWxSZWZzIHNob3VsZCBob2xkIFNjaGVtYUVudlxuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmIChzY2hlbWEpXG4gICAgICAgICAgICBfc2NoID0gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiAocm9vdC5yZWZzW3JlZl0gPSBpbmxpbmVPckNvbXBpbGUuY2FsbCh0aGlzLCBfc2NoKSk7XG59XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZnVuY3Rpb24gaW5saW5lT3JDb21waWxlKHNjaCkge1xuICAgIGlmICgoMCwgcmVzb2x2ZV8xLmlubGluZVJlZikoc2NoLnNjaGVtYSwgdGhpcy5vcHRzLmlubGluZVJlZnMpKVxuICAgICAgICByZXR1cm4gc2NoLnNjaGVtYTtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlID8gc2NoIDogY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG59XG4vLyBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG5mdW5jdGlvbiBnZXRDb21waWxpbmdTY2hlbWEoc2NoRW52KSB7XG4gICAgZm9yIChjb25zdCBzY2ggb2YgdGhpcy5fY29tcGlsYXRpb25zKSB7XG4gICAgICAgIGlmIChzYW1lU2NoZW1hRW52KHNjaCwgc2NoRW52KSlcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBnZXRDb21waWxpbmdTY2hlbWE7XG5mdW5jdGlvbiBzYW1lU2NoZW1hRW52KHMxLCBzMikge1xuICAgIHJldHVybiBzMS5zY2hlbWEgPT09IHMyLnNjaGVtYSAmJiBzMS5yb290ID09PSBzMi5yb290ICYmIHMxLmJhc2VJZCA9PT0gczIuYmFzZUlkO1xufVxuLy8gcmVzb2x2ZSBhbmQgY29tcGlsZSB0aGUgcmVmZXJlbmNlcyAoJHJlZilcbi8vIFRPRE8gcmV0dXJucyBBbnlTY2hlbWFPYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbmZ1bmN0aW9uIHJlc29sdmUocm9vdCwgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgbGV0IHNjaDtcbiAgICB3aGlsZSAodHlwZW9mIChzY2ggPSB0aGlzLnJlZnNbcmVmXSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmVmID0gc2NoO1xuICAgIHJldHVybiBzY2ggfHwgdGhpcy5zY2hlbWFzW3JlZl0gfHwgcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG59XG4vLyBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCAvLyByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZzIFRPRE8gYmVsb3cgU2NoZW1hRW52IGlzIGFzc2lnbmVkIHRvIGl0XG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGNvbnN0IHAgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucGFyc2UocmVmKTtcbiAgICBjb25zdCByZWZQYXRoID0gKDAsIHJlc29sdmVfMS5fZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcCk7XG4gICAgbGV0IGJhc2VJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcm9vdC5iYXNlSWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gVE9ETyBgT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDBgIHNob3VsZCBub3QgYmUgbmVlZGVkIC0gYnV0IHJlbW92aW5nIGJyZWFrcyAyIHRlc3RzXG4gICAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwICYmIHJlZlBhdGggPT09IGJhc2VJZCkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCByb290KTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWZQYXRoKTtcbiAgICBjb25zdCBzY2hPclJlZiA9IHRoaXMucmVmc1tpZF0gfHwgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHNjaE9yUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHNjaE9yUmVmID09PSBudWxsIHx8IHNjaE9yUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hPclJlZi5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFzY2hPclJlZi52YWxpZGF0ZSlcbiAgICAgICAgY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaE9yUmVmKTtcbiAgICBpZiAoaWQgPT09ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZikpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHNjaE9yUmVmO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGNvbnN0IHNjaElkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgaWYgKHNjaElkKVxuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoT3JSZWYpO1xufVxuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gcmVzb2x2ZVNjaGVtYTtcbmNvbnN0IFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gbmV3IFNldChbXG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuXSk7XG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIHsgYmFzZUlkLCBzY2hlbWEsIHJvb3QgfSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKChfYSA9IHBhcnNlZFJlZi5mcmFnbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSAhPT0gXCIvXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFyc2VkUmVmLmZyYWdtZW50LnNsaWNlKDEpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnRTY2hlbWEgPSBzY2hlbWFbKDAsIHV0aWxfMS51bmVzY2FwZUZyYWdtZW50KShwYXJ0KV07XG4gICAgICAgIGlmIChwYXJ0U2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNjaGVtYSA9IHBhcnRTY2hlbWE7XG4gICAgICAgIC8vIFRPRE8gUFJFVkVOVF9TQ09QRV9DSEFOR0UgY291bGQgYmUgZGVmaW5lZCBpbiBrZXl3b3JkIGRlZj9cbiAgICAgICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYVt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFLmhhcyhwYXJ0KSAmJiBzY2hJZCkge1xuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBlbnY7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIgJiYgc2NoZW1hLiRyZWYgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgdGhpcy5SVUxFUykpIHtcbiAgICAgICAgY29uc3QgJHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgZW52ID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgIH1cbiAgICAvLyBldmVuIHRob3VnaCByZXNvbHV0aW9uIGZhaWxlZCB3ZSBuZWVkIHRvIHJldHVybiBTY2hlbWFFbnYgdG8gdGhyb3cgZXhjZXB0aW9uXG4gICAgLy8gc28gdGhhdCBjb21waWxlQXN5bmMgbG9hZHMgbWlzc2luZyBzY2hlbWEuXG4gICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgIGVudiA9IGVudiB8fCBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIGlmIChlbnYuc2NoZW1hICE9PSBlbnYucm9vdC5zY2hlbWEpXG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js": /*!******************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ./codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst names = {\n // validation function arguments\n data: new codegen_1.Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new codegen_1.Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new codegen_1.Name(\"instancePath\"),\n parentData: new codegen_1.Name(\"parentData\"),\n parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n rootData: new codegen_1.Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new codegen_1.Name(\"vErrors\"), // null or array of validation errors\n errors: new codegen_1.Name(\"errors\"), // counter of validation errors\n this: new codegen_1.Name(\"this\"),\n // \"globals\"\n self: new codegen_1.Name(\"self\"),\n scope: new codegen_1.Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new codegen_1.Name(\"json\"),\n jsonPos: new codegen_1.Name(\"jsonPos\"),\n jsonLen: new codegen_1.Name(\"jsonLen\"),\n jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports[\"default\"] = names;\n//# sourceMappingURL=names.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL25hbWVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLHFIQUFXO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvbmFtZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXMgPSB7XG4gICAgLy8gdmFsaWRhdGlvbiBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICBkYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkYXRhXCIpLCAvLyBkYXRhIHBhc3NlZCB0byB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gICAgLy8gYXJncyBwYXNzZWQgZnJvbSByZWZlcmVuY2luZyBzY2hlbWFcbiAgICB2YWxDeHQ6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZhbEN4dFwiKSwgLy8gdmFsaWRhdGlvbi9kYXRhIGNvbnRleHQgLSBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHksIGl0IGlzIGRlc3RydWN0dXJlZCB0byB0aGUgbmFtZXMgYmVsb3dcbiAgICBpbnN0YW5jZVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImluc3RhbmNlUGF0aFwiKSxcbiAgICBwYXJlbnREYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnREYXRhXCIpLFxuICAgIHBhcmVudERhdGFQcm9wZXJ0eTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVByb3BlcnR5XCIpLFxuICAgIHJvb3REYXRhOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJyb290RGF0YVwiKSwgLy8gcm9vdCBkYXRhIC0gc2FtZSBhcyB0aGUgZGF0YSBwYXNzZWQgdG8gdGhlIGZpcnN0L3RvcCB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gICAgZHluYW1pY0FuY2hvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImR5bmFtaWNBbmNob3JzXCIpLCAvLyB1c2VkIHRvIHN1cHBvcnQgcmVjdXJzaXZlUmVmIGFuZCBkeW5hbWljUmVmXG4gICAgLy8gZnVuY3Rpb24gc2NvcGVkIHZhcmlhYmxlc1xuICAgIHZFcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInZFcnJvcnNcIiksIC8vIG51bGwgb3IgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICBlcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImVycm9yc1wiKSwgLy8gY291bnRlciBvZiB2YWxpZGF0aW9uIGVycm9yc1xuICAgIHRoaXM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInRoaXNcIiksXG4gICAgLy8gXCJnbG9iYWxzXCJcbiAgICBzZWxmOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzZWxmXCIpLFxuICAgIHNjb3BlOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJzY29wZVwiKSxcbiAgICAvLyBKVEQgc2VyaWFsaXplL3BhcnNlIG5hbWUgZm9yIEpTT04gc3RyaW5nIGFuZCBwb3NpdGlvblxuICAgIGpzb246IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25cIiksXG4gICAganNvblBvczogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBvc1wiKSxcbiAgICBqc29uTGVuOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uTGVuXCIpLFxuICAgIGpzb25QYXJ0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uUGFydFwiKSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBuYW1lcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hbWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js": /*!**********************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js ***! \**********************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst resolve_1 = __webpack_require__(/*! ./resolve */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js\");\nclass MissingRefError extends Error {\n constructor(resolver, baseId, ref, msg) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n }\n}\nexports[\"default\"] = MissingRefError;\n//# sourceMappingURL=ref_error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3JlZl9lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQywrR0FBVztBQUNyQztBQUNBO0FBQ0EsZ0RBQWdELEtBQUssVUFBVSxPQUFPO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3JlZl9lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jbGFzcyBNaXNzaW5nUmVmRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocmVzb2x2ZXIsIGJhc2VJZCwgcmVmLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnIHx8IGBjYW4ndCByZXNvbHZlIHJlZmVyZW5jZSAke3JlZn0gZnJvbSBpZCAke2Jhc2VJZH1gKTtcbiAgICAgICAgdGhpcy5taXNzaW5nUmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShyZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgICAgICB0aGlzLm1pc3NpbmdTY2hlbWEgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKSgoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKShyZXNvbHZlciwgdGhpcy5taXNzaW5nUmVmKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWlzc2luZ1JlZkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmX2Vycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js": /*!********************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js ***! \********************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0;\nconst util_1 = __webpack_require__(/*! ./util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst equal = __webpack_require__(/*! fast-deep-equal */ \"(app-pages-browser)/./node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js\");\nconst traverse = __webpack_require__(/*! json-schema-traverse */ \"(app-pages-browser)/./node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js\");\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n \"type\",\n \"format\",\n \"pattern\",\n \"maxLength\",\n \"minLength\",\n \"maxProperties\",\n \"minProperties\",\n \"maxItems\",\n \"minItems\",\n \"maximum\",\n \"minimum\",\n \"uniqueItems\",\n \"multipleOf\",\n \"required\",\n \"enum\",\n \"const\",\n]);\nfunction inlineRef(schema, limit = true) {\n if (typeof schema == \"boolean\")\n return true;\n if (limit === true)\n return !hasRef(schema);\n if (!limit)\n return false;\n return countKeys(schema) <= limit;\n}\nexports.inlineRef = inlineRef;\nconst REF_KEYWORDS = new Set([\n \"$ref\",\n \"$recursiveRef\",\n \"$recursiveAnchor\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n]);\nfunction hasRef(schema) {\n for (const key in schema) {\n if (REF_KEYWORDS.has(key))\n return true;\n const sch = schema[key];\n if (Array.isArray(sch) && sch.some(hasRef))\n return true;\n if (typeof sch == \"object\" && hasRef(sch))\n return true;\n }\n return false;\n}\nfunction countKeys(schema) {\n let count = 0;\n for (const key in schema) {\n if (key === \"$ref\")\n return Infinity;\n count++;\n if (SIMPLE_INLINED.has(key))\n continue;\n if (typeof schema[key] == \"object\") {\n (0, util_1.eachItem)(schema[key], (sch) => (count += countKeys(sch)));\n }\n if (count === Infinity)\n return Infinity;\n }\n return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n if (normalize !== false)\n id = normalizeId(id);\n const p = resolver.parse(id);\n return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n const serialized = resolver.serialize(p);\n return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n id = normalizeId(id);\n return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n if (typeof schema == \"boolean\")\n return {};\n const { schemaId, uriResolver } = this.opts;\n const schId = normalizeId(schema[schemaId] || baseId);\n const baseIds = { \"\": schId };\n const pathPrefix = getFullPath(uriResolver, schId, false);\n const localRefs = {};\n const schemaRefs = new Set();\n traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined)\n return;\n const fullPath = pathPrefix + jsonPtr;\n let innerBaseId = baseIds[parentJsonPtr];\n if (typeof sch[schemaId] == \"string\")\n innerBaseId = addRef.call(this, sch[schemaId]);\n addAnchor.call(this, sch.$anchor);\n addAnchor.call(this, sch.$dynamicAnchor);\n baseIds[jsonPtr] = innerBaseId;\n function addRef(ref) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve;\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);\n if (schemaRefs.has(ref))\n throw ambiguos(ref);\n schemaRefs.add(ref);\n let schOrRef = this.refs[ref];\n if (typeof schOrRef == \"string\")\n schOrRef = this.refs[schOrRef];\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref);\n }\n else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref);\n localRefs[ref] = sch;\n }\n else {\n this.refs[ref] = fullPath;\n }\n }\n return ref;\n }\n function addAnchor(anchor) {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor))\n throw new Error(`invalid anchor \"${anchor}\"`);\n addRef.call(this, `#${anchor}`);\n }\n }\n });\n return localRefs;\n function checkAmbiguosRef(sch1, sch2, ref) {\n if (sch2 !== undefined && !equal(sch1, sch2))\n throw ambiguos(ref);\n }\n function ambiguos(ref) {\n return new Error(`reference \"${ref}\" resolves to more than one schema`);\n }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3Jlc29sdmUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QscUJBQXFCLEdBQUcsa0JBQWtCLEdBQUcsbUJBQW1CLEdBQUcsb0JBQW9CLEdBQUcsbUJBQW1CLEdBQUcsaUJBQWlCO0FBQ2pJLGVBQWUsbUJBQU8sQ0FBQyx5R0FBUTtBQUMvQixjQUFjLG1CQUFPLENBQUMsNkhBQWlCO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLDRJQUFzQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQsc0NBQXNDLE9BQU87QUFDN0M7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsSUFBSTtBQUMzQztBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvcmVzb2x2ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGV4cG9ydHMucmVzb2x2ZVVybCA9IGV4cG9ydHMubm9ybWFsaXplSWQgPSBleHBvcnRzLl9nZXRGdWxsUGF0aCA9IGV4cG9ydHMuZ2V0RnVsbFBhdGggPSBleHBvcnRzLmlubGluZVJlZiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBlcXVhbCA9IHJlcXVpcmUoXCJmYXN0LWRlZXAtZXF1YWxcIik7XG5jb25zdCB0cmF2ZXJzZSA9IHJlcXVpcmUoXCJqc29uLXNjaGVtYS10cmF2ZXJzZVwiKTtcbi8vIFRPRE8gcmVmYWN0b3IgdG8gdXNlIGtleXdvcmQgZGVmaW5pdGlvbnNcbmNvbnN0IFNJTVBMRV9JTkxJTkVEID0gbmV3IFNldChbXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJmb3JtYXRcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwibWluTGVuZ3RoXCIsXG4gICAgXCJtYXhQcm9wZXJ0aWVzXCIsXG4gICAgXCJtaW5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJtYXhJdGVtc1wiLFxuICAgIFwibWluSXRlbXNcIixcbiAgICBcIm1heGltdW1cIixcbiAgICBcIm1pbmltdW1cIixcbiAgICBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgXCJtdWx0aXBsZU9mXCIsXG4gICAgXCJyZXF1aXJlZFwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiY29uc3RcIixcbl0pO1xuZnVuY3Rpb24gaW5saW5lUmVmKHNjaGVtYSwgbGltaXQgPSB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChsaW1pdCA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuICFoYXNSZWYoc2NoZW1hKTtcbiAgICBpZiAoIWxpbWl0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvdW50S2V5cyhzY2hlbWEpIDw9IGxpbWl0O1xufVxuZXhwb3J0cy5pbmxpbmVSZWYgPSBpbmxpbmVSZWY7XG5jb25zdCBSRUZfS0VZV09SRFMgPSBuZXcgU2V0KFtcbiAgICBcIiRyZWZcIixcbiAgICBcIiRyZWN1cnNpdmVSZWZcIixcbiAgICBcIiRyZWN1cnNpdmVBbmNob3JcIixcbiAgICBcIiRkeW5hbWljUmVmXCIsXG4gICAgXCIkZHluYW1pY0FuY2hvclwiLFxuXSk7XG5mdW5jdGlvbiBoYXNSZWYoc2NoZW1hKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChSRUZfS0VZV09SRFMuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkgJiYgc2NoLnNvbWUoaGFzUmVmKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiICYmIGhhc1JlZihzY2gpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvdW50S2V5cyhzY2hlbWEpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcIiRyZWZcIilcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKFNJTVBMRV9JTkxJTkVELmhhcyhrZXkpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hW2tleV0gPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoc2NoZW1hW2tleV0sIChzY2gpID0+IChjb3VudCArPSBjb3VudEtleXMoc2NoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3VudCA9PT0gSW5maW5pdHkpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbn1cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoKHJlc29sdmVyLCBpZCA9IFwiXCIsIG5vcm1hbGl6ZSkge1xuICAgIGlmIChub3JtYWxpemUgIT09IGZhbHNlKVxuICAgICAgICBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgICBjb25zdCBwID0gcmVzb2x2ZXIucGFyc2UoaWQpO1xuICAgIHJldHVybiBfZ2V0RnVsbFBhdGgocmVzb2x2ZXIsIHApO1xufVxuZXhwb3J0cy5nZXRGdWxsUGF0aCA9IGdldEZ1bGxQYXRoO1xuZnVuY3Rpb24gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHJlc29sdmVyLnNlcmlhbGl6ZShwKTtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zcGxpdChcIiNcIilbMF0gKyBcIiNcIjtcbn1cbmV4cG9ydHMuX2dldEZ1bGxQYXRoID0gX2dldEZ1bGxQYXRoO1xuY29uc3QgVFJBSUxJTkdfU0xBU0hfSEFTSCA9IC8jXFwvPyQvO1xuZnVuY3Rpb24gbm9ybWFsaXplSWQoaWQpIHtcbiAgICByZXR1cm4gaWQgPyBpZC5yZXBsYWNlKFRSQUlMSU5HX1NMQVNIX0hBU0gsIFwiXCIpIDogXCJcIjtcbn1cbmV4cG9ydHMubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbmZ1bmN0aW9uIHJlc29sdmVVcmwocmVzb2x2ZXIsIGJhc2VJZCwgaWQpIHtcbiAgICBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShiYXNlSWQsIGlkKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVVybCA9IHJlc29sdmVVcmw7XG5jb25zdCBBTkNIT1IgPSAvXlthLXpfXVstYS16MC05Ll9dKiQvaTtcbmZ1bmN0aW9uIGdldFNjaGVtYVJlZnMoc2NoZW1hLCBiYXNlSWQpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHsgc2NoZW1hSWQsIHVyaVJlc29sdmVyIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3Qgc2NoSWQgPSBub3JtYWxpemVJZChzY2hlbWFbc2NoZW1hSWRdIHx8IGJhc2VJZCk7XG4gICAgY29uc3QgYmFzZUlkcyA9IHsgXCJcIjogc2NoSWQgfTtcbiAgICBjb25zdCBwYXRoUHJlZml4ID0gZ2V0RnVsbFBhdGgodXJpUmVzb2x2ZXIsIHNjaElkLCBmYWxzZSk7XG4gICAgY29uc3QgbG9jYWxSZWZzID0ge307XG4gICAgY29uc3Qgc2NoZW1hUmVmcyA9IG5ldyBTZXQoKTtcbiAgICB0cmF2ZXJzZShzY2hlbWEsIHsgYWxsS2V5czogdHJ1ZSB9LCAoc2NoLCBqc29uUHRyLCBfLCBwYXJlbnRKc29uUHRyKSA9PiB7XG4gICAgICAgIGlmIChwYXJlbnRKc29uUHRyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aFByZWZpeCArIGpzb25QdHI7XG4gICAgICAgIGxldCBpbm5lckJhc2VJZCA9IGJhc2VJZHNbcGFyZW50SnNvblB0cl07XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoW3NjaGVtYUlkXSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgaW5uZXJCYXNlSWQgPSBhZGRSZWYuY2FsbCh0aGlzLCBzY2hbc2NoZW1hSWRdKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRhbmNob3IpO1xuICAgICAgICBhZGRBbmNob3IuY2FsbCh0aGlzLCBzY2guJGR5bmFtaWNBbmNob3IpO1xuICAgICAgICBiYXNlSWRzW2pzb25QdHJdID0gaW5uZXJCYXNlSWQ7XG4gICAgICAgIGZ1bmN0aW9uIGFkZFJlZihyZWYpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgICAgIGNvbnN0IF9yZXNvbHZlID0gdGhpcy5vcHRzLnVyaVJlc29sdmVyLnJlc29sdmU7XG4gICAgICAgICAgICByZWYgPSBub3JtYWxpemVJZChpbm5lckJhc2VJZCA/IF9yZXNvbHZlKGlubmVyQmFzZUlkLCByZWYpIDogcmVmKTtcbiAgICAgICAgICAgIGlmIChzY2hlbWFSZWZzLmhhcyhyZWYpKVxuICAgICAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgICAgICAgICBzY2hlbWFSZWZzLmFkZChyZWYpO1xuICAgICAgICAgICAgbGV0IHNjaE9yUmVmID0gdGhpcy5yZWZzW3JlZl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgc2NoT3JSZWYgPSB0aGlzLnJlZnNbc2NoT3JSZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIHNjaE9yUmVmLnNjaGVtYSwgcmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZiAhPT0gbm9ybWFsaXplSWQoZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZlswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBbWJpZ3Vvc1JlZihzY2gsIGxvY2FsUmVmc1tyZWZdLCByZWYpO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFJlZnNbcmVmXSA9IHNjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmc1tyZWZdID0gZnVsbFBhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGRBbmNob3IoYW5jaG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFuY2hvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBTkNIT1IudGVzdChhbmNob3IpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW5jaG9yIFwiJHthbmNob3J9XCJgKTtcbiAgICAgICAgICAgICAgICBhZGRSZWYuY2FsbCh0aGlzLCBgIyR7YW5jaG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2FsUmVmcztcbiAgICBmdW5jdGlvbiBjaGVja0FtYmlndW9zUmVmKHNjaDEsIHNjaDIsIHJlZikge1xuICAgICAgICBpZiAoc2NoMiAhPT0gdW5kZWZpbmVkICYmICFlcXVhbChzY2gxLCBzY2gyKSlcbiAgICAgICAgICAgIHRocm93IGFtYmlndW9zKHJlZik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFtYmlndW9zKHJlZikge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGByZWZlcmVuY2UgXCIke3JlZn1cIiByZXNvbHZlcyB0byBtb3JlIHRoYW4gb25lIHNjaGVtYWApO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGdldFNjaGVtYVJlZnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZlLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js": /*!******************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n const groups = {\n number: { type: \"number\", rules: [] },\n string: { type: \"string\", rules: [] },\n array: { type: \"array\", rules: [] },\n object: { type: \"object\", rules: [] },\n };\n return {\n types: { ...groups, integer: true, boolean: true, null: true },\n rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n post: { rules: [] },\n all: {},\n keywords: {},\n };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3J1bGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdCQUFnQixHQUFHLGtCQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxrQkFBa0IsMkJBQTJCO0FBQzdDLGtCQUFrQiwyQkFBMkI7QUFDN0MsaUJBQWlCLDBCQUEwQjtBQUMzQyxrQkFBa0IsMkJBQTJCO0FBQzdDO0FBQ0E7QUFDQSxpQkFBaUIscURBQXFEO0FBQ3RFLGtCQUFrQixXQUFXO0FBQzdCLGdCQUFnQixXQUFXO0FBQzNCLGVBQWU7QUFDZixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3J1bGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSdWxlcyA9IGV4cG9ydHMuaXNKU09OVHlwZSA9IHZvaWQgMDtcbmNvbnN0IF9qc29uVHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIiwgXCJvYmplY3RcIiwgXCJhcnJheVwiXTtcbmNvbnN0IGpzb25UeXBlcyA9IG5ldyBTZXQoX2pzb25UeXBlcyk7XG5mdW5jdGlvbiBpc0pTT05UeXBlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJzdHJpbmdcIiAmJiBqc29uVHlwZXMuaGFzKHgpO1xufVxuZXhwb3J0cy5pc0pTT05UeXBlID0gaXNKU09OVHlwZTtcbmZ1bmN0aW9uIGdldFJ1bGVzKCkge1xuICAgIGNvbnN0IGdyb3VwcyA9IHtcbiAgICAgICAgbnVtYmVyOiB7IHR5cGU6IFwibnVtYmVyXCIsIHJ1bGVzOiBbXSB9LFxuICAgICAgICBzdHJpbmc6IHsgdHlwZTogXCJzdHJpbmdcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFycmF5OiB7IHR5cGU6IFwiYXJyYXlcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIG9iamVjdDogeyB0eXBlOiBcIm9iamVjdFwiLCBydWxlczogW10gfSxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGVzOiB7IC4uLmdyb3VwcywgaW50ZWdlcjogdHJ1ZSwgYm9vbGVhbjogdHJ1ZSwgbnVsbDogdHJ1ZSB9LFxuICAgICAgICBydWxlczogW3sgcnVsZXM6IFtdIH0sIGdyb3Vwcy5udW1iZXIsIGdyb3Vwcy5zdHJpbmcsIGdyb3Vwcy5hcnJheSwgZ3JvdXBzLm9iamVjdF0sXG4gICAgICAgIHBvc3Q6IHsgcnVsZXM6IFtdIH0sXG4gICAgICAgIGFsbDoge30sXG4gICAgICAgIGtleXdvcmRzOiB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRSdWxlcyA9IGdldFJ1bGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVsZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js": /*!*****************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js ***! \*****************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = __webpack_require__(/*! ./codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst code_1 = __webpack_require__(/*! ./codegen/code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n const hash = {};\n for (const item of arr)\n hash[item] = true;\n return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n if (typeof schema == \"boolean\")\n return schema;\n if (Object.keys(schema).length === 0)\n return true;\n checkUnknownRules(it, schema);\n return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n const { opts, self } = it;\n if (!opts.strictSchema)\n return;\n if (typeof schema === \"boolean\")\n return;\n const rules = self.RULES.keywords;\n for (const key in schema) {\n if (!rules[key])\n checkStrictMode(it, `unknown keyword: \"${key}\"`);\n }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (rules[key])\n return true;\n return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (key !== \"$ref\" && RULES.all[key])\n return true;\n return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\")\n return schema;\n if (typeof schema == \"string\")\n return (0, codegen_1._) `${schema}`;\n }\n return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n if (typeof str == \"number\")\n return `${str}`;\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n if (Array.isArray(xs)) {\n for (const x of xs)\n f(x);\n }\n else {\n f(xs);\n }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n return (gen, from, to, toName) => {\n const res = to === undefined\n ? from\n : to instanceof codegen_1.Name\n ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof codegen_1.Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to);\n return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n };\n}\nexports.mergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n }),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true);\n }\n else {\n gen.assign(to, (0, codegen_1._) `${to} || {}`);\n setEvaluated(gen, to, from);\n }\n }),\n mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n if (ps === true)\n return gen.var(\"props\", true);\n const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n if (ps !== undefined)\n setEvaluated(gen, props, ps);\n return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n Type[Type[\"Num\"] = 0] = \"Num\";\n Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type || (exports.Type = Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n // let path\n if (dataProp instanceof codegen_1.Name) {\n const isNumber = dataPropType === Type.Num;\n return jsPropertySyntax\n ? isNumber\n ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? (0, codegen_1._) `\"/\" + ${dataProp}`\n : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n if (!mode)\n return;\n msg = `strict mode: ${msg}`;\n if (mode === true)\n throw new Error(msg);\n it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3V0aWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUJBQXVCLEdBQUcsb0JBQW9CLEdBQUcsWUFBWSxHQUFHLGVBQWUsR0FBRyxvQkFBb0IsR0FBRyw0QkFBNEIsR0FBRyxzQkFBc0IsR0FBRyxnQkFBZ0IsR0FBRywyQkFBMkIsR0FBRyx5QkFBeUIsR0FBRyxzQkFBc0IsR0FBRyx3QkFBd0IsR0FBRyxzQkFBc0IsR0FBRyw0QkFBNEIsR0FBRyxzQkFBc0IsR0FBRyx5QkFBeUIsR0FBRyx5QkFBeUIsR0FBRyxjQUFjO0FBQ3piLGtCQUFrQixtQkFBTyxDQUFDLHFIQUFXO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyx5SEFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLFlBQVksYUFBYTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxJQUFJO0FBQ3pEO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCLDBCQUEwQiwwQkFBMEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsT0FBTztBQUM5QztBQUNBLCtCQUErQixhQUFhLEVBQUUsV0FBVyxFQUFFLG9DQUFvQztBQUMvRjtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxrQkFBa0IsSUFBSTtBQUN0QjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsOEJBQThCLHFEQUFxRDtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0Esa0VBQWtFLElBQUksY0FBYyxNQUFNO0FBQzFGLHVDQUF1QyxNQUFNLGdGQUFnRixJQUFJLEtBQUssMENBQTBDLEdBQUcsSUFBSSxLQUFLO0FBQzVMLFNBQVM7QUFDVCxtRUFBbUUsSUFBSTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxJQUFJLEtBQUs7QUFDNUQ7QUFDQTtBQUNBLFNBQVM7QUFDVCw2REFBNkQsZ0JBQWdCO0FBQzdFO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0VBQWtFLElBQUksY0FBYyxNQUFNLHlEQUF5RCxNQUFNLG9CQUFvQixJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxLQUFLO0FBQzVNLG1FQUFtRSxJQUFJLDJFQUEyRSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxLQUFLO0FBQ2pMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSxrRUFBa0UsTUFBTSxFQUFFLDhCQUE4QjtBQUN4RztBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxXQUFXLFlBQVksWUFBWTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsVUFBVTtBQUN0RCw2Q0FBNkMsVUFBVTtBQUN2RDtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JELDRDQUE0QyxTQUFTLDZDQUE2QztBQUNsRztBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLElBQUk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGVja1N0cmljdE1vZGUgPSBleHBvcnRzLmdldEVycm9yUGF0aCA9IGV4cG9ydHMuVHlwZSA9IGV4cG9ydHMudXNlRnVuYyA9IGV4cG9ydHMuc2V0RXZhbHVhdGVkID0gZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV4cG9ydHMubWVyZ2VFdmFsdWF0ZWQgPSBleHBvcnRzLmVhY2hJdGVtID0gZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSBleHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0J1dFJlZiA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBleHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gZXhwb3J0cy5hbHdheXNWYWxpZFNjaGVtYSA9IGV4cG9ydHMudG9IYXNoID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW4vY29kZVwiKTtcbi8vIFRPRE8gcmVmYWN0b3IgdG8gdXNlIFNldFxuZnVuY3Rpb24gdG9IYXNoKGFycikge1xuICAgIGNvbnN0IGhhc2ggPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKVxuICAgICAgICBoYXNoW2l0ZW1dID0gdHJ1ZTtcbiAgICByZXR1cm4gaGFzaDtcbn1cbmV4cG9ydHMudG9IYXNoID0gdG9IYXNoO1xuZnVuY3Rpb24gYWx3YXlzVmFsaWRTY2hlbWEoaXQsIHNjaGVtYSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIGlmIChPYmplY3Qua2V5cyhzY2hlbWEpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2hlY2tVbmtub3duUnVsZXMoaXQsIHNjaGVtYSk7XG4gICAgcmV0dXJuICFzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIGl0LnNlbGYuUlVMRVMuYWxsKTtcbn1cbmV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBhbHdheXNWYWxpZFNjaGVtYTtcbmZ1bmN0aW9uIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEgPSBpdC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgIGlmICghb3B0cy5zdHJpY3RTY2hlbWEpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlcyA9IHNlbGYuUlVMRVMua2V5d29yZHM7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmICghcnVsZXNba2V5XSlcbiAgICAgICAgICAgIGNoZWNrU3RyaWN0TW9kZShpdCwgYHVua25vd24ga2V5d29yZDogXCIke2tleX1cImApO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tVbmtub3duUnVsZXMgPSBjaGVja1Vua25vd25SdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgcnVsZXMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAocnVsZXNba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXMgPSBzY2hlbWFIYXNSdWxlcztcbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzQnV0UmVmKHNjaGVtYSwgUlVMRVMpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuICFzY2hlbWE7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBpZiAoa2V5ICE9PSBcIiRyZWZcIiAmJiBSVUxFUy5hbGxba2V5XSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBzY2hlbWFIYXNSdWxlc0J1dFJlZjtcbmZ1bmN0aW9uIHNjaGVtYVJlZk9yVmFsKHsgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoIH0sIHNjaGVtYSwga2V5d29yZCwgJGRhdGEpIHtcbiAgICBpZiAoISRkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWF9YDtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWA7XG59XG5leHBvcnRzLnNjaGVtYVJlZk9yVmFsID0gc2NoZW1hUmVmT3JWYWw7XG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICAgIHJldHVybiB1bmVzY2FwZUpzb25Qb2ludGVyKGRlY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cbmV4cG9ydHMudW5lc2NhcGVGcmFnbWVudCA9IHVuZXNjYXBlRnJhZ21lbnQ7XG5mdW5jdGlvbiBlc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVzY2FwZUpzb25Qb2ludGVyKHN0cikpO1xufVxuZXhwb3J0cy5lc2NhcGVGcmFnbWVudCA9IGVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIGAke3N0cn1gO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcLy9nLCBcIn4xXCIpO1xufVxuZXhwb3J0cy5lc2NhcGVKc29uUG9pbnRlciA9IGVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34xL2csIFwiL1wiKS5yZXBsYWNlKC9+MC9nLCBcIn5cIik7XG59XG5leHBvcnRzLnVuZXNjYXBlSnNvblBvaW50ZXIgPSB1bmVzY2FwZUpzb25Qb2ludGVyO1xuZnVuY3Rpb24gZWFjaEl0ZW0oeHMsIGYpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB4IG9mIHhzKVxuICAgICAgICAgICAgZih4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGYoeHMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZWFjaEl0ZW0gPSBlYWNoSXRlbTtcbmZ1bmN0aW9uIG1ha2VNZXJnZUV2YWx1YXRlZCh7IG1lcmdlTmFtZXMsIG1lcmdlVG9OYW1lLCBtZXJnZVZhbHVlcywgcmVzdWx0VG9OYW1lLCB9KSB7XG4gICAgcmV0dXJuIChnZW4sIGZyb20sIHRvLCB0b05hbWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVzID0gdG8gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBmcm9tXG4gICAgICAgICAgICA6IHRvIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWVcbiAgICAgICAgICAgICAgICA/IChmcm9tIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyBtZXJnZU5hbWVzKGdlbiwgZnJvbSwgdG8pIDogbWVyZ2VUb05hbWUoZ2VuLCBmcm9tLCB0byksIHRvKVxuICAgICAgICAgICAgICAgIDogZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgICAgID8gKG1lcmdlVG9OYW1lKGdlbiwgdG8sIGZyb20pLCBmcm9tKVxuICAgICAgICAgICAgICAgICAgICA6IG1lcmdlVmFsdWVzKGZyb20sIHRvKTtcbiAgICAgICAgcmV0dXJuIHRvTmFtZSA9PT0gY29kZWdlbl8xLk5hbWUgJiYgIShyZXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkgPyByZXN1bHRUb05hbWUoZ2VuLCByZXMpIDogcmVzO1xuICAgIH07XG59XG5leHBvcnRzLm1lcmdlRXZhbHVhdGVkID0ge1xuICAgIHByb3BzOiBtYWtlTWVyZ2VFdmFsdWF0ZWQoe1xuICAgICAgICBtZXJnZU5hbWVzOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlICYmICR7ZnJvbX0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgdHJ1ZSksICgpID0+IGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCkuY29kZSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QuYXNzaWduKCR7dG99LCAke2Zyb219KWApKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZyb20gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99IHx8IHt9YCk7XG4gICAgICAgICAgICAgICAgc2V0RXZhbHVhdGVkKGdlbiwgdG8sIGZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogeyAuLi5mcm9tLCAuLi50byB9KSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiBldmFsdWF0ZWRQcm9wc1RvTmFtZSxcbiAgICB9KSxcbiAgICBpdGVtczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke2Zyb219ID09PSB0cnVlID8gdHJ1ZSA6ICR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VUb05hbWU6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWVgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCBmcm9tID09PSB0cnVlID8gdHJ1ZSA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ID4gJHtmcm9tfSA/ICR7dG99IDogJHtmcm9tfWApKSxcbiAgICAgICAgbWVyZ2VWYWx1ZXM6IChmcm9tLCB0bykgPT4gKGZyb20gPT09IHRydWUgPyB0cnVlIDogTWF0aC5tYXgoZnJvbSwgdG8pKSxcbiAgICAgICAgcmVzdWx0VG9OYW1lOiAoZ2VuLCBpdGVtcykgPT4gZ2VuLnZhcihcIml0ZW1zXCIsIGl0ZW1zKSxcbiAgICB9KSxcbn07XG5mdW5jdGlvbiBldmFsdWF0ZWRQcm9wc1RvTmFtZShnZW4sIHBzKSB7XG4gICAgaWYgKHBzID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gZ2VuLnZhcihcInByb3BzXCIsIHRydWUpO1xuICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgaWYgKHBzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcyk7XG4gICAgcmV0dXJuIHByb3BzO1xufVxuZXhwb3J0cy5ldmFsdWF0ZWRQcm9wc1RvTmFtZSA9IGV2YWx1YXRlZFByb3BzVG9OYW1lO1xuZnVuY3Rpb24gc2V0RXZhbHVhdGVkKGdlbiwgcHJvcHMsIHBzKSB7XG4gICAgT2JqZWN0LmtleXMocHMpLmZvckVhY2goKHApID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wc30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHApfWAsIHRydWUpKTtcbn1cbmV4cG9ydHMuc2V0RXZhbHVhdGVkID0gc2V0RXZhbHVhdGVkO1xuY29uc3Qgc25pcHBldHMgPSB7fTtcbmZ1bmN0aW9uIHVzZUZ1bmMoZ2VuLCBmKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIHJlZjogZixcbiAgICAgICAgY29kZTogc25pcHBldHNbZi5jb2RlXSB8fCAoc25pcHBldHNbZi5jb2RlXSA9IG5ldyBjb2RlXzEuX0NvZGUoZi5jb2RlKSksXG4gICAgfSk7XG59XG5leHBvcnRzLnVzZUZ1bmMgPSB1c2VGdW5jO1xudmFyIFR5cGU7XG4oZnVuY3Rpb24gKFR5cGUpIHtcbiAgICBUeXBlW1R5cGVbXCJOdW1cIl0gPSAwXSA9IFwiTnVtXCI7XG4gICAgVHlwZVtUeXBlW1wiU3RyXCJdID0gMV0gPSBcIlN0clwiO1xufSkoVHlwZSB8fCAoZXhwb3J0cy5UeXBlID0gVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBnZXRFcnJvclBhdGgoZGF0YVByb3AsIGRhdGFQcm9wVHlwZSwganNQcm9wZXJ0eVN5bnRheCkge1xuICAgIC8vIGxldCBwYXRoXG4gICAgaWYgKGRhdGFQcm9wIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpIHtcbiAgICAgICAgY29uc3QgaXNOdW1iZXIgPSBkYXRhUHJvcFR5cGUgPT09IFR5cGUuTnVtO1xuICAgICAgICByZXR1cm4ganNQcm9wZXJ0eVN5bnRheFxuICAgICAgICAgICAgPyBpc051bWJlclxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgXCJbXCIgKyAke2RhdGFQcm9wfSArIFwiXVwiYFxuICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgXCJbJ1wiICsgJHtkYXRhUHJvcH0gKyBcIiddXCJgXG4gICAgICAgICAgICA6IGlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyAoMCwgY29kZWdlbl8xLl8pIGBcIi9cIiArICR7ZGF0YVByb3B9YFxuICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgXCIvXCIgKyAke2RhdGFQcm9wfS5yZXBsYWNlKC9+L2csIFwifjBcIikucmVwbGFjZSgvXFxcXC8vZywgXCJ+MVwiKWA7IC8vIFRPRE8gbWF5YmUgdXNlIGdsb2JhbCBlc2NhcGVQb2ludGVyXG4gICAgfVxuICAgIHJldHVybiBqc1Byb3BlcnR5U3ludGF4ID8gKDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApLnRvU3RyaW5nKCkgOiBcIi9cIiArIGVzY2FwZUpzb25Qb2ludGVyKGRhdGFQcm9wKTtcbn1cbmV4cG9ydHMuZ2V0RXJyb3JQYXRoID0gZ2V0RXJyb3JQYXRoO1xuZnVuY3Rpb24gY2hlY2tTdHJpY3RNb2RlKGl0LCBtc2csIG1vZGUgPSBpdC5vcHRzLnN0cmljdFNjaGVtYSkge1xuICAgIGlmICghbW9kZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIG1zZyA9IGBzdHJpY3QgbW9kZTogJHttc2d9YDtcbiAgICBpZiAobW9kZSA9PT0gdHJ1ZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgaXQuc2VsZi5sb2dnZXIud2Fybihtc2cpO1xufVxuZXhwb3J0cy5jaGVja1N0cmljdE1vZGUgPSBjaGVja1N0cmljdE1vZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js": /*!***********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js ***! \***********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n const group = self.RULES.types[type];\n return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n var _a;\n return (schema[rule.keyword] !== undefined ||\n ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QscUJBQXFCLEdBQUcsc0JBQXNCLEdBQUcsNkJBQTZCO0FBQzlFLGlDQUFpQyxjQUFjO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNob3VsZFVzZVJ1bGUgPSBleHBvcnRzLnNob3VsZFVzZUdyb3VwID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSB2b2lkIDA7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlc0ZvclR5cGUoeyBzY2hlbWEsIHNlbGYgfSwgdHlwZSkge1xuICAgIGNvbnN0IGdyb3VwID0gc2VsZi5SVUxFUy50eXBlc1t0eXBlXTtcbiAgICByZXR1cm4gZ3JvdXAgJiYgZ3JvdXAgIT09IHRydWUgJiYgc2hvdWxkVXNlR3JvdXAoc2NoZW1hLCBncm91cCk7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSA9IHNjaGVtYUhhc1J1bGVzRm9yVHlwZTtcbmZ1bmN0aW9uIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApIHtcbiAgICByZXR1cm4gZ3JvdXAucnVsZXMuc29tZSgocnVsZSkgPT4gc2hvdWxkVXNlUnVsZShzY2hlbWEsIHJ1bGUpKTtcbn1cbmV4cG9ydHMuc2hvdWxkVXNlR3JvdXAgPSBzaG91bGRVc2VHcm91cDtcbmZ1bmN0aW9uIHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoc2NoZW1hW3J1bGUua2V5d29yZF0gIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAoKF9hID0gcnVsZS5kZWZpbml0aW9uLmltcGxlbWVudHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zb21lKChrd2QpID0+IHNjaGVtYVtrd2RdICE9PSB1bmRlZmluZWQpKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZVJ1bGUgPSBzaG91bGRVc2VSdWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwbGljYWJpbGl0eS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js": /*!********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js ***! \********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = __webpack_require__(/*! ../errors */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js\");\nconst codegen_1 = __webpack_require__(/*! ../codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst names_1 = __webpack_require__(/*! ../names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nconst boolError = {\n message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n const { gen, schema, validateName } = it;\n if (schema === false) {\n falseSchemaError(it, false);\n }\n else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(names_1.default.data);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n gen.return(true);\n }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n const { gen, schema } = it;\n if (schema === false) {\n gen.var(valid, false); // TODO var\n falseSchemaError(it);\n }\n else {\n gen.var(valid, true); // TODO var\n }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n const { gen, data } = it;\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n };\n (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2Jvb2xTY2hlbWEuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QseUJBQXlCLEdBQUcsNEJBQTRCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLDhHQUFXO0FBQ3BDLGtCQUFrQixtQkFBTyxDQUFDLHNIQUFZO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLDRHQUFVO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw0QkFBNEI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsYUFBYTtBQUNwRDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSxZQUFZLGNBQWM7QUFDMUI7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvYm9vbFNjaGVtYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBleHBvcnRzLnRvcEJvb2xPckVtcHR5U2NoZW1hID0gdm9pZCAwO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgYm9vbEVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwiYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcIixcbn07XG5mdW5jdGlvbiB0b3BCb29sT3JFbXB0eVNjaGVtYShpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmVycm9yc2AsIG51bGwpO1xuICAgICAgICBnZW4ucmV0dXJuKHRydWUpO1xuICAgIH1cbn1cbmV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB0b3BCb29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGJvb2xPckVtcHR5U2NoZW1hKGl0LCB2YWxpZCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIGZhbHNlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZmFsc2VTY2hlbWFFcnJvcihpdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICB9XG59XG5leHBvcnRzLmJvb2xPckVtcHR5U2NoZW1hID0gYm9vbE9yRW1wdHlTY2hlbWE7XG5mdW5jdGlvbiBmYWxzZVNjaGVtYUVycm9yKGl0LCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhIH0gPSBpdDtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgb3RoZXIgaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciBub24ta2V5d29yZCB2YWxpZGF0aW9uIGVycm9ycy4uLlxuICAgIGNvbnN0IGN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcImZhbHNlIHNjaGVtYVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IGZhbHNlLFxuICAgICAgICBzY2hlbWFDb2RlOiBmYWxzZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IGZhbHNlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCBib29sRXJyb3IsIHVuZGVmaW5lZCwgb3ZlcnJpZGVBbGxFcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbFNjaGVtYS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js": /*!******************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js ***! \******************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = __webpack_require__(/*! ../rules */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js\");\nconst applicability_1 = __webpack_require__(/*! ./applicability */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js\");\nconst errors_1 = __webpack_require__(/*! ../errors */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js\");\nconst codegen_1 = __webpack_require__(/*! ../codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nvar DataType;\n(function (DataType) {\n DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType || (exports.DataType = DataType = {}));\nfunction getSchemaTypes(schema) {\n const types = getJSONTypes(schema.type);\n const hasNull = types.includes(\"null\");\n if (hasNull) {\n if (schema.nullable === false)\n throw new Error(\"type: null contradicts nullable: false\");\n }\n else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"');\n }\n if (schema.nullable === true)\n types.push(\"null\");\n }\n return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction getJSONTypes(ts) {\n const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n if (types.every(rules_1.isJSONType))\n return types;\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n const { gen, data, opts } = it;\n const coerceTo = coerceToTypes(types, opts.coerceTypes);\n const checkTypes = types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n gen.if(wrongType, () => {\n if (coerceTo.length)\n coerceData(it, types, coerceTo);\n else\n reportTypeError(it);\n });\n }\n return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : [];\n}\nfunction coerceData(it, types, coerceTo) {\n const { gen, data, opts } = it;\n const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n if (opts.coerceTypes === \"array\") {\n gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n .assign(data, (0, codegen_1._) `${data}[0]`)\n .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n }\n gen.if((0, codegen_1._) `${coerced} !== undefined`);\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t);\n }\n }\n gen.else();\n reportTypeError(it);\n gen.endIf();\n gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n gen.assign(data, coerced);\n assignParentData(it, coerced);\n });\n function coerceSpecificType(t) {\n switch (t) {\n case \"string\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n .elseIf((0, codegen_1._) `${data} === null`)\n .assign(coerced, (0, codegen_1._) `\"\"`);\n return;\n case \"number\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"integer\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"boolean\":\n gen\n .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true);\n return;\n case \"null\":\n gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n gen.assign(coerced, null);\n return;\n case \"array\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`)\n .assign(coerced, (0, codegen_1._) `[${data}]`);\n }\n }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n // TODO use gen.property\n gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n let cond;\n switch (dataType) {\n case \"null\":\n return (0, codegen_1._) `${data} ${EQ} null`;\n case \"array\":\n cond = (0, codegen_1._) `Array.isArray(${data})`;\n break;\n case \"object\":\n cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n break;\n case \"integer\":\n cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n break;\n case \"number\":\n cond = numCond();\n break;\n default:\n return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n }\n return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n function numCond(_cond = codegen_1.nil) {\n return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct);\n }\n let cond;\n const types = (0, util_1.toHash)(dataTypes);\n if (types.array && types.object) {\n const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n delete types.null;\n delete types.array;\n delete types.object;\n }\n else {\n cond = codegen_1.nil;\n }\n if (types.number)\n delete types.integer;\n for (const t in types)\n cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n message: ({ schema }) => `must be ${schema}`,\n params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n const cxt = getTypeErrorContext(it);\n (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n const { gen, data, schema } = it;\n const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n };\n}\n//# sourceMappingURL=dataType.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RhdGFUeXBlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHVCQUF1QixHQUFHLHNCQUFzQixHQUFHLHFCQUFxQixHQUFHLDhCQUE4QixHQUFHLG9CQUFvQixHQUFHLHNCQUFzQixHQUFHLGdCQUFnQjtBQUM1SyxnQkFBZ0IsbUJBQU8sQ0FBQyw0R0FBVTtBQUNsQyx3QkFBd0IsbUJBQU8sQ0FBQyxvSUFBaUI7QUFDakQsaUJBQWlCLG1CQUFPLENBQUMsOEdBQVc7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsc0hBQVk7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLDBHQUFTO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxlQUFlLGdCQUFnQixnQkFBZ0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QixvRUFBb0UsS0FBSztBQUN6RTtBQUNBO0FBQ0EsbUNBQW1DLFVBQVUsK0JBQStCLEtBQUssT0FBTyxLQUFLO0FBQzdGLDhDQUE4QyxLQUFLO0FBQ25ELHlEQUF5RCxLQUFLO0FBQzlEO0FBQ0E7QUFDQSwrQkFBK0IsU0FBUztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFNBQVM7QUFDeEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxVQUFVLGlCQUFpQixVQUFVO0FBQ3JGLDhEQUE4RCxLQUFLO0FBQ25FLGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFVBQVUsa0JBQWtCLE1BQU07QUFDbEYsb0JBQW9CLFVBQVUsaUJBQWlCLE1BQU0sS0FBSyxNQUFNLE1BQU0sS0FBSztBQUMzRSwwREFBMEQsS0FBSztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsVUFBVSxtQkFBbUIsTUFBTTtBQUNuRixvQkFBb0IsVUFBVSxrQkFBa0IsTUFBTSxLQUFLLE1BQU0sTUFBTSxNQUFNLE9BQU8sTUFBTTtBQUMxRiwwREFBMEQsS0FBSztBQUMvRDtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsTUFBTSxpQkFBaUIsTUFBTSxXQUFXLE1BQU07QUFDOUY7QUFDQSxnREFBZ0QsTUFBTSxnQkFBZ0IsTUFBTTtBQUM1RTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsTUFBTSxZQUFZLE1BQU0sV0FBVyxNQUFNO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELFVBQVUsa0JBQWtCLFVBQVU7QUFDdEYsbUJBQW1CLFVBQVUsbUJBQW1CLE1BQU07QUFDdEQsMERBQTBELEtBQUs7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFDQUFxQztBQUNqRTtBQUNBLCtCQUErQixZQUFZLHFEQUFxRCxXQUFXLEdBQUcsbUJBQW1CO0FBQ2pJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxNQUFNLEVBQUUsSUFBSTtBQUNuRDtBQUNBLHFEQUFxRCxLQUFLO0FBQzFEO0FBQ0E7QUFDQSx1Q0FBdUMsTUFBTSxZQUFZLE1BQU0sZ0NBQWdDLEtBQUs7QUFDcEc7QUFDQTtBQUNBLGlEQUFpRCxNQUFNLGlCQUFpQixLQUFLO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxNQUFNLCtEQUErRCxLQUFLO0FBQ3ZJO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsTUFBTTtBQUN4RCwwREFBMEQsTUFBTSxLQUFLLE9BQU87QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxnQkFBZ0IsUUFBUSxnQkFBZ0IsT0FBTztBQUMvQyxlQUFlLHFCQUFxQixvREFBb0QsUUFBUSxRQUFRLHVCQUF1QixRQUFRLGFBQWE7QUFDcEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RhdGFUeXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXBvcnRUeXBlRXJyb3IgPSBleHBvcnRzLmNoZWNrRGF0YVR5cGVzID0gZXhwb3J0cy5jaGVja0RhdGFUeXBlID0gZXhwb3J0cy5jb2VyY2VBbmRDaGVja0RhdGFUeXBlID0gZXhwb3J0cy5nZXRKU09OVHlwZXMgPSBleHBvcnRzLmdldFNjaGVtYVR5cGVzID0gZXhwb3J0cy5EYXRhVHlwZSA9IHZvaWQgMDtcbmNvbnN0IHJ1bGVzXzEgPSByZXF1aXJlKFwiLi4vcnVsZXNcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JzXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbnZhciBEYXRhVHlwZTtcbihmdW5jdGlvbiAoRGF0YVR5cGUpIHtcbiAgICBEYXRhVHlwZVtEYXRhVHlwZVtcIkNvcnJlY3RcIl0gPSAwXSA9IFwiQ29ycmVjdFwiO1xuICAgIERhdGFUeXBlW0RhdGFUeXBlW1wiV3JvbmdcIl0gPSAxXSA9IFwiV3JvbmdcIjtcbn0pKERhdGFUeXBlIHx8IChleHBvcnRzLkRhdGFUeXBlID0gRGF0YVR5cGUgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0U2NoZW1hVHlwZXMoc2NoZW1hKSB7XG4gICAgY29uc3QgdHlwZXMgPSBnZXRKU09OVHlwZXMoc2NoZW1hLnR5cGUpO1xuICAgIGNvbnN0IGhhc051bGwgPSB0eXBlcy5pbmNsdWRlcyhcIm51bGxcIik7XG4gICAgaWYgKGhhc051bGwpIHtcbiAgICAgICAgaWYgKHNjaGVtYS5udWxsYWJsZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlOiBudWxsIGNvbnRyYWRpY3RzIG51bGxhYmxlOiBmYWxzZVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghdHlwZXMubGVuZ3RoICYmIHNjaGVtYS5udWxsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibnVsbGFibGVcIiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IFwidHlwZVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5udWxsYWJsZSA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHR5cGVzLnB1c2goXCJudWxsXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZXM7XG59XG5leHBvcnRzLmdldFNjaGVtYVR5cGVzID0gZ2V0U2NoZW1hVHlwZXM7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZHVuZGFudC10eXBlLWNvbnN0aXR1ZW50c1xuZnVuY3Rpb24gZ2V0SlNPTlR5cGVzKHRzKSB7XG4gICAgY29uc3QgdHlwZXMgPSBBcnJheS5pc0FycmF5KHRzKSA/IHRzIDogdHMgPyBbdHNdIDogW107XG4gICAgaWYgKHR5cGVzLmV2ZXJ5KHJ1bGVzXzEuaXNKU09OVHlwZSkpXG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG11c3QgYmUgSlNPTlR5cGUgb3IgSlNPTlR5cGVbXTogXCIgKyB0eXBlcy5qb2luKFwiLFwiKSk7XG59XG5leHBvcnRzLmdldEpTT05UeXBlcyA9IGdldEpTT05UeXBlcztcbmZ1bmN0aW9uIGNvZXJjZUFuZENoZWNrRGF0YVR5cGUoaXQsIHR5cGVzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IGNvZXJjZVRvID0gY29lcmNlVG9UeXBlcyh0eXBlcywgb3B0cy5jb2VyY2VUeXBlcyk7XG4gICAgY29uc3QgY2hlY2tUeXBlcyA9IHR5cGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgIShjb2VyY2VUby5sZW5ndGggPT09IDAgJiYgdHlwZXMubGVuZ3RoID09PSAxICYmICgwLCBhcHBsaWNhYmlsaXR5XzEuc2NoZW1hSGFzUnVsZXNGb3JUeXBlKShpdCwgdHlwZXNbMF0pKTtcbiAgICBpZiAoY2hlY2tUeXBlcykge1xuICAgICAgICBjb25zdCB3cm9uZ1R5cGUgPSBjaGVja0RhdGFUeXBlcyh0eXBlcywgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzLCBEYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgIGdlbi5pZih3cm9uZ1R5cGUsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2VyY2VUby5sZW5ndGgpXG4gICAgICAgICAgICAgICAgY29lcmNlRGF0YShpdCwgdHlwZXMsIGNvZXJjZVRvKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrVHlwZXM7XG59XG5leHBvcnRzLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUgPSBjb2VyY2VBbmRDaGVja0RhdGFUeXBlO1xuY29uc3QgQ09FUkNJQkxFID0gbmV3IFNldChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJpbnRlZ2VyXCIsIFwiYm9vbGVhblwiLCBcIm51bGxcIl0pO1xuZnVuY3Rpb24gY29lcmNlVG9UeXBlcyh0eXBlcywgY29lcmNlVHlwZXMpIHtcbiAgICByZXR1cm4gY29lcmNlVHlwZXNcbiAgICAgICAgPyB0eXBlcy5maWx0ZXIoKHQpID0+IENPRVJDSUJMRS5oYXModCkgfHwgKGNvZXJjZVR5cGVzID09PSBcImFycmF5XCIgJiYgdCA9PT0gXCJhcnJheVwiKSlcbiAgICAgICAgOiBbXTtcbn1cbmZ1bmN0aW9uIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGdlbi5sZXQoXCJkYXRhVHlwZVwiLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApO1xuICAgIGNvbnN0IGNvZXJjZWQgPSBnZW4ubGV0KFwiY29lcmNlZFwiLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICBpZiAob3B0cy5jb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KCR7ZGF0YX0pICYmICR7ZGF0YX0ubGVuZ3RoID09IDFgLCAoKSA9PiBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfVswXWApXG4gICAgICAgICAgICAuYXNzaWduKGRhdGFUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfWApXG4gICAgICAgICAgICAuaWYoY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycyksICgpID0+IGdlbi5hc3NpZ24oY29lcmNlZCwgZGF0YSkpKTtcbiAgICB9XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGApO1xuICAgIGZvciAoY29uc3QgdCBvZiBjb2VyY2VUbykge1xuICAgICAgICBpZiAoQ09FUkNJQkxFLmhhcyh0KSB8fCAodCA9PT0gXCJhcnJheVwiICYmIG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikpIHtcbiAgICAgICAgICAgIGNvZXJjZVNwZWNpZmljVHlwZSh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZW4uZWxzZSgpO1xuICAgIHJlcG9ydFR5cGVFcnJvcihpdCk7XG4gICAgZ2VuLmVuZElmKCk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y29lcmNlZH0gIT09IHVuZGVmaW5lZGAsICgpID0+IHtcbiAgICAgICAgZ2VuLmFzc2lnbihkYXRhLCBjb2VyY2VkKTtcbiAgICAgICAgYXNzaWduUGFyZW50RGF0YShpdCwgY29lcmNlZCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gY29lcmNlU3BlY2lmaWNUeXBlKHQpIHtcbiAgICAgICAgc3dpdGNoICh0KSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJudW1iZXJcIiB8fCAke2RhdGFUeXBlfSA9PSBcImJvb2xlYW5cImApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcIiArICR7ZGF0YX1gKVxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbFxuICAgICAgICAgICAgICB8fCAoJHtkYXRhVHlwZX0gPT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0pYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09PSBcInN0cmluZ1wiICYmICR7ZGF0YX0gJiYgJHtkYXRhfSA9PSArJHtkYXRhfSAmJiAhKCR7ZGF0YX0gJSAxKSlgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYCske2RhdGF9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcImZhbHNlXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcInRydWVcIiB8fCAke2RhdGF9ID09PSAxYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICAgIGdlbi5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJcIiB8fCAke2RhdGF9ID09PSAwIHx8ICR7ZGF0YX0gPT09IGZhbHNlYCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihjb2VyY2VkLCBudWxsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiB8fCAke2RhdGFUeXBlfSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICB8fCAke2RhdGFUeXBlfSA9PT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZGF0YX1dYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhc3NpZ25QYXJlbnREYXRhKHsgZ2VuLCBwYXJlbnREYXRhLCBwYXJlbnREYXRhUHJvcGVydHkgfSwgZXhwcikge1xuICAgIC8vIFRPRE8gdXNlIGdlbi5wcm9wZXJ0eVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cGFyZW50RGF0YX1bJHtwYXJlbnREYXRhUHJvcGVydHl9XWAsIGV4cHIpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QgPSBEYXRhVHlwZS5Db3JyZWN0KSB7XG4gICAgY29uc3QgRVEgPSBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29kZWdlbl8xLm9wZXJhdG9ycy5FUSA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTkVRO1xuICAgIGxldCBjb25kO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7RVF9IG51bGxgO1xuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAmJiB0eXBlb2YgJHtkYXRhfSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKDAsIGNvZGVnZW5fMS5fKSBgISgke2RhdGF9ICUgMSkgJiYgIWlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgY29uZCA9IG51bUNvbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ICR7RVF9ICR7ZGF0YVR5cGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGNvcnJlY3QgPT09IERhdGFUeXBlLkNvcnJlY3QgPyBjb25kIDogKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmQpO1xuICAgIGZ1bmN0aW9uIG51bUNvbmQoX2NvbmQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLmFuZCkoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gPT0gXCJudW1iZXJcImAsIF9jb25kLCBzdHJpY3ROdW1zID8gKDAsIGNvZGVnZW5fMS5fKSBgaXNGaW5pdGUoJHtkYXRhfSlgIDogY29kZWdlbl8xLm5pbCk7XG4gICAgfVxufVxuZXhwb3J0cy5jaGVja0RhdGFUeXBlID0gY2hlY2tEYXRhVHlwZTtcbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGVzKGRhdGFUeXBlcywgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCkge1xuICAgIGlmIChkYXRhVHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlc1swXSwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCk7XG4gICAgfVxuICAgIGxldCBjb25kO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIHV0aWxfMS50b0hhc2gpKGRhdGFUeXBlcyk7XG4gICAgaWYgKHR5cGVzLmFycmF5ICYmIHR5cGVzLm9iamVjdCkge1xuICAgICAgICBjb25zdCBub3RPYmogPSAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAhPSBcIm9iamVjdFwiYDtcbiAgICAgICAgY29uZCA9IHR5cGVzLm51bGwgPyBub3RPYmogOiAoMCwgY29kZWdlbl8xLl8pIGAhJHtkYXRhfSB8fCAke25vdE9ian1gO1xuICAgICAgICBkZWxldGUgdHlwZXMubnVsbDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLmFycmF5O1xuICAgICAgICBkZWxldGUgdHlwZXMub2JqZWN0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uZCA9IGNvZGVnZW5fMS5uaWw7XG4gICAgfVxuICAgIGlmICh0eXBlcy5udW1iZXIpXG4gICAgICAgIGRlbGV0ZSB0eXBlcy5pbnRlZ2VyO1xuICAgIGZvciAoY29uc3QgdCBpbiB0eXBlcylcbiAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuYW5kKShjb25kLCBjaGVja0RhdGFUeXBlKHQsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpKTtcbiAgICByZXR1cm4gY29uZDtcbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZXMgPSBjaGVja0RhdGFUeXBlcztcbmNvbnN0IHR5cGVFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWEgfSkgPT4gYG11c3QgYmUgJHtzY2hlbWF9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYSwgc2NoZW1hVmFsdWUgfSkgPT4gdHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiID8gKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hfX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge3R5cGU6ICR7c2NoZW1hVmFsdWV9fWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0VHlwZUVycm9yKGl0KSB7XG4gICAgY29uc3QgY3h0ID0gZ2V0VHlwZUVycm9yQ29udGV4dChpdCk7XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIHR5cGVFcnJvcik7XG59XG5leHBvcnRzLnJlcG9ydFR5cGVFcnJvciA9IHJlcG9ydFR5cGVFcnJvcjtcbmZ1bmN0aW9uIGdldFR5cGVFcnJvckNvbnRleHQoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgc2NoZW1hIH0gPSBpdDtcbiAgICBjb25zdCBzY2hlbWFDb2RlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHNjaGVtYSwgXCJ0eXBlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdlbixcbiAgICAgICAga2V5d29yZDogXCJ0eXBlXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hLnR5cGUsXG4gICAgICAgIHNjaGVtYUNvZGUsXG4gICAgICAgIHNjaGVtYVZhbHVlOiBzY2hlbWFDb2RlLFxuICAgICAgICBwYXJlbnRTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgcGFyYW1zOiB7fSxcbiAgICAgICAgaXQsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGFUeXBlLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js": /*!******************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js ***! \******************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.assignDefaults = void 0;\nconst codegen_1 = __webpack_require__(/*! ../codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nfunction assignDefaults(it, ty) {\n const { properties, items } = it.schema;\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default);\n }\n }\n else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i) => assignDefault(it, i, sch.default));\n }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n const { gen, compositeRule, data, opts } = it;\n if (defaultValue === undefined)\n return;\n const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n if (compositeRule) {\n (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n return;\n }\n let condition = (0, codegen_1._) `${childData} === undefined`;\n if (opts.useDefaults === \"empty\") {\n condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RlZmF1bHRzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHNCQUFzQjtBQUN0QixrQkFBa0IsbUJBQU8sQ0FBQyxzSEFBWTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsMEdBQVM7QUFDaEM7QUFDQSxZQUFZLG9CQUFvQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxZQUFZLGlDQUFpQztBQUM3QztBQUNBO0FBQ0EsMENBQTBDLEtBQUssRUFBRSxpQ0FBaUM7QUFDbEY7QUFDQSxtRUFBbUUsVUFBVTtBQUM3RTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQSx3Q0FBd0MsV0FBVyxLQUFLLFdBQVcsY0FBYyxXQUFXO0FBQzVGO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCLDhDQUE4QyxXQUFXLGNBQWMsV0FBVztBQUNsRiwwQ0FBMEMsV0FBVyxJQUFJLHVDQUF1QztBQUNoRztBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGVmYXVsdHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmZ1bmN0aW9uIGFzc2lnbkRlZmF1bHRzKGl0LCB0eSkge1xuICAgIGNvbnN0IHsgcHJvcGVydGllcywgaXRlbXMgfSA9IGl0LnNjaGVtYTtcbiAgICBpZiAodHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBhc3NpZ25EZWZhdWx0KGl0LCBrZXksIHByb3BlcnRpZXNba2V5XS5kZWZhdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eSA9PT0gXCJhcnJheVwiICYmIEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKHNjaCwgaSkgPT4gYXNzaWduRGVmYXVsdChpdCwgaSwgc2NoLmRlZmF1bHQpKTtcbiAgICB9XG59XG5leHBvcnRzLmFzc2lnbkRlZmF1bHRzID0gYXNzaWduRGVmYXVsdHM7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0KGl0LCBwcm9wLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgY2hpbGREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcCl9YDtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBkZWZhdWx0IGlzIGlnbm9yZWQgZm9yOiAke2NoaWxkRGF0YX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgO1xuICAgIGlmIChvcHRzLnVzZURlZmF1bHRzID09PSBcImVtcHR5XCIpIHtcbiAgICAgICAgY29uZGl0aW9uID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kaXRpb259IHx8ICR7Y2hpbGREYXRhfSA9PT0gbnVsbCB8fCAke2NoaWxkRGF0YX0gPT09IFwiXCJgO1xuICAgIH1cbiAgICAvLyBgJHtjaGlsZERhdGF9ID09PSB1bmRlZmluZWRgICtcbiAgICAvLyAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiID8gYCB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYCA6IFwiXCIpXG4gICAgZ2VuLmlmKGNvbmRpdGlvbiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtjaGlsZERhdGF9ID0gJHsoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoZGVmYXVsdFZhbHVlKX1gKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js": /*!***************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js ***! \***************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = __webpack_require__(/*! ./boolSchema */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js\");\nconst dataType_1 = __webpack_require__(/*! ./dataType */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js\");\nconst applicability_1 = __webpack_require__(/*! ./applicability */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js\");\nconst dataType_2 = __webpack_require__(/*! ./dataType */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js\");\nconst defaults_1 = __webpack_require__(/*! ./defaults */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js\");\nconst keyword_1 = __webpack_require__(/*! ./keyword */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js\");\nconst subschema_1 = __webpack_require__(/*! ./subschema */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js\");\nconst codegen_1 = __webpack_require__(/*! ../codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst names_1 = __webpack_require__(/*! ../names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nconst resolve_1 = __webpack_require__(/*! ../resolve */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst errors_1 = __webpack_require__(/*! ../errors */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it);\n return;\n }\n }\n validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n if (opts.code.es5) {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n destructureValCxtES5(gen, opts);\n gen.code(body);\n });\n }\n else {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n }\n}\nfunction destructureValCxt(opts) {\n return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n gen.if(names_1.default.valCxt, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n }, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.rootData, names_1.default.data);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n });\n}\nfunction topSchemaObjCode(it) {\n const { schema, opts, gen } = it;\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n checkNoDefault(it);\n gen.let(names_1.default.vErrors, null);\n gen.let(names_1.default.errors, 0);\n if (opts.unevaluated)\n resetEvaluated(it);\n typeAndKeywords(it);\n returnResults(it);\n });\n return;\n}\nfunction resetEvaluated(it) {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const { gen, validateName } = it;\n it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n const schId = typeof schema == \"object\" && schema[opts.schemaId];\n return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid);\n return;\n }\n }\n (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (self.RULES.all[key])\n return true;\n return false;\n}\nfunction isSchemaObj(it) {\n return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n const { schema, gen, opts } = it;\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n updateContext(it);\n checkAsyncSchema(it);\n const errsCount = gen.const(\"_errs\", names_1.default.errors);\n typeAndKeywords(it, errsCount);\n // TODO var\n gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n (0, util_1.checkUnknownRules)(it);\n checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n if (it.opts.jtd)\n return schemaKeywords(it, [], false, errsCount);\n const types = (0, dataType_1.getSchemaTypes)(it.schema);\n const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n const { schema, errSchemaPath, opts, self } = it;\n if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n }\n}\nfunction checkNoDefault(it) {\n const { schema, opts } = it;\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n }\n}\nfunction updateContext(it) {\n const schId = it.schema[it.opts.schemaId];\n if (schId)\n it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n if (it.schema.$async && !it.schemaEnv.$async)\n throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n const msg = schema.$comment;\n if (opts.$comment === true) {\n gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n }\n else if (typeof opts.$comment == \"function\") {\n const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n }\n}\nfunction returnResults(it) {\n const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n if (opts.unevaluated)\n assignEvaluated(it);\n gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n if (props instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n if (items instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n const { gen, schema, data, allErrors, opts, self } = it;\n const { RULES } = self;\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n return;\n }\n if (!opts.jtd)\n checkStrictTypes(it, types);\n gen.block(() => {\n for (const group of RULES.rules)\n groupKeywords(group);\n groupKeywords(RULES.post);\n });\n function groupKeywords(group) {\n if (!(0, applicability_1.shouldUseGroup)(schema, group))\n return;\n if (group.type) {\n gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n iterateKeywords(it, group);\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else();\n (0, dataType_2.reportTypeError)(it);\n }\n gen.endIf();\n }\n else {\n iterateKeywords(it, group);\n }\n // TODO make it \"ok\" call?\n if (!allErrors)\n gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n }\n}\nfunction iterateKeywords(it, group) {\n const { gen, schema, opts: { useDefaults }, } = it;\n if (useDefaults)\n (0, defaults_1.assignDefaults)(it, group.type);\n gen.block(() => {\n for (const rule of group.rules) {\n if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type);\n }\n }\n });\n}\nfunction checkStrictTypes(it, types) {\n if (it.schemaEnv.meta || !it.opts.strictTypes)\n return;\n checkContextTypes(it, types);\n if (!it.opts.allowUnionTypes)\n checkMultipleTypes(it, types);\n checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n if (!types.length)\n return;\n if (!it.dataTypes.length) {\n it.dataTypes = types;\n return;\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n }\n });\n narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n }\n}\nfunction checkKeywordTypes(it, ts) {\n const rules = it.self.RULES.all;\n for (const keyword in rules) {\n const rule = rules[keyword];\n if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n const { type } = rule.definition;\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n }\n }\n }\n}\nfunction hasApplicableType(schTs, kwdT) {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n const ts = [];\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t))\n ts.push(t);\n else if (withTypes.includes(\"integer\") && t === \"number\")\n ts.push(\"integer\");\n }\n it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n msg += ` at \"${schemaPath}\" (strictTypes)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n constructor(it, def, keyword) {\n (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n this.gen = it.gen;\n this.allErrors = it.allErrors;\n this.keyword = keyword;\n this.data = it.data;\n this.schema = it.schema[keyword];\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n this.schemaType = def.schemaType;\n this.parentSchema = it.schema;\n this.params = {};\n this.it = it;\n this.def = def;\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n }\n else {\n this.schemaCode = this.schemaValue;\n if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n }\n }\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n }\n }\n result(condition, successAction, failAction) {\n this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n }\n failResult(condition, successAction, failAction) {\n this.gen.if(condition);\n if (failAction)\n failAction();\n else\n this.error();\n if (successAction) {\n this.gen.else();\n successAction();\n if (this.allErrors)\n this.gen.endIf();\n }\n else {\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n }\n pass(condition, failAction) {\n this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n }\n fail(condition) {\n if (condition === undefined) {\n this.error();\n if (!this.allErrors)\n this.gen.if(false); // this branch will be removed by gen.optimize\n return;\n }\n this.gen.if(condition);\n this.error();\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n fail$data(condition) {\n if (!this.$data)\n return this.fail(condition);\n const { schemaCode } = this;\n this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n }\n error(append, errorParams, errorPaths) {\n if (errorParams) {\n this.setParams(errorParams);\n this._error(append, errorPaths);\n this.setParams({});\n return;\n }\n this._error(append, errorPaths);\n }\n _error(append, errorPaths) {\n ;\n (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n }\n $dataError() {\n (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n }\n reset() {\n if (this.errsCount === undefined)\n throw new Error('add \"trackErrors\" to keyword definition');\n (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n }\n ok(cond) {\n if (!this.allErrors)\n this.gen.if(cond);\n }\n setParams(obj, assign) {\n if (assign)\n Object.assign(this.params, obj);\n else\n this.params = obj;\n }\n block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n this.gen.block(() => {\n this.check$data(valid, $dataValid);\n codeBlock();\n });\n }\n check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n if (!this.$data)\n return;\n const { gen, schemaCode, schemaType, def } = this;\n gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n if (valid !== codegen_1.nil)\n gen.assign(valid, true);\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data());\n this.$dataError();\n if (valid !== codegen_1.nil)\n gen.assign(valid, false);\n }\n gen.else();\n }\n invalid$data() {\n const { gen, schemaCode, schemaType, def, it } = this;\n return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n function wrong$DataType() {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof codegen_1.Name))\n throw new Error(\"ajv implementation error\");\n const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n }\n return codegen_1.nil;\n }\n function invalid$DataSchema() {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n }\n return codegen_1.nil;\n }\n }\n subschema(appl, valid) {\n const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n (0, subschema_1.extendSubschemaMode)(subschema, appl);\n const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n subschemaCode(nextContext, valid);\n return nextContext;\n }\n mergeEvaluated(schemaCxt, toName) {\n const { it, gen } = this;\n if (!it.opts.unevaluated)\n return;\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n }\n }\n mergeValidEvaluated(schemaCxt, valid) {\n const { it, gen } = this;\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n return true;\n }\n }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n const cxt = new KeywordCxt(it, def, keyword);\n if (\"code\" in def) {\n def.code(cxt, ruleType);\n }\n else if (cxt.$data && def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n else if (\"macro\" in def) {\n (0, keyword_1.macroKeywordCode)(cxt, def);\n }\n else if (def.compile || def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n let jsonPointer;\n let data;\n if ($data === \"\")\n return names_1.default.rootData;\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data))\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n jsonPointer = $data;\n data = names_1.default.rootData;\n }\n else {\n const matches = RELATIVE_JSON_POINTER.exec($data);\n if (!matches)\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n const up = +matches[1];\n jsonPointer = matches[2];\n if (jsonPointer === \"#\") {\n if (up >= dataLevel)\n throw new Error(errorMsg(\"property/index\", up));\n return dataPathArr[dataLevel - up];\n }\n if (up > dataLevel)\n throw new Error(errorMsg(\"data\", up));\n data = dataNames[dataLevel - up];\n if (!jsonPointer)\n return data;\n }\n let expr = data;\n const segments = jsonPointer.split(\"/\");\n for (const segment of segments) {\n if (segment) {\n data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n expr = (0, codegen_1._) `${expr} && ${data}`;\n }\n }\n return expr;\n function errorMsg(pointerType, up) {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWUsR0FBRyxrQkFBa0IsR0FBRyw0QkFBNEI7QUFDbkUscUJBQXFCLG1CQUFPLENBQUMsOEhBQWM7QUFDM0MsbUJBQW1CLG1CQUFPLENBQUMsMEhBQVk7QUFDdkMsd0JBQXdCLG1CQUFPLENBQUMsb0lBQWlCO0FBQ2pELG1CQUFtQixtQkFBTyxDQUFDLDBIQUFZO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLDBIQUFZO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLHdIQUFXO0FBQ3JDLG9CQUFvQixtQkFBTyxDQUFDLDRIQUFhO0FBQ3pDLGtCQUFrQixtQkFBTyxDQUFDLHNIQUFZO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLDRHQUFVO0FBQ2xDLGtCQUFrQixtQkFBTyxDQUFDLGdIQUFZO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQywwR0FBUztBQUNoQyxpQkFBaUIsbUJBQU8sQ0FBQyw4R0FBVztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCLDRCQUE0Qiw0Q0FBNEM7QUFDeEU7QUFDQSxtREFBbUQscUJBQXFCLElBQUksdUJBQXVCO0FBQ25HLHFEQUFxRCxFQUFFLDRCQUE0QjtBQUNuRjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxtREFBbUQscUJBQXFCLElBQUksd0JBQXdCO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixFQUFFLDZCQUE2QixPQUFPLDJCQUEyQixJQUFJLG1DQUFtQyxJQUFJLHlCQUF5QixHQUFHLHFCQUFxQixFQUFFLHdDQUF3QywrQkFBK0IsR0FBRyxtQkFBbUIsR0FBRztBQUM3UjtBQUNBO0FBQ0E7QUFDQSxrRUFBa0UsdUJBQXVCLEdBQUcsNkJBQTZCO0FBQ3pILGdFQUFnRSx1QkFBdUIsR0FBRywyQkFBMkI7QUFDckgsd0VBQXdFLHVCQUF1QixHQUFHLG1DQUFtQztBQUNySSw4REFBOEQsdUJBQXVCLEdBQUcseUJBQXlCO0FBQ2pIO0FBQ0Esd0VBQXdFLHVCQUF1QixHQUFHLCtCQUErQjtBQUNqSSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxvQkFBb0I7QUFDaEMsOERBQThELGFBQWE7QUFDM0UsK0JBQStCLGFBQWEscURBQXFELGFBQWE7QUFDOUcsK0JBQStCLGFBQWEscURBQXFELGFBQWE7QUFDOUc7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHLE9BQU87QUFDdkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGNBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFdBQVcsTUFBTSx1QkFBdUI7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9DQUFvQztBQUNoRDtBQUNBLHNFQUFzRSxjQUFjO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLFlBQVksZUFBZTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBNkM7QUFDdkU7QUFDQTtBQUNBLHFDQUFxQyxxQkFBcUIsY0FBYyxJQUFJO0FBQzVFO0FBQ0E7QUFDQSxpREFBaUQsY0FBYztBQUMvRCxrREFBa0QscUJBQXFCO0FBQ3ZFLHFDQUFxQyxxQkFBcUIsaUJBQWlCLElBQUksSUFBSSxXQUFXLElBQUksU0FBUztBQUMzRztBQUNBO0FBQ0E7QUFDQSxZQUFZLHNEQUFzRDtBQUNsRTtBQUNBO0FBQ0EsbUNBQW1DLHdCQUF3Qix3RkFBd0YsZ0JBQWdCLEdBQUcsd0JBQXdCO0FBQzlMO0FBQ0E7QUFDQSx1Q0FBdUMsYUFBYTtBQUNwRDtBQUNBO0FBQ0EsdUNBQXVDLHdCQUF3QjtBQUMvRDtBQUNBO0FBQ0EsMkJBQTJCLDhCQUE4QjtBQUN6RDtBQUNBLHVDQUF1QyxVQUFVO0FBQ2pEO0FBQ0EsdUNBQXVDLFVBQVU7QUFDakQ7QUFDQTtBQUNBLFlBQVksMkNBQTJDO0FBQ3ZELFlBQVksUUFBUTtBQUNwQjtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsd0JBQXdCLE1BQU0sZUFBZTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFCQUFxQixhQUFhLElBQUk7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsRUFBRSw0QkFBNEIsdUJBQXVCO0FBQy9GO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0Esc0RBQXNELGVBQWUsaUJBQWlCLFFBQVE7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLFNBQVMsZ0JBQWdCLCtCQUErQjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixhQUFhO0FBQzdCLHNDQUFzQyxZQUFZLG9CQUFvQixrREFBa0Q7QUFDeEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUNBQW1DO0FBQ25ELHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUNBQXVDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLGlHQUFpRztBQUM1STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTRFLHlCQUF5QixHQUFHO0FBQ3hHLDRDQUE0QyxrQkFBa0IsR0FBRyxXQUFXO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsVUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1DQUFtQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsTUFBTTtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsTUFBTTtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLEtBQUssRUFBRSxxRUFBcUU7QUFDbkgsdUNBQXVDLE1BQU0sS0FBSyxLQUFLO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGFBQWEsRUFBRSxJQUFJLDhCQUE4QixVQUFVO0FBQzNGO0FBQ0E7QUFDQSxlQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RGF0YSA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IGV4cG9ydHMudmFsaWRhdGVGdW5jdGlvbkNvZGUgPSB2b2lkIDA7XG5jb25zdCBib29sU2NoZW1hXzEgPSByZXF1aXJlKFwiLi9ib29sU2NoZW1hXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGRhdGFUeXBlXzIgPSByZXF1aXJlKFwiLi9kYXRhVHlwZVwiKTtcbmNvbnN0IGRlZmF1bHRzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0c1wiKTtcbmNvbnN0IGtleXdvcmRfMSA9IHJlcXVpcmUoXCIuL2tleXdvcmRcIik7XG5jb25zdCBzdWJzY2hlbWFfMSA9IHJlcXVpcmUoXCIuL3N1YnNjaGVtYVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSBnZW5lcmF0ZXMgdmFsaWRhdGlvbiBmdW5jdGlvbiwgc3Vic2NoZW1hQ29kZSAoYmVsb3cpIGlzIHVzZWQgZm9yIHN1YnNjaGVtYXNcbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db2RlKGl0KSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgdG9wU2NoZW1hT2JqQ29kZShpdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4gKDAsIGJvb2xTY2hlbWFfMS50b3BCb29sT3JFbXB0eVNjaGVtYSkoaXQpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVGdW5jdGlvbkNvZGUgPSB2YWxpZGF0ZUZ1bmN0aW9uQ29kZTtcbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb24oeyBnZW4sIHZhbGlkYXRlTmFtZSwgc2NoZW1hLCBzY2hlbWFFbnYsIG9wdHMgfSwgYm9keSkge1xuICAgIGlmIChvcHRzLmNvZGUuZXM1KSB7XG4gICAgICAgIGdlbi5mdW5jKHZhbGlkYXRlTmFtZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZGF0YX0sICR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH1gLCBzY2hlbWFFbnYuJGFzeW5jLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBcInVzZSBzdHJpY3RcIjsgJHtmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cyl9YCk7XG4gICAgICAgICAgICBkZXN0cnVjdHVyZVZhbEN4dEVTNShnZW4sIG9wdHMpO1xuICAgICAgICAgICAgZ2VuLmNvZGUoYm9keSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtkZXN0cnVjdHVyZVZhbEN4dChvcHRzKX1gLCBzY2hlbWFFbnYuJGFzeW5jLCAoKSA9PiBnZW4uY29kZShmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cykpLmNvZGUoYm9keSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlc3RydWN0dXJlVmFsQ3h0KG9wdHMpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgeyR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH09XCJcIiwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YX0sICR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX0sICR7bmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhfT0ke25hbWVzXzEuZGVmYXVsdC5kYXRhfSR7b3B0cy5keW5hbWljUmVmID8gKDAsIGNvZGVnZW5fMS5fKSBgLCAke25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc309e31gIDogY29kZWdlbl8xLm5pbH19PXt9YDtcbn1cbmZ1bmN0aW9uIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cykge1xuICAgIGdlbi5pZihuYW1lc18xLmRlZmF1bHQudmFsQ3h0LCAoKSA9PiB7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGh9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YX1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9YCk7XG4gICAgICAgIGlmIChvcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc31gKTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcImApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdG9wU2NoZW1hT2JqQ29kZShpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBvcHRzLCBnZW4gfSA9IGl0O1xuICAgIHZhbGlkYXRlRnVuY3Rpb24oaXQsICgpID0+IHtcbiAgICAgICAgaWYgKG9wdHMuJGNvbW1lbnQgJiYgc2NoZW1hLiRjb21tZW50KVxuICAgICAgICAgICAgY29tbWVudEtleXdvcmQoaXQpO1xuICAgICAgICBjaGVja05vRGVmYXVsdChpdCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsIG51bGwpO1xuICAgICAgICBnZW4ubGV0KG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIDApO1xuICAgICAgICBpZiAob3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJlc2V0RXZhbHVhdGVkKGl0KTtcbiAgICAgICAgdHlwZUFuZEtleXdvcmRzKGl0KTtcbiAgICAgICAgcmV0dXJuUmVzdWx0cyhpdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xufVxuZnVuY3Rpb24gcmVzZXRFdmFsdWF0ZWQoaXQpIHtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgaG9vayB0byBleGVjdXRlIGl0IGluIHRoZSBlbmQgdG8gY2hlY2sgd2hldGhlciBwcm9wcy9pdGVtcyBhcmUgTmFtZSwgYXMgaW4gYXNzaWduRXZhbHVhdGVkXG4gICAgY29uc3QgeyBnZW4sIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaXQuZXZhbHVhdGVkID0gZ2VuLmNvbnN0KFwiZXZhbHVhdGVkXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5ldmFsdWF0ZWRgKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LmR5bmFtaWNQcm9wc2AsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LnByb3BzYCwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCkpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY0l0ZW1zYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uaXRlbXNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG59XG5mdW5jdGlvbiBmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cykge1xuICAgIGNvbnN0IHNjaElkID0gdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmIHNjaGVtYVtvcHRzLnNjaGVtYUlkXTtcbiAgICByZXR1cm4gc2NoSWQgJiYgKG9wdHMuY29kZS5zb3VyY2UgfHwgb3B0cy5jb2RlLnByb2Nlc3MpID8gKDAsIGNvZGVnZW5fMS5fKSBgLyojIHNvdXJjZVVSTD0ke3NjaElkfSAqL2AgOiBjb2RlZ2VuXzEubmlsO1xufVxuLy8gc2NoZW1hIGNvbXBpbGF0aW9uIC0gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IHRvIGdlbmVyYXRlIGNvZGUgZm9yIHN1Yi1zY2hlbWFzXG5mdW5jdGlvbiBzdWJzY2hlbWFDb2RlKGl0LCB2YWxpZCkge1xuICAgIGlmIChpc1NjaGVtYU9iaihpdCkpIHtcbiAgICAgICAgY2hlY2tLZXl3b3JkcyhpdCk7XG4gICAgICAgIGlmIChzY2hlbWFDeHRIYXNSdWxlcyhpdCkpIHtcbiAgICAgICAgICAgIHN1YlNjaGVtYU9iakNvZGUoaXQsIHZhbGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoMCwgYm9vbFNjaGVtYV8xLmJvb2xPckVtcHR5U2NoZW1hKShpdCwgdmFsaWQpO1xufVxuZnVuY3Rpb24gc2NoZW1hQ3h0SGFzUnVsZXMoeyBzY2hlbWEsIHNlbGYgfSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChzZWxmLlJVTEVTLmFsbFtrZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNTY2hlbWFPYmooaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0LnNjaGVtYSAhPSBcImJvb2xlYW5cIjtcbn1cbmZ1bmN0aW9uIHN1YlNjaGVtYU9iakNvZGUoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIGdlbiwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKG9wdHMuJGNvbW1lbnQgJiYgc2NoZW1hLiRjb21tZW50KVxuICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgdXBkYXRlQ29udGV4dChpdCk7XG4gICAgY2hlY2tBc3luY1NjaGVtYShpdCk7XG4gICAgY29uc3QgZXJyc0NvdW50ID0gZ2VuLmNvbnN0KFwiX2VycnNcIiwgbmFtZXNfMS5kZWZhdWx0LmVycm9ycyk7XG4gICAgdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpO1xuICAgIC8vIFRPRE8gdmFyXG4gICAgZ2VuLnZhcih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJzQ291bnR9ID09PSAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9YCk7XG59XG5mdW5jdGlvbiBjaGVja0tleXdvcmRzKGl0KSB7XG4gICAgKDAsIHV0aWxfMS5jaGVja1Vua25vd25SdWxlcykoaXQpO1xuICAgIGNoZWNrUmVmc0FuZEtleXdvcmRzKGl0KTtcbn1cbmZ1bmN0aW9uIHR5cGVBbmRLZXl3b3JkcyhpdCwgZXJyc0NvdW50KSB7XG4gICAgaWYgKGl0Lm9wdHMuanRkKVxuICAgICAgICByZXR1cm4gc2NoZW1hS2V5d29yZHMoaXQsIFtdLCBmYWxzZSwgZXJyc0NvdW50KTtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCBkYXRhVHlwZV8xLmdldFNjaGVtYVR5cGVzKShpdC5zY2hlbWEpO1xuICAgIGNvbnN0IGNoZWNrZWRUeXBlcyA9ICgwLCBkYXRhVHlwZV8xLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUpKGl0LCB0eXBlcyk7XG4gICAgc2NoZW1hS2V5d29yZHMoaXQsIHR5cGVzLCAhY2hlY2tlZFR5cGVzLCBlcnJzQ291bnQpO1xufVxuZnVuY3Rpb24gY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZXJyU2NoZW1hUGF0aCwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS4kcmVmICYmIG9wdHMuaWdub3JlS2V5d29yZHNXaXRoUmVmICYmICgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgc2VsZi5SVUxFUykpIHtcbiAgICAgICAgc2VsZi5sb2dnZXIud2FybihgJHJlZjoga2V5d29yZHMgaWdub3JlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrTm9EZWZhdWx0KGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEuZGVmYXVsdCAhPT0gdW5kZWZpbmVkICYmIG9wdHMudXNlRGVmYXVsdHMgJiYgb3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBcImRlZmF1bHQgaXMgaWdub3JlZCBpbiB0aGUgc2NoZW1hIHJvb3RcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChpdCkge1xuICAgIGNvbnN0IHNjaElkID0gaXQuc2NoZW1hW2l0Lm9wdHMuc2NoZW1hSWRdO1xuICAgIGlmIChzY2hJZClcbiAgICAgICAgaXQuYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShpdC5vcHRzLnVyaVJlc29sdmVyLCBpdC5iYXNlSWQsIHNjaElkKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNTY2hlbWEoaXQpIHtcbiAgICBpZiAoaXQuc2NoZW1hLiRhc3luYyAmJiAhaXQuc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hXCIpO1xufVxuZnVuY3Rpb24gY29tbWVudEtleXdvcmQoeyBnZW4sIHNjaGVtYUVudiwgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzIH0pIHtcbiAgICBjb25zdCBtc2cgPSBzY2hlbWEuJGNvbW1lbnQ7XG4gICAgaWYgKG9wdHMuJGNvbW1lbnQgPT09IHRydWUpIHtcbiAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn0ubG9nZ2VyLmxvZygke21zZ30pYCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLiRjb21tZW50ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyRjb21tZW50YDtcbiAgICAgICAgY29uc3Qgcm9vdE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInJvb3RcIiwgeyByZWY6IHNjaGVtYUVudi5yb290IH0pO1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5vcHRzLiRjb21tZW50KCR7bXNnfSwgJHtzY2hlbWFQYXRofSwgJHtyb290TmFtZX0uc2NoZW1hKWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJldHVyblJlc3VsdHMoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hRW52LCB2YWxpZGF0ZU5hbWUsIFZhbGlkYXRpb25FcnJvciwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYUVudi4kYXN5bmMpIHtcbiAgICAgICAgLy8gVE9ETyBhc3NpZ24gdW5ldmFsdWF0ZWRcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09IDBgLCAoKSA9PiBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKSwgKCkgPT4gZ2VuLnRocm93KCgwLCBjb2RlZ2VuXzEuXykgYG5ldyAke1ZhbGlkYXRpb25FcnJvcn0oJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30pYCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgICAgICBpZiAob3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIGFzc2lnbkV2YWx1YXRlZChpdCk7XG4gICAgICAgIGdlbi5yZXR1cm4oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2lnbkV2YWx1YXRlZCh7IGdlbiwgZXZhbHVhdGVkLCBwcm9wcywgaXRlbXMgfSkge1xuICAgIGlmIChwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5wcm9wc2AsIHByb3BzKTtcbiAgICBpZiAoaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSlcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2V2YWx1YXRlZH0uaXRlbXNgLCBpdGVtcyk7XG59XG5mdW5jdGlvbiBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsIHR5cGVFcnJvcnMsIGVycnNDb3VudCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGFsbEVycm9ycywgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gc2VsZjtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgKG9wdHMuaWdub3JlS2V5d29yZHNXaXRoUmVmIHx8ICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIFJVTEVTKSkpIHtcbiAgICAgICAgZ2VuLmJsb2NrKCgpID0+IGtleXdvcmRDb2RlKGl0LCBcIiRyZWZcIiwgUlVMRVMuYWxsLiRyZWYuZGVmaW5pdGlvbikpOyAvLyBUT0RPIHR5cGVjYXN0XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFvcHRzLmp0ZClcbiAgICAgICAgY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpXG4gICAgICAgICAgICBncm91cEtleXdvcmRzKGdyb3VwKTtcbiAgICAgICAgZ3JvdXBLZXl3b3JkcyhSVUxFUy5wb3N0KTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBncm91cEtleXdvcmRzKGdyb3VwKSB7XG4gICAgICAgIGlmICghKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VHcm91cCkoc2NoZW1hLCBncm91cCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChncm91cC50eXBlKSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGRhdGFUeXBlXzIuY2hlY2tEYXRhVHlwZSkoZ3JvdXAudHlwZSwgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzKSk7XG4gICAgICAgICAgICBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKTtcbiAgICAgICAgICAgIGlmICh0eXBlcy5sZW5ndGggPT09IDEgJiYgdHlwZXNbMF0gPT09IGdyb3VwLnR5cGUgJiYgdHlwZUVycm9ycykge1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICAgICAgKDAsIGRhdGFUeXBlXzIucmVwb3J0VHlwZUVycm9yKShpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gbWFrZSBpdCBcIm9rXCIgY2FsbD9cbiAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gJHtlcnJzQ291bnQgfHwgMH1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgb3B0czogeyB1c2VEZWZhdWx0cyB9LCB9ID0gaXQ7XG4gICAgaWYgKHVzZURlZmF1bHRzKVxuICAgICAgICAoMCwgZGVmYXVsdHNfMS5hc3NpZ25EZWZhdWx0cykoaXQsIGdyb3VwLnR5cGUpO1xuICAgIGdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBncm91cC5ydWxlcykge1xuICAgICAgICAgICAgaWYgKCgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlUnVsZSkoc2NoZW1hLCBydWxlKSkge1xuICAgICAgICAgICAgICAgIGtleXdvcmRDb2RlKGl0LCBydWxlLmtleXdvcmQsIHJ1bGUuZGVmaW5pdGlvbiwgZ3JvdXAudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNoZWNrU3RyaWN0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKGl0LnNjaGVtYUVudi5tZXRhIHx8ICFpdC5vcHRzLnN0cmljdFR5cGVzKVxuICAgICAgICByZXR1cm47XG4gICAgY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKTtcbiAgICBpZiAoIWl0Lm9wdHMuYWxsb3dVbmlvblR5cGVzKVxuICAgICAgICBjaGVja011bHRpcGxlVHlwZXMoaXQsIHR5cGVzKTtcbiAgICBjaGVja0tleXdvcmRUeXBlcyhpdCwgaXQuZGF0YVR5cGVzKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQ29udGV4dFR5cGVzKGl0LCB0eXBlcykge1xuICAgIGlmICghdHlwZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFpdC5kYXRhVHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIGl0LmRhdGFUeXBlcyA9IHR5cGVzO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHR5cGVzLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgaWYgKCFpbmNsdWRlc1R5cGUoaXQuZGF0YVR5cGVzLCB0KSkge1xuICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYHR5cGUgXCIke3R9XCIgbm90IGFsbG93ZWQgYnkgY29udGV4dCBcIiR7aXQuZGF0YVR5cGVzLmpvaW4oXCIsXCIpfVwiYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBuYXJyb3dTY2hlbWFUeXBlcyhpdCwgdHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tNdWx0aXBsZVR5cGVzKGl0LCB0cykge1xuICAgIGlmICh0cy5sZW5ndGggPiAxICYmICEodHMubGVuZ3RoID09PSAyICYmIHRzLmluY2x1ZGVzKFwibnVsbFwiKSkpIHtcbiAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgXCJ1c2UgYWxsb3dVbmlvblR5cGVzIHRvIGFsbG93IHVuaW9uIHR5cGUga2V5d29yZFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0tleXdvcmRUeXBlcyhpdCwgdHMpIHtcbiAgICBjb25zdCBydWxlcyA9IGl0LnNlbGYuUlVMRVMuYWxsO1xuICAgIGZvciAoY29uc3Qga2V5d29yZCBpbiBydWxlcykge1xuICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5d29yZF07XG4gICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PSBcIm9iamVjdFwiICYmICgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlUnVsZSkoaXQuc2NoZW1hLCBydWxlKSkge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBydWxlLmRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAodHlwZS5sZW5ndGggJiYgIXR5cGUuc29tZSgodCkgPT4gaGFzQXBwbGljYWJsZVR5cGUodHMsIHQpKSkge1xuICAgICAgICAgICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIGBtaXNzaW5nIHR5cGUgXCIke3R5cGUuam9pbihcIixcIil9XCIgZm9yIGtleXdvcmQgXCIke2tleXdvcmR9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGhhc0FwcGxpY2FibGVUeXBlKHNjaFRzLCBrd2RUKSB7XG4gICAgcmV0dXJuIHNjaFRzLmluY2x1ZGVzKGt3ZFQpIHx8IChrd2RUID09PSBcIm51bWJlclwiICYmIHNjaFRzLmluY2x1ZGVzKFwiaW50ZWdlclwiKSk7XG59XG5mdW5jdGlvbiBpbmNsdWRlc1R5cGUodHMsIHQpIHtcbiAgICByZXR1cm4gdHMuaW5jbHVkZXModCkgfHwgKHQgPT09IFwiaW50ZWdlclwiICYmIHRzLmluY2x1ZGVzKFwibnVtYmVyXCIpKTtcbn1cbmZ1bmN0aW9uIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB3aXRoVHlwZXMpIHtcbiAgICBjb25zdCB0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgdCBvZiBpdC5kYXRhVHlwZXMpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzVHlwZSh3aXRoVHlwZXMsIHQpKVxuICAgICAgICAgICAgdHMucHVzaCh0KTtcbiAgICAgICAgZWxzZSBpZiAod2l0aFR5cGVzLmluY2x1ZGVzKFwiaW50ZWdlclwiKSAmJiB0ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdHMucHVzaChcImludGVnZXJcIik7XG4gICAgfVxuICAgIGl0LmRhdGFUeXBlcyA9IHRzO1xufVxuZnVuY3Rpb24gc3RyaWN0VHlwZXNFcnJvcihpdCwgbXNnKSB7XG4gICAgY29uc3Qgc2NoZW1hUGF0aCA9IGl0LnNjaGVtYUVudi5iYXNlSWQgKyBpdC5lcnJTY2hlbWFQYXRoO1xuICAgIG1zZyArPSBgIGF0IFwiJHtzY2hlbWFQYXRofVwiIChzdHJpY3RUeXBlcylgO1xuICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFR5cGVzKTtcbn1cbmNsYXNzIEtleXdvcmRDeHQge1xuICAgIGNvbnN0cnVjdG9yKGl0LCBkZWYsIGtleXdvcmQpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS52YWxpZGF0ZUtleXdvcmRVc2FnZSkoaXQsIGRlZiwga2V5d29yZCk7XG4gICAgICAgIHRoaXMuZ2VuID0gaXQuZ2VuO1xuICAgICAgICB0aGlzLmFsbEVycm9ycyA9IGl0LmFsbEVycm9ycztcbiAgICAgICAgdGhpcy5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5kYXRhID0gaXQuZGF0YTtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHRoaXMuJGRhdGEgPSBkZWYuJGRhdGEgJiYgaXQub3B0cy4kZGF0YSAmJiB0aGlzLnNjaGVtYSAmJiB0aGlzLnNjaGVtYS4kZGF0YTtcbiAgICAgICAgdGhpcy5zY2hlbWFWYWx1ZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCB0aGlzLnNjaGVtYSwga2V5d29yZCwgdGhpcy4kZGF0YSk7XG4gICAgICAgIHRoaXMuc2NoZW1hVHlwZSA9IGRlZi5zY2hlbWFUeXBlO1xuICAgICAgICB0aGlzLnBhcmVudFNjaGVtYSA9IGl0LnNjaGVtYTtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTtcbiAgICAgICAgdGhpcy5pdCA9IGl0O1xuICAgICAgICB0aGlzLmRlZiA9IGRlZjtcbiAgICAgICAgaWYgKHRoaXMuJGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ29kZSA9IGl0Lmdlbi5jb25zdChcInZTY2hlbWFcIiwgZ2V0RGF0YSh0aGlzLiRkYXRhLCBpdCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gdGhpcy5zY2hlbWFWYWx1ZTtcbiAgICAgICAgICAgIGlmICghKDAsIGtleXdvcmRfMS52YWxpZFNjaGVtYVR5cGUpKHRoaXMuc2NoZW1hLCBkZWYuc2NoZW1hVHlwZSwgZGVmLmFsbG93VW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl3b3JkfSB2YWx1ZSBtdXN0IGJlICR7SlNPTi5zdHJpbmdpZnkoZGVmLnNjaGVtYVR5cGUpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcImNvZGVcIiBpbiBkZWYgPyBkZWYudHJhY2tFcnJvcnMgOiBkZWYuZXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5lcnJzQ291bnQgPSBpdC5nZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQoY29uZGl0aW9uLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbik7XG4gICAgfVxuICAgIGZhaWxSZXN1bHQoY29uZGl0aW9uLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIGlmIChmYWlsQWN0aW9uKVxuICAgICAgICAgICAgZmFpbEFjdGlvbigpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgIGlmIChzdWNjZXNzQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgICAgICAgICBzdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXNzKGNvbmRpdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmZhaWxSZXN1bHQoKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmRpdGlvbiksIHVuZGVmaW5lZCwgZmFpbEFjdGlvbik7XG4gICAgfVxuICAgIGZhaWwoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5pZihmYWxzZSk7IC8vIHRoaXMgYnJhbmNoIHdpbGwgYmUgcmVtb3ZlZCBieSBnZW4ub3B0aW1pemVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbi5pZihjb25kaXRpb24pO1xuICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICB9XG4gICAgZmFpbCRkYXRhKGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuJGRhdGEpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mYWlsKGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hQ29kZSB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gIT09IHVuZGVmaW5lZCAmJiAoJHsoMCwgY29kZWdlbl8xLm9yKSh0aGlzLmludmFsaWQkZGF0YSgpLCBjb25kaXRpb24pfSlgKTtcbiAgICB9XG4gICAgZXJyb3IoYXBwZW5kLCBlcnJvclBhcmFtcywgZXJyb3JQYXRocykge1xuICAgICAgICBpZiAoZXJyb3JQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKGVycm9yUGFyYW1zKTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocyk7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtcyh7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICB9XG4gICAgX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocykge1xuICAgICAgICA7XG4gICAgICAgIChhcHBlbmQgPyBlcnJvcnNfMS5yZXBvcnRFeHRyYUVycm9yIDogZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLmVycm9yLCBlcnJvclBhdGhzKTtcbiAgICB9XG4gICAgJGRhdGFFcnJvcigpIHtcbiAgICAgICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKSh0aGlzLCB0aGlzLmRlZi4kZGF0YUVycm9yIHx8IGVycm9yc18xLmtleXdvcmQkRGF0YUVycm9yKTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZGQgXCJ0cmFja0Vycm9yc1wiIHRvIGtleXdvcmQgZGVmaW5pdGlvbicpO1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVzZXRFcnJvcnNDb3VudCkodGhpcy5nZW4sIHRoaXMuZXJyc0NvdW50KTtcbiAgICB9XG4gICAgb2soY29uZCkge1xuICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uaWYoY29uZCk7XG4gICAgfVxuICAgIHNldFBhcmFtcyhvYmosIGFzc2lnbikge1xuICAgICAgICBpZiAoYXNzaWduKVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtcywgb2JqKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBvYmo7XG4gICAgfVxuICAgIGJsb2NrJGRhdGEodmFsaWQsIGNvZGVCbG9jaywgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgdGhpcy5nZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVjayRkYXRhKHZhbGlkLCAkZGF0YVZhbGlkKTtcbiAgICAgICAgICAgIGNvZGVCbG9jaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2hlY2skZGF0YSh2YWxpZCA9IGNvZGVnZW5fMS5uaWwsICRkYXRhVmFsaWQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYUNvZGUsIHNjaGVtYVR5cGUsIGRlZiB9ID0gdGhpcztcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEub3IpKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IHVuZGVmaW5lZGAsICRkYXRhVmFsaWQpKTtcbiAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCB8fCBkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgICAgIGdlbi5lbHNlSWYodGhpcy5pbnZhbGlkJGRhdGEoKSk7XG4gICAgICAgICAgICB0aGlzLiRkYXRhRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICh2YWxpZCAhPT0gY29kZWdlbl8xLm5pbClcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICB9XG4gICAgaW52YWxpZCRkYXRhKCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmLCBpdCB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKHdyb25nJERhdGFUeXBlKCksIGludmFsaWQkRGF0YVNjaGVtYSgpKTtcbiAgICAgICAgZnVuY3Rpb24gd3JvbmckRGF0YVR5cGUoKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hVHlwZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIShzY2hlbWFDb2RlIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBBcnJheS5pc0FycmF5KHNjaGVtYVR5cGUpID8gc2NoZW1hVHlwZSA6IFtzY2hlbWFUeXBlXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlcykoc3QsIHNjaGVtYUNvZGUsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMi5EYXRhVHlwZS5Xcm9uZyl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGludmFsaWQkRGF0YVNjaGVtYSgpIHtcbiAgICAgICAgICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZVNjaGVtYVJlZiA9IGdlbi5zY29wZVZhbHVlKFwidmFsaWRhdGUkZGF0YVwiLCB7IHJlZjogZGVmLnZhbGlkYXRlU2NoZW1hIH0pOyAvLyBUT0RPIHZhbHVlLmNvZGUgZm9yIHN0YW5kYWxvbmVcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgISR7dmFsaWRhdGVTY2hlbWFSZWZ9KCR7c2NoZW1hQ29kZX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnNjaGVtYShhcHBsLCB2YWxpZCkge1xuICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSAoMCwgc3Vic2NoZW1hXzEuZ2V0U3Vic2NoZW1hKSh0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYURhdGEpKHN1YnNjaGVtYSwgdGhpcy5pdCwgYXBwbCk7XG4gICAgICAgICgwLCBzdWJzY2hlbWFfMS5leHRlbmRTdWJzY2hlbWFNb2RlKShzdWJzY2hlbWEsIGFwcGwpO1xuICAgICAgICBjb25zdCBuZXh0Q29udGV4dCA9IHsgLi4udGhpcy5pdCwgLi4uc3Vic2NoZW1hLCBpdGVtczogdW5kZWZpbmVkLCBwcm9wczogdW5kZWZpbmVkIH07XG4gICAgICAgIHN1YnNjaGVtYUNvZGUobmV4dENvbnRleHQsIHZhbGlkKTtcbiAgICAgICAgcmV0dXJuIG5leHRDb250ZXh0O1xuICAgIH1cbiAgICBtZXJnZUV2YWx1YXRlZChzY2hlbWFDeHQsIHRvTmFtZSkge1xuICAgICAgICBjb25zdCB7IGl0LCBnZW4gfSA9IHRoaXM7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGl0LnByb3BzICE9PSB0cnVlICYmIHNjaGVtYUN4dC5wcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaGVtYUN4dC5wcm9wcywgaXQucHJvcHMsIHRvTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lml0ZW1zICE9PSB0cnVlICYmIHNjaGVtYUN4dC5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaGVtYUN4dC5pdGVtcywgaXQuaXRlbXMsIHRvTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hlbWFDeHQsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgKGl0LnByb3BzICE9PSB0cnVlIHx8IGl0Lml0ZW1zICE9PSB0cnVlKSkge1xuICAgICAgICAgICAgZ2VuLmlmKHZhbGlkLCAoKSA9PiB0aGlzLm1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgY29kZWdlbl8xLk5hbWUpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5LZXl3b3JkQ3h0ID0gS2V5d29yZEN4dDtcbmZ1bmN0aW9uIGtleXdvcmRDb2RlKGl0LCBrZXl3b3JkLCBkZWYsIHJ1bGVUeXBlKSB7XG4gICAgY29uc3QgY3h0ID0gbmV3IEtleXdvcmRDeHQoaXQsIGRlZiwga2V5d29yZCk7XG4gICAgaWYgKFwiY29kZVwiIGluIGRlZikge1xuICAgICAgICBkZWYuY29kZShjeHQsIHJ1bGVUeXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3h0LiRkYXRhICYmIGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChcIm1hY3JvXCIgaW4gZGVmKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEubWFjcm9LZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZWYuY29tcGlsZSB8fCBkZWYudmFsaWRhdGUpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5mdW5jS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG59XG5jb25zdCBKU09OX1BPSU5URVIgPSAvXlxcLyg/Oltefl18fjB8fjEpKiQvO1xuY29uc3QgUkVMQVRJVkVfSlNPTl9QT0lOVEVSID0gL14oWzAtOV0rKSgjfFxcLyg/Oltefl18fjB8fjEpKik/JC87XG5mdW5jdGlvbiBnZXREYXRhKCRkYXRhLCB7IGRhdGFMZXZlbCwgZGF0YU5hbWVzLCBkYXRhUGF0aEFyciB9KSB7XG4gICAgbGV0IGpzb25Qb2ludGVyO1xuICAgIGxldCBkYXRhO1xuICAgIGlmICgkZGF0YSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YTtcbiAgICBpZiAoJGRhdGFbMF0gPT09IFwiL1wiKSB7XG4gICAgICAgIGlmICghSlNPTl9QT0lOVEVSLnRlc3QoJGRhdGEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAganNvblBvaW50ZXIgPSAkZGF0YTtcbiAgICAgICAgZGF0YSA9IG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBSRUxBVElWRV9KU09OX1BPSU5URVIuZXhlYygkZGF0YSk7XG4gICAgICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OLXBvaW50ZXI6ICR7JGRhdGF9YCk7XG4gICAgICAgIGNvbnN0IHVwID0gK21hdGNoZXNbMV07XG4gICAgICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICAgICAgaWYgKGpzb25Qb2ludGVyID09PSBcIiNcIikge1xuICAgICAgICAgICAgaWYgKHVwID49IGRhdGFMZXZlbClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2coXCJwcm9wZXJ0eS9pbmRleFwiLCB1cCkpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQYXRoQXJyW2RhdGFMZXZlbCAtIHVwXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXAgPiBkYXRhTGV2ZWwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2coXCJkYXRhXCIsIHVwKSk7XG4gICAgICAgIGRhdGEgPSBkYXRhTmFtZXNbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICBpZiAoIWpzb25Qb2ludGVyKVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBleHByID0gZGF0YTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGpzb25Qb2ludGVyLnNwbGl0KFwiL1wiKTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICAgIGRhdGEgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KSgoMCwgdXRpbF8xLnVuZXNjYXBlSnNvblBvaW50ZXIpKHNlZ21lbnQpKX1gO1xuICAgICAgICAgICAgZXhwciA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZXhwcn0gJiYgJHtkYXRhfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHI7XG4gICAgZnVuY3Rpb24gZXJyb3JNc2cocG9pbnRlclR5cGUsIHVwKSB7XG4gICAgICAgIHJldHVybiBgQ2Fubm90IGFjY2VzcyAke3BvaW50ZXJUeXBlfSAke3VwfSBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJHtkYXRhTGV2ZWx9YDtcbiAgICB9XG59XG5leHBvcnRzLmdldERhdGEgPSBnZXREYXRhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js": /*!*****************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js ***! \*****************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = __webpack_require__(/*! ../codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst names_1 = __webpack_require__(/*! ../names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nconst code_1 = __webpack_require__(/*! ../../vocabularies/code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst errors_1 = __webpack_require__(/*! ../errors */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js\");\nfunction macroKeywordCode(cxt, def) {\n const { gen, keyword, schema, parentSchema, it } = cxt;\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n const schemaRef = useKeyword(gen, keyword, macroSchema);\n if (it.opts.validateSchema !== false)\n it.self.validateSchema(macroSchema, true);\n const valid = gen.name(\"valid\");\n cxt.subschema({\n schema: macroSchema,\n schemaPath: codegen_1.nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n }, valid);\n cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n var _a;\n const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n checkAsyncKeyword(it, def);\n const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n const validateRef = useKeyword(gen, keyword, validate);\n const valid = gen.let(\"valid\");\n cxt.block$data(valid, validateKeyword);\n cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n function validateKeyword() {\n if (def.errors === false) {\n assignValid();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => cxt.error());\n }\n else {\n const ruleErrs = def.async ? validateAsync() : validateSync();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => addErrs(cxt, ruleErrs));\n }\n }\n function validateAsync() {\n const ruleErrs = gen.let(\"ruleErrs\", null);\n gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n return ruleErrs;\n }\n function validateSync() {\n const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n gen.assign(validateErrs, null);\n assignValid(codegen_1.nil);\n return validateErrs;\n }\n function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n }\n function reportErrs(errors) {\n var _a;\n gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n const { gen, data, it } = cxt;\n gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n const { gen } = cxt;\n gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n gen\n .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n (0, errors_1.extendErrors)(cxt);\n }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n if (def.async && !schemaEnv.$async)\n throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n if (result === undefined)\n throw new Error(`keyword \"${keyword}\" failed to compile`);\n return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n // TODO add tests\n return (!schemaType.length ||\n schemaType.some((st) => st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\");\n }\n const deps = def.dependencies;\n if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n }\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword]);\n if (!valid) {\n const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors);\n if (opts.validateSchema === \"log\")\n self.logger.error(msg);\n else\n throw new Error(msg);\n }\n }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsNEJBQTRCLEdBQUcsdUJBQXVCLEdBQUcsdUJBQXVCLEdBQUcsd0JBQXdCO0FBQzNHLGtCQUFrQixtQkFBTyxDQUFDLHNIQUFZO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLDRHQUFVO0FBQ2xDLGVBQWUsbUJBQU8sQ0FBQywrSEFBeUI7QUFDaEQsaUJBQWlCLG1CQUFPLENBQUMsOEdBQVc7QUFDcEM7QUFDQSxZQUFZLHlDQUF5QztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGlCQUFpQixHQUFHLFFBQVE7QUFDdEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxZQUFZLGdEQUFnRDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFIQUFxSCxHQUFHLGFBQWEsbUJBQW1CLGtEQUFrRCxFQUFFO0FBQzVNO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxZQUFZO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE9BQU8sRUFBRSxvRUFBb0U7QUFDM0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsWUFBWSxnQkFBZ0I7QUFDNUIscUVBQXFFLGNBQWMsR0FBRyxzQkFBc0I7QUFDNUc7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQiw2Q0FBNkMsS0FBSztBQUNsRDtBQUNBLGlFQUFpRSx5QkFBeUIsYUFBYSxNQUFNLElBQUksd0JBQXdCLFVBQVUsS0FBSztBQUN4SixnRUFBZ0Usd0JBQXdCO0FBQ3hGO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkJBQTZCLFdBQVc7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxRQUFRO0FBQzVDLHFFQUFxRSxjQUFjLElBQUkscURBQXFEO0FBQzVJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLGdDQUFnQyxtQ0FBbUM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLFFBQVEsSUFBSSxlQUFlO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFFBQVEsOEJBQThCLGNBQWM7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSBleHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi8uLi92b2NhYnVsYXJpZXMvY29kZVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIG1hY3JvS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgbWFjcm9TY2hlbWEgPSBkZWYubWFjcm8uY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCBtYWNyb1NjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKVxuICAgICAgICBpdC5zZWxmLnZhbGlkYXRlU2NoZW1hKG1hY3JvU2NoZW1hLCB0cnVlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgIHNjaGVtYTogbWFjcm9TY2hlbWEsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaGVtYVJlZixcbiAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICB9LCB2YWxpZCk7XG4gICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSBtYWNyb0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gZnVuY0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tBc3luY0tleXdvcmQoaXQsIGRlZik7XG4gICAgY29uc3QgdmFsaWRhdGUgPSAhJGRhdGEgJiYgZGVmLmNvbXBpbGUgPyBkZWYuY29tcGlsZS5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCkgOiBkZWYudmFsaWRhdGU7XG4gICAgY29uc3QgdmFsaWRhdGVSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgdmFsaWRhdGUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZUtleXdvcmQpO1xuICAgIGN4dC5vaygoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKTtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoKSB7XG4gICAgICAgIGlmIChkZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXNzaWduVmFsaWQoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVycnMgPSBkZWYuYXN5bmMgPyB2YWxpZGF0ZUFzeW5jKCkgOiB2YWxpZGF0ZVN5bmMoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gYWRkRXJycyhjeHQsIHJ1bGVFcnJzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVBc3luYygpIHtcbiAgICAgICAgY29uc3QgcnVsZUVycnMgPSBnZW4ubGV0KFwicnVsZUVycnNcIiwgbnVsbCk7XG4gICAgICAgIGdlbi50cnkoKCkgPT4gYXNzaWduVmFsaWQoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCksIChlKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfWAsICgpID0+IGdlbi5hc3NpZ24ocnVsZUVycnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0uZXJyb3JzYCksICgpID0+IGdlbi50aHJvdyhlKSkpO1xuICAgICAgICByZXR1cm4gcnVsZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3luYygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZVJlZn0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZGF0ZUVycnMsIG51bGwpO1xuICAgICAgICBhc3NpZ25WYWxpZChjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzaWduVmFsaWQoX2F3YWl0ID0gZGVmLmFzeW5jID8gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCA6IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgY29uc3QgcGFzc0N4dCA9IGl0Lm9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IG5hbWVzXzEuZGVmYXVsdC5zZWxmO1xuICAgICAgICBjb25zdCBwYXNzU2NoZW1hID0gISgoXCJjb21waWxlXCIgaW4gZGVmICYmICEkZGF0YSkgfHwgZGVmLnNjaGVtYSA9PT0gZmFsc2UpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke19hd2FpdH0keygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2YWxpZGF0ZVJlZiwgcGFzc0N4dCwgcGFzc1NjaGVtYSl9YCwgZGVmLm1vZGlmeWluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEVycnMoZXJyb3JzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSgoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKSwgZXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGZ1bmNLZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIG1vZGlmeURhdGEoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKGl0LnBhcmVudERhdGEsICgpID0+IGdlbi5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5wYXJlbnREYXRhfVske2l0LnBhcmVudERhdGFQcm9wZXJ0eX1dYCkpO1xufVxuZnVuY3Rpb24gYWRkRXJycyhjeHQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZXJyc30pYCwgKCkgPT4ge1xuICAgICAgICBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgICAgICAoMCwgZXJyb3JzXzEuZXh0ZW5kRXJyb3JzKShjeHQpO1xuICAgIH0sICgpID0+IGN4dC5lcnJvcigpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNLZXl3b3JkKHsgc2NoZW1hRW52IH0sIGRlZikge1xuICAgIGlmIChkZWYuYXN5bmMgJiYgIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgcmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleXdvcmQgXCIke2tleXdvcmR9XCIgZmFpbGVkIHRvIGNvbXBpbGVgKTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJrZXl3b3JkXCIsIHR5cGVvZiByZXN1bHQgPT0gXCJmdW5jdGlvblwiID8geyByZWY6IHJlc3VsdCB9IDogeyByZWY6IHJlc3VsdCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHJlc3VsdCkgfSk7XG59XG5mdW5jdGlvbiB2YWxpZFNjaGVtYVR5cGUoc2NoZW1hLCBzY2hlbWFUeXBlLCBhbGxvd1VuZGVmaW5lZCA9IGZhbHNlKSB7XG4gICAgLy8gVE9ETyBhZGQgdGVzdHNcbiAgICByZXR1cm4gKCFzY2hlbWFUeXBlLmxlbmd0aCB8fFxuICAgICAgICBzY2hlbWFUeXBlLnNvbWUoKHN0KSA9PiBzdCA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgOiBzdCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2NoZW1hID09IHN0IHx8IChhbGxvd1VuZGVmaW5lZCAmJiB0eXBlb2Ygc2NoZW1hID09IFwidW5kZWZpbmVkXCIpKSk7XG59XG5leHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IHZhbGlkU2NoZW1hVHlwZTtcbmZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZFVzYWdlKHsgc2NoZW1hLCBvcHRzLCBzZWxmLCBlcnJTY2hlbWFQYXRoIH0sIGRlZiwga2V5d29yZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZi5rZXl3b3JkKSA/ICFkZWYua2V5d29yZC5pbmNsdWRlcyhrZXl3b3JkKSA6IGRlZi5rZXl3b3JkICE9PSBrZXl3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVwcyA9IGRlZi5kZXBlbmRlbmNpZXM7XG4gICAgaWYgKGRlcHMgPT09IG51bGwgfHwgZGVwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwcy5zb21lKChrd2QpID0+ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBrd2QpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGRlcGVuZGVuY2llcyBvZiAke2tleXdvcmR9OiAke2RlcHMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBkZWYudmFsaWRhdGVTY2hlbWEoc2NoZW1hW2tleXdvcmRdKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYGtleXdvcmQgXCIke2tleXdvcmR9XCIgdmFsdWUgaXMgaW52YWxpZCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiOiBgICtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yc1RleHQoZGVmLnZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2cpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IHZhbGlkYXRlS2V5d29yZFVzYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5d29yZC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js": /*!*******************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js ***! \*******************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = __webpack_require__(/*! ../codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n }\n if (keyword !== undefined) {\n const sch = it.schema[keyword];\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n };\n }\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n };\n }\n throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n }\n const { gen } = it;\n if (dataProp !== undefined) {\n const { errorPath, dataPathArr, opts } = it;\n const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n dataContextProps(nextData);\n subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n }\n if (data !== undefined) {\n const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n dataContextProps(nextData);\n if (propertyName !== undefined)\n subschema.propertyName = propertyName;\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n if (dataTypes)\n subschema.dataTypes = dataTypes;\n function dataContextProps(_nextData) {\n subschema.data = _nextData;\n subschema.dataLevel = it.dataLevel + 1;\n subschema.dataTypes = [];\n it.definedProperties = new Set();\n subschema.parentData = it.data;\n subschema.dataNames = [...it.dataNames, _nextData];\n }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n if (compositeRule !== undefined)\n subschema.compositeRule = compositeRule;\n if (createErrors !== undefined)\n subschema.createErrors = createErrors;\n if (allErrors !== undefined)\n subschema.allErrors = allErrors;\n subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL3N1YnNjaGVtYS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCwyQkFBMkIsR0FBRywyQkFBMkIsR0FBRyxvQkFBb0I7QUFDaEYsa0JBQWtCLG1CQUFPLENBQUMsc0hBQVk7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLDBHQUFTO0FBQ2hDLDRCQUE0QixzRUFBc0U7QUFDbEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxjQUFjLEVBQUUsb0NBQW9DO0FBQ3BHLGtDQUFrQyxpQkFBaUIsR0FBRyxRQUFRO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxjQUFjLEVBQUUsb0NBQW9DLEVBQUUsdUNBQXVDO0FBQzdJLGtDQUFrQyxpQkFBaUIsR0FBRyxRQUFRLEdBQUcsdUNBQXVDO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQiw4Q0FBOEMsK0RBQStEO0FBQzdHO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0MsNkRBQTZELFFBQVEsRUFBRSxxQ0FBcUM7QUFDNUc7QUFDQSxvREFBb0QsVUFBVSxFQUFFLGtFQUFrRTtBQUNsSSwyREFBMkQsU0FBUztBQUNwRTtBQUNBO0FBQ0E7QUFDQSw4RkFBOEY7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0IsMENBQTBDLHVFQUF1RTtBQUNqSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQseUNBQXlDO0FBQ3pDO0FBQ0EsMkJBQTJCO0FBQzNCIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvc3Vic2NoZW1hLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gZ2V0U3Vic2NoZW1hKGl0LCB7IGtleXdvcmQsIHNjaGVtYVByb3AsIHNjaGVtYSwgc2NoZW1hUGF0aCwgZXJyU2NoZW1hUGF0aCwgdG9wU2NoZW1hUmVmIH0pIHtcbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImtleXdvcmRcIiBhbmQgXCJzY2hlbWFcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2ggPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHJldHVybiBzY2hlbWFQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaFtzY2hlbWFQcm9wXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfS8keygwLCB1dGlsXzEuZXNjYXBlRnJhZ21lbnQpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCBlcnJTY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgdG9wU2NoZW1hUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzY2hlbWFQYXRoXCIsIFwiZXJyU2NoZW1hUGF0aFwiIGFuZCBcInRvcFNjaGVtYVJlZlwiIGFyZSByZXF1aXJlZCB3aXRoIFwic2NoZW1hXCInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgc2NoZW1hUGF0aCxcbiAgICAgICAgICAgIHRvcFNjaGVtYVJlZixcbiAgICAgICAgICAgIGVyclNjaGVtYVBhdGgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZWl0aGVyIFwia2V5d29yZFwiIG9yIFwic2NoZW1hXCIgbXVzdCBiZSBwYXNzZWQnKTtcbn1cbmV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gZ2V0U3Vic2NoZW1hO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hRGF0YShzdWJzY2hlbWEsIGl0LCB7IGRhdGFQcm9wLCBkYXRhUHJvcFR5cGU6IGRwVHlwZSwgZGF0YSwgZGF0YVR5cGVzLCBwcm9wZXJ0eU5hbWUgfSkge1xuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJkYXRhXCIgYW5kIFwiZGF0YVByb3BcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBnZW4gfSA9IGl0O1xuICAgIGlmIChkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JQYXRoLCBkYXRhUGF0aEFyciwgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZ2VuLmxldChcImRhdGFcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5kYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApfWAsIHRydWUpO1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgc3Vic2NoZW1hLmVycm9yUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoZGF0YVByb3AsIGRwVHlwZSwgb3B0cy5qc1Byb3BlcnR5U3ludGF4KX1gO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5ID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhUHJvcH1gO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVBhdGhBcnIgPSBbLi4uZGF0YVBhdGhBcnIsIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHldO1xuICAgIH1cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZGF0YSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gZGF0YSA6IGdlbi5sZXQoXCJkYXRhXCIsIGRhdGEsIHRydWUpOyAvLyByZXBsYWNlYWJsZSBpZiB1c2VkIG9uY2U/XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzdWJzY2hlbWEucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICAvLyBUT0RPIHNvbWV0aGluZyBpcyBwb3NzaWJseSB3cm9uZyBoZXJlIHdpdGggbm90IGNoYW5naW5nIHBhcmVudERhdGFQcm9wZXJ0eSBhbmQgbm90IGFwcGVuZGluZyBkYXRhUGF0aEFyclxuICAgIH1cbiAgICBpZiAoZGF0YVR5cGVzKVxuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gZGF0YVR5cGVzO1xuICAgIGZ1bmN0aW9uIGRhdGFDb250ZXh0UHJvcHMoX25leHREYXRhKSB7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhID0gX25leHREYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IFtdO1xuICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGEgPSBpdC5kYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YU5hbWVzID0gWy4uLml0LmRhdGFOYW1lcywgX25leHREYXRhXTtcbiAgICB9XG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHRlbmRTdWJzY2hlbWFEYXRhO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hTW9kZShzdWJzY2hlbWEsIHsganRkRGlzY3JpbWluYXRvciwganRkTWV0YWRhdGEsIGNvbXBvc2l0ZVJ1bGUsIGNyZWF0ZUVycm9ycywgYWxsRXJyb3JzIH0pIHtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY29tcG9zaXRlUnVsZSA9IGNvbXBvc2l0ZVJ1bGU7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY3JlYXRlRXJyb3JzID0gY3JlYXRlRXJyb3JzO1xuICAgIGlmIChhbGxFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmFsbEVycm9ycyA9IGFsbEVycm9ycztcbiAgICBzdWJzY2hlbWEuanRkRGlzY3JpbWluYXRvciA9IGp0ZERpc2NyaW1pbmF0b3I7IC8vIG5vdCBpbmhlcml0ZWRcbiAgICBzdWJzY2hlbWEuanRkTWV0YWRhdGEgPSBqdGRNZXRhZGF0YTsgLy8gbm90IGluaGVyaXRlZFxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXh0ZW5kU3Vic2NoZW1hTW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjaGVtYS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/core.js": /*!*********************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/core.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = __webpack_require__(/*! ./compile/validate */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js\");\nObject.defineProperty(exports, \"KeywordCxt\", ({ enumerable: true, get: function () { return validate_1.KeywordCxt; } }));\nvar codegen_1 = __webpack_require__(/*! ./compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nObject.defineProperty(exports, \"_\", ({ enumerable: true, get: function () { return codegen_1._; } }));\nObject.defineProperty(exports, \"str\", ({ enumerable: true, get: function () { return codegen_1.str; } }));\nObject.defineProperty(exports, \"stringify\", ({ enumerable: true, get: function () { return codegen_1.stringify; } }));\nObject.defineProperty(exports, \"nil\", ({ enumerable: true, get: function () { return codegen_1.nil; } }));\nObject.defineProperty(exports, \"Name\", ({ enumerable: true, get: function () { return codegen_1.Name; } }));\nObject.defineProperty(exports, \"CodeGen\", ({ enumerable: true, get: function () { return codegen_1.CodeGen; } }));\nconst validation_error_1 = __webpack_require__(/*! ./runtime/validation_error */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js\");\nconst ref_error_1 = __webpack_require__(/*! ./compile/ref_error */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js\");\nconst rules_1 = __webpack_require__(/*! ./compile/rules */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js\");\nconst compile_1 = __webpack_require__(/*! ./compile */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js\");\nconst codegen_2 = __webpack_require__(/*! ./compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst resolve_1 = __webpack_require__(/*! ./compile/resolve */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js\");\nconst dataType_1 = __webpack_require__(/*! ./compile/validate/dataType */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js\");\nconst util_1 = __webpack_require__(/*! ./compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst $dataRefSchema = __webpack_require__(/*! ./refs/data.json */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.json\");\nconst uri_1 = __webpack_require__(/*! ./runtime/uri */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n]);\nconst removedOptions = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n const s = o.strict;\n const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n return {\n strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n uriResolver: uriResolver,\n };\n}\nclass Ajv {\n constructor(opts = {}) {\n this.schemas = {};\n this.refs = {};\n this.formats = {};\n this._compilations = new Set();\n this._loading = {};\n this._cache = new Map();\n opts = this.opts = { ...opts, ...requiredOptions(opts) };\n const { es5, lines } = this.opts.code;\n this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n this.logger = getLogger(opts.logger);\n const formatOpt = opts.validateFormats;\n opts.validateFormats = false;\n this.RULES = (0, rules_1.getRules)();\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n this._metaOpts = getMetaSchemaOptions.call(this);\n if (opts.formats)\n addInitialFormats.call(this);\n this._addVocabularies();\n this._addDefaultMetaSchema();\n if (opts.keywords)\n addInitialKeywords.call(this, opts.keywords);\n if (typeof opts.meta == \"object\")\n this.addMetaSchema(opts.meta);\n addInitialSchemas.call(this);\n opts.validateFormats = formatOpt;\n }\n _addVocabularies() {\n this.addKeyword(\"$async\");\n }\n _addDefaultMetaSchema() {\n const { $data, meta, schemaId } = this.opts;\n let _dataRefSchema = $dataRefSchema;\n if (schemaId === \"id\") {\n _dataRefSchema = { ...$dataRefSchema };\n _dataRefSchema.id = _dataRefSchema.$id;\n delete _dataRefSchema.$id;\n }\n if (meta && $data)\n this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n }\n defaultMeta() {\n const { meta, schemaId } = this.opts;\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n }\n validate(schemaKeyRef, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data // to be validated\n ) {\n let v;\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema(schemaKeyRef);\n if (!v)\n throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n }\n else {\n v = this.compile(schemaKeyRef);\n }\n const valid = v(data);\n if (!(\"$async\" in v))\n this.errors = v.errors;\n return valid;\n }\n compile(schema, _meta) {\n const sch = this._addSchema(schema, _meta);\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n compileAsync(schema, meta) {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\");\n }\n const { loadSchema } = this.opts;\n return runCompileAsync.call(this, schema, meta);\n async function runCompileAsync(_schema, _meta) {\n await loadMetaSchema.call(this, _schema.$schema);\n const sch = this._addSchema(_schema, _meta);\n return sch.validate || _compileAsync.call(this, sch);\n }\n async function loadMetaSchema($ref) {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, { $ref }, true);\n }\n }\n async function _compileAsync(sch) {\n try {\n return this._compileSchemaEnv(sch);\n }\n catch (e) {\n if (!(e instanceof ref_error_1.default))\n throw e;\n checkLoaded.call(this, e);\n await loadMissingSchema.call(this, e.missingSchema);\n return _compileAsync.call(this, sch);\n }\n }\n function checkLoaded({ missingSchema: ref, missingRef }) {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n }\n }\n async function loadMissingSchema(ref) {\n const _schema = await _loadSchema.call(this, ref);\n if (!this.refs[ref])\n await loadMetaSchema.call(this, _schema.$schema);\n if (!this.refs[ref])\n this.addSchema(_schema, ref, meta);\n }\n async function _loadSchema(ref) {\n const p = this._loading[ref];\n if (p)\n return p;\n try {\n return await (this._loading[ref] = loadSchema(ref));\n }\n finally {\n delete this._loading[ref];\n }\n }\n }\n // Adds schema to the instance\n addSchema(schema, // If array is passed, `key` will be ignored\n key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ) {\n if (Array.isArray(schema)) {\n for (const sch of schema)\n this.addSchema(sch, undefined, _meta, _validateSchema);\n return this;\n }\n let id;\n if (typeof schema === \"object\") {\n const { schemaId } = this.opts;\n id = schema[schemaId];\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`);\n }\n }\n key = (0, resolve_1.normalizeId)(key || id);\n this._checkUnique(key);\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n return this;\n }\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(schema, key, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ) {\n this.addSchema(schema, key, true, _validateSchema);\n return this;\n }\n // Validate schema against its meta-schema\n validateSchema(schema, throwOrLogError) {\n if (typeof schema == \"boolean\")\n return true;\n let $schema;\n $schema = schema.$schema;\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\");\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\");\n this.errors = null;\n return true;\n }\n const valid = this.validate($schema, schema);\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText();\n if (this.opts.validateSchema === \"log\")\n this.logger.error(message);\n else\n throw new Error(message);\n }\n return valid;\n }\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema(keyRef) {\n let sch;\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n keyRef = sch;\n if (sch === undefined) {\n const { schemaId } = this.opts;\n const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n sch = compile_1.resolveSchema.call(this, root, keyRef);\n if (!sch)\n return;\n this.refs[keyRef] = sch;\n }\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef) {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef);\n this._removeAllSchemas(this.refs, schemaKeyRef);\n return this;\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas);\n this._removeAllSchemas(this.refs);\n this._cache.clear();\n return this;\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef);\n if (typeof sch == \"object\")\n this._cache.delete(sch.schema);\n delete this.schemas[schemaKeyRef];\n delete this.refs[schemaKeyRef];\n return this;\n }\n case \"object\": {\n const cacheKey = schemaKeyRef;\n this._cache.delete(cacheKey);\n let id = schemaKeyRef[this.opts.schemaId];\n if (id) {\n id = (0, resolve_1.normalizeId)(id);\n delete this.schemas[id];\n delete this.refs[id];\n }\n return this;\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\");\n }\n }\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions) {\n for (const def of definitions)\n this.addKeyword(def);\n return this;\n }\n addKeyword(kwdOrDef, def // deprecated\n ) {\n let keyword;\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef;\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n def.keyword = keyword;\n }\n }\n else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef;\n keyword = def.keyword;\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n }\n }\n else {\n throw new Error(\"invalid addKeywords parameters\");\n }\n checkKeyword.call(this, keyword, def);\n if (!def) {\n (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n return this;\n }\n keywordMetaschema.call(this, def);\n const definition = {\n ...def,\n type: (0, dataType_1.getJSONTypes)(def.type),\n schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n };\n (0, util_1.eachItem)(keyword, definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n return this;\n }\n getKeyword(keyword) {\n const rule = this.RULES.all[keyword];\n return typeof rule == \"object\" ? rule.definition : !!rule;\n }\n // Remove keyword\n removeKeyword(keyword) {\n // TODO return type should be Ajv\n const { RULES } = this;\n delete RULES.keywords[keyword];\n delete RULES.all[keyword];\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n if (i >= 0)\n group.rules.splice(i, 1);\n }\n return this;\n }\n // Add format\n addFormat(name, format) {\n if (typeof format == \"string\")\n format = new RegExp(format);\n this.formats[name] = format;\n return this;\n }\n errorsText(errors = this.errors, // optional array of validation errors\n { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n ) {\n if (!errors || errors.length === 0)\n return \"No errors\";\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg);\n }\n $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n const rules = this.RULES.all;\n metaSchema = JSON.parse(JSON.stringify(metaSchema));\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n let keywords = metaSchema;\n for (const seg of segments)\n keywords = keywords[seg];\n for (const key in rules) {\n const rule = rules[key];\n if (typeof rule != \"object\")\n continue;\n const { $data } = rule.definition;\n const schema = keywords[key];\n if ($data && schema)\n keywords[key] = schemaOrData(schema);\n }\n }\n return metaSchema;\n }\n _removeAllSchemas(schemas, regex) {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef];\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef];\n }\n else if (sch && !sch.meta) {\n this._cache.delete(sch.schema);\n delete schemas[keyRef];\n }\n }\n }\n }\n _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n let id;\n const { schemaId } = this.opts;\n if (typeof schema == \"object\") {\n id = schema[schemaId];\n }\n else {\n if (this.opts.jtd)\n throw new Error(\"schema must be object\");\n else if (typeof schema != \"boolean\")\n throw new Error(\"schema must be object or boolean\");\n }\n let sch = this._cache.get(schema);\n if (sch !== undefined)\n return sch;\n baseId = (0, resolve_1.normalizeId)(id || baseId);\n const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n this._cache.set(sch.schema, sch);\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId)\n this._checkUnique(baseId);\n this.refs[baseId] = sch;\n }\n if (validateSchema)\n this.validateSchema(schema, true);\n return sch;\n }\n _checkUnique(id) {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`);\n }\n }\n _compileSchemaEnv(sch) {\n if (sch.meta)\n this._compileMetaSchema(sch);\n else\n compile_1.compileSchema.call(this, sch);\n /* istanbul ignore if */\n if (!sch.validate)\n throw new Error(\"ajv implementation error\");\n return sch.validate;\n }\n _compileMetaSchema(sch) {\n const currentOpts = this.opts;\n this.opts = this._metaOpts;\n try {\n compile_1.compileSchema.call(this, sch);\n }\n finally {\n this.opts = currentOpts;\n }\n }\n}\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nexports[\"default\"] = Ajv;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n for (const key in checkOpts) {\n const opt = key;\n if (opt in options)\n this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n }\n}\nfunction getSchEnv(keyRef) {\n keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n const optsSchemas = this.opts.schemas;\n if (!optsSchemas)\n return;\n if (Array.isArray(optsSchemas))\n this.addSchema(optsSchemas);\n else\n for (const key in optsSchemas)\n this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name];\n if (format)\n this.addFormat(name, format);\n }\n}\nfunction addInitialKeywords(defs) {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs);\n return;\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\");\n for (const keyword in defs) {\n const def = defs[keyword];\n if (!def.keyword)\n def.keyword = keyword;\n this.addKeyword(def);\n }\n}\nfunction getMetaSchemaOptions() {\n const metaOpts = { ...this.opts };\n for (const opt of META_IGNORE_OPTIONS)\n delete metaOpts[opt];\n return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n if (logger === false)\n return noLogs;\n if (logger === undefined)\n return console;\n if (logger.log && logger.warn && logger.error)\n return logger;\n throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n const { RULES } = this;\n (0, util_1.eachItem)(keyword, (kwd) => {\n if (RULES.keywords[kwd])\n throw new Error(`Keyword ${kwd} is already defined`);\n if (!KEYWORD_NAME.test(kwd))\n throw new Error(`Keyword ${kwd} has invalid name`);\n });\n if (!def)\n return;\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function');\n }\n}\nfunction addRule(keyword, definition, dataType) {\n var _a;\n const post = definition === null || definition === void 0 ? void 0 : definition.post;\n if (dataType && post)\n throw new Error('keyword with \"post\" flag cannot have \"type\"');\n const { RULES } = this;\n let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n if (!ruleGroup) {\n ruleGroup = { type: dataType, rules: [] };\n RULES.rules.push(ruleGroup);\n }\n RULES.keywords[keyword] = true;\n if (!definition)\n return;\n const rule = {\n keyword,\n definition: {\n ...definition,\n type: (0, dataType_1.getJSONTypes)(definition.type),\n schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n },\n };\n if (definition.before)\n addBeforeRule.call(this, ruleGroup, rule, definition.before);\n else\n ruleGroup.rules.push(rule);\n RULES.all[keyword] = rule;\n (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule);\n }\n else {\n ruleGroup.rules.push(rule);\n this.logger.warn(`rule ${before} is not defined`);\n }\n}\nfunction keywordMetaschema(def) {\n let { metaSchema } = def;\n if (metaSchema === undefined)\n return;\n if (def.$data && this.opts.$data)\n metaSchema = schemaOrData(metaSchema);\n def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb3JlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWUsR0FBRyxZQUFZLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxTQUFTLEdBQUcsa0JBQWtCO0FBQy9HLGlCQUFpQixtQkFBTyxDQUFDLCtIQUFvQjtBQUM3Qyw4Q0FBNkMsRUFBRSxxQ0FBcUMsaUNBQWlDLEVBQUM7QUFDdEgsZ0JBQWdCLG1CQUFPLENBQUMsNkhBQW1CO0FBQzNDLHFDQUFvQyxFQUFFLHFDQUFxQyx1QkFBdUIsRUFBQztBQUNuRyx1Q0FBc0MsRUFBRSxxQ0FBcUMseUJBQXlCLEVBQUM7QUFDdkcsNkNBQTRDLEVBQUUscUNBQXFDLCtCQUErQixFQUFDO0FBQ25ILHVDQUFzQyxFQUFFLHFDQUFxQyx5QkFBeUIsRUFBQztBQUN2Ryx3Q0FBdUMsRUFBRSxxQ0FBcUMsMEJBQTBCLEVBQUM7QUFDekcsMkNBQTBDLEVBQUUscUNBQXFDLDZCQUE2QixFQUFDO0FBQy9HLDJCQUEyQixtQkFBTyxDQUFDLHlJQUE0QjtBQUMvRCxvQkFBb0IsbUJBQU8sQ0FBQywySEFBcUI7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsbUhBQWlCO0FBQ3pDLGtCQUFrQixtQkFBTyxDQUFDLDZHQUFXO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLDZIQUFtQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyx1SEFBbUI7QUFDN0MsbUJBQW1CLG1CQUFPLENBQUMsMklBQTZCO0FBQ3hELGVBQWUsbUJBQU8sQ0FBQyxpSEFBZ0I7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMsa0hBQWtCO0FBQ2pELGNBQWMsbUJBQU8sQ0FBQywrR0FBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQSxrQkFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLElBQUksV0FBVyxJQUFJLElBQUksZUFBZTtBQUN0RTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVMsWUFBWTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQSx1Q0FBdUMsS0FBSztBQUM1QztBQUNBLHVDQUF1QyxLQUFLO0FBQzVDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLDREQUE0RCxTQUFTO0FBQ3JFO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0EsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgZGF0YSAvLyB0byBiZSB2YWxpZGF0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmdldFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCF2KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gc2NoZW1hIHdpdGgga2V5IG9yIHJlZiBcIiR7c2NoZW1hS2V5UmVmfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5jb21waWxlKHNjaGVtYUtleVJlZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB2KGRhdGEpO1xuICAgICAgICBpZiAoIShcIiRhc3luY1wiIGluIHYpKVxuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB2LmVycm9ycztcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBjb21waWxlKHNjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEpO1xuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICBjb21waWxlQXN5bmMoc2NoZW1hLCBtZXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmxvYWRTY2hlbWEgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2FkU2NoZW1hIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2hlbWEsIG1ldGEpO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiBydW5Db21waWxlQXN5bmMoX3NjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShfc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlIHx8IF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hKCRyZWYpIHtcbiAgICAgICAgICAgIGlmICgkcmVmICYmICF0aGlzLmdldFNjaGVtYSgkcmVmKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHsgJHJlZiB9LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgcmVmX2Vycm9yXzEuZGVmYXVsdCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWlzc2luZ1NjaGVtYS5jYWxsKHRoaXMsIGUubWlzc2luZ1NjaGVtYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKHsgbWlzc2luZ1NjaGVtYTogcmVmLCBtaXNzaW5nUmVmIH0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnNbcmVmXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW55U2NoZW1hICR7cmVmfSBpcyBsb2FkZWQgYnV0ICR7bWlzc2luZ1JlZn0gY2Fubm90IGJlIHJlc29sdmVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1pc3NpbmdTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gYXdhaXQgX2xvYWRTY2hlbWEuY2FsbCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKF9zY2hlbWEsIHJlZiwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2xvYWRTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgaWYgKHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCAodGhpcy5fbG9hZGluZ1tyZWZdID0gbG9hZFNjaGVtYShyZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWRkcyBzY2hlbWEgdG8gdGhlIGluc3RhbmNlXG4gICAgYWRkU2NoZW1hKHNjaGVtYSwgLy8gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCB3aWxsIGJlIGlnbm9yZWRcbiAgICBrZXksIC8vIE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gICAgX21ldGEsIC8vIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLiBVc2VkIGludGVybmFsbHksIG9wdGlvbiB2YWxpZGF0ZVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgICkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaCBvZiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoLCB1bmRlZmluZWQsIF9tZXRhLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGlkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSAke3NjaGVtYUlkfSBtdXN0IGJlIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleSB8fCBpZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGtleSk7XG4gICAgICAgIHRoaXMuc2NoZW1hc1trZXldID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEsIGtleSwgX3ZhbGlkYXRlU2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBzY2hlbWEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgb3RoZXIgc2NoZW1hc1xuICAgIC8vIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gICAgYWRkTWV0YVNjaGVtYShzY2hlbWEsIGtleSwgLy8gc2NoZW1hIGtleVxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gICAgKSB7XG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaGVtYSwga2V5LCB0cnVlLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gIFZhbGlkYXRlIHNjaGVtYSBhZ2FpbnN0IGl0cyBtZXRhLXNjaGVtYVxuICAgIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCAkc2NoZW1hO1xuICAgICAgICAkc2NoZW1hID0gc2NoZW1hLiRzY2hlbWE7XG4gICAgICAgIGlmICgkc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICRzY2hlbWEgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgICRzY2hlbWEgPSAkc2NoZW1hIHx8IHRoaXMub3B0cy5kZWZhdWx0TWV0YSB8fCB0aGlzLmRlZmF1bHRNZXRhKCk7XG4gICAgICAgIGlmICghJHNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1ldGEtc2NoZW1hIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcInNjaGVtYSBpcyBpbnZhbGlkOiBcIiArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICAvLyBHZXQgY29tcGlsZWQgc2NoZW1hIGJ5IGBrZXlgIG9yIGByZWZgLlxuICAgIC8vIChga2V5YCB0aGF0IHdhcyBwYXNzZWQgdG8gYGFkZFNjaGVtYWAgb3IgZnVsbCBzY2hlbWEgcmVmZXJlbmNlIC0gYHNjaGVtYS4kaWRgIG9yIHJlc29sdmVkIGlkKVxuICAgIGdldFNjaGVtYShrZXlSZWYpIHtcbiAgICAgICAgbGV0IHNjaDtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywga2V5UmVmKSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGtleVJlZiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBjb25zdCByb290ID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWE6IHt9LCBzY2hlbWFJZCB9KTtcbiAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwga2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghc2NoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucmVmc1trZXlSZWZdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBjYWNoZWQgc2NoZW1hKHMpLlxuICAgIC8vIElmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBFdmVuIGlmIHNjaGVtYSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIHNjaGVtYXMgaXQgc3RpbGwgY2FuIGJlIHJlbW92ZWQgYXMgb3RoZXIgc2NoZW1hcyBoYXZlIGxvY2FsIHJlZmVyZW5jZXMuXG4gICAgcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICAgICAgICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlb2Ygc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gc2NoZW1hS2V5UmVmO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gc2NoZW1hS2V5UmVmW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tpZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYucmVtb3ZlU2NoZW1hOiBpbnZhbGlkIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGQgXCJ2b2NhYnVsYXJ5XCIgLSBhIGNvbGxlY3Rpb24gb2Yga2V5d29yZHNcbiAgICBhZGRWb2NhYnVsYXJ5KGRlZmluaXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRLZXl3b3JkKGt3ZE9yRGVmLCBkZWYgLy8gZGVwcmVjYXRlZFxuICAgICkge1xuICAgICAgICBsZXQga2V5d29yZDtcbiAgICAgICAgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBrZXl3b3JkID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcInRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQsIHNlZSBkb2NzIGZvciBhZGRLZXl3b3JkXCIpO1xuICAgICAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJvYmplY3RcIiAmJiBkZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBrZXl3b3JkID0gZGVmLmtleXdvcmQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXl3b3JkKSAmJiAha2V5d29yZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGFkZEtleXdvcmRzIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tLZXl3b3JkLmNhbGwodGhpcywga2V5d29yZCwgZGVmKTtcbiAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrd2QpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGtleXdvcmRNZXRhc2NoZW1hLmNhbGwodGhpcywgZGVmKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYuc2NoZW1hVHlwZSksXG4gICAgICAgIH07XG4gICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIGRlZmluaXRpb24udHlwZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gKGspID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uKVxuICAgICAgICAgICAgOiAoaykgPT4gZGVmaW5pdGlvbi50eXBlLmZvckVhY2goKHQpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uLCB0KSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLlJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgPyBydWxlLmRlZmluaXRpb24gOiAhIXJ1bGU7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBrZXl3b3JkXG4gICAgcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIC8vIFRPRE8gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIEFqdlxuICAgICAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICAgICBkZWxldGUgUlVMRVMua2V5d29yZHNba2V5d29yZF07XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBncm91cC5ydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHJ1bGUua2V5d29yZCA9PT0ga2V5d29yZCk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGdyb3VwLnJ1bGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIGZvcm1hdFxuICAgIGFkZEZvcm1hdChuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGZvcm1hdCA9IG5ldyBSZWdFeHAoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5mb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXJyb3JzVGV4dChlcnJvcnMgPSB0aGlzLmVycm9ycywgLy8gb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB7IHNlcGFyYXRvciA9IFwiLCBcIiwgZGF0YVZhciA9IFwiZGF0YVwiIH0gPSB7fSAvLyBvcHRpb25hbCBvcHRpb25zIHdpdGggcHJvcGVydGllcyBgc2VwYXJhdG9yYCBhbmQgYGRhdGFWYXJgXG4gICAgKSB7XG4gICAgICAgIGlmICghZXJyb3JzIHx8IGVycm9ycy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gXCJObyBlcnJvcnNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yc1xuICAgICAgICAgICAgLm1hcCgoZSkgPT4gYCR7ZGF0YVZhcn0ke2UuaW5zdGFuY2VQYXRofSAke2UubWVzc2FnZX1gKVxuICAgICAgICAgICAgLnJlZHVjZSgodGV4dCwgbXNnKSA9PiB0ZXh0ICsgc2VwYXJhdG9yICsgbXNnKTtcbiAgICB9XG4gICAgJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5SVUxFUy5hbGw7XG4gICAgICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICAgICAgZm9yIChjb25zdCBqc29uUG9pbnRlciBvZiBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIikuc2xpY2UoMSk7IC8vIGZpcnN0IHNlZ21lbnQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBsZXQga2V5d29yZHMgPSBtZXRhU2NoZW1hO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpXG4gICAgICAgICAgICAgICAga2V5d29yZHMgPSBrZXl3b3Jkc1tzZWddO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyAkZGF0YSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGtleXdvcmRzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCRkYXRhICYmIHNjaGVtYSlcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHNba2V5XSA9IHNjaGVtYU9yRGF0YShzY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXRhU2NoZW1hO1xuICAgIH1cbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzY2hlbWFzLCByZWdleCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICBpZiAoIXJlZ2V4IHx8IHJlZ2V4LnRlc3Qoa2V5UmVmKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoICYmICFzY2gubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRTY2hlbWEoc2NoZW1hLCBtZXRhLCBiYXNlSWQsIHZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hLCBhZGRTY2hlbWEgPSB0aGlzLm9wdHMuYWRkVXNlZFNjaGVtYSkge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5qdGQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3Qgb3IgYm9vbGVhblwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2NoID0gdGhpcy5fY2FjaGUuZ2V0KHNjaGVtYSk7XG4gICAgICAgIGlmIChzY2ggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkIHx8IGJhc2VJZCk7XG4gICAgICAgIGNvbnN0IGxvY2FsUmVmcyA9IHJlc29sdmVfMS5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcywgc2NoZW1hLCBiYXNlSWQpO1xuICAgICAgICBzY2ggPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIG1ldGEsIGJhc2VJZCwgbG9jYWxSZWZzIH0pO1xuICAgICAgICB0aGlzLl9jYWNoZS5zZXQoc2NoLnNjaGVtYSwgc2NoKTtcbiAgICAgICAgaWYgKGFkZFNjaGVtYSAmJiAhYmFzZUlkLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF0bSBpdCBpcyBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBzY2hlbWFzIHdpdGhvdXQgaWQgKGluc3RlYWQgb2Ygbm90IGFkZGluZyB0aGVtKVxuICAgICAgICAgICAgaWYgKGJhc2VJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShiYXNlSWQpO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2Jhc2VJZF0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKVxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBfY2hlY2tVbmlxdWUoaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NoZW1hc1tpZF0gfHwgdGhpcy5yZWZzW2lkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgXCIke2lkfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSB7XG4gICAgICAgIGlmIChzY2gubWV0YSlcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghc2NoLnZhbGlkYXRlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlO1xuICAgIH1cbiAgICBfY29tcGlsZU1ldGFTY2hlbWEoc2NoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRzID0gdGhpcy5vcHRzO1xuICAgICAgICB0aGlzLm9wdHMgPSB0aGlzLl9tZXRhT3B0cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMub3B0cyA9IGN1cnJlbnRPcHRzO1xuICAgICAgICB9XG4gICAgfVxufVxuQWp2LlZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0O1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IHJlZl9lcnJvcl8xLmRlZmF1bHQ7XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG5mdW5jdGlvbiBjaGVja09wdGlvbnMoY2hlY2tPcHRzLCBvcHRpb25zLCBtc2csIGxvZyA9IFwiZXJyb3JcIikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoZWNrT3B0cykge1xuICAgICAgICBjb25zdCBvcHQgPSBrZXk7XG4gICAgICAgIGlmIChvcHQgaW4gb3B0aW9ucylcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyW2xvZ10oYCR7bXNnfTogb3B0aW9uICR7a2V5fS4gJHtjaGVja09wdHNbb3B0XX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTY2hFbnYoa2V5UmVmKSB7XG4gICAga2V5UmVmID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5UmVmKTsgLy8gVE9ETyB0ZXN0cyBmYWlsIHdpdGhvdXQgdGhpcyBsaW5lXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hc1trZXlSZWZdIHx8IHRoaXMucmVmc1trZXlSZWZdO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbFNjaGVtYXMoKSB7XG4gICAgY29uc3Qgb3B0c1NjaGVtYXMgPSB0aGlzLm9wdHMuc2NoZW1hcztcbiAgICBpZiAoIW9wdHNTY2hlbWFzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0c1NjaGVtYXMpKVxuICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hcyk7XG4gICAgZWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRzU2NoZW1hcylcbiAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzW2tleV0sIGtleSk7XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cygpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5vcHRzLmZvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5vcHRzLmZvcm1hdHNbbmFtZV07XG4gICAgICAgIGlmIChmb3JtYXQpXG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxLZXl3b3JkcyhkZWZzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmcykpIHtcbiAgICAgICAgdGhpcy5hZGRWb2NhYnVsYXJ5KGRlZnMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLndhcm4oXCJrZXl3b3JkcyBvcHRpb24gYXMgbWFwIGlzIGRlcHJlY2F0ZWQsIHBhc3MgYXJyYXlcIik7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIGRlZnMpIHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKCFkZWYua2V5d29yZClcbiAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YU9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIE1FVEFfSUdOT1JFX09QVElPTlMpXG4gICAgICAgIGRlbGV0ZSBtZXRhT3B0c1tvcHRdO1xuICAgIHJldHVybiBtZXRhT3B0cztcbn1cbmNvbnN0IG5vTG9ncyA9IHsgbG9nKCkgeyB9LCB3YXJuKCkgeyB9LCBlcnJvcigpIHsgfSB9O1xuZnVuY3Rpb24gZ2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgIGlmIChsb2dnZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbm9Mb2dzO1xuICAgIGlmIChsb2dnZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGNvbnNvbGU7XG4gICAgaWYgKGxvZ2dlci5sb2cgJiYgbG9nZ2VyLndhcm4gJiYgbG9nZ2VyLmVycm9yKVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIHRocm93IG5ldyBFcnJvcihcImxvZ2dlciBtdXN0IGltcGxlbWVudCBsb2csIHdhcm4gYW5kIGVycm9yIG1ldGhvZHNcIik7XG59XG5jb25zdCBLRVlXT1JEX05BTUUgPSAvXlthLXpfJF1bYS16MC05XyQ6LV0qJC9pO1xuZnVuY3Rpb24gY2hlY2tLZXl3b3JkKGtleXdvcmQsIGRlZikge1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4ge1xuICAgICAgICBpZiAoUlVMRVMua2V5d29yZHNba3dkXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaXMgYWxyZWFkeSBkZWZpbmVkYCk7XG4gICAgICAgIGlmICghS0VZV09SRF9OQU1FLnRlc3Qoa3dkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaGFzIGludmFsaWQgbmFtZWApO1xuICAgIH0pO1xuICAgIGlmICghZGVmKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiAhKFwiY29kZVwiIGluIGRlZiB8fCBcInZhbGlkYXRlXCIgaW4gZGVmKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRkYXRhIGtleXdvcmQgbXVzdCBoYXZlIFwiY29kZVwiIG9yIFwidmFsaWRhdGVcIiBmdW5jdGlvbicpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZFJ1bGUoa2V5d29yZCwgZGVmaW5pdGlvbiwgZGF0YVR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcG9zdCA9IGRlZmluaXRpb24gPT09IG51bGwgfHwgZGVmaW5pdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmaW5pdGlvbi5wb3N0O1xuICAgIGlmIChkYXRhVHlwZSAmJiBwb3N0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgd2l0aCBcInBvc3RcIiBmbGFnIGNhbm5vdCBoYXZlIFwidHlwZVwiJyk7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICBsZXQgcnVsZUdyb3VwID0gcG9zdCA/IFJVTEVTLnBvc3QgOiBSVUxFUy5ydWxlcy5maW5kKCh7IHR5cGU6IHQgfSkgPT4gdCA9PT0gZGF0YVR5cGUpO1xuICAgIGlmICghcnVsZUdyb3VwKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgICBSVUxFUy5ydWxlcy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBpZiAoIWRlZmluaXRpb24pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnNjaGVtYVR5cGUpLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRlZmluaXRpb24uYmVmb3JlKVxuICAgICAgICBhZGRCZWZvcmVSdWxlLmNhbGwodGhpcywgcnVsZUdyb3VwLCBydWxlLCBkZWZpbml0aW9uLmJlZm9yZSk7XG4gICAgZWxzZVxuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSBydWxlO1xuICAgIChfYSA9IGRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goKGt3ZCkgPT4gdGhpcy5hZGRLZXl3b3JkKGt3ZCkpO1xufVxuZnVuY3Rpb24gYWRkQmVmb3JlUnVsZShydWxlR3JvdXAsIHJ1bGUsIGJlZm9yZSkge1xuICAgIGNvbnN0IGkgPSBydWxlR3JvdXAucnVsZXMuZmluZEluZGV4KChfcnVsZSkgPT4gX3J1bGUua2V5d29yZCA9PT0gYmVmb3JlKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5zcGxpY2UoaSwgMCwgcnVsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcnVsZSAke2JlZm9yZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBrZXl3b3JkTWV0YXNjaGVtYShkZWYpIHtcbiAgICBsZXQgeyBtZXRhU2NoZW1hIH0gPSBkZWY7XG4gICAgaWYgKG1ldGFTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgdGhpcy5vcHRzLiRkYXRhKVxuICAgICAgICBtZXRhU2NoZW1hID0gc2NoZW1hT3JEYXRhKG1ldGFTY2hlbWEpO1xuICAgIGRlZi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbn1cbmNvbnN0ICRkYXRhUmVmID0ge1xuICAgICRyZWY6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jXCIsXG59O1xuZnVuY3Rpb24gc2NoZW1hT3JEYXRhKHNjaGVtYSkge1xuICAgIHJldHVybiB7IGFueU9mOiBbc2NoZW1hLCAkZGF0YVJlZl0gfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/core.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.json": /*!****************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.json ***! \****************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; module.exports = /*#__PURE__*/JSON.parse('{"$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON AnySchema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}'); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json": /*!********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json ***! \********************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; module.exports = /*#__PURE__*/JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}'); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js": /*!******************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = __webpack_require__(/*! fast-deep-equal */ \"(app-pages-browser)/./node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports[\"default\"] = equal;\n//# sourceMappingURL=equal.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL2VxdWFsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLDZIQUFpQjtBQUN2QztBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS9lcXVhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9pc3N1ZXMvODg5XG5jb25zdCBlcXVhbCA9IHJlcXVpcmUoXCJmYXN0LWRlZXAtZXF1YWxcIik7XG5lcXVhbC5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL2VxdWFsXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXF1YWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcXVhbC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js": /*!***********************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js ***! \***********************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n const len = str.length;\n let length = 0;\n let pos = 0;\n let value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xfc00) === 0xdc00)\n pos++; // low surrogate\n }\n }\n return length;\n}\nexports[\"default\"] = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2Y7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzIC0gcHVueWNvZGUudWNzMi5kZWNvZGVcbmZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gICAgY29uc3QgbGVuID0gc3RyLmxlbmd0aDtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBsZXQgdmFsdWU7XG4gICAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgICAgICBsZW5ndGgrKztcbiAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MrKyk7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAweGQ4MDAgJiYgdmFsdWUgPD0gMHhkYmZmICYmIHBvcyA8IGxlbikge1xuICAgICAgICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgICAgICBpZiAoKHZhbHVlICYgMHhmYzAwKSA9PT0gMHhkYzAwKVxuICAgICAgICAgICAgICAgIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHVjczJsZW5ndGg7XG51Y3MybGVuZ3RoLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aFwiKS5kZWZhdWx0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVjczJsZW5ndGguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js": /*!****************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js ***! \****************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst uri = __webpack_require__(/*! fast-uri */ \"(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports[\"default\"] = uri;\n//# sourceMappingURL=uri.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VyaS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxZQUFZLG1CQUFPLENBQUMsd0dBQVU7QUFDOUI7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdXJpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXJpID0gcmVxdWlyZShcImZhc3QtdXJpXCIpO1xudXJpLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdXJpXCIpLmRlZmF1bHQnO1xuZXhwb3J0cy5kZWZhdWx0ID0gdXJpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJpLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js": /*!*****************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js ***! \*****************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nclass ValidationError extends Error {\n constructor(errors) {\n super(\"validation failed\");\n this.errors = errors;\n this.ajv = this.validation = true;\n }\n}\nexports[\"default\"] = ValidationError;\n//# sourceMappingURL=validation_error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcnMpIHtcbiAgICAgICAgc3VwZXIoXCJ2YWxpZGF0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIHRoaXMuYWp2ID0gdGhpcy52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBWYWxpZGF0aW9uRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0aW9uX2Vycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": /*!********************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js ***! \********************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"additionalItems\",\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { parentSchema, it } = cxt;\n const { items } = parentSchema;\n if (!Array.isArray(items)) {\n (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n return;\n }\n validateAdditionalItems(cxt, items);\n },\n};\nfunction validateAdditionalItems(cxt, items) {\n const { gen, schema, data, keyword, it } = cxt;\n it.items = true;\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n if (schema === false) {\n cxt.setParams({ len: items.length });\n cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n }\n else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n cxt.ok(valid);\n }\n function validateItems(valid) {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n if (!it.allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n });\n }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports[\"default\"] = def;\n//# sourceMappingURL=additionalItems.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsSXRlbXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsK0JBQStCO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLGlJQUF1QjtBQUNqRCxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDO0FBQ0EsZ0JBQWdCLFVBQVUsT0FBTyxtREFBbUQsS0FBSztBQUN6RixlQUFlLFVBQVUsT0FBTyx3QkFBd0IsU0FBUyxLQUFLO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVksaUNBQWlDO0FBQzdDO0FBQ0EscURBQXFELEtBQUs7QUFDMUQ7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDLHFDQUFxQyxLQUFLLEtBQUssYUFBYTtBQUM1RDtBQUNBO0FBQ0EsMkRBQTJELEtBQUssS0FBSyxhQUFhLElBQUk7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxREFBcUQ7QUFDakY7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYWRkaXRpb25hbEl0ZW1zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGl0ZW1zIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgJ1wiYWRkaXRpb25hbEl0ZW1zXCIgaXMgaWdub3JlZCB3aGVuIFwiaXRlbXNcIiBpcyBub3QgYW4gYXJyYXkgb2Ygc2NoZW1hcycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMoY3h0LCBpdGVtcykge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBsZW46IGl0ZW1zLmxlbmd0aCB9KTtcbiAgICAgICAgY3h0LnBhc3MoKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59IDw9ICR7aXRlbXMubGVuZ3RofWApO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLnZhcihcInZhbGlkXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHZhbGlkYXRlSXRlbXModmFsaWQpKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyh2YWxpZCkge1xuICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIGl0ZW1zLmxlbmd0aCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIGRhdGFQcm9wOiBpLCBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zID0gdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGRpdGlvbmFsSXRlbXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": /*!*************************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js ***! \*************************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst names_1 = __webpack_require__(/*! ../../compile/names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: \"must NOT have additional properties\",\n params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n /* istanbul ignore if */\n if (!errsCount)\n throw new Error(\"ajv implementation error\");\n const { allErrors, opts } = it;\n it.props = true;\n if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n return;\n const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n checkAdditionalProperties();\n cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n function checkAdditionalProperties() {\n gen.forIn(\"key\", data, (key) => {\n if (!props.length && !patProps.length)\n additionalPropertyCode(key);\n else\n gen.if(isAdditional(key), () => additionalPropertyCode(key));\n });\n }\n function isAdditional(key) {\n let definedProp;\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n }\n else if (props.length) {\n definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n }\n else {\n definedProp = codegen_1.nil;\n }\n if (patProps.length) {\n definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n }\n return (0, codegen_1.not)(definedProp);\n }\n function deleteAdditional(key) {\n gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n }\n function additionalPropertyCode(key) {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key);\n return;\n }\n if (schema === false) {\n cxt.setParams({ additionalProperty: key });\n cxt.error();\n if (!allErrors)\n gen.break();\n return;\n }\n if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.name(\"valid\");\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.reset();\n deleteAdditional(key);\n });\n }\n else {\n applyAdditionalSchema(key, valid);\n if (!allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n }\n }\n function applyAdditionalSchema(key, valid, errors) {\n const subschema = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: util_1.Type.Str,\n };\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n });\n }\n cxt.subschema(subschema, valid);\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=additionalProperties.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlLG1CQUFPLENBQUMsK0dBQVM7QUFDaEMsa0JBQWtCLG1CQUFPLENBQUMsaUlBQXVCO0FBQ2pELGdCQUFnQixtQkFBTyxDQUFDLHVIQUFxQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDO0FBQ0E7QUFDQSxlQUFlLFFBQVEsd0JBQXdCLHNCQUFzQiwyQkFBMkI7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlEQUFpRDtBQUNqRTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxXQUFXLE1BQU0sdUJBQXVCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0YsS0FBSyxNQUFNLEVBQUU7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdHQUF3RywrQkFBK0IsUUFBUSxJQUFJO0FBQ25KO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEtBQUssR0FBRyxJQUFJO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHlCQUF5QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2FkZGl0aW9uYWxQcm9wZXJ0eTogJHtwYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5fX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogW1wib2JqZWN0XCJdLFxuICAgIHNjaGVtYVR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgYWxsb3dVbmRlZmluZWQ6IHRydWUsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBkYXRhLCBlcnJzQ291bnQsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWVycnNDb3VudClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgeyBhbGxFcnJvcnMsIG9wdHMgfSA9IGl0O1xuICAgICAgICBpdC5wcm9wcyA9IHRydWU7XG4gICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgIT09IFwiYWxsXCIgJiYgKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHBhdFByb3BzID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShwYXJlbnRTY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO1xuICAgICAgICBjaGVja0FkZGl0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGN4dC5vaygoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBZGRpdGlvbmFsUHJvcGVydGllcygpIHtcbiAgICAgICAgICAgIGdlbi5mb3JJbihcImtleVwiLCBkYXRhLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wcy5sZW5ndGggJiYgIXBhdFByb3BzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKGlzQWRkaXRpb25hbChrZXkpLCAoKSA9PiBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgbGV0IGRlZmluZWRQcm9wO1xuICAgICAgICAgICAgaWYgKHByb3BzLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIG1heWJlIGFuIG9wdGlvbiBpbnN0ZWFkIG9mIGhhcmQtY29kZWQgOD9cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wc1NjaGVtYSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBwYXJlbnRTY2hlbWEucHJvcGVydGllcywgXCJwcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVfMS5pc093blByb3BlcnR5KShnZW4sIHByb3BzU2NoZW1hLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZWdlbl8xLm9yKSguLi5wcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7a2V5fSA9PT0gJHtwfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gY29kZWdlbl8xLm5pbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRQcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlZ2VuXzEub3IpKGRlZmluZWRQcm9wLCAuLi5wYXRQcm9wcy5tYXAoKHApID0+ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHApfS50ZXN0KCR7a2V5fSlgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5ub3QpKGRlZmluZWRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWxldGVBZGRpdGlvbmFsKGtleSkge1xuICAgICAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgZGVsZXRlICR7ZGF0YX1bJHtrZXl9XWApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KSB7XG4gICAgICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImFsbFwiIHx8IChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgJiYgc2NoZW1hID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVBZGRpdGlvbmFsKGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgYWRkaXRpb25hbFByb3BlcnR5OiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIGdlbi5icmVhaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiZmFpbGluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUFkZGl0aW9uYWwoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQsIGVycm9ycykge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuU3RyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdWJzY2hlbWEsIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoc3Vic2NoZW1hLCB2YWxpZCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js": /*!**********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js ***! \**********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst def = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt) {\n const { gen, schema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const valid = gen.name(\"valid\");\n schema.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n cxt.ok(valid);\n cxt.mergeEvaluated(schCxt);\n });\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=allOf.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbGxPZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxpQ0FBaUM7QUFDNUU7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FsbE9mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFsbE9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBzY2hlbWEuZm9yRWFjaCgoc2NoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwiYWxsT2ZcIiwgc2NoZW1hUHJvcDogaSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsT2YuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js": /*!**********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js ***! \**********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst def = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: code_1.validateUnion,\n error: { message: \"must match a schema in anyOf\" },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=anyOf.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbnlPZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlLG1CQUFPLENBQUMsK0dBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEseUNBQXlDO0FBQ3REO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbnlPZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYW55T2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZTogY29kZV8xLnZhbGlkYXRlVW5pb24sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGEgc2NoZW1hIGluIGFueU9mXCIgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbnlPZi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js": /*!*************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js ***! \*************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: ({ params: { min, max } }) => max === undefined\n ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n let min;\n let max;\n const { minContains, maxContains } = parentSchema;\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains;\n max = maxContains;\n }\n else {\n min = 1;\n }\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n cxt.setParams({ min, max });\n if (max === undefined && min === 0) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n return;\n }\n if (max !== undefined && min > max) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n cxt.fail();\n return;\n }\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n let cond = (0, codegen_1._) `${len} >= ${min}`;\n if (max !== undefined)\n cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n cxt.pass(cond);\n return;\n }\n it.items = true;\n const valid = gen.name(\"valid\");\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()));\n }\n else if (min === 0) {\n gen.let(valid, true);\n if (max !== undefined)\n gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n }\n else {\n gen.let(valid, false);\n validateItemsWithCount();\n }\n cxt.result(valid, () => cxt.reset());\n function validateItemsWithCount() {\n const schValid = gen.name(\"_valid\");\n const count = gen.let(\"count\", 0);\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n }\n function validateItems(_valid, block) {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword: \"contains\",\n dataProp: i,\n dataPropType: util_1.Type.Num,\n compositeRule: true,\n }, _valid);\n block();\n });\n }\n function checkLimits(count) {\n gen.code((0, codegen_1._) `${count}++`);\n if (max === undefined) {\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n }\n else {\n gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n if (min === 1)\n gen.assign(valid, true);\n else\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n }\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=contains.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9jb250YWlucy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQztBQUNBLGdCQUFnQixVQUFVLFlBQVk7QUFDdEMsc0RBQXNELEtBQUs7QUFDM0Qsc0RBQXNELEtBQUssbUJBQW1CLEtBQUs7QUFDbkYsZUFBZSxVQUFVLFlBQVksNENBQTRDLGVBQWUsS0FBSyx1QkFBdUIsZUFBZSxJQUFJLGlCQUFpQixLQUFLO0FBQ3JLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQ0FBc0M7QUFDdEQ7QUFDQTtBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsS0FBSztBQUM5RCx3QkFBd0IsVUFBVTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxLQUFLLEtBQUssSUFBSTtBQUN6RDtBQUNBLDJDQUEyQyxNQUFNLEtBQUssS0FBSyxLQUFLLElBQUk7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxLQUFLO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EseUNBQXlDLE1BQU07QUFDL0M7QUFDQSwyQ0FBMkMsT0FBTyxLQUFLLElBQUk7QUFDM0Q7QUFDQTtBQUNBLDJDQUEyQyxPQUFPLElBQUksSUFBSTtBQUMxRDtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsT0FBTyxLQUFLLElBQUk7QUFDL0Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvY29udGFpbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaW4sIG1heCB9IH0pID0+IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IHZhbGlkIGl0ZW0ocylgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW59IGFuZCBubyBtb3JlIHRoYW4gJHttYXh9IHZhbGlkIGl0ZW0ocylgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IG1pbiwgbWF4IH0gfSkgPT4gbWF4ID09PSB1bmRlZmluZWQgPyAoMCwgY29kZWdlbl8xLl8pIGB7bWluQ29udGFpbnM6ICR7bWlufX1gIDogKDAsIGNvZGVnZW5fMS5fKSBge21pbkNvbnRhaW5zOiAke21pbn0sIG1heENvbnRhaW5zOiAke21heH19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgbGV0IG1pbjtcbiAgICAgICAgbGV0IG1heDtcbiAgICAgICAgY29uc3QgeyBtaW5Db250YWlucywgbWF4Q29udGFpbnMgfSA9IHBhcmVudFNjaGVtYTtcbiAgICAgICAgaWYgKGl0Lm9wdHMubmV4dCkge1xuICAgICAgICAgICAgbWluID0gbWluQ29udGFpbnMgPT09IHVuZGVmaW5lZCA/IDEgOiBtaW5Db250YWlucztcbiAgICAgICAgICAgIG1heCA9IG1heENvbnRhaW5zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWluID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pbiwgbWF4IH0pO1xuICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQgJiYgbWluID09PSAwKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIm1pbkNvbnRhaW5zXCIgPT0gMCB3aXRob3V0IFwibWF4Q29udGFpbnNcIjogXCJjb250YWluc1wiIGtleXdvcmQgaWdub3JlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBtaW4gPiBtYXgpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwibWluQ29udGFpbnNcIiA+IFwibWF4Q29udGFpbnNcIiBpcyBhbHdheXMgaW52YWxpZGApO1xuICAgICAgICAgICAgY3h0LmZhaWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGxldCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59ID49ICR7bWlufWA7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtsZW59IDw9ICR7bWF4fWA7XG4gICAgICAgICAgICBjeHQucGFzcyhjb25kKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkICYmIG1pbiA9PT0gMSkge1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtcyh2YWxpZCwgKCkgPT4gZ2VuLmlmKHZhbGlkLCAoKSA9PiBnZW4uYnJlYWsoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoID4gMGAsIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmxldCh2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtc1dpdGhDb3VudCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IGdlbi5sZXQoXCJjb3VudFwiLCAwKTtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXMoc2NoVmFsaWQsICgpID0+IGdlbi5pZihzY2hWYWxpZCwgKCkgPT4gY2hlY2tMaW1pdHMoY291bnQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhfdmFsaWQsIGJsb2NrKSB7XG4gICAgICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIDAsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJjb250YWluc1wiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSwgX3ZhbGlkKTtcbiAgICAgICAgICAgICAgICBibG9jaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMaW1pdHMoY291bnQpIHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7Y291bnR9KytgKTtcbiAgICAgICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKS5icmVhaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+ICR7bWF4fWAsICgpID0+IGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpKTtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSAxKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSA+PSAke21pbn1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRhaW5zLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js": /*!*****************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js ***! \*****************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nexports.error = {\n message: ({ params: { property, depsCount, deps } }) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n },\n params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error: exports.error,\n code(cxt) {\n const [propDeps, schDeps] = splitDependencies(cxt);\n validatePropertyDeps(cxt, propDeps);\n validateSchemaDeps(cxt, schDeps);\n },\n};\nfunction splitDependencies({ schema }) {\n const propertyDeps = {};\n const schemaDeps = {};\n for (const key in schema) {\n if (key === \"__proto__\")\n continue;\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n deps[key] = schema[key];\n }\n return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n const { gen, data, it } = cxt;\n if (Object.keys(propertyDeps).length === 0)\n return;\n const missing = gen.let(\"missing\");\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop];\n if (deps.length === 0)\n continue;\n const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n });\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n (0, code_1.checkReportMissingProp)(cxt, depProp);\n }\n });\n }\n else {\n gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n for (const prop in schemaDeps) {\n if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n continue;\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n cxt.mergeValidEvaluated(schCxt, valid);\n }, () => gen.var(valid, true) // TODO var\n );\n cxt.ok(valid);\n }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports[\"default\"] = def;\n//# sourceMappingURL=dependencies.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9kZXBlbmRlbmNpZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsMEJBQTBCLEdBQUcsNEJBQTRCLEdBQUcsYUFBYTtBQUN6RSxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsK0dBQVM7QUFDaEMsYUFBYTtBQUNiLGdCQUFnQixVQUFVLDZCQUE2QjtBQUN2RDtBQUNBLCtDQUErQyxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsVUFBVTtBQUMvRixLQUFLO0FBQ0wsZUFBZSxVQUFVLDhDQUE4Qyx3QkFBd0IsWUFBWSxTQUFTO0FBQ3BILHVCQUF1QixnQkFBZ0I7QUFDdkMsaUJBQWlCLFVBQVU7QUFDM0IsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkJBQTZCLFFBQVE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSx1Q0FBdUMsYUFBYSxNQUFNLGlEQUFpRDtBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywyQkFBMkI7QUFDdEU7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9kZXBlbmRlbmNpZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlU2NoZW1hRGVwcyA9IGV4cG9ydHMudmFsaWRhdGVQcm9wZXJ0eURlcHMgPSBleHBvcnRzLmVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmV4cG9ydHMuZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IHByb3BlcnR5LCBkZXBzQ291bnQsIGRlcHMgfSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5X2llcyA9IGRlcHNDb3VudCA9PT0gMSA/IFwicHJvcGVydHlcIiA6IFwicHJvcGVydGllc1wiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGhhdmUgJHtwcm9wZXJ0eV9pZXN9ICR7ZGVwc30gd2hlbiBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBwcmVzZW50YDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IHByb3BlcnR5LCBkZXBzQ291bnQsIGRlcHMsIG1pc3NpbmdQcm9wZXJ0eSB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwcm9wZXJ0eTogJHtwcm9wZXJ0eX0sXG4gICAgbWlzc2luZ1Byb3BlcnR5OiAke21pc3NpbmdQcm9wZXJ0eX0sXG4gICAgZGVwc0NvdW50OiAke2RlcHNDb3VudH0sXG4gICAgZGVwczogJHtkZXBzfX1gLCAvLyBUT0RPIGNoYW5nZSB0byByZWZlcmVuY2Vcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkZXBlbmRlbmNpZXNcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgZXJyb3I6IGV4cG9ydHMuZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgW3Byb3BEZXBzLCBzY2hEZXBzXSA9IHNwbGl0RGVwZW5kZW5jaWVzKGN4dCk7XG4gICAgICAgIHZhbGlkYXRlUHJvcGVydHlEZXBzKGN4dCwgcHJvcERlcHMpO1xuICAgICAgICB2YWxpZGF0ZVNjaGVtYURlcHMoY3h0LCBzY2hEZXBzKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHNwbGl0RGVwZW5kZW5jaWVzKHsgc2NoZW1hIH0pIHtcbiAgICBjb25zdCBwcm9wZXJ0eURlcHMgPSB7fTtcbiAgICBjb25zdCBzY2hlbWFEZXBzID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZGVwcyA9IEFycmF5LmlzQXJyYXkoc2NoZW1hW2tleV0pID8gcHJvcGVydHlEZXBzIDogc2NoZW1hRGVwcztcbiAgICAgICAgZGVwc1trZXldID0gc2NoZW1hW2tleV07XG4gICAgfVxuICAgIHJldHVybiBbcHJvcGVydHlEZXBzLCBzY2hlbWFEZXBzXTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlEZXBzKGN4dCwgcHJvcGVydHlEZXBzID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGlmIChPYmplY3Qua2V5cyhwcm9wZXJ0eURlcHMpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG1pc3NpbmcgPSBnZW4ubGV0KFwibWlzc2luZ1wiKTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcGVydHlEZXBzKSB7XG4gICAgICAgIGNvbnN0IGRlcHMgPSBwcm9wZXJ0eURlcHNbcHJvcF07XG4gICAgICAgIGlmIChkZXBzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBoYXNQcm9wZXJ0eSA9ICgwLCBjb2RlXzEucHJvcGVydHlJbkRhdGEpKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKTtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcCxcbiAgICAgICAgICAgIGRlcHNDb3VudDogZGVwcy5sZW5ndGgsXG4gICAgICAgICAgICBkZXBzOiBkZXBzLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgIGdlbi5pZihoYXNQcm9wZXJ0eSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwUHJvcCBvZiBkZXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBkZXBQcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BlcnR5fSAmJiAoJHsoMCwgY29kZV8xLmNoZWNrTWlzc2luZ1Byb3ApKGN4dCwgZGVwcywgbWlzc2luZyl9KWApO1xuICAgICAgICAgICAgKDAsIGNvZGVfMS5yZXBvcnRNaXNzaW5nUHJvcCkoY3h0LCBtaXNzaW5nKTtcbiAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlUHJvcGVydHlEZXBzID0gdmFsaWRhdGVQcm9wZXJ0eURlcHM7XG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYURlcHMoY3h0LCBzY2hlbWFEZXBzID0gY3h0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gc2NoZW1hRGVwcykge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYURlcHNbcHJvcF0pKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkLCBzY2hlbWFQcm9wOiBwcm9wIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgdmFsaWQpO1xuICAgICAgICB9LCAoKSA9PiBnZW4udmFyKHZhbGlkLCB0cnVlKSAvLyBUT0RPIHZhclxuICAgICAgICApO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVTY2hlbWFEZXBzID0gdmFsaWRhdGVTY2hlbWFEZXBzO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwZW5kZW5jaWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js": /*!*******************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js ***! \*******************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, parentSchema, it } = cxt;\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n }\n const hasThen = hasSchema(it, \"then\");\n const hasElse = hasSchema(it, \"else\");\n if (!hasThen && !hasElse)\n return;\n const valid = gen.let(\"valid\", true);\n const schValid = gen.name(\"_valid\");\n validateIf();\n cxt.reset();\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\");\n cxt.setParams({ ifClause });\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n }\n else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"));\n }\n else {\n gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n }\n cxt.pass(valid, () => cxt.error(true));\n function validateIf() {\n const schCxt = cxt.subschema({\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, schValid);\n cxt.mergeEvaluated(schCxt);\n }\n function validateClause(keyword, ifClause) {\n return () => {\n const schCxt = cxt.subschema({ keyword }, schValid);\n gen.assign(valid, schValid);\n cxt.mergeValidEvaluated(schCxt, valid);\n if (ifClause)\n gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n else\n cxt.setParams({ ifClause: keyword });\n };\n }\n },\n};\nfunction hasSchema(it, keyword) {\n const schema = it.schema[keyword];\n return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports[\"default\"] = def;\n//# sourceMappingURL=if.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQztBQUNBLGdCQUFnQixRQUFRLHVDQUF1QyxnQkFBZ0I7QUFDL0UsZUFBZSxRQUFRLHdCQUF3QixrQkFBa0IsaUJBQWlCO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxTQUFTO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxRQUFRO0FBQ3JFO0FBQ0Esb0NBQW9DLG1CQUFtQjtBQUN2RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2lmLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIFwiJHtwYXJhbXMuaWZDbGF1c2V9XCIgc2NoZW1hYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7ZmFpbGluZ0tleXdvcmQ6ICR7cGFyYW1zLmlmQ2xhdXNlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hLnRoZW4gPT09IHVuZGVmaW5lZCAmJiBwYXJlbnRTY2hlbWEuZWxzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImlmXCIgd2l0aG91dCBcInRoZW5cIiBhbmQgXCJlbHNlXCIgaXMgaWdub3JlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc1RoZW4gPSBoYXNTY2hlbWEoaXQsIFwidGhlblwiKTtcbiAgICAgICAgY29uc3QgaGFzRWxzZSA9IGhhc1NjaGVtYShpdCwgXCJlbHNlXCIpO1xuICAgICAgICBpZiAoIWhhc1RoZW4gJiYgIWhhc0Vsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICB2YWxpZGF0ZUlmKCk7XG4gICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICBpZiAoaGFzVGhlbiAmJiBoYXNFbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBpZkNsYXVzZSA9IGdlbi5sZXQoXCJpZkNsYXVzZVwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZSB9KTtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIsIGlmQ2xhdXNlKSwgdmFsaWRhdGVDbGF1c2UoXCJlbHNlXCIsIGlmQ2xhdXNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzVGhlbikge1xuICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCB2YWxpZGF0ZUNsYXVzZShcInRoZW5cIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KShzY2hWYWxpZCksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSWYoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUNsYXVzZShrZXl3b3JkLCBpZkNsYXVzZSkge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgdmFsaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpZkNsYXVzZSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihpZkNsYXVzZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl3b3JkfWApO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGlmQ2xhdXNlOiBrZXl3b3JkIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gaGFzU2NoZW1hKGl0LCBrZXl3b3JkKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgIHJldHVybiBzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js": /*!**********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js ***! \**********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst additionalItems_1 = __webpack_require__(/*! ./additionalItems */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js\");\nconst prefixItems_1 = __webpack_require__(/*! ./prefixItems */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js\");\nconst items_1 = __webpack_require__(/*! ./items */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js\");\nconst items2020_1 = __webpack_require__(/*! ./items2020 */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js\");\nconst contains_1 = __webpack_require__(/*! ./contains */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js\");\nconst dependencies_1 = __webpack_require__(/*! ./dependencies */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js\");\nconst propertyNames_1 = __webpack_require__(/*! ./propertyNames */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js\");\nconst additionalProperties_1 = __webpack_require__(/*! ./additionalProperties */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js\");\nconst properties_1 = __webpack_require__(/*! ./properties */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js\");\nconst patternProperties_1 = __webpack_require__(/*! ./patternProperties */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js\");\nconst not_1 = __webpack_require__(/*! ./not */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js\");\nconst anyOf_1 = __webpack_require__(/*! ./anyOf */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js\");\nconst oneOf_1 = __webpack_require__(/*! ./oneOf */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js\");\nconst allOf_1 = __webpack_require__(/*! ./allOf */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js\");\nconst if_1 = __webpack_require__(/*! ./if */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js\");\nconst thenElse_1 = __webpack_require__(/*! ./thenElse */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js\");\nfunction getApplicator(draft2020 = false) {\n const applicator = [\n // any\n not_1.default,\n anyOf_1.default,\n oneOf_1.default,\n allOf_1.default,\n if_1.default,\n thenElse_1.default,\n // object\n propertyNames_1.default,\n additionalProperties_1.default,\n dependencies_1.default,\n properties_1.default,\n patternProperties_1.default,\n ];\n // array\n if (draft2020)\n applicator.push(prefixItems_1.default, items2020_1.default);\n else\n applicator.push(additionalItems_1.default, items_1.default);\n applicator.push(contains_1.default);\n return applicator;\n}\nexports[\"default\"] = getApplicator;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCwwQkFBMEIsbUJBQU8sQ0FBQywrSUFBbUI7QUFDckQsc0JBQXNCLG1CQUFPLENBQUMsdUlBQWU7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsMkhBQVM7QUFDakMsb0JBQW9CLG1CQUFPLENBQUMsbUlBQWE7QUFDekMsbUJBQW1CLG1CQUFPLENBQUMsaUlBQVk7QUFDdkMsdUJBQXVCLG1CQUFPLENBQUMseUlBQWdCO0FBQy9DLHdCQUF3QixtQkFBTyxDQUFDLDJJQUFpQjtBQUNqRCwrQkFBK0IsbUJBQU8sQ0FBQyx5SkFBd0I7QUFDL0QscUJBQXFCLG1CQUFPLENBQUMscUlBQWM7QUFDM0MsNEJBQTRCLG1CQUFPLENBQUMsbUpBQXFCO0FBQ3pELGNBQWMsbUJBQU8sQ0FBQyx1SEFBTztBQUM3QixnQkFBZ0IsbUJBQU8sQ0FBQywySEFBUztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQywySEFBUztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQywySEFBUztBQUNqQyxhQUFhLG1CQUFPLENBQUMscUhBQU07QUFDM0IsbUJBQW1CLG1CQUFPLENBQUMsaUlBQVk7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgcHJlZml4SXRlbXNfMSA9IHJlcXVpcmUoXCIuL3ByZWZpeEl0ZW1zXCIpO1xuY29uc3QgaXRlbXNfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zXCIpO1xuY29uc3QgaXRlbXMyMDIwXzEgPSByZXF1aXJlKFwiLi9pdGVtczIwMjBcIik7XG5jb25zdCBjb250YWluc18xID0gcmVxdWlyZShcIi4vY29udGFpbnNcIik7XG5jb25zdCBkZXBlbmRlbmNpZXNfMSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1wiKTtcbmNvbnN0IHByb3BlcnR5TmFtZXNfMSA9IHJlcXVpcmUoXCIuL3Byb3BlcnR5TmFtZXNcIik7XG5jb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbFByb3BlcnRpZXNcIik7XG5jb25zdCBwcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0aWVzXCIpO1xuY29uc3QgcGF0dGVyblByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm5Qcm9wZXJ0aWVzXCIpO1xuY29uc3Qgbm90XzEgPSByZXF1aXJlKFwiLi9ub3RcIik7XG5jb25zdCBhbnlPZl8xID0gcmVxdWlyZShcIi4vYW55T2ZcIik7XG5jb25zdCBvbmVPZl8xID0gcmVxdWlyZShcIi4vb25lT2ZcIik7XG5jb25zdCBhbGxPZl8xID0gcmVxdWlyZShcIi4vYWxsT2ZcIik7XG5jb25zdCBpZl8xID0gcmVxdWlyZShcIi4vaWZcIik7XG5jb25zdCB0aGVuRWxzZV8xID0gcmVxdWlyZShcIi4vdGhlbkVsc2VcIik7XG5mdW5jdGlvbiBnZXRBcHBsaWNhdG9yKGRyYWZ0MjAyMCA9IGZhbHNlKSB7XG4gICAgY29uc3QgYXBwbGljYXRvciA9IFtcbiAgICAgICAgLy8gYW55XG4gICAgICAgIG5vdF8xLmRlZmF1bHQsXG4gICAgICAgIGFueU9mXzEuZGVmYXVsdCxcbiAgICAgICAgb25lT2ZfMS5kZWZhdWx0LFxuICAgICAgICBhbGxPZl8xLmRlZmF1bHQsXG4gICAgICAgIGlmXzEuZGVmYXVsdCxcbiAgICAgICAgdGhlbkVsc2VfMS5kZWZhdWx0LFxuICAgICAgICAvLyBvYmplY3RcbiAgICAgICAgcHJvcGVydHlOYW1lc18xLmRlZmF1bHQsXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICAgICAgZGVwZW5kZW5jaWVzXzEuZGVmYXVsdCxcbiAgICAgICAgcHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICBdO1xuICAgIC8vIGFycmF5XG4gICAgaWYgKGRyYWZ0MjAyMClcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKHByZWZpeEl0ZW1zXzEuZGVmYXVsdCwgaXRlbXMyMDIwXzEuZGVmYXVsdCk7XG4gICAgZWxzZVxuICAgICAgICBhcHBsaWNhdG9yLnB1c2goYWRkaXRpb25hbEl0ZW1zXzEuZGVmYXVsdCwgaXRlbXNfMS5kZWZhdWx0KTtcbiAgICBhcHBsaWNhdG9yLnB1c2goY29udGFpbnNfMS5kZWZhdWx0KTtcbiAgICByZXR1cm4gYXBwbGljYXRvcjtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGdldEFwcGxpY2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js": /*!**********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js ***! \**********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.validateTuple = void 0;\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt) {\n const { schema, it } = cxt;\n if (Array.isArray(schema))\n return validateTuple(cxt, \"additionalItems\", schema);\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n const { gen, parentSchema, data, keyword, it } = cxt;\n checkStrictTuple(parentSchema);\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n }\n const valid = gen.name(\"valid\");\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n schArr.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n keyword,\n schemaProp: i,\n dataProp: i,\n }, valid));\n cxt.ok(valid);\n });\n function checkStrictTuple(sch) {\n const { opts, errSchemaPath } = it;\n const l = schArr.length;\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n }\n }\n}\nexports.validateTuple = validateTuple;\nexports[\"default\"] = def;\n//# sourceMappingURL=items.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pdGVtcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUI7QUFDckIsa0JBQWtCLG1CQUFPLENBQUMsaUlBQXVCO0FBQ2pELGVBQWUsbUJBQU8sQ0FBQyxxSEFBb0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLCtHQUFTO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsWUFBWSx1Q0FBdUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxLQUFLO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxLQUFLLElBQUksRUFBRTtBQUM5QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixRQUFRLE9BQU8sRUFBRSxtQ0FBbUMsWUFBWSwwQ0FBMEMsY0FBYztBQUNwSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImFycmF5XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVR1cGxlKGN4dCwgXCJhZGRpdGlvbmFsSXRlbXNcIiwgc2NoZW1hKTtcbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGN4dC5vaygoMCwgY29kZV8xLnZhbGlkYXRlQXJyYXkpKGN4dCkpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVUdXBsZShjeHQsIGV4dHJhSXRlbXMsIHNjaEFyciA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNoZWNrU3RyaWN0VHVwbGUocGFyZW50U2NoZW1hKTtcbiAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiBzY2hBcnIubGVuZ3RoICYmIGl0Lml0ZW1zICE9PSB0cnVlKSB7XG4gICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoQXJyLmxlbmd0aCwgaXQuaXRlbXMpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgc2NoQXJyLmZvckVhY2goKHNjaCwgaSkgPT4ge1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gPiAke2l9YCwgKCkgPT4gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICB9LCB2YWxpZCkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNoZWNrU3RyaWN0VHVwbGUoc2NoKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IGwgPSBzY2hBcnIubGVuZ3RoO1xuICAgICAgICBjb25zdCBmdWxsVHVwbGUgPSBsID09PSBzY2gubWluSXRlbXMgJiYgKGwgPT09IHNjaC5tYXhJdGVtcyB8fCBzY2hbZXh0cmFJdGVtc10gPT09IGZhbHNlKTtcbiAgICAgICAgaWYgKG9wdHMuc3RyaWN0VHVwbGVzICYmICFmdWxsVHVwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBcIiR7a2V5d29yZH1cIiBpcyAke2x9LXR1cGxlLCBidXQgbWluSXRlbXMgb3IgbWF4SXRlbXMvJHtleHRyYUl0ZW1zfSBhcmUgbm90IHNwZWNpZmllZCBvciBkaWZmZXJlbnQgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImA7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIG1zZywgb3B0cy5zdHJpY3RUdXBsZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVR1cGxlID0gdmFsaWRhdGVUdXBsZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZW1zLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js": /*!**************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js ***! \**************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst additionalItems_1 = __webpack_require__(/*! ./additionalItems */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { schema, parentSchema, it } = cxt;\n const { prefixItems } = parentSchema;\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n if (prefixItems)\n (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n else\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=items2020.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pdGVtczIwMjAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsa0JBQWtCLG1CQUFPLENBQUMsaUlBQXVCO0FBQ2pELGVBQWUsbUJBQU8sQ0FBQyxxSEFBb0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLCtHQUFTO0FBQ2hDLDBCQUEwQixtQkFBTyxDQUFDLCtJQUFtQjtBQUNyRDtBQUNBLGdCQUFnQixVQUFVLE9BQU8sbURBQW1ELEtBQUs7QUFDekYsZUFBZSxVQUFVLE9BQU8sd0JBQXdCLFNBQVMsS0FBSztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQyxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMyMDIwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIml0ZW1zXCIsXG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBwcmVmaXhJdGVtcyB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpdC5pdGVtcyA9IHRydWU7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHByZWZpeEl0ZW1zKVxuICAgICAgICAgICAgKDAsIGFkZGl0aW9uYWxJdGVtc18xLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKShjeHQsIHByZWZpeEl0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3h0Lm9rKCgwLCBjb2RlXzEudmFsaWRhdGVBcnJheSkoY3h0KSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtczIwMjAuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js": /*!********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js ***! \********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst def = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt) {\n const { gen, schema, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n cxt.fail();\n return;\n }\n const valid = gen.name(\"valid\");\n cxt.subschema({\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, valid);\n cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n },\n error: { message: \"must NOT be valid\" },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=not.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9ub3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTCxhQUFhLDhCQUE4QjtBQUMzQztBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3Ivbm90LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgIHNjaGVtYVR5cGU6IFtcIm9iamVjdFwiLCBcImJvb2xlYW5cIl0sXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkOiBcIm5vdFwiLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IGZhbHNlLFxuICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgIGN4dC5mYWlsUmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgIH0sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IE5PVCBiZSB2YWxpZFwiIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js": /*!**********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js ***! \**********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: \"must match exactly one schema in oneOf\",\n params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n if (it.opts.discriminator && parentSchema.discriminator)\n return;\n const schArr = schema;\n const valid = gen.let(\"valid\", false);\n const passing = gen.let(\"passing\", null);\n const schValid = gen.name(\"_valid\");\n cxt.setParams({ passing });\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n gen.block(validateOneOf);\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n function validateOneOf() {\n schArr.forEach((sch, i) => {\n let schCxt;\n if ((0, util_1.alwaysValidSchema)(it, sch)) {\n gen.var(schValid, true);\n }\n else {\n schCxt = cxt.subschema({\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n }\n if (i > 0) {\n gen\n .if((0, codegen_1._) `${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n .else();\n }\n gen.if(schValid, () => {\n gen.assign(valid, true);\n gen.assign(passing, i);\n if (schCxt)\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n });\n });\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=oneOf.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9vbmVPZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQztBQUNBO0FBQ0EsZUFBZSxRQUFRLHdCQUF3QixrQkFBa0IsZ0JBQWdCO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdDQUFnQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsU0FBUztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxVQUFVLEtBQUssTUFBTTtBQUNyRTtBQUNBLDhEQUE4RCxRQUFRLElBQUksRUFBRTtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL29uZU9mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Bhc3NpbmdTY2hlbWFzOiAke3BhcmFtcy5wYXNzaW5nfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm9uZU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBpZiAoaXQub3B0cy5kaXNjcmltaW5hdG9yICYmIHBhcmVudFNjaGVtYS5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hBcnIgPSBzY2hlbWE7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgcGFzc2luZyA9IGdlbi5sZXQoXCJwYXNzaW5nXCIsIG51bGwpO1xuICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgcGFzc2luZyB9KTtcbiAgICAgICAgLy8gVE9ETyBwb3NzaWJseSBmYWlsIHN0cmFpZ2h0IGF3YXkgKHdpdGggd2FybmluZyBvciBleGNlcHRpb24pIGlmIHRoZXJlIGFyZSB0d28gZW1wdHkgYWx3YXlzIHZhbGlkIHNjaGVtYXNcbiAgICAgICAgZ2VuLmJsb2NrKHZhbGlkYXRlT25lT2YpO1xuICAgICAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVPbmVPZigpIHtcbiAgICAgICAgICAgIHNjaEFyci5mb3JFYWNoKChzY2gsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgc2NoQ3h0O1xuICAgICAgICAgICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHNjaFZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAgICAgLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoVmFsaWR9ICYmICR7dmFsaWR9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24odmFsaWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihwYXNzaW5nLCAoMCwgY29kZWdlbl8xLl8pIGBbJHtwYXNzaW5nfSwgJHtpfV1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmVsc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHBhc3NpbmcsIGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoQ3h0KVxuICAgICAgICAgICAgICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCwgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uZU9mLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": /*!**********************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js ***! \**********************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst util_2 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst def = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, data, parentSchema, it } = cxt;\n const { opts } = it;\n const patterns = (0, code_1.allSchemaProperties)(schema);\n const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n if (patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))) {\n return;\n }\n const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n const valid = gen.name(\"valid\");\n if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n }\n const { props } = it;\n validatePatternProperties();\n function validatePatternProperties() {\n for (const pat of patterns) {\n if (checkProperties)\n checkMatchingProperties(pat);\n if (it.allErrors) {\n validateProperties(pat);\n }\n else {\n gen.var(valid, true); // TODO var\n validateProperties(pat);\n gen.if(valid);\n }\n }\n }\n function checkMatchingProperties(pat) {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n }\n }\n }\n function validateProperties(pat) {\n gen.forIn(\"key\", data, (key) => {\n gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat);\n if (!alwaysValid) {\n cxt.subschema({\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: util_2.Type.Str,\n }, valid);\n }\n if (it.opts.unevaluated && props !== true) {\n gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n }\n else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n });\n });\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=patternProperties.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wYXR0ZXJuUHJvcGVydGllcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlLG1CQUFPLENBQUMsK0dBQVM7QUFDaEMsa0JBQWtCLG1CQUFPLENBQUMsaUlBQXVCO0FBQ2pELGVBQWUsbUJBQU8sQ0FBQyxxSEFBb0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNDQUFzQztBQUN0RCxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxNQUFNLGtCQUFrQixLQUFLO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsaUNBQWlDLFFBQVEsSUFBSTtBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsdURBQXVELE1BQU0sR0FBRyxJQUFJO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3BhdHRlcm5Qcm9wZXJ0aWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBkYXRhLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gKDAsIGNvZGVfMS5hbGxTY2hlbWFQcm9wZXJ0aWVzKShzY2hlbWEpO1xuICAgICAgICBjb25zdCBhbHdheXNWYWxpZFBhdHRlcm5zID0gcGF0dGVybnMuZmlsdGVyKChwKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hW3BdKSk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChhbHdheXNWYWxpZFBhdHRlcm5zLmxlbmd0aCA9PT0gcGF0dGVybnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKCFpdC5vcHRzLnVuZXZhbHVhdGVkIHx8IGl0LnByb3BzID09PSB0cnVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja1Byb3BlcnRpZXMgPSBvcHRzLnN0cmljdFNjaGVtYSAmJiAhb3B0cy5hbGxvd01hdGNoaW5nUHJvcGVydGllcyAmJiBwYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgIShpdC5wcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSAoMCwgdXRpbF8yLmV2YWx1YXRlZFByb3BzVG9OYW1lKShnZW4sIGl0LnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBpdDtcbiAgICAgICAgdmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXQgb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICBjaGVja01hdGNoaW5nUHJvcGVydGllcyhwYXQpO1xuICAgICAgICAgICAgICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZih2YWxpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGNoZWNrUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKHBhdCkudGVzdChwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBwcm9wZXJ0eSAke3Byb3B9IG1hdGNoZXMgcGF0dGVybiAke3BhdH0gKHVzZSBhbGxvd01hdGNoaW5nUHJvcGVydGllcylgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHBhdCkge1xuICAgICAgICAgICAgZ2VuLmZvckluKFwia2V5XCIsIGRhdGEsIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgY29kZV8xLnVzZVBhdHRlcm4pKGN4dCwgcGF0KX0udGVzdCgke2tleX0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbHdheXNWYWxpZCA9IGFsd2F5c1ZhbGlkUGF0dGVybnMuaW5jbHVkZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHdheXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYVByb3A6IHBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvcDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8yLlR5cGUuU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIHByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9WyR7a2V5fV1gLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWx3YXlzVmFsaWQgJiYgIWl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllc2AgaXMgbm90IHN1cHBvcnRlZCAob3B0cy5uZXh0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIHdlcmUgZXZhbHVhdGVkIChwcm9wcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuUHJvcGVydGllcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": /*!****************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js ***! \****************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst items_1 = __webpack_require__(/*! ./items */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js\");\nconst def = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=prefixItems.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxnQkFBZ0IsbUJBQU8sQ0FBQywySEFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJlZml4SXRlbXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpdGVtc18xID0gcmVxdWlyZShcIi4vaXRlbXNcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcmVmaXhJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJhcnJheVwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBjb2RlOiAoY3h0KSA9PiAoMCwgaXRlbXNfMS52YWxpZGF0ZVR1cGxlKShjeHQsIFwiaXRlbXNcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJlZml4SXRlbXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js": /*!***************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js ***! \***************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst validate_1 = __webpack_require__(/*! ../../compile/validate */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js\");\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst additionalProperties_1 = __webpack_require__(/*! ./additionalProperties */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js\");\nconst def = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n }\n const allProps = (0, code_1.allSchemaProperties)(schema);\n for (const prop of allProps) {\n it.definedProperties.add(prop);\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n }\n const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n if (properties.length === 0)\n return;\n const valid = gen.name(\"valid\");\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop);\n }\n else {\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n applyPropertySchema(prop);\n if (!it.allErrors)\n gen.else().var(valid, true);\n gen.endIf();\n }\n cxt.it.definedProperties.add(prop);\n cxt.ok(valid);\n }\n function hasDefault(prop) {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n }\n function applyPropertySchema(prop) {\n cxt.subschema({\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n }, valid);\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=properties.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0aWVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG1CQUFtQixtQkFBTyxDQUFDLG1JQUF3QjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsK0dBQVM7QUFDaEMsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQywrQkFBK0IsbUJBQU8sQ0FBQyx5SkFBd0I7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQ0FBc0M7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0aWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChpdC5vcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgJiYgcGFyZW50U2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdC5jb2RlKG5ldyB2YWxpZGF0ZV8xLktleXdvcmRDeHQoaXQsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdCwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsUHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHNjaGVtYSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBhbGxQcm9wcykge1xuICAgICAgICAgICAgaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIGFsbFByb3BzLmxlbmd0aCAmJiBpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCAoMCwgdXRpbF8xLnRvSGFzaCkoYWxsUHJvcHMpLCBpdC5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGFsbFByb3BzLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFbcF0pKTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdChwcm9wKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uZWxzZSgpLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjeHQuaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNEZWZhdWx0KHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBpdC5vcHRzLnVzZURlZmF1bHRzICYmICFpdC5jb21wb3NpdGVSdWxlICYmIHNjaGVtYVtwcm9wXS5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKSB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wZXJ0aWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": /*!******************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js ***! \******************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: \"property name must be valid\",\n params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt) {\n const { gen, schema, data, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n const valid = gen.name(\"valid\");\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({ propertyName: key });\n cxt.subschema({\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n }, valid);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error(true);\n if (!it.allErrors)\n gen.break();\n });\n });\n cxt.ok(valid);\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=propertyNames.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0eU5hbWVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLGlJQUF1QjtBQUNqRCxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDO0FBQ0E7QUFDQSxlQUFlLFFBQVEsd0JBQXdCLGdCQUFnQixxQkFBcUI7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0JBQXdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0eU5hbWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcInByb3BlcnR5IG5hbWUgbXVzdCBiZSB2YWxpZFwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwcm9wZXJ0eU5hbWU6ICR7cGFyYW1zLnByb3BlcnR5TmFtZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBnZW4uZm9ySW4oXCJrZXlcIiwgZGF0YSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IHByb3BlcnR5TmFtZToga2V5IH0pO1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgICAgICAgICAgICAgZGF0YToga2V5LFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW1wic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZToga2V5LFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wZXJ0eU5hbWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js": /*!*************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js ***! \*************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst def = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({ keyword, parentSchema, it }) {\n if (parentSchema.if === undefined)\n (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=thenElse.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMkJBQTJCO0FBQ3RDO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1widGhlblwiLCBcImVsc2VcIl0sXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBjb2RlKHsga2V5d29yZCwgcGFyZW50U2NoZW1hLCBpdCB9KSB7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEuaWYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYFwiJHtrZXl3b3JkfVwiIHdpdGhvdXQgXCJpZlwiIGlzIGlnbm9yZWRgKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRoZW5FbHNlLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js": /*!**********************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js ***! \**********************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = __webpack_require__(/*! ../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst names_1 = __webpack_require__(/*! ../compile/names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nconst util_2 = __webpack_require__(/*! ../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nfunction checkReportMissingProp(cxt, prop) {\n const { gen, data, it } = cxt;\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n cxt.error();\n });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n cxt.setParams({ missingProperty: missing }, true);\n cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n const valCxt = [\n [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n [names_1.default.parentData, it.parentData],\n [names_1.default.parentDataProperty, it.parentDataProperty],\n [names_1.default.rootData, names_1.default.rootData],\n ];\n if (it.opts.dynamicRef)\n valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n const u = opts.unicodeRegExp ? \"u\" : \"\";\n const { regExp } = opts.code;\n const rx = regExp(pattern, u);\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true);\n validateItems(() => gen.assign(validArr, false));\n return validArr;\n }\n gen.var(valid, true);\n validateItems(() => gen.break());\n return valid;\n function validateItems(notValid) {\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword,\n dataProp: i,\n dataPropType: util_1.Type.Num,\n }, valid);\n gen.if((0, codegen_1.not)(valid), notValid);\n });\n }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n const { gen, schema, keyword, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n if (alwaysValid && !it.opts.unevaluated)\n return;\n const valid = gen.let(\"valid\", false);\n const schValid = gen.name(\"_valid\");\n gen.block(() => schema.forEach((_sch, i) => {\n const schCxt = cxt.subschema({\n keyword,\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged)\n gen.if((0, codegen_1.not)(valid));\n }));\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29kZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsR0FBRyxxQkFBcUIsR0FBRyxrQkFBa0IsR0FBRyx3QkFBd0IsR0FBRyx3QkFBd0IsR0FBRywyQkFBMkIsR0FBRyx3QkFBd0IsR0FBRyxzQkFBc0IsR0FBRyxxQkFBcUIsR0FBRyxtQkFBbUIsR0FBRyx5QkFBeUIsR0FBRyx3QkFBd0IsR0FBRyw4QkFBOEI7QUFDaFYsa0JBQWtCLG1CQUFPLENBQUMsOEhBQW9CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxrSEFBaUI7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsb0hBQWtCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyxrSEFBaUI7QUFDeEM7QUFDQSxZQUFZLGdCQUFnQjtBQUM1QjtBQUNBLHdCQUF3QixxQ0FBcUMsS0FBSyxHQUFHO0FBQ3JFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsOEJBQThCO0FBQzlCLDRCQUE0QixpQkFBaUIsUUFBUTtBQUNyRCx1SkFBdUosU0FBUyxJQUFJLEtBQUs7QUFDeks7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBLCtCQUErQixpQkFBaUIsUUFBUSxLQUFLLElBQUksU0FBUztBQUMxRTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLHFDQUFxQyxLQUFLLEVBQUUsc0NBQXNDO0FBQ2xGLCtDQUErQyxNQUFNLEtBQUssbUNBQW1DO0FBQzdGO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EscUNBQXFDLEtBQUssRUFBRSxzQ0FBc0M7QUFDbEY7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLDRCQUE0Qix3QkFBd0IsMENBQTBDLE1BQU07QUFDcEcsMkRBQTJELFdBQVcsSUFBSSxLQUFLLElBQUksYUFBYSxFQUFFLFdBQVc7QUFDN0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxjQUFjLElBQUksc0JBQXNCO0FBQzdFLDJEQUEyRCxLQUFLLFFBQVEsUUFBUSxJQUFJLEtBQUsseUJBQXlCLEtBQUssR0FBRyxLQUFLO0FBQy9IO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0Esc0JBQXNCLFdBQVcsUUFBUTtBQUN6QztBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyw0RUFBNEUsR0FBRyxRQUFRLElBQUksRUFBRTtBQUMvSCxLQUFLO0FBQ0w7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxZQUFZLHlCQUF5QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxLQUFLO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFlBQVksMkJBQTJCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDhDQUE4QyxPQUFPLEtBQUssU0FBUztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvZGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlVW5pb24gPSBleHBvcnRzLnZhbGlkYXRlQXJyYXkgPSBleHBvcnRzLnVzZVBhdHRlcm4gPSBleHBvcnRzLmNhbGxWYWxpZGF0ZUNvZGUgPSBleHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBleHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBleHBvcnRzLnByb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5pc093blByb3BlcnR5ID0gZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGV4cG9ydHMucmVwb3J0TWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrTWlzc2luZ1Byb3AgPSBleHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IHV0aWxfMiA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5mdW5jdGlvbiBjaGVja1JlcG9ydE1pc3NpbmdQcm9wKGN4dCwgcHJvcCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGdlbi5pZihub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgaXQub3B0cy5vd25Qcm9wZXJ0aWVzKSwgKCkgPT4ge1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiAoMCwgY29kZWdlbl8xLl8pIGAke3Byb3B9YCB9LCB0cnVlKTtcbiAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3AgPSBjaGVja1JlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gY2hlY2tNaXNzaW5nUHJvcCh7IGdlbiwgZGF0YSwgaXQ6IHsgb3B0cyB9IH0sIHByb3BlcnRpZXMsIG1pc3NpbmcpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikoLi4ucHJvcGVydGllcy5tYXAoKHByb3ApID0+ICgwLCBjb2RlZ2VuXzEuYW5kKShub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcCwgb3B0cy5vd25Qcm9wZXJ0aWVzKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHttaXNzaW5nfSA9ICR7cHJvcH1gKSkpO1xufVxuZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gY2hlY2tNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIHJlcG9ydE1pc3NpbmdQcm9wKGN4dCwgbWlzc2luZykge1xuICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IG1pc3NpbmcgfSwgdHJ1ZSk7XG4gICAgY3h0LmVycm9yKCk7XG59XG5leHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gcmVwb3J0TWlzc2luZ1Byb3A7XG5mdW5jdGlvbiBoYXNQcm9wRnVuYyhnZW4pIHtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJmdW5jXCIsIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZWY6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy5oYXNQcm9wRnVuYyA9IGhhc1Byb3BGdW5jO1xuZnVuY3Rpb24gaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7aGFzUHJvcEZ1bmMoZ2VuKX0uY2FsbCgke2RhdGF9LCAke3Byb3BlcnR5fSlgO1xufVxuZXhwb3J0cy5pc093blByb3BlcnR5ID0gaXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIHByb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcGVydHksIG93blByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcGVydHkpfSAhPT0gdW5kZWZpbmVkYDtcbiAgICByZXR1cm4gb3duUHJvcGVydGllcyA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZH0gJiYgJHtpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpfWAgOiBjb25kO1xufVxuZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IHByb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gbm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gPT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLm9yKShjb25kLCAoMCwgY29kZWdlbl8xLm5vdCkoaXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KSkpIDogY29uZDtcbn1cbmV4cG9ydHMubm9Qcm9wZXJ0eUluRGF0YSA9IG5vUHJvcGVydHlJbkRhdGE7XG5mdW5jdGlvbiBhbGxTY2hlbWFQcm9wZXJ0aWVzKHNjaGVtYU1hcCkge1xuICAgIHJldHVybiBzY2hlbWFNYXAgPyBPYmplY3Qua2V5cyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gcCAhPT0gXCJfX3Byb3RvX19cIikgOiBbXTtcbn1cbmV4cG9ydHMuYWxsU2NoZW1hUHJvcGVydGllcyA9IGFsbFNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBzY2hlbWFQcm9wZXJ0aWVzKGl0LCBzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFNYXBbcF0pKTtcbn1cbmV4cG9ydHMuc2NoZW1hUHJvcGVydGllcyA9IHNjaGVtYVByb3BlcnRpZXM7XG5mdW5jdGlvbiBjYWxsVmFsaWRhdGVDb2RlKHsgc2NoZW1hQ29kZSwgZGF0YSwgaXQ6IHsgZ2VuLCB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGgsIGVycm9yUGF0aCB9LCBpdCB9LCBmdW5jLCBjb250ZXh0LCBwYXNzU2NoZW1hKSB7XG4gICAgY29uc3QgZGF0YUFuZFNjaGVtYSA9IHBhc3NTY2hlbWEgPyAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYUNvZGV9LCAke2RhdGF9LCAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9YCA6IGRhdGE7XG4gICAgY29uc3QgdmFsQ3h0ID0gW1xuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5zdHJDb25jYXQpKG5hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsIGVycm9yUGF0aCldLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsIGl0LnBhcmVudERhdGFdLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSwgaXQucGFyZW50RGF0YVByb3BlcnR5XSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhXSxcbiAgICBdO1xuICAgIGlmIChpdC5vcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgIHZhbEN4dC5wdXNoKFtuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsIG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc10pO1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFBbmRTY2hlbWF9LCAke2dlbi5vYmplY3QoLi4udmFsQ3h0KX1gO1xuICAgIHJldHVybiBjb250ZXh0ICE9PSBjb2RlZ2VuXzEubmlsID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmdW5jfS5jYWxsKCR7Y29udGV4dH0sICR7YXJnc30pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30oJHthcmdzfSlgO1xufVxuZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gY2FsbFZhbGlkYXRlQ29kZTtcbmNvbnN0IG5ld1JlZ0V4cCA9ICgwLCBjb2RlZ2VuXzEuXykgYG5ldyBSZWdFeHBgO1xuZnVuY3Rpb24gdXNlUGF0dGVybih7IGdlbiwgaXQ6IHsgb3B0cyB9IH0sIHBhdHRlcm4pIHtcbiAgICBjb25zdCB1ID0gb3B0cy51bmljb2RlUmVnRXhwID8gXCJ1XCIgOiBcIlwiO1xuICAgIGNvbnN0IHsgcmVnRXhwIH0gPSBvcHRzLmNvZGU7XG4gICAgY29uc3QgcnggPSByZWdFeHAocGF0dGVybiwgdSk7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwicGF0dGVyblwiLCB7XG4gICAgICAgIGtleTogcngudG9TdHJpbmcoKSxcbiAgICAgICAgcmVmOiByeCxcbiAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgJHtyZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyBuZXdSZWdFeHAgOiAoMCwgdXRpbF8yLnVzZUZ1bmMpKGdlbiwgcmVnRXhwKX0oJHtwYXR0ZXJufSwgJHt1fSlgLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VQYXR0ZXJuID0gdXNlUGF0dGVybjtcbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGlmIChpdC5hbGxFcnJvcnMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRBcnIgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgIHZhbGlkYXRlSXRlbXMoKCkgPT4gZ2VuLmFzc2lnbih2YWxpZEFyciwgZmFsc2UpKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkQXJyO1xuICAgIH1cbiAgICBnZW4udmFyKHZhbGlkLCB0cnVlKTtcbiAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5icmVhaygpKTtcbiAgICByZXR1cm4gdmFsaWQ7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyhub3RWYWxpZCkge1xuICAgICAgICBjb25zdCBsZW4gPSBnZW4uY29uc3QoXCJsZW5cIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCAwLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBpLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksIG5vdFZhbGlkKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gdmFsaWRhdGVBcnJheTtcbmZ1bmN0aW9uIHZhbGlkYXRlVW5pb24oY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgIGNvbnN0IGFsd2F5c1ZhbGlkID0gc2NoZW1hLnNvbWUoKHNjaCkgPT4gKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaCkpO1xuICAgIGlmIChhbHdheXNWYWxpZCAmJiAhaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgIGdlbi5ibG9jaygoKSA9PiBzY2hlbWEuZm9yRWFjaCgoX3NjaCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICBzY2hlbWFQcm9wOiBpLFxuICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgfSwgc2NoVmFsaWQpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkfSB8fCAke3NjaFZhbGlkfWApO1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHNjaFZhbGlkKTtcbiAgICAgICAgLy8gY2FuIHNob3J0LWNpcmN1aXQgaWYgYHVuZXZhbHVhdGVkUHJvcGVydGllcy9JdGVtc2Agbm90IHN1cHBvcnRlZCAob3B0cy51bmV2YWx1YXRlZCAhPT0gdHJ1ZSlcbiAgICAgICAgLy8gb3IgaWYgYWxsIHByb3BlcnRpZXMgYW5kIGl0ZW1zIHdlcmUgZXZhbHVhdGVkIChpdC5wcm9wcyA9PT0gdHJ1ZSAmJiBpdC5pdGVtcyA9PT0gdHJ1ZSlcbiAgICAgICAgaWYgKCFtZXJnZWQpXG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSk7XG4gICAgfSkpO1xuICAgIGN4dC5yZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gdmFsaWRhdGVVbmlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvZGUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js": /*!*************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js ***! \*************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst def = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpZFwiLFxuICAgIGNvZGUoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTk9UIFNVUFBPUlRFRDoga2V5d29yZCBcImlkXCIsIHVzZSBcIiRpZFwiIGZvciBzY2hlbWEgSUQnKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js": /*!****************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js ***! \****************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst id_1 = __webpack_require__(/*! ./id */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js\");\nconst ref_1 = __webpack_require__(/*! ./ref */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js\");\nconst core = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n { keyword: \"$comment\" },\n \"definitions\",\n id_1.default,\n ref_1.default,\n];\nexports[\"default\"] = core;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxhQUFhLG1CQUFPLENBQUMsK0dBQU07QUFDM0IsY0FBYyxtQkFBTyxDQUFDLGlIQUFPO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHFCQUFxQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBpZF8xID0gcmVxdWlyZShcIi4vaWRcIik7XG5jb25zdCByZWZfMSA9IHJlcXVpcmUoXCIuL3JlZlwiKTtcbmNvbnN0IGNvcmUgPSBbXG4gICAgXCIkc2NoZW1hXCIsXG4gICAgXCIkaWRcIixcbiAgICBcIiRkZWZzXCIsXG4gICAgXCIkdm9jYWJ1bGFyeVwiLFxuICAgIHsga2V5d29yZDogXCIkY29tbWVudFwiIH0sXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuICAgIGlkXzEuZGVmYXVsdCxcbiAgICByZWZfMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNvcmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js": /*!**************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = __webpack_require__(/*! ../../compile/ref_error */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js\");\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst names_1 = __webpack_require__(/*! ../../compile/names */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js\");\nconst compile_1 = __webpack_require__(/*! ../../compile */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst def = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt) {\n const { gen, schema: $ref, it } = cxt;\n const { baseId, schemaEnv: env, validateName, opts, self } = it;\n const { root } = env;\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n return callRootRef();\n const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n if (schOrEnv === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n if (schOrEnv instanceof compile_1.SchemaEnv)\n return callValidate(schOrEnv);\n return inlineRefSchema(schOrEnv);\n function callRootRef() {\n if (env === root)\n return callRef(cxt, validateName, env, env.$async);\n const rootName = gen.scopeValue(\"root\", { ref: root });\n return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n }\n function callValidate(sch) {\n const v = getValidate(cxt, sch);\n callRef(cxt, v, sch, sch.$async);\n }\n function inlineRefSchema(sch) {\n const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n const valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({\n schema: sch,\n dataTypes: [],\n schemaPath: codegen_1.nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n }, valid);\n cxt.mergeEvaluated(schCxt);\n cxt.ok(valid);\n }\n },\n};\nfunction getValidate(cxt, sch) {\n const { gen } = cxt;\n return sch.validate\n ? gen.scopeValue(\"validate\", { ref: sch.validate })\n : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n const { gen, it } = cxt;\n const { allErrors, schemaEnv: env, opts } = it;\n const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n if ($async)\n callAsyncRef();\n else\n callSyncRef();\n function callAsyncRef() {\n if (!env.$async)\n throw new Error(\"async schema referenced by sync schema\");\n const valid = gen.let(\"valid\");\n gen.try(() => {\n gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n if (!allErrors)\n gen.assign(valid, true);\n }, (e) => {\n gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n addErrorsFrom(e);\n if (!allErrors)\n gen.assign(valid, false);\n });\n cxt.ok(valid);\n }\n function callSyncRef() {\n cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n }\n function addErrorsFrom(source) {\n const errs = (0, codegen_1._) `${source}.errors`;\n gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n }\n function addEvaluatedFrom(source) {\n var _a;\n if (!it.opts.unevaluated)\n return;\n const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n }\n }\n else {\n const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n }\n }\n else {\n const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n }\n }\n }\n}\nexports.callRef = callRef;\nexports[\"default\"] = def;\n//# sourceMappingURL=ref.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9yZWYuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZUFBZSxHQUFHLG1CQUFtQjtBQUNyQyxvQkFBb0IsbUJBQU8sQ0FBQywrSEFBeUI7QUFDckQsZUFBZSxtQkFBTyxDQUFDLCtHQUFTO0FBQ2hDLGtCQUFrQixtQkFBTyxDQUFDLGlJQUF1QjtBQUNqRCxnQkFBZ0IsbUJBQU8sQ0FBQyx1SEFBcUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsaUhBQWU7QUFDekMsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEMsZ0JBQWdCLG1EQUFtRDtBQUNuRSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELFdBQVc7QUFDakUsb0RBQW9ELFNBQVM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUZBQW1GLGdEQUFnRCxJQUFJLFVBQVU7QUFDako7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSx1Q0FBdUMsbUJBQW1CO0FBQzFELDhCQUE4Qiw0QkFBNEIsVUFBVSxFQUFFO0FBQ3RFO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0EsWUFBWSxVQUFVO0FBQ3RCLFlBQVksa0NBQWtDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLDhDQUE4QztBQUM3RixpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLFNBQVM7QUFDVCx5Q0FBeUMsR0FBRyxhQUFhLG1CQUFtQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLE9BQU87QUFDaEQsZ0VBQWdFLHlCQUF5QixhQUFhLE1BQU0sSUFBSSx3QkFBd0IsVUFBVSxLQUFLLEtBQUs7QUFDNUosK0RBQStELHdCQUF3QjtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLE9BQU87QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsT0FBTztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvcmVmLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYWxsUmVmID0gZXhwb3J0cy5nZXRWYWxpZGF0ZSA9IHZvaWQgMDtcbmNvbnN0IHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiJHJlZlwiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYTogJHJlZiwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBiYXNlSWQsIHNjaGVtYUVudjogZW52LCB2YWxpZGF0ZU5hbWUsIG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgICAgICBjb25zdCB7IHJvb3QgfSA9IGVudjtcbiAgICAgICAgaWYgKCgkcmVmID09PSBcIiNcIiB8fCAkcmVmID09PSBcIiMvXCIpICYmIGJhc2VJZCA9PT0gcm9vdC5iYXNlSWQpXG4gICAgICAgICAgICByZXR1cm4gY2FsbFJvb3RSZWYoKTtcbiAgICAgICAgY29uc3Qgc2NoT3JFbnYgPSBjb21waWxlXzEucmVzb2x2ZVJlZi5jYWxsKHNlbGYsIHJvb3QsIGJhc2VJZCwgJHJlZik7XG4gICAgICAgIGlmIChzY2hPckVudiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IHJlZl9lcnJvcl8xLmRlZmF1bHQoaXQub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCAkcmVmKTtcbiAgICAgICAgaWYgKHNjaE9yRW52IGluc3RhbmNlb2YgY29tcGlsZV8xLlNjaGVtYUVudilcbiAgICAgICAgICAgIHJldHVybiBjYWxsVmFsaWRhdGUoc2NoT3JFbnYpO1xuICAgICAgICByZXR1cm4gaW5saW5lUmVmU2NoZW1hKHNjaE9yRW52KTtcbiAgICAgICAgZnVuY3Rpb24gY2FsbFJvb3RSZWYoKSB7XG4gICAgICAgICAgICBpZiAoZW52ID09PSByb290KVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsUmVmKGN4dCwgdmFsaWRhdGVOYW1lLCBlbnYsIGVudi4kYXN5bmMpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInJvb3RcIiwgeyByZWY6IHJvb3QgfSk7XG4gICAgICAgICAgICByZXR1cm4gY2FsbFJlZihjeHQsICgwLCBjb2RlZ2VuXzEuXykgYCR7cm9vdE5hbWV9LnZhbGlkYXRlYCwgcm9vdCwgcm9vdC4kYXN5bmMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZShzY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBnZXRWYWxpZGF0ZShjeHQsIHNjaCk7XG4gICAgICAgICAgICBjYWxsUmVmKGN4dCwgdiwgc2NoLCBzY2guJGFzeW5jKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpbmxpbmVSZWZTY2hlbWEoc2NoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hOYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJzY2hlbWFcIiwgb3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSA/IHsgcmVmOiBzY2gsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2gpIH0gOiB7IHJlZjogc2NoIH0pO1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2gsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICAgICAgICAgIHRvcFNjaGVtYVJlZjogc2NoTmFtZSxcbiAgICAgICAgICAgICAgICBlcnJTY2hlbWFQYXRoOiAkcmVmLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCk7XG4gICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5mdW5jdGlvbiBnZXRWYWxpZGF0ZShjeHQsIHNjaCkge1xuICAgIGNvbnN0IHsgZ2VuIH0gPSBjeHQ7XG4gICAgcmV0dXJuIHNjaC52YWxpZGF0ZVxuICAgICAgICA/IGdlbi5zY29wZVZhbHVlKFwidmFsaWRhdGVcIiwgeyByZWY6IHNjaC52YWxpZGF0ZSB9KVxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Z2VuLnNjb3BlVmFsdWUoXCJ3cmFwcGVyXCIsIHsgcmVmOiBzY2ggfSl9LnZhbGlkYXRlYDtcbn1cbmV4cG9ydHMuZ2V0VmFsaWRhdGUgPSBnZXRWYWxpZGF0ZTtcbmZ1bmN0aW9uIGNhbGxSZWYoY3h0LCB2LCBzY2gsICRhc3luYykge1xuICAgIGNvbnN0IHsgZ2VuLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgYWxsRXJyb3JzLCBzY2hlbWFFbnY6IGVudiwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgcGFzc0N4dCA9IG9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IGNvZGVnZW5fMS5uaWw7XG4gICAgaWYgKCRhc3luYylcbiAgICAgICAgY2FsbEFzeW5jUmVmKCk7XG4gICAgZWxzZVxuICAgICAgICBjYWxsU3luY1JlZigpO1xuICAgIGZ1bmN0aW9uIGNhbGxBc3luY1JlZigpIHtcbiAgICAgICAgaWYgKCFlbnYuJGFzeW5jKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgc2NoZW1hIHJlZmVyZW5jZWQgYnkgc3luYyBzY2hlbWFcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICBnZW4udHJ5KCgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0ICR7KDAsIGNvZGVfMS5jYWxsVmFsaWRhdGVDb2RlKShjeHQsIHYsIHBhc3NDeHQpfWApO1xuICAgICAgICAgICAgYWRkRXZhbHVhdGVkRnJvbSh2KTsgLy8gVE9ETyB3aWxsIG5vdCB3b3JrIHdpdGggYXN5bmMsIGl0IGhhcyB0byBiZSByZXR1cm5lZCB3aXRoIHRoZSByZXN1bHRcbiAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCEoJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfSlgLCAoKSA9PiBnZW4udGhyb3coZSkpO1xuICAgICAgICAgICAgYWRkRXJyb3JzRnJvbShlKTtcbiAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxTeW5jUmVmKCkge1xuICAgICAgICBjeHQucmVzdWx0KCgwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2LCBwYXNzQ3h0KSwgKCkgPT4gYWRkRXZhbHVhdGVkRnJvbSh2KSwgKCkgPT4gYWRkRXJyb3JzRnJvbSh2KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEVycm9yc0Zyb20oc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGVycnMgPSAoMCwgY29kZWdlbl8xLl8pIGAke3NvdXJjZX0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30gPT09IG51bGwgPyAke2VycnN9IDogJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30uY29uY2F0KCR7ZXJyc30pYCk7IC8vIFRPRE8gdGFnZ2VkXG4gICAgICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LmVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEV2YWx1YXRlZEZyb20oc291cmNlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hFdmFsdWF0ZWQgPSAoX2EgPSBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2gudmFsaWRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ldmFsdWF0ZWQ7XG4gICAgICAgIC8vIFRPRE8gcmVmYWN0b3JcbiAgICAgICAgaWYgKGl0LnByb3BzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkICYmICFzY2hFdmFsdWF0ZWQuZHluYW1pY1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZC5wcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoRXZhbHVhdGVkLnByb3BzLCBpdC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBnZW4udmFyKFwicHJvcHNcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmV2YWx1YXRlZC5wcm9wc2ApO1xuICAgICAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgcHJvcHMsIGl0LnByb3BzLCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lml0ZW1zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoc2NoRXZhbHVhdGVkICYmICFzY2hFdmFsdWF0ZWQuZHluYW1pY0l0ZW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZC5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoRXZhbHVhdGVkLml0ZW1zLCBpdC5pdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBnZW4udmFyKFwiaXRlbXNcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmV2YWx1YXRlZC5pdGVtc2ApO1xuICAgICAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgaXRlbXMsIGl0Lml0ZW1zLCBjb2RlZ2VuXzEuTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmNhbGxSZWYgPSBjYWxsUmVmO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js": /*!*************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js ***! \*************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst types_1 = __webpack_require__(/*! ../discriminator/types */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js\");\nconst compile_1 = __webpack_require__(/*! ../../compile */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js\");\nconst ref_error_1 = __webpack_require__(/*! ../../compile/ref_error */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt) {\n const { gen, data, schema, parentSchema, it } = cxt;\n const { oneOf } = parentSchema;\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\");\n }\n const tagName = schema.propertyName;\n if (typeof tagName != \"string\")\n throw new Error(\"discriminator: requires propertyName\");\n if (schema.mapping)\n throw new Error(\"discriminator: mapping is not supported\");\n if (!oneOf)\n throw new Error(\"discriminator: requires oneOf keyword\");\n const valid = gen.let(\"valid\", false);\n const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n cxt.ok(valid);\n function validateMapping() {\n const mapping = getMapping();\n gen.if(false);\n for (const tagValue in mapping) {\n gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n gen.assign(valid, applyTagSchema(mapping[tagValue]));\n }\n gen.else();\n cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n gen.endIf();\n }\n function applyTagSchema(schemaProp) {\n const _valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n return _valid;\n }\n function getMapping() {\n var _a;\n const oneOfMapping = {};\n const topRequired = hasRequired(parentSchema);\n let tagRequired = true;\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i];\n if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n const ref = sch.$ref;\n sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);\n if (sch instanceof compile_1.SchemaEnv)\n sch = sch.schema;\n if (sch === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);\n }\n const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n if (typeof propSch != \"object\") {\n throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch));\n addMappings(propSch, i);\n }\n if (!tagRequired)\n throw new Error(`discriminator: \"${tagName}\" must be required`);\n return oneOfMapping;\n function hasRequired({ required }) {\n return Array.isArray(required) && required.includes(tagName);\n }\n function addMappings(sch, i) {\n if (sch.const) {\n addMapping(sch.const, i);\n }\n else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i);\n }\n }\n else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n }\n }\n function addMapping(tagValue, i) {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n }\n oneOfMapping[tagValue] = i;\n }\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsNklBQXdCO0FBQ2hELGtCQUFrQixtQkFBTyxDQUFDLGlIQUFlO0FBQ3pDLG9CQUFvQixtQkFBTyxDQUFDLCtIQUF5QjtBQUNyRCxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDO0FBQ0EsZ0JBQWdCLFVBQVUsdUJBQXVCO0FBQ2pELGtCQUFrQixRQUFRO0FBQzFCLDJCQUEyQixRQUFRO0FBQ25DLGVBQWUsVUFBVSw0QkFBNEIsd0JBQXdCLFNBQVMsV0FBVyxTQUFTLFFBQVEsY0FBYyxLQUFLO0FBQ3JJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNDQUFzQztBQUN0RCxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELEtBQUssRUFBRSxvQ0FBb0M7QUFDcEcsMENBQTBDLEtBQUssZ0VBQWdFLGtEQUFrRDtBQUNqSztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLEtBQUssTUFBTSxTQUFTO0FBQ25FO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixzREFBc0Q7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsOEJBQThCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsa0JBQWtCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxSEFBcUgsUUFBUTtBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFFBQVE7QUFDM0Q7QUFDQSxtQ0FBbUMsVUFBVTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0UsUUFBUTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxRQUFRO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL2Rpc2NyaW1pbmF0b3IvdHlwZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBkaXNjckVycm9yLCB0YWdOYW1lIH0gfSkgPT4gZGlzY3JFcnJvciA9PT0gdHlwZXNfMS5EaXNjckVycm9yLlRhZ1xuICAgICAgICA/IGB0YWcgXCIke3RhZ05hbWV9XCIgbXVzdCBiZSBzdHJpbmdgXG4gICAgICAgIDogYHZhbHVlIG9mIHRhZyBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIGluIG9uZU9mYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBkaXNjckVycm9yLCB0YWcsIHRhZ05hbWUgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7ZXJyb3I6ICR7ZGlzY3JFcnJvcn0sIHRhZzogJHt0YWdOYW1lfSwgdGFnVmFsdWU6ICR7dGFnfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImRpc2NyaW1pbmF0b3JcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwib2JqZWN0XCIsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9uZU9mIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmICghaXQub3B0cy5kaXNjcmltaW5hdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBkaXNjcmltaW5hdG9yIG9wdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWdOYW1lID0gc2NoZW1hLnByb3BlcnR5TmFtZTtcbiAgICAgICAgaWYgKHR5cGVvZiB0YWdOYW1lICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBwcm9wZXJ0eU5hbWVcIik7XG4gICAgICAgIGlmIChzY2hlbWEubWFwcGluZylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IG1hcHBpbmcgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgaWYgKCFvbmVPZilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpc2NyaW1pbmF0b3I6IHJlcXVpcmVzIG9uZU9mIGtleXdvcmRcIik7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgdGFnID0gZ2VuLmNvbnN0KFwidGFnXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHRhZ05hbWUpfWApO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7dGFnfSA9PSBcInN0cmluZ1wiYCwgKCkgPT4gdmFsaWRhdGVNYXBwaW5nKCksICgpID0+IGN4dC5lcnJvcihmYWxzZSwgeyBkaXNjckVycm9yOiB0eXBlc18xLkRpc2NyRXJyb3IuVGFnLCB0YWcsIHRhZ05hbWUgfSkpO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU1hcHBpbmcoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gZ2V0TWFwcGluZygpO1xuICAgICAgICAgICAgZ2VuLmlmKGZhbHNlKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgaW4gbWFwcGluZykge1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0YWd9ID09PSAke3RhZ1ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGFwcGx5VGFnU2NoZW1hKG1hcHBpbmdbdGFnVmFsdWVdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICAgICAgY3h0LmVycm9yKGZhbHNlLCB7IGRpc2NyRXJyb3I6IHR5cGVzXzEuRGlzY3JFcnJvci5NYXBwaW5nLCB0YWcsIHRhZ05hbWUgfSk7XG4gICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseVRhZ1NjaGVtYShzY2hlbWFQcm9wKSB7XG4gICAgICAgICAgICBjb25zdCBfdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQ6IFwib25lT2ZcIiwgc2NoZW1hUHJvcCB9LCBfdmFsaWQpO1xuICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCwgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIF92YWxpZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRNYXBwaW5nKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3Qgb25lT2ZNYXBwaW5nID0ge307XG4gICAgICAgICAgICBjb25zdCB0b3BSZXF1aXJlZCA9IGhhc1JlcXVpcmVkKHBhcmVudFNjaGVtYSk7XG4gICAgICAgICAgICBsZXQgdGFnUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbmVPZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBzY2ggPSBvbmVPZltpXTtcbiAgICAgICAgICAgICAgICBpZiAoKHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC4kcmVmKSAmJiAhKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoLCBpdC5zZWxmLlJVTEVTKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYgPSBzY2guJHJlZjtcbiAgICAgICAgICAgICAgICAgICAgc2NoID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChpdC5zZWxmLCBpdC5zY2hlbWFFbnYucm9vdCwgaXQuYmFzZUlkLCByZWYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoIGluc3RhbmNlb2YgY29tcGlsZV8xLlNjaGVtYUVudilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaCA9IHNjaC5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyByZWZfZXJyb3JfMS5kZWZhdWx0KGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgcmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcFNjaCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC5wcm9wZXJ0aWVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbdGFnTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wU2NoICE9IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBvbmVPZiBzdWJzY2hlbWFzIChvciByZWZlcmVuY2VkIHNjaGVtYXMpIG11c3QgaGF2ZSBcInByb3BlcnRpZXMvJHt0YWdOYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhZ1JlcXVpcmVkID0gdGFnUmVxdWlyZWQgJiYgKHRvcFJlcXVpcmVkIHx8IGhhc1JlcXVpcmVkKHNjaCkpO1xuICAgICAgICAgICAgICAgIGFkZE1hcHBpbmdzKHByb3BTY2gsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0YWdSZXF1aXJlZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgcmVxdWlyZWRgKTtcbiAgICAgICAgICAgIHJldHVybiBvbmVPZk1hcHBpbmc7XG4gICAgICAgICAgICBmdW5jdGlvbiBoYXNSZXF1aXJlZCh7IHJlcXVpcmVkIH0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXF1aXJlZCkgJiYgcmVxdWlyZWQuaW5jbHVkZXModGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRNYXBwaW5ncyhzY2gsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoLmNvbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcoc2NoLmNvbnN0LCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBvZiBzY2guZW51bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyh0YWdWYWx1ZSwgaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cIiBtdXN0IGhhdmUgXCJjb25zdFwiIG9yIFwiZW51bVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZyh0YWdWYWx1ZSwgaSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFnVmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB0YWdWYWx1ZSBpbiBvbmVPZk1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUgc3RyaW5nc2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbmVPZk1hcHBpbmdbdGFnVmFsdWVdID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js": /*!*************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js ***! \*************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n DiscrError[\"Tag\"] = \"tag\";\n DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError || (exports.DiscrError = DiscrError = {}));\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZGlzY3JpbWluYXRvci90eXBlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGlCQUFpQixrQkFBa0Isa0JBQWtCO0FBQ3REIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL3R5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaXNjckVycm9yID0gdm9pZCAwO1xudmFyIERpc2NyRXJyb3I7XG4oZnVuY3Rpb24gKERpc2NyRXJyb3IpIHtcbiAgICBEaXNjckVycm9yW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICBEaXNjckVycm9yW1wiTWFwcGluZ1wiXSA9IFwibWFwcGluZ1wiO1xufSkoRGlzY3JFcnJvciB8fCAoZXhwb3J0cy5EaXNjckVycm9yID0gRGlzY3JFcnJvciA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js": /*!************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js ***! \************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst core_1 = __webpack_require__(/*! ./core */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js\");\nconst validation_1 = __webpack_require__(/*! ./validation */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js\");\nconst applicator_1 = __webpack_require__(/*! ./applicator */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js\");\nconst format_1 = __webpack_require__(/*! ./format */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js\");\nconst metadata_1 = __webpack_require__(/*! ./metadata */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js\");\nconst draft7Vocabularies = [\n core_1.default,\n validation_1.default,\n (0, applicator_1.default)(),\n format_1.default,\n metadata_1.metadataVocabulary,\n metadata_1.contentVocabulary,\n];\nexports[\"default\"] = draft7Vocabularies;\n//# sourceMappingURL=draft7.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZHJhZnQ3LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWUsbUJBQU8sQ0FBQyxvSEFBUTtBQUMvQixxQkFBcUIsbUJBQU8sQ0FBQyxnSUFBYztBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxnSUFBYztBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyx3SEFBVTtBQUNuQyxtQkFBbUIsbUJBQU8sQ0FBQyxzSEFBWTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZHJhZnQ3LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcbmNvbnN0IHZhbGlkYXRpb25fMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRpb25cIik7XG5jb25zdCBhcHBsaWNhdG9yXzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhdG9yXCIpO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBtZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vbWV0YWRhdGFcIik7XG5jb25zdCBkcmFmdDdWb2NhYnVsYXJpZXMgPSBbXG4gICAgY29yZV8xLmRlZmF1bHQsXG4gICAgdmFsaWRhdGlvbl8xLmRlZmF1bHQsXG4gICAgKDAsIGFwcGxpY2F0b3JfMS5kZWZhdWx0KSgpLFxuICAgIGZvcm1hdF8xLmRlZmF1bHQsXG4gICAgbWV0YWRhdGFfMS5tZXRhZGF0YVZvY2FidWxhcnksXG4gICAgbWV0YWRhdGFfMS5jb250ZW50Vm9jYWJ1bGFyeSxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBkcmFmdDdWb2NhYnVsYXJpZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kcmFmdDcuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js": /*!*******************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js ***! \*******************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt, ruleType) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const { opts, errSchemaPath, schemaEnv, self } = it;\n if (!opts.validateFormats)\n return;\n if ($data)\n validate$DataFormat();\n else\n validateFormat();\n function validate$DataFormat() {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n });\n const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n const fType = gen.let(\"fType\");\n const format = gen.let(\"format\");\n // TODO simplify\n gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n function unknownFmt() {\n if (opts.strictSchema === false)\n return codegen_1.nil;\n return (0, codegen_1._) `${schemaCode} && !${format}`;\n }\n function invalidFmt() {\n const callFormat = schemaEnv.$async\n ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : (0, codegen_1._) `${format}(${data})`;\n const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n }\n }\n function validateFormat() {\n const formatDef = self.formats[schema];\n if (!formatDef) {\n unknownFormat();\n return;\n }\n if (formatDef === true)\n return;\n const [fmtType, format, fmtRef] = getFormat(formatDef);\n if (fmtType === ruleType)\n cxt.pass(validCondition());\n function unknownFormat() {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg());\n return;\n }\n throw new Error(unknownMsg());\n function unknownMsg() {\n return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n }\n }\n function getFormat(fmtDef) {\n const code = fmtDef instanceof RegExp\n ? (0, codegen_1.regexpCode)(fmtDef)\n : opts.code.formats\n ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n : undefined;\n const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n }\n return [\"string\", fmtDef, fmt];\n }\n function validCondition() {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async)\n throw new Error(\"async format in sync schema\");\n return (0, codegen_1._) `await ${fmtRef}(${data})`;\n }\n return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n }\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=format.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2Zvcm1hdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQ7QUFDQSxnQkFBZ0IsWUFBWSw4Q0FBOEMsV0FBVztBQUNyRixlQUFlLFlBQVksd0JBQXdCLFVBQVUsWUFBWTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRCxnQkFBZ0IsdUNBQXVDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLCtEQUErRCxLQUFLLEdBQUcsV0FBVztBQUNsRjtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsTUFBTSxtQkFBbUIsTUFBTSxpRUFBaUUsS0FBSyx1REFBdUQsS0FBSztBQUMvTTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxZQUFZLE1BQU0sT0FBTztBQUNwRTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsS0FBSyxpQkFBaUIsT0FBTyxHQUFHLEtBQUssTUFBTSxPQUFPLEdBQUcsS0FBSztBQUNyRywwQ0FBMEMsT0FBTyxHQUFHLEtBQUs7QUFDekQsOERBQThELFFBQVEsa0JBQWtCLFlBQVksSUFBSSxPQUFPLFFBQVEsS0FBSztBQUM1SCwyQ0FBMkMsUUFBUSxLQUFLLFFBQVEsY0FBYyxPQUFPLE1BQU0sVUFBVSxNQUFNLFVBQVU7QUFDckg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxPQUFPLCtCQUErQixjQUFjO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxrQkFBa0IsRUFBRSxtQ0FBbUM7QUFDckc7QUFDQSx3REFBd0QsZ0NBQWdDO0FBQ3hGO0FBQ0EsMEZBQTBGLElBQUk7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsT0FBTyxHQUFHLEtBQUs7QUFDcEU7QUFDQSx5RUFBeUUsT0FBTyxHQUFHLEtBQUsseUJBQXlCLE9BQU8sUUFBUSxLQUFLO0FBQ3JJO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9mb3JtYXQvZm9ybWF0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIGZvcm1hdCBcIiR7c2NoZW1hQ29kZX1cImAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtmb3JtYXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJmb3JtYXRcIixcbiAgICB0eXBlOiBbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCwgcnVsZVR5cGUpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCwgc2NoZW1hRW52LCBzZWxmIH0gPSBpdDtcbiAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlRm9ybWF0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCRkYXRhKVxuICAgICAgICAgICAgdmFsaWRhdGUkRGF0YUZvcm1hdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1hdCgpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSREYXRhRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm10cyA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBzZWxmLmZvcm1hdHMsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZEZWYgPSBnZW4uY29uc3QoXCJmRGVmXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10c31bJHtzY2hlbWFDb2RlfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGZUeXBlID0gZ2VuLmxldChcImZUeXBlXCIpO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZ2VuLmxldChcImZvcm1hdFwiKTtcbiAgICAgICAgICAgIC8vIFRPRE8gc2ltcGxpZnlcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtmRGVmfSA9PSBcIm9iamVjdFwiICYmICEoJHtmRGVmfSBpbnN0YW5jZW9mIFJlZ0V4cClgLCAoKSA9PiBnZW4uYXNzaWduKGZUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnR5cGUgfHwgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZkRlZn0udmFsaWRhdGVgKSwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsIGZEZWYpKTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5vcikodW5rbm93bkZtdCgpLCBpbnZhbGlkRm10KCkpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25GbXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gJiYgISR7Zm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZhbGlkRm10KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxGb3JtYXQgPSBzY2hlbWFFbnYuJGFzeW5jXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgKCR7ZkRlZn0uYXN5bmMgPyBhd2FpdCAke2Zvcm1hdH0oJHtkYXRhfSkgOiAke2Zvcm1hdH0oJHtkYXRhfSkpYFxuICAgICAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgKHR5cGVvZiAke2Zvcm1hdH0gPT0gXCJmdW5jdGlvblwiID8gJHtjYWxsRm9ybWF0fSA6ICR7Zm9ybWF0fS50ZXN0KCR7ZGF0YX0pKWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSAmJiAke2Zvcm1hdH0gIT09IHRydWUgJiYgJHtmVHlwZX0gPT09ICR7cnVsZVR5cGV9ICYmICEke3ZhbGlkRGF0YX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0RGVmID0gc2VsZi5mb3JtYXRzW3NjaGVtYV07XG4gICAgICAgICAgICBpZiAoIWZvcm1hdERlZikge1xuICAgICAgICAgICAgICAgIHVua25vd25Gb3JtYXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0RGVmID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IFtmbXRUeXBlLCBmb3JtYXQsIGZtdFJlZl0gPSBnZXRGb3JtYXQoZm9ybWF0RGVmKTtcbiAgICAgICAgICAgIGlmIChmbXRUeXBlID09PSBydWxlVHlwZSlcbiAgICAgICAgICAgICAgICBjeHQucGFzcyh2YWxpZENvbmRpdGlvbigpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Gb3JtYXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bk1zZygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB1bmtub3duIGZvcm1hdCBcIiR7c2NoZW1hfVwiIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEZvcm1hdChmbXREZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5yZWdleHBDb2RlKShmbXREZWYpXG4gICAgICAgICAgICAgICAgICAgIDogb3B0cy5jb2RlLmZvcm1hdHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtvcHRzLmNvZGUuZm9ybWF0c30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYSl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHsga2V5OiBzY2hlbWEsIHJlZjogZm10RGVmLCBjb2RlIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm10RGVmID09IFwib2JqZWN0XCIgJiYgIShmbXREZWYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZm10RGVmLnR5cGUgfHwgXCJzdHJpbmdcIiwgZm10RGVmLnZhbGlkYXRlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdH0udmFsaWRhdGVgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcInN0cmluZ1wiLCBmbXREZWYsIGZtdF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB2YWxpZENvbmRpdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm9ybWF0RGVmIGluc3RhbmNlb2YgUmVnRXhwKSAmJiBmb3JtYXREZWYuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHtmbXRSZWZ9KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBmb3JtYXQgPT0gXCJmdW5jdGlvblwiID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRSZWZ9KCR7ZGF0YX0pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfS50ZXN0KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js": /*!******************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js ***! \******************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst format_1 = __webpack_require__(/*! ./format */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js\");\nconst format = [format_1.default];\nexports[\"default\"] = format;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGlCQUFpQixtQkFBTyxDQUFDLHlIQUFVO0FBQ25DO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZm9ybWF0XzEgPSByZXF1aXJlKFwiLi9mb3JtYXRcIik7XG5jb25zdCBmb3JtYXQgPSBbZm9ybWF0XzEuZGVmYXVsdF07XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js": /*!**************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n];\nexports.contentVocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvbWV0YWRhdGEuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QseUJBQXlCLEdBQUcsMEJBQTBCO0FBQ3RELDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL21ldGFkYXRhLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IGV4cG9ydHMubWV0YWRhdGFWb2NhYnVsYXJ5ID0gdm9pZCAwO1xuZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSBbXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICBcImRlcHJlY2F0ZWRcIixcbiAgICBcInJlYWRPbmx5XCIsXG4gICAgXCJ3cml0ZU9ubHlcIixcbiAgICBcImV4YW1wbGVzXCIsXG5dO1xuZXhwb3J0cy5jb250ZW50Vm9jYWJ1bGFyeSA9IFtcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js": /*!**********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js ***! \**********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst equal_1 = __webpack_require__(/*! ../../runtime/equal */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js\");\nconst error = {\n message: \"must be equal to constant\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schemaCode, schema } = cxt;\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n }\n else {\n cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=const.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9jb25zdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyx1SEFBcUI7QUFDN0M7QUFDQTtBQUNBLGVBQWUsWUFBWSx3QkFBd0IsZ0JBQWdCLFlBQVk7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBLCtDQUErQywwQ0FBMEMsR0FBRyxLQUFLLElBQUksV0FBVztBQUNoSDtBQUNBO0FBQ0EseUNBQXlDLFFBQVEsTUFBTSxLQUFLO0FBQzVEO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9jb25zdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IGJlIGVxdWFsIHRvIGNvbnN0YW50XCIsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthbGxvd2VkVmFsdWU6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJjb25zdFwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCAkZGF0YSwgc2NoZW1hQ29kZSwgc2NoZW1hIH0gPSBjeHQ7XG4gICAgICAgIGlmICgkZGF0YSB8fCAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgISR7KDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCl9KCR7ZGF0YX0sICR7c2NoZW1hQ29kZX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjeHQuZmFpbCgoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYX0gIT09ICR7ZGF0YX1gKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3QuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js": /*!*********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js ***! \*********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst equal_1 = __webpack_require__(/*! ../../runtime/equal */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js\");\nconst error = {\n message: \"must be equal to one of the allowed values\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n if (!$data && schema.length === 0)\n throw new Error(\"enum must have non-empty array\");\n const useLoop = schema.length >= it.opts.loopEnum;\n let eql;\n const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n let valid;\n if (useLoop || $data) {\n valid = gen.let(\"valid\");\n cxt.block$data(valid, loopEnum);\n }\n else {\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const vSchema = gen.const(\"vSchema\", schemaCode);\n valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n }\n cxt.pass(valid);\n function loopEnum() {\n gen.assign(valid, false);\n gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n }\n function equalCode(vSchema, i) {\n const sch = schema[i];\n return typeof sch === \"object\" && sch !== null\n ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n : (0, codegen_1._) `${data} === ${sch}`;\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=enum.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9lbnVtLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLGlJQUF1QjtBQUNqRCxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDLGdCQUFnQixtQkFBTyxDQUFDLHVIQUFxQjtBQUM3QztBQUNBO0FBQ0EsZUFBZSxZQUFZLHdCQUF3QixpQkFBaUIsWUFBWTtBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwyQ0FBMkM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSxTQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUU7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsU0FBUyxHQUFHLEtBQUssSUFBSSxRQUFRLEdBQUcsRUFBRTtBQUN4RSxzQ0FBc0MsTUFBTSxNQUFNLElBQUk7QUFDdEQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2VudW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzXCIsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthbGxvd2VkVmFsdWVzOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZW51bVwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiBzY2hlbWEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW51bSBtdXN0IGhhdmUgbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICBjb25zdCB1c2VMb29wID0gc2NoZW1hLmxlbmd0aCA+PSBpdC5vcHRzLmxvb3BFbnVtO1xuICAgICAgICBsZXQgZXFsO1xuICAgICAgICBjb25zdCBnZXRFcWwgPSAoKSA9PiAoZXFsICE9PSBudWxsICYmIGVxbCAhPT0gdm9pZCAwID8gZXFsIDogKGVxbCA9ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCBlcXVhbF8xLmRlZmF1bHQpKSk7XG4gICAgICAgIGxldCB2YWxpZDtcbiAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIGxvb3BFbnVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICAgICAgY29uc3QgdlNjaGVtYSA9IGdlbi5jb25zdChcInZTY2hlbWFcIiwgc2NoZW1hQ29kZSk7XG4gICAgICAgICAgICB2YWxpZCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnNjaGVtYS5tYXAoKF94LCBpKSA9PiBlcXVhbENvZGUodlNjaGVtYSwgaSkpKTtcbiAgICAgICAgfVxuICAgICAgICBjeHQucGFzcyh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BFbnVtKCkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgZ2VuLmZvck9mKFwidlwiLCBzY2hlbWFDb2RlLCAodikgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Z2V0RXFsKCl9KCR7ZGF0YX0sICR7dn0pYCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSkuYnJlYWsoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVxdWFsQ29kZSh2U2NoZW1hLCBpKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFbaV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHNjaCA9PT0gXCJvYmplY3RcIiAmJiBzY2ggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Z2V0RXFsKCl9KCR7ZGF0YX0sICR7dlNjaGVtYX1bJHtpfV0pYFxuICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gJHtzY2h9YDtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW51bS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js": /*!**********************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js ***! \**********************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst limitNumber_1 = __webpack_require__(/*! ./limitNumber */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js\");\nconst multipleOf_1 = __webpack_require__(/*! ./multipleOf */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js\");\nconst limitLength_1 = __webpack_require__(/*! ./limitLength */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js\");\nconst pattern_1 = __webpack_require__(/*! ./pattern */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js\");\nconst limitProperties_1 = __webpack_require__(/*! ./limitProperties */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js\");\nconst required_1 = __webpack_require__(/*! ./required */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js\");\nconst limitItems_1 = __webpack_require__(/*! ./limitItems */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js\");\nconst uniqueItems_1 = __webpack_require__(/*! ./uniqueItems */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js\");\nconst const_1 = __webpack_require__(/*! ./const */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js\");\nconst enum_1 = __webpack_require__(/*! ./enum */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js\");\nconst validation = [\n // number\n limitNumber_1.default,\n multipleOf_1.default,\n // string\n limitLength_1.default,\n pattern_1.default,\n // object\n limitProperties_1.default,\n required_1.default,\n // array\n limitItems_1.default,\n uniqueItems_1.default,\n // any\n { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n { keyword: \"nullable\", schemaType: \"boolean\" },\n const_1.default,\n enum_1.default,\n];\nexports[\"default\"] = validation;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxzQkFBc0IsbUJBQU8sQ0FBQyx1SUFBZTtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxxSUFBYztBQUMzQyxzQkFBc0IsbUJBQU8sQ0FBQyx1SUFBZTtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQywrSEFBVztBQUNyQywwQkFBMEIsbUJBQU8sQ0FBQywrSUFBbUI7QUFDckQsbUJBQW1CLG1CQUFPLENBQUMsaUlBQVk7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMscUlBQWM7QUFDM0Msc0JBQXNCLG1CQUFPLENBQUMsdUlBQWU7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsMkhBQVM7QUFDakMsZUFBZSxtQkFBTyxDQUFDLHlIQUFRO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtEQUFrRDtBQUN4RCxNQUFNLDRDQUE0QztBQUNsRDtBQUNBO0FBQ0E7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbGltaXROdW1iZXJfMSA9IHJlcXVpcmUoXCIuL2xpbWl0TnVtYmVyXCIpO1xuY29uc3QgbXVsdGlwbGVPZl8xID0gcmVxdWlyZShcIi4vbXVsdGlwbGVPZlwiKTtcbmNvbnN0IGxpbWl0TGVuZ3RoXzEgPSByZXF1aXJlKFwiLi9saW1pdExlbmd0aFwiKTtcbmNvbnN0IHBhdHRlcm5fMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm5cIik7XG5jb25zdCBsaW1pdFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0UHJvcGVydGllc1wiKTtcbmNvbnN0IHJlcXVpcmVkXzEgPSByZXF1aXJlKFwiLi9yZXF1aXJlZFwiKTtcbmNvbnN0IGxpbWl0SXRlbXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0SXRlbXNcIik7XG5jb25zdCB1bmlxdWVJdGVtc18xID0gcmVxdWlyZShcIi4vdW5pcXVlSXRlbXNcIik7XG5jb25zdCBjb25zdF8xID0gcmVxdWlyZShcIi4vY29uc3RcIik7XG5jb25zdCBlbnVtXzEgPSByZXF1aXJlKFwiLi9lbnVtXCIpO1xuY29uc3QgdmFsaWRhdGlvbiA9IFtcbiAgICAvLyBudW1iZXJcbiAgICBsaW1pdE51bWJlcl8xLmRlZmF1bHQsXG4gICAgbXVsdGlwbGVPZl8xLmRlZmF1bHQsXG4gICAgLy8gc3RyaW5nXG4gICAgbGltaXRMZW5ndGhfMS5kZWZhdWx0LFxuICAgIHBhdHRlcm5fMS5kZWZhdWx0LFxuICAgIC8vIG9iamVjdFxuICAgIGxpbWl0UHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgcmVxdWlyZWRfMS5kZWZhdWx0LFxuICAgIC8vIGFycmF5XG4gICAgbGltaXRJdGVtc18xLmRlZmF1bHQsXG4gICAgdW5pcXVlSXRlbXNfMS5kZWZhdWx0LFxuICAgIC8vIGFueVxuICAgIHsga2V5d29yZDogXCJ0eXBlXCIsIHNjaGVtYVR5cGU6IFtcInN0cmluZ1wiLCBcImFycmF5XCJdIH0sXG4gICAgeyBrZXl3b3JkOiBcIm51bGxhYmxlXCIsIHNjaGVtYVR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgY29uc3RfMS5kZWZhdWx0LFxuICAgIGVudW1fMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZhbGlkYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js": /*!***************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js ***! \***************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=limitItems.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdEl0ZW1zLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLGlJQUF1QjtBQUNqRDtBQUNBLGNBQWMscUJBQXFCO0FBQ25DO0FBQ0EsbURBQW1ELE1BQU0sT0FBTyxZQUFZO0FBQzVFLEtBQUs7QUFDTCxlQUFlLFlBQVksd0JBQXdCLFNBQVMsWUFBWTtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDRCQUE0QjtBQUM1QztBQUNBLDBDQUEwQyxLQUFLLFVBQVUsSUFBSSxFQUFFLFdBQVc7QUFDMUUsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdEl0ZW1zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4SXRlbXNcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IGl0ZW1zYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4SXRlbXNcIiwgXCJtaW5JdGVtc1wiXSxcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdEl0ZW1zLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js": /*!****************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js ***! \****************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst ucs2length_1 = __webpack_require__(/*! ../../runtime/ucs2length */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode, it } = cxt;\n const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=limitLength.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdExlbmd0aC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLHFIQUFvQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxpSUFBMEI7QUFDdkQ7QUFDQSxjQUFjLHFCQUFxQjtBQUNuQztBQUNBLG1EQUFtRCxNQUFNLE9BQU8sWUFBWTtBQUM1RSxLQUFLO0FBQ0wsZUFBZSxZQUFZLHdCQUF3QixTQUFTLFlBQVk7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQ0FBZ0M7QUFDaEQ7QUFDQSxvRUFBb0UsS0FBSywrQkFBK0IsbURBQW1ELEdBQUcsS0FBSztBQUNuSywwQ0FBMEMsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXO0FBQ2xFLEtBQUs7QUFDTDtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRMZW5ndGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IHVjczJsZW5ndGhfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL3VjczJsZW5ndGhcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heExlbmd0aFwiID8gXCJtb3JlXCIgOiBcImZld2VyXCI7XG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgJHtjb21wfSB0aGFuICR7c2NoZW1hQ29kZX0gY2hhcmFjdGVyc2A7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2xpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFtcIm1heExlbmd0aFwiLCBcIm1pbkxlbmd0aFwiXSxcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY29uc3QgbGVuID0gaXQub3B0cy51bmljb2RlID09PSBmYWxzZSA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7KDAsIHV0aWxfMS51c2VGdW5jKShjeHQuZ2VuLCB1Y3MybGVuZ3RoXzEuZGVmYXVsdCl9KCR7ZGF0YX0pYDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2xlbn0gJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRMZW5ndGguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js": /*!****************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js ***! \****************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=limitNumber.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdE51bWJlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0IsbUJBQU8sQ0FBQyxpSUFBdUI7QUFDakQ7QUFDQTtBQUNBLGVBQWUsd0NBQXdDO0FBQ3ZELGVBQWUsd0NBQXdDO0FBQ3ZELHdCQUF3Qix1Q0FBdUM7QUFDL0Qsd0JBQXdCLHVDQUF1QztBQUMvRDtBQUNBO0FBQ0EsZ0JBQWdCLHFCQUFxQixtQ0FBbUMscUJBQXFCLEVBQUUsV0FBVztBQUMxRyxlQUFlLHFCQUFxQix3QkFBd0IsY0FBYyxvQkFBb0IsV0FBVyxZQUFZO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDLDBDQUEwQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxXQUFXLEtBQUs7QUFDcEcsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdE51bWJlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBtYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBtaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7S1dEc1trZXl3b3JkXS5mYWlsfSAke3NjaGVtYUNvZGV9IHx8IGlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdE51bWJlci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js": /*!********************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js ***! \********************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=limitProperties.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdFByb3BlcnRpZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsa0JBQWtCLG1CQUFPLENBQUMsaUlBQXVCO0FBQ2pEO0FBQ0EsY0FBYyxxQkFBcUI7QUFDbkM7QUFDQSxtREFBbUQsTUFBTSxPQUFPLFlBQVk7QUFDNUUsS0FBSztBQUNMLGVBQWUsWUFBWSx3QkFBd0IsU0FBUyxZQUFZO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0Esc0RBQXNELEtBQUssV0FBVyxJQUFJLEVBQUUsV0FBVztBQUN2RixLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0UHJvcGVydGllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbXAgPSBrZXl3b3JkID09PSBcIm1heFByb3BlcnRpZXNcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IHByb3BlcnRpZXNgO1xuICAgIH0sXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJtYXhQcm9wZXJ0aWVzXCIsIFwibWluUHJvcGVydGllc1wiXSxcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBrZXl3b3JkLCBkYXRhLCBzY2hlbWFDb2RlIH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhQcm9wZXJ0aWVzXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGBPYmplY3Qua2V5cygke2RhdGF9KS5sZW5ndGggJHtvcH0gJHtzY2hlbWFDb2RlfWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXRQcm9wZXJ0aWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js": /*!***************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js ***! \***************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, schemaCode, it } = cxt;\n // const bdt = bad$DataType(schemaCode, def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision;\n const res = gen.let(\"res\");\n const invalid = prec\n ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : (0, codegen_1._) `${res} !== parseInt(${res})`;\n cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=multipleOf.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9tdWx0aXBsZU9mLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLGlJQUF1QjtBQUNqRDtBQUNBLGdCQUFnQixZQUFZLCtDQUErQyxXQUFXO0FBQ3RGLGVBQWUsWUFBWSx3QkFBd0IsY0FBYyxZQUFZO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNEJBQTRCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELElBQUksTUFBTSxJQUFJLFNBQVMsS0FBSztBQUNsRixrQ0FBa0MsS0FBSyxlQUFlLElBQUk7QUFDMUQsMkNBQTJDLFlBQVksWUFBWSxLQUFLLElBQUksS0FBSyxHQUFHLFdBQVcsSUFBSSxRQUFRO0FBQzNHLEtBQUs7QUFDTDtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbXVsdGlwbGVPZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBiZSBtdWx0aXBsZSBvZiAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge211bHRpcGxlT2Y6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICAvLyBjb25zdCBiZHQgPSBiYWQkRGF0YVR5cGUoc2NoZW1hQ29kZSwgPHN0cmluZz5kZWYuc2NoZW1hVHlwZSwgJGRhdGEpXG4gICAgICAgIGNvbnN0IHByZWMgPSBpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb247XG4gICAgICAgIGNvbnN0IHJlcyA9IGdlbi5sZXQoXCJyZXNcIik7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSBwcmVjXG4gICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYE1hdGguYWJzKE1hdGgucm91bmQoJHtyZXN9KSAtICR7cmVzfSkgPiAxZS0ke3ByZWN9YFxuICAgICAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke3Jlc30gIT09IHBhcnNlSW50KCR7cmVzfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCgke3NjaGVtYUNvZGV9ID09PSAwIHx8ICgke3Jlc30gPSAke2RhdGF9LyR7c2NoZW1hQ29kZX0sICR7aW52YWxpZH0pKWApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlwbGVPZi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js": /*!************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js ***! \************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n if ($data) {\n const { regExp } = it.opts.code;\n const regExpCode = regExp.code === \"new RegExp\" ? (0, codegen_1._) `new RegExp` : (0, util_1.useFunc)(gen, regExp);\n const valid = gen.let(\"valid\");\n gen.try(() => gen.assign(valid, (0, codegen_1._) `${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));\n cxt.fail$data((0, codegen_1._) `!${valid}`);\n }\n else {\n const regExp = (0, code_1.usePattern)(cxt, schema);\n cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=pattern.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9wYXR0ZXJuLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWUsbUJBQU8sQ0FBQywrR0FBUztBQUNoQyxlQUFlLG1CQUFPLENBQUMscUhBQW9CO0FBQzNDLGtCQUFrQixtQkFBTyxDQUFDLGlJQUF1QjtBQUNqRDtBQUNBLGdCQUFnQixZQUFZLCtDQUErQyxXQUFXO0FBQ3RGLGVBQWUsWUFBWSx3QkFBd0IsV0FBVyxZQUFZO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNEO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0EsZ0VBQWdFLFdBQVcsR0FBRyxXQUFXLElBQUksRUFBRSxTQUFTLEtBQUs7QUFDN0csK0NBQStDLE1BQU07QUFDckQ7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLE9BQU8sUUFBUSxLQUFLO0FBQ25FO0FBQ0EsS0FBSztBQUNMO0FBQ0Esa0JBQWU7QUFDZiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9wYXR0ZXJuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIHBhdHRlcm4gXCIke3NjaGVtYUNvZGV9XCJgLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cGF0dGVybjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5cIixcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNjaGVtYVR5cGU6IFwic3RyaW5nXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHUgPSBpdC5vcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgICAgIGlmICgkZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgeyByZWdFeHAgfSA9IGl0Lm9wdHMuY29kZTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cENvZGUgPSByZWdFeHAuY29kZSA9PT0gXCJuZXcgUmVnRXhwXCIgPyAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYCA6ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCByZWdFeHApO1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIik7XG4gICAgICAgICAgICBnZW4udHJ5KCgpID0+IGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwQ29kZX0oJHtzY2hlbWFDb2RlfSwgJHt1fSkudGVzdCgke2RhdGF9KWApLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9ICgwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBzY2hlbWEpO1xuICAgICAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAhJHtyZWdFeHB9LnRlc3QoJHtkYXRhfSlgKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js": /*!*************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js ***! \*************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst code_1 = __webpack_require__(/*! ../code */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js\");\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst error = {\n message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, schema, schemaCode, data, $data, it } = cxt;\n const { opts } = it;\n if (!$data && schema.length === 0)\n return;\n const useLoop = schema.length >= opts.loopRequired;\n if (it.allErrors)\n allErrorsMode();\n else\n exitOnErrorMode();\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties;\n const { definedProperties } = cxt.it;\n for (const requiredKey of schema) {\n if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n }\n }\n }\n function allErrorsMode() {\n if (useLoop || $data) {\n cxt.block$data(codegen_1.nil, loopAllRequired);\n }\n else {\n for (const prop of schema) {\n (0, code_1.checkReportMissingProp)(cxt, prop);\n }\n }\n }\n function exitOnErrorMode() {\n const missing = gen.let(\"missing\");\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true);\n cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n cxt.ok(valid);\n }\n else {\n gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n function loopAllRequired() {\n gen.forOf(\"prop\", schemaCode, (prop) => {\n cxt.setParams({ missingProperty: prop });\n gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n });\n }\n function loopUntilMissing(missing, valid) {\n cxt.setParams({ missingProperty: missing });\n gen.forOf(missing, schemaCode, () => {\n gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error();\n gen.break();\n });\n }, codegen_1.nil);\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=required.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9yZXF1aXJlZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxlQUFlLG1CQUFPLENBQUMsK0dBQVM7QUFDaEMsa0JBQWtCLG1CQUFPLENBQUMsaUlBQXVCO0FBQ2pELGVBQWUsbUJBQU8sQ0FBQyxxSEFBb0I7QUFDM0M7QUFDQSxnQkFBZ0IsVUFBVSxtQkFBbUIsd0RBQXdELGdCQUFnQjtBQUNySCxlQUFlLFVBQVUsbUJBQW1CLHdCQUF3QixtQkFBbUIsaUJBQWlCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkNBQTJDO0FBQzNELGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELFlBQVksdUJBQXVCLFdBQVc7QUFDcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx1QkFBdUI7QUFDdkQ7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLDRCQUE0QiwwQkFBMEI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBZTtBQUNmIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2FqdkA4LjE4LjAvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJHttaXNzaW5nUHJvcGVydHl9J2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge21pc3NpbmdQcm9wZXJ0eTogJHttaXNzaW5nUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicmVxdWlyZWRcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBzY2hlbWFDb2RlLCBkYXRhLCAkZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzIH0gPSBpdDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiBzY2hlbWEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB1c2VMb29wID0gc2NoZW1hLmxlbmd0aCA+PSBvcHRzLmxvb3BSZXF1aXJlZDtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycylcbiAgICAgICAgICAgIGFsbEVycm9yc01vZGUoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZXhpdE9uRXJyb3JNb2RlKCk7XG4gICAgICAgIGlmIChvcHRzLnN0cmljdFJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGN4dC5wYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmaW5lZFByb3BlcnRpZXMgfSA9IGN4dC5pdDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWlyZWRLZXkgb2Ygc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKChwcm9wcyA9PT0gbnVsbCB8fCBwcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcHNbcmVxdWlyZWRLZXldKSA9PT0gdW5kZWZpbmVkICYmICFkZWZpbmVkUHJvcGVydGllcy5oYXMocmVxdWlyZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSBpdC5zY2hlbWFFbnYuYmFzZUlkICsgaXQuZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYHJlcXVpcmVkIHByb3BlcnR5IFwiJHtyZXF1aXJlZEtleX1cIiBpcyBub3QgZGVmaW5lZCBhdCBcIiR7c2NoZW1hUGF0aH1cIiAoc3RyaWN0UmVxdWlyZWQpYDtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0UmVxdWlyZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbGxFcnJvcnNNb2RlKCkge1xuICAgICAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjeHQuYmxvY2skZGF0YShjb2RlZ2VuXzEubmlsLCBsb29wQWxsUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4aXRPbkVycm9yTW9kZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pc3NpbmcgPSBnZW4ubGV0KFwibWlzc2luZ1wiKTtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsICgpID0+IGxvb3BVbnRpbE1pc3NpbmcobWlzc2luZywgdmFsaWQpKTtcbiAgICAgICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBzY2hlbWEsIG1pc3NpbmcpKTtcbiAgICAgICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcEFsbFJlcXVpcmVkKCkge1xuICAgICAgICAgICAgZ2VuLmZvck9mKFwicHJvcFwiLCBzY2hlbWFDb2RlLCAocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IHByb3AgfSk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEubm9Qcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBvcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSB7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0pO1xuICAgICAgICAgICAgZ2VuLmZvck9mKG1pc3NpbmcsIHNjaGVtYUNvZGUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIG1pc3NpbmcsIG9wdHMub3duUHJvcGVydGllcykpO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGNvZGVnZW5fMS5uaWwpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1aXJlZC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": /*!****************************************************************************************************!*\ !*** ./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js ***! \****************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst dataType_1 = __webpack_require__(/*! ../../compile/validate/dataType */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js\");\nconst codegen_1 = __webpack_require__(/*! ../../compile/codegen */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js\");\nconst util_1 = __webpack_require__(/*! ../../compile/util */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js\");\nconst equal_1 = __webpack_require__(/*! ../../runtime/equal */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js\");\nconst error = {\n message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n if (!$data && !schema)\n return;\n const valid = gen.let(\"valid\");\n const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n cxt.ok(valid);\n function validateUniqueItems() {\n const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n const j = gen.let(\"j\");\n cxt.setParams({ i, j });\n gen.assign(valid, true);\n gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n }\n function canOptimize() {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n }\n function loopN(i, j) {\n const item = gen.name(\"item\");\n const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n gen.for((0, codegen_1._) `;${i}--;`, () => {\n gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n gen.if(wrongType, (0, codegen_1._) `continue`);\n if (itemTypes.length > 1)\n gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n gen\n .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n cxt.error();\n gen.assign(valid, false).break();\n })\n .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n });\n }\n function loopN2(i, j) {\n const eql = (0, util_1.useFunc)(gen, equal_1.default);\n const outer = gen.name(\"outer\");\n gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error();\n gen.assign(valid, false).break(outer);\n })));\n }\n },\n};\nexports[\"default\"] = def;\n//# sourceMappingURL=uniqueItems.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9hanZAOC4xOC4wL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUIsbUJBQU8sQ0FBQywrSUFBaUM7QUFDNUQsa0JBQWtCLG1CQUFPLENBQUMsaUlBQXVCO0FBQ2pELGVBQWUsbUJBQU8sQ0FBQyxxSEFBb0I7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsdUhBQXFCO0FBQzdDO0FBQ0EsZ0JBQWdCLFVBQVUsUUFBUSxtRUFBbUUsR0FBRyxNQUFNLEdBQUc7QUFDakgsZUFBZSxVQUFVLFFBQVEsd0JBQXdCLEtBQUssRUFBRSxPQUFPLEdBQUc7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5REFBeUQ7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsWUFBWTtBQUNuRjtBQUNBO0FBQ0EsdURBQXVELEtBQUs7QUFDNUQ7QUFDQSw0QkFBNEIsTUFBTTtBQUNsQztBQUNBLHVDQUF1QyxHQUFHO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFLHVDQUF1QyxFQUFFLEVBQUUsR0FBRztBQUM5QyxrREFBa0QsS0FBSyxHQUFHLEVBQUU7QUFDNUQ7QUFDQTtBQUNBLHNEQUFzRCxNQUFNLGtDQUFrQyxNQUFNO0FBQ3BHO0FBQ0EsbURBQW1ELFFBQVEsR0FBRyxLQUFLO0FBQ25FLHNEQUFzRCxRQUFRLEdBQUcsS0FBSztBQUN0RTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLDhDQUE4QyxRQUFRLEdBQUcsS0FBSyxNQUFNLEVBQUU7QUFDdEUsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELEVBQUUsRUFBRSxHQUFHLHFDQUFxQyxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxvQ0FBb0MsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDdEw7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBLGtCQUFlO0FBQ2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYWp2QDguMTguMC9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vdW5pcXVlSXRlbXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgJHtqfSBhbmQgJHtpfSBhcmUgaWRlbnRpY2FsKWAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgaSwgaiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtpOiAke2l9LCBqOiAke2p9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJib29sZWFuXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiAhc2NoZW1hKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgY29uc3QgaXRlbVR5cGVzID0gcGFyZW50U2NoZW1hLml0ZW1zID8gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKHBhcmVudFNjaGVtYS5pdGVtcykgOiBbXTtcbiAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIHZhbGlkYXRlVW5pcXVlSXRlbXMsICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IGZhbHNlYCk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlVW5pcXVlSXRlbXMoKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gZ2VuLmxldChcImlcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgKTtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnZW4ubGV0KFwialwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpLCBqIH0pO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpfSA+IDFgLCAoKSA9PiAoY2FuT3B0aW1pemUoKSA/IGxvb3BOIDogbG9vcE4yKShpLCBqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVR5cGVzLmxlbmd0aCA+IDAgJiYgIWl0ZW1UeXBlcy5zb21lKCh0KSA9PiB0ID09PSBcIm9iamVjdFwiIHx8IHQgPT09IFwiYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcE4oaSwgaikge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdlbi5uYW1lKFwiaXRlbVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHdyb25nVHlwZSA9ICgwLCBkYXRhVHlwZV8xLmNoZWNrRGF0YVR5cGVzKShpdGVtVHlwZXMsIGl0ZW0sIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMS5EYXRhVHlwZS5Xcm9uZyk7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZ2VuLmNvbnN0KFwiaW5kaWNlc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgICAgICAgICAgZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4ubGV0KGl0ZW0sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGBjb250aW51ZWApO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZXMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2l0ZW19ID09IFwic3RyaW5nXCJgLCAoMCwgY29kZWdlbl8xLl8pIGAke2l0ZW19ICs9IFwiX1wiYCk7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtpbmRpY2VzfVske2l0ZW19XSA9PSBcIm51bWJlclwiYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGosICgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7aW5kaWNlc31bJHtpdGVtfV0gPSAke2l9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTjIoaSwgaikge1xuICAgICAgICAgICAgY29uc3QgZXFsID0gKDAsIHV0aWxfMS51c2VGdW5jKShnZW4sIGVxdWFsXzEuZGVmYXVsdCk7XG4gICAgICAgICAgICBjb25zdCBvdXRlciA9IGdlbi5uYW1lKFwib3V0ZXJcIik7XG4gICAgICAgICAgICBnZW4ubGFiZWwob3V0ZXIpLmZvcigoMCwgY29kZWdlbl8xLl8pIGA7JHtpfS0tO2AsICgpID0+IGdlbi5mb3IoKDAsIGNvZGVnZW5fMS5fKSBgJHtqfSA9ICR7aX07ICR7an0tLTtgLCAoKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlcWx9KCR7ZGF0YX1bJHtpfV0sICR7ZGF0YX1bJHtqfV0pYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKS5icmVhayhvdXRlcik7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVJdGVtcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js": /*!****************************************************************************!*\ !*** ./node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js ***! \****************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9iYXNlNjQtanNAMS41LjEvbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBWTs7QUFFWixrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsU0FBUztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQyxVQUFVO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/bson-objectid@2.0.4/node_modules/bson-objectid/objectid.js": /*!***************************************************************************************!*\ !*** ./node_modules/.pnpm/bson-objectid@2.0.4/node_modules/bson-objectid/objectid.js ***! \***************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"(app-pages-browser)/./node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js\")[\"Buffer\"];\n\nvar MACHINE_ID = Math.floor(Math.random() * 0xFFFFFF);\nvar index = ObjectID.index = parseInt(Math.random() * 0xFFFFFF, 10);\nvar pid = (typeof process === 'undefined' || typeof process.pid !== 'number' ? Math.floor(Math.random() * 100000) : process.pid) % 0xFFFF;\n// \n// Attempt to fallback Buffer if _Buffer is undefined (e.g. for Node.js).\n// Worst case fallback to null and handle with null checking before using.\nvar BufferCtr = (() => { try { return _Buffer; }catch(_){ try{ return Buffer; }catch(_){ return null; } } })();\n\n/**\n * Determine if an object is Buffer\n *\n * Author: Feross Aboukhadijeh \n * License: MIT\n *\n */\nvar isBuffer = function (obj) {\n return !!(\n obj != null &&\n obj.constructor &&\n typeof obj.constructor.isBuffer === 'function' &&\n obj.constructor.isBuffer(obj)\n )\n};\n\n// Precomputed hex table enables speedy hex string conversion\nvar hexTable = [];\nfor (var i = 0; i < 256; i++) {\n hexTable[i] = (i <= 15 ? '0' : '') + i.toString(16);\n}\n\n// Regular expression that checks for hex value\nvar checkForHexRegExp = new RegExp('^[0-9a-fA-F]{24}$');\n\n// Lookup tables\nvar decodeLookup = [];\ni = 0;\nwhile (i < 10) decodeLookup[0x30 + i] = i++;\nwhile (i < 16) decodeLookup[0x41 - 10 + i] = decodeLookup[0x61 - 10 + i] = i++;\n\n/**\n * Create a new immutable ObjectID instance\n *\n * @class Represents the BSON ObjectID type\n * @param {String|Number} id Can be a 24 byte hex string, 12 byte binary string or a Number.\n * @return {Object} instance of ObjectID.\n */\nfunction ObjectID(id) {\n if(!(this instanceof ObjectID)) return new ObjectID(id);\n if(id && ((id instanceof ObjectID) || id._bsontype===\"ObjectID\"))\n return id;\n\n this._bsontype = 'ObjectID';\n\n // The most common usecase (blank id, new objectId instance)\n if (id == null || typeof id === 'number') {\n // Generate a new id\n this.id = this.generate(id);\n // Return the object\n return;\n }\n\n // Check if the passed in id is valid\n var valid = ObjectID.isValid(id);\n\n // Throw an error if it's not a valid setup\n if (!valid && id != null) {\n throw new Error(\n 'Argument passed in must be a single String of 12 bytes or a string of 24 hex characters'\n );\n } else if (valid && typeof id === 'string' && id.length === 24) {\n return ObjectID.createFromHexString(id);\n } else if (id != null && id.length === 12) {\n // assume 12 byte string\n this.id = id;\n } else if (id != null && typeof id.toHexString === 'function') {\n // Duck-typing to support ObjectId from different npm packages\n return id;\n } else {\n throw new Error(\n 'Argument passed in must be a single String of 12 bytes or a string of 24 hex characters'\n );\n }\n}\nmodule.exports = ObjectID;\nObjectID.default = ObjectID;\n\n/**\n * Creates an ObjectID from a second based number, with the rest of the ObjectID zeroed out. Used for comparisons or sorting the ObjectID.\n *\n * @param {Number} time an integer number representing a number of seconds.\n * @return {ObjectID} return the created ObjectID\n * @api public\n */\nObjectID.createFromTime = function(time){\n time = parseInt(time, 10) % 0xFFFFFFFF;\n return new ObjectID(hex(8,time)+\"0000000000000000\");\n};\n\n/**\n * Creates an ObjectID from a hex string representation of an ObjectID.\n *\n * @param {String} hexString create a ObjectID from a passed in 24 byte hexstring.\n * @return {ObjectID} return the created ObjectID\n * @api public\n */\nObjectID.createFromHexString = function(hexString) {\n // Throw an error if it's not a valid setup\n if (typeof hexString === 'undefined' || (hexString != null && hexString.length !== 24)) {\n throw new Error(\n 'Argument passed in must be a single String of 12 bytes or a string of 24 hex characters'\n );\n }\n\n // Calculate lengths\n var data = '';\n var i = 0;\n\n while (i < 24) {\n data += String.fromCharCode((decodeLookup[hexString.charCodeAt(i++)] << 4) | decodeLookup[hexString.charCodeAt(i++)]);\n }\n\n return new ObjectID(data);\n};\n\n/**\n * Checks if a value is a valid bson ObjectId\n *\n * @param {String} objectid Can be a 24 byte hex string or an instance of ObjectID.\n * @return {Boolean} return true if the value is a valid bson ObjectID, return false otherwise.\n * @api public\n *\n * THE NATIVE DOCUMENTATION ISN'T CLEAR ON THIS GUY!\n * http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html#objectid-isvalid\n */\nObjectID.isValid = function(id) {\n if (id == null) return false;\n\n if (typeof id === 'number') {\n return true;\n }\n\n if (typeof id === 'string') {\n return id.length === 12 || (id.length === 24 && checkForHexRegExp.test(id));\n }\n\n if (id instanceof ObjectID) {\n return true;\n }\n\n // \n if (isBuffer(id)) {\n return ObjectID.isValid(id.toString('hex'));\n }\n\n // Duck-Typing detection of ObjectId like objects\n // \n if (typeof id.toHexString === 'function') {\n if(\n BufferCtr &&\n (id.id instanceof BufferCtr || typeof id.id === 'string')\n ) {\n return id.id.length === 12 || (id.id.length === 24 && checkForHexRegExp.test(id.id));\n }\n }\n\n return false;\n};\n\nObjectID.prototype = {\n constructor: ObjectID,\n\n /**\n * Return the ObjectID id as a 24 byte hex string representation\n *\n * @return {String} return the 24 byte hex string representation.\n * @api public\n */\n toHexString: function() {\n if (!this.id || !this.id.length) {\n throw new Error(\n 'invalid ObjectId, ObjectId.id must be either a string or a Buffer, but is [' +\n JSON.stringify(this.id) +\n ']'\n );\n }\n\n if (this.id.length === 24) {\n return this.id;\n }\n\n if (isBuffer(this.id)) {\n return this.id.toString('hex')\n }\n\n var hexString = '';\n for (var i = 0; i < this.id.length; i++) {\n hexString += hexTable[this.id.charCodeAt(i)];\n }\n\n return hexString;\n },\n\n /**\n * Compares the equality of this ObjectID with `otherID`.\n *\n * @param {Object} otherId ObjectID instance to compare against.\n * @return {Boolean} the result of comparing two ObjectID's\n * @api public\n */\n equals: function (otherId){\n if (otherId instanceof ObjectID) {\n return this.toString() === otherId.toString();\n } else if (\n typeof otherId === 'string' &&\n ObjectID.isValid(otherId) &&\n otherId.length === 12 &&\n isBuffer(this.id)\n ) {\n return otherId === this.id.toString('binary');\n } else if (typeof otherId === 'string' && ObjectID.isValid(otherId) && otherId.length === 24) {\n return otherId.toLowerCase() === this.toHexString();\n } else if (typeof otherId === 'string' && ObjectID.isValid(otherId) && otherId.length === 12) {\n return otherId === this.id;\n } else if (otherId != null && (otherId instanceof ObjectID || otherId.toHexString)) {\n return otherId.toHexString() === this.toHexString();\n } else {\n return false;\n }\n },\n\n /**\n * Returns the generation date (accurate up to the second) that this ID was generated.\n *\n * @return {Date} the generation date\n * @api public\n */\n getTimestamp: function(){\n var timestamp = new Date();\n var time;\n if (isBuffer(this.id)) {\n time = this.id[3] | (this.id[2] << 8) | (this.id[1] << 16) | (this.id[0] << 24);\n } else {\n time = this.id.charCodeAt(3) | (this.id.charCodeAt(2) << 8) | (this.id.charCodeAt(1) << 16) | (this.id.charCodeAt(0) << 24);\n }\n timestamp.setTime(Math.floor(time) * 1000);\n return timestamp;\n },\n\n /**\n * Generate a 12 byte id buffer used in ObjectID's\n *\n * @method\n * @param {number} [time] optional parameter allowing to pass in a second based timestamp.\n * @return {string} return the 12 byte id buffer string.\n */\n generate: function (time) {\n if ('number' !== typeof time) {\n time = ~~(Date.now() / 1000);\n }\n\n //keep it in the ring!\n time = parseInt(time, 10) % 0xFFFFFFFF;\n\n var inc = next();\n\n return String.fromCharCode(\n ((time >> 24) & 0xFF),\n ((time >> 16) & 0xFF),\n ((time >> 8) & 0xFF),\n (time & 0xFF),\n ((MACHINE_ID >> 16) & 0xFF),\n ((MACHINE_ID >> 8) & 0xFF),\n (MACHINE_ID & 0xFF),\n ((pid >> 8) & 0xFF),\n (pid & 0xFF),\n ((inc >> 16) & 0xFF),\n ((inc >> 8) & 0xFF),\n (inc & 0xFF)\n )\n },\n};\n\nfunction next() {\n return index = (index+1) % 0xFFFFFF;\n}\n\nfunction hex(length, n) {\n n = n.toString(16);\n return (n.length===length)? n : \"00000000\".substring(n.length, length) + n;\n}\n\nfunction buffer(str) {\n var i=0,out=[];\n\n if(str.length===24)\n for(;i<24; out.push(parseInt(str[i]+str[i+1], 16)),i+=2);\n\n else if(str.length===12)\n for(;i<12; out.push(str.charCodeAt(i)),i++);\n\n return out;\n}\n\nvar inspect = (Symbol && Symbol.for && Symbol.for('nodejs.util.inspect.custom')) || 'inspect';\n\n/**\n * Converts to a string representation of this Id.\n *\n * @return {String} return the 24 byte hex string representation.\n * @api private\n */\nObjectID.prototype[inspect] = function() { return \"ObjectID(\"+this+\")\" };\nObjectID.prototype.toJSON = ObjectID.prototype.toHexString;\nObjectID.prototype.toString = ObjectID.prototype.toHexString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9ic29uLW9iamVjdGlkQDIuMC40L25vZGVfbW9kdWxlcy9ic29uLW9iamVjdGlkL29iamVjdGlkLmpzIiwibWFwcGluZ3MiOiI7OztBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsT0FBTywyQkFBMkIsT0FBTyx5REFBeUQsT0FBTztBQUMzSDtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsTUFBTSxpQkFBaUIsVUFBVSxLQUFLLE9BQU8sTUFBTSxHQUFHLFVBQVUsa0JBQWtCOztBQUUzRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQSxpREFBaUQsR0FBRzs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWMsU0FBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVMsTUFBTTs7QUFFZjtBQUNBLFNBQVMsTUFBTTs7QUFFZjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vYnNvbi1vYmplY3RpZEAyLjAuNC9ub2RlX21vZHVsZXMvYnNvbi1vYmplY3RpZC9vYmplY3RpZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbnZhciBNQUNISU5FX0lEID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMHhGRkZGRkYpO1xudmFyIGluZGV4ID0gT2JqZWN0SUQuaW5kZXggPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogMHhGRkZGRkYsIDEwKTtcbnZhciBwaWQgPSAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBwcm9jZXNzLnBpZCAhPT0gJ251bWJlcicgPyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDApIDogcHJvY2Vzcy5waWQpICUgMHhGRkZGO1xuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS93aWxsaWFta2Fwa2UvYnNvbi1vYmplY3RpZC9wdWxsLzUxPlxuLy8gQXR0ZW1wdCB0byBmYWxsYmFjayBCdWZmZXIgaWYgX0J1ZmZlciBpcyB1bmRlZmluZWQgKGUuZy4gZm9yIE5vZGUuanMpLlxuLy8gV29yc3QgY2FzZSBmYWxsYmFjayB0byBudWxsIGFuZCBoYW5kbGUgd2l0aCBudWxsIGNoZWNraW5nIGJlZm9yZSB1c2luZy5cbnZhciBCdWZmZXJDdHIgPSAoKCkgPT4geyB0cnkgeyByZXR1cm4gX0J1ZmZlcjsgfWNhdGNoKF8peyB0cnl7IHJldHVybiBCdWZmZXI7IH1jYXRjaChfKXsgcmV0dXJuIG51bGw7IH0gfSB9KSgpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgQnVmZmVyXG4gKlxuICogQXV0aG9yOiAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBMaWNlbnNlOiAgTUlUXG4gKlxuICovXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiAhIShcbiAgb2JqICE9IG51bGwgJiZcbiAgb2JqLmNvbnN0cnVjdG9yICYmXG4gIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbiAgKVxufTtcblxuLy8gUHJlY29tcHV0ZWQgaGV4IHRhYmxlIGVuYWJsZXMgc3BlZWR5IGhleCBzdHJpbmcgY29udmVyc2lvblxudmFyIGhleFRhYmxlID0gW107XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gIGhleFRhYmxlW2ldID0gKGkgPD0gMTUgPyAnMCcgOiAnJykgKyBpLnRvU3RyaW5nKDE2KTtcbn1cblxuLy8gUmVndWxhciBleHByZXNzaW9uIHRoYXQgY2hlY2tzIGZvciBoZXggdmFsdWVcbnZhciBjaGVja0ZvckhleFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ15bMC05YS1mQS1GXXsyNH0kJyk7XG5cbi8vIExvb2t1cCB0YWJsZXNcbnZhciBkZWNvZGVMb29rdXAgPSBbXTtcbmkgPSAwO1xud2hpbGUgKGkgPCAxMCkgZGVjb2RlTG9va3VwWzB4MzAgKyBpXSA9IGkrKztcbndoaWxlIChpIDwgMTYpIGRlY29kZUxvb2t1cFsweDQxIC0gMTAgKyBpXSA9IGRlY29kZUxvb2t1cFsweDYxIC0gMTAgKyBpXSA9IGkrKztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW1tdXRhYmxlIE9iamVjdElEIGluc3RhbmNlXG4gKlxuICogQGNsYXNzIFJlcHJlc2VudHMgdGhlIEJTT04gT2JqZWN0SUQgdHlwZVxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBpZCBDYW4gYmUgYSAyNCBieXRlIGhleCBzdHJpbmcsIDEyIGJ5dGUgYmluYXJ5IHN0cmluZyBvciBhIE51bWJlci5cbiAqIEByZXR1cm4ge09iamVjdH0gaW5zdGFuY2Ugb2YgT2JqZWN0SUQuXG4gKi9cbmZ1bmN0aW9uIE9iamVjdElEKGlkKSB7XG4gIGlmKCEodGhpcyBpbnN0YW5jZW9mIE9iamVjdElEKSkgcmV0dXJuIG5ldyBPYmplY3RJRChpZCk7XG4gIGlmKGlkICYmICgoaWQgaW5zdGFuY2VvZiBPYmplY3RJRCkgfHwgaWQuX2Jzb250eXBlPT09XCJPYmplY3RJRFwiKSlcbiAgICByZXR1cm4gaWQ7XG5cbiAgdGhpcy5fYnNvbnR5cGUgPSAnT2JqZWN0SUQnO1xuXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB1c2VjYXNlIChibGFuayBpZCwgbmV3IG9iamVjdElkIGluc3RhbmNlKVxuICBpZiAoaWQgPT0gbnVsbCB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInKSB7XG4gICAgLy8gR2VuZXJhdGUgYSBuZXcgaWRcbiAgICB0aGlzLmlkID0gdGhpcy5nZW5lcmF0ZShpZCk7XG4gICAgLy8gUmV0dXJuIHRoZSBvYmplY3RcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcGFzc2VkIGluIGlkIGlzIHZhbGlkXG4gIHZhciB2YWxpZCA9IE9iamVjdElELmlzVmFsaWQoaWQpO1xuXG4gIC8vIFRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90IGEgdmFsaWQgc2V0dXBcbiAgaWYgKCF2YWxpZCAmJiBpZCAhPSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0FyZ3VtZW50IHBhc3NlZCBpbiBtdXN0IGJlIGEgc2luZ2xlIFN0cmluZyBvZiAxMiBieXRlcyBvciBhIHN0cmluZyBvZiAyNCBoZXggY2hhcmFjdGVycydcbiAgICApO1xuICB9IGVsc2UgaWYgKHZhbGlkICYmIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgJiYgaWQubGVuZ3RoID09PSAyNCkge1xuICAgIHJldHVybiBPYmplY3RJRC5jcmVhdGVGcm9tSGV4U3RyaW5nKGlkKTtcbiAgfSBlbHNlIGlmIChpZCAhPSBudWxsICYmIGlkLmxlbmd0aCA9PT0gMTIpIHtcbiAgICAvLyBhc3N1bWUgMTIgYnl0ZSBzdHJpbmdcbiAgICB0aGlzLmlkID0gaWQ7XG4gIH0gZWxzZSBpZiAoaWQgIT0gbnVsbCAmJiB0eXBlb2YgaWQudG9IZXhTdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBEdWNrLXR5cGluZyB0byBzdXBwb3J0IE9iamVjdElkIGZyb20gZGlmZmVyZW50IG5wbSBwYWNrYWdlc1xuICAgIHJldHVybiBpZDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQXJndW1lbnQgcGFzc2VkIGluIG11c3QgYmUgYSBzaW5nbGUgU3RyaW5nIG9mIDEyIGJ5dGVzIG9yIGEgc3RyaW5nIG9mIDI0IGhleCBjaGFyYWN0ZXJzJ1xuICAgICk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0SUQ7XG5PYmplY3RJRC5kZWZhdWx0ID0gT2JqZWN0SUQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBPYmplY3RJRCBmcm9tIGEgc2Vjb25kIGJhc2VkIG51bWJlciwgd2l0aCB0aGUgcmVzdCBvZiB0aGUgT2JqZWN0SUQgemVyb2VkIG91dC4gVXNlZCBmb3IgY29tcGFyaXNvbnMgb3Igc29ydGluZyB0aGUgT2JqZWN0SUQuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHRpbWUgYW4gaW50ZWdlciBudW1iZXIgcmVwcmVzZW50aW5nIGEgbnVtYmVyIG9mIHNlY29uZHMuXG4gKiBAcmV0dXJuIHtPYmplY3RJRH0gcmV0dXJuIHRoZSBjcmVhdGVkIE9iamVjdElEXG4gKiBAYXBpIHB1YmxpY1xuICovXG5PYmplY3RJRC5jcmVhdGVGcm9tVGltZSA9IGZ1bmN0aW9uKHRpbWUpe1xuICB0aW1lID0gcGFyc2VJbnQodGltZSwgMTApICUgMHhGRkZGRkZGRjtcbiAgcmV0dXJuIG5ldyBPYmplY3RJRChoZXgoOCx0aW1lKStcIjAwMDAwMDAwMDAwMDAwMDBcIik7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gT2JqZWN0SUQgZnJvbSBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gT2JqZWN0SUQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhleFN0cmluZyBjcmVhdGUgYSBPYmplY3RJRCBmcm9tIGEgcGFzc2VkIGluIDI0IGJ5dGUgaGV4c3RyaW5nLlxuICogQHJldHVybiB7T2JqZWN0SUR9IHJldHVybiB0aGUgY3JlYXRlZCBPYmplY3RJRFxuICogQGFwaSBwdWJsaWNcbiAqL1xuT2JqZWN0SUQuY3JlYXRlRnJvbUhleFN0cmluZyA9IGZ1bmN0aW9uKGhleFN0cmluZykge1xuICAvLyBUaHJvdyBhbiBlcnJvciBpZiBpdCdzIG5vdCBhIHZhbGlkIHNldHVwXG4gIGlmICh0eXBlb2YgaGV4U3RyaW5nID09PSAndW5kZWZpbmVkJyB8fCAoaGV4U3RyaW5nICE9IG51bGwgJiYgaGV4U3RyaW5nLmxlbmd0aCAhPT0gMjQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0FyZ3VtZW50IHBhc3NlZCBpbiBtdXN0IGJlIGEgc2luZ2xlIFN0cmluZyBvZiAxMiBieXRlcyBvciBhIHN0cmluZyBvZiAyNCBoZXggY2hhcmFjdGVycydcbiAgICApO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGxlbmd0aHNcbiAgdmFyIGRhdGEgPSAnJztcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgMjQpIHtcbiAgICBkYXRhICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGRlY29kZUxvb2t1cFtoZXhTdHJpbmcuY2hhckNvZGVBdChpKyspXSA8PCA0KSB8IGRlY29kZUxvb2t1cFtoZXhTdHJpbmcuY2hhckNvZGVBdChpKyspXSk7XG4gIH1cblxuICByZXR1cm4gbmV3IE9iamVjdElEKGRhdGEpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIGJzb24gT2JqZWN0SWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gb2JqZWN0aWQgQ2FuIGJlIGEgMjQgYnl0ZSBoZXggc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIE9iamVjdElELlxuICogQHJldHVybiB7Qm9vbGVhbn0gcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgYnNvbiBPYmplY3RJRCwgcmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBhcGkgcHVibGljXG4gKlxuICogVEhFIE5BVElWRSBET0NVTUVOVEFUSU9OIElTTidUIENMRUFSIE9OIFRISVMgR1VZIVxuICogaHR0cDovL21vbmdvZGIuZ2l0aHViLmlvL25vZGUtbW9uZ29kYi1uYXRpdmUvYXBpLWJzb24tZ2VuZXJhdGVkL29iamVjdGlkLmh0bWwjb2JqZWN0aWQtaXN2YWxpZFxuICovXG5PYmplY3RJRC5pc1ZhbGlkID0gZnVuY3Rpb24oaWQpIHtcbiAgaWYgKGlkID09IG51bGwpIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGlkID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaWQubGVuZ3RoID09PSAxMiB8fCAoaWQubGVuZ3RoID09PSAyNCAmJiBjaGVja0ZvckhleFJlZ0V4cC50ZXN0KGlkKSk7XG4gIH1cblxuICBpZiAoaWQgaW5zdGFuY2VvZiBPYmplY3RJRCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS93aWxsaWFta2Fwa2UvYnNvbi1vYmplY3RpZC9pc3N1ZXMvNTM+XG4gIGlmIChpc0J1ZmZlcihpZCkpIHtcbiAgICByZXR1cm4gT2JqZWN0SUQuaXNWYWxpZChpZC50b1N0cmluZygnaGV4JykpO1xuICB9XG5cbiAgLy8gRHVjay1UeXBpbmcgZGV0ZWN0aW9uIG9mIE9iamVjdElkIGxpa2Ugb2JqZWN0c1xuICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL3dpbGxpYW1rYXBrZS9ic29uLW9iamVjdGlkL3B1bGwvNTE+XG4gIGlmICh0eXBlb2YgaWQudG9IZXhTdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZihcbiAgICAgIEJ1ZmZlckN0ciAmJlxuICAgICAgKGlkLmlkIGluc3RhbmNlb2YgQnVmZmVyQ3RyIHx8IHR5cGVvZiBpZC5pZCA9PT0gJ3N0cmluZycpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaWQuaWQubGVuZ3RoID09PSAxMiB8fCAoaWQuaWQubGVuZ3RoID09PSAyNCAmJiBjaGVja0ZvckhleFJlZ0V4cC50ZXN0KGlkLmlkKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuT2JqZWN0SUQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogT2JqZWN0SUQsXG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgT2JqZWN0SUQgaWQgYXMgYSAyNCBieXRlIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICpcbiAgICogQHJldHVybiB7U3RyaW5nfSByZXR1cm4gdGhlIDI0IGJ5dGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG4gIHRvSGV4U3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaWQgfHwgIXRoaXMuaWQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdpbnZhbGlkIE9iamVjdElkLCBPYmplY3RJZC5pZCBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyBvciBhIEJ1ZmZlciwgYnV0IGlzIFsnICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmlkKSArXG4gICAgICAgICAgJ10nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlkLmxlbmd0aCA9PT0gMjQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cblxuICAgIGlmIChpc0J1ZmZlcih0aGlzLmlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaWQudG9TdHJpbmcoJ2hleCcpXG4gICAgfVxuXG4gICAgdmFyIGhleFN0cmluZyA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pZC5sZW5ndGg7IGkrKykge1xuICAgICAgaGV4U3RyaW5nICs9IGhleFRhYmxlW3RoaXMuaWQuY2hhckNvZGVBdChpKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGhleFN0cmluZztcbiAgfSxcblxuICAvKipcbiAgICogQ29tcGFyZXMgdGhlIGVxdWFsaXR5IG9mIHRoaXMgT2JqZWN0SUQgd2l0aCBgb3RoZXJJRGAuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlcklkIE9iamVjdElEIGluc3RhbmNlIHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdGhlIHJlc3VsdCBvZiBjb21wYXJpbmcgdHdvIE9iamVjdElEJ3NcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG4gIGVxdWFsczogZnVuY3Rpb24gKG90aGVySWQpe1xuICAgIGlmIChvdGhlcklkIGluc3RhbmNlb2YgT2JqZWN0SUQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCkgPT09IG90aGVySWQudG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIG90aGVySWQgPT09ICdzdHJpbmcnICYmXG4gICAgICBPYmplY3RJRC5pc1ZhbGlkKG90aGVySWQpICYmXG4gICAgICBvdGhlcklkLmxlbmd0aCA9PT0gMTIgJiZcbiAgICAgIGlzQnVmZmVyKHRoaXMuaWQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gb3RoZXJJZCA9PT0gdGhpcy5pZC50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3RoZXJJZCA9PT0gJ3N0cmluZycgJiYgT2JqZWN0SUQuaXNWYWxpZChvdGhlcklkKSAmJiBvdGhlcklkLmxlbmd0aCA9PT0gMjQpIHtcbiAgICAgIHJldHVybiBvdGhlcklkLnRvTG93ZXJDYXNlKCkgPT09IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvdGhlcklkID09PSAnc3RyaW5nJyAmJiBPYmplY3RJRC5pc1ZhbGlkKG90aGVySWQpICYmIG90aGVySWQubGVuZ3RoID09PSAxMikge1xuICAgICAgcmV0dXJuIG90aGVySWQgPT09IHRoaXMuaWQ7XG4gICAgfSBlbHNlIGlmIChvdGhlcklkICE9IG51bGwgJiYgKG90aGVySWQgaW5zdGFuY2VvZiBPYmplY3RJRCB8fCBvdGhlcklkLnRvSGV4U3RyaW5nKSkge1xuICAgICAgcmV0dXJuIG90aGVySWQudG9IZXhTdHJpbmcoKSA9PT0gdGhpcy50b0hleFN0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnZW5lcmF0aW9uIGRhdGUgKGFjY3VyYXRlIHVwIHRvIHRoZSBzZWNvbmQpIHRoYXQgdGhpcyBJRCB3YXMgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcmV0dXJuIHtEYXRlfSB0aGUgZ2VuZXJhdGlvbiBkYXRlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuICBnZXRUaW1lc3RhbXA6IGZ1bmN0aW9uKCl7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG5ldyBEYXRlKCk7XG4gICAgdmFyIHRpbWU7XG4gICAgaWYgKGlzQnVmZmVyKHRoaXMuaWQpKSB7XG4gICAgICB0aW1lID0gdGhpcy5pZFszXSB8ICh0aGlzLmlkWzJdIDw8IDgpIHwgKHRoaXMuaWRbMV0gPDwgMTYpIHwgKHRoaXMuaWRbMF0gPDwgMjQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lID0gdGhpcy5pZC5jaGFyQ29kZUF0KDMpIHwgKHRoaXMuaWQuY2hhckNvZGVBdCgyKSA8PCA4KSB8ICh0aGlzLmlkLmNoYXJDb2RlQXQoMSkgPDwgMTYpIHwgKHRoaXMuaWQuY2hhckNvZGVBdCgwKSA8PCAyNCk7XG4gICAgfVxuICAgIHRpbWVzdGFtcC5zZXRUaW1lKE1hdGguZmxvb3IodGltZSkgKiAxMDAwKTtcbiAgICByZXR1cm4gdGltZXN0YW1wO1xuICB9LFxuXG4gIC8qKlxuICAqIEdlbmVyYXRlIGEgMTIgYnl0ZSBpZCBidWZmZXIgdXNlZCBpbiBPYmplY3RJRCdzXG4gICpcbiAgKiBAbWV0aG9kXG4gICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lXSBvcHRpb25hbCBwYXJhbWV0ZXIgYWxsb3dpbmcgdG8gcGFzcyBpbiBhIHNlY29uZCBiYXNlZCB0aW1lc3RhbXAuXG4gICogQHJldHVybiB7c3RyaW5nfSByZXR1cm4gdGhlIDEyIGJ5dGUgaWQgYnVmZmVyIHN0cmluZy5cbiAgKi9cbiAgZ2VuZXJhdGU6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGltZSkge1xuICAgICAgdGltZSA9IH5+KERhdGUubm93KCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICAvL2tlZXAgaXQgaW4gdGhlIHJpbmchXG4gICAgdGltZSA9IHBhcnNlSW50KHRpbWUsIDEwKSAlIDB4RkZGRkZGRkY7XG5cbiAgICB2YXIgaW5jID0gbmV4dCgpO1xuXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgICAoKHRpbWUgPj4gMjQpICYgMHhGRiksXG4gICAgICAoKHRpbWUgPj4gMTYpICYgMHhGRiksXG4gICAgICAoKHRpbWUgPj4gOCkgJiAweEZGKSxcbiAgICAgICh0aW1lICYgMHhGRiksXG4gICAgICAoKE1BQ0hJTkVfSUQgPj4gMTYpICYgMHhGRiksXG4gICAgICAoKE1BQ0hJTkVfSUQgPj4gOCkgJiAweEZGKSxcbiAgICAgIChNQUNISU5FX0lEICYgMHhGRiksXG4gICAgICAoKHBpZCA+PiA4KSAmIDB4RkYpLFxuICAgICAgKHBpZCAmIDB4RkYpLFxuICAgICAgKChpbmMgPj4gMTYpICYgMHhGRiksXG4gICAgICAoKGluYyA+PiA4KSAmIDB4RkYpLFxuICAgICAgKGluYyAmIDB4RkYpXG4gICAgKVxuICB9LFxufTtcblxuZnVuY3Rpb24gbmV4dCgpIHtcbiAgcmV0dXJuIGluZGV4ID0gKGluZGV4KzEpICUgMHhGRkZGRkY7XG59XG5cbmZ1bmN0aW9uIGhleChsZW5ndGgsIG4pIHtcbiAgbiA9IG4udG9TdHJpbmcoMTYpO1xuICByZXR1cm4gKG4ubGVuZ3RoPT09bGVuZ3RoKT8gbiA6IFwiMDAwMDAwMDBcIi5zdWJzdHJpbmcobi5sZW5ndGgsIGxlbmd0aCkgKyBuO1xufVxuXG5mdW5jdGlvbiBidWZmZXIoc3RyKSB7XG4gIHZhciBpPTAsb3V0PVtdO1xuXG4gIGlmKHN0ci5sZW5ndGg9PT0yNClcbiAgICBmb3IoO2k8MjQ7IG91dC5wdXNoKHBhcnNlSW50KHN0cltpXStzdHJbaSsxXSwgMTYpKSxpKz0yKTtcblxuICBlbHNlIGlmKHN0ci5sZW5ndGg9PT0xMilcbiAgICBmb3IoO2k8MTI7IG91dC5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpKSxpKyspO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbnZhciBpbnNwZWN0ID0gKFN5bWJvbCAmJiBTeW1ib2wuZm9yICYmIFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHx8ICdpbnNwZWN0JztcblxuLyoqXG4gKiBDb252ZXJ0cyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIElkLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJuIHRoZSAyNCBieXRlIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuT2JqZWN0SUQucHJvdG90eXBlW2luc3BlY3RdID0gZnVuY3Rpb24oKSB7IHJldHVybiBcIk9iamVjdElEKFwiK3RoaXMrXCIpXCIgfTtcbk9iamVjdElELnByb3RvdHlwZS50b0pTT04gPSBPYmplY3RJRC5wcm90b3R5cGUudG9IZXhTdHJpbmc7XG5PYmplY3RJRC5wcm90b3R5cGUudG9TdHJpbmcgPSBPYmplY3RJRC5wcm90b3R5cGUudG9IZXhTdHJpbmc7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/bson-objectid@2.0.4/node_modules/bson-objectid/objectid.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js": /*!**********************************************************************!*\ !*** ./node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\n\nconst base64 = __webpack_require__(/*! base64-js */ \"(app-pages-browser)/./node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js\")\nconst ieee754 = __webpack_require__(/*! ieee754 */ \"(app-pages-browser)/./node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js\")\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXJANi4wLjMvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFWTs7QUFFWixlQUFlLG1CQUFPLENBQUMsMkdBQVc7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMscUdBQVM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkLGtCQUFrQjtBQUNsQix5QkFBeUI7O0FBRXpCO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsaUJBQWlCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaURBQWlELEVBQUU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZUFBZTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSx5QkFBeUIsUUFBUTtBQUNqQztBQUNBLHNCQUFzQixlQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFlBQVk7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsU0FBUztBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsU0FBUztBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixzQkFBc0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVB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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjLFlBQVk7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9idWZmZXJANi4wLjMvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxuY29uc3QgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxuY29uc3QgY3VzdG9tSW5zcGVjdFN5bWJvbCA9XG4gICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2xbJ2ZvciddID09PSAnZnVuY3Rpb24nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgID8gU3ltYm9sWydmb3InXSgnbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgIDogbnVsbFxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbmNvbnN0IEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgY29uc3QgcHJvdG8gPSB7IGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90bylcbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdwYXJlbnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXRcbiAgfVxufSlcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5Vmlldyh2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgICApXG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgKGlzSW5zdGFuY2UodmFsdWUsIFNoYXJlZEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBTaGFyZWRBcnJheUJ1ZmZlcikpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICApXG4gIH1cblxuICBjb25zdCB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBjb25zdCBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIGxldCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIGNvbnN0IGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5VmlldyAoYXJyYXlWaWV3KSB7XG4gIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHtcbiAgICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlWaWV3KVxuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIoY29weS5idWZmZXIsIGNvcHkuYnl0ZU9mZnNldCwgY29weS5ieXRlTGVuZ3RoKVxuICB9XG4gIHJldHVybiBmcm9tQXJyYXlMaWtlKGFycmF5Vmlldylcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGxldCBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgY29uc3QgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgIH1cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gIH1cblxuICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmXG4gICAgYiAhPT0gQnVmZmVyLnByb3RvdHlwZSAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBpZiAoaXNJbnN0YW5jZShiLCBVaW50OEFycmF5KSkgYiA9IEJ1ZmZlci5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknXG4gICAgKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgbGV0IHggPSBhLmxlbmd0aFxuICBsZXQgeSA9IGIubGVuZ3RoXG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICBsZXQgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIGxldCBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBpZiAocG9zICsgYnVmLmxlbmd0aCA+IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgYnVmID0gQnVmZmVyLmZyb20oYnVmKVxuICAgICAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBidWYsXG4gICAgICAgICAgcG9zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgfVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgY29uc3QgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBjb25zdCBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICBjb25zdCBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmdcblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICBsZXQgc3RyID0gJydcbiAgY29uc3QgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgbGV0IHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIGxldCB5ID0gZW5kIC0gc3RhcnRcbiAgY29uc3QgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICBjb25zdCB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICBjb25zdCB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgbGV0IGluZGV4U2l6ZSA9IDFcbiAgbGV0IGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgbGV0IHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGRpcikge1xuICAgIGxldCBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgY29uc3QgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICBjb25zdCByZXMgPSBbXVxuXG4gIGxldCBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICBjb25zdCBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICBsZXQgY29kZVBvaW50ID0gbnVsbFxuICAgIGxldCBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpXG4gICAgICA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpXG4gICAgICAgICAgPyAzXG4gICAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRilcbiAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgbGV0IHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxuY29uc3QgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBsZXQgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIGxldCBvdXQgPSAnJ1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSBoZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV1cbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIGxldCByZXMgPSAnJ1xuICAvLyBJZiBieXRlcy5sZW5ndGggaXMgb2RkLCB0aGUgbGFzdCA4IGJpdHMgbXVzdCBiZSBpZ25vcmVkIChzYW1lIGFzIG5vZGUuanMpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIGNvbnN0IG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdXG4gIGxldCBtdWwgPSAxXG4gIGxldCBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgbGV0IG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0TEUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBsbyA9IGZpcnN0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjRcblxuICBjb25zdCBoaSA9IHRoaXNbKytvZmZzZXRdICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICBsYXN0ICogMiAqKiAyNFxuXG4gIHJldHVybiBCaWdJbnQobG8pICsgKEJpZ0ludChoaSkgPDwgQmlnSW50KDMyKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRCRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IGhpID0gZmlyc3QgKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIGNvbnN0IGxvID0gdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0XG5cbiAgcmV0dXJuIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aFxuICBsZXQgbXVsID0gMVxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyA0XSArXG4gICAgdGhpc1tvZmZzZXQgKyA1XSAqIDIgKiogOCArXG4gICAgdGhpc1tvZmZzZXQgKyA2XSAqIDIgKiogMTYgK1xuICAgIChsYXN0IDw8IDI0KSAvLyBPdmVyZmxvd1xuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludChmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0KVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRCRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyAvLyBPdmVyZmxvd1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdXG5cbiAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArXG4gICAgQmlnSW50KHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBtdWwgPSAxXG4gIGxldCBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0TEUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgcmV0dXJuIG9mZnNldFxufVxuXG5mdW5jdGlvbiB3cnRCaWdVSW50NjRCRSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkge1xuICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpXG5cbiAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0ICsgN10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDZdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA1XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNF0gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDNdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQgKyAyXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMV0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldF0gPSBoaVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NEJFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0QkUodGhpcywgdmFsdWUsIG9mZnNldCwgQmlnSW50KDApLCBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICBsZXQgaSA9IDBcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICBsZXQgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoJzB4ODAwMDAwMDAwMDAwMDAwMCcpLCBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiB3aGVuIGF2YWlsYWJsZSwgbWlzc2luZyBmcm9tIElFMTFcbiAgICB0aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoKGVuY29kaW5nID09PSAndXRmOCcgJiYgY29kZSA8IDEyOCkgfHxcbiAgICAgICAgICBlbmNvZGluZyA9PT0gJ2xhdGluMScpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoOiBJZiBgdmFsYCBmaXRzIGludG8gYSBzaW5nbGUgYnl0ZSwgdXNlIHRoYXQgbnVtZXJpYyB2YWx1ZS5cbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xuICAgIHZhbCA9IE51bWJlcih2YWwpXG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgbGV0IGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gQ1VTVE9NIEVSUk9SU1xuLy8gPT09PT09PT09PT09PVxuXG4vLyBTaW1wbGlmaWVkIHZlcnNpb25zIGZyb20gTm9kZSwgY2hhbmdlZCBmb3IgQnVmZmVyLW9ubHkgdXNhZ2VcbmNvbnN0IGVycm9ycyA9IHt9XG5mdW5jdGlvbiBFIChzeW0sIGdldE1lc3NhZ2UsIEJhc2UpIHtcbiAgZXJyb3JzW3N5bV0gPSBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICBzdXBlcigpXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbWVzc2FnZScsIHtcbiAgICAgICAgdmFsdWU6IGdldE1lc3NhZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgLy8gQWRkIHRoZSBlcnJvciBjb2RlIHRvIHRoZSBuYW1lIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lfSBbJHtzeW19XWBcbiAgICAgIC8vIEFjY2VzcyB0aGUgc3RhY2sgdG8gZ2VuZXJhdGUgdGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBlcnJvciBjb2RlXG4gICAgICAvLyBmcm9tIHRoZSBuYW1lLlxuICAgICAgdGhpcy5zdGFjayAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgLy8gUmVzZXQgdGhlIG5hbWUgdG8gdGhlIGFjdHVhbCBuYW1lLlxuICAgICAgZGVsZXRlIHRoaXMubmFtZVxuICAgIH1cblxuICAgIGdldCBjb2RlICgpIHtcbiAgICAgIHJldHVybiBzeW1cbiAgICB9XG5cbiAgICBzZXQgY29kZSAodmFsdWUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29kZScsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdG9TdHJpbmcgKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7c3ltfV06ICR7dGhpcy5tZXNzYWdlfWBcbiAgICB9XG4gIH1cbn1cblxuRSgnRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTJyxcbiAgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuIGAke25hbWV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2BcbiAgICB9XG5cbiAgICByZXR1cm4gJ0F0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnXG4gIH0sIFJhbmdlRXJyb3IpXG5FKCdFUlJfSU5WQUxJRF9BUkdfVFlQRScsXG4gIGZ1bmN0aW9uIChuYW1lLCBhY3R1YWwpIHtcbiAgICByZXR1cm4gYFRoZSBcIiR7bmFtZX1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gXG4gIH0sIFR5cGVFcnJvcilcbkUoJ0VSUl9PVVRfT0ZfUkFOR0UnLFxuICBmdW5jdGlvbiAoc3RyLCByYW5nZSwgaW5wdXQpIHtcbiAgICBsZXQgbXNnID0gYFRoZSB2YWx1ZSBvZiBcIiR7c3RyfVwiIGlzIG91dCBvZiByYW5nZS5gXG4gICAgbGV0IHJlY2VpdmVkID0gaW5wdXRcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkgJiYgTWF0aC5hYnMoaW5wdXQpID4gMiAqKiAzMikge1xuICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IoU3RyaW5nKGlucHV0KSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIHJlY2VpdmVkID0gU3RyaW5nKGlucHV0KVxuICAgICAgaWYgKGlucHV0ID4gQmlnSW50KDIpICoqIEJpZ0ludCgzMikgfHwgaW5wdXQgPCAtKEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpKSkge1xuICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZClcbiAgICAgIH1cbiAgICAgIHJlY2VpdmVkICs9ICduJ1xuICAgIH1cbiAgICBtc2cgKz0gYCBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWBcbiAgICByZXR1cm4gbXNnXG4gIH0sIFJhbmdlRXJyb3IpXG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvciAodmFsKSB7XG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IHZhbC5sZW5ndGhcbiAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICctJyA/IDEgOiAwXG4gIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7XG4gICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YFxuICB9XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YFxufVxuXG4vLyBDSEVDSyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBjaGVja0JvdW5kcyAoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgaWYgKGJ1ZltvZmZzZXRdID09PSB1bmRlZmluZWQgfHwgYnVmW29mZnNldCArIGJ5dGVMZW5ndGhdID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSAoYnl0ZUxlbmd0aCArIDEpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50QkkgKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB7XG4gICAgY29uc3QgbiA9IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnID8gJ24nIDogJydcbiAgICBsZXQgcmFuZ2VcbiAgICBpZiAoYnl0ZUxlbmd0aCA+IDMpIHtcbiAgICAgIGlmIChtaW4gPT09IDAgfHwgbWluID09PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgcmFuZ2UgPSBgPj0gMCR7bn0gYW5kIDwgMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOH0ke259YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2UgPSBgPj0gLSgyJHtufSAqKiAkeyhieXRlTGVuZ3RoICsgMSkgKiA4IC0gMX0ke259KSBhbmQgPCAyICoqIGAgK1xuICAgICAgICAgICAgICAgIGAkeyhieXRlTGVuZ3RoICsgMSkgKiA4IC0gMX0ke259YFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IGA+PSAke21pbn0ke259IGFuZCA8PSAke21heH0ke259YFxuICAgIH1cbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UoJ3ZhbHVlJywgcmFuZ2UsIHZhbHVlKVxuICB9XG4gIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlciAodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib3VuZHNFcnJvciAodmFsdWUsIGxlbmd0aCwgdHlwZSkge1xuICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgdmFsaWRhdGVOdW1iZXIodmFsdWUsIHR5cGUpXG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgJ29mZnNldCcsICdhbiBpbnRlZ2VyJywgdmFsdWUpXG4gIH1cblxuICBpZiAobGVuZ3RoIDwgMCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKClcbiAgfVxuXG4gIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYD49ICR7dHlwZSA/IDEgOiAwfSBhbmQgPD0gJHtsZW5ndGh9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKVxufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbmNvbnN0IElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICBsZXQgY29kZVBvaW50XG4gIGNvbnN0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgbGV0IGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgY29uc3QgYnl0ZUFycmF5ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICBsZXQgYywgaGksIGxvXG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgbGV0IGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbi8vIEFycmF5QnVmZmVyIG9yIFVpbnQ4QXJyYXkgb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzIChpLmUuIGlmcmFtZXMpIGRvIG5vdCBwYXNzXG4vLyB0aGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJ1dCB0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGFzIG9mIHRoYXQgdHlwZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNJbnN0YW5jZSAob2JqLCB0eXBlKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8XG4gICAgKG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiZcbiAgICAgIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWUpXG59XG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIC8vIEZvciBJRTExIHN1cHBvcnRcbiAgcmV0dXJuIG9iaiAhPT0gb2JqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cbi8vIENyZWF0ZSBsb29rdXAgdGFibGUgZm9yIGB0b1N0cmluZygnaGV4JylgXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8yMTlcbmNvbnN0IGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBhbHBoYWJldCA9ICcwMTIzNDU2Nzg5YWJjZGVmJ1xuICBjb25zdCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgIGNvbnN0IGkxNiA9IGkgKiAxNlxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuXG4vLyBSZXR1cm4gbm90IGZ1bmN0aW9uIHdpdGggRXJyb3IgaWYgQmlnSW50IG5vdCBzdXBwb3J0ZWRcbmZ1bmN0aW9uIGRlZmluZUJpZ0ludE1ldGhvZCAoZm4pIHtcbiAgcmV0dXJuIHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuXG59XG5cbmZ1bmN0aW9uIEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0JpZ0ludCBub3Qgc3VwcG9ydGVkJylcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/lite/index.mjs": /*!****************************************************************************!*\ !*** ./node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/lite/index.mjs ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ dequal: () => (/* binding */ dequal)\n/* harmony export */ });\nvar has = Object.prototype.hasOwnProperty;\n\nfunction dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9kZXF1YWxAMi4wLjMvbm9kZV9tb2R1bGVzL2RlcXVhbC9saXRlL2luZGV4Lm1qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vZGVxdWFsQDIuMC4zL25vZGVfbW9kdWxlcy9kZXF1YWwvbGl0ZS9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXF1YWwoZm9vLCBiYXIpIHtcblx0dmFyIGN0b3IsIGxlbjtcblx0aWYgKGZvbyA9PT0gYmFyKSByZXR1cm4gdHJ1ZTtcblxuXHRpZiAoZm9vICYmIGJhciAmJiAoY3Rvcj1mb28uY29uc3RydWN0b3IpID09PSBiYXIuY29uc3RydWN0b3IpIHtcblx0XHRpZiAoY3RvciA9PT0gRGF0ZSkgcmV0dXJuIGZvby5nZXRUaW1lKCkgPT09IGJhci5nZXRUaW1lKCk7XG5cdFx0aWYgKGN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGZvby50b1N0cmluZygpID09PSBiYXIudG9TdHJpbmcoKTtcblxuXHRcdGlmIChjdG9yID09PSBBcnJheSkge1xuXHRcdFx0aWYgKChsZW49Zm9vLmxlbmd0aCkgPT09IGJhci5sZW5ndGgpIHtcblx0XHRcdFx0d2hpbGUgKGxlbi0tICYmIGRlcXVhbChmb29bbGVuXSwgYmFyW2xlbl0pKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsZW4gPT09IC0xO1xuXHRcdH1cblxuXHRcdGlmICghY3RvciB8fCB0eXBlb2YgZm9vID09PSAnb2JqZWN0Jykge1xuXHRcdFx0bGVuID0gMDtcblx0XHRcdGZvciAoY3RvciBpbiBmb28pIHtcblx0XHRcdFx0aWYgKGhhcy5jYWxsKGZvbywgY3RvcikgJiYgKytsZW4gJiYgIWhhcy5jYWxsKGJhciwgY3RvcikpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWYgKCEoY3RvciBpbiBiYXIpIHx8ICFkZXF1YWwoZm9vW2N0b3JdLCBiYXJbY3Rvcl0pKSByZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYmFyKS5sZW5ndGggPT09IGxlbjtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZm9vICE9PSBmb28gJiYgYmFyICE9PSBiYXI7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/lite/index.mjs\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js": /*!****************************************************************************************!*\ !*** ./node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js ***! \****************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LWRlZXAtZXF1YWxAMy4xLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixVQUFVO0FBQ2pDO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFVBQVU7QUFDL0I7O0FBRUEscUJBQXFCLFVBQVU7QUFDL0I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LWRlZXAtZXF1YWxAMy4xLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGRvIG5vdCBlZGl0IC5qcyBmaWxlcyBkaXJlY3RseSAtIGVkaXQgc3JjL2luZGV4LmpzdFxuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09ICdvYmplY3QnICYmIHR5cGVvZiBiID09ICdvYmplY3QnKSB7XG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBsZW5ndGgsIGksIGtleXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuXG4gICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZikgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICBpZiAoYS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghZXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0cnVlIGlmIGJvdGggTmFOLCBmYWxzZSBvdGhlcndpc2VcbiAgcmV0dXJuIGEhPT1hICYmIGIhPT1iO1xufTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js": /*!**************************************************************************!*\ !*** ./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js ***! \**************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = __webpack_require__(/*! ./lib/utils */ \"(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js\")\nconst { SCHEMES, getSchemeHandler } = __webpack_require__(/*! ./lib/schemes */ \"(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js\")\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (serialize(parse(uri, options), options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n if (typeof uriA === 'string') {\n uriA = unescape(uriA)\n uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true })\n } else if (typeof uriA === 'object') {\n uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true })\n }\n\n if (typeof uriB === 'string') {\n uriB = unescape(uriB)\n uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true })\n } else if (typeof uriB === 'object') {\n uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true })\n }\n\n return uriA.toLowerCase() === uriB.toLowerCase()\n}\n\n/**\n * @param {Readonly} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = escape(component.path)\n\n if (component.scheme !== undefined) {\n component.path = component.path.split('%3A').join(':')\n }\n } else {\n component.path = unescape(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', component.query)\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', component.fragment)\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const ipv6result = normalizeIPv6(parsed.host)\n parsed.host = ipv6result.host.toLowerCase()\n isIP = ipv6result.isIPV6\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // check if scheme can't handle IRIs\n if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n // if host component is a domain name\n if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n // convert Unicode IDN -> ASCII IDN\n try {\n parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n }\n }\n // convert IRI -> URI\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (uri.indexOf('%') !== -1) {\n if (parsed.scheme !== undefined) {\n parsed.scheme = unescape(parsed.scheme)\n }\n if (parsed.host !== undefined) {\n parsed.host = unescape(parsed.host)\n }\n }\n if (parsed.path) {\n parsed.path = escape(unescape(parsed.path))\n }\n if (parsed.fragment) {\n parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return parsed\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports[\"default\"] = fastUri\nmodule.exports.fastUri = fastUri\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXVyaUAzLjEuMC9ub2RlX21vZHVsZXMvZmFzdC11cmkvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQVk7O0FBRVosUUFBUSw0R0FBNEcsRUFBRSxtQkFBTyxDQUFDLCtHQUFhO0FBQzNJLFFBQVEsNEJBQTRCLEVBQUUsbUJBQU8sQ0FBQyxtSEFBZTs7QUFFN0Q7QUFDQSxjQUFjLDZDQUE2QztBQUMzRCxXQUFXLEdBQUc7QUFDZCxXQUFXLGlDQUFpQztBQUM1QyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLEdBQUc7QUFDeEIsSUFBSTtBQUNKLHFCQUFxQixHQUFHO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxpQ0FBaUM7QUFDNUMsYUFBYTtBQUNiO0FBQ0E7QUFDQSxzREFBc0QsZ0JBQWdCLGVBQWU7QUFDckY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLHVDQUF1QztBQUNsRCxXQUFXLHVDQUF1QztBQUNsRCxXQUFXLGlDQUFpQztBQUM1QyxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhLHNDQUFzQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyw4Q0FBOEM7QUFDekQsV0FBVyw4Q0FBOEM7QUFDekQsV0FBVyxrQ0FBa0M7QUFDN0MsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLDhCQUE4QjtBQUM3RyxJQUFJO0FBQ0osK0RBQStELDhCQUE4QjtBQUM3Rjs7QUFFQTtBQUNBO0FBQ0EsK0VBQStFLDhCQUE4QjtBQUM3RyxJQUFJO0FBQ0osK0RBQStELDhCQUE4QjtBQUM3Rjs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxnREFBZ0Q7QUFDM0QsV0FBVyxpQ0FBaUM7QUFDNUMsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxpQ0FBaUM7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGFBQWEsc0NBQXNDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXNCO0FBQ3RCLHNCQUFzQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXVyaUAzLjEuMC9ub2RlX21vZHVsZXMvZmFzdC11cmkvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbm9ybWFsaXplSVB2NiwgcmVtb3ZlRG90U2VnbWVudHMsIHJlY29tcG9zZUF1dGhvcml0eSwgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsIGlzSVB2NCwgbm9uU2ltcGxlRG9tYWluIH0gPSByZXF1aXJlKCcuL2xpYi91dGlscycpXG5jb25zdCB7IFNDSEVNRVMsIGdldFNjaGVtZUhhbmRsZXIgfSA9IHJlcXVpcmUoJy4vbGliL3NjaGVtZXMnKVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fHN0cmluZ30gVFxuICogQHBhcmFtIHtUfSB1cmlcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7VH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplICh1cmksIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAoc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB1cmkgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAocGFyc2Uoc2VyaWFsaXplKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9XG4gIHJldHVybiB1cmlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJJXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZSAoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2NoZW1lbGVzc09wdGlvbnMgPSBvcHRpb25zID8gT2JqZWN0LmFzc2lnbih7IHNjaGVtZTogJ251bGwnIH0sIG9wdGlvbnMpIDogeyBzY2hlbWU6ICdudWxsJyB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNvbXBvbmVudChwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKVxuICBzY2hlbWVsZXNzT3B0aW9ucy5za2lwRXNjYXBlID0gdHJ1ZVxuICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVkLCBzY2hlbWVsZXNzT3B0aW9ucylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGJhc2VcbiAqIEBwYXJhbSB7aW1wb3J0ICgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gcmVsYXRpdmVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwTm9ybWFsaXphdGlvbj1mYWxzZV1cbiAqIEByZXR1cm5zIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50IChiYXNlLCByZWxhdGl2ZSwgb3B0aW9ucywgc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHRhcmdldCA9IHt9XG4gIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICBiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgYmFzZSBjb21wb25lbnRcbiAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICB0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lXG4gICAgLy8gdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdFxuICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydFxuICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICB9IGVsc2Uge1xuICAgIGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0XG4gICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnRcbiAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aFxuICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVsYXRpdmUucGF0aFswXSA9PT0gJy8nKSB7XG4gICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoYmFzZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IGJhc2UuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IGJhc2UucG9ydCAhPT0gdW5kZWZpbmVkKSAmJiAhYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9ICcvJyArIHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICB9XG4gICAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvXG4gICAgICB0YXJnZXQuaG9zdCA9IGJhc2UuaG9zdFxuICAgICAgdGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnRcbiAgICB9XG4gICAgdGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lXG4gIH1cblxuICB0YXJnZXQuZnJhZ21lbnQgPSByZWxhdGl2ZS5mcmFnbWVudFxuXG4gIHJldHVybiB0YXJnZXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlBXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlCXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXF1YWwgKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmlBID09PSAnc3RyaW5nJykge1xuICAgIHVyaUEgPSB1bmVzY2FwZSh1cmlBKVxuICAgIHVyaUEgPSBzZXJpYWxpemUobm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcocGFyc2UodXJpQSwgb3B0aW9ucyksIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpQSA9PT0gJ29iamVjdCcpIHtcbiAgICB1cmlBID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHVyaUEsIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgdXJpQiA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlCID0gdW5lc2NhcGUodXJpQilcbiAgICB1cmlCID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaUIgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpQiA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyh1cmlCLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4gdXJpQS50b0xvd2VyQ2FzZSgpID09PSB1cmlCLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PGltcG9ydCgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudD59IGNtcHRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplIChjbXB0cywgb3B0cykge1xuICBjb25zdCBjb21wb25lbnQgPSB7XG4gICAgaG9zdDogY21wdHMuaG9zdCxcbiAgICBzY2hlbWU6IGNtcHRzLnNjaGVtZSxcbiAgICB1c2VyaW5mbzogY21wdHMudXNlcmluZm8sXG4gICAgcG9ydDogY21wdHMucG9ydCxcbiAgICBwYXRoOiBjbXB0cy5wYXRoLFxuICAgIHF1ZXJ5OiBjbXB0cy5xdWVyeSxcbiAgICBuaWQ6IGNtcHRzLm5pZCxcbiAgICBuc3M6IGNtcHRzLm5zcyxcbiAgICB1dWlkOiBjbXB0cy51dWlkLFxuICAgIGZyYWdtZW50OiBjbXB0cy5mcmFnbWVudCxcbiAgICByZWZlcmVuY2U6IGNtcHRzLnJlZmVyZW5jZSxcbiAgICByZXNvdXJjZU5hbWU6IGNtcHRzLnJlc291cmNlTmFtZSxcbiAgICBzZWN1cmU6IGNtcHRzLnNlY3VyZSxcbiAgICBlcnJvcjogJydcbiAgfVxuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgY29uc3QgdXJpVG9rZW5zID0gW11cblxuICAvLyBmaW5kIHNjaGVtZSBoYW5kbGVyXG4gIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudC5zY2hlbWUpXG5cbiAgLy8gcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50LCBvcHRpb25zKVxuXG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFvcHRpb25zLnNraXBFc2NhcGUpIHtcbiAgICAgIGNvbXBvbmVudC5wYXRoID0gZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuXG4gICAgICBpZiAoY29tcG9uZW50LnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbXBvbmVudC5wYXRoID0gY29tcG9uZW50LnBhdGguc3BsaXQoJyUzQScpLmpvaW4oJzonKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQucGF0aCA9IHVuZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcgJiYgY29tcG9uZW50LnNjaGVtZSkge1xuICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudC5zY2hlbWUsICc6JylcbiAgfVxuXG4gIGNvbnN0IGF1dGhvcml0eSA9IHJlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnQpXG4gIGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvLycpXG4gICAgfVxuXG4gICAgdXJpVG9rZW5zLnB1c2goYXV0aG9yaXR5KVxuXG4gICAgaWYgKGNvbXBvbmVudC5wYXRoICYmIGNvbXBvbmVudC5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvJylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudC5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgcyA9IGNvbXBvbmVudC5wYXRoXG5cbiAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRob3JpdHkgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgc1swXSA9PT0gJy8nICYmXG4gICAgICBzWzFdID09PSAnLydcbiAgICApIHtcbiAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICBzID0gJy8lMkYnICsgcy5zbGljZSgyKVxuICAgIH1cblxuICAgIHVyaVRva2Vucy5wdXNoKHMpXG4gIH1cblxuICBpZiAoY29tcG9uZW50LnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnPycsIGNvbXBvbmVudC5xdWVyeSlcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHVyaVRva2Vucy5wdXNoKCcjJywgY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiB1cmlUb2tlbnMuam9pbignJylcbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW14jLzo/XSspOik/KD86XFwvXFwvKCg/OihbXiMvP0BdKilAKT8oXFxbW14jLz9cXF1dK1xcXXxbXiMvOj9dKikoPzo6KFxcZCopKT8pKT8oW14jP10qKSg/OlxcPyhbXiNdKikpPyg/OiMoKD86LnxbXFxuXFxyXSkqKSk/L3VcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHVyaSwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHBhcnNlZCA9IHtcbiAgICBzY2hlbWU6IHVuZGVmaW5lZCxcbiAgICB1c2VyaW5mbzogdW5kZWZpbmVkLFxuICAgIGhvc3Q6ICcnLFxuICAgIHBvcnQ6IHVuZGVmaW5lZCxcbiAgICBwYXRoOiAnJyxcbiAgICBxdWVyeTogdW5kZWZpbmVkLFxuICAgIGZyYWdtZW50OiB1bmRlZmluZWRcbiAgfVxuXG4gIGxldCBpc0lQID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSAnc3VmZml4Jykge1xuICAgIGlmIChvcHRpb25zLnNjaGVtZSkge1xuICAgICAgdXJpID0gb3B0aW9ucy5zY2hlbWUgKyAnOicgKyB1cmlcbiAgICB9IGVsc2Uge1xuICAgICAgdXJpID0gJy8vJyArIHVyaVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSB1cmkubWF0Y2goVVJJX1BBUlNFKVxuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgLy8gc3RvcmUgZWFjaCBjb21wb25lbnRcbiAgICBwYXJzZWQuc2NoZW1lID0gbWF0Y2hlc1sxXVxuICAgIHBhcnNlZC51c2VyaW5mbyA9IG1hdGNoZXNbM11cbiAgICBwYXJzZWQuaG9zdCA9IG1hdGNoZXNbNF1cbiAgICBwYXJzZWQucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKVxuICAgIHBhcnNlZC5wYXRoID0gbWF0Y2hlc1s2XSB8fCAnJ1xuICAgIHBhcnNlZC5xdWVyeSA9IG1hdGNoZXNbN11cbiAgICBwYXJzZWQuZnJhZ21lbnQgPSBtYXRjaGVzWzhdXG5cbiAgICAvLyBmaXggcG9ydCBudW1iZXJcbiAgICBpZiAoaXNOYU4ocGFyc2VkLnBvcnQpKSB7XG4gICAgICBwYXJzZWQucG9ydCA9IG1hdGNoZXNbNV1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5ob3N0KSB7XG4gICAgICBjb25zdCBpcHY0cmVzdWx0ID0gaXNJUHY0KHBhcnNlZC5ob3N0KVxuICAgICAgaWYgKGlwdjRyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGlwdjZyZXN1bHQgPSBub3JtYWxpemVJUHY2KHBhcnNlZC5ob3N0KVxuICAgICAgICBwYXJzZWQuaG9zdCA9IGlwdjZyZXN1bHQuaG9zdC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGlzSVAgPSBpcHY2cmVzdWx0LmlzSVBWNlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNJUCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQuaG9zdCA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC5wb3J0ID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLnF1ZXJ5ID09PSB1bmRlZmluZWQgJiYgIXBhcnNlZC5wYXRoKSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ3NhbWUtZG9jdW1lbnQnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAncmVsYXRpdmUnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICdhYnNvbHV0ZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICd1cmknXG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09ICdzdWZmaXgnICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBwYXJzZWQucmVmZXJlbmNlKSB7XG4gICAgICBwYXJzZWQuZXJyb3IgPSBwYXJzZWQuZXJyb3IgfHwgJ1VSSSBpcyBub3QgYSAnICsgb3B0aW9ucy5yZWZlcmVuY2UgKyAnIHJlZmVyZW5jZS4nXG4gICAgfVxuXG4gICAgLy8gZmluZCBzY2hlbWUgaGFuZGxlclxuICAgIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IHBhcnNlZC5zY2hlbWUpXG5cbiAgICAvLyBjaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcbiAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgLy8gaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgaWYgKHBhcnNlZC5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkgJiYgaXNJUCA9PT0gZmFsc2UgJiYgbm9uU2ltcGxlRG9tYWluKHBhcnNlZC5ob3N0KSkge1xuICAgICAgICAvLyBjb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gVVJMLmRvbWFpblRvQVNDSUkocGFyc2VkLmhvc3QudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSTogXCIgKyBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnZlcnQgSVJJIC0+IFVSSVxuICAgIH1cblxuICAgIGlmICghc2NoZW1lSGFuZGxlciB8fCAoc2NoZW1lSGFuZGxlciAmJiAhc2NoZW1lSGFuZGxlci5za2lwTm9ybWFsaXplKSkge1xuICAgICAgaWYgKHVyaS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgIGlmIChwYXJzZWQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJzZWQuc2NoZW1lID0gdW5lc2NhcGUocGFyc2VkLnNjaGVtZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gdW5lc2NhcGUocGFyc2VkLmhvc3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJzZWQucGF0aCkge1xuICAgICAgICBwYXJzZWQucGF0aCA9IGVzY2FwZSh1bmVzY2FwZShwYXJzZWQucGF0aCkpXG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLmZyYWdtZW50KSB7XG4gICAgICAgIHBhcnNlZC5mcmFnbWVudCA9IGVuY29kZVVSSShkZWNvZGVVUklDb21wb25lbnQocGFyc2VkLmZyYWdtZW50KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG4gICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShwYXJzZWQsIG9wdGlvbnMpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCAnVVJJIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuICByZXR1cm4gcGFyc2VkXG59XG5cbmNvbnN0IGZhc3RVcmkgPSB7XG4gIFNDSEVNRVMsXG4gIG5vcm1hbGl6ZSxcbiAgcmVzb2x2ZSxcbiAgcmVzb2x2ZUNvbXBvbmVudCxcbiAgZXF1YWwsXG4gIHNlcmlhbGl6ZSxcbiAgcGFyc2Vcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYXN0VXJpXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZmFzdFVyaVxubW9kdWxlLmV4cG9ydHMuZmFzdFVyaSA9IGZhc3RVcmlcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js": /*!********************************************************************************!*\ !*** ./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js ***! \********************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\n\nconst { isUUID } = __webpack_require__(/*! ./utils */ \"(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js\")\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const [path, query] = wsComponent.resourceName.split('?')\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = query\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXVyaUAzLjEuMC9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3NjaGVtZXMuanMiLCJtYXBwaW5ncyI6IkFBQVk7O0FBRVosUUFBUSxTQUFTLEVBQUUsbUJBQU8sQ0FBQywyR0FBUztBQUNwQyxtQ0FBbUMsS0FBSyxzQkFBc0IsYUFBYSxFQUFFOztBQUU3RSx3Q0FBd0MsT0FBTztBQUMvQzs7QUFFQSxjQUFjLDhCQUE4Qjs7QUFFNUM7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxpREFBaUQsR0FBRztBQUNwRDs7QUFFQTtBQUNBO0FBQ0EsV0FBVyx1Q0FBdUM7QUFDbEQsV0FBVyxrQ0FBa0M7QUFDN0MsYUFBYTtBQUNiOztBQUVBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGNBQWMsWUFBWTtBQUMxQixjQUFjLFNBQVM7QUFDdkIsY0FBYyxVQUFVO0FBQ3hCLGNBQWMsVUFBVTtBQUN4QixjQUFjLFNBQVM7QUFDdkIsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsU0FBUztBQUN2Qjs7QUFFQTtBQUNBLFdBQVcsdUNBQXVDO0FBQ2xELGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFdBQVcsVUFBVTtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsT0FBTyxHQUFHLGdDQUFnQztBQUNuRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPLEdBQUcsbUJBQW1CO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQixHQUFHLElBQUk7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLFVBQVU7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsZUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQseUJBQXlCLGVBQWU7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELHNCQUFzQixlQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCx1QkFBdUIsZUFBZTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsdUJBQXVCLGVBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCwyQkFBMkIsbUNBQW1DO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsWUFBWTtBQUNyQyx5QkFBeUIsWUFBWTtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtdXJpQDMuMS4wL25vZGVfbW9kdWxlcy9mYXN0LXVyaS9saWIvc2NoZW1lcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc1VVSUQgfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuY29uc3QgVVJOX1JFRyA9IC8oW1xcZGEtel1bXFxkXFwtYS16XXswLDMxfSk6KCg/OltcXHchJCcoKSorLFxcLS46Oz1AXXwlW1xcZGEtZl17Mn0pKykvaXVcblxuY29uc3Qgc3VwcG9ydGVkU2NoZW1lTmFtZXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydodHRwJywgJ2h0dHBzJywgJ3dzJyxcbiAgJ3dzcycsICd1cm4nLCAndXJuOnV1aWQnXSlcblxuLyoqIEB0eXBlZGVmIHtzdXBwb3J0ZWRTY2hlbWVOYW1lc1tudW1iZXJdfSBTY2hlbWVOYW1lICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtuYW1lIGlzIFNjaGVtZU5hbWV9XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTY2hlbWVOYW1lIChuYW1lKSB7XG4gIHJldHVybiBzdXBwb3J0ZWRTY2hlbWVOYW1lcy5pbmRleE9mKC8qKiBAdHlwZSB7Kn0gKi8gKG5hbWUpKSAhPT0gLTFcbn1cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2NoZW1lRm5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjaGVtZUhhbmRsZXJcbiAqIEBwcm9wZXJ0eSB7U2NoZW1lTmFtZX0gc2NoZW1lIC0gVGhlIHNjaGVtZSBuYW1lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZG9tYWluSG9zdF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSBzdXBwb3J0cyBkb21haW4gaG9zdHMuXG4gKiBAcHJvcGVydHkge1NjaGVtZUZufSBwYXJzZSAtIEZ1bmN0aW9uIHRvIHBhcnNlIHRoZSBVUkkgY29tcG9uZW50IGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7U2NoZW1lRm59IHNlcmlhbGl6ZSAtIEZ1bmN0aW9uIHRvIHNlcmlhbGl6ZSB0aGUgVVJJIGNvbXBvbmVudCBmb3IgdGhpcyBzY2hlbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwTm9ybWFsaXplXSAtIEluZGljYXRlcyBpZiBub3JtYWxpemF0aW9uIHNob3VsZCBiZSBza2lwcGVkIGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Fic29sdXRlUGF0aF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSB1c2VzIGFic29sdXRlIHBhdGhzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdW5pY29kZVN1cHBvcnRdIC0gSW5kaWNhdGVzIGlmIHRoZSBzY2hlbWUgc3VwcG9ydHMgVW5pY29kZS5cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gd3NDb21wb25lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB3c0lzU2VjdXJlICh3c0NvbXBvbmVudCkge1xuICBpZiAod3NDb21wb25lbnQuc2VjdXJlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmICh3c0NvbXBvbmVudC5zZWN1cmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAod3NDb21wb25lbnQuc2NoZW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHdzQ29tcG9uZW50LnNjaGVtZS5sZW5ndGggPT09IDMgJiZcbiAgICAgICh3c0NvbXBvbmVudC5zY2hlbWVbMF0gPT09ICd3JyB8fCB3c0NvbXBvbmVudC5zY2hlbWVbMF0gPT09ICdXJykgJiZcbiAgICAgICh3c0NvbXBvbmVudC5zY2hlbWVbMV0gPT09ICdzJyB8fCB3c0NvbXBvbmVudC5zY2hlbWVbMV0gPT09ICdTJykgJiZcbiAgICAgICh3c0NvbXBvbmVudC5zY2hlbWVbMl0gPT09ICdzJyB8fCB3c0NvbXBvbmVudC5zY2hlbWVbMl0gPT09ICdTJylcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIGh0dHBQYXJzZSAoY29tcG9uZW50KSB7XG4gIGlmICghY29tcG9uZW50Lmhvc3QpIHtcbiAgICBjb21wb25lbnQuZXJyb3IgPSBjb21wb25lbnQuZXJyb3IgfHwgJ0hUVFAgVVJJcyBtdXN0IGhhdmUgYSBob3N0LidcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIGh0dHBTZXJpYWxpemUgKGNvbXBvbmVudCkge1xuICBjb25zdCBzZWN1cmUgPSBTdHJpbmcoY29tcG9uZW50LnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gJ2h0dHBzJ1xuXG4gIC8vIG5vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmIChjb21wb25lbnQucG9ydCA9PT0gKHNlY3VyZSA/IDQ0MyA6IDgwKSB8fCBjb21wb25lbnQucG9ydCA9PT0gJycpIHtcbiAgICBjb21wb25lbnQucG9ydCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXG4gIGlmICghY29tcG9uZW50LnBhdGgpIHtcbiAgICBjb21wb25lbnQucGF0aCA9ICcvJ1xuICB9XG5cbiAgLy8gTk9URTogV2UgZG8gbm90IHBhcnNlIHF1ZXJ5IHN0cmluZ3MgZm9yIEhUVFAgVVJJc1xuICAvLyBhcyBXV1cgRm9ybSBVcmwgRW5jb2RlZCBxdWVyeSBzdHJpbmdzIGFyZSBwYXJ0IG9mIHRoZSBIVE1MNCsgc3BlYyxcbiAgLy8gYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuXG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHdzUGFyc2UgKHdzQ29tcG9uZW50KSB7XG4vLyBpbmRpY2F0ZSBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0XG4gIHdzQ29tcG9uZW50LnNlY3VyZSA9IHdzSXNTZWN1cmUod3NDb21wb25lbnQpXG5cbiAgLy8gY29uc3RydWN0IHJlc291Y2UgbmFtZVxuICB3c0NvbXBvbmVudC5yZXNvdXJjZU5hbWUgPSAod3NDb21wb25lbnQucGF0aCB8fCAnLycpICsgKHdzQ29tcG9uZW50LnF1ZXJ5ID8gJz8nICsgd3NDb21wb25lbnQucXVlcnkgOiAnJylcbiAgd3NDb21wb25lbnQucGF0aCA9IHVuZGVmaW5lZFxuICB3c0NvbXBvbmVudC5xdWVyeSA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiB3c0NvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gd3NTZXJpYWxpemUgKHdzQ29tcG9uZW50KSB7XG4vLyBub3JtYWxpemUgdGhlIGRlZmF1bHQgcG9ydFxuICBpZiAod3NDb21wb25lbnQucG9ydCA9PT0gKHdzSXNTZWN1cmUod3NDb21wb25lbnQpID8gNDQzIDogODApIHx8IHdzQ29tcG9uZW50LnBvcnQgPT09ICcnKSB7XG4gICAgd3NDb21wb25lbnQucG9ydCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gZW5zdXJlIHNjaGVtZSBtYXRjaGVzIHNlY3VyZSBmbGFnXG4gIGlmICh0eXBlb2Ygd3NDb21wb25lbnQuc2VjdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICB3c0NvbXBvbmVudC5zY2hlbWUgPSAod3NDb21wb25lbnQuc2VjdXJlID8gJ3dzcycgOiAnd3MnKVxuICAgIHdzQ29tcG9uZW50LnNlY3VyZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gcmVjb25zdHJ1Y3QgcGF0aCBmcm9tIHJlc291cmNlIG5hbWVcbiAgaWYgKHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSkge1xuICAgIGNvbnN0IFtwYXRoLCBxdWVyeV0gPSB3c0NvbXBvbmVudC5yZXNvdXJjZU5hbWUuc3BsaXQoJz8nKVxuICAgIHdzQ29tcG9uZW50LnBhdGggPSAocGF0aCAmJiBwYXRoICE9PSAnLycgPyBwYXRoIDogdW5kZWZpbmVkKVxuICAgIHdzQ29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICB3c0NvbXBvbmVudC5yZXNvdXJjZU5hbWUgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIGZvcmJpZCBmcmFnbWVudCBjb21wb25lbnRcbiAgd3NDb21wb25lbnQuZnJhZ21lbnQgPSB1bmRlZmluZWRcblxuICByZXR1cm4gd3NDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVyblBhcnNlICh1cm5Db21wb25lbnQsIG9wdGlvbnMpIHtcbiAgaWYgKCF1cm5Db21wb25lbnQucGF0aCkge1xuICAgIHVybkNvbXBvbmVudC5lcnJvciA9ICdVUk4gY2FuIG5vdCBiZSBwYXJzZWQnXG4gICAgcmV0dXJuIHVybkNvbXBvbmVudFxuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSB1cm5Db21wb25lbnQucGF0aC5tYXRjaChVUk5fUkVHKVxuICBpZiAobWF0Y2hlcykge1xuICAgIGNvbnN0IHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudC5zY2hlbWUgfHwgJ3VybidcbiAgICB1cm5Db21wb25lbnQubmlkID0gbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpXG4gICAgdXJuQ29tcG9uZW50Lm5zcyA9IG1hdGNoZXNbMl1cbiAgICBjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgdXJuQ29tcG9uZW50Lm5pZH1gXG4gICAgY29uc3Qgc2NoZW1lSGFuZGxlciA9IGdldFNjaGVtZUhhbmRsZXIodXJuU2NoZW1lKVxuICAgIHVybkNvbXBvbmVudC5wYXRoID0gdW5kZWZpbmVkXG5cbiAgICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgICAgdXJuQ29tcG9uZW50ID0gc2NoZW1lSGFuZGxlci5wYXJzZSh1cm5Db21wb25lbnQsIG9wdGlvbnMpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHVybkNvbXBvbmVudC5lcnJvciA9IHVybkNvbXBvbmVudC5lcnJvciB8fCAnVVJOIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuXG4gIHJldHVybiB1cm5Db21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVyblNlcmlhbGl6ZSAodXJuQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gIGlmICh1cm5Db21wb25lbnQubmlkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTiB3aXRob3V0IG5pZCBjYW5ub3QgYmUgc2VyaWFsaXplZCcpXG4gIH1cbiAgY29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50LnNjaGVtZSB8fCAndXJuJ1xuICBjb25zdCBuaWQgPSB1cm5Db21wb25lbnQubmlkLnRvTG93ZXJDYXNlKClcbiAgY29uc3QgdXJuU2NoZW1lID0gYCR7c2NoZW1lfToke29wdGlvbnMubmlkIHx8IG5pZH1gXG4gIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKHVyblNjaGVtZSlcblxuICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgIHVybkNvbXBvbmVudCA9IHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKHVybkNvbXBvbmVudCwgb3B0aW9ucylcbiAgfVxuXG4gIGNvbnN0IHVyaUNvbXBvbmVudCA9IHVybkNvbXBvbmVudFxuICBjb25zdCBuc3MgPSB1cm5Db21wb25lbnQubnNzXG4gIHVyaUNvbXBvbmVudC5wYXRoID0gYCR7bmlkIHx8IG9wdGlvbnMubmlkfToke25zc31gXG5cbiAgb3B0aW9ucy5za2lwRXNjYXBlID0gdHJ1ZVxuICByZXR1cm4gdXJpQ29tcG9uZW50XG59XG5cbi8qKiBAdHlwZSB7U2NoZW1lRm59ICovXG5mdW5jdGlvbiB1cm51dWlkUGFyc2UgKHVybkNvbXBvbmVudCwgb3B0aW9ucykge1xuICBjb25zdCB1dWlkQ29tcG9uZW50ID0gdXJuQ29tcG9uZW50XG4gIHV1aWRDb21wb25lbnQudXVpZCA9IHV1aWRDb21wb25lbnQubnNzXG4gIHV1aWRDb21wb25lbnQubnNzID0gdW5kZWZpbmVkXG5cbiAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudC51dWlkIHx8ICFpc1VVSUQodXVpZENvbXBvbmVudC51dWlkKSkpIHtcbiAgICB1dWlkQ29tcG9uZW50LmVycm9yID0gdXVpZENvbXBvbmVudC5lcnJvciB8fCAnVVVJRCBpcyBub3QgdmFsaWQuJ1xuICB9XG5cbiAgcmV0dXJuIHV1aWRDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVybnV1aWRTZXJpYWxpemUgKHV1aWRDb21wb25lbnQpIHtcbiAgY29uc3QgdXJuQ29tcG9uZW50ID0gdXVpZENvbXBvbmVudFxuICAvLyBub3JtYWxpemUgVVVJRFxuICB1cm5Db21wb25lbnQubnNzID0gKHV1aWRDb21wb25lbnQudXVpZCB8fCAnJykudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gdXJuQ29tcG9uZW50XG59XG5cbmNvbnN0IGh0dHAgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ2h0dHAnLFxuICBkb21haW5Ib3N0OiB0cnVlLFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn0pXG5cbmNvbnN0IGh0dHBzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICdodHRwcycsXG4gIGRvbWFpbkhvc3Q6IGh0dHAuZG9tYWluSG9zdCxcbiAgcGFyc2U6IGh0dHBQYXJzZSxcbiAgc2VyaWFsaXplOiBodHRwU2VyaWFsaXplXG59KVxuXG5jb25zdCB3cyA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAnd3MnLFxuICBkb21haW5Ib3N0OiB0cnVlLFxuICBwYXJzZTogd3NQYXJzZSxcbiAgc2VyaWFsaXplOiB3c1NlcmlhbGl6ZVxufSlcblxuY29uc3Qgd3NzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICd3c3MnLFxuICBkb21haW5Ib3N0OiB3cy5kb21haW5Ib3N0LFxuICBwYXJzZTogd3MucGFyc2UsXG4gIHNlcmlhbGl6ZTogd3Muc2VyaWFsaXplXG59KVxuXG5jb25zdCB1cm4gPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3VybicsXG4gIHBhcnNlOiB1cm5QYXJzZSxcbiAgc2VyaWFsaXplOiB1cm5TZXJpYWxpemUsXG4gIHNraXBOb3JtYWxpemU6IHRydWVcbn0pXG5cbmNvbnN0IHVybnV1aWQgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3Vybjp1dWlkJyxcbiAgcGFyc2U6IHVybnV1aWRQYXJzZSxcbiAgc2VyaWFsaXplOiB1cm51dWlkU2VyaWFsaXplLFxuICBza2lwTm9ybWFsaXplOiB0cnVlXG59KVxuXG5jb25zdCBTQ0hFTUVTID0gLyoqIEB0eXBlIHtSZWNvcmQ8U2NoZW1lTmFtZSwgU2NoZW1lSGFuZGxlcj59ICovICh7XG4gIGh0dHAsXG4gIGh0dHBzLFxuICB3cyxcbiAgd3NzLFxuICB1cm4sXG4gICd1cm46dXVpZCc6IHVybnV1aWRcbn0pXG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihTQ0hFTUVTLCBudWxsKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gc2NoZW1lXG4gKiBAcmV0dXJucyB7U2NoZW1lSGFuZGxlcnx1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGdldFNjaGVtZUhhbmRsZXIgKHNjaGVtZSkge1xuICByZXR1cm4gKFxuICAgIHNjaGVtZSAmJiAoXG4gICAgICBTQ0hFTUVTWy8qKiBAdHlwZSB7U2NoZW1lTmFtZX0gKi8gKHNjaGVtZSldIHx8XG4gICAgICBTQ0hFTUVTWy8qKiBAdHlwZSB7U2NoZW1lTmFtZX0gKi8oc2NoZW1lLnRvTG93ZXJDYXNlKCkpXSlcbiAgKSB8fFxuICAgIHVuZGVmaW5lZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd3NJc1NlY3VyZSxcbiAgU0NIRU1FUyxcbiAgaXNWYWxpZFNjaGVtZU5hbWUsXG4gIGdldFNjaGVtZUhhbmRsZXIsXG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js": /*!******************************************************************************!*\ !*** ./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js ***! \******************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/**\n * @param {Array} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n buffer.length = 0\n return true\n}\n\n/**\n * @param {Array} buffer\n * @param {Array} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n if (buffer.length) {\n const hex = stringArrayToHexStripped(buffer)\n if (hex !== '') {\n address.push(hex)\n } else {\n output.error = true\n return false\n }\n buffer.length = 0\n }\n return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n let tokenCount = 0\n const output = { error: false, address: '', zone: '' }\n /** @type {Array} */\n const address = []\n /** @type {Array} */\n const buffer = []\n let endipv6Encountered = false\n let endIpv6 = false\n\n let consume = consumeHextets\n\n for (let i = 0; i < input.length; i++) {\n const cursor = input[i]\n if (cursor === '[' || cursor === ']') { continue }\n if (cursor === ':') {\n if (endipv6Encountered === true) {\n endIpv6 = true\n }\n if (!consume(buffer, address, output)) { break }\n if (++tokenCount > 7) {\n // not valid\n output.error = true\n break\n }\n if (i > 0 && input[i - 1] === ':') {\n endipv6Encountered = true\n }\n address.push(':')\n continue\n } else if (cursor === '%') {\n if (!consume(buffer, address, output)) { break }\n // switch to zone detection\n consume = consumeIsZone\n } else {\n buffer.push(cursor)\n continue\n }\n }\n if (buffer.length) {\n if (consume === consumeIsZone) {\n output.zone = buffer.join('')\n } else if (endIpv6) {\n address.push(buffer.join(''))\n } else {\n address.push(stringArrayToHexStripped(buffer))\n }\n }\n output.address = address.join('')\n return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n const ipv6 = getIPV6(host)\n\n if (!ipv6.error) {\n let newHost = ipv6.address\n let escapedHost = ipv6.address\n if (ipv6.zone) {\n newHost += '%' + ipv6.zone\n escapedHost += '%25' + ipv6.zone\n }\n return { host: newHost, isIPV6: true, escapedHost }\n } else {\n return { host, isIPV6: false }\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.' || input[1] === '/') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {boolean} esc\n * @returns {import('../types/index').URIComponent}\n */\nfunction normalizeComponentEncoding (component, esc) {\n const func = esc !== true ? escape : unescape\n if (component.scheme !== undefined) {\n component.scheme = func(component.scheme)\n }\n if (component.userinfo !== undefined) {\n component.userinfo = func(component.userinfo)\n }\n if (component.host !== undefined) {\n component.host = func(component.host)\n }\n if (component.path !== undefined) {\n component.path = func(component.path)\n }\n if (component.query !== undefined) {\n component.query = func(component.query)\n }\n if (component.fragment !== undefined) {\n component.fragment = func(component.fragment)\n }\n return component\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(component.userinfo)\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = unescape(component.host)\n if (!isIPv4(host)) {\n const ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = component.host\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n uriTokens.push(':')\n uriTokens.push(String(component.port))\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n nonSimpleDomain,\n recomposeAuthority,\n normalizeComponentEncoding,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXVyaUAzLjEuMC9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3V0aWxzLmpzIiwibWFwcGluZ3MiOiJBQUFZOztBQUVaLFdBQVcsNEJBQTRCO0FBQ3ZDLG9EQUFvRCxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRzs7QUFFbkcsV0FBVyw0QkFBNEI7QUFDdkMsdUVBQXVFLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUU7O0FBRXJIO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsa0JBQWtCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFFBQVE7QUFDckIsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEI7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0Esb0VBQW9FLFFBQVE7O0FBRTVFO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLFdBQVcsZUFBZTtBQUMxQixXQUFXLGVBQWU7QUFDMUIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLGFBQWEsZUFBZTtBQUM1QjtBQUNBLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsa0JBQWtCLGtCQUFrQjtBQUNwQztBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTiwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFFBQVE7QUFDckIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFNBQVM7QUFDdkI7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxrQ0FBa0MsU0FBUztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixJQUFJO0FBQ0osYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLHVDQUF1QztBQUNsRCxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLHVDQUF1QztBQUNsRCxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC11cmlAMy4xLjAvbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuLyoqIEB0eXBlIHsodmFsdWU6IHN0cmluZykgPT4gYm9vbGVhbn0gKi9cbmNvbnN0IGlzVVVJRCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKC9eW1xcZGEtZl17OH0tW1xcZGEtZl17NH0tW1xcZGEtZl17NH0tW1xcZGEtZl17NH0tW1xcZGEtZl17MTJ9JC9pdSlcblxuLyoqIEB0eXBlIHsodmFsdWU6IHN0cmluZykgPT4gYm9vbGVhbn0gKi9cbmNvbnN0IGlzSVB2NCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKC9eKD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZHsyfXxbMS05XVxcZHxcXGQpXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfDFcXGR7Mn18WzEtOV1cXGR8XFxkKSQvdSlcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlucHV0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWQgKGlucHV0KSB7XG4gIGxldCBhY2MgPSAnJ1xuICBsZXQgY29kZSA9IDBcbiAgbGV0IGkgPSAwXG5cbiAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29kZSA9IGlucHV0W2ldLmNoYXJDb2RlQXQoMClcbiAgICBpZiAoY29kZSA9PT0gNDgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmICghKChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHx8IChjb2RlID49IDY1ICYmIGNvZGUgPD0gNzApIHx8IChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTAyKSkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBhY2MgKz0gaW5wdXRbaV1cbiAgICBicmVha1xuICB9XG5cbiAgZm9yIChpICs9IDE7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvZGUgPSBpbnB1dFtpXS5jaGFyQ29kZUF0KDApXG4gICAgaWYgKCEoKGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NykgfHwgKGNvZGUgPj0gNjUgJiYgY29kZSA8PSA3MCkgfHwgKGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMDIpKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGFjYyArPSBpbnB1dFtpXVxuICB9XG4gIHJldHVybiBhY2Ncbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBHZXRJUFY2UmVzdWx0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVycm9yIC0gSW5kaWNhdGVzIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBJUHY2IGFkZHJlc3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBwYXJzZWQgSVB2NiBhZGRyZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt6b25lXSAtIFRoZSB6b25lIGlkZW50aWZpZXIsIGlmIHByZXNlbnQuXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBub25TaW1wbGVEb21haW4gPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvW14hXCIkJicoKSorLFxcLS47PV9gYS16e31+XS91KVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYnVmZmVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uc3VtZUlzWm9uZSAoYnVmZmVyKSB7XG4gIGJ1ZmZlci5sZW5ndGggPSAwXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBidWZmZXJcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYWRkcmVzc1xuICogQHBhcmFtIHtHZXRJUFY2UmVzdWx0fSBvdXRwdXRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25zdW1lSGV4dGV0cyAoYnVmZmVyLCBhZGRyZXNzLCBvdXRwdXQpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBjb25zdCBoZXggPSBzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWQoYnVmZmVyKVxuICAgIGlmIChoZXggIT09ICcnKSB7XG4gICAgICBhZGRyZXNzLnB1c2goaGV4KVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQuZXJyb3IgPSB0cnVlXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgYnVmZmVyLmxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHJldHVybnMge0dldElQVjZSZXN1bHR9XG4gKi9cbmZ1bmN0aW9uIGdldElQVjYgKGlucHV0KSB7XG4gIGxldCB0b2tlbkNvdW50ID0gMFxuICBjb25zdCBvdXRwdXQgPSB7IGVycm9yOiBmYWxzZSwgYWRkcmVzczogJycsIHpvbmU6ICcnIH1cbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCBhZGRyZXNzID0gW11cbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCBidWZmZXIgPSBbXVxuICBsZXQgZW5kaXB2NkVuY291bnRlcmVkID0gZmFsc2VcbiAgbGV0IGVuZElwdjYgPSBmYWxzZVxuXG4gIGxldCBjb25zdW1lID0gY29uc3VtZUhleHRldHNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY3Vyc29yID0gaW5wdXRbaV1cbiAgICBpZiAoY3Vyc29yID09PSAnWycgfHwgY3Vyc29yID09PSAnXScpIHsgY29udGludWUgfVxuICAgIGlmIChjdXJzb3IgPT09ICc6Jykge1xuICAgICAgaWYgKGVuZGlwdjZFbmNvdW50ZXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBlbmRJcHY2ID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKCFjb25zdW1lKGJ1ZmZlciwgYWRkcmVzcywgb3V0cHV0KSkgeyBicmVhayB9XG4gICAgICBpZiAoKyt0b2tlbkNvdW50ID4gNykge1xuICAgICAgICAvLyBub3QgdmFsaWRcbiAgICAgICAgb3V0cHV0LmVycm9yID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKGkgPiAwICYmIGlucHV0W2kgLSAxXSA9PT0gJzonKSB7XG4gICAgICAgIGVuZGlwdjZFbmNvdW50ZXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIGFkZHJlc3MucHVzaCgnOicpXG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoY3Vyc29yID09PSAnJScpIHtcbiAgICAgIGlmICghY29uc3VtZShidWZmZXIsIGFkZHJlc3MsIG91dHB1dCkpIHsgYnJlYWsgfVxuICAgICAgLy8gc3dpdGNoIHRvIHpvbmUgZGV0ZWN0aW9uXG4gICAgICBjb25zdW1lID0gY29uc3VtZUlzWm9uZVxuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIucHVzaChjdXJzb3IpXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgfVxuICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChjb25zdW1lID09PSBjb25zdW1lSXNab25lKSB7XG4gICAgICBvdXRwdXQuem9uZSA9IGJ1ZmZlci5qb2luKCcnKVxuICAgIH0gZWxzZSBpZiAoZW5kSXB2Nikge1xuICAgICAgYWRkcmVzcy5wdXNoKGJ1ZmZlci5qb2luKCcnKSlcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkcmVzcy5wdXNoKHN0cmluZ0FycmF5VG9IZXhTdHJpcHBlZChidWZmZXIpKVxuICAgIH1cbiAgfVxuICBvdXRwdXQuYWRkcmVzcyA9IGFkZHJlc3Muam9pbignJylcbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE5vcm1hbGl6ZUlQdjZSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBob3N0IC0gVGhlIG5vcm1hbGl6ZWQgaG9zdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXNjYXBlZEhvc3RdIC0gVGhlIGVzY2FwZWQgaG9zdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNJUFY2IC0gSW5kaWNhdGVzIGlmIHRoZSBob3N0IGlzIGFuIElQdjYgYWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBob3N0XG4gKiBAcmV0dXJucyB7Tm9ybWFsaXplSVB2NlJlc3VsdH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSVB2NiAoaG9zdCkge1xuICBpZiAoZmluZFRva2VuKGhvc3QsICc6JykgPCAyKSB7IHJldHVybiB7IGhvc3QsIGlzSVBWNjogZmFsc2UgfSB9XG4gIGNvbnN0IGlwdjYgPSBnZXRJUFY2KGhvc3QpXG5cbiAgaWYgKCFpcHY2LmVycm9yKSB7XG4gICAgbGV0IG5ld0hvc3QgPSBpcHY2LmFkZHJlc3NcbiAgICBsZXQgZXNjYXBlZEhvc3QgPSBpcHY2LmFkZHJlc3NcbiAgICBpZiAoaXB2Ni56b25lKSB7XG4gICAgICBuZXdIb3N0ICs9ICclJyArIGlwdjYuem9uZVxuICAgICAgZXNjYXBlZEhvc3QgKz0gJyUyNScgKyBpcHY2LnpvbmVcbiAgICB9XG4gICAgcmV0dXJuIHsgaG9zdDogbmV3SG9zdCwgaXNJUFY2OiB0cnVlLCBlc2NhcGVkSG9zdCB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgaG9zdCwgaXNJUFY2OiBmYWxzZSB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZpbmRUb2tlbiAoc3RyLCB0b2tlbikge1xuICBsZXQgaW5kID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHJbaV0gPT09IHRva2VuKSBpbmQrK1xuICB9XG4gIHJldHVybiBpbmRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi40XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzIChwYXRoKSB7XG4gIGxldCBpbnB1dCA9IHBhdGhcbiAgY29uc3Qgb3V0cHV0ID0gW11cbiAgbGV0IG5leHRTbGFzaCA9IC0xXG4gIGxldCBsZW4gPSAwXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gIHdoaWxlIChsZW4gPSBpbnB1dC5sZW5ndGgpIHtcbiAgICBpZiAobGVuID09PSAxKSB7XG4gICAgICBpZiAoaW5wdXQgPT09ICcuJykge1xuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJy8nKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKCcvJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dC5wdXNoKGlucHV0KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG4gICAgICBpZiAoaW5wdXRbMF0gPT09ICcuJykge1xuICAgICAgICBpZiAoaW5wdXRbMV0gPT09ICcuJykge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRbMV0gPT09ICcvJykge1xuICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMilcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlucHV0WzBdID09PSAnLycpIHtcbiAgICAgICAgaWYgKGlucHV0WzFdID09PSAnLicgfHwgaW5wdXRbMV0gPT09ICcvJykge1xuICAgICAgICAgIG91dHB1dC5wdXNoKCcvJylcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsZW4gPT09IDMpIHtcbiAgICAgIGlmIChpbnB1dCA9PT0gJy8uLicpIHtcbiAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBvdXRwdXQucG9wKClcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbnB1dFswXSA9PT0gJy4nKSB7XG4gICAgICBpZiAoaW5wdXRbMV0gPT09ICcuJykge1xuICAgICAgICBpZiAoaW5wdXRbMl0gPT09ICcvJykge1xuICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMylcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgyKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5wdXRbMF0gPT09ICcvJykge1xuICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzJdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDIpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dFsyXSA9PT0gJy4nKSB7XG4gICAgICAgICAgaWYgKGlucHV0WzNdID09PSAnLycpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMylcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgIG91dHB1dC5wb3AoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSdWxlIDJFOiBNb3ZlIG5vcm1hbCBwYXRoIHNlZ21lbnQgdG8gb3V0cHV0XG4gICAgaWYgKChuZXh0U2xhc2ggPSBpbnB1dC5pbmRleE9mKCcvJywgMSkpID09PSAtMSkge1xuICAgICAgb3V0cHV0LnB1c2goaW5wdXQpXG4gICAgICBicmVha1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaChpbnB1dC5zbGljZSgwLCBuZXh0U2xhc2gpKVxuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShuZXh0U2xhc2gpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVzY1xuICogQHJldHVybnMge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nIChjb21wb25lbnQsIGVzYykge1xuICBjb25zdCBmdW5jID0gZXNjICE9PSB0cnVlID8gZXNjYXBlIDogdW5lc2NhcGVcbiAgaWYgKGNvbXBvbmVudC5zY2hlbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5zY2hlbWUgPSBmdW5jKGNvbXBvbmVudC5zY2hlbWUpXG4gIH1cbiAgaWYgKGNvbXBvbmVudC51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LnVzZXJpbmZvID0gZnVuYyhjb21wb25lbnQudXNlcmluZm8pXG4gIH1cbiAgaWYgKGNvbXBvbmVudC5ob3N0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQuaG9zdCA9IGZ1bmMoY29tcG9uZW50Lmhvc3QpXG4gIH1cbiAgaWYgKGNvbXBvbmVudC5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQucGF0aCA9IGZ1bmMoY29tcG9uZW50LnBhdGgpXG4gIH1cbiAgaWYgKGNvbXBvbmVudC5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LnF1ZXJ5ID0gZnVuYyhjb21wb25lbnQucXVlcnkpXG4gIH1cbiAgaWYgKGNvbXBvbmVudC5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LmZyYWdtZW50ID0gZnVuYyhjb21wb25lbnQuZnJhZ21lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gcmVjb21wb3NlQXV0aG9yaXR5IChjb21wb25lbnQpIHtcbiAgY29uc3QgdXJpVG9rZW5zID0gW11cblxuICBpZiAoY29tcG9uZW50LnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaChjb21wb25lbnQudXNlcmluZm8pXG4gICAgdXJpVG9rZW5zLnB1c2goJ0AnKVxuICB9XG5cbiAgaWYgKGNvbXBvbmVudC5ob3N0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgaG9zdCA9IHVuZXNjYXBlKGNvbXBvbmVudC5ob3N0KVxuICAgIGlmICghaXNJUHY0KGhvc3QpKSB7XG4gICAgICBjb25zdCBpcFY2cmVzID0gbm9ybWFsaXplSVB2Nihob3N0KVxuICAgICAgaWYgKGlwVjZyZXMuaXNJUFY2ID09PSB0cnVlKSB7XG4gICAgICAgIGhvc3QgPSBgWyR7aXBWNnJlcy5lc2NhcGVkSG9zdH1dYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaG9zdCA9IGNvbXBvbmVudC5ob3N0XG4gICAgICB9XG4gICAgfVxuICAgIHVyaVRva2Vucy5wdXNoKGhvc3QpXG4gIH1cblxuICBpZiAodHlwZW9mIGNvbXBvbmVudC5wb3J0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY29tcG9uZW50LnBvcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goJzonKVxuICAgIHVyaVRva2Vucy5wdXNoKFN0cmluZyhjb21wb25lbnQucG9ydCkpXG4gIH1cblxuICByZXR1cm4gdXJpVG9rZW5zLmxlbmd0aCA/IHVyaVRva2Vucy5qb2luKCcnKSA6IHVuZGVmaW5lZFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5vblNpbXBsZURvbWFpbixcbiAgcmVjb21wb3NlQXV0aG9yaXR5LFxuICBub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyxcbiAgcmVtb3ZlRG90U2VnbWVudHMsXG4gIGlzSVB2NCxcbiAgaXNVVUlELFxuICBub3JtYWxpemVJUHY2LFxuICBzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWRcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js": /*!************************************************************************!*\ !*** ./node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { eval(__webpack_require__.ts("/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9pZWVlNzU0QDEuMi4xL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxXQUFXOztBQUVwQjtBQUNBO0FBQ0E7QUFDQSxTQUFTLFdBQVc7O0FBRXBCO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsV0FBVzs7QUFFcEI7QUFDQTtBQUNBLFNBQVMsVUFBVTs7QUFFbkI7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9pZWVlNzU0QDEuMi4xL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js": /*!**************************************************************************************************!*\ !*** ./node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js ***! \**************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvbmF2aWdhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBZ0Q7O0FBRWhEIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTYuMS42X0BiYWJlbCtjb3JlQDcuMjkuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9zYXNzQDEuOTguMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb24nO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYXZpZ2F0aW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/api/navigation.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FAiMediaButtons.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FAiFieldButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateSlugButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateThumbnailButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FOptimizeButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fframework%2Fboundary-components.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fmetadata%2Fgenerate%2Ficon-mark.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fnext-devtools%2Fuserspace%2Fapp%2Fsegment-explorer-node.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FAiMediaButtons.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FAiFieldButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateSlugButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateThumbnailButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FOptimizeButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fframework%2Fboundary-components.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fmetadata%2Fgenerate%2Ficon-mark.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fnext-devtools%2Fuserspace%2Fapp%2Fsegment-explorer-node.js%22%2C%22ids%22%3A%5B%5D%7D&server=false! ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/AiMediaButtons.js */ \"(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/AiMediaButtons.js\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/AiFieldButton.js */ \"(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/AiFieldButton.js\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateSlugButton.js */ \"(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateSlugButton.js\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateThumbnailButton.js */ \"(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/FieldGenerators/GenerateThumbnailButton.js\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/OptimizeButton.js */ \"(app-pages-browser)/./node_modules/.pnpm/@mintel+payload-ai@1.9.15_patch_hash=934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59/node_modules/@mintel/payload-ai/dist/components/OptimizeButton.js\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-page.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-segment.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-segment.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/layout-router.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/render-from-template-context.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/lib/framework/boundary-components.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/lib/framework/boundary-components.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC93ZWJwYWNrL2xvYWRlcnMvbmV4dC1mbGlnaHQtY2xpZW50LWVudHJ5LWxvYWRlci5qcz9tb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRm1hcmNtaW50ZWwlMkZQcm9qZWN0cyUyRmUtdGliLmNvbSUyRm5vZGVfbW9kdWxlcyUyRi5wbnBtJTJGJTQwbWludGVsJTJCcGF5bG9hZC1haSU0MDEuOS4xNV9wYXRjaF9oYXNoJTNEOTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTklMkZub2RlX21vZHVsZXMlMkYlNDBtaW50ZWwlMkZwYXlsb2FkLWFpJTJGZGlzdCUyRmNvbXBvbmVudHMlMkZBaU1lZGlhQnV0dG9ucy5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRm1hcmNtaW50ZWwlMkZQcm9qZWN0cyUyRmUtdGliLmNvbSUyRm5vZGVfbW9kdWxlcyUyRi5wbnBtJTJGJTQwbWludGVsJTJCcGF5bG9hZC1haSU0MDEuOS4xNV9wYXRjaF9oYXNoJTNEOTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTklMkZub2RlX21vZHVsZXMlMkYlNDBtaW50ZWwlMkZwYXlsb2FkLWFpJTJGZGlzdCUyRmNvbXBvbmVudHMlMkZGaWVsZEdlbmVyYXRvcnMlMkZBaUZpZWxkQnV0dG9uLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGbWFyY21pbnRlbCUyRlByb2plY3RzJTJGZS10aWIuY29tJTJGbm9kZV9tb2R1bGVzJTJGLnBucG0lMkYlNDBtaW50ZWwlMkJwYXlsb2FkLWFpJTQwMS45LjE1X3BhdGNoX2hhc2glM0Q5MzQzMTVkM2YxNTE4MDU1Mjc4OWE5NGJmNzZjMzQ2MjQ1MDFmNjAxY2M3NDA5YzI0ZF84MDA5OTNmN2Y0Yzk4ZjUyNGZmYTI3MzA4N2M1MGM1OSUyRm5vZGVfbW9kdWxlcyUyRiU0MG1pbnRlbCUyRnBheWxvYWQtYWklMkZkaXN0JTJGY29tcG9uZW50cyUyRkZpZWxkR2VuZXJhdG9ycyUyRkdlbmVyYXRlU2x1Z0J1dHRvbi5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRm1hcmNtaW50ZWwlMkZQcm9qZWN0cyUyRmUtdGliLmNvbSUyRm5vZGVfbW9kdWxlcyUyRi5wbnBtJTJGJTQwbWludGVsJTJCcGF5bG9hZC1haSU0MDEuOS4xNV9wYXRjaF9oYXNoJTNEOTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTklMkZub2RlX21vZHVsZXMlMkYlNDBtaW50ZWwlMkZwYXlsb2FkLWFpJTJGZGlzdCUyRmNvbXBvbmVudHMlMkZGaWVsZEdlbmVyYXRvcnMlMkZHZW5lcmF0ZVRodW1ibmFpbEJ1dHRvbi5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRm1hcmNtaW50ZWwlMkZQcm9qZWN0cyUyRmUtdGliLmNvbSUyRm5vZGVfbW9kdWxlcyUyRi5wbnBtJTJGJTQwbWludGVsJTJCcGF5bG9hZC1haSU0MDEuOS4xNV9wYXRjaF9oYXNoJTNEOTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTklMkZub2RlX21vZHVsZXMlMkYlNDBtaW50ZWwlMkZwYXlsb2FkLWFpJTJGZGlzdCUyRmNvbXBvbmVudHMlMkZPcHRpbWl6ZUJ1dHRvbi5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRm1hcmNtaW50ZWwlMkZQcm9qZWN0cyUyRmUtdGliLmNvbSUyRm5vZGVfbW9kdWxlcyUyRi5wbnBtJTJGbmV4dCU0MDE2LjEuNl8lNDBiYWJlbCUyQmNvcmUlNDA3LjI5LjBfJTQwb3BlbnRlbGVtZXRyeSUyQmFwaSU0MDEuOS4xX3JlYWN0LWRvbSU0MDE5LjIuNF9yZWFjdCU0MDE5LjIuNF9fcmVhY3QlNDAxOS4yLjRfc2FzcyU0MDEuOTguMCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGbWFyY21pbnRlbCUyRlByb2plY3RzJTJGZS10aWIuY29tJTJGbm9kZV9tb2R1bGVzJTJGLnBucG0lMkZuZXh0JTQwMTYuMS42XyU0MGJhYmVsJTJCY29yZSU0MDcuMjkuMF8lNDBvcGVudGVsZW1ldHJ5JTJCYXBpJTQwMS45LjFfcmVhY3QtZG9tJTQwMTkuMi40X3JlYWN0JTQwMTkuMi40X19yZWFjdCU0MDE5LjIuNF9zYXNzJTQwMS45OC4wJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGY2xpZW50LXNlZ21lbnQuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZtYXJjbWludGVsJTJGUHJvamVjdHMlMkZlLXRpYi5jb20lMkZub2RlX21vZHVsZXMlMkYucG5wbSUyRm5leHQlNDAxNi4xLjZfJTQwYmFiZWwlMkJjb3JlJTQwNy4yOS4wXyU0MG9wZW50ZWxlbWV0cnklMkJhcGklNDAxLjkuMV9yZWFjdC1kb20lNDAxOS4yLjRfcmVhY3QlNDAxOS4yLjRfX3JlYWN0JTQwMTkuMi40X3Nhc3MlNDAxLjk4LjAlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZodHRwLWFjY2Vzcy1mYWxsYmFjayUyRmVycm9yLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGbWFyY21pbnRlbCUyRlByb2plY3RzJTJGZS10aWIuY29tJTJGbm9kZV9tb2R1bGVzJTJGLnBucG0lMkZuZXh0JTQwMTYuMS42XyU0MGJhYmVsJTJCY29yZSU0MDcuMjkuMF8lNDBvcGVudGVsZW1ldHJ5JTJCYXBpJTQwMS45LjFfcmVhY3QtZG9tJTQwMTkuMi40X3JlYWN0JTQwMTkuMi40X19yZWFjdCU0MDE5LjIuNF9zYXNzJTQwMS45OC4wJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbGF5b3V0LXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRm1hcmNtaW50ZWwlMkZQcm9qZWN0cyUyRmUtdGliLmNvbSUyRm5vZGVfbW9kdWxlcyUyRi5wbnBtJTJGbmV4dCU0MDE2LjEuNl8lNDBiYWJlbCUyQmNvcmUlNDA3LjI5LjBfJTQwb3BlbnRlbGVtZXRyeSUyQmFwaSU0MDEuOS4xX3JlYWN0LWRvbSU0MDE5LjIuNF9yZWFjdCU0MDE5LjIuNF9fcmVhY3QlNDAxOS4yLjRfc2FzcyU0MDEuOTguMCUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRnJlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZtYXJjbWludGVsJTJGUHJvamVjdHMlMkZlLXRpYi5jb20lMkZub2RlX21vZHVsZXMlMkYucG5wbSUyRm5leHQlNDAxNi4xLjZfJTQwYmFiZWwlMkJjb3JlJTQwNy4yOS4wXyU0MG9wZW50ZWxlbWV0cnklMkJhcGklNDAxLjkuMV9yZWFjdC1kb20lNDAxOS4yLjRfcmVhY3QlNDAxOS4yLjRfX3JlYWN0JTQwMTkuMi40X3Nhc3MlNDAxLjk4LjAlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmxpYiUyRmZyYW1ld29yayUyRmJvdW5kYXJ5LWNvbXBvbmVudHMuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZtYXJjbWludGVsJTJGUHJvamVjdHMlMkZlLXRpYi5jb20lMkZub2RlX21vZHVsZXMlMkYucG5wbSUyRm5leHQlNDAxNi4xLjZfJTQwYmFiZWwlMkJjb3JlJTQwNy4yOS4wXyU0MG9wZW50ZWxlbWV0cnklMkJhcGklNDAxLjkuMV9yZWFjdC1kb20lNDAxOS4yLjRfcmVhY3QlNDAxOS4yLjRfX3JlYWN0JTQwMTkuMi40X3Nhc3MlNDAxLjk4LjAlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmxpYiUyRm1ldGFkYXRhJTJGZ2VuZXJhdGUlMkZpY29uLW1hcmsuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZtYXJjbWludGVsJTJGUHJvamVjdHMlMkZlLXRpYi5jb20lMkZub2RlX21vZHVsZXMlMkYucG5wbSUyRm5leHQlNDAxNi4xLjZfJTQwYmFiZWwlMkJjb3JlJTQwNy4yOS4wXyU0MG9wZW50ZWxlbWV0cnklMkJhcGklNDAxLjkuMV9yZWFjdC1kb20lNDAxOS4yLjRfcmVhY3QlNDAxOS4yLjRfX3JlYWN0JTQwMTkuMi40X3Nhc3MlNDAxLjk4LjAlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRm5leHQtZGV2dG9vbHMlMkZ1c2Vyc3BhY2UlMkZhcHAlMkZzZWdtZW50LWV4cGxvcmVyLW5vZGUuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPWZhbHNlISIsIm1hcHBpbmdzIjoiQUFBQSx3aEJBQXVSO0FBQ3ZSO0FBQ0Esc2pCQUFzUztBQUN0UztBQUNBLGdrQkFBMlM7QUFDM1M7QUFDQSwwa0JBQWdUO0FBQ2hUO0FBQ0Esd2hCQUF1UjtBQUN2UjtBQUNBLHdmQUFvUTtBQUNwUTtBQUNBLDhmQUF1UTtBQUN2UTtBQUNBLHdpQkFBNFI7QUFDNVI7QUFDQSw0ZkFBc1E7QUFDdFE7QUFDQSwwaEJBQXFSO0FBQ3JSO0FBQ0EsZ2dCQUF3UTtBQUN4UTtBQUNBLHNmQUFzUTtBQUN0UTtBQUNBLGdpQkFBd1IiLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vQG1pbnRlbCtwYXlsb2FkLWFpQDEuOS4xNV9wYXRjaF9oYXNoPTkzNDMxNWQzZjE1MTgwNTUyNzg5YTk0YmY3NmMzNDYyNDUwMWY2MDFjYzc0MDljMjRkXzgwMDk5M2Y3ZjRjOThmNTI0ZmZhMjczMDg3YzUwYzU5L25vZGVfbW9kdWxlcy9AbWludGVsL3BheWxvYWQtYWkvZGlzdC9jb21wb25lbnRzL0FpTWVkaWFCdXR0b25zLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BtaW50ZWwrcGF5bG9hZC1haUAxLjkuMTVfcGF0Y2hfaGFzaD05MzQzMTVkM2YxNTE4MDU1Mjc4OWE5NGJmNzZjMzQ2MjQ1MDFmNjAxY2M3NDA5YzI0ZF84MDA5OTNmN2Y0Yzk4ZjUyNGZmYTI3MzA4N2M1MGM1OS9ub2RlX21vZHVsZXMvQG1pbnRlbC9wYXlsb2FkLWFpL2Rpc3QvY29tcG9uZW50cy9GaWVsZEdlbmVyYXRvcnMvQWlGaWVsZEJ1dHRvbi5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AbWludGVsK3BheWxvYWQtYWlAMS45LjE1X3BhdGNoX2hhc2g9OTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTkvbm9kZV9tb2R1bGVzL0BtaW50ZWwvcGF5bG9hZC1haS9kaXN0L2NvbXBvbmVudHMvRmllbGRHZW5lcmF0b3JzL0dlbmVyYXRlU2x1Z0J1dHRvbi5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9AbWludGVsK3BheWxvYWQtYWlAMS45LjE1X3BhdGNoX2hhc2g9OTM0MzE1ZDNmMTUxODA1NTI3ODlhOTRiZjc2YzM0NjI0NTAxZjYwMWNjNzQwOWMyNGRfODAwOTkzZjdmNGM5OGY1MjRmZmEyNzMwODdjNTBjNTkvbm9kZV9tb2R1bGVzL0BtaW50ZWwvcGF5bG9hZC1haS9kaXN0L2NvbXBvbmVudHMvRmllbGRHZW5lcmF0b3JzL0dlbmVyYXRlVGh1bWJuYWlsQnV0dG9uLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL0BtaW50ZWwrcGF5bG9hZC1haUAxLjkuMTVfcGF0Y2hfaGFzaD05MzQzMTVkM2YxNTE4MDU1Mjc4OWE5NGJmNzZjMzQ2MjQ1MDFmNjAxY2M3NDA5YzI0ZF84MDA5OTNmN2Y0Yzk4ZjUyNGZmYTI3MzA4N2M1MGM1OS9ub2RlX21vZHVsZXMvQG1pbnRlbC9wYXlsb2FkLWFpL2Rpc3QvY29tcG9uZW50cy9PcHRpbWl6ZUJ1dHRvbi5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtcGFnZS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtc2VnbWVudC5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9odHRwLWFjY2Vzcy1mYWxsYmFjay9lcnJvci1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9sYXlvdXQtcm91dGVyLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTYuMS42X0BiYWJlbCtjb3JlQDcuMjkuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9zYXNzQDEuOTguMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi4xLjZfQGJhYmVsK2NvcmVANy4yOS4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40X3Nhc3NAMS45OC4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2ZyYW1ld29yay9ib3VuZGFyeS1jb21wb25lbnRzLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTYuMS42X0BiYWJlbCtjb3JlQDcuMjkuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9zYXNzQDEuOTguMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9tZXRhZGF0YS9nZW5lcmF0ZS9pY29uLW1hcmsuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi4xLjZfQGJhYmVsK2NvcmVANy4yOS4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40X3Nhc3NAMS45OC4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3NlZ21lbnQtZXhwbG9yZXItbm9kZS5qc1wiKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FAiMediaButtons.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FAiFieldButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateSlugButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateThumbnailButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FOptimizeButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fframework%2Fboundary-components.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fmetadata%2Fgenerate%2Ficon-mark.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fnext-devtools%2Fuserspace%2Fapp%2Fsegment-explorer-node.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/app-dir/link.js": /*!******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/app-dir/link.js ***! \******************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n /**\n * A React component that extends the HTML `` element to provide\n * [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)\n * and client-side navigation. This is the primary way to navigate between routes in Next.js.\n *\n * @remarks\n * - Prefetching is only enabled in production.\n *\n * @see https://nextjs.org/docs/app/api-reference/components/link\n */ default: function() {\n return LinkComponent;\n },\n useLinkStatus: function() {\n return useLinkStatus;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\"));\nconst _formaturl = __webpack_require__(/*! ../../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _usemergedref = __webpack_require__(/*! ../use-merged-ref */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/use-merged-ref.js\");\nconst _utils = __webpack_require__(/*! ../../shared/lib/utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/add-base-path.js\");\nconst _warnonce = __webpack_require__(/*! ../../shared/lib/utils/warn-once */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _links = __webpack_require__(/*! ../components/links */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/links.js\");\nconst _islocalurl = __webpack_require__(/*! ../../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _types = __webpack_require__(/*! ../components/segment-cache/types */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/segment-cache/types.js\");\nconst _erroronce = __webpack_require__(/*! ../../shared/lib/utils/error-once */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/error-once.js\");\nfunction isModifiedEvent(event) {\n const eventTarget = event.currentTarget;\n const target = eventTarget.getAttribute('target');\n return target && target !== '_self' || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download\n event.nativeEvent && event.nativeEvent.which === 2;\n}\nfunction linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate) {\n if (true) {\n const { nodeName } = e.currentTarget;\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === 'A';\n if (isAnchorNodeName && isModifiedEvent(e) || e.currentTarget.hasAttribute('download')) {\n // ignore click for browser’s default behavior\n return;\n }\n if (!(0, _islocalurl.isLocalURL)(href)) {\n if (replace) {\n // browser default behavior does not replace the history state\n // so we need to do it manually\n e.preventDefault();\n location.replace(href);\n }\n // ignore click for browser’s default behavior\n return;\n }\n e.preventDefault();\n if (onNavigate) {\n let isDefaultPrevented = false;\n onNavigate({\n preventDefault: ()=>{\n isDefaultPrevented = true;\n }\n });\n if (isDefaultPrevented) {\n return;\n }\n }\n const { dispatchNavigateAction } = __webpack_require__(/*! ../components/app-router-instance */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/app-router-instance.js\");\n _react.default.startTransition(()=>{\n dispatchNavigateAction(as || href, replace ? 'replace' : 'push', scroll ?? true, linkInstanceRef.current);\n });\n }\n}\nfunction formatStringOrUrl(urlObjOrString) {\n if (typeof urlObjOrString === 'string') {\n return urlObjOrString;\n }\n return (0, _formaturl.formatUrl)(urlObjOrString);\n}\nfunction LinkComponent(props) {\n _s();\n const [linkStatus, setOptimisticLinkStatus] = (0, _react.useOptimistic)(_links.IDLE_LINK_STATUS);\n let children;\n const linkInstanceRef = (0, _react.useRef)(null);\n const { href: hrefProp, as: asProp, children: childrenProp, prefetch: prefetchProp = null, passHref, replace, shallow, scroll, onClick, onMouseEnter: onMouseEnterProp, onTouchStart: onTouchStartProp, legacyBehavior = false, onNavigate, ref: forwardedRef, unstable_dynamicOnHover, ...restProps } = props;\n children = childrenProp;\n if (legacyBehavior && (typeof children === 'string' || typeof children === 'number')) {\n children = /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n children: children\n });\n }\n const router = _react.default.useContext(_approutercontextsharedruntime.AppRouterContext);\n const prefetchEnabled = prefetchProp !== false;\n const fetchStrategy = prefetchProp !== false ? getFetchStrategyFromPrefetchProp(prefetchProp) : _types.FetchStrategy.PPR;\n if (true) {\n function createPropError(args) {\n return Object.defineProperty(new Error(`Failed prop type: The prop \\`${args.key}\\` expects a ${args.expected} in \\`\\`, but got \\`${args.actual}\\` instead.` + ( true ? \"\\nOpen your browser's console to view the Component stack trace.\" : 0)), \"__NEXT_ERROR_CODE\", {\n value: \"E319\",\n enumerable: false,\n configurable: true\n });\n }\n // TypeScript trick for type-guarding:\n const requiredPropsGuard = {\n href: true\n };\n const requiredProps = Object.keys(requiredPropsGuard);\n requiredProps.forEach((key)=>{\n if (key === 'href') {\n if (props[key] == null || typeof props[key] !== 'string' && typeof props[key] !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: props[key] === null ? 'null' : typeof props[key]\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n const _ = key;\n }\n });\n // TypeScript trick for type-guarding:\n const optionalPropsGuard = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n unstable_dynamicOnHover: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true,\n onNavigate: true\n };\n const optionalProps = Object.keys(optionalPropsGuard);\n optionalProps.forEach((key)=>{\n const valType = typeof props[key];\n if (key === 'as') {\n if (props[key] && valType !== 'string' && valType !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: valType\n });\n }\n } else if (key === 'onClick' || key === 'onMouseEnter' || key === 'onTouchStart' || key === 'onNavigate') {\n if (props[key] && valType !== 'function') {\n throw createPropError({\n key,\n expected: '`function`',\n actual: valType\n });\n }\n } else if (key === 'replace' || key === 'scroll' || key === 'shallow' || key === 'passHref' || key === 'legacyBehavior' || key === 'unstable_dynamicOnHover') {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType\n });\n }\n } else if (key === 'prefetch') {\n if (props[key] != null && valType !== 'boolean' && props[key] !== 'auto') {\n throw createPropError({\n key,\n expected: '`boolean | \"auto\"`',\n actual: valType\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n const _ = key;\n }\n });\n }\n if (true) {\n if (props.locale) {\n (0, _warnonce.warnOnce)('The `locale` prop is not supported in `next/link` while using the `app` router. Read more about app router internalization: https://nextjs.org/docs/app/building-your-application/routing/internationalization');\n }\n if (!asProp) {\n let href;\n if (typeof hrefProp === 'string') {\n href = hrefProp;\n } else if (typeof hrefProp === 'object' && typeof hrefProp.pathname === 'string') {\n href = hrefProp.pathname;\n }\n if (href) {\n const hasDynamicSegment = href.split('/').some((segment)=>segment.startsWith('[') && segment.endsWith(']'));\n if (hasDynamicSegment) {\n throw Object.defineProperty(new Error(`Dynamic href \\`${href}\\` found in while using the \\`/app\\` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href`), \"__NEXT_ERROR_CODE\", {\n value: \"E267\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n }\n const { href, as } = _react.default.useMemo({\n \"LinkComponent.useMemo\": ()=>{\n const resolvedHref = formatStringOrUrl(hrefProp);\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref\n };\n }\n }[\"LinkComponent.useMemo\"], [\n hrefProp,\n asProp\n ]);\n // This will return the first child, if multiple are provided it will throw an error\n let child;\n if (legacyBehavior) {\n if (children?.$$typeof === Symbol.for('react.lazy')) {\n throw Object.defineProperty(new Error(`\\`\\` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's \\`\\` tag.`), \"__NEXT_ERROR_CODE\", {\n value: \"E863\",\n enumerable: false,\n configurable: true\n });\n }\n if (true) {\n if (onClick) {\n console.warn(`\"onClick\" was passed to with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link`);\n }\n if (onMouseEnterProp) {\n console.warn(`\"onMouseEnter\" was passed to with \\`href\\` of \\`${hrefProp}\\` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link`);\n }\n try {\n child = _react.default.Children.only(children);\n } catch (err) {\n if (!children) {\n throw Object.defineProperty(new Error(`No children were passed to with \\`href\\` of \\`${hrefProp}\\` but one child is required https://nextjs.org/docs/messages/link-no-children`), \"__NEXT_ERROR_CODE\", {\n value: \"E320\",\n enumerable: false,\n configurable: true\n });\n }\n throw Object.defineProperty(new Error(`Multiple children were passed to with \\`href\\` of \\`${hrefProp}\\` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children` + ( true ? \" \\nOpen your browser's console to view the Component stack trace.\" : 0)), \"__NEXT_ERROR_CODE\", {\n value: \"E266\",\n enumerable: false,\n configurable: true\n });\n }\n } else {}\n } else {\n if (true) {\n if (children?.type === 'a') {\n throw Object.defineProperty(new Error('Invalid with child. Please remove or use .\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor'), \"__NEXT_ERROR_CODE\", {\n value: \"E209\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n const childRef = legacyBehavior ? child && typeof child === 'object' && child.ref : forwardedRef;\n // Use a callback ref to attach an IntersectionObserver to the anchor tag on\n // mount. In the future we will also use this to keep track of all the\n // currently mounted instances, e.g. so we can re-prefetch them after\n // a revalidation or refresh.\n const observeLinkVisibilityOnMount = _react.default.useCallback({\n \"LinkComponent.useCallback[observeLinkVisibilityOnMount]\": (element)=>{\n if (router !== null) {\n linkInstanceRef.current = (0, _links.mountLinkInstance)(element, href, router, fetchStrategy, prefetchEnabled, setOptimisticLinkStatus);\n }\n return ({\n \"LinkComponent.useCallback[observeLinkVisibilityOnMount]\": ()=>{\n if (linkInstanceRef.current) {\n (0, _links.unmountLinkForCurrentNavigation)(linkInstanceRef.current);\n linkInstanceRef.current = null;\n }\n (0, _links.unmountPrefetchableInstance)(element);\n }\n })[\"LinkComponent.useCallback[observeLinkVisibilityOnMount]\"];\n }\n }[\"LinkComponent.useCallback[observeLinkVisibilityOnMount]\"], [\n prefetchEnabled,\n href,\n router,\n fetchStrategy,\n setOptimisticLinkStatus\n ]);\n const mergedRef = (0, _usemergedref.useMergedRef)(observeLinkVisibilityOnMount, childRef);\n const childProps = {\n ref: mergedRef,\n onClick (e) {\n if (true) {\n if (!e) {\n throw Object.defineProperty(new Error(`Component rendered inside next/link has to pass click event to \"onClick\" prop.`), \"__NEXT_ERROR_CODE\", {\n value: \"E312\",\n enumerable: false,\n configurable: true\n });\n }\n }\n if (!legacyBehavior && typeof onClick === 'function') {\n onClick(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onClick === 'function') {\n child.props.onClick(e);\n }\n if (!router) {\n return;\n }\n if (e.defaultPrevented) {\n return;\n }\n linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate);\n },\n onMouseEnter (e) {\n if (!legacyBehavior && typeof onMouseEnterProp === 'function') {\n onMouseEnterProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onMouseEnter === 'function') {\n child.props.onMouseEnter(e);\n }\n if (!router) {\n return;\n }\n if (!prefetchEnabled || \"development\" === 'development') {\n return;\n }\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true;\n (0, _links.onNavigationIntent)(e.currentTarget, upgradeToDynamicPrefetch);\n },\n onTouchStart: false ? 0 : function onTouchStart(e) {\n if (!legacyBehavior && typeof onTouchStartProp === 'function') {\n onTouchStartProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onTouchStart === 'function') {\n child.props.onTouchStart(e);\n }\n if (!router) {\n return;\n }\n if (!prefetchEnabled) {\n return;\n }\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true;\n (0, _links.onNavigationIntent)(e.currentTarget, upgradeToDynamicPrefetch);\n }\n };\n // If the url is absolute, we can bypass the logic to prepend the basePath.\n if ((0, _utils.isAbsoluteUrl)(as)) {\n childProps.href = as;\n } else if (!legacyBehavior || passHref || child.type === 'a' && !('href' in child.props)) {\n childProps.href = (0, _addbasepath.addBasePath)(as);\n }\n let link;\n if (legacyBehavior) {\n if (true) {\n (0, _erroronce.errorOnce)('`legacyBehavior` is deprecated and will be removed in a future ' + 'release. A codemod is available to upgrade your components:\\n\\n' + 'npx @next/codemod@latest new-link .\\n\\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components');\n }\n link = /*#__PURE__*/ _react.default.cloneElement(child, childProps);\n } else {\n link = /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n ...restProps,\n ...childProps,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(LinkStatusContext.Provider, {\n value: linkStatus,\n children: link\n });\n}\n_s(LinkComponent, \"MNV6IdWv8Lu3MKc7Fm4v59uGRY0=\");\n_c = LinkComponent;\nconst LinkStatusContext = /*#__PURE__*/ (0, _react.createContext)(_links.IDLE_LINK_STATUS);\nconst useLinkStatus = ()=>{\n return (0, _react.useContext)(LinkStatusContext);\n};\nfunction getFetchStrategyFromPrefetchProp(prefetchProp) {\n if (false) {} else {\n return prefetchProp === null || prefetchProp === 'auto' ? _types.FetchStrategy.PPR : // (although invalid values should've been filtered out by prop validation in dev)\n _types.FetchStrategy.Full;\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=link.js.map\nvar _c;\n$RefreshReg$(_c, \"LinkComponent\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWRpci9saW5rLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0lBc1RBOzs7Ozs7Ozs7Q0FTQyxHQUNELE9BK1pDO2VBL1p1QkE7O0lBcWFYQyxhQUFhO2VBQWJBOzs7Ozs2RUFudUIyRDt1Q0FFOUM7MkRBQ087MENBQ0o7bUNBQ0M7eUNBQ0Y7c0NBQ0g7bUNBU2xCO3dDQUNvQjttQ0FJcEI7dUNBQ21CO0FBeU0xQixTQUFTQyxnQkFBZ0JDLEtBQXVCO0lBQzlDLE1BQU1DLGNBQWNELE1BQU1FLGFBQWE7SUFDdkMsTUFBTUMsU0FBU0YsWUFBWUcsWUFBWSxDQUFDO0lBQ3hDLE9BQ0dELFVBQVVBLFdBQVcsV0FDdEJILE1BQU1LLE9BQU8sSUFDYkwsTUFBTU0sT0FBTyxJQUNiTixNQUFNTyxRQUFRLElBQ2RQLE1BQU1RLE1BQU0sSUFBSSw2QkFBNkI7SUFDNUNSLE1BQU1TLFdBQVcsSUFBSVQsTUFBTVMsV0FBVyxDQUFDQyxLQUFLLEtBQUs7QUFFdEQ7QUFFQSxTQUFTQyxZQUNQQyxDQUFtQixFQUNuQkMsSUFBWSxFQUNaQyxFQUFVLEVBQ1ZDLGVBQXFELEVBQ3JEQyxPQUFpQixFQUNqQkMsTUFBZ0IsRUFDaEJDLFVBQW1DO0lBRW5DLElBQUksSUFBNkIsRUFBRTtRQUNqQyxNQUFNLEVBQUVFLFFBQVEsRUFBRSxHQUFHUixFQUFFVixhQUFhO1FBRXBDLGtEQUFrRDtRQUNsRCxNQUFNbUIsbUJBQW1CRCxTQUFTRSxXQUFXLE9BQU87UUFDcEQsSUFDR0Qsb0JBQW9CdEIsZ0JBQWdCYSxNQUNyQ0EsRUFBRVYsYUFBYSxDQUFDcUIs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YUFBQUEsRUFFeEIzRixPQUFBQSxnQkFBZ0I7QUFFWCxNQUFNMUMsZ0JBQWdCO0lBQzNCLE9BQU9nRSxDQUFBQSxHQUFBQSxPQUFBQSxVQUFVLEVBQUNrRTtBQUNwQjtBQUVBLFNBQVM5RCxpQ0FDUG5CLFlBQStEO0lBRS9ELElBQUlzQixLQUFtQyxFQUFFLEVBVXhDLE1BQU07UUFDTCxPQUFPdEIsaUJBQWlCLFFBQVFBLGlCQUFpQixTQUU3Q29CLE9BQUFBLGFBQWEsQ0FBQ0MsR0FBRyxHQUVqQixrRkFDa0Y7UUFDbEZELE9BQUFBLGFBQWEsQ0FBQ2tFLElBQUk7SUFDeEI7QUFDRiIsInNvdXJjZXMiOlsiL1VzZXJzL3NyYy9jbGllbnQvYXBwLWRpci9saW5rLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU9wdGltaXN0aWMsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQgeyBmb3JtYXRVcmwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtdXJsJ1xuaW1wb3J0IHsgQXBwUm91dGVyQ29udGV4dCB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgdXNlTWVyZ2VkUmVmIH0gZnJvbSAnLi4vdXNlLW1lcmdlZC1yZWYnXG5pbXBvcnQgeyBpc0Fic29sdXRlVXJsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi91dGlscydcbmltcG9ydCB7IGFkZEJhc2VQYXRoIH0gZnJvbSAnLi4vYWRkLWJhc2UtcGF0aCdcbmltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UnXG5pbXBvcnQgdHlwZSB7IFBFTkRJTkdfTElOS19TVEFUVVMgfSBmcm9tICcuLi9jb21wb25lbnRzL2xpbmtzJ1xuaW1wb3J0IHtcbiAgSURMRV9MSU5LX1NUQVRVUyxcbiAgbW91bnRMaW5rSW5zdGFuY2UsXG4gIG9uTmF2aWdhdGlvbkludGVudCxcbiAgdW5tb3VudExpbmtGb3JDdXJyZW50TmF2aWdhdGlvbixcbiAgdW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlLFxuICB0eXBlIExpbmtJbnN0YW5jZSxcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9saW5rcydcbmltcG9ydCB7IGlzTG9jYWxVUkwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1sb2NhbC11cmwnXG5pbXBvcnQge1xuICBGZXRjaFN0cmF0ZWd5LFxuICB0eXBlIFByZWZldGNoVGFza0ZldGNoU3RyYXRlZ3ksXG59IGZyb20gJy4uL2NvbXBvbmVudHMvc2VnbWVudC1jYWNoZS90eXBlcydcbmltcG9ydCB7IGVycm9yT25jZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvdXRpbHMvZXJyb3Itb25jZSdcblxudHlwZSBVcmwgPSBzdHJpbmcgfCBVcmxPYmplY3RcbnR5cGUgUmVxdWlyZWRLZXlzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiB7fSBleHRlbmRzIFBpY2s8VCwgSz4gPyBuZXZlciA6IEtcbn1ba2V5b2YgVF1cbnR5cGUgT3B0aW9uYWxLZXlzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiB7fSBleHRlbmRzIFBpY2s8VCwgSz4gPyBLIDogbmV2ZXJcbn1ba2V5b2YgVF1cblxudHlwZSBPbk5hdmlnYXRlRXZlbnRIYW5kbGVyID0gKGV2ZW50OiB7IHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkIH0pID0+IHZvaWRcblxudHlwZSBJbnRlcm5hbExpbmtQcm9wcyA9IHtcbiAgLyoqXG4gICAqICoqUmVxdWlyZWQqKi4gVGhlIHBhdGggb3IgVVJMIHRvIG5hdmlnYXRlIHRvLiBJdCBjYW4gYWxzbyBiZSBhbiBvYmplY3QgKHNpbWlsYXIgdG8gYFVSTGApLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c3hcbiAgICogLy8gTmF2aWdhdGUgdG8gL2Rhc2hib2FyZDpcbiAgICogPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIj5EYXNoYm9hcmQ8L0xpbms+XG4gICAqXG4gICAqIC8vIE5hdmlnYXRlIHRvIC9hYm91dD9uYW1lPXRlc3Q6XG4gICAqIDxMaW5rIGhyZWY9e3sgcGF0aG5hbWU6ICcvYWJvdXQnLCBxdWVyeTogeyBuYW1lOiAndGVzdCcgfSB9fT5cbiAgICogICBBYm91dFxuICAgKiA8L0xpbms+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiAtIEZvciBleHRlcm5hbCBVUkxzLCB1c2UgYSBmdWxseSBxdWFsaWZpZWQgVVJMIHN1Y2ggYXMgYGh0dHBzOi8vLi4uYC5cbiAgICogLSBJbiB0aGUgQXBwIFJvdXRlciwgZHluYW1pYyByb3V0ZXMgbXVzdCBub3QgaW5jbHVkZSBicmFja2V0ZWQgc2VnbWVudHMgaW4gYGhyZWZgLlxuICAgKi9cbiAgaHJlZjogVXJsXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHYxMC4wLjA6IGBocmVmYCBwcm9wcyBwb2ludGluZyB0byBhIGR5bmFtaWMgcm91dGUgYXJlXG4gICAqIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZWQgYW5kIG5vIGxvbmdlciByZXF1aXJlIHRoZSBgYXNgIHByb3AuXG4gICAqL1xuICBhcz86IFVybFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBjdXJyZW50IGBoaXN0b3J5YCBzdGF0ZSBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyBVUkwgaW50byB0aGUgc3RhY2suXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c3hcbiAgICogPExpbmsgaHJlZj1cIi9hYm91dFwiIHJlcGxhY2U+XG4gICAqICAgQWJvdXQgKHJlcGxhY2VzIHRoZSBoaXN0b3J5IHN0YXRlKVxuICAgKiA8L0xpbms+XG4gICAqIGBgYFxuICAgKi9cbiAgcmVwbGFjZT86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzY3JvbGwgYmVoYXZpb3IuIElmIGB0cnVlYCwgTmV4dC5qcyBhdHRlbXB0cyB0byBtYWludGFpblxuICAgKiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlmIHRoZSBuZXdseSBuYXZpZ2F0ZWQgcGFnZSBpcyBzdGlsbCB2aXNpYmxlLiBJZiBub3QsIGl0IHNjcm9sbHMgdG8gdGhlIHRvcC5cbiAgICpcbiAgICogSWYgYGZhbHNlYCwgTmV4dC5qcyB3aWxsIG5vdCBtb2RpZnkgdGhlIHNjcm9sbCBiZWhhdmlvciBhdCBhbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYHRydWVgXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzeFxuICAgKiA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIHNjcm9sbD17ZmFsc2V9PlxuICAgKiAgIE5vIGF1dG8gc2Nyb2xsXG4gICAqIDwvTGluaz5cbiAgICogYGBgXG4gICAqL1xuICBzY3JvbGw/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBwYWdlIHdpdGhvdXQgcmVydW5uaW5nIGRhdGEgZmV0Y2hpbmcgbWV0aG9kc1xuICAgKiBsaWtlIGBnZXRTdGF0aWNQcm9wc2AsIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgLCBvciBgZ2V0SW5pdGlhbFByb3BzYC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogYHNoYWxsb3dgIG9ubHkgYXBwbGllcyB0byB0aGUgUGFnZXMgUm91dGVyLiBGb3IgdGhlIEFwcCBSb3V0ZXIsIHNlZSB0aGVcbiAgICogW2ZvbGxvd2luZyBkb2N1bWVudGF0aW9uXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL2xpbmtpbmctYW5kLW5hdmlnYXRpbmcjdXNpbmctdGhlLW5hdGl2ZS1oaXN0b3J5LWFwaSkuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c3hcbiAgICogPExpbmsgaHJlZj1cIi9ibG9nXCIgc2hhbGxvdz5cbiAgICogICBTaGFsbG93IG5hdmlnYXRpb25cbiAgICogPC9MaW5rPlxuICAgKiBgYGBcbiAgICovXG4gIHNoYWxsb3c/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBgTGlua2AgdG8gcGFzcyBpdHMgYGhyZWZgIHRvIHRoZSBjaGlsZCBjb21wb25lbnQuIFVzZWZ1bCBpZiB0aGUgY2hpbGQgaXMgYSBjdXN0b21cbiAgICogY29tcG9uZW50IHRoYXQgd3JhcHMgYW4gYDxhPmAgdGFnLCBvciBpZiB5b3UncmUgdXNpbmcgY2VydGFpbiBzdHlsaW5nIGxpYnJhcmllcy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzeFxuICAgKiA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIHBhc3NIcmVmIGxlZ2FjeUJlaGF2aW9yPlxuICAgKiAgIDxNeVN0eWxlZEFuY2hvcj5EYXNoYm9hcmQ8L015U3R5bGVkQW5jaG9yPlxuICAgKiA8L0xpbms+XG4gICAqIGBgYFxuICAgKi9cbiAgcGFzc0hyZWY/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFByZWZldGNoIHRoZSBwYWdlIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKiBBbnkgYDxMaW5rIC8+YCB0aGF0IGlzIGluIHRoZSB2aWV3cG9ydCAoaW5pdGlhbGx5IG9yIHRocm91Z2ggc2Nyb2xsKSB3aWxsIGJlIHByZWZldGNoZWQuXG4gICAqIFByZWZldGNoIGNhbiBiZSBkaXNhYmxlZCBieSBwYXNzaW5nIGBwcmVmZXRjaD17ZmFsc2V9YC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUHJlZmV0Y2hpbmcgaXMgb25seSBlbmFibGVkIGluIHByb2R1Y3Rpb24uXG4gICAqXG4gICAqIC0gSW4gdGhlICoqQXBwIFJvdXRlcioqOlxuICAgKiAgIC0gYFwiYXV0b1wiYCwgYG51bGxgLCBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IFByZWZldGNoIGJlaGF2aW9yIGRlcGVuZHMgb24gc3RhdGljIHZzIGR5bmFtaWMgcm91dGVzOlxuICAgKiAgICAgLSBTdGF0aWMgcm91dGVzOiBmdWxseSBwcmVmZXRjaGVkXG4gICAqICAgICAtIER5bmFtaWMgcm91dGVzOiBwYXJ0aWFsIHByZWZldGNoIHRvIHRoZSBuZWFyZXN0IHNlZ21lbnQgd2l0aCBhIGBsb2FkaW5nLmpzYFxuICAgKiAgIC0gYHRydWVgOiBBbHdheXMgcHJlZmV0Y2ggdGhlIGZ1bGwgcm91dGUgYW5kIGRhdGEuXG4gICAqICAgLSBgZmFsc2VgOiBEaXNhYmxlIHByZWZldGNoaW5nIG9uIGJvdGggdmlld3BvcnQgYW5kIGhvdmVyLlxuICAgKiAtIEluIHRoZSAqKlBhZ2VzIFJvdXRlcioqOlxuICAgKiAgIC0gYHRydWVgIChkZWZhdWx0KTogUHJlZmV0Y2hlcyB0aGUgcm91dGUgYW5kIGRhdGEgaW4gdGhlIGJhY2tncm91bmQgb24gdmlld3BvcnQgb3IgaG92ZXIuXG4gICAqICAgLSBgZmFsc2VgOiBQcmVmZXRjaCBvbmx5IG9uIGhvdmVyLCBub3Qgb24gdmlld3BvcnQuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYHRydWVgIChQYWdlcyBSb3V0ZXIpIG9yIGBudWxsYCAoQXBwIFJvdXRlcilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHN4XG4gICAqIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgcHJlZmV0Y2g9e2ZhbHNlfT5cbiAgICogICBEYXNoYm9hcmRcbiAgICogPC9MaW5rPlxuICAgKiBgYGBcbiAgICovXG4gIHByZWZldGNoPzogYm9vbGVhbiB8ICdhdXRvJyB8IG51bGxcblxuICAvKipcbiAgICogKHVuc3RhYmxlKSBTd2l0Y2ggdG8gYSBmdWxsIHByZWZldGNoIG9uIGhvdmVyLiBFZmZlY3RpdmVseSB0aGUgc2FtZSBhc1xuICAgKiB1cGRhdGluZyB0aGUgcHJlZmV0Y2ggcHJvcCB0byBgdHJ1ZWAgaW4gYSBtb3VzZSBldmVudC5cbiAgICovXG4gIHVuc3RhYmxlX2R5bmFtaWNPbkhvdmVyPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBUaGUgYWN0aXZlIGxvY2FsZSBpcyBhdXRvbWF0aWNhbGx5IHByZXBlbmRlZCBpbiB0aGUgUGFnZXMgUm91dGVyLiBgbG9jYWxlYCBhbGxvd3MgZm9yIHByb3ZpZGluZ1xuICAgKiBhIGRpZmZlcmVudCBsb2NhbGUsIG9yIGNhbiBiZSBzZXQgdG8gYGZhbHNlYCB0byBvcHQgb3V0IG9mIGF1dG9tYXRpYyBsb2NhbGUgYmVoYXZpb3IuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE5vdGU6IGxvY2FsZSBvbmx5IGFwcGxpZXMgaW4gdGhlIFBhZ2VzIFJvdXRlciBhbmQgaXMgaWdub3JlZCBpbiB0aGUgQXBwIFJvdXRlci5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHN4XG4gICAqIC8vIFVzZSB0aGUgJ2ZyJyBsb2NhbGU6XG4gICAqIDxMaW5rIGhyZWY9XCIvYWJvdXRcIiBsb2NhbGU9XCJmclwiPlxuICAgKiAgIEFib3V0IChGcmVuY2gpXG4gICAqIDwvTGluaz5cbiAgICpcbiAgICogLy8gRGlzYWJsZSBsb2NhbGUgcHJlZml4OlxuICAgKiA8TGluayBocmVmPVwiL2Fib3V0XCIgbG9jYWxlPXtmYWxzZX0+XG4gICAqICAgQWJvdXQgKG5vIGxvY2FsZSBwcmVmaXgpXG4gICAqIDwvTGluaz5cbiAgICogYGBgXG4gICAqL1xuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxuXG4gIC8qKlxuICAgKiBFbmFibGUgbGVnYWN5IGxpbmsgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb25cbiAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2NvbW1pdC80ODllNjVlZDk4NTQ0ZTY5YjBhZmQ3ZTBjZmMzZjlmNmMyYjgwM2I3XG4gICAqL1xuICBsZWdhY3lCZWhhdmlvcj86IGJvb2xlYW5cblxuICAvKipcbiAgICogT3B0aW9uYWwgZXZlbnQgaGFuZGxlciBmb3Igd2hlbiB0aGUgbW91c2UgcG9pbnRlciBpcyBtb3ZlZCBvbnRvIHRoZSBgPExpbms+YC5cbiAgICovXG4gIG9uTW91c2VFbnRlcj86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxBbmNob3JFbGVtZW50PlxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBldmVudCBoYW5kbGVyIGZvciB3aGVuIHRoZSBgPExpbms+YCBpcyB0b3VjaGVkLlxuICAgKi9cbiAgb25Ub3VjaFN0YXJ0PzogUmVhY3QuVG91Y2hFdmVudEhhbmRsZXI8SFRNTEFuY2hvckVsZW1lbnQ+XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGV2ZW50IGhhbmRsZXIgZm9yIHdoZW4gdGhlIGA8TGluaz5gIGlzIGNsaWNrZWQuXG4gICAqL1xuICBvbkNsaWNrPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8SFRNTEFuY2hvckVsZW1lbnQ+XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGV2ZW50IGhhbmRsZXIgZm9yIHdoZW4gdGhlIGA8TGluaz5gIGlzIG5hdmlnYXRlZC5cbiAgICovXG4gIG9uTmF2aWdhdGU/OiBPbk5hdmlnYXRlRXZlbnRIYW5kbGVyXG59XG5cbi8vIFRPRE8tQVBQOiBJbmNsdWRlIHRoZSBmdWxsIHNldCBvZiBBbmNob3IgcHJvcHNcbi8vIGFkZGluZyB0aGlzIHRvIHRoZSBwdWJsaWNseSBleHBvcnRlZCB0eXBlIGN1cnJlbnRseSBicmVha3MgZXhpc3RpbmcgYXBwc1xuXG4vLyBgUm91dGVJbmZlclR5cGVgIGlzIGEgc3R1YiBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIGB0eXBlZFJvdXRlc2Agd2hlbiB0aGUgdHlwZVxuLy8gaXNuJ3QgZ2VuZXJhdGVkIHlldC4gSXQgd2lsbCBiZSByZXBsYWNlZCB3aGVuIHR5cGUgZ2VuZXJhdGlvbiBydW5zLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IHR5cGUgTGlua1Byb3BzPFJvdXRlSW5mZXJUeXBlID0gYW55PiA9IEludGVybmFsTGlua1Byb3BzXG50eXBlIExpbmtQcm9wc1JlcXVpcmVkID0gUmVxdWlyZWRLZXlzPExpbmtQcm9wcz5cbnR5cGUgTGlua1Byb3BzT3B0aW9uYWwgPSBPcHRpb25hbEtleXM8T21pdDxJbnRlcm5hbExpbmtQcm9wcywgJ2xvY2FsZSc+PlxuXG5mdW5jdGlvbiBpc01vZGlmaWVkRXZlbnQoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxBbmNob3JFbGVtZW50IHwgU1ZHQUVsZW1lbnRcbiAgY29uc3QgdGFyZ2V0ID0gZXZlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKVxuICByZXR1cm4gKFxuICAgICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSAnX3NlbGYnKSB8fFxuICAgIGV2ZW50Lm1ldGFLZXkgfHxcbiAgICBldmVudC5jdHJsS2V5IHx8XG4gICAgZXZlbnQuc2hpZnRLZXkgfHxcbiAgICBldmVudC5hbHRLZXkgfHwgLy8gdHJpZ2dlcnMgcmVzb3VyY2UgZG93bmxvYWRcbiAgICAoZXZlbnQubmF0aXZlRXZlbnQgJiYgZXZlbnQubmF0aXZlRXZlbnQud2hpY2ggPT09IDIpXG4gIClcbn1cblxuZnVuY3Rpb24gbGlua0NsaWNrZWQoXG4gIGU6IFJlYWN0Lk1vdXNlRXZlbnQsXG4gIGhyZWY6IHN0cmluZyxcbiAgYXM6IHN0cmluZyxcbiAgbGlua0luc3RhbmNlUmVmOiBSZWFjdC5SZWZPYmplY3Q8TGlua0luc3RhbmNlIHwgbnVsbD4sXG4gIHJlcGxhY2U/OiBib29sZWFuLFxuICBzY3JvbGw/OiBib29sZWFuLFxuICBvbk5hdmlnYXRlPzogT25OYXZpZ2F0ZUV2ZW50SGFuZGxlclxuKTogdm9pZCB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHsgbm9kZU5hbWUgfSA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgLy8gYW5jaG9ycyBpbnNpZGUgYW4gc3ZnIGhhdmUgYSBsb3dlcmNhc2Ugbm9kZU5hbWVcbiAgICBjb25zdCBpc0FuY2hvck5vZGVOYW1lID0gbm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0EnXG4gICAgaWYgKFxuICAgICAgKGlzQW5jaG9yTm9kZU5hbWUgJiYgaXNNb2RpZmllZEV2ZW50KGUpKSB8fFxuICAgICAgZS5jdXJyZW50VGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZG93bmxvYWQnKVxuICAgICkge1xuICAgICAgLy8gaWdub3JlIGNsaWNrIGZvciBicm93c2Vy4oCZcyBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzTG9jYWxVUkwoaHJlZikpIHtcbiAgICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICAgIC8vIGJyb3dzZXIgZGVmYXVsdCBiZWhhdmlvciBkb2VzIG5vdCByZXBsYWNlIHRoZSBoaXN0b3J5IHN0YXRlXG4gICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gZG8gaXQgbWFudWFsbHlcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoaHJlZilcbiAgICAgIH1cblxuICAgICAgLy8gaWdub3JlIGNsaWNrIGZvciBicm93c2Vy4oCZcyBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIGlmIChvbk5hdmlnYXRlKSB7XG4gICAgICBsZXQgaXNEZWZhdWx0UHJldmVudGVkID0gZmFsc2VcblxuICAgICAgb25OYXZpZ2F0ZSh7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7XG4gICAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKGlzRGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IGRpc3BhdGNoTmF2aWdhdGVBY3Rpb24gfSA9XG4gICAgICByZXF1aXJlKCcuLi9jb21wb25lbnRzL2FwcC1yb3V0ZXItaW5zdGFuY2UnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9jb21wb25lbnRzL2FwcC1yb3V0ZXItaW5zdGFuY2UnKVxuXG4gICAgUmVhY3Quc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoTmF2aWdhdGVBY3Rpb24oXG4gICAgICAgIGFzIHx8IGhyZWYsXG4gICAgICAgIHJlcGxhY2UgPyAncmVwbGFjZScgOiAncHVzaCcsXG4gICAgICAgIHNjcm9sbCA/PyB0cnVlLFxuICAgICAgICBsaW5rSW5zdGFuY2VSZWYuY3VycmVudFxuICAgICAgKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0U3RyaW5nT3JVcmwodXJsT2JqT3JTdHJpbmc6IFVybE9iamVjdCB8IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdXJsT2JqT3JTdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVybE9iak9yU3RyaW5nXG4gIH1cblxuICByZXR1cm4gZm9ybWF0VXJsKHVybE9iak9yU3RyaW5nKVxufVxuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRoYXQgZXh0ZW5kcyB0aGUgSFRNTCBgPGE+YCBlbGVtZW50IHRvIHByb3ZpZGVcbiAqIFtwcmVmZXRjaGluZ10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9saW5raW5nLWFuZC1uYXZpZ2F0aW5nIzItcHJlZmV0Y2hpbmcpXG4gKiBhbmQgY2xpZW50LXNpZGUgbmF2aWdhdGlvbi4gVGhpcyBpcyB0aGUgcHJpbWFyeSB3YXkgdG8gbmF2aWdhdGUgYmV0d2VlbiByb3V0ZXMgaW4gTmV4dC5qcy5cbiAqXG4gKiBAcmVtYXJrc1xuICogLSBQcmVmZXRjaGluZyBpcyBvbmx5IGVuYWJsZWQgaW4gcHJvZHVjdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2NvbXBvbmVudHMvbGlua1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMaW5rQ29tcG9uZW50KFxuICBwcm9wczogTGlua1Byb3BzICYge1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgICByZWY6IFJlYWN0LlJlZjxIVE1MQW5jaG9yRWxlbWVudD5cbiAgfVxuKSB7XG4gIGNvbnN0IFtsaW5rU3RhdHVzLCBzZXRPcHRpbWlzdGljTGlua1N0YXR1c10gPSB1c2VPcHRpbWlzdGljKElETEVfTElOS19TVEFUVVMpXG5cbiAgbGV0IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcblxuICBjb25zdCBsaW5rSW5zdGFuY2VSZWYgPSB1c2VSZWY8TGlua0luc3RhbmNlIHwgbnVsbD4obnVsbClcblxuICBjb25zdCB7XG4gICAgaHJlZjogaHJlZlByb3AsXG4gICAgYXM6IGFzUHJvcCxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLFxuICAgIHByZWZldGNoOiBwcmVmZXRjaFByb3AgPSBudWxsLFxuICAgIHBhc3NIcmVmLFxuICAgIHJlcGxhY2UsXG4gICAgc2hhbGxvdyxcbiAgICBzY3JvbGwsXG4gICAgb25DbGljayxcbiAgICBvbk1vdXNlRW50ZXI6IG9uTW91c2VFbnRlclByb3AsXG4gICAgb25Ub3VjaFN0YXJ0OiBvblRvdWNoU3RhcnRQcm9wLFxuICAgIGxlZ2FjeUJlaGF2aW9yID0gZmFsc2UsXG4gICAgb25OYXZpZ2F0ZSxcbiAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICB1bnN0YWJsZV9keW5hbWljT25Ib3ZlcixcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzXG5cbiAgY2hpbGRyZW4gPSBjaGlsZHJlblByb3BcblxuICBpZiAoXG4gICAgbGVnYWN5QmVoYXZpb3IgJiZcbiAgICAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGRyZW4gPT09ICdudW1iZXInKVxuICApIHtcbiAgICBjaGlsZHJlbiA9IDxhPntjaGlsZHJlbn08L2E+XG4gIH1cblxuICBjb25zdCByb3V0ZXIgPSBSZWFjdC51c2VDb250ZXh0KEFwcFJvdXRlckNvbnRleHQpXG5cbiAgY29uc3QgcHJlZmV0Y2hFbmFibGVkID0gcHJlZmV0Y2hQcm9wICE9PSBmYWxzZVxuXG4gIGNvbnN0IGZldGNoU3RyYXRlZ3kgPVxuICAgIHByZWZldGNoUHJvcCAhPT0gZmFsc2VcbiAgICAgID8gZ2V0RmV0Y2hTdHJhdGVneUZyb21QcmVmZXRjaFByb3AocHJlZmV0Y2hQcm9wKVxuICAgICAgOiAvLyBUT0RPOiBpdCBtYWtlcyBubyBzZW5zZSB0byBhc3NpZ24gYSBmZXRjaFN0cmF0ZWd5IHdoZW4gcHJlZmV0Y2hpbmcgaXMgZGlzYWJsZWQuXG4gICAgICAgIEZldGNoU3RyYXRlZ3kuUFBSXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGVQcm9wRXJyb3IoYXJnczoge1xuICAgICAga2V5OiBzdHJpbmdcbiAgICAgIGV4cGVjdGVkOiBzdHJpbmdcbiAgICAgIGFjdHVhbDogc3RyaW5nXG4gICAgfSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCBwcm9wIHR5cGU6IFRoZSBwcm9wIFxcYCR7YXJncy5rZXl9XFxgIGV4cGVjdHMgYSAke2FyZ3MuZXhwZWN0ZWR9IGluIFxcYDxMaW5rPlxcYCwgYnV0IGdvdCBcXGAke2FyZ3MuYWN0dWFsfVxcYCBpbnN0ZWFkLmAgK1xuICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBcIlxcbk9wZW4geW91ciBicm93c2VyJ3MgY29uc29sZSB0byB2aWV3IHRoZSBDb21wb25lbnQgc3RhY2sgdHJhY2UuXCJcbiAgICAgICAgICAgIDogJycpXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcbiAgICBjb25zdCByZXF1aXJlZFByb3BzR3VhcmQ6IFJlY29yZDxMaW5rUHJvcHNSZXF1aXJlZCwgdHJ1ZT4gPSB7XG4gICAgICBocmVmOiB0cnVlLFxuICAgIH0gYXMgY29uc3RcbiAgICBjb25zdCByZXF1aXJlZFByb3BzOiBMaW5rUHJvcHNSZXF1aXJlZFtdID0gT2JqZWN0LmtleXMoXG4gICAgICByZXF1aXJlZFByb3BzR3VhcmRcbiAgICApIGFzIExpbmtQcm9wc1JlcXVpcmVkW11cbiAgICByZXF1aXJlZFByb3BzLmZvckVhY2goKGtleTogTGlua1Byb3BzUmVxdWlyZWQpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdocmVmJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcHNba2V5XSA9PSBudWxsIHx8XG4gICAgICAgICAgKHR5cGVvZiBwcm9wc1trZXldICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcHJvcHNba2V5XSAhPT0gJ29iamVjdCcpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2BzdHJpbmdgIG9yIGBvYmplY3RgJyxcbiAgICAgICAgICAgIGFjdHVhbDogcHJvcHNba2V5XSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBwcm9wc1trZXldLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQgdHJpY2sgZm9yIHR5cGUtZ3VhcmRpbmc6XG4gICAgICAgIGNvbnN0IF86IG5ldmVyID0ga2V5XG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIFR5cGVTY3JpcHQgdHJpY2sgZm9yIHR5cGUtZ3VhcmRpbmc6XG4gICAgY29uc3Qgb3B0aW9uYWxQcm9wc0d1YXJkOiBSZWNvcmQ8TGlua1Byb3BzT3B0aW9uYWwsIHRydWU+ID0ge1xuICAgICAgYXM6IHRydWUsXG4gICAgICByZXBsYWNlOiB0cnVlLFxuICAgICAgc2Nyb2xsOiB0cnVlLFxuICAgICAgc2hhbGxvdzogdHJ1ZSxcbiAgICAgIHBhc3NIcmVmOiB0cnVlLFxuICAgICAgcHJlZmV0Y2g6IHRydWUsXG4gICAgICB1bnN0YWJsZV9keW5hbWljT25Ib3ZlcjogdHJ1ZSxcbiAgICAgIG9uQ2xpY2s6IHRydWUsXG4gICAgICBvbk1vdXNlRW50ZXI6IHRydWUsXG4gICAgICBvblRvdWNoU3RhcnQ6IHRydWUsXG4gICAgICBsZWdhY3lCZWhhdmlvcjogdHJ1ZSxcbiAgICAgIG9uTmF2aWdhdGU6IHRydWUsXG4gICAgfSBhcyBjb25zdFxuICAgIGNvbnN0IG9wdGlvbmFsUHJvcHM6IExpbmtQcm9wc09wdGlvbmFsW10gPSBPYmplY3Qua2V5cyhcbiAgICAgIG9wdGlvbmFsUHJvcHNHdWFyZFxuICAgICkgYXMgTGlua1Byb3BzT3B0aW9uYWxbXVxuICAgIG9wdGlvbmFsUHJvcHMuZm9yRWFjaCgoa2V5OiBMaW5rUHJvcHNPcHRpb25hbCkgPT4ge1xuICAgICAgY29uc3QgdmFsVHlwZSA9IHR5cGVvZiBwcm9wc1trZXldXG5cbiAgICAgIGlmIChrZXkgPT09ICdhcycpIHtcbiAgICAgICAgaWYgKHByb3BzW2tleV0gJiYgdmFsVHlwZSAhPT0gJ3N0cmluZycgJiYgdmFsVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVQcm9wRXJyb3Ioe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZXhwZWN0ZWQ6ICdgc3RyaW5nYCBvciBgb2JqZWN0YCcsXG4gICAgICAgICAgICBhY3R1YWw6IHZhbFR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAga2V5ID09PSAnb25DbGljaycgfHxcbiAgICAgICAga2V5ID09PSAnb25Nb3VzZUVudGVyJyB8fFxuICAgICAgICBrZXkgPT09ICdvblRvdWNoU3RhcnQnIHx8XG4gICAgICAgIGtleSA9PT0gJ29uTmF2aWdhdGUnXG4gICAgICApIHtcbiAgICAgICAgaWYgKHByb3BzW2tleV0gJiYgdmFsVHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2BmdW5jdGlvbmAnLFxuICAgICAgICAgICAgYWN0dWFsOiB2YWxUeXBlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGtleSA9PT0gJ3JlcGxhY2UnIHx8XG4gICAgICAgIGtleSA9PT0gJ3Njcm9sbCcgfHxcbiAgICAgICAga2V5ID09PSAnc2hhbGxvdycgfHxcbiAgICAgICAga2V5ID09PSAncGFzc0hyZWYnIHx8XG4gICAgICAgIGtleSA9PT0gJ2xlZ2FjeUJlaGF2aW9yJyB8fFxuICAgICAgICBrZXkgPT09ICd1bnN0YWJsZV9keW5hbWljT25Ib3ZlcidcbiAgICAgICkge1xuICAgICAgICBpZiAocHJvcHNba2V5XSAhPSBudWxsICYmIHZhbFR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2Bib29sZWFuYCcsXG4gICAgICAgICAgICBhY3R1YWw6IHZhbFR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwcmVmZXRjaCcpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BzW2tleV0gIT0gbnVsbCAmJlxuICAgICAgICAgIHZhbFR5cGUgIT09ICdib29sZWFuJyAmJlxuICAgICAgICAgIHByb3BzW2tleV0gIT09ICdhdXRvJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVQcm9wRXJyb3Ioe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZXhwZWN0ZWQ6ICdgYm9vbGVhbiB8IFwiYXV0b1wiYCcsXG4gICAgICAgICAgICBhY3R1YWw6IHZhbFR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcbiAgICAgICAgY29uc3QgXzogbmV2ZXIgPSBrZXlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAocHJvcHMubG9jYWxlKSB7XG4gICAgICB3YXJuT25jZShcbiAgICAgICAgJ1RoZSBgbG9jYWxlYCBwcm9wIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYG5leHQvbGlua2Agd2hpbGUgdXNpbmcgdGhlIGBhcHBgIHJvdXRlci4gUmVhZCBtb3JlIGFib3V0IGFwcCByb3V0ZXIgaW50ZXJuYWxpemF0aW9uOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL2ludGVybmF0aW9uYWxpemF0aW9uJ1xuICAgICAgKVxuICAgIH1cbiAgICBpZiAoIWFzUHJvcCkge1xuICAgICAgbGV0IGhyZWY6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHR5cGVvZiBocmVmUHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaHJlZiA9IGhyZWZQcm9wXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgaHJlZlByb3AgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBocmVmUHJvcC5wYXRobmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICkge1xuICAgICAgICBocmVmID0gaHJlZlByb3AucGF0aG5hbWVcbiAgICAgIH1cblxuICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgY29uc3QgaGFzRHluYW1pY1NlZ21lbnQgPSBocmVmXG4gICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAuc29tZSgoc2VnbWVudCkgPT4gc2VnbWVudC5zdGFydHNXaXRoKCdbJykgJiYgc2VnbWVudC5lbmRzV2l0aCgnXScpKVxuXG4gICAgICAgIGlmIChoYXNEeW5hbWljU2VnbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBEeW5hbWljIGhyZWYgXFxgJHtocmVmfVxcYCBmb3VuZCBpbiA8TGluaz4gd2hpbGUgdXNpbmcgdGhlIFxcYC9hcHBcXGAgcm91dGVyLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvYXBwLWRpci1keW5hbWljLWhyZWZgXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBocmVmLCBhcyB9ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRIcmVmID0gZm9ybWF0U3RyaW5nT3JVcmwoaHJlZlByb3ApXG4gICAgcmV0dXJuIHtcbiAgICAgIGhyZWY6IHJlc29sdmVkSHJlZixcbiAgICAgIGFzOiBhc1Byb3AgPyBmb3JtYXRTdHJpbmdPclVybChhc1Byb3ApIDogcmVzb2x2ZWRIcmVmLFxuICAgIH1cbiAgfSwgW2hyZWZQcm9wLCBhc1Byb3BdKVxuXG4gIC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIGZpcnN0IGNoaWxkLCBpZiBtdWx0aXBsZSBhcmUgcHJvdmlkZWQgaXQgd2lsbCB0aHJvdyBhbiBlcnJvclxuICBsZXQgY2hpbGQ6IGFueVxuICBpZiAobGVnYWN5QmVoYXZpb3IpIHtcbiAgICBpZiAoKGNoaWxkcmVuIGFzIGFueSk/LiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFxcYDxMaW5rIGxlZ2FjeUJlaGF2aW9yPlxcYCByZWNlaXZlZCBhIGRpcmVjdCBjaGlsZCB0aGF0IGlzIGVpdGhlciBhIFNlcnZlciBDb21wb25lbnQsIG9yIEpTWCB0aGF0IHdhcyBsb2FkZWQgd2l0aCBSZWFjdC5sYXp5KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gRWl0aGVyIHJlbW92ZSBsZWdhY3lCZWhhdmlvciwgb3IgbWFrZSB0aGUgZGlyZWN0IGNoaWxkIGEgQ2xpZW50IENvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIExpbmsncyBcXGA8YT5cXGAgdGFnLmBcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgXCJvbkNsaWNrXCIgd2FzIHBhc3NlZCB0byA8TGluaz4gd2l0aCBcXGBocmVmXFxgIG9mIFxcYCR7aHJlZlByb3B9XFxgIGJ1dCBcImxlZ2FjeUJlaGF2aW9yXCIgd2FzIHNldC4gVGhlIGxlZ2FjeSBiZWhhdmlvciByZXF1aXJlcyBvbkNsaWNrIGJlIHNldCBvbiB0aGUgY2hpbGQgb2YgbmV4dC9saW5rYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAob25Nb3VzZUVudGVyUHJvcCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFwib25Nb3VzZUVudGVyXCIgd2FzIHBhc3NlZCB0byA8TGluaz4gd2l0aCBcXGBocmVmXFxgIG9mIFxcYCR7aHJlZlByb3B9XFxgIGJ1dCBcImxlZ2FjeUJlaGF2aW9yXCIgd2FzIHNldC4gVGhlIGxlZ2FjeSBiZWhhdmlvciByZXF1aXJlcyBvbk1vdXNlRW50ZXIgYmUgc2V0IG9uIHRoZSBjaGlsZCBvZiBuZXh0L2xpbmtgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbilcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYE5vIGNoaWxkcmVuIHdlcmUgcGFzc2VkIHRvIDxMaW5rPiB3aXRoIFxcYGhyZWZcXGAgb2YgXFxgJHtocmVmUHJvcH1cXGAgYnV0IG9uZSBjaGlsZCBpcyByZXF1aXJlZCBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9saW5rLW5vLWNoaWxkcmVuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE11bHRpcGxlIGNoaWxkcmVuIHdlcmUgcGFzc2VkIHRvIDxMaW5rPiB3aXRoIFxcYGhyZWZcXGAgb2YgXFxgJHtocmVmUHJvcH1cXGAgYnV0IG9ubHkgb25lIGNoaWxkIGlzIHN1cHBvcnRlZCBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9saW5rLW11bHRpcGxlLWNoaWxkcmVuYCArXG4gICAgICAgICAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgPyBcIiBcXG5PcGVuIHlvdXIgYnJvd3NlcidzIGNvbnNvbGUgdG8gdmlldyB0aGUgQ29tcG9uZW50IHN0YWNrIHRyYWNlLlwiXG4gICAgICAgICAgICAgIDogJycpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGlmICgoY2hpbGRyZW4gYXMgYW55KT8udHlwZSA9PT0gJ2EnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCA8TGluaz4gd2l0aCA8YT4gY2hpbGQuIFBsZWFzZSByZW1vdmUgPGE+IG9yIHVzZSA8TGluayBsZWdhY3lCZWhhdmlvcj4uXFxuTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvaW52YWxpZC1uZXctbGluay13aXRoLWV4dHJhLWFuY2hvcidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoaWxkUmVmOiBhbnkgPSBsZWdhY3lCZWhhdmlvclxuICAgID8gY2hpbGQgJiYgdHlwZW9mIGNoaWxkID09PSAnb2JqZWN0JyAmJiBjaGlsZC5yZWZcbiAgICA6IGZvcndhcmRlZFJlZlxuXG4gIC8vIFVzZSBhIGNhbGxiYWNrIHJlZiB0byBhdHRhY2ggYW4gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gdGhlIGFuY2hvciB0YWcgb25cbiAgLy8gbW91bnQuIEluIHRoZSBmdXR1cmUgd2Ugd2lsbCBhbHNvIHVzZSB0aGlzIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHRoZVxuICAvLyBjdXJyZW50bHkgbW91bnRlZCA8TGluaz4gaW5zdGFuY2VzLCBlLmcuIHNvIHdlIGNhbiByZS1wcmVmZXRjaCB0aGVtIGFmdGVyXG4gIC8vIGEgcmV2YWxpZGF0aW9uIG9yIHJlZnJlc2guXG4gIGNvbnN0IG9ic2VydmVMaW5rVmlzaWJpbGl0eU9uTW91bnQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZWxlbWVudDogSFRNTEFuY2hvckVsZW1lbnQgfCBTVkdBRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHJvdXRlciAhPT0gbnVsbCkge1xuICAgICAgICBsaW5rSW5zdGFuY2VSZWYuY3VycmVudCA9IG1vdW50TGlua0luc3RhbmNlKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICByb3V0ZXIsXG4gICAgICAgICAgZmV0Y2hTdHJhdGVneSxcbiAgICAgICAgICBwcmVmZXRjaEVuYWJsZWQsXG4gICAgICAgICAgc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAobGlua0luc3RhbmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICB1bm1vdW50TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uKGxpbmtJbnN0YW5jZVJlZi5jdXJyZW50KVxuICAgICAgICAgIGxpbmtJbnN0YW5jZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHVubW91bnRQcmVmZXRjaGFibGVJbnN0YW5jZShlbGVtZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3ByZWZldGNoRW5hYmxlZCwgaHJlZiwgcm91dGVyLCBmZXRjaFN0cmF0ZWd5LCBzZXRPcHRpbWlzdGljTGlua1N0YXR1c11cbiAgKVxuXG4gIGNvbnN0IG1lcmdlZFJlZiA9IHVzZU1lcmdlZFJlZihvYnNlcnZlTGlua1Zpc2liaWxpdHlPbk1vdW50LCBjaGlsZFJlZilcblxuICBjb25zdCBjaGlsZFByb3BzOiB7XG4gICAgb25Ub3VjaFN0YXJ0PzogUmVhY3QuVG91Y2hFdmVudEhhbmRsZXI8SFRNTEFuY2hvckVsZW1lbnQ+XG4gICAgb25Nb3VzZUVudGVyOiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQW5jaG9yRWxlbWVudD5cbiAgICBvbkNsaWNrOiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQW5jaG9yRWxlbWVudD5cbiAgICBocmVmPzogc3RyaW5nXG4gICAgcmVmPzogYW55XG4gIH0gPSB7XG4gICAgcmVmOiBtZXJnZWRSZWYsXG4gICAgb25DbGljayhlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ29tcG9uZW50IHJlbmRlcmVkIGluc2lkZSBuZXh0L2xpbmsgaGFzIHRvIHBhc3MgY2xpY2sgZXZlbnQgdG8gXCJvbkNsaWNrXCIgcHJvcC5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghbGVnYWN5QmVoYXZpb3IgJiYgdHlwZW9mIG9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25DbGljayhlKVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2FjeUJlaGF2aW9yICYmXG4gICAgICAgIGNoaWxkLnByb3BzICYmXG4gICAgICAgIHR5cGVvZiBjaGlsZC5wcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgY2hpbGQucHJvcHMub25DbGljayhlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJvdXRlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBsaW5rQ2xpY2tlZChlLCBocmVmLCBhcywgbGlua0luc3RhbmNlUmVmLCByZXBsYWNlLCBzY3JvbGwsIG9uTmF2aWdhdGUpXG4gICAgfSxcbiAgICBvbk1vdXNlRW50ZXIoZSkge1xuICAgICAgaWYgKCFsZWdhY3lCZWhhdmlvciAmJiB0eXBlb2Ygb25Nb3VzZUVudGVyUHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbk1vdXNlRW50ZXJQcm9wKGUpXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbGVnYWN5QmVoYXZpb3IgJiZcbiAgICAgICAgY2hpbGQucHJvcHMgJiZcbiAgICAgICAgdHlwZW9mIGNoaWxkLnByb3BzLm9uTW91c2VFbnRlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIGNoaWxkLnByb3BzLm9uTW91c2VFbnRlcihlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJvdXRlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICghcHJlZmV0Y2hFbmFibGVkIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB1cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2ggPSB1bnN0YWJsZV9keW5hbWljT25Ib3ZlciA9PT0gdHJ1ZVxuICAgICAgb25OYXZpZ2F0aW9uSW50ZW50KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnQgfCBTVkdBRWxlbWVudCxcbiAgICAgICAgdXBncmFkZVRvRHluYW1pY1ByZWZldGNoXG4gICAgICApXG4gICAgfSxcbiAgICBvblRvdWNoU3RhcnQ6IHByb2Nlc3MuZW52Ll9fTkVYVF9MSU5LX05PX1RPVUNIX1NUQVJUXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgICAgICAgIGlmICghbGVnYWN5QmVoYXZpb3IgJiYgdHlwZW9mIG9uVG91Y2hTdGFydFByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydFByb3AoZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsZWdhY3lCZWhhdmlvciAmJlxuICAgICAgICAgICAgY2hpbGQucHJvcHMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjaGlsZC5wcm9wcy5vblRvdWNoU3RhcnQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLm9uVG91Y2hTdGFydChlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcm91dGVyKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFwcmVmZXRjaEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHVwZ3JhZGVUb0R5bmFtaWNQcmVmZXRjaCA9IHVuc3RhYmxlX2R5bmFtaWNPbkhvdmVyID09PSB0cnVlXG4gICAgICAgICAgb25OYXZpZ2F0aW9uSW50ZW50KFxuICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxBbmNob3JFbGVtZW50IHwgU1ZHQUVsZW1lbnQsXG4gICAgICAgICAgICB1cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2hcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gIH1cblxuICAvLyBJZiB0aGUgdXJsIGlzIGFic29sdXRlLCB3ZSBjYW4gYnlwYXNzIHRoZSBsb2dpYyB0byBwcmVwZW5kIHRoZSBiYXNlUGF0aC5cbiAgaWYgKGlzQWJzb2x1dGVVcmwoYXMpKSB7XG4gICAgY2hpbGRQcm9wcy5ocmVmID0gYXNcbiAgfSBlbHNlIGlmIChcbiAgICAhbGVnYWN5QmVoYXZpb3IgfHxcbiAgICBwYXNzSHJlZiB8fFxuICAgIChjaGlsZC50eXBlID09PSAnYScgJiYgISgnaHJlZicgaW4gY2hpbGQucHJvcHMpKVxuICApIHtcbiAgICBjaGlsZFByb3BzLmhyZWYgPSBhZGRCYXNlUGF0aChhcylcbiAgfVxuXG4gIGxldCBsaW5rOiBSZWFjdC5SZWFjdE5vZGVcblxuICBpZiAobGVnYWN5QmVoYXZpb3IpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGVycm9yT25jZShcbiAgICAgICAgJ2BsZWdhY3lCZWhhdmlvcmAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlICcgK1xuICAgICAgICAgICdyZWxlYXNlLiBBIGNvZGVtb2QgaXMgYXZhaWxhYmxlIHRvIHVwZ3JhZGUgeW91ciBjb21wb25lbnRzOlxcblxcbicgK1xuICAgICAgICAgICducHggQG5leHQvY29kZW1vZEBsYXRlc3QgbmV3LWxpbmsgLlxcblxcbicgK1xuICAgICAgICAgICdMZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi91cGdyYWRpbmcvY29kZW1vZHMjcmVtb3ZlLWEtdGFncy1mcm9tLWxpbmstY29tcG9uZW50cydcbiAgICAgIClcbiAgICB9XG4gICAgbGluayA9IFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgY2hpbGRQcm9wcylcbiAgfSBlbHNlIHtcbiAgICBsaW5rID0gKFxuICAgICAgPGEgey4uLnJlc3RQcm9wc30gey4uLmNoaWxkUHJvcHN9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2E+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8TGlua1N0YXR1c0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2xpbmtTdGF0dXN9PlxuICAgICAge2xpbmt9XG4gICAgPC9MaW5rU3RhdHVzQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuXG5jb25zdCBMaW5rU3RhdHVzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8XG4gIHR5cGVvZiBQRU5ESU5HX0xJTktfU1RBVFVTIHwgdHlwZW9mIElETEVfTElOS19TVEFUVVNcbj4oSURMRV9MSU5LX1NUQVRVUylcblxuZXhwb3J0IGNvbnN0IHVzZUxpbmtTdGF0dXMgPSAoKSA9PiB7XG4gIHJldHVybiB1c2VDb250ZXh0KExpbmtTdGF0dXNDb250ZXh0KVxufVxuXG5mdW5jdGlvbiBnZXRGZXRjaFN0cmF0ZWd5RnJvbVByZWZldGNoUHJvcChcbiAgcHJlZmV0Y2hQcm9wOiBFeGNsdWRlPExpbmtQcm9wc1sncHJlZmV0Y2gnXSwgdW5kZWZpbmVkIHwgZmFsc2U+XG4pOiBQcmVmZXRjaFRhc2tGZXRjaFN0cmF0ZWd5IHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DQUNIRV9DT01QT05FTlRTKSB7XG4gICAgaWYgKHByZWZldGNoUHJvcCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIEZldGNoU3RyYXRlZ3kuRnVsbFxuICAgIH1cblxuICAgIC8vIGBudWxsYCBvciBgXCJhdXRvXCJgOiB0aGlzIGlzIHRoZSBkZWZhdWx0IFwiYXV0b1wiIG1vZGUsIHdoZXJlIHdlIHdpbGwgcHJlZmV0Y2ggcGFydGlhbGx5IGlmIHRoZSBsaW5rIGlzIGluIHRoZSB2aWV3cG9ydC5cbiAgICAvLyBUaGlzIHdpbGwgYWxzbyBpbmNsdWRlIGludmFsaWQgcHJvcCB2YWx1ZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgdHlwZXMgc3BlY2lmaWVkIGhlcmUuXG4gICAgLy8gKGFsdGhvdWdoIHRob3NlIHNob3VsZCd2ZSBiZWVuIGZpbHRlcmVkIG91dCBieSBwcm9wIHZhbGlkYXRpb24gaW4gZGV2KVxuICAgIHByZWZldGNoUHJvcCBzYXRpc2ZpZXMgbnVsbCB8ICdhdXRvJ1xuICAgIHJldHVybiBGZXRjaFN0cmF0ZWd5LlBQUlxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmVmZXRjaFByb3AgPT09IG51bGwgfHwgcHJlZmV0Y2hQcm9wID09PSAnYXV0bydcbiAgICAgID8gLy8gV2UgZGVmYXVsdCB0byBQUFIsIGFuZCB3ZSdsbCBkaXNjb3ZlciB3aGV0aGVyIG9yIG5vdCB0aGUgcm91dGUgc3VwcG9ydHMgaXQgd2l0aCB0aGUgaW5pdGlhbCBwcmVmZXRjaC5cbiAgICAgICAgRmV0Y2hTdHJhdGVneS5QUFJcbiAgICAgIDogLy8gSW4gdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHJ1bnRpbWUgcHJlZmV0Y2hlcywgYHByZWZldGNoPXt0cnVlfWAgZm9yY2VzIGFsbCBkeW5hbWljIGRhdGEgdG8gYmUgcHJlZmV0Y2hlZC5cbiAgICAgICAgLy8gVG8gcHJlc2VydmUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIGFueXRoaW5nIG90aGVyIHRoYW4gYGZhbHNlYCwgYG51bGxgLCBvciBgXCJhdXRvXCJgIHJlc3VsdHMgaW4gYSBmdWxsIHByZWZldGNoLlxuICAgICAgICAvLyAoYWx0aG91Z2ggaW52YWxpZCB2YWx1ZXMgc2hvdWxkJ3ZlIGJlZW4gZmlsdGVyZWQgb3V0IGJ5IHByb3AgdmFsaWRhdGlvbiBpbiBkZXYpXG4gICAgICAgIEZldGNoU3RyYXRlZ3kuRnVsbFxuICB9XG59XG4iXSwibmFtZXMiOlsiTGlua0NvbXBvbmVudCIsInVzZUxpbmtTdGF0dXMiLCJpc01vZGlmaWVkRXZlbnQiLCJldmVudCIsImV2ZW50VGFyZ2V0IiwiY3VycmVudFRhcmdldCIsInRhcmdldCIsImdldEF0dHJpYnV0ZSIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJhbHRLZXkiLCJuYXRpdmVFdmVudCIsIndoaWNoIiwibGlua0NsaWNrZWQiLCJlIiwiaHJlZiIsImFzIiwibGlua0luc3RhbmNlUmVmIiwicmVwbGFjZSIsInNjcm9sbCIsIm9uTmF2aWdhdGUiLCJ3aW5kb3ciLCJub2RlTmFtZSIsImlzQW5jaG9yTm9kZU5hbWUiLCJ0b1VwcGVyQ2FzZSIsImhhc0F0dHJpYnV0ZSIsImlzTG9jYWxVUkwiLCJwcmV2ZW50RGVmYXVsdCIsImxvY2F0aW9uIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZGlzcGF0Y2hOYXZpZ2F0ZUFjdGlvbiIsInJlcXVpcmUiLCJSZWFjdCIsInN0YXJ0VHJhbnNpdGlvbiIsImN1cnJlbnQiLCJmb3JtYXRTdHJpbmdPclVybCIsInVybE9iak9yU3RyaW5nIiwiZm9ybWF0VXJsIiwicHJvcHMiLCJsaW5rU3RhdHVzIiwic2V0T3B0aW1pc3RpY0xpbmtTdGF0dXMiLCJ1c2VPcHRpbWlzdGljIiwiSURMRV9MSU5LX1NUQVRVUyIsImNoaWxkcmVuIiwidXNlUmVmIiwiaHJlZlByb3AiLCJhc1Byb3AiLCJjaGlsZHJlblByb3AiLCJwcmVmZXRjaCIsInByZWZldGNoUHJvcCIsInBhc3NIcmVmIiwic2hhbGxvdyIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlRW50ZXJQcm9wIiwib25Ub3VjaFN0YXJ0Iiwib25Ub3VjaFN0YXJ0UHJvcCIsImxlZ2FjeUJlaGF2aW9yIiwicmVmIiwiZm9yd2FyZGVkUmVmIiwidW5zdGFibGVfZHluYW1pY09uSG92ZXIiLCJyZXN0UHJvcHMiLCJhIiwicm91dGVyIiwidXNlQ29udGV4dCIsIkFwcFJvdXRlckNvbnRleHQiLCJwcmVmZXRjaEVuYWJsZWQiLCJmZXRjaFN0cmF0ZWd5IiwiZ2V0RmV0Y2hTdHJhdGVneUZyb21QcmVmZXRjaFByb3AiLCJGZXRjaFN0cmF0ZWd5IiwiUFBSIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY3JlYXRlUHJvcEVycm9yIiwiYXJncyIsIkVycm9yIiwia2V5IiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJyZXF1aXJlZFByb3BzR3VhcmQiLCJyZXF1aXJlZFByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJfIiwib3B0aW9uYWxQcm9wc0d1YXJkIiwib3B0aW9uYWxQcm9wcyIsInZhbFR5cGUiLCJsb2NhbGUiLCJ3YXJuT25jZSIsInBhdGhuYW1lIiwiaGFzRHluYW1pY1NlZ21lbnQiLCJzcGxpdCIsInNvbWUiLCJzZWdtZW50Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwidXNlTWVtbyIsInJlc29sdmVkSHJlZiIsImNoaWxkIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb25zb2xlIiwid2FybiIsIkNoaWxkcmVuIiwib25seSIsImVyciIsInR5cGUiLCJjaGlsZFJlZiIsIm9ic2VydmVMaW5rVmlzaWJpbGl0eU9uTW91bnQiLCJ1c2VDYWxsYmFjayIsImVsZW1lbnQiLCJtb3VudExpbmtJbnN0YW5jZSIsInVubW91bnRMaW5rRm9yQ3VycmVudE5hdmlnYXRpb24iLCJ1bm1vdW50UHJlZmV0Y2hhYmxlSW5zdGFuY2UiLCJtZXJnZWRSZWYiLCJ1c2VNZXJnZWRSZWYiLCJjaGlsZFByb3BzIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZ3JhZGVUb0R5bmFtaWNQcmVmZXRjaCIsIm9uTmF2aWdhdGlvbkludGVudCIsIl9fTkVYVF9MSU5LX05PX1RPVUNIX1NUQVJUIiwidW5kZWZpbmVkIiwiaXNBYnNvbHV0ZVVybCIsImFkZEJhc2VQYXRoIiwibGluayIsImVycm9yT25jZSIsImNsb25lRWxlbWVudCIsIkxpbmtTdGF0dXNDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImNyZWF0ZUNvbnRleHQiLCJfX05FWFRfQ0FDSEVfQ09NUE9ORU5UUyIsIkZ1bGwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/app-dir/link.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/bfcache.js": /*!************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/bfcache.js ***! \************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useRouterBFCache\", ({\n enumerable: true,\n get: function() {\n return useRouterBFCache;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\n// When the flag is disabled, only track the currently active tree\nconst MAX_BF_CACHE_ENTRIES = false ? 0 : 1;\nfunction useRouterBFCache(activeTree, activeStateKey) {\n // The currently active entry. The entries form a linked list, sorted in\n // order of most recently active. This allows us to reuse parts of the list\n // without cloning, unless there's a reordering or removal.\n // TODO: Once we start tracking back/forward history at each route level,\n // we should use the history order instead. In other words, when traversing\n // to an existing entry as a result of a popstate event, we should maintain\n // the existing order instead of moving it to the front of the list. I think\n // an initial implementation of this could be to pass an incrementing id\n // to history.pushState/replaceState, then use that here for ordering.\n const [prevActiveEntry, setPrevActiveEntry] = (0, _react.useState)(()=>{\n const initialEntry = {\n tree: activeTree,\n stateKey: activeStateKey,\n next: null\n };\n return initialEntry;\n });\n if (prevActiveEntry.tree === activeTree) {\n // Fast path. The active tree hasn't changed, so we can reuse the\n // existing state.\n return prevActiveEntry;\n }\n // The route tree changed. Note that this doesn't mean that the tree changed\n // *at this level* — the change may be due to a child route. Either way, we\n // need to either add or update the router tree in the bfcache.\n //\n // The rest of the code looks more complicated than it actually is because we\n // can't mutate the state in place; we have to copy-on-write.\n // Create a new entry for the active cache key. This is the head of the new\n // linked list.\n const newActiveEntry = {\n tree: activeTree,\n stateKey: activeStateKey,\n next: null\n };\n // We need to append the old list onto the new list. If the head of the new\n // list was already present in the cache, then we'll need to clone everything\n // that came before it. Then we can reuse the rest.\n let n = 1;\n let oldEntry = prevActiveEntry;\n let clonedEntry = newActiveEntry;\n while(oldEntry !== null && n < MAX_BF_CACHE_ENTRIES){\n if (oldEntry.stateKey === activeStateKey) {\n // Fast path. This entry in the old list that corresponds to the key that\n // is now active. We've already placed a clone of this entry at the front\n // of the new list. We can reuse the rest of the old list without cloning.\n // NOTE: We don't need to worry about eviction in this case because we\n // haven't increased the size of the cache, and we assume the max size\n // is constant across renders. If we were to change it to a dynamic limit,\n // then the implementation would need to account for that.\n clonedEntry.next = oldEntry.next;\n break;\n } else {\n // Clone the entry and append it to the list.\n n++;\n const entry = {\n tree: oldEntry.tree,\n stateKey: oldEntry.stateKey,\n next: null\n };\n clonedEntry.next = entry;\n clonedEntry = entry;\n }\n oldEntry = oldEntry.next;\n }\n setPrevActiveEntry(newActiveEntry);\n return newActiveEntry;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=bfcache.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9iZmNhY2hlLmpzIiwibWFwcGluZ3MiOiI7Ozs7b0RBaUNnQkE7OztlQUFBQTs7O21DQWhDUztBQUV6QixrRUFBa0U7QUFDbEUsTUFBTUMsdUJBQXVCQyxNQUFtQyxHQUFHLENBQUMsR0FBRztBQTZCaEUsU0FBU0YsaUJBQ2RLLFVBQTZCLEVBQzdCQyxjQUFzQjtJQUV0Qix3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDJEQUEyRDtJQUMzRCx5RUFBeUU7SUFDekUsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLHNFQUFzRTtJQUN0RSxNQUFNLENBQUNDLGlCQUFpQkMsbUJBQW1CLEdBQUdDLENBQUFBLEdBQUFBLE9BQUFBLFFBQUFBLEVBQzVDO1FBQ0UsTUFBTUMsZUFBbUM7WUFDdkNDLE1BQU1OO1lBQ05PLFVBQVVOO1lBQ1ZPLE1BQU07UUFDUjtRQUNBLE9BQU9IO0lBQ1Q7SUFHRixJQUFJSCxnQkFBZ0JJLElBQUksS0FBS04sWUFBWTtRQUN2QyxpRUFBaUU7UUFDakUsa0JBQWtCO1FBQ2xCLE9BQU9FO0lBQ1Q7SUFFQSw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQzNFLCtEQUErRDtJQUMvRCxFQUFFO0lBQ0YsNkVBQTZFO0lBQzdFLDZEQUE2RDtJQUU3RCwyRUFBMkU7SUFDM0UsZUFBZTtJQUNmLE1BQU1PLGlCQUFxQztRQUN6Q0gsTUFBTU47UUFDTk8sVUFBVU47UUFDVk8sTUFBTTtJQUNSO0lBRUEsMkVBQTJFO0lBQzNFLDZFQUE2RTtJQUM3RSxtREFBbUQ7SUFDbkQsSUFBSUUsSUFBSTtJQUNSLElBQUlDLFdBQXNDVDtJQUMxQyxJQUFJVSxjQUFrQ0g7SUFDdEMsTUFBT0UsYUFBYSxRQUFRRCxJQUFJZCxxQkFBc0I7UUFDcEQsSUFBSWUsU0FBU0osUUFBUSxLQUFLTixnQkFBZ0I7WUFDeEMseUVBQXlFO1lBQ3pFLHlFQUF5RTtZQUN6RSwwRUFBMEU7WUFDMUUsc0VBQXNFO1lBQ3RFLHNFQUFzRTtZQUN0RSwwRUFBMEU7WUFDMUUsMERBQTBEO1lBQzFEVyxZQUFZSixJQUFJLEdBQUdHLFNBQVNILElBQUk7WUFDaEM7UUFDRixPQUFPO1lBQ0wsNkNBQTZDO1lBQzdDRTtZQUNBLE1BQU1HLFFBQTRCO2dCQUNoQ1AsTUFBTUssU0FBU0wsSUFBSTtnQkFDbkJDLFVBQVVJLFNBQVNKLFFBQVE7Z0JBQzNCQyxNQUFNO1lBQ1I7WUFDQUksWUFBWUosSUFBSSxHQUFHSztZQUNuQkQsY0FBY0M7UUFDaEI7UUFDQUYsV0FBV0EsU0FBU0gsSUFBSTtJQUMxQjtJQUVBTCxtQkFBbUJNO0lBQ25CLE9BQU9BO0FBQ1QiLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcmMvY2xpZW50L2NvbXBvbmVudHMvYmZjYWNoZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZsaWdodFJvdXRlclN0YXRlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLXR5cGVzJ1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuLy8gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgb25seSB0cmFjayB0aGUgY3VycmVudGx5IGFjdGl2ZSB0cmVlXG5jb25zdCBNQVhfQkZfQ0FDSEVfRU5UUklFUyA9IHByb2Nlc3MuZW52Ll9fTkVYVF9DQUNIRV9DT01QT05FTlRTID8gMyA6IDFcblxuZXhwb3J0IHR5cGUgUm91dGVyQkZDYWNoZUVudHJ5ID0ge1xuICB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBzdGF0ZUtleTogc3RyaW5nXG4gIC8vIFRoZSBlbnRyaWVzIGZvcm0gYSBsaW5rZWQgbGlzdCwgc29ydGVkIGluIG9yZGVyIG9mIG1vc3QgcmVjZW50bHkgYWN0aXZlLlxuICBuZXh0OiBSb3V0ZXJCRkNhY2hlRW50cnkgfCBudWxsXG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50IE4gdHJlZXMgKEZsaWdodFJvdXRlclN0YXRlcykgdGhhdCB3ZXJlIGFjdGl2ZVxuICogYXQgYSBjZXJ0YWluIHNlZ21lbnQgbGV2ZWwuIEUuZy4gZm9yIGEgc2VnbWVudCBcIi9hL2IvW3BhcmFtXVwiLCB0aGlzIGhvb2tcbiAqIHRyYWNrcyB0aGUgbGFzdCBOIHBhcmFtIHZhbHVlcyB0aGF0IHRoZSByb3V0ZXIgcmVuZGVyZWQgZm9yIE4uXG4gKlxuICogVGhlIHJlc3VsdCBvZiB0aGlzIGhvb2sgcHJlY2lzZWx5IGRldGVybWluZXMgdGhlIG51bWJlciBhbmQgb3JkZXIgb2ZcbiAqIHRyZWVzIHRoYXQgYXJlIHJlbmRlcmVkIGluIHBhcmFsbGVsIGF0IHRoZWlyIHNlZ21lbnQgbGV2ZWwuXG4gKlxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjYWNoZSBpcyB0byB3ZSBjYW4gcHJlc2VydmUgdGhlIFJlYWN0IGFuZCBET00gc3RhdGUgb2ZcbiAqIHNvbWUgbnVtYmVyIG9mIGluYWN0aXZlIHRyZWVzLCBieSByZW5kZXJpbmcgdGhlbSBpbiBhbiA8QWN0aXZpdHk+IGJvdW5kYXJ5LlxuICogVGhhdCBtZWFucyBpdCB3b3VsZCBub3QgbWFrZSBzZW5zZSBmb3IgdGhlIHRoZSBsaWZldGltZSBvZiB0aGUgY2FjaGUgdG8gYmVcbiAqIGFueSBsb25nZXIgdGhhbiB0aGUgbGlmZXRpbWUgb2YgdGhlIFJlYWN0IHRyZWU7IGUuZy4gaWYgdGhlIGhvb2sgd2VyZVxuICogdW5tb3VudGVkLCB0aGVuIHRoZSBSZWFjdCB0cmVlIHdvdWxkIGJlLCB0b28uIFNvLCB3ZSB1c2UgUmVhY3Qgc3RhdGUgdG9cbiAqIG1hbmFnZSBpdC5cbiAqXG4gKiBOb3RlIHRoYXQgd2UgZG9uJ3Qgc3RvcmUgdGhlIFJTQyBkYXRhIGZvciB0aGUgY2FjaGUgZW50cmllcyBpbiB0aGlzIGhvb2sg4oCUXG4gKiB0aGUgZGF0YSBmb3IgaW5hY3RpdmUgc2VnbWVudHMgaXMgc3RvcmVkIGluIHRoZSBwYXJlbnQgQ2FjaGVOb2RlLCB3aGljaFxuICogKmRvZXMqIGhhdmUgYSBsb25nZXIgbGlmZXRpbWUgdGhhbiB0aGUgUmVhY3QgdHJlZS4gVGhpcyBob29rIG9ubHkgZGV0ZXJtaW5lc1xuICogd2hpY2ggb2YgdGhvc2UgdHJlZXMgc2hvdWxkIGhhdmUgdGhlaXIgKnN0YXRlKiBwcmVzZXJ2ZWQsIGJ5IDxBY3Rpdml0eT4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSb3V0ZXJCRkNhY2hlKFxuICBhY3RpdmVUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgYWN0aXZlU3RhdGVLZXk6IHN0cmluZ1xuKTogUm91dGVyQkZDYWNoZUVudHJ5IHtcbiAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZW50cnkuIFRoZSBlbnRyaWVzIGZvcm0gYSBsaW5rZWQgbGlzdCwgc29ydGVkIGluXG4gIC8vIG9yZGVyIG9mIG1vc3QgcmVjZW50bHkgYWN0aXZlLiBUaGlzIGFsbG93cyB1cyB0byByZXVzZSBwYXJ0cyBvZiB0aGUgbGlzdFxuICAvLyB3aXRob3V0IGNsb25pbmcsIHVubGVzcyB0aGVyZSdzIGEgcmVvcmRlcmluZyBvciByZW1vdmFsLlxuICAvLyBUT0RPOiBPbmNlIHdlIHN0YXJ0IHRyYWNraW5nIGJhY2svZm9yd2FyZCBoaXN0b3J5IGF0IGVhY2ggcm91dGUgbGV2ZWwsXG4gIC8vIHdlIHNob3VsZCB1c2UgdGhlIGhpc3Rvcnkgb3JkZXIgaW5zdGVhZC4gSW4gb3RoZXIgd29yZHMsIHdoZW4gdHJhdmVyc2luZ1xuICAvLyB0byBhbiBleGlzdGluZyBlbnRyeSBhcyBhIHJlc3VsdCBvZiBhIHBvcHN0YXRlIGV2ZW50LCB3ZSBzaG91bGQgbWFpbnRhaW5cbiAgLy8gdGhlIGV4aXN0aW5nIG9yZGVyIGluc3RlYWQgb2YgbW92aW5nIGl0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gSSB0aGlua1xuICAvLyBhbiBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY291bGQgYmUgdG8gcGFzcyBhbiBpbmNyZW1lbnRpbmcgaWRcbiAgLy8gdG8gaGlzdG9yeS5wdXNoU3RhdGUvcmVwbGFjZVN0YXRlLCB0aGVuIHVzZSB0aGF0IGhlcmUgZm9yIG9yZGVyaW5nLlxuICBjb25zdCBbcHJldkFjdGl2ZUVudHJ5LCBzZXRQcmV2QWN0aXZlRW50cnldID0gdXNlU3RhdGU8Um91dGVyQkZDYWNoZUVudHJ5PihcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBpbml0aWFsRW50cnk6IFJvdXRlckJGQ2FjaGVFbnRyeSA9IHtcbiAgICAgICAgdHJlZTogYWN0aXZlVHJlZSxcbiAgICAgICAgc3RhdGVLZXk6IGFjdGl2ZVN0YXRlS2V5LFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGluaXRpYWxFbnRyeVxuICAgIH1cbiAgKVxuXG4gIGlmIChwcmV2QWN0aXZlRW50cnkudHJlZSA9PT0gYWN0aXZlVHJlZSkge1xuICAgIC8vIEZhc3QgcGF0aC4gVGhlIGFjdGl2ZSB0cmVlIGhhc24ndCBjaGFuZ2VkLCBzbyB3ZSBjYW4gcmV1c2UgdGhlXG4gICAgLy8gZXhpc3Rpbmcgc3RhdGUuXG4gICAgcmV0dXJuIHByZXZBY3RpdmVFbnRyeVxuICB9XG5cbiAgLy8gVGhlIHJvdXRlIHRyZWUgY2hhbmdlZC4gTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBtZWFuIHRoYXQgdGhlIHRyZWUgY2hhbmdlZFxuICAvLyAqYXQgdGhpcyBsZXZlbCog4oCUIHRoZSBjaGFuZ2UgbWF5IGJlIGR1ZSB0byBhIGNoaWxkIHJvdXRlLiBFaXRoZXIgd2F5LCB3ZVxuICAvLyBuZWVkIHRvIGVpdGhlciBhZGQgb3IgdXBkYXRlIHRoZSByb3V0ZXIgdHJlZSBpbiB0aGUgYmZjYWNoZS5cbiAgLy9cbiAgLy8gVGhlIHJlc3Qgb2YgdGhlIGNvZGUgbG9va3MgbW9yZSBjb21wbGljYXRlZCB0aGFuIGl0IGFjdHVhbGx5IGlzIGJlY2F1c2Ugd2VcbiAgLy8gY2FuJ3QgbXV0YXRlIHRoZSBzdGF0ZSBpbiBwbGFjZTsgd2UgaGF2ZSB0byBjb3B5LW9uLXdyaXRlLlxuXG4gIC8vIENyZWF0ZSBhIG5ldyBlbnRyeSBmb3IgdGhlIGFjdGl2ZSBjYWNoZSBrZXkuIFRoaXMgaXMgdGhlIGhlYWQgb2YgdGhlIG5ld1xuICAvLyBsaW5rZWQgbGlzdC5cbiAgY29uc3QgbmV3QWN0aXZlRW50cnk6IFJvdXRlckJGQ2FjaGVFbnRyeSA9IHtcbiAgICB0cmVlOiBhY3RpdmVUcmVlLFxuICAgIHN0YXRlS2V5OiBhY3RpdmVTdGF0ZUtleSxcbiAgICBuZXh0OiBudWxsLFxuICB9XG5cbiAgLy8gV2UgbmVlZCB0byBhcHBlbmQgdGhlIG9sZCBsaXN0IG9udG8gdGhlIG5ldyBsaXN0LiBJZiB0aGUgaGVhZCBvZiB0aGUgbmV3XG4gIC8vIGxpc3Qgd2FzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY2FjaGUsIHRoZW4gd2UnbGwgbmVlZCB0byBjbG9uZSBldmVyeXRoaW5nXG4gIC8vIHRoYXQgY2FtZSBiZWZvcmUgaXQuIFRoZW4gd2UgY2FuIHJldXNlIHRoZSByZXN0LlxuICBsZXQgbiA9IDFcbiAgbGV0IG9sZEVudHJ5OiBSb3V0ZXJCRkNhY2hlRW50cnkgfCBudWxsID0gcHJldkFjdGl2ZUVudHJ5XG4gIGxldCBjbG9uZWRFbnRyeTogUm91dGVyQkZDYWNoZUVudHJ5ID0gbmV3QWN0aXZlRW50cnlcbiAgd2hpbGUgKG9sZEVudHJ5ICE9PSBudWxsICYmIG4gPCBNQVhfQkZfQ0FDSEVfRU5UUklFUykge1xuICAgIGlmIChvbGRFbnRyeS5zdGF0ZUtleSA9PT0gYWN0aXZlU3RhdGVLZXkpIHtcbiAgICAgIC8vIEZhc3QgcGF0aC4gVGhpcyBlbnRyeSBpbiB0aGUgb2xkIGxpc3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUga2V5IHRoYXRcbiAgICAgIC8vIGlzIG5vdyBhY3RpdmUuIFdlJ3ZlIGFscmVhZHkgcGxhY2VkIGEgY2xvbmUgb2YgdGhpcyBlbnRyeSBhdCB0aGUgZnJvbnRcbiAgICAgIC8vIG9mIHRoZSBuZXcgbGlzdC4gV2UgY2FuIHJldXNlIHRoZSByZXN0IG9mIHRoZSBvbGQgbGlzdCB3aXRob3V0IGNsb25pbmcuXG4gICAgICAvLyBOT1RFOiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV2aWN0aW9uIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAvLyBoYXZlbid0IGluY3JlYXNlZCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUsIGFuZCB3ZSBhc3N1bWUgdGhlIG1heCBzaXplXG4gICAgICAvLyBpcyBjb25zdGFudCBhY3Jvc3MgcmVuZGVycy4gSWYgd2Ugd2VyZSB0byBjaGFuZ2UgaXQgdG8gYSBkeW5hbWljIGxpbWl0LFxuICAgICAgLy8gdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LlxuICAgICAgY2xvbmVkRW50cnkubmV4dCA9IG9sZEVudHJ5Lm5leHRcbiAgICAgIGJyZWFrXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsb25lIHRoZSBlbnRyeSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBsaXN0LlxuICAgICAgbisrXG4gICAgICBjb25zdCBlbnRyeTogUm91dGVyQkZDYWNoZUVudHJ5ID0ge1xuICAgICAgICB0cmVlOiBvbGRFbnRyeS50cmVlLFxuICAgICAgICBzdGF0ZUtleTogb2xkRW50cnkuc3RhdGVLZXksXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICB9XG4gICAgICBjbG9uZWRFbnRyeS5uZXh0ID0gZW50cnlcbiAgICAgIGNsb25lZEVudHJ5ID0gZW50cnlcbiAgICB9XG4gICAgb2xkRW50cnkgPSBvbGRFbnRyeS5uZXh0XG4gIH1cblxuICBzZXRQcmV2QWN0aXZlRW50cnkobmV3QWN0aXZlRW50cnkpXG4gIHJldHVybiBuZXdBY3RpdmVFbnRyeVxufVxuIl0sIm5hbWVzIjpbInVzZVJvdXRlckJGQ2FjaGUiLCJNQVhfQkZfQ0FDSEVfRU5UUklFUyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQ0FDSEVfQ09NUE9ORU5UUyIsImFjdGl2ZVRyZWUiLCJhY3RpdmVTdGF0ZUtleSIsInByZXZBY3RpdmVFbnRyeSIsInNldFByZXZBY3RpdmVFbnRyeSIsInVzZVN0YXRlIiwiaW5pdGlhbEVudHJ5IiwidHJlZSIsInN0YXRlS2V5IiwibmV4dCIsIm5ld0FjdGl2ZUVudHJ5IiwibiIsIm9sZEVudHJ5IiwiY2xvbmVkRW50cnkiLCJlbnRyeSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/bfcache.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-page.js": /*!****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-page.js ***! \****************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ClientPageRoot\", ({\n enumerable: true,\n get: function() {\n return ClientPageRoot;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _invarianterror = __webpack_require__(/*! ../../shared/lib/invariant-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/invariant-error.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\nconst _routeparams = __webpack_require__(/*! ../route-params */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/route-params.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nfunction ClientPageRoot({ Component, serverProvidedParams }) {\n let searchParams;\n let params;\n if (serverProvidedParams !== null) {\n searchParams = serverProvidedParams.searchParams;\n params = serverProvidedParams.params;\n } else {\n // When Cache Components is enabled, the server does not pass the params as\n // props; they are parsed on the client and passed via context.\n const layoutRouterContext = (0, _react.use)(_approutercontextsharedruntime.LayoutRouterContext);\n params = layoutRouterContext !== null ? layoutRouterContext.parentParams : {};\n // This is an intentional behavior change: when Cache Components is enabled,\n // client segments receive the \"canonical\" search params, not the\n // rewritten ones. Users should either call useSearchParams directly or pass\n // the rewritten ones in from a Server Component.\n // TODO: Log a deprecation error when this object is accessed\n searchParams = (0, _routeparams.urlSearchParamsToParsedUrlQuery)((0, _react.use)(_hooksclientcontextsharedruntime.SearchParamsContext));\n }\n if (false) {} else {\n const { createRenderSearchParamsFromClient } = __webpack_require__(/*! ../request/search-params.browser */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.js\");\n const clientSearchParams = createRenderSearchParamsFromClient(searchParams);\n const { createRenderParamsFromClient } = __webpack_require__(/*! ../request/params.browser */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.js\");\n const clientParams = createRenderParamsFromClient(params);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n params: clientParams,\n searchParams: clientSearchParams\n });\n }\n}\n_c = ClientPageRoot;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=client-page.js.map\nvar _c;\n$RefreshReg$(_c, \"ClientPageRoot\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtcGFnZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQW1CZ0JBOzs7ZUFBQUE7Ozs7NENBaEJlOzJEQUdLO21DQUNoQjt5Q0FDNEI7NkRBQ1o7QUFVN0Isd0JBQXdCLEVBQzdCQyxTQUFTLEVBQ1RDLG9CQUFvQixFQVFyQjtJQUNDLElBQUlDO0lBQ0osSUFBSUM7SUFDSixJQUFJRix5QkFBeUIsTUFBTTtRQUNqQ0MsZUFBZUQscUJBQXFCQyxZQUFZO1FBQ2hEQyxTQUFTRixxQkFBcUJFLE1BQU07SUFDdEMsT0FBTztRQUNMLDJFQUEyRTtRQUMzRSwrREFBK0Q7UUFDL0QsTUFBTUMsc0JBQXNCQyxDQUFBQSxHQUFBQSxPQUFBQSxHQUFBQSxFQUFJQywrQkFBQUEsbUJBQW1CO1FBQ25ESCxTQUNFQyx3QkFBd0IsT0FBT0Esb0JBQW9CRyxZQUFZLEdBQUcsQ0FBQztRQUVyRSw0RUFBNEU7UUFDNUUsaUVBQWlFO1FBQ2pFLDRFQUE0RTtRQUM1RSxpREFBaUQ7UUFDakQsNkRBQTZEO1FBQzdETCxlQUFlTSxDQUFBQSxHQUFBQSxhQUFBQSwrQkFBQUEsRUFBZ0NILENBQUFBLEdBQUFBLE9BQUFBLEdBQUFBLEVBQUlJLGlDQUFBQSxtQkFBbUI7SUFDeEU7SUFFQSxJQUFJLEtBQTZCLEVBQUUsRUF3QmxDLE1BQU07UUFDTCxNQUFNLEVBQUVXLGtDQUFrQyxFQUFFLEdBQzFDUixtQkFBT0EsQ0FBQyxpUUFBa0M7UUFDNUMsTUFBTUMscUJBQXFCTyxtQ0FBbUNsQjtRQUM5RCxNQUFNLEVBQUVtQiw0QkFBNEIsRUFBRSxHQUNwQ1QsbUJBQU9BLENBQUMsbVBBQTJCO1FBQ3JDLE1BQU1FLGVBQWVPLDZCQUE2QmxCO1FBRWxELHFCQUFPLHFCQUFDSCxXQUFBQTtZQUFVRyxRQUFRVztZQUFjWixjQUFjVzs7SUFDeEQ7QUFDRjtLQWpFZ0JkIiwic291cmNlcyI6WyIvVXNlcnMvc3JjL2NsaWVudC9jb21wb25lbnRzL2NsaWVudC1wYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHsgSW52YXJpYW50RXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2ludmFyaWFudC1lcnJvcidcblxuaW1wb3J0IHR5cGUgeyBQYXJhbXMgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvcmVxdWVzdC9wYXJhbXMnXG5pbXBvcnQgeyBMYXlvdXRSb3V0ZXJDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyB1c2UgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVybFNlYXJjaFBhcmFtc1RvUGFyc2VkVXJsUXVlcnkgfSBmcm9tICcuLi9yb3V0ZS1wYXJhbXMnXG5pbXBvcnQgeyBTZWFyY2hQYXJhbXNDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZSdcblxuLyoqXG4gKiBXaGVuIHRoZSBQYWdlIGlzIGEgY2xpZW50IGNvbXBvbmVudCB3ZSBzZW5kIHRoZSBwYXJhbXMgYW5kIHNlYXJjaFBhcmFtcyB0byB0aGlzIGNsaWVudCB3cmFwcGVyXG4gKiB3aGVyZSB0aGV5IGFyZSB0dXJuZWQgaW50byBkeW5hbWljYWxseSB0cmFja2VkIHZhbHVlcyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBhY3R1YWwgUGFnZSBjb21wb25lbnQuXG4gKlxuICogYWRkaXRpb25hbGx5IHdlIG1heSBzZW5kIHByb21pc2VzIHJlcHJlc2VudGluZyB0aGUgcGFyYW1zIGFuZCBzZWFyY2hQYXJhbXMuIFdlIGRvbid0IGV2ZXIgdXNlIHRoZXNlIHBhc3NlZFxuICogdmFsdWVzIGJ1dCBpdCBjYW4gYmUgbmVjZXNzYXJ5IGZvciB0aGUgc2VuZGVyIHRvIHNlbmQgYSBQcm9taXNlIHRoYXQgZG9lc24ndCByZXNvbHZlIGluIGNlcnRhaW4gc2l0dWF0aW9ucy5cbiAqIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gZGVjaWRlIGlmIHRoZSBwcm9taXNlcyBhcmUgbmVlZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2xpZW50UGFnZVJvb3Qoe1xuICBDb21wb25lbnQsXG4gIHNlcnZlclByb3ZpZGVkUGFyYW1zLFxufToge1xuICBDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PlxuICBzZXJ2ZXJQcm92aWRlZFBhcmFtczogbnVsbCB8IHtcbiAgICBzZWFyY2hQYXJhbXM6IFBhcnNlZFVybFF1ZXJ5XG4gICAgcGFyYW1zOiBQYXJhbXNcbiAgICBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxhbnk+PiB8IG51bGxcbiAgfVxufSkge1xuICBsZXQgc2VhcmNoUGFyYW1zOiBQYXJzZWRVcmxRdWVyeVxuICBsZXQgcGFyYW1zOiBQYXJhbXNcbiAgaWYgKHNlcnZlclByb3ZpZGVkUGFyYW1zICE9PSBudWxsKSB7XG4gICAgc2VhcmNoUGFyYW1zID0gc2VydmVyUHJvdmlkZWRQYXJhbXMuc2VhcmNoUGFyYW1zXG4gICAgcGFyYW1zID0gc2VydmVyUHJvdmlkZWRQYXJhbXMucGFyYW1zXG4gIH0gZWxzZSB7XG4gICAgLy8gV2hlbiBDYWNoZSBDb21wb25lbnRzIGlzIGVuYWJsZWQsIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcGFzcyB0aGUgcGFyYW1zIGFzXG4gICAgLy8gcHJvcHM7IHRoZXkgYXJlIHBhcnNlZCBvbiB0aGUgY2xpZW50IGFuZCBwYXNzZWQgdmlhIGNvbnRleHQuXG4gICAgY29uc3QgbGF5b3V0Um91dGVyQ29udGV4dCA9IHVzZShMYXlvdXRSb3V0ZXJDb250ZXh0KVxuICAgIHBhcmFtcyA9XG4gICAgICBsYXlvdXRSb3V0ZXJDb250ZXh0ICE9PSBudWxsID8gbGF5b3V0Um91dGVyQ29udGV4dC5wYXJlbnRQYXJhbXMgOiB7fVxuXG4gICAgLy8gVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBiZWhhdmlvciBjaGFuZ2U6IHdoZW4gQ2FjaGUgQ29tcG9uZW50cyBpcyBlbmFibGVkLFxuICAgIC8vIGNsaWVudCBzZWdtZW50cyByZWNlaXZlIHRoZSBcImNhbm9uaWNhbFwiIHNlYXJjaCBwYXJhbXMsIG5vdCB0aGVcbiAgICAvLyByZXdyaXR0ZW4gb25lcy4gVXNlcnMgc2hvdWxkIGVpdGhlciBjYWxsIHVzZVNlYXJjaFBhcmFtcyBkaXJlY3RseSBvciBwYXNzXG4gICAgLy8gdGhlIHJld3JpdHRlbiBvbmVzIGluIGZyb20gYSBTZXJ2ZXIgQ29tcG9uZW50LlxuICAgIC8vIFRPRE86IExvZyBhIGRlcHJlY2F0aW9uIGVycm9yIHdoZW4gdGhpcyBvYmplY3QgaXMgYWNjZXNzZWRcbiAgICBzZWFyY2hQYXJhbXMgPSB1cmxTZWFyY2hQYXJhbXNUb1BhcnNlZFVybFF1ZXJ5KHVzZShTZWFyY2hQYXJhbXNDb250ZXh0KSEpXG4gIH1cblxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCB7IHdvcmtBc3luY1N0b3JhZ2UgfSA9XG4gICAgICByZXF1aXJlKCcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci93b3JrLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWwnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci93b3JrLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWwnKVxuXG4gICAgbGV0IGNsaWVudFNlYXJjaFBhcmFtczogUHJvbWlzZTxQYXJzZWRVcmxRdWVyeT5cbiAgICBsZXQgY2xpZW50UGFyYW1zOiBQcm9taXNlPFBhcmFtcz5cbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gaW5zdHJ1bWVudCB0aGUgc2VhcmNoUGFyYW1zIHByb3Agd2l0aCB0cmFja2luZyBmb3IgdGhlXG4gICAgLy8gYXBwcm9wcmlhdGUgY29udGV4dC4gV2Ugd3JhcCBkaWZmZXJlbnRseSBpbiBwcmVyZW5kZXJpbmcgdnMgcmVuZGVyaW5nXG4gICAgY29uc3Qgc3RvcmUgPSB3b3JrQXN5bmNTdG9yYWdlLmdldFN0b3JlKClcbiAgICBpZiAoIXN0b3JlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YXJpYW50RXJyb3IoXG4gICAgICAgICdFeHBlY3RlZCB3b3JrU3RvcmUgdG8gZXhpc3Qgd2hlbiBoYW5kbGluZyBzZWFyY2hQYXJhbXMgaW4gYSBjbGllbnQgUGFnZS4nXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgeyBjcmVhdGVTZWFyY2hQYXJhbXNGcm9tQ2xpZW50IH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vc2VydmVyL3JlcXVlc3Qvc2VhcmNoLXBhcmFtcycpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL3NlcnZlci9yZXF1ZXN0L3NlYXJjaC1wYXJhbXMnKVxuICAgIGNsaWVudFNlYXJjaFBhcmFtcyA9IGNyZWF0ZVNlYXJjaFBhcmFtc0Zyb21DbGllbnQoc2VhcmNoUGFyYW1zLCBzdG9yZSlcblxuICAgIGNvbnN0IHsgY3JlYXRlUGFyYW1zRnJvbUNsaWVudCB9ID1cbiAgICAgIHJlcXVpcmUoJy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcycpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcycpXG4gICAgY2xpZW50UGFyYW1zID0gY3JlYXRlUGFyYW1zRnJvbUNsaWVudChwYXJhbXMsIHN0b3JlKVxuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgcGFyYW1zPXtjbGllbnRQYXJhbXN9IHNlYXJjaFBhcmFtcz17Y2xpZW50U2VhcmNoUGFyYW1zfSAvPlxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgY3JlYXRlUmVuZGVyU2VhcmNoUGFyYW1zRnJvbUNsaWVudCB9ID1cbiAgICAgIHJlcXVpcmUoJy4uL3JlcXVlc3Qvc2VhcmNoLXBhcmFtcy5icm93c2VyJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vcmVxdWVzdC9zZWFyY2gtcGFyYW1zLmJyb3dzZXInKVxuICAgIGNvbnN0IGNsaWVudFNlYXJjaFBhcmFtcyA9IGNyZWF0ZVJlbmRlclNlYXJjaFBhcmFtc0Zyb21DbGllbnQoc2VhcmNoUGFyYW1zKVxuICAgIGNvbnN0IHsgY3JlYXRlUmVuZGVyUGFyYW1zRnJvbUNsaWVudCB9ID1cbiAgICAgIHJlcXVpcmUoJy4uL3JlcXVlc3QvcGFyYW1zLmJyb3dzZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9yZXF1ZXN0L3BhcmFtcy5icm93c2VyJylcbiAgICBjb25zdCBjbGllbnRQYXJhbXMgPSBjcmVhdGVSZW5kZXJQYXJhbXNGcm9tQ2xpZW50KHBhcmFtcylcblxuICAgIHJldHVybiA8Q29tcG9uZW50IHBhcmFtcz17Y2xpZW50UGFyYW1zfSBzZWFyY2hQYXJhbXM9e2NsaWVudFNlYXJjaFBhcmFtc30gLz5cbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNsaWVudFBhZ2VSb290IiwiQ29tcG9uZW50Iiwic2VydmVyUHJvdmlkZWRQYXJhbXMiLCJzZWFyY2hQYXJhbXMiLCJwYXJhbXMiLCJsYXlvdXRSb3V0ZXJDb250ZXh0IiwidXNlIiwiTGF5b3V0Um91dGVyQ29udGV4dCIsInBhcmVudFBhcmFtcyIsInVybFNlYXJjaFBhcmFtc1RvUGFyc2VkVXJsUXVlcnkiLCJTZWFyY2hQYXJhbXNDb250ZXh0Iiwid2luZG93Iiwid29ya0FzeW5jU3RvcmFnZSIsInJlcXVpcmUiLCJjbGllbnRTZWFyY2hQYXJhbXMiLCJjbGllbnRQYXJhbXMiLCJzdG9yZSIsImdldFN0b3JlIiwiSW52YXJpYW50RXJyb3IiLCJjcmVhdGVTZWFyY2hQYXJhbXNGcm9tQ2xpZW50IiwiY3JlYXRlUGFyYW1zRnJvbUNsaWVudCIsImNyZWF0ZVJlbmRlclNlYXJjaFBhcmFtc0Zyb21DbGllbnQiLCJjcmVhdGVSZW5kZXJQYXJhbXNGcm9tQ2xpZW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-page.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-segment.js": /*!*******************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-segment.js ***! \*******************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ClientSegmentRoot\", ({\n enumerable: true,\n get: function() {\n return ClientSegmentRoot;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _invarianterror = __webpack_require__(/*! ../../shared/lib/invariant-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/invariant-error.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\nfunction ClientSegmentRoot({ Component, slots, serverProvidedParams }) {\n let params;\n if (serverProvidedParams !== null) {\n params = serverProvidedParams.params;\n } else {\n // When Cache Components is enabled, the server does not pass the params\n // as props; they are parsed on the client and passed via context.\n const layoutRouterContext = (0, _react.use)(_approutercontextsharedruntime.LayoutRouterContext);\n params = layoutRouterContext !== null ? layoutRouterContext.parentParams : {};\n }\n if (false) {} else {\n const { createRenderParamsFromClient } = __webpack_require__(/*! ../request/params.browser */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.js\");\n const clientParams = createRenderParamsFromClient(params);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...slots,\n params: clientParams\n });\n }\n}\n_c = ClientSegmentRoot;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=client-segment.js.map\nvar _c;\n$RefreshReg$(_c, \"ClientSegmentRoot\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtc2VnbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7O3FEQWdCZ0JBOzs7ZUFBQUE7Ozs7NENBZGU7MkRBR0s7bUNBQ2hCO0FBVWIsMkJBQTJCLEVBQ2hDQyxTQUFTLEVBQ1RDLEtBQUssRUFDTEMsb0JBQW9CLEVBUXJCO0lBQ0MsSUFBSUM7SUFDSixJQUFJRCx5QkFBeUIsTUFBTTtRQUNqQ0MsU0FBU0QscUJBQXFCQyxNQUFNO0lBQ3RDLE9BQU87UUFDTCx3RUFBd0U7UUFDeEUsa0VBQWtFO1FBQ2xFLE1BQU1DLHNCQUFzQkMsQ0FBQUEsR0FBQUEsT0FBQUEsR0FBQUEsRUFBSUMsK0JBQUFBLG1CQUFtQjtRQUNuREgsU0FDRUMsd0JBQXdCLE9BQU9BLG9CQUFvQkcsWUFBWSxHQUFHLENBQUM7SUFDdkU7SUFFQSxJQUFJLEtBQTZCLEVBQUUsRUFtQmxDLE1BQU07UUFDTCxNQUFNLEVBQUVTLDRCQUE0QixFQUFFLEdBQ3BDTixtQkFBT0EsQ0FBQyxtUEFBMkI7UUFDckMsTUFBTUMsZUFBZUssNkJBQTZCYjtRQUNsRCxxQkFBTyxxQkFBQ0gsV0FBQUE7WUFBVyxHQUFHQyxLQUFLO1lBQUVFLFFBQVFROztJQUN2QztBQUNGO0tBaERnQloiLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcmMvY2xpZW50L2NvbXBvbmVudHMvY2xpZW50LXNlZ21lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyBJbnZhcmlhbnRFcnJvciB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvaW52YXJpYW50LWVycm9yJ1xuXG5pbXBvcnQgdHlwZSB7IFBhcmFtcyB9IGZyb20gJy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcydcbmltcG9ydCB7IExheW91dFJvdXRlckNvbnRleHQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IHVzZSB9IGZyb20gJ3JlYWN0J1xuXG4vKipcbiAqIFdoZW4gdGhlIFBhZ2UgaXMgYSBjbGllbnQgY29tcG9uZW50IHdlIHNlbmQgdGhlIHBhcmFtcyB0byB0aGlzIGNsaWVudCB3cmFwcGVyXG4gKiB3aGVyZSB0aGV5IGFyZSB0dXJuZWQgaW50byBkeW5hbWljYWxseSB0cmFja2VkIHZhbHVlcyBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBhY3R1YWwgU2VnbWVudCBjb21wb25lbnQuXG4gKlxuICogYWRkaXRpb25hbGx5IHdlIG1heSBzZW5kIGEgcHJvbWlzZSByZXByZXNlbnRpbmcgcGFyYW1zLiBXZSBkb24ndCBldmVyIHVzZSB0aGlzIHBhc3NlZFxuICogdmFsdWUgYnV0IGl0IGNhbiBiZSBuZWNlc3NhcnkgZm9yIHRoZSBzZW5kZXIgdG8gc2VuZCBhIFByb21pc2UgdGhhdCBkb2Vzbid0IHJlc29sdmUgaW4gY2VydGFpbiBzaXR1YXRpb25zXG4gKiBzdWNoIGFzIHdoZW4gY2FjaGVDb21wb25lbnRzIGlzIGVuYWJsZWQuIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gZGVjaWRlIGlmIHRoZSBwcm9taXNlcyBhcmUgbmVlZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2xpZW50U2VnbWVudFJvb3Qoe1xuICBDb21wb25lbnQsXG4gIHNsb3RzLFxuICBzZXJ2ZXJQcm92aWRlZFBhcmFtcyxcbn06IHtcbiAgQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT5cbiAgc2xvdHM6IHsgW2tleTogc3RyaW5nXTogUmVhY3QuUmVhY3ROb2RlIH1cbiAgc2VydmVyUHJvdmlkZWRQYXJhbXM6IG51bGwgfCB7XG4gICAgcGFyYW1zOiBQYXJhbXNcbiAgICBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxhbnk+PiB8IG51bGxcbiAgfVxufSkge1xuICBsZXQgcGFyYW1zOiBQYXJhbXNcbiAgaWYgKHNlcnZlclByb3ZpZGVkUGFyYW1zICE9PSBudWxsKSB7XG4gICAgcGFyYW1zID0gc2VydmVyUHJvdmlkZWRQYXJhbXMucGFyYW1zXG4gIH0gZWxzZSB7XG4gICAgLy8gV2hlbiBDYWNoZSBDb21wb25lbnRzIGlzIGVuYWJsZWQsIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcGFzcyB0aGUgcGFyYW1zXG4gICAgLy8gYXMgcHJvcHM7IHRoZXkgYXJlIHBhcnNlZCBvbiB0aGUgY2xpZW50IGFuZCBwYXNzZWQgdmlhIGNvbnRleHQuXG4gICAgY29uc3QgbGF5b3V0Um91dGVyQ29udGV4dCA9IHVzZShMYXlvdXRSb3V0ZXJDb250ZXh0KVxuICAgIHBhcmFtcyA9XG4gICAgICBsYXlvdXRSb3V0ZXJDb250ZXh0ICE9PSBudWxsID8gbGF5b3V0Um91dGVyQ29udGV4dC5wYXJlbnRQYXJhbXMgOiB7fVxuICB9XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgeyB3b3JrQXN5bmNTdG9yYWdlIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvd29yay1hc3luYy1zdG9yYWdlLmV4dGVybmFsJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvd29yay1hc3luYy1zdG9yYWdlLmV4dGVybmFsJylcblxuICAgIGxldCBjbGllbnRQYXJhbXM6IFByb21pc2U8UGFyYW1zPlxuICAgIC8vIFdlIGFyZSBnb2luZyB0byBpbnN0cnVtZW50IHRoZSBzZWFyY2hQYXJhbXMgcHJvcCB3aXRoIHRyYWNraW5nIGZvciB0aGVcbiAgICAvLyBhcHByb3ByaWF0ZSBjb250ZXh0LiBXZSB3cmFwIGRpZmZlcmVudGx5IGluIHByZXJlbmRlcmluZyB2cyByZW5kZXJpbmdcbiAgICBjb25zdCBzdG9yZSA9IHdvcmtBc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKVxuICAgIGlmICghc3RvcmUpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhcmlhbnRFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIHdvcmtTdG9yZSB0byBleGlzdCB3aGVuIGhhbmRsaW5nIHBhcmFtcyBpbiBhIGNsaWVudCBzZWdtZW50IHN1Y2ggYXMgYSBMYXlvdXQgb3IgVGVtcGxhdGUuJ1xuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRlUGFyYW1zRnJvbUNsaWVudCB9ID1cbiAgICAgIHJlcXVpcmUoJy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcycpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcycpXG4gICAgY2xpZW50UGFyYW1zID0gY3JlYXRlUGFyYW1zRnJvbUNsaWVudChwYXJhbXMsIHN0b3JlKVxuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgey4uLnNsb3RzfSBwYXJhbXM9e2NsaWVudFBhcmFtc30gLz5cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IGNyZWF0ZVJlbmRlclBhcmFtc0Zyb21DbGllbnQgfSA9XG4gICAgICByZXF1aXJlKCcuLi9yZXF1ZXN0L3BhcmFtcy5icm93c2VyJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vcmVxdWVzdC9wYXJhbXMuYnJvd3NlcicpXG4gICAgY29uc3QgY2xpZW50UGFyYW1zID0gY3JlYXRlUmVuZGVyUGFyYW1zRnJvbUNsaWVudChwYXJhbXMpXG4gICAgcmV0dXJuIDxDb21wb25lbnQgey4uLnNsb3RzfSBwYXJhbXM9e2NsaWVudFBhcmFtc30gLz5cbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNsaWVudFNlZ21lbnRSb290IiwiQ29tcG9uZW50Iiwic2xvdHMiLCJzZXJ2ZXJQcm92aWRlZFBhcmFtcyIsInBhcmFtcyIsImxheW91dFJvdXRlckNvbnRleHQiLCJ1c2UiLCJMYXlvdXRSb3V0ZXJDb250ZXh0IiwicGFyZW50UGFyYW1zIiwid2luZG93Iiwid29ya0FzeW5jU3RvcmFnZSIsInJlcXVpcmUiLCJjbGllbnRQYXJhbXMiLCJzdG9yZSIsImdldFN0b3JlIiwiSW52YXJpYW50RXJyb3IiLCJjcmVhdGVQYXJhbXNGcm9tQ2xpZW50IiwiY3JlYXRlUmVuZGVyUGFyYW1zRnJvbUNsaWVudCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/client-segment.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/layout-router.js": /*!******************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/layout-router.js ***! \******************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return OuterLayoutRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\"));\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react-dom/index.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _unresolvedthenable = __webpack_require__(/*! ./unresolved-thenable */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/unresolved-thenable.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/error-boundary.js\");\nconst _matchsegments = __webpack_require__(/*! ./match-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/match-segments.js\");\nconst _disablesmoothscroll = __webpack_require__(/*! ../../shared/lib/router/utils/disable-smooth-scroll */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _errorboundary1 = __webpack_require__(/*! ./http-access-fallback/error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./router-reducer/create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _bfcache = __webpack_require__(/*! ./bfcache */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/bfcache.js\");\nconst _apppaths = __webpack_require__(/*! ../../shared/lib/router/utils/app-paths */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _routeparams = __webpack_require__(/*! ../route-params */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/route-params.js\");\nconst _pprnavigations = __webpack_require__(/*! ./router-reducer/ppr-navigations */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nconst __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = _reactdom.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n// TODO-APP: Replace with new React API for finding dom nodes without a `ref` when available\n/**\n * Wraps ReactDOM.findDOMNode with additional logic to hide React Strict Mode warning\n */ function findDOMNode(instance) {\n // Tree-shake for server bundle\n if (false) {}\n // __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.findDOMNode is null during module init.\n // We need to lazily reference it.\n const internal_reactDOMfindDOMNode = __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE.findDOMNode;\n return internal_reactDOMfindDOMNode(instance);\n}\nconst rectProperties = [\n 'bottom',\n 'height',\n 'left',\n 'right',\n 'top',\n 'width',\n 'x',\n 'y'\n];\n/**\n * Check if a HTMLElement is hidden or fixed/sticky position\n */ function shouldSkipElement(element) {\n // we ignore fixed or sticky positioned elements since they'll likely pass the \"in-viewport\" check\n // and will result in a situation we bail on scroll because of something like a fixed nav,\n // even though the actual page content is offscreen\n if ([\n 'sticky',\n 'fixed'\n ].includes(getComputedStyle(element).position)) {\n return true;\n }\n // Uses `getBoundingClientRect` to check if the element is hidden instead of `offsetParent`\n // because `offsetParent` doesn't consider document/body\n const rect = element.getBoundingClientRect();\n return rectProperties.every((item)=>rect[item] === 0);\n}\n/**\n * Check if the top corner of the HTMLElement is in the viewport.\n */ function topOfElementInViewport(element, viewportHeight) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.top <= viewportHeight;\n}\n/**\n * Find the DOM node for a hash fragment.\n * If `top` the page has to scroll to the top of the page. This mirrors the browser's behavior.\n * If the hash fragment is an id, the page has to scroll to the element with that id.\n * If the hash fragment is a name, the page has to scroll to the first element with that name.\n */ function getHashFragmentDomNode(hashFragment) {\n // If the hash fragment is `top` the page has to scroll to the top of the page.\n if (hashFragment === 'top') {\n return document.body;\n }\n // If the hash fragment is an id, the page has to scroll to the element with that id.\n return document.getElementById(hashFragment) ?? // If the hash fragment is a name, the page has to scroll to the first element with that name.\n document.getElementsByName(hashFragment)[0];\n}\nclass InnerScrollAndFocusHandler extends _react.default.Component {\n componentDidMount() {\n this.handlePotentialScroll();\n }\n componentDidUpdate() {\n // Because this property is overwritten in handlePotentialScroll it's fine to always run it when true as it'll be set to false for subsequent renders.\n if (this.props.focusAndScrollRef.apply) {\n this.handlePotentialScroll();\n }\n }\n render() {\n return this.props.children;\n }\n constructor(...args){\n super(...args), this.handlePotentialScroll = ()=>{\n // Handle scroll and focus, it's only applied once in the first useEffect that triggers that changed.\n const { focusAndScrollRef, segmentPath } = this.props;\n if (focusAndScrollRef.apply) {\n // segmentPaths is an array of segment paths that should be scrolled to\n // if the current segment path is not in the array, the scroll is not applied\n // unless the array is empty, in which case the scroll is always applied\n if (focusAndScrollRef.segmentPaths.length !== 0 && !focusAndScrollRef.segmentPaths.some((scrollRefSegmentPath)=>segmentPath.every((segment, index)=>(0, _matchsegments.matchSegment)(segment, scrollRefSegmentPath[index])))) {\n return;\n }\n let domNode = null;\n const hashFragment = focusAndScrollRef.hashFragment;\n if (hashFragment) {\n domNode = getHashFragmentDomNode(hashFragment);\n }\n // `findDOMNode` is tricky because it returns just the first child if the component is a fragment.\n // This already caused a bug where the first child was a in head.\n if (!domNode) {\n domNode = findDOMNode(this);\n }\n // If there is no DOM node this layout-router level is skipped. It'll be handled higher-up in the tree.\n if (!(domNode instanceof Element)) {\n return;\n }\n // Verify if the element is a HTMLElement and if we want to consider it for scroll behavior.\n // If the element is skipped, try to select the next sibling and try again.\n while(!(domNode instanceof HTMLElement) || shouldSkipElement(domNode)){\n if (true) {\n if (domNode.parentElement?.localName === 'head') {\n // TODO: We enter this state when metadata was rendered as part of the page or via Next.js.\n // This is always a bug in Next.js and caused by React hoisting metadata.\n // We need to replace `findDOMNode` in favor of Fragment Refs (when available) so that we can skip over metadata.\n }\n }\n // No siblings found that match the criteria are found, so handle scroll higher up in the tree instead.\n if (domNode.nextElementSibling === null) {\n return;\n }\n domNode = domNode.nextElementSibling;\n }\n // State is mutated to ensure that the focus and scroll is applied only once.\n focusAndScrollRef.apply = false;\n focusAndScrollRef.hashFragment = null;\n focusAndScrollRef.segmentPaths = [];\n (0, _disablesmoothscroll.disableSmoothScrollDuringRouteTransition)(()=>{\n // In case of hash scroll, we only need to scroll the element into view\n if (hashFragment) {\n ;\n domNode.scrollIntoView();\n return;\n }\n // Store the current viewport height because reading `clientHeight` causes a reflow,\n // and it won't change during this function.\n const htmlElement = document.documentElement;\n const viewportHeight = htmlElement.clientHeight;\n // If the element's top edge is already in the viewport, exit early.\n if (topOfElementInViewport(domNode, viewportHeight)) {\n return;\n }\n // Otherwise, try scrolling go the top of the document to be backward compatible with pages\n // scrollIntoView() called on `` element scrolls horizontally on chrome and firefox (that shouldn't happen)\n // We could use it to scroll horizontally following RTL but that also seems to be broken - it will always scroll left\n // scrollLeft = 0 also seems to ignore RTL and manually checking for RTL is too much hassle so we will scroll just vertically\n htmlElement.scrollTop = 0;\n // Scroll to domNode if domNode is not in viewport when scrolled to top of document\n if (!topOfElementInViewport(domNode, viewportHeight)) {\n // Scroll into view doesn't scroll horizontally by default when not needed\n ;\n domNode.scrollIntoView();\n }\n }, {\n // We will force layout by querying domNode position\n dontForceLayout: true,\n onlyHashChange: focusAndScrollRef.onlyHashChange\n });\n // Mutate after scrolling so that it can be read by `disableSmoothScrollDuringRouteTransition`\n focusAndScrollRef.onlyHashChange = false;\n // Set focus on the element\n domNode.focus();\n }\n };\n }\n}\nfunction ScrollAndFocusHandler({ segmentPath, children }) {\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw Object.defineProperty(new Error('invariant global layout router not mounted'), \"__NEXT_ERROR_CODE\", {\n value: \"E473\",\n enumerable: false,\n configurable: true\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerScrollAndFocusHandler, {\n segmentPath: segmentPath,\n focusAndScrollRef: context.focusAndScrollRef,\n children: children\n });\n}\n_c = ScrollAndFocusHandler;\n/**\n * InnerLayoutRouter handles rendering the provided segment based on the cache.\n */ function InnerLayoutRouter({ tree, segmentPath, debugNameContext, cacheNode: maybeCacheNode, params, url, isActive }) {\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n const parentNavPromises = (0, _react.useContext)(_hooksclientcontextsharedruntime.NavigationPromisesContext);\n if (!context) {\n throw Object.defineProperty(new Error('invariant global layout router not mounted'), \"__NEXT_ERROR_CODE\", {\n value: \"E473\",\n enumerable: false,\n configurable: true\n });\n }\n const cacheNode = maybeCacheNode !== null ? maybeCacheNode : // This should only be reachable for inactive/hidden segments, during\n // prerendering The active segment should always be consistent with the\n // CacheNode tree. Regardless, if we don't have a matching CacheNode, we\n // must suspend rather than render nothing, to prevent showing an\n // inconsistent route.\n (0, _react.use)(_unresolvedthenable.unresolvedThenable);\n // `rsc` represents the renderable node for this segment.\n // If this segment has a `prefetchRsc`, it's the statically prefetched data.\n // We should use that on initial render instead of `rsc`. Then we'll switch\n // to `rsc` when the dynamic response streams in.\n //\n // If no prefetch data is available, then we go straight to rendering `rsc`.\n const resolvedPrefetchRsc = cacheNode.prefetchRsc !== null ? cacheNode.prefetchRsc : cacheNode.rsc;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n const rsc = (0, _react.useDeferredValue)(cacheNode.rsc, resolvedPrefetchRsc);\n // `rsc` is either a React node or a promise for a React node, except we\n // special case `null` to represent that this segment's data is missing. If\n // it's a promise, we need to unwrap it so we can determine whether or not the\n // data is missing.\n let resolvedRsc;\n if ((0, _pprnavigations.isDeferredRsc)(rsc)) {\n const unwrappedRsc = (0, _react.use)(rsc);\n if (unwrappedRsc === null) {\n // If the promise was resolved to `null`, it means the data for this\n // segment was not returned by the server. Suspend indefinitely. When this\n // happens, the router is responsible for triggering a new state update to\n // un-suspend this segment.\n (0, _react.use)(_unresolvedthenable.unresolvedThenable);\n }\n resolvedRsc = unwrappedRsc;\n } else {\n // This is not a deferred RSC promise. Don't need to unwrap it.\n if (rsc === null) {\n (0, _react.use)(_unresolvedthenable.unresolvedThenable);\n }\n resolvedRsc = rsc;\n }\n // In dev, we create a NavigationPromisesContext containing the instrumented promises that provide\n // `useSelectedLayoutSegment` and `useSelectedLayoutSegments`.\n // Promises are cached outside of render to survive suspense retries.\n let navigationPromises = null;\n if (true) {\n const { createNestedLayoutNavigationPromises } = __webpack_require__(/*! ./navigation-devtools */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/navigation-devtools.js\");\n navigationPromises = createNestedLayoutNavigationPromises(tree, parentNavPromises);\n }\n let children = resolvedRsc;\n if (navigationPromises) {\n children = /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.NavigationPromisesContext.Provider, {\n value: navigationPromises,\n children: resolvedRsc\n });\n }\n children = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: {\n parentTree: tree,\n parentCacheNode: cacheNode,\n parentSegmentPath: segmentPath,\n parentParams: params,\n debugNameContext: debugNameContext,\n // TODO-APP: overriding of url for parallel routes\n url: url,\n isActive: isActive\n },\n children: children\n });\n return children;\n}\n_c1 = InnerLayoutRouter;\n/**\n * Renders suspense boundary with the provided \"loading\" property as the fallback.\n * If no loading property is provided it renders the children without a suspense boundary.\n */ function LoadingBoundary({ name, loading, children }) {\n // If loading is a promise, unwrap it. This happens in cases where we haven't\n // yet received the loading data from the server — which includes whether or\n // not this layout has a loading component at all.\n //\n // It's OK to suspend here instead of inside the fallback because this\n // promise will resolve simultaneously with the data for the segment itself.\n // So it will never suspend for longer than it would have if we didn't use\n // a Suspense fallback at all.\n let loadingModuleData;\n if (typeof loading === 'object' && loading !== null && typeof loading.then === 'function') {\n const promiseForLoading = loading;\n loadingModuleData = (0, _react.use)(promiseForLoading);\n } else {\n loadingModuleData = loading;\n }\n if (loadingModuleData) {\n const loadingRsc = loadingModuleData[0];\n const loadingStyles = loadingModuleData[1];\n const loadingScripts = loadingModuleData[2];\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, {\n name: name,\n fallback: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n loadingStyles,\n loadingScripts,\n loadingRsc\n ]\n }),\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c2 = LoadingBoundary;\nfunction OuterLayoutRouter({ parallelRouterKey, error, errorStyles, errorScripts, templateStyles, templateScripts, template, notFound, forbidden, unauthorized, segmentViewBoundaries }) {\n const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n if (!context) {\n throw Object.defineProperty(new Error('invariant expected layout router to be mounted'), \"__NEXT_ERROR_CODE\", {\n value: \"E56\",\n enumerable: false,\n configurable: true\n });\n }\n const { parentTree, parentCacheNode, parentSegmentPath, parentParams, url, isActive, debugNameContext } = context;\n // Get the CacheNode for this segment by reading it from the parent segment's\n // child map.\n const parentParallelRoutes = parentCacheNode.parallelRoutes;\n let segmentMap = parentParallelRoutes.get(parallelRouterKey);\n // If the parallel router cache node does not exist yet, create it.\n // This writes to the cache when there is no item in the cache yet. It never *overwrites* existing cache items which is why it's safe in concurrent mode.\n if (!segmentMap) {\n segmentMap = new Map();\n parentParallelRoutes.set(parallelRouterKey, segmentMap);\n }\n const parentTreeSegment = parentTree[0];\n const segmentPath = parentSegmentPath === null ? // the code. We should clean this up.\n [\n parallelRouterKey\n ] : parentSegmentPath.concat([\n parentTreeSegment,\n parallelRouterKey\n ]);\n // The \"state\" key of a segment is the one passed to React — it represents the\n // identity of the UI tree. Whenever the state key changes, the tree is\n // recreated and the state is reset. In the App Router model, search params do\n // not cause state to be lost, so two segments with the same segment path but\n // different search params should have the same state key.\n //\n // The \"cache\" key of a segment, however, *does* include the search params, if\n // it's possible that the segment accessed the search params on the server.\n // (This only applies to page segments; layout segments cannot access search\n // params on the server.)\n const activeTree = parentTree[1][parallelRouterKey];\n if (activeTree === undefined) {\n // Could not find a matching segment. The client tree is inconsistent with\n // the server tree. Suspend indefinitely; the router will have already\n // detected the inconsistency when handling the server response, and\n // triggered a refresh of the page to recover.\n (0, _react.use)(_unresolvedthenable.unresolvedThenable);\n }\n const activeSegment = activeTree[0];\n const activeStateKey = (0, _createroutercachekey.createRouterCacheKey)(activeSegment, true) // no search params\n ;\n // At each level of the route tree, not only do we render the currently\n // active segment — we also render the last N segments that were active at\n // this level inside a hidden boundary, to preserve their state\n // if or when the user navigates to them again.\n //\n // bfcacheEntry is a linked list of FlightRouterStates.\n let bfcacheEntry = (0, _bfcache.useRouterBFCache)(activeTree, activeStateKey);\n let children = [];\n do {\n const tree = bfcacheEntry.tree;\n const stateKey = bfcacheEntry.stateKey;\n const segment = tree[0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n // Read segment path from the parallel router cache node.\n const cacheNode = segmentMap.get(cacheKey) ?? null;\n /*\n - Error boundary\n - Only renders error boundary if error component is provided.\n - Rendered for each segment to ensure they have their own error state.\n - When gracefully degrade for bots, skip rendering error boundary.\n - Loading boundary\n - Only renders suspense boundary if loading components is provided.\n - Rendered for each segment to ensure they have their own loading state.\n - Passed to the router during rendering to ensure it can be immediately rendered when suspending on a Flight fetch.\n */ let segmentBoundaryTriggerNode = null;\n let segmentViewStateNode = null;\n if (true) {\n const { SegmentBoundaryTriggerNode, SegmentViewStateNode } = __webpack_require__(/*! ../../next-devtools/userspace/app/segment-explorer-node */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\");\n const pagePrefix = (0, _apppaths.normalizeAppPath)(url);\n segmentViewStateNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentViewStateNode, {\n page: pagePrefix\n }, pagePrefix);\n segmentBoundaryTriggerNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentBoundaryTriggerNode, {})\n });\n }\n let params = parentParams;\n if (Array.isArray(segment)) {\n // This segment contains a route param. Accumulate these as we traverse\n // down the router tree. The result represents the set of params that\n // the layout/page components are permitted to access below this point.\n const paramName = segment[0];\n const paramCacheKey = segment[1];\n const paramType = segment[2];\n const paramValue = (0, _routeparams.getParamValueFromCacheKey)(paramCacheKey, paramType);\n if (paramValue !== null) {\n params = {\n ...parentParams,\n [paramName]: paramValue\n };\n }\n }\n const debugName = getBoundaryDebugNameFromSegment(segment);\n // `debugNameContext` represents the nearest non-\"virtual\" parent segment.\n // `getBoundaryDebugNameFromSegment` returns undefined for virtual segments.\n // So if `debugName` is undefined, the context is passed through unchanged.\n const childDebugNameContext = debugName ?? debugNameContext;\n // In practical terms, clicking this name in the Suspense DevTools\n // should select the child slots of that layout.\n //\n // So the name we apply to the Activity boundary is actually based on\n // the nearest parent segments.\n //\n // We skip over \"virtual\" parents, i.e. ones inserted by Next.js that\n // don't correspond to application-defined code.\n const isVirtual = debugName === undefined;\n const debugNameToDisplay = isVirtual ? undefined : debugNameContext;\n // TODO: The loading module data for a segment is stored on the parent, then\n // applied to each of that parent segment's parallel route slots. In the\n // simple case where there's only one parallel route (the `children` slot),\n // this is no different from if the loading module data where stored on the\n // child directly. But I'm not sure this actually makes sense when there are\n // multiple parallel routes. It's not a huge issue because you always have\n // the option to define a narrower loading boundary for a particular slot. But\n // this sort of smells like an implementation accident to me.\n const loadingModuleData = parentCacheNode.loading;\n let child = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_approutercontextsharedruntime.TemplateContext.Provider, {\n value: /*#__PURE__*/ (0, _jsxruntime.jsxs)(ScrollAndFocusHandler, {\n segmentPath: segmentPath,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n errorComponent: error,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingBoundary, {\n name: debugNameToDisplay,\n loading: loadingModuleData,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary1.HTTPAccessFallbackBoundary, {\n notFound: notFound,\n forbidden: forbidden,\n unauthorized: unauthorized,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_redirectboundary.RedirectBoundary, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerLayoutRouter, {\n url: url,\n tree: tree,\n params: params,\n cacheNode: cacheNode,\n segmentPath: segmentPath,\n debugNameContext: childDebugNameContext,\n isActive: isActive && stateKey === activeStateKey\n }),\n segmentBoundaryTriggerNode\n ]\n })\n })\n })\n }),\n segmentViewStateNode\n ]\n }),\n children: [\n templateStyles,\n templateScripts,\n template\n ]\n }, stateKey);\n if (true) {\n const { SegmentStateProvider } = __webpack_require__(/*! ../../next-devtools/userspace/app/segment-explorer-node */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\");\n child = /*#__PURE__*/ (0, _jsxruntime.jsxs)(SegmentStateProvider, {\n children: [\n child,\n segmentViewBoundaries\n ]\n }, stateKey);\n }\n if (false) {}\n children.push(child);\n bfcacheEntry = bfcacheEntry.next;\n }while (bfcacheEntry !== null);\n return children;\n}\n_c3 = OuterLayoutRouter;\nfunction getBoundaryDebugNameFromSegment(segment) {\n if (segment === '/') {\n // Reached the root\n return '/';\n }\n if (typeof segment === 'string') {\n if (isVirtualLayout(segment)) {\n return undefined;\n } else {\n return segment + '/';\n }\n }\n const paramCacheKey = segment[1];\n return paramCacheKey + '/';\n}\nfunction isVirtualLayout(segment) {\n return(// in a more special way instead of checking the name, to distinguish them\n // from app-defined groups.\n segment === '(slot)');\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=layout-router.js.map\nvar _c, _c1, _c2, _c3;\n$RefreshReg$(_c, \"ScrollAndFocusHandler\");\n$RefreshReg$(_c1, \"InnerLayoutRouter\");\n$RefreshReg$(_c2, \"LoadingBoundary\");\n$RefreshReg$(_c3, \"OuterLayoutRouter\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9sYXlvdXQtcm91dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBc2NBOzs7ZUFBd0JBOzs7Ozs7NkVBbGJqQjsrRUFDYzsyREFLZDtnREFDNEI7MkNBQ0w7MkNBQ0Q7aURBQzRCOzhDQUN4Qjs0Q0FDVTtrREFDTjtxQ0FDcUI7c0NBQ3pCOzZEQUkxQjt5Q0FDbUM7NENBRVo7QUFFOUIsTUFBTUMsK0RBQ0pDLFVBQUFBLE9BQVEsQ0FDUkQsNERBQTREO0FBRTlELDRGQUE0RjtBQUM1Rjs7Q0FFQyxHQUNELFNBQVNFLFlBQ1BDLFFBQWdEO0lBRWhELCtCQUErQjtJQUMvQixJQUFJLEtBQTZCLEVBQUUsRUFBTztJQUUxQyx1R0FBdUc7SUFDdkcsa0NBQWtDO0lBQ2xDLE1BQU1FLCtCQUNKTCw2REFBNkRFLFdBQVc7SUFDMUUsT0FBT0csNkJBQTZCRjtBQUN0QztBQUVBLE1BQU1HLGlCQUFpQjtJQUNyQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFDRDs7Q0FFQyxHQUNELFNBQVNDLGtCQUFrQkMsT0FBb0I7SUFDN0Msa0dBQWtHO0lBQ2xHLDBGQUEwRjtJQUMxRixtREFBbUQ7SUFDbkQsSUFBSTtRQUFDO1FBQVU7S0FBUSxDQUFDQyxRQUFRLENBQUNDLGlCQUFpQkYsU0FBU0csUUFBUSxHQUFHO1FBQ3BFLE9BQU87SUFDVDtJQUVBLDJGQUEyRjtJQUMzRix3REFBd0Q7SUFDeEQsTUFBTUMsT0FBT0osUUFBUUsscUJBQXFCO0lBQzFDLE9BQU9QLGVBQWVRLEtBQUssQ0FBQyxDQUFDQyxPQUFT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Qzs7ZUFGd0JnQjtRQUsvQjtRQUVBLElBQUl0RixLQUFtQyxFQUFFLEVBVXhDO1FBRURaLFNBQVNpSSxJQUFJLENBQUNWO1FBRWR2QixlQUFlQSxhQUFha0MsSUFBSTtJQUNsQyxRQUFTbEMsaUJBQWlCLE1BQUs7SUFFL0IsT0FBT2hHO0FBQ1Q7TUF2UHdCcEM7QUF5UHhCLFNBQVN1SixnQ0FBZ0M3RyxPQUFnQjtJQUN2RCxJQUFJQSxZQUFZLEtBQUs7UUFDbkIsbUJBQW1CO1FBQ25CLE9BQU87SUFDVDtJQUNBLElBQUksT0FBT0EsWUFBWSxVQUFVO1FBQy9CLElBQUk2SCxnQkFBZ0I3SCxVQUFVO1lBQzVCLE9BQU9zRjtRQUNULE9BQU87WUFDTCxPQUFPdEYsVUFBVTtRQUNuQjtJQUNGO0lBQ0EsTUFBTXdHLGdCQUFnQnhHLE9BQU8sQ0FBQyxFQUFFO0lBQ2hDLE9BQU93RyxnQkFBZ0I7QUFDekI7QUFFQSxTQUFTcUIsZ0JBQWdCN0gsT0FBZTtJQUN0QyxPQUNFLG9FQUFvRSxNQUNNO0lBQzFFLDJCQUEyQjtJQUMzQkEsWUFBWTtBQUVoQiIsInNvdXJjZXMiOlsiL1VzZXJzL3NyYy9jbGllbnQvY29tcG9uZW50cy9sYXlvdXQtcm91dGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItdHlwZXMnXG5pbXBvcnQgdHlwZSB7IExvYWRpbmdNb2R1bGVEYXRhIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLXR5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgRmxpZ2h0U2VnbWVudFBhdGgsXG4gIFNlZ21lbnQsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci10eXBlcydcbmltcG9ydCB0eXBlIHsgRXJyb3JDb21wb25lbnQgfSBmcm9tICcuL2Vycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IHR5cGUgeyBGb2N1c0FuZFNjcm9sbFJlZiB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMnXG5cbmltcG9ydCBSZWFjdCwge1xuICBBY3Rpdml0eSxcbiAgdXNlQ29udGV4dCxcbiAgdXNlLFxuICBTdXNwZW5zZSxcbiAgdXNlRGVmZXJyZWRWYWx1ZSxcbiAgdHlwZSBKU1gsXG4gIHR5cGUgQWN0aXZpdHlQcm9wcyxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHtcbiAgTGF5b3V0Um91dGVyQ29udGV4dCxcbiAgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCxcbiAgVGVtcGxhdGVDb250ZXh0LFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IHVucmVzb2x2ZWRUaGVuYWJsZSB9IGZyb20gJy4vdW5yZXNvbHZlZC10aGVuYWJsZSdcbmltcG9ydCB7IEVycm9yQm91bmRhcnkgfSBmcm9tICcuL2Vycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IHsgbWF0Y2hTZWdtZW50IH0gZnJvbSAnLi9tYXRjaC1zZWdtZW50cydcbmltcG9ydCB7IGRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9kaXNhYmxlLXNtb290aC1zY3JvbGwnXG5pbXBvcnQgeyBSZWRpcmVjdEJvdW5kYXJ5IH0gZnJvbSAnLi9yZWRpcmVjdC1ib3VuZGFyeSdcbmltcG9ydCB7IEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5IH0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjay9lcnJvci1ib3VuZGFyeSdcbmltcG9ydCB7IGNyZWF0ZVJvdXRlckNhY2hlS2V5IH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9jcmVhdGUtcm91dGVyLWNhY2hlLWtleSdcbmltcG9ydCB7IHVzZVJvdXRlckJGQ2FjaGUsIHR5cGUgUm91dGVyQkZDYWNoZUVudHJ5IH0gZnJvbSAnLi9iZmNhY2hlJ1xuaW1wb3J0IHsgbm9ybWFsaXplQXBwUGF0aCB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocydcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25Qcm9taXNlc0NvbnRleHQsXG4gIHR5cGUgTmF2aWdhdGlvblByb21pc2VzLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZ2V0UGFyYW1WYWx1ZUZyb21DYWNoZUtleSB9IGZyb20gJy4uL3JvdXRlLXBhcmFtcydcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuaW1wb3J0IHsgaXNEZWZlcnJlZFJzYyB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcHByLW5hdmlnYXRpb25zJ1xuXG5jb25zdCBfX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUgPSAoXG4gIFJlYWN0RE9NIGFzIGFueVxuKS5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREVcblxuLy8gVE9ETy1BUFA6IFJlcGxhY2Ugd2l0aCBuZXcgUmVhY3QgQVBJIGZvciBmaW5kaW5nIGRvbSBub2RlcyB3aXRob3V0IGEgYHJlZmAgd2hlbiBhdmFpbGFibGVcbi8qKlxuICogV3JhcHMgUmVhY3RET00uZmluZERPTU5vZGUgd2l0aCBhZGRpdGlvbmFsIGxvZ2ljIHRvIGhpZGUgUmVhY3QgU3RyaWN0IE1vZGUgd2FybmluZ1xuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShcbiAgaW5zdGFuY2U6IFJlYWN0LlJlYWN0SW5zdGFuY2UgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBFbGVtZW50IHwgVGV4dCB8IG51bGwge1xuICAvLyBUcmVlLXNoYWtlIGZvciBzZXJ2ZXIgYnVuZGxlXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGxcblxuICAvLyBfX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUuZmluZERPTU5vZGUgaXMgbnVsbCBkdXJpbmcgbW9kdWxlIGluaXQuXG4gIC8vIFdlIG5lZWQgdG8gbGF6aWx5IHJlZmVyZW5jZSBpdC5cbiAgY29uc3QgaW50ZXJuYWxfcmVhY3RET01maW5kRE9NTm9kZSA9XG4gICAgX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLmZpbmRET01Ob2RlXG4gIHJldHVybiBpbnRlcm5hbF9yZWFjdERPTWZpbmRET01Ob2RlKGluc3RhbmNlKVxufVxuXG5jb25zdCByZWN0UHJvcGVydGllcyA9IFtcbiAgJ2JvdHRvbScsXG4gICdoZWlnaHQnLFxuICAnbGVmdCcsXG4gICdyaWdodCcsXG4gICd0b3AnLFxuICAnd2lkdGgnLFxuICAneCcsXG4gICd5Jyxcbl0gYXMgY29uc3Rcbi8qKlxuICogQ2hlY2sgaWYgYSBIVE1MRWxlbWVudCBpcyBoaWRkZW4gb3IgZml4ZWQvc3RpY2t5IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gIC8vIHdlIGlnbm9yZSBmaXhlZCBvciBzdGlja3kgcG9zaXRpb25lZCBlbGVtZW50cyBzaW5jZSB0aGV5J2xsIGxpa2VseSBwYXNzIHRoZSBcImluLXZpZXdwb3J0XCIgY2hlY2tcbiAgLy8gYW5kIHdpbGwgcmVzdWx0IGluIGEgc2l0dWF0aW9uIHdlIGJhaWwgb24gc2Nyb2xsIGJlY2F1c2Ugb2Ygc29tZXRoaW5nIGxpa2UgYSBmaXhlZCBuYXYsXG4gIC8vIGV2ZW4gdGhvdWdoIHRoZSBhY3R1YWwgcGFnZSBjb250ZW50IGlzIG9mZnNjcmVlblxuICBpZiAoWydzdGlja3knLCAnZml4ZWQnXS5pbmNsdWRlcyhnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBVc2VzIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGhpZGRlbiBpbnN0ZWFkIG9mIGBvZmZzZXRQYXJlbnRgXG4gIC8vIGJlY2F1c2UgYG9mZnNldFBhcmVudGAgZG9lc24ndCBjb25zaWRlciBkb2N1bWVudC9ib2R5XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIHJldHVybiByZWN0UHJvcGVydGllcy5ldmVyeSgoaXRlbSkgPT4gcmVjdFtpdGVtXSA9PT0gMClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdG9wIGNvcm5lciBvZiB0aGUgSFRNTEVsZW1lbnQgaXMgaW4gdGhlIHZpZXdwb3J0LlxuICovXG5mdW5jdGlvbiB0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB2aWV3cG9ydEhlaWdodDogbnVtYmVyKSB7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IHZpZXdwb3J0SGVpZ2h0XG59XG5cbi8qKlxuICogRmluZCB0aGUgRE9NIG5vZGUgZm9yIGEgaGFzaCBmcmFnbWVudC5cbiAqIElmIGB0b3BgIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZS4gVGhpcyBtaXJyb3JzIHRoZSBicm93c2VyJ3MgYmVoYXZpb3IuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhIG5hbWUsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aCB0aGF0IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50OiBzdHJpbmcpIHtcbiAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYHRvcGAgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLlxuICBpZiAoaGFzaEZyYWdtZW50ID09PSAndG9wJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cblxuICAvLyBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaEZyYWdtZW50KSA/P1xuICAgIC8vIElmIHRoZSBoYXNoIGZyYWdtZW50IGlzIGEgbmFtZSwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoYXQgbmFtZS5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShoYXNoRnJhZ21lbnQpWzBdXG4gIClcbn1cbmludGVyZmFjZSBTY3JvbGxBbmRGb2N1c0hhbmRsZXJQcm9wcyB7XG4gIGZvY3VzQW5kU2Nyb2xsUmVmOiBGb2N1c0FuZFNjcm9sbFJlZlxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxufVxuY2xhc3MgSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8U2Nyb2xsQW5kRm9jdXNIYW5kbGVyUHJvcHM+IHtcbiAgaGFuZGxlUG90ZW50aWFsU2Nyb2xsID0gKCkgPT4ge1xuICAgIC8vIEhhbmRsZSBzY3JvbGwgYW5kIGZvY3VzLCBpdCdzIG9ubHkgYXBwbGllZCBvbmNlIGluIHRoZSBmaXJzdCB1c2VFZmZlY3QgdGhhdCB0cmlnZ2VycyB0aGF0IGNoYW5nZWQuXG4gICAgY29uc3QgeyBmb2N1c0FuZFNjcm9sbFJlZiwgc2VnbWVudFBhdGggfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChmb2N1c0FuZFNjcm9sbFJlZi5hcHBseSkge1xuICAgICAgLy8gc2VnbWVudFBhdGhzIGlzIGFuIGFycmF5IG9mIHNlZ21lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgc2Nyb2xsZWQgdG9cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHNlZ21lbnQgcGF0aCBpcyBub3QgaW4gdGhlIGFycmF5LCB0aGUgc2Nyb2xsIGlzIG5vdCBhcHBsaWVkXG4gICAgICAvLyB1bmxlc3MgdGhlIGFycmF5IGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBzY3JvbGwgaXMgYWx3YXlzIGFwcGxpZWRcbiAgICAgIGlmIChcbiAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAhZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLnNvbWUoKHNjcm9sbFJlZlNlZ21lbnRQYXRoKSA9PlxuICAgICAgICAgIHNlZ21lbnRQYXRoLmV2ZXJ5KChzZWdtZW50LCBpbmRleCkgPT5cbiAgICAgICAgICAgIG1hdGNoU2VnbWVudChzZWdtZW50LCBzY3JvbGxSZWZTZWdtZW50UGF0aFtpbmRleF0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBkb21Ob2RlOlxuICAgICAgICB8IFJldHVyblR5cGU8dHlwZW9mIGdldEhhc2hGcmFnbWVudERvbU5vZGU+XG4gICAgICAgIHwgUmV0dXJuVHlwZTx0eXBlb2YgZmluZERPTU5vZGU+ID0gbnVsbFxuICAgICAgY29uc3QgaGFzaEZyYWdtZW50ID0gZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50XG5cbiAgICAgIGlmIChoYXNoRnJhZ21lbnQpIHtcbiAgICAgICAgZG9tTm9kZSA9IGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50KVxuICAgICAgfVxuXG4gICAgICAvLyBgZmluZERPTU5vZGVgIGlzIHRyaWNreSBiZWNhdXNlIGl0IHJldHVybnMganVzdCB0aGUgZmlyc3QgY2hpbGQgaWYgdGhlIGNvbXBvbmVudCBpcyBhIGZyYWdtZW50LlxuICAgICAgLy8gVGhpcyBhbHJlYWR5IGNhdXNlZCBhIGJ1ZyB3aGVyZSB0aGUgZmlyc3QgY2hpbGQgd2FzIGEgPGxpbmsvPiBpbiBoZWFkLlxuICAgICAgaWYgKCFkb21Ob2RlKSB7XG4gICAgICAgIGRvbU5vZGUgPSBmaW5kRE9NTm9kZSh0aGlzKVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyBET00gbm9kZSB0aGlzIGxheW91dC1yb3V0ZXIgbGV2ZWwgaXMgc2tpcHBlZC4gSXQnbGwgYmUgaGFuZGxlZCBoaWdoZXItdXAgaW4gdGhlIHRyZWUuXG4gICAgICBpZiAoIShkb21Ob2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmeSBpZiB0aGUgZWxlbWVudCBpcyBhIEhUTUxFbGVtZW50IGFuZCBpZiB3ZSB3YW50IHRvIGNvbnNpZGVyIGl0IGZvciBzY3JvbGwgYmVoYXZpb3IuXG4gICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBza2lwcGVkLCB0cnkgdG8gc2VsZWN0IHRoZSBuZXh0IHNpYmxpbmcgYW5kIHRyeSBhZ2Fpbi5cbiAgICAgIHdoaWxlICghKGRvbU5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgc2hvdWxkU2tpcEVsZW1lbnQoZG9tTm9kZSkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAoZG9tTm9kZS5wYXJlbnRFbGVtZW50Py5sb2NhbE5hbWUgPT09ICdoZWFkJykge1xuICAgICAgICAgICAgLy8gVE9ETzogV2UgZW50ZXIgdGhpcyBzdGF0ZSB3aGVuIG1ldGFkYXRhIHdhcyByZW5kZXJlZCBhcyBwYXJ0IG9mIHRoZSBwYWdlIG9yIHZpYSBOZXh0LmpzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbHdheXMgYSBidWcgaW4gTmV4dC5qcyBhbmQgY2F1c2VkIGJ5IFJlYWN0IGhvaXN0aW5nIG1ldGFkYXRhLlxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZXBsYWNlIGBmaW5kRE9NTm9kZWAgaW4gZmF2b3Igb2YgRnJhZ21lbnQgUmVmcyAod2hlbiBhdmFpbGFibGUpIHNvIHRoYXQgd2UgY2FuIHNraXAgb3ZlciBtZXRhZGF0YS5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBObyBzaWJsaW5ncyBmb3VuZCB0aGF0IG1hdGNoIHRoZSBjcml0ZXJpYSBhcmUgZm91bmQsIHNvIGhhbmRsZSBzY3JvbGwgaGlnaGVyIHVwIGluIHRoZSB0cmVlIGluc3RlYWQuXG4gICAgICAgIGlmIChkb21Ob2RlLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGRvbU5vZGUgPSBkb21Ob2RlLm5leHRFbGVtZW50U2libGluZ1xuICAgICAgfVxuXG4gICAgICAvLyBTdGF0ZSBpcyBtdXRhdGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmb2N1cyBhbmQgc2Nyb2xsIGlzIGFwcGxpZWQgb25seSBvbmNlLlxuICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuYXBwbHkgPSBmYWxzZVxuICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50ID0gbnVsbFxuICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzID0gW11cblxuICAgICAgZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbihcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaGFzaCBzY3JvbGwsIHdlIG9ubHkgbmVlZCB0byBzY3JvbGwgdGhlIGVsZW1lbnQgaW50byB2aWV3XG4gICAgICAgICAgaWYgKGhhc2hGcmFnbWVudCkge1xuICAgICAgICAgICAgOyhkb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxJbnRvVmlldygpXG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCB2aWV3cG9ydCBoZWlnaHQgYmVjYXVzZSByZWFkaW5nIGBjbGllbnRIZWlnaHRgIGNhdXNlcyBhIHJlZmxvdyxcbiAgICAgICAgICAvLyBhbmQgaXQgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBodG1sRWxlbWVudC5jbGllbnRIZWlnaHRcblxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50J3MgdG9wIGVkZ2UgaXMgYWxyZWFkeSBpbiB0aGUgdmlld3BvcnQsIGV4aXQgZWFybHkuXG4gICAgICAgICAgaWYgKHRvcE9mRWxlbWVudEluVmlld3BvcnQoZG9tTm9kZSBhcyBIVE1MRWxlbWVudCwgdmlld3BvcnRIZWlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIHRyeSBzY3JvbGxpbmcgZ28gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHBhZ2VzXG4gICAgICAgICAgLy8gc2Nyb2xsSW50b1ZpZXcoKSBjYWxsZWQgb24gYDxodG1sLz5gIGVsZW1lbnQgc2Nyb2xscyBob3Jpem9udGFsbHkgb24gY2hyb21lIGFuZCBmaXJlZm94ICh0aGF0IHNob3VsZG4ndCBoYXBwZW4pXG4gICAgICAgICAgLy8gV2UgY291bGQgdXNlIGl0IHRvIHNjcm9sbCBob3Jpem9udGFsbHkgZm9sbG93aW5nIFJUTCBidXQgdGhhdCBhbHNvIHNlZW1zIHRvIGJlIGJyb2tlbiAtIGl0IHdpbGwgYWx3YXlzIHNjcm9sbCBsZWZ0XG4gICAgICAgICAgLy8gc2Nyb2xsTGVmdCA9IDAgYWxzbyBzZWVtcyB0byBpZ25vcmUgUlRMIGFuZCBtYW51YWxseSBjaGVja2luZyBmb3IgUlRMIGlzIHRvbyBtdWNoIGhhc3NsZSBzbyB3ZSB3aWxsIHNjcm9sbCBqdXN0IHZlcnRpY2FsbHlcbiAgICAgICAgICBodG1sRWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cbiAgICAgICAgICAvLyBTY3JvbGwgdG8gZG9tTm9kZSBpZiBkb21Ob2RlIGlzIG5vdCBpbiB2aWV3cG9ydCB3aGVuIHNjcm9sbGVkIHRvIHRvcCBvZiBkb2N1bWVudFxuICAgICAgICAgIGlmICghdG9wT2ZFbGVtZW50SW5WaWV3cG9ydChkb21Ob2RlIGFzIEhUTUxFbGVtZW50LCB2aWV3cG9ydEhlaWdodCkpIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBpbnRvIHZpZXcgZG9lc24ndCBzY3JvbGwgaG9yaXpvbnRhbGx5IGJ5IGRlZmF1bHQgd2hlbiBub3QgbmVlZGVkXG4gICAgICAgICAgICA7KGRvbU5vZGUgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSB3aWxsIGZvcmNlIGxheW91dCBieSBxdWVyeWluZyBkb21Ob2RlIHBvc2l0aW9uXG4gICAgICAgICAgZG9udEZvcmNlTGF5b3V0OiB0cnVlLFxuICAgICAgICAgIG9ubHlIYXNoQ2hhbmdlOiBmb2N1c0FuZFNjcm9sbFJlZi5vbmx5SGFzaENoYW5nZSxcbiAgICAgICAgfVxuICAgICAgKVxuXG4gICAgICAvLyBNdXRhdGUgYWZ0ZXIgc2Nyb2xsaW5nIHNvIHRoYXQgaXQgY2FuIGJlIHJlYWQgYnkgYGRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb25gXG4gICAgICBmb2N1c0FuZFNjcm9sbFJlZi5vbmx5SGFzaENoYW5nZSA9IGZhbHNlXG5cbiAgICAgIC8vIFNldCBmb2N1cyBvbiB0aGUgZWxlbWVudFxuICAgICAgZG9tTm9kZS5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5oYW5kbGVQb3RlbnRpYWxTY3JvbGwoKVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIC8vIEJlY2F1c2UgdGhpcyBwcm9wZXJ0eSBpcyBvdmVyd3JpdHRlbiBpbiBoYW5kbGVQb3RlbnRpYWxTY3JvbGwgaXQncyBmaW5lIHRvIGFsd2F5cyBydW4gaXQgd2hlbiB0cnVlIGFzIGl0J2xsIGJlIHNldCB0byBmYWxzZSBmb3Igc3Vic2VxdWVudCByZW5kZXJzLlxuICAgIGlmICh0aGlzLnByb3BzLmZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5KSB7XG4gICAgICB0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbCgpXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuXG4gIH1cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQW5kRm9jdXNIYW5kbGVyKHtcbiAgc2VnbWVudFBhdGgsXG4gIGNoaWxkcmVuLFxufToge1xuICBzZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGhcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufSkge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0KVxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCBnbG9iYWwgbGF5b3V0IHJvdXRlciBub3QgbW91bnRlZCcpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxJbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlclxuICAgICAgc2VnbWVudFBhdGg9e3NlZ21lbnRQYXRofVxuICAgICAgZm9jdXNBbmRTY3JvbGxSZWY9e2NvbnRleHQuZm9jdXNBbmRTY3JvbGxSZWZ9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXI+XG4gIClcbn1cblxuLyoqXG4gKiBJbm5lckxheW91dFJvdXRlciBoYW5kbGVzIHJlbmRlcmluZyB0aGUgcHJvdmlkZWQgc2VnbWVudCBiYXNlZCBvbiB0aGUgY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIElubmVyTGF5b3V0Um91dGVyKHtcbiAgdHJlZSxcbiAgc2VnbWVudFBhdGgsXG4gIGRlYnVnTmFtZUNvbnRleHQsXG4gIGNhY2hlTm9kZTogbWF5YmVDYWNoZU5vZGUsXG4gIHBhcmFtcyxcbiAgdXJsLFxuICBpc0FjdGl2ZSxcbn06IHtcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgc2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoXG4gIGRlYnVnTmFtZUNvbnRleHQ6IHN0cmluZ1xuICBjYWNoZU5vZGU6IENhY2hlTm9kZSB8IG51bGxcbiAgcGFyYW1zOiBQYXJhbXNcbiAgdXJsOiBzdHJpbmdcbiAgaXNBY3RpdmU6IGJvb2xlYW5cbn0pIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dClcbiAgY29uc3QgcGFyZW50TmF2UHJvbWlzZXMgPSB1c2VDb250ZXh0KE5hdmlnYXRpb25Qcm9taXNlc0NvbnRleHQpXG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgZ2xvYmFsIGxheW91dCByb3V0ZXIgbm90IG1vdW50ZWQnKVxuICB9XG5cbiAgY29uc3QgY2FjaGVOb2RlID1cbiAgICBtYXliZUNhY2hlTm9kZSAhPT0gbnVsbFxuICAgICAgPyBtYXliZUNhY2hlTm9kZVxuICAgICAgOiAvLyBUaGlzIHNlZ21lbnQgaXMgbm90IGluIHRoZSBjYWNoZS4gU3VzcGVuZCBpbmRlZmluaXRlbHkuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hhYmxlIGZvciBpbmFjdGl2ZS9oaWRkZW4gc2VnbWVudHMsIGR1cmluZ1xuICAgICAgICAvLyBwcmVyZW5kZXJpbmcgVGhlIGFjdGl2ZSBzZWdtZW50IHNob3VsZCBhbHdheXMgYmUgY29uc2lzdGVudCB3aXRoIHRoZVxuICAgICAgICAvLyBDYWNoZU5vZGUgdHJlZS4gUmVnYXJkbGVzcywgaWYgd2UgZG9uJ3QgaGF2ZSBhIG1hdGNoaW5nIENhY2hlTm9kZSwgd2VcbiAgICAgICAgLy8gbXVzdCBzdXNwZW5kIHJhdGhlciB0aGFuIHJlbmRlciBub3RoaW5nLCB0byBwcmV2ZW50IHNob3dpbmcgYW5cbiAgICAgICAgLy8gaW5jb25zaXN0ZW50IHJvdXRlLlxuXG4gICAgICAgICh1c2UodW5yZXNvbHZlZFRoZW5hYmxlKSBhcyBuZXZlcilcblxuICAvLyBgcnNjYCByZXByZXNlbnRzIHRoZSByZW5kZXJhYmxlIG5vZGUgZm9yIHRoaXMgc2VnbWVudC5cblxuICAvLyBJZiB0aGlzIHNlZ21lbnQgaGFzIGEgYHByZWZldGNoUnNjYCwgaXQncyB0aGUgc3RhdGljYWxseSBwcmVmZXRjaGVkIGRhdGEuXG4gIC8vIFdlIHNob3VsZCB1c2UgdGhhdCBvbiBpbml0aWFsIHJlbmRlciBpbnN0ZWFkIG9mIGByc2NgLiBUaGVuIHdlJ2xsIHN3aXRjaFxuICAvLyB0byBgcnNjYCB3aGVuIHRoZSBkeW5hbWljIHJlc3BvbnNlIHN0cmVhbXMgaW4uXG4gIC8vXG4gIC8vIElmIG5vIHByZWZldGNoIGRhdGEgaXMgYXZhaWxhYmxlLCB0aGVuIHdlIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyBgcnNjYC5cbiAgY29uc3QgcmVzb2x2ZWRQcmVmZXRjaFJzYyA9XG4gICAgY2FjaGVOb2RlLnByZWZldGNoUnNjICE9PSBudWxsID8gY2FjaGVOb2RlLnByZWZldGNoUnNjIDogY2FjaGVOb2RlLnJzY1xuXG4gIC8vIFdlIHVzZSBgdXNlRGVmZXJyZWRWYWx1ZWAgdG8gaGFuZGxlIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSBwcmVmZXRjaGVkIGFuZFxuICAvLyBmaW5hbCB2YWx1ZXMuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcmV0dXJuZWQgb24gaW5pdGlhbCByZW5kZXIsIHRoZW4gaXRcbiAgLy8gcmUtcmVuZGVycyB3aXRoIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAgY29uc3QgcnNjOiBhbnkgPSB1c2VEZWZlcnJlZFZhbHVlKGNhY2hlTm9kZS5yc2MsIHJlc29sdmVkUHJlZmV0Y2hSc2MpXG5cbiAgLy8gYHJzY2AgaXMgZWl0aGVyIGEgUmVhY3Qgbm9kZSBvciBhIHByb21pc2UgZm9yIGEgUmVhY3Qgbm9kZSwgZXhjZXB0IHdlXG4gIC8vIHNwZWNpYWwgY2FzZSBgbnVsbGAgdG8gcmVwcmVzZW50IHRoYXQgdGhpcyBzZWdtZW50J3MgZGF0YSBpcyBtaXNzaW5nLiBJZlxuICAvLyBpdCdzIGEgcHJvbWlzZSwgd2UgbmVlZCB0byB1bndyYXAgaXQgc28gd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGVcbiAgLy8gZGF0YSBpcyBtaXNzaW5nLlxuICBsZXQgcmVzb2x2ZWRSc2M6IFJlYWN0LlJlYWN0Tm9kZVxuICBpZiAoaXNEZWZlcnJlZFJzYyhyc2MpKSB7XG4gICAgY29uc3QgdW53cmFwcGVkUnNjID0gdXNlKHJzYylcbiAgICBpZiAodW53cmFwcGVkUnNjID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGUgcHJvbWlzZSB3YXMgcmVzb2x2ZWQgdG8gYG51bGxgLCBpdCBtZWFucyB0aGUgZGF0YSBmb3IgdGhpc1xuICAgICAgLy8gc2VnbWVudCB3YXMgbm90IHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIuIFN1c3BlbmQgaW5kZWZpbml0ZWx5LiBXaGVuIHRoaXNcbiAgICAgIC8vIGhhcHBlbnMsIHRoZSByb3V0ZXIgaXMgcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgYSBuZXcgc3RhdGUgdXBkYXRlIHRvXG4gICAgICAvLyB1bi1zdXNwZW5kIHRoaXMgc2VnbWVudC5cbiAgICAgIHVzZSh1bnJlc29sdmVkVGhlbmFibGUpIGFzIG5ldmVyXG4gICAgfVxuICAgIHJlc29sdmVkUnNjID0gdW53cmFwcGVkUnNjXG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBub3QgYSBkZWZlcnJlZCBSU0MgcHJvbWlzZS4gRG9uJ3QgbmVlZCB0byB1bndyYXAgaXQuXG4gICAgaWYgKHJzYyA9PT0gbnVsbCkge1xuICAgICAgdXNlKHVucmVzb2x2ZWRUaGVuYWJsZSkgYXMgbmV2ZXJcbiAgICB9XG4gICAgcmVzb2x2ZWRSc2MgPSByc2NcbiAgfVxuXG4gIC8vIEluIGRldiwgd2UgY3JlYXRlIGEgTmF2aWdhdGlvblByb21pc2VzQ29udGV4dCBjb250YWluaW5nIHRoZSBpbnN0cnVtZW50ZWQgcHJvbWlzZXMgdGhhdCBwcm92aWRlXG4gIC8vIGB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRgIGFuZCBgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50c2AuXG4gIC8vIFByb21pc2VzIGFyZSBjYWNoZWQgb3V0c2lkZSBvZiByZW5kZXIgdG8gc3Vydml2ZSBzdXNwZW5zZSByZXRyaWVzLlxuICBsZXQgbmF2aWdhdGlvblByb21pc2VzOiBOYXZpZ2F0aW9uUHJvbWlzZXMgfCBudWxsID0gbnVsbFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IHsgY3JlYXRlTmVzdGVkTGF5b3V0TmF2aWdhdGlvblByb21pc2VzIH0gPVxuICAgICAgcmVxdWlyZSgnLi9uYXZpZ2F0aW9uLWRldnRvb2xzJykgYXMgdHlwZW9mIGltcG9ydCgnLi9uYXZpZ2F0aW9uLWRldnRvb2xzJylcblxuICAgIG5hdmlnYXRpb25Qcm9taXNlcyA9IGNyZWF0ZU5lc3RlZExheW91dE5hdmlnYXRpb25Qcm9taXNlcyhcbiAgICAgIHRyZWUsXG4gICAgICBwYXJlbnROYXZQcm9taXNlc1xuICAgIClcbiAgfVxuXG4gIGxldCBjaGlsZHJlbiA9IHJlc29sdmVkUnNjXG5cbiAgaWYgKG5hdmlnYXRpb25Qcm9taXNlcykge1xuICAgIGNoaWxkcmVuID0gKFxuICAgICAgPE5hdmlnYXRpb25Qcm9taXNlc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e25hdmlnYXRpb25Qcm9taXNlc30+XG4gICAgICAgIHtyZXNvbHZlZFJzY31cbiAgICAgIDwvTmF2aWdhdGlvblByb21pc2VzQ29udGV4dC5Qcm92aWRlcj5cbiAgICApXG4gIH1cblxuICBjaGlsZHJlbiA9IChcbiAgICAvLyBUaGUgbGF5b3V0IHJvdXRlciBjb250ZXh0IG5hcnJvd3MgZG93biB0cmVlIGFuZCBjaGlsZE5vZGVzIGF0IGVhY2ggbGV2ZWwuXG4gICAgPExheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIHBhcmVudFRyZWU6IHRyZWUsXG4gICAgICAgIHBhcmVudENhY2hlTm9kZTogY2FjaGVOb2RlLFxuICAgICAgICBwYXJlbnRTZWdtZW50UGF0aDogc2VnbWVudFBhdGgsXG4gICAgICAgIHBhcmVudFBhcmFtczogcGFyYW1zLFxuICAgICAgICBkZWJ1Z05hbWVDb250ZXh0OiBkZWJ1Z05hbWVDb250ZXh0LFxuXG4gICAgICAgIC8vIFRPRE8tQVBQOiBvdmVycmlkaW5nIG9mIHVybCBmb3IgcGFyYWxsZWwgcm91dGVzXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBpc0FjdGl2ZTogaXNBY3RpdmUsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0xheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXI+XG4gIClcblxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBSZW5kZXJzIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGggdGhlIHByb3ZpZGVkIFwibG9hZGluZ1wiIHByb3BlcnR5IGFzIHRoZSBmYWxsYmFjay5cbiAqIElmIG5vIGxvYWRpbmcgcHJvcGVydHkgaXMgcHJvdmlkZWQgaXQgcmVuZGVycyB0aGUgY2hpbGRyZW4gd2l0aG91dCBhIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiBMb2FkaW5nQm91bmRhcnkoe1xuICBuYW1lLFxuICBsb2FkaW5nLFxuICBjaGlsZHJlbixcbn06IHtcbiAgbmFtZTogQWN0aXZpdHlQcm9wc1snbmFtZSddXG4gIGxvYWRpbmc6IExvYWRpbmdNb2R1bGVEYXRhIHwgUHJvbWlzZTxMb2FkaW5nTW9kdWxlRGF0YT5cbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufSk6IEpTWC5FbGVtZW50IHtcbiAgLy8gSWYgbG9hZGluZyBpcyBhIHByb21pc2UsIHVud3JhcCBpdC4gVGhpcyBoYXBwZW5zIGluIGNhc2VzIHdoZXJlIHdlIGhhdmVuJ3RcbiAgLy8geWV0IHJlY2VpdmVkIHRoZSBsb2FkaW5nIGRhdGEgZnJvbSB0aGUgc2VydmVyIOKAlCB3aGljaCBpbmNsdWRlcyB3aGV0aGVyIG9yXG4gIC8vIG5vdCB0aGlzIGxheW91dCBoYXMgYSBsb2FkaW5nIGNvbXBvbmVudCBhdCBhbGwuXG4gIC8vXG4gIC8vIEl0J3MgT0sgdG8gc3VzcGVuZCBoZXJlIGluc3RlYWQgb2YgaW5zaWRlIHRoZSBmYWxsYmFjayBiZWNhdXNlIHRoaXNcbiAgLy8gcHJvbWlzZSB3aWxsIHJlc29sdmUgc2ltdWx0YW5lb3VzbHkgd2l0aCB0aGUgZGF0YSBmb3IgdGhlIHNlZ21lbnQgaXRzZWxmLlxuICAvLyBTbyBpdCB3aWxsIG5ldmVyIHN1c3BlbmQgZm9yIGxvbmdlciB0aGFuIGl0IHdvdWxkIGhhdmUgaWYgd2UgZGlkbid0IHVzZVxuICAvLyBhIFN1c3BlbnNlIGZhbGxiYWNrIGF0IGFsbC5cbiAgbGV0IGxvYWRpbmdNb2R1bGVEYXRhXG4gIGlmIChcbiAgICB0eXBlb2YgbG9hZGluZyA9PT0gJ29iamVjdCcgJiZcbiAgICBsb2FkaW5nICE9PSBudWxsICYmXG4gICAgdHlwZW9mIChsb2FkaW5nIGFzIGFueSkudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBjb25zdCBwcm9taXNlRm9yTG9hZGluZyA9IGxvYWRpbmcgYXMgUHJvbWlzZTxMb2FkaW5nTW9kdWxlRGF0YT5cbiAgICBsb2FkaW5nTW9kdWxlRGF0YSA9IHVzZShwcm9taXNlRm9yTG9hZGluZylcbiAgfSBlbHNlIHtcbiAgICBsb2FkaW5nTW9kdWxlRGF0YSA9IGxvYWRpbmcgYXMgTG9hZGluZ01vZHVsZURhdGFcbiAgfVxuXG4gIGlmIChsb2FkaW5nTW9kdWxlRGF0YSkge1xuICAgIGNvbnN0IGxvYWRpbmdSc2MgPSBsb2FkaW5nTW9kdWxlRGF0YVswXVxuICAgIGNvbnN0IGxvYWRpbmdTdHlsZXMgPSBsb2FkaW5nTW9kdWxlRGF0YVsxXVxuICAgIGNvbnN0IGxvYWRpbmdTY3JpcHRzID0gbG9hZGluZ01vZHVsZURhdGFbMl1cbiAgICByZXR1cm4gKFxuICAgICAgPFN1c3BlbnNlXG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGZhbGxiYWNrPXtcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2xvYWRpbmdTdHlsZXN9XG4gICAgICAgICAgICB7bG9hZGluZ1NjcmlwdHN9XG4gICAgICAgICAgICB7bG9hZGluZ1JzY31cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1N1c3BlbnNlPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiA8PntjaGlsZHJlbn08Lz5cbn1cblxuLyoqXG4gKiBPdXRlckxheW91dFJvdXRlciBoYW5kbGVzIHRoZSBjdXJyZW50IHNlZ21lbnQgYXMgd2VsbCBhcyA8T2Zmc2NyZWVuPiByZW5kZXJpbmcgb2Ygb3RoZXIgc2VnbWVudHMuXG4gKiBJdCBjYW4gYmUgcmVuZGVyZWQgbmV4dCB0byBlYWNoIG90aGVyIHdpdGggYSBkaWZmZXJlbnQgYHBhcmFsbGVsUm91dGVyS2V5YCwgYWxsb3dpbmcgZm9yIFBhcmFsbGVsIHJvdXRlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gT3V0ZXJMYXlvdXRSb3V0ZXIoe1xuICBwYXJhbGxlbFJvdXRlcktleSxcbiAgZXJyb3IsXG4gIGVycm9yU3R5bGVzLFxuICBlcnJvclNjcmlwdHMsXG4gIHRlbXBsYXRlU3R5bGVzLFxuICB0ZW1wbGF0ZVNjcmlwdHMsXG4gIHRlbXBsYXRlLFxuICBub3RGb3VuZCxcbiAgZm9yYmlkZGVuLFxuICB1bmF1dGhvcml6ZWQsXG4gIHNlZ21lbnRWaWV3Qm91bmRhcmllcyxcbn06IHtcbiAgcGFyYWxsZWxSb3V0ZXJLZXk6IHN0cmluZ1xuICBlcnJvcjogRXJyb3JDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgZXJyb3JTdHlsZXM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICBlcnJvclNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICB0ZW1wbGF0ZVN0eWxlczogUmVhY3QuUmVhY3ROb2RlIHwgdW5kZWZpbmVkXG4gIHRlbXBsYXRlU2NyaXB0czogUmVhY3QuUmVhY3ROb2RlIHwgdW5kZWZpbmVkXG4gIHRlbXBsYXRlOiBSZWFjdC5SZWFjdE5vZGVcbiAgbm90Rm91bmQ6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICBmb3JiaWRkZW46IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICB1bmF1dGhvcml6ZWQ6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxuICBzZWdtZW50Vmlld0JvdW5kYXJpZXM/OiBSZWFjdC5SZWFjdE5vZGVcbn0pIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTGF5b3V0Um91dGVyQ29udGV4dClcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgZXhwZWN0ZWQgbGF5b3V0IHJvdXRlciB0byBiZSBtb3VudGVkJylcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBwYXJlbnRUcmVlLFxuICAgIHBhcmVudENhY2hlTm9kZSxcbiAgICBwYXJlbnRTZWdtZW50UGF0aCxcbiAgICBwYXJlbnRQYXJhbXMsXG4gICAgdXJsLFxuICAgIGlzQWN0aXZlLFxuICAgIGRlYnVnTmFtZUNvbnRleHQsXG4gIH0gPSBjb250ZXh0XG5cbiAgLy8gR2V0IHRoZSBDYWNoZU5vZGUgZm9yIHRoaXMgc2VnbWVudCBieSByZWFkaW5nIGl0IGZyb20gdGhlIHBhcmVudCBzZWdtZW50J3NcbiAgLy8gY2hpbGQgbWFwLlxuICBjb25zdCBwYXJlbnRQYXJhbGxlbFJvdXRlcyA9IHBhcmVudENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlc1xuICBsZXQgc2VnbWVudE1hcCA9IHBhcmVudFBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlcktleSlcbiAgLy8gSWYgdGhlIHBhcmFsbGVsIHJvdXRlciBjYWNoZSBub2RlIGRvZXMgbm90IGV4aXN0IHlldCwgY3JlYXRlIGl0LlxuICAvLyBUaGlzIHdyaXRlcyB0byB0aGUgY2FjaGUgd2hlbiB0aGVyZSBpcyBubyBpdGVtIGluIHRoZSBjYWNoZSB5ZXQuIEl0IG5ldmVyICpvdmVyd3JpdGVzKiBleGlzdGluZyBjYWNoZSBpdGVtcyB3aGljaCBpcyB3aHkgaXQncyBzYWZlIGluIGNvbmN1cnJlbnQgbW9kZS5cbiAgaWYgKCFzZWdtZW50TWFwKSB7XG4gICAgc2VnbWVudE1hcCA9IG5ldyBNYXAoKVxuICAgIHBhcmVudFBhcmFsbGVsUm91dGVzLnNldChwYXJhbGxlbFJvdXRlcktleSwgc2VnbWVudE1hcClcbiAgfVxuICBjb25zdCBwYXJlbnRUcmVlU2VnbWVudCA9IHBhcmVudFRyZWVbMF1cbiAgY29uc3Qgc2VnbWVudFBhdGggPVxuICAgIHBhcmVudFNlZ21lbnRQYXRoID09PSBudWxsXG4gICAgICA/IC8vIFRPRE86IFRoZSByb290IHNlZ21lbnQgdmFsdWUgaXMgY3VycmVudGx5IG9taXR0ZWQgZnJvbSB0aGUgc2VnbWVudFxuICAgICAgICAvLyBwYXRoLiBUaGlzIGhhcyBsZWQgdG8gYSBidW5jaCBvZiBzcGVjaWFsIGNhc2VzIHNjYXR0ZXJlZCB0aHJvdWdob3V0XG4gICAgICAgIC8vIHRoZSBjb2RlLiBXZSBzaG91bGQgY2xlYW4gdGhpcyB1cC5cbiAgICAgICAgW3BhcmFsbGVsUm91dGVyS2V5XVxuICAgICAgOiBwYXJlbnRTZWdtZW50UGF0aC5jb25jYXQoW3BhcmVudFRyZWVTZWdtZW50LCBwYXJhbGxlbFJvdXRlcktleV0pXG5cbiAgLy8gVGhlIFwic3RhdGVcIiBrZXkgb2YgYSBzZWdtZW50IGlzIHRoZSBvbmUgcGFzc2VkIHRvIFJlYWN0IOKAlCBpdCByZXByZXNlbnRzIHRoZVxuICAvLyBpZGVudGl0eSBvZiB0aGUgVUkgdHJlZS4gV2hlbmV2ZXIgdGhlIHN0YXRlIGtleSBjaGFuZ2VzLCB0aGUgdHJlZSBpc1xuICAvLyByZWNyZWF0ZWQgYW5kIHRoZSBzdGF0ZSBpcyByZXNldC4gSW4gdGhlIEFwcCBSb3V0ZXIgbW9kZWwsIHNlYXJjaCBwYXJhbXMgZG9cbiAgLy8gbm90IGNhdXNlIHN0YXRlIHRvIGJlIGxvc3QsIHNvIHR3byBzZWdtZW50cyB3aXRoIHRoZSBzYW1lIHNlZ21lbnQgcGF0aCBidXRcbiAgLy8gZGlmZmVyZW50IHNlYXJjaCBwYXJhbXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc3RhdGUga2V5LlxuICAvL1xuICAvLyBUaGUgXCJjYWNoZVwiIGtleSBvZiBhIHNlZ21lbnQsIGhvd2V2ZXIsICpkb2VzKiBpbmNsdWRlIHRoZSBzZWFyY2ggcGFyYW1zLCBpZlxuICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHNlZ21lbnQgYWNjZXNzZWQgdGhlIHNlYXJjaCBwYXJhbXMgb24gdGhlIHNlcnZlci5cbiAgLy8gKFRoaXMgb25seSBhcHBsaWVzIHRvIHBhZ2Ugc2VnbWVudHM7IGxheW91dCBzZWdtZW50cyBjYW5ub3QgYWNjZXNzIHNlYXJjaFxuICAvLyBwYXJhbXMgb24gdGhlIHNlcnZlci4pXG4gIGNvbnN0IGFjdGl2ZVRyZWUgPSBwYXJlbnRUcmVlWzFdW3BhcmFsbGVsUm91dGVyS2V5XVxuICBpZiAoYWN0aXZlVHJlZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyBzZWdtZW50LiBUaGUgY2xpZW50IHRyZWUgaXMgaW5jb25zaXN0ZW50IHdpdGhcbiAgICAvLyB0aGUgc2VydmVyIHRyZWUuIFN1c3BlbmQgaW5kZWZpbml0ZWx5OyB0aGUgcm91dGVyIHdpbGwgaGF2ZSBhbHJlYWR5XG4gICAgLy8gZGV0ZWN0ZWQgdGhlIGluY29uc2lzdGVuY3kgd2hlbiBoYW5kbGluZyB0aGUgc2VydmVyIHJlc3BvbnNlLCBhbmRcbiAgICAvLyB0cmlnZ2VyZWQgYSByZWZyZXNoIG9mIHRoZSBwYWdlIHRvIHJlY292ZXIuXG4gICAgdXNlKHVucmVzb2x2ZWRUaGVuYWJsZSkgYXMgbmV2ZXJcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZVNlZ21lbnQgPSBhY3RpdmVUcmVlWzBdXG4gIGNvbnN0IGFjdGl2ZVN0YXRlS2V5ID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoYWN0aXZlU2VnbWVudCwgdHJ1ZSkgLy8gbm8gc2VhcmNoIHBhcmFtc1xuXG4gIC8vIEF0IGVhY2ggbGV2ZWwgb2YgdGhlIHJvdXRlIHRyZWUsIG5vdCBvbmx5IGRvIHdlIHJlbmRlciB0aGUgY3VycmVudGx5XG4gIC8vIGFjdGl2ZSBzZWdtZW50IOKAlCB3ZSBhbHNvIHJlbmRlciB0aGUgbGFzdCBOIHNlZ21lbnRzIHRoYXQgd2VyZSBhY3RpdmUgYXRcbiAgLy8gdGhpcyBsZXZlbCBpbnNpZGUgYSBoaWRkZW4gPEFjdGl2aXR5PiBib3VuZGFyeSwgdG8gcHJlc2VydmUgdGhlaXIgc3RhdGVcbiAgLy8gaWYgb3Igd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgdG8gdGhlbSBhZ2Fpbi5cbiAgLy9cbiAgLy8gYmZjYWNoZUVudHJ5IGlzIGEgbGlua2VkIGxpc3Qgb2YgRmxpZ2h0Um91dGVyU3RhdGVzLlxuICBsZXQgYmZjYWNoZUVudHJ5OiBSb3V0ZXJCRkNhY2hlRW50cnkgfCBudWxsID0gdXNlUm91dGVyQkZDYWNoZShcbiAgICBhY3RpdmVUcmVlLFxuICAgIGFjdGl2ZVN0YXRlS2V5XG4gIClcbiAgbGV0IGNoaWxkcmVuOiBBcnJheTxSZWFjdC5SZWFjdE5vZGU+ID0gW11cbiAgZG8ge1xuICAgIGNvbnN0IHRyZWUgPSBiZmNhY2hlRW50cnkudHJlZVxuICAgIGNvbnN0IHN0YXRlS2V5ID0gYmZjYWNoZUVudHJ5LnN0YXRlS2V5XG4gICAgY29uc3Qgc2VnbWVudCA9IHRyZWVbMF1cbiAgICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHNlZ21lbnQpXG5cbiAgICAvLyBSZWFkIHNlZ21lbnQgcGF0aCBmcm9tIHRoZSBwYXJhbGxlbCByb3V0ZXIgY2FjaGUgbm9kZS5cbiAgICBjb25zdCBjYWNoZU5vZGUgPSBzZWdtZW50TWFwLmdldChjYWNoZUtleSkgPz8gbnVsbFxuXG4gICAgLypcbiAgICAtIEVycm9yIGJvdW5kYXJ5XG4gICAgICAtIE9ubHkgcmVuZGVycyBlcnJvciBib3VuZGFyeSBpZiBlcnJvciBjb21wb25lbnQgaXMgcHJvdmlkZWQuXG4gICAgICAtIFJlbmRlcmVkIGZvciBlYWNoIHNlZ21lbnQgdG8gZW5zdXJlIHRoZXkgaGF2ZSB0aGVpciBvd24gZXJyb3Igc3RhdGUuXG4gICAgICAtIFdoZW4gZ3JhY2VmdWxseSBkZWdyYWRlIGZvciBib3RzLCBza2lwIHJlbmRlcmluZyBlcnJvciBib3VuZGFyeS5cbiAgICAtIExvYWRpbmcgYm91bmRhcnlcbiAgICAgIC0gT25seSByZW5kZXJzIHN1c3BlbnNlIGJvdW5kYXJ5IGlmIGxvYWRpbmcgY29tcG9uZW50cyBpcyBwcm92aWRlZC5cbiAgICAgIC0gUmVuZGVyZWQgZm9yIGVhY2ggc2VnbWVudCB0byBlbnN1cmUgdGhleSBoYXZlIHRoZWlyIG93biBsb2FkaW5nIHN0YXRlLlxuICAgICAgLSBQYXNzZWQgdG8gdGhlIHJvdXRlciBkdXJpbmcgcmVuZGVyaW5nIHRvIGVuc3VyZSBpdCBjYW4gYmUgaW1tZWRpYXRlbHkgcmVuZGVyZWQgd2hlbiBzdXNwZW5kaW5nIG9uIGEgRmxpZ2h0IGZldGNoLlxuICAqL1xuXG4gICAgbGV0IHNlZ21lbnRCb3VuZGFyeVRyaWdnZXJOb2RlOiBSZWFjdC5SZWFjdE5vZGUgPSBudWxsXG4gICAgbGV0IHNlZ21lbnRWaWV3U3RhdGVOb2RlOiBSZWFjdC5SZWFjdE5vZGUgPSBudWxsXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IHsgU2VnbWVudEJvdW5kYXJ5VHJpZ2dlck5vZGUsIFNlZ21lbnRWaWV3U3RhdGVOb2RlIH0gPVxuICAgICAgICByZXF1aXJlKCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvc2VnbWVudC1leHBsb3Jlci1ub2RlJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3NlZ21lbnQtZXhwbG9yZXItbm9kZScpXG5cbiAgICAgIGNvbnN0IHBhZ2VQcmVmaXggPSBub3JtYWxpemVBcHBQYXRoKHVybClcbiAgICAgIHNlZ21lbnRWaWV3U3RhdGVOb2RlID0gKFxuICAgICAgICA8U2VnbWVudFZpZXdTdGF0ZU5vZGUga2V5PXtwYWdlUHJlZml4fSBwYWdlPXtwYWdlUHJlZml4fSAvPlxuICAgICAgKVxuXG4gICAgICBzZWdtZW50Qm91bmRhcnlUcmlnZ2VyTm9kZSA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U2VnbWVudEJvdW5kYXJ5VHJpZ2dlck5vZGUgLz5cbiAgICAgICAgPC8+XG4gICAgICApXG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IHBhcmVudFBhcmFtc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlZ21lbnQpKSB7XG4gICAgICAvLyBUaGlzIHNlZ21lbnQgY29udGFpbnMgYSByb3V0ZSBwYXJhbS4gQWNjdW11bGF0ZSB0aGVzZSBhcyB3ZSB0cmF2ZXJzZVxuICAgICAgLy8gZG93biB0aGUgcm91dGVyIHRyZWUuIFRoZSByZXN1bHQgcmVwcmVzZW50cyB0aGUgc2V0IG9mIHBhcmFtcyB0aGF0XG4gICAgICAvLyB0aGUgbGF5b3V0L3BhZ2UgY29tcG9uZW50cyBhcmUgcGVybWl0dGVkIHRvIGFjY2VzcyBiZWxvdyB0aGlzIHBvaW50LlxuICAgICAgY29uc3QgcGFyYW1OYW1lID0gc2VnbWVudFswXVxuICAgICAgY29uc3QgcGFyYW1DYWNoZUtleSA9IHNlZ21lbnRbMV1cbiAgICAgIGNvbnN0IHBhcmFtVHlwZSA9IHNlZ21lbnRbMl1cbiAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBnZXRQYXJhbVZhbHVlRnJvbUNhY2hlS2V5KHBhcmFtQ2FjaGVLZXksIHBhcmFtVHlwZSlcbiAgICAgIGlmIChwYXJhbVZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHBhcmFtcyA9IHtcbiAgICAgICAgICAuLi5wYXJlbnRQYXJhbXMsXG4gICAgICAgICAgW3BhcmFtTmFtZV06IHBhcmFtVmFsdWUsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZWJ1Z05hbWUgPSBnZXRCb3VuZGFyeURlYnVnTmFtZUZyb21TZWdtZW50KHNlZ21lbnQpXG4gICAgLy8gYGRlYnVnTmFtZUNvbnRleHRgIHJlcHJlc2VudHMgdGhlIG5lYXJlc3Qgbm9uLVwidmlydHVhbFwiIHBhcmVudCBzZWdtZW50LlxuICAgIC8vIGBnZXRCb3VuZGFyeURlYnVnTmFtZUZyb21TZWdtZW50YCByZXR1cm5zIHVuZGVmaW5lZCBmb3IgdmlydHVhbCBzZWdtZW50cy5cbiAgICAvLyBTbyBpZiBgZGVidWdOYW1lYCBpcyB1bmRlZmluZWQsIHRoZSBjb250ZXh0IGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC5cbiAgICBjb25zdCBjaGlsZERlYnVnTmFtZUNvbnRleHQgPSBkZWJ1Z05hbWUgPz8gZGVidWdOYW1lQ29udGV4dFxuXG4gICAgLy8gSW4gcHJhY3RpY2FsIHRlcm1zLCBjbGlja2luZyB0aGlzIG5hbWUgaW4gdGhlIFN1c3BlbnNlIERldlRvb2xzXG4gICAgLy8gc2hvdWxkIHNlbGVjdCB0aGUgY2hpbGQgc2xvdHMgb2YgdGhhdCBsYXlvdXQuXG4gICAgLy9cbiAgICAvLyBTbyB0aGUgbmFtZSB3ZSBhcHBseSB0byB0aGUgQWN0aXZpdHkgYm91bmRhcnkgaXMgYWN0dWFsbHkgYmFzZWQgb25cbiAgICAvLyB0aGUgbmVhcmVzdCBwYXJlbnQgc2VnbWVudHMuXG4gICAgLy9cbiAgICAvLyBXZSBza2lwIG92ZXIgXCJ2aXJ0dWFsXCIgcGFyZW50cywgaS5lLiBvbmVzIGluc2VydGVkIGJ5IE5leHQuanMgdGhhdFxuICAgIC8vIGRvbid0IGNvcnJlc3BvbmQgdG8gYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlLlxuICAgIGNvbnN0IGlzVmlydHVhbCA9IGRlYnVnTmFtZSA9PT0gdW5kZWZpbmVkXG4gICAgY29uc3QgZGVidWdOYW1lVG9EaXNwbGF5ID0gaXNWaXJ0dWFsID8gdW5kZWZpbmVkIDogZGVidWdOYW1lQ29udGV4dFxuXG4gICAgLy8gVE9ETzogVGhlIGxvYWRpbmcgbW9kdWxlIGRhdGEgZm9yIGEgc2VnbWVudCBpcyBzdG9yZWQgb24gdGhlIHBhcmVudCwgdGhlblxuICAgIC8vIGFwcGxpZWQgdG8gZWFjaCBvZiB0aGF0IHBhcmVudCBzZWdtZW50J3MgcGFyYWxsZWwgcm91dGUgc2xvdHMuIEluIHRoZVxuICAgIC8vIHNpbXBsZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgb25seSBvbmUgcGFyYWxsZWwgcm91dGUgKHRoZSBgY2hpbGRyZW5gIHNsb3QpLFxuICAgIC8vIHRoaXMgaXMgbm8gZGlmZmVyZW50IGZyb20gaWYgdGhlIGxvYWRpbmcgbW9kdWxlIGRhdGEgd2hlcmUgc3RvcmVkIG9uIHRoZVxuICAgIC8vIGNoaWxkIGRpcmVjdGx5LiBCdXQgSSdtIG5vdCBzdXJlIHRoaXMgYWN0dWFsbHkgbWFrZXMgc2Vuc2Ugd2hlbiB0aGVyZSBhcmVcbiAgICAvLyBtdWx0aXBsZSBwYXJhbGxlbCByb3V0ZXMuIEl0J3Mgbm90IGEgaHVnZSBpc3N1ZSBiZWNhdXNlIHlvdSBhbHdheXMgaGF2ZVxuICAgIC8vIHRoZSBvcHRpb24gdG8gZGVmaW5lIGEgbmFycm93ZXIgbG9hZGluZyBib3VuZGFyeSBmb3IgYSBwYXJ0aWN1bGFyIHNsb3QuIEJ1dFxuICAgIC8vIHRoaXMgc29ydCBvZiBzbWVsbHMgbGlrZSBhbiBpbXBsZW1lbnRhdGlvbiBhY2NpZGVudCB0byBtZS5cbiAgICBjb25zdCBsb2FkaW5nTW9kdWxlRGF0YSA9IHBhcmVudENhY2hlTm9kZS5sb2FkaW5nXG4gICAgbGV0IGNoaWxkID0gKFxuICAgICAgPFRlbXBsYXRlQ29udGV4dC5Qcm92aWRlclxuICAgICAgICBrZXk9e3N0YXRlS2V5fVxuICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgPFNjcm9sbEFuZEZvY3VzSGFuZGxlciBzZWdtZW50UGF0aD17c2VnbWVudFBhdGh9PlxuICAgICAgICAgICAgPEVycm9yQm91bmRhcnlcbiAgICAgICAgICAgICAgZXJyb3JDb21wb25lbnQ9e2Vycm9yfVxuICAgICAgICAgICAgICBlcnJvclN0eWxlcz17ZXJyb3JTdHlsZXN9XG4gICAgICAgICAgICAgIGVycm9yU2NyaXB0cz17ZXJyb3JTY3JpcHRzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ0JvdW5kYXJ5XG4gICAgICAgICAgICAgICAgbmFtZT17ZGVidWdOYW1lVG9EaXNwbGF5fVxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmdNb2R1bGVEYXRhfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5XG4gICAgICAgICAgICAgICAgICBub3RGb3VuZD17bm90Rm91bmR9XG4gICAgICAgICAgICAgICAgICBmb3JiaWRkZW49e2ZvcmJpZGRlbn1cbiAgICAgICAgICAgICAgICAgIHVuYXV0aG9yaXplZD17dW5hdXRob3JpemVkfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdEJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgICAgICA8SW5uZXJMYXlvdXRSb3V0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB1cmw9e3VybH1cbiAgICAgICAgICAgICAgICAgICAgICB0cmVlPXt0cmVlfVxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz17cGFyYW1zfVxuICAgICAgICAgICAgICAgICAgICAgIGNhY2hlTm9kZT17Y2FjaGVOb2RlfVxuICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRQYXRoPXtzZWdtZW50UGF0aH1cbiAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z05hbWVDb250ZXh0PXtjaGlsZERlYnVnTmFtZUNvbnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e2lzQWN0aXZlICYmIHN0YXRlS2V5ID09PSBhY3RpdmVTdGF0ZUtleX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAge3NlZ21lbnRCb3VuZGFyeVRyaWdnZXJOb2RlfVxuICAgICAgICAgICAgICAgICAgPC9SZWRpcmVjdEJvdW5kYXJ5PlxuICAgICAgICAgICAgICAgIDwvSFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnk+XG4gICAgICAgICAgICAgIDwvTG9hZGluZ0JvdW5kYXJ5PlxuICAgICAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAge3NlZ21lbnRWaWV3U3RhdGVOb2RlfVxuICAgICAgICAgIDwvU2Nyb2xsQW5kRm9jdXNIYW5kbGVyPlxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIHt0ZW1wbGF0ZVN0eWxlc31cbiAgICAgICAge3RlbXBsYXRlU2NyaXB0c31cbiAgICAgICAge3RlbXBsYXRlfVxuICAgICAgPC9UZW1wbGF0ZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IHsgU2VnbWVudFN0YXRlUHJvdmlkZXIgfSA9XG4gICAgICAgIHJlcXVpcmUoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9zZWdtZW50LWV4cGxvcmVyLW5vZGUnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvc2VnbWVudC1leHBsb3Jlci1ub2RlJylcblxuICAgICAgY2hpbGQgPSAoXG4gICAgICAgIDxTZWdtZW50U3RhdGVQcm92aWRlciBrZXk9e3N0YXRlS2V5fT5cbiAgICAgICAgICB7Y2hpbGR9XG4gICAgICAgICAge3NlZ21lbnRWaWV3Qm91bmRhcmllc31cbiAgICAgICAgPC9TZWdtZW50U3RhdGVQcm92aWRlcj5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NBQ0hFX0NPTVBPTkVOVFMpIHtcbiAgICAgIGNoaWxkID0gKFxuICAgICAgICA8QWN0aXZpdHlcbiAgICAgICAgICBuYW1lPXtkZWJ1Z05hbWVUb0Rpc3BsYXl9XG4gICAgICAgICAga2V5PXtzdGF0ZUtleX1cbiAgICAgICAgICBtb2RlPXtzdGF0ZUtleSA9PT0gYWN0aXZlU3RhdGVLZXkgPyAndmlzaWJsZScgOiAnaGlkZGVuJ31cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZH1cbiAgICAgICAgPC9BY3Rpdml0eT5cbiAgICAgIClcbiAgICB9XG5cbiAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKVxuXG4gICAgYmZjYWNoZUVudHJ5ID0gYmZjYWNoZUVudHJ5Lm5leHRcbiAgfSB3aGlsZSAoYmZjYWNoZUVudHJ5ICE9PSBudWxsKVxuXG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGFyeURlYnVnTmFtZUZyb21TZWdtZW50KHNlZ21lbnQ6IFNlZ21lbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc2VnbWVudCA9PT0gJy8nKSB7XG4gICAgLy8gUmVhY2hlZCB0aGUgcm9vdFxuICAgIHJldHVybiAnLydcbiAgfVxuICBpZiAodHlwZW9mIHNlZ21lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzVmlydHVhbExheW91dChzZWdtZW50KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2VnbWVudCArICcvJ1xuICAgIH1cbiAgfVxuICBjb25zdCBwYXJhbUNhY2hlS2V5ID0gc2VnbWVudFsxXVxuICByZXR1cm4gcGFyYW1DYWNoZUtleSArICcvJ1xufVxuXG5mdW5jdGlvbiBpc1ZpcnR1YWxMYXlvdXQoc2VnbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgLy8gVGhpcyBpcyBpbnNlcnRlZCBieSB0aGUgbG9hZGVyLiBXZSBzaG91bGQgY29uc2lkZXIgZW5jb2RpbmcgdGhlc2VcbiAgICAvLyBpbiBhIG1vcmUgc3BlY2lhbCB3YXkgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgbmFtZSwgdG8gZGlzdGluZ3Vpc2ggdGhlbVxuICAgIC8vIGZyb20gYXBwLWRlZmluZWQgZ3JvdXBzLlxuICAgIHNlZ21lbnQgPT09ICcoc2xvdCknXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJPdXRlckxheW91dFJvdXRlciIsIl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSIsIlJlYWN0RE9NIiwiZmluZERPTU5vZGUiLCJpbnN0YW5jZSIsIndpbmRvdyIsImludGVybmFsX3JlYWN0RE9NZmluZERPTU5vZGUiLCJyZWN0UHJvcGVydGllcyIsInNob3VsZFNraXBFbGVtZW50IiwiZWxlbWVudCIsImluY2x1ZGVzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInBvc2l0aW9uIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImV2ZXJ5IiwiaXRlbSIsInRvcE9mRWxlbWVudEluVmlld3BvcnQiLCJ2aWV3cG9ydEhlaWdodCIsInRvcCIsImdldEhhc2hGcmFnbWVudERvbU5vZGUiLCJoYXNoRnJhZ21lbnQiLCJkb2N1bWVudCIsImJvZHkiLCJnZXRFbGVtZW50QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZE1vdW50IiwiaGFuZGxlUG90ZW50aWFsU2Nyb2xsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJvcHMiLCJmb2N1c0FuZFNjcm9sbFJlZiIsImFwcGx5IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJzZWdtZW50UGF0aCIsInNlZ21lbnRQYXRocyIsImxlbmd0aCIsInNvbWUiLCJzY3JvbGxSZWZTZWdtZW50UGF0aCIsInNlZ21lbnQiLCJpbmRleCIsIm1hdGNoU2VnbWVudCIsImRvbU5vZGUiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwYXJlbnRFbGVtZW50IiwibG9jYWxOYW1lIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbiIsInNjcm9sbEludG9WaWV3IiwiaHRtbEVsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxUb3AiLCJkb250Rm9yY2VMYXlvdXQiLCJvbmx5SGFzaENoYW5nZSIsImZvY3VzIiwiU2Nyb2xsQW5kRm9jdXNIYW5kbGVyIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0IiwiRXJyb3IiLCJJbm5lckxheW91dFJvdXRlciIsInRyZWUiLCJkZWJ1Z05hbWVDb250ZXh0IiwiY2FjaGVOb2RlIiwibWF5YmVDYWNoZU5vZGUiLCJwYXJhbXMiLCJ1cmwiLCJpc0FjdGl2ZSIsInBhcmVudE5hdlByb21pc2VzIiwiTmF2aWdhdGlvblByb21pc2VzQ29udGV4dCIsInVzZSIsInVucmVzb2x2ZWRUaGVuYWJsZSIsInJlc29sdmVkUHJlZmV0Y2hSc2MiLCJwcmVmZXRjaFJzYyIsInJzYyIsInVzZURlZmVycmVkVmFsdWUiLCJyZXNvbHZlZFJzYyIsImlzRGVmZXJyZWRSc2MiLCJ1bndyYXBwZWRSc2MiLCJuYXZpZ2F0aW9uUHJvbWlzZXMiLCJjcmVhdGVOZXN0ZWRMYXlvdXROYXZpZ2F0aW9uUHJvbWlzZXMiLCJyZXF1aXJlIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIkxheW91dFJvdXRlckNvbnRleHQiLCJwYXJlbnRUcmVlIiwicGFyZW50Q2FjaGVOb2RlIiwicGFyZW50U2VnbWVudFBhdGgiLCJwYXJlbnRQYXJhbXMiLCJMb2FkaW5nQm91bmRhcnkiLCJuYW1lIiwibG9hZGluZyIsImxvYWRpbmdNb2R1bGVEYXRhIiwidGhlbiIsInByb21pc2VGb3JMb2FkaW5nIiwibG9hZGluZ1JzYyIsImxvYWRpbmdTdHlsZXMiLCJsb2FkaW5nU2NyaXB0cyIsIlN1c3BlbnNlIiwiZmFsbGJhY2siLCJwYXJhbGxlbFJvdXRlcktleSIsImVycm9yIiwiZXJyb3JTdHlsZXMiLCJlcnJvclNjcmlwdHMiLCJ0ZW1wbGF0ZVN0eWxlcyIsInRlbXBsYXRlU2NyaXB0cyIsInRlbXBsYXRlIiwibm90Rm91bmQiLCJmb3JiaWRkZW4iLCJ1bmF1dGhvcml6ZWQiLCJzZWdtZW50Vmlld0JvdW5kYXJpZXMiLCJwYXJlbnRQYXJhbGxlbFJvdXRlcyIsInBhcmFsbGVsUm91dGVzIiwic2VnbWVudE1hcCIsImdldCIsIk1hcCIsInNldCIsInBhcmVudFRyZWVTZWdtZW50IiwiY29uY2F0IiwiYWN0aXZlVHJlZSIsInVuZGVmaW5lZCIsImFjdGl2ZVNlZ21lbnQiLCJhY3RpdmVTdGF0ZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiYmZjYWNoZUVudHJ5IiwidXNlUm91dGVyQkZDYWNoZSIsInN0YXRlS2V5IiwiY2FjaGVLZXkiLCJzZWdtZW50Qm91bmRhcnlUcmlnZ2VyTm9kZSIsInNlZ21lbnRWaWV3U3RhdGVOb2RlIiwiU2VnbWVudEJvdW5kYXJ5VHJpZ2dlck5vZGUiLCJTZWdtZW50Vmlld1N0YXRlTm9kZSIsInBhZ2VQcmVmaXgiLCJub3JtYWxpemVBcHBQYXRoIiwicGFnZSIsIkFycmF5IiwiaXNBcnJheSIsInBhcmFtTmFtZSIsInBhcmFtQ2FjaGVLZXkiLCJwYXJhbVR5cGUiLCJwYXJhbVZhbHVlIiwiZ2V0UGFyYW1WYWx1ZUZyb21DYWNoZUtleSIsImRlYnVnTmFtZSIsImdldEJvdW5kYXJ5RGVidWdOYW1lRnJvbVNlZ21lbnQiLCJjaGlsZERlYnVnTmFtZUNvbnRleHQiLCJpc1ZpcnR1YWwiLCJkZWJ1Z05hbWVUb0Rpc3BsYXkiLCJjaGlsZCIsIlRlbXBsYXRlQ29udGV4dCIsIkVycm9yQm91bmRhcnkiLCJlcnJvckNvbXBvbmVudCIsIkhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5IiwiUmVkaXJlY3RCb3VuZGFyeSIsIlNlZ21lbnRTdGF0ZVByb3ZpZGVyIiwiX19ORVhUX0NBQ0hFX0NPTVBPTkVOVFMiLCJBY3Rpdml0eSIsIm1vZGUiLCJwdXNoIiwibmV4dCIsImlzVmlydHVhbExheW91dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/layout-router.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/render-from-template-context.js": /*!*********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/render-from-template-context.js ***! \*********************************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return RenderFromTemplateContext;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nfunction RenderFromTemplateContext() {\n const children = (0, _react.useContext)(_approutercontextsharedruntime.TemplateContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c = RenderFromTemplateContext;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=render-from-template-context.js.map\nvar _c;\n$RefreshReg$(_c, \"RenderFromTemplateContext\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZW5kZXItZnJvbS10ZW1wbGF0ZS1jb250ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBS0E7OztlQUF3QkE7Ozs7OzZFQUhvQjsyREFDWjtBQUVqQjtJQUNiLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLEVBQVdDLCtCQUFBQSxlQUFlO0lBQzNDLHFCQUFPO2tCQUFHRjs7QUFDWjtLQUh3QkQiLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbmRlckZyb21UZW1wbGF0ZUNvbnRleHQoKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBjaGlsZHJlbiA9IHVzZUNvbnRleHQoVGVtcGxhdGVDb250ZXh0KVxuICByZXR1cm4gPD57Y2hpbGRyZW59PC8+XG59XG4iXSwibmFtZXMiOlsiUmVuZGVyRnJvbVRlbXBsYXRlQ29udGV4dCIsImNoaWxkcmVuIiwidXNlQ29udGV4dCIsIlRlbXBsYXRlQ29udGV4dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/components/render-from-template-context.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.dev.js": /*!********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.dev.js ***! \********************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRenderParamsFromClient\", ({\n enumerable: true,\n get: function() {\n return createRenderParamsFromClient;\n }\n}));\nconst _reflect = __webpack_require__(/*! ../../server/web/spec-extension/adapters/reflect */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js\");\nconst _reflectutils = __webpack_require__(/*! ../../shared/lib/utils/reflect-utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/reflect-utils.js\");\nconst CachedParams = new WeakMap();\nfunction makeDynamicallyTrackedParamsWithDevWarnings(underlyingParams) {\n const cachedParams = CachedParams.get(underlyingParams);\n if (cachedParams) {\n return cachedParams;\n }\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(underlyingParams);\n const proxiedProperties = new Set();\n Object.keys(underlyingParams).forEach((prop)=>{\n if (_reflectutils.wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n proxiedProperties.add(prop);\n }\n });\n const proxiedPromise = new Proxy(promise, {\n get (target, prop, receiver) {\n if (typeof prop === 'string') {\n if (proxiedProperties.has(prop)) {\n const expression = (0, _reflectutils.describeStringPropertyAccess)('params', prop);\n warnForSyncAccess(expression);\n }\n }\n return _reflect.ReflectAdapter.get(target, prop, receiver);\n },\n set (target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop);\n }\n return _reflect.ReflectAdapter.set(target, prop, value, receiver);\n },\n ownKeys (target) {\n warnForEnumeration();\n return Reflect.ownKeys(target);\n }\n });\n CachedParams.set(underlyingParams, proxiedPromise);\n return proxiedPromise;\n}\nfunction warnForSyncAccess(expression) {\n console.error(`A param property was accessed directly with ${expression}. ` + `\\`params\\` is a Promise and must be unwrapped with \\`React.use()\\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`);\n}\nfunction warnForEnumeration() {\n console.error(`params are being enumerated. ` + `\\`params\\` is a Promise and must be unwrapped with \\`React.use()\\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`);\n}\nfunction createRenderParamsFromClient(clientParams) {\n return makeDynamicallyTrackedParamsWithDevWarnings(clientParams);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=params.browser.dev.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVxdWVzdC9wYXJhbXMuYnJvd3Nlci5kZXYuanMiLCJtYXBwaW5ncyI6Ijs7OztnRUFnRmdCQTs7O2VBQUFBOzs7cUNBOUVlOzBDQUl4QjtBQUdQLE1BQU1DLGVBQWUsSUFBSUM7QUFFekIsU0FBU0MsNENBQ1BDLGdCQUF3QjtJQUV4QixNQUFNQyxlQUFlSixhQUFhSyxHQUFHLENBQUNGO0lBQ3RDLElBQUlDLGNBQWM7UUFDaEIsT0FBT0E7SUFDVDtJQUVBLDREQUE0RDtJQUM1RCxrRUFBa0U7SUFDbEUscUVBQXFFO0lBQ3JFLE1BQU1FLFVBQVVDLFFBQVFDLE9BQU8sQ0FBQ0w7SUFFaEMsTUFBTU0sb0JBQW9CLElBQUlDO0lBRTlCQyxPQUFPQyxJQUFJLENBQUNULGtCQUFrQlUsT0FBTyxDQUFDLENBQUNDO1FBQ3JDLElBQUlDLGNBQUFBLG1CQUFtQixDQUFDQyxHQUFHLENBQUNGLE9BQU87UUFDakMsa0VBQWtFO1FBQ2xFLGtFQUFrRTtRQUNwRSxPQUFPO1lBQ0xMLGtCQUFrQlEsR0FBRyxDQUFDSDtRQUN4QjtJQUNGO0lBRUEsTUFBTUksaUJBQWlCLElBQUlDLE1BQU1iLFNBQVM7UUFDeENELEtBQUllLE1BQU0sRUFBRU4sSUFBSSxFQUFFTyxRQUFRO1lBQ3hCLElBQUksT0FBT1AsU0FBUyxVQUFVO2dCQUM1QixJQUNFLGtCQUNrQkUsR0FBRyxDQUFDRixPQUN0QjtvQkFDQSxNQUFNUSxhQUFhQyxDQUFBQSxHQUFBQSxjQUFBQSw0QkFBQUEsRUFBNkIsVUFBVVQ7b0JBQzFEVSxrQkFBa0JGO2dCQUNwQjtZQUNGO1lBQ0EsT0FBT0csU0FBQUEsY0FBYyxDQUFDcEIsR0FBRyxDQUFDZSxRQUFRTixNQUFNTztRQUMxQztRQUNBSyxLQUFJTixNQUFNLEVBQUVOLElBQUksRUFBRWEsS0FBSyxFQUFFTixRQUFRO1lBQy9CLElBQUksT0FBT1AsU0FBUyxVQUFVO2dCQUM1Qkwsa0JBQWtCbUIsTUFBTSxDQUFDZDtZQUMzQjtZQUNBLE9BQU9XLFNBQUFBLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDTixRQUFRTixNQUFNYSxPQUFPTjtRQUNqRDtRQUNBUSxTQUFRVCxNQUFNO1lBQ1pVO1lBQ0EsT0FBT0MsUUFBUUYsT0FBTyxDQUFDVDtRQUN6QjtJQUNGO0lBRUFwQixhQUFhMEIsR0FBRyxDQUFDdkIsa0JBQWtCZTtJQUNuQyxPQUFPQTtBQUNUO0FBRUEsU0FBU00sa0JBQWtCRixVQUFrQjtJQUMzQ1UsUUFBUUMsS0FBSyxDQUNYLENBQUMsNENBQTRDLEVBQUVYLFdBQVcsRUFBRSxDQUFDLEdBQzNELENBQUMsb0dBQW9HLENBQUMsR0FDdEcsQ0FBQyw4REFBOEQsQ0FBQztBQUV0RTtBQUVBLFNBQVNRO0lBQ1BFLFFBQVFDLEtBQUssQ0FDWCxDQUFDLDZCQUE2QixDQUFDLEdBQzdCLENBQUMsb0dBQW9HLENBQUMsR0FDdEcsQ0FBQyw4REFBOEQsQ0FBQztBQUV0RTtBQUVPLFNBQVNsQyw2QkFDZG1DLFlBQW9CO0lBRXBCLE9BQU9oQyw0Q0FBNENnQztBQUNyRCIsInNvdXJjZXMiOlsiL1VzZXJzL3NyYy9jbGllbnQvcmVxdWVzdC9wYXJhbXMuYnJvd3Nlci5kZXYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbXMgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvcmVxdWVzdC9wYXJhbXMnXG5cbmltcG9ydCB7IFJlZmxlY3RBZGFwdGVyIH0gZnJvbSAnLi4vLi4vc2VydmVyL3dlYi9zcGVjLWV4dGVuc2lvbi9hZGFwdGVycy9yZWZsZWN0J1xuaW1wb3J0IHtcbiAgZGVzY3JpYmVTdHJpbmdQcm9wZXJ0eUFjY2VzcyxcbiAgd2VsbEtub3duUHJvcGVydGllcyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi91dGlscy9yZWZsZWN0LXV0aWxzJ1xuXG5pbnRlcmZhY2UgQ2FjaGVMaWZldGltZSB7fVxuY29uc3QgQ2FjaGVkUGFyYW1zID0gbmV3IFdlYWtNYXA8Q2FjaGVMaWZldGltZSwgUHJvbWlzZTxQYXJhbXM+PigpXG5cbmZ1bmN0aW9uIG1ha2VEeW5hbWljYWxseVRyYWNrZWRQYXJhbXNXaXRoRGV2V2FybmluZ3MoXG4gIHVuZGVybHlpbmdQYXJhbXM6IFBhcmFtc1xuKTogUHJvbWlzZTxQYXJhbXM+IHtcbiAgY29uc3QgY2FjaGVkUGFyYW1zID0gQ2FjaGVkUGFyYW1zLmdldCh1bmRlcmx5aW5nUGFyYW1zKVxuICBpZiAoY2FjaGVkUGFyYW1zKSB7XG4gICAgcmV0dXJuIGNhY2hlZFBhcmFtc1xuICB9XG5cbiAgLy8gV2UgZG9uJ3QgdXNlIG1ha2VSZXNvbHZlZFJlYWN0UHJvbWlzZSBoZXJlIGJlY2F1c2UgcGFyYW1zXG4gIC8vIHN1cHBvcnRzIGNvcHlpbmcgd2l0aCBzcHJlYWQgYW5kIHdlIGRvbid0IHdhbnQgdG8gdW5uZWNlc3NhcmlseVxuICAvLyBpbnN0cnVtZW50IHRoZSBwcm9taXNlIHdpdGggc3ByZWFkYWJsZSBwcm9wZXJ0aWVzIG9mIFJlYWN0UHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlcmx5aW5nUGFyYW1zKVxuXG4gIGNvbnN0IHByb3hpZWRQcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBPYmplY3Qua2V5cyh1bmRlcmx5aW5nUGFyYW1zKS5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgaWYgKHdlbGxLbm93blByb3BlcnRpZXMuaGFzKHByb3ApKSB7XG4gICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBzaGFkb3dlZCBiZWNhdXNlIHRoZXkgbmVlZCB0byBiZSB0aGVcbiAgICAgIC8vIHRydWUgdW5kZXJseWluZyB2YWx1ZSBmb3IgUHJvbWlzZXMgdG8gd29yayBjb3JyZWN0bHkgYXQgcnVudGltZVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm94aWVkUHJvcGVydGllcy5hZGQocHJvcClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgcHJveGllZFByb21pc2UgPSBuZXcgUHJveHkocHJvbWlzZSwge1xuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXZSBhcmUgYWNjZXNzaW5nIGEgcHJvcGVydHkgdGhhdCB3YXMgcHJveGllZCB0byB0aGUgcHJvbWlzZSBpbnN0YW5jZVxuICAgICAgICAgIHByb3hpZWRQcm9wZXJ0aWVzLmhhcyhwcm9wKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZGVzY3JpYmVTdHJpbmdQcm9wZXJ0eUFjY2VzcygncGFyYW1zJywgcHJvcClcbiAgICAgICAgICB3YXJuRm9yU3luY0FjY2VzcyhleHByZXNzaW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVmbGVjdEFkYXB0ZXIuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpXG4gICAgfSxcbiAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcHJveGllZFByb3BlcnRpZXMuZGVsZXRlKHByb3ApXG4gICAgICB9XG4gICAgICByZXR1cm4gUmVmbGVjdEFkYXB0ZXIuc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKVxuICAgIH0sXG4gICAgb3duS2V5cyh0YXJnZXQpIHtcbiAgICAgIHdhcm5Gb3JFbnVtZXJhdGlvbigpXG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbiAgICB9LFxuICB9KVxuXG4gIENhY2hlZFBhcmFtcy5zZXQodW5kZXJseWluZ1BhcmFtcywgcHJveGllZFByb21pc2UpXG4gIHJldHVybiBwcm94aWVkUHJvbWlzZVxufVxuXG5mdW5jdGlvbiB3YXJuRm9yU3luY0FjY2VzcyhleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICBgQSBwYXJhbSBwcm9wZXJ0eSB3YXMgYWNjZXNzZWQgZGlyZWN0bHkgd2l0aCAke2V4cHJlc3Npb259LiBgICtcbiAgICAgIGBcXGBwYXJhbXNcXGAgaXMgYSBQcm9taXNlIGFuZCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIFxcYFJlYWN0LnVzZSgpXFxgIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXMuIGAgK1xuICAgICAgYExlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3N5bmMtZHluYW1pYy1hcGlzYFxuICApXG59XG5cbmZ1bmN0aW9uIHdhcm5Gb3JFbnVtZXJhdGlvbigpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICBgcGFyYW1zIGFyZSBiZWluZyBlbnVtZXJhdGVkLiBgICtcbiAgICAgIGBcXGBwYXJhbXNcXGAgaXMgYSBQcm9taXNlIGFuZCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIFxcYFJlYWN0LnVzZSgpXFxgIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXMuIGAgK1xuICAgICAgYExlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3N5bmMtZHluYW1pYy1hcGlzYFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW5kZXJQYXJhbXNGcm9tQ2xpZW50KFxuICBjbGllbnRQYXJhbXM6IFBhcmFtc1xuKTogUHJvbWlzZTxQYXJhbXM+IHtcbiAgcmV0dXJuIG1ha2VEeW5hbWljYWxseVRyYWNrZWRQYXJhbXNXaXRoRGV2V2FybmluZ3MoY2xpZW50UGFyYW1zKVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJlbmRlclBhcmFtc0Zyb21DbGllbnQiLCJDYWNoZWRQYXJhbXMiLCJXZWFrTWFwIiwibWFrZUR5bmFtaWNhbGx5VHJhY2tlZFBhcmFtc1dpdGhEZXZXYXJuaW5ncyIsInVuZGVybHlpbmdQYXJhbXMiLCJjYWNoZWRQYXJhbXMiLCJnZXQiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwcm94aWVkUHJvcGVydGllcyIsIlNldCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwicHJvcCIsIndlbGxLbm93blByb3BlcnRpZXMiLCJoYXMiLCJhZGQiLCJwcm94aWVkUHJvbWlzZSIsIlByb3h5IiwidGFyZ2V0IiwicmVjZWl2ZXIiLCJleHByZXNzaW9uIiwiZGVzY3JpYmVTdHJpbmdQcm9wZXJ0eUFjY2VzcyIsIndhcm5Gb3JTeW5jQWNjZXNzIiwiUmVmbGVjdEFkYXB0ZXIiLCJzZXQiLCJ2YWx1ZSIsImRlbGV0ZSIsIm93bktleXMiLCJ3YXJuRm9yRW51bWVyYXRpb24iLCJSZWZsZWN0IiwiY29uc29sZSIsImVycm9yIiwiY2xpZW50UGFyYW1zIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.dev.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.js": /*!****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.js ***! \****************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRenderParamsFromClient\", ({\n enumerable: true,\n get: function() {\n return createRenderParamsFromClient;\n }\n}));\nconst createRenderParamsFromClient = true ? (__webpack_require__(/*! ./params.browser.dev */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.dev.js\").createRenderParamsFromClient) : 0;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=params.browser.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVxdWVzdC9wYXJhbXMuYnJvd3Nlci5qcyIsIm1hcHBpbmdzIjoiOzs7O2dFQUFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSwrQkFDWEMsS0FBb0IsR0FDZkcsc1NBQzhCLEdBRTdCQSxDQUM0QiIsInNvdXJjZXMiOlsiL1VzZXJzL3NyYy9jbGllbnQvcmVxdWVzdC9wYXJhbXMuYnJvd3Nlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY3JlYXRlUmVuZGVyUGFyYW1zRnJvbUNsaWVudCA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyAocmVxdWlyZSgnLi9wYXJhbXMuYnJvd3Nlci5kZXYnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3BhcmFtcy5icm93c2VyLmRldicpKVxuICAgICAgICAuY3JlYXRlUmVuZGVyUGFyYW1zRnJvbUNsaWVudFxuICAgIDogKFxuICAgICAgICByZXF1aXJlKCcuL3BhcmFtcy5icm93c2VyLnByb2QnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3BhcmFtcy5icm93c2VyLnByb2QnKVxuICAgICAgKS5jcmVhdGVSZW5kZXJQYXJhbXNGcm9tQ2xpZW50XG4iXSwibmFtZXMiOlsiY3JlYXRlUmVuZGVyUGFyYW1zRnJvbUNsaWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInJlcXVpcmUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/params.browser.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.dev.js": /*!***************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.dev.js ***! \***************************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRenderSearchParamsFromClient\", ({\n enumerable: true,\n get: function() {\n return createRenderSearchParamsFromClient;\n }\n}));\nconst _reflect = __webpack_require__(/*! ../../server/web/spec-extension/adapters/reflect */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js\");\nconst _reflectutils = __webpack_require__(/*! ../../shared/lib/utils/reflect-utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/reflect-utils.js\");\nconst CachedSearchParams = new WeakMap();\nfunction makeUntrackedSearchParamsWithDevWarnings(underlyingSearchParams) {\n const cachedSearchParams = CachedSearchParams.get(underlyingSearchParams);\n if (cachedSearchParams) {\n return cachedSearchParams;\n }\n const proxiedProperties = new Set();\n const promise = Promise.resolve(underlyingSearchParams);\n Object.keys(underlyingSearchParams).forEach((prop)=>{\n if (_reflectutils.wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n proxiedProperties.add(prop);\n }\n });\n const proxiedPromise = new Proxy(promise, {\n get (target, prop, receiver) {\n if (typeof prop === 'string') {\n if (!_reflectutils.wellKnownProperties.has(prop) && (proxiedProperties.has(prop) || // We are accessing a property that doesn't exist on the promise nor\n // the underlying searchParams.\n Reflect.has(target, prop) === false)) {\n const expression = (0, _reflectutils.describeStringPropertyAccess)('searchParams', prop);\n warnForSyncAccess(expression);\n }\n }\n return _reflect.ReflectAdapter.get(target, prop, receiver);\n },\n set (target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop);\n }\n return Reflect.set(target, prop, value, receiver);\n },\n has (target, prop) {\n if (typeof prop === 'string') {\n if (!_reflectutils.wellKnownProperties.has(prop) && (proxiedProperties.has(prop) || // We are accessing a property that doesn't exist on the promise nor\n // the underlying searchParams.\n Reflect.has(target, prop) === false)) {\n const expression = (0, _reflectutils.describeHasCheckingStringProperty)('searchParams', prop);\n warnForSyncAccess(expression);\n }\n }\n return Reflect.has(target, prop);\n },\n ownKeys (target) {\n warnForSyncSpread();\n return Reflect.ownKeys(target);\n }\n });\n CachedSearchParams.set(underlyingSearchParams, proxiedPromise);\n return proxiedPromise;\n}\nfunction warnForSyncAccess(expression) {\n console.error(`A searchParam property was accessed directly with ${expression}. ` + `\\`searchParams\\` is a Promise and must be unwrapped with \\`React.use()\\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`);\n}\nfunction warnForSyncSpread() {\n console.error(`The keys of \\`searchParams\\` were accessed directly. ` + `\\`searchParams\\` is a Promise and must be unwrapped with \\`React.use()\\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`);\n}\nfunction createRenderSearchParamsFromClient(underlyingSearchParams) {\n return makeUntrackedSearchParamsWithDevWarnings(underlyingSearchParams);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=search-params.browser.dev.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVxdWVzdC9zZWFyY2gtcGFyYW1zLmJyb3dzZXIuZGV2LmpzIiwibWFwcGluZ3MiOiI7Ozs7c0VBa0dnQkE7OztlQUFBQTs7O3FDQWhHZTswQ0FLeEI7QUFHUCxNQUFNQyxxQkFBcUIsSUFBSUM7QUFFL0IsU0FBU0MseUNBQ1BDLHNCQUFvQztJQUVwQyxNQUFNQyxxQkFBcUJKLG1CQUFtQkssR0FBRyxDQUFDRjtJQUNsRCxJQUFJQyxvQkFBb0I7UUFDdEIsT0FBT0E7SUFDVDtJQUVBLE1BQU1FLG9CQUFvQixJQUFJQztJQUM5QixNQUFNQyxVQUFVQyxRQUFRQyxPQUFPLENBQUNQO0lBRWhDUSxPQUFPQyxJQUFJLENBQUNULHdCQUF3QlUsT0FBTyxDQUFDLENBQUNDO1FBQzNDLElBQUlDLGNBQUFBLG1CQUFtQixDQUFDQyxHQUFHLENBQUNGLE9BQU87UUFDakMsa0VBQWtFO1FBQ2xFLGtFQUFrRTtRQUNwRSxPQUFPO1lBQ0xSLGtCQUFrQlcsR0FBRyxDQUFDSDtRQUN4QjtJQUNGO0lBRUEsTUFBTUksaUJBQWlCLElBQUlDLE1BQU1YLFNBQVM7UUFDeENILEtBQUllLE1BQU0sRUFBRU4sSUFBSSxFQUFFTyxRQUFRO1lBQ3hCLElBQUksT0FBT1AsU0FBUyxVQUFVO2dCQUM1QixJQUNFLENBQUNDLGNBQUFBLG1CQUFtQixDQUFDQyxHQUFHLENBQUNGLFNBQ3hCUixtQkFBa0JVLEdBQUcsQ0FBQ0YsU0FDckIsb0VBQW9FO2dCQUNwRSwrQkFBK0I7Z0JBQy9CUSxRQUFRTixHQUFHLENBQUNJLFFBQVFOLFVBQVUsTUFBSSxFQUNwQztvQkFDQSxNQUFNUyxhQUFhQyxDQUFBQSxHQUFBQSxjQUFBQSw0QkFBQUEsRUFBNkIsZ0JBQWdCVjtvQkFDaEVXLGtCQUFrQkY7Z0JBQ3BCO1lBQ0Y7WUFDQSxPQUFPRyxTQUFBQSxjQUFjLENBQUNyQixHQUFHLENBQUNlLFFBQVFOLE1BQU1PO1FBQzFDO1FBQ0FNLEtBQUlQLE1BQU0sRUFBRU4sSUFBSSxFQUFFYyxLQUFLLEVBQUVQLFFBQVE7WUFDL0IsSUFBSSxPQUFPUCxTQUFTLFVBQVU7Z0JBQzVCUixrQkFBa0J1QixNQUFNLENBQUNmO1lBQzNCO1lBQ0EsT0FBT1EsUUFBUUssR0FBRyxDQUFDUCxRQUFRTixNQUFNYyxPQUFPUDtRQUMxQztRQUNBTCxLQUFJSSxNQUFNLEVBQUVOLElBQUk7WUFDZCxJQUFJLE9BQU9BLFNBQVMsVUFBVTtnQkFDNUIsSUFDRSxDQUFDQyxjQUFBQSxtQkFBbUIsQ0FBQ0MsR0FBRyxDQUFDRixTQUN4QlIsQ0FBQUEsa0JBQWtCVSxHQUFHLENBQUNGLFNBQ3JCLG9FQUFvRTtnQkFDcEUsK0JBQStCO2dCQUMvQlEsUUFBUU4sR0FBRyxDQUFDSSxRQUFRTixVQUFVLE1BQUksRUFDcEM7b0JBQ0EsTUFBTVMsYUFBYU8sQ0FBQUEsR0FBQUEsY0FBQUEsaUNBQUFBLEVBQ2pCLGdCQUNBaEI7b0JBRUZXLGtCQUFrQkY7Z0JBQ3BCO1lBQ0Y7WUFDQSxPQUFPRCxRQUFRTixHQUFHLENBQUNJLFFBQVFOO1FBQzdCO1FBQ0FpQixTQUFRWCxNQUFNO1lBQ1pZO1lBQ0EsT0FBT1YsUUFBUVMsT0FBTyxDQUFDWDtRQUN6QjtJQUNGO0lBRUFwQixtQkFBbUIyQixHQUFHLENBQUN4Qix3QkFBd0JlO0lBQy9DLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTTyxrQkFBa0JGLFVBQWtCO0lBQzNDVSxRQUFRQyxLQUFLLENBQ1gsQ0FBQyxrREFBa0QsRUFBRVgsV0FBVyxFQUFFLENBQUMsR0FDakUsQ0FBQywwR0FBMEcsQ0FBQyxHQUM1RyxDQUFDLDhEQUE4RCxDQUFDO0FBRXRFO0FBRUEsU0FBU1M7SUFDUEMsUUFBUUMsS0FBSyxDQUNYLENBQUMscURBQXFELENBQUMsR0FDckQsQ0FBQywwR0FBMEcsQ0FBQyxHQUM1RyxDQUFDLDhEQUE4RCxDQUFDO0FBRXRFO0FBRU8sU0FBU25DLG1DQUNkSSxzQkFBb0M7SUFFcEMsT0FBT0QseUNBQXlDQztBQUNsRCIsInNvdXJjZXMiOlsiL1VzZXJzL3NyYy9jbGllbnQvcmVxdWVzdC9zZWFyY2gtcGFyYW1zLmJyb3dzZXIuZGV2LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vLi4vc2VydmVyL3JlcXVlc3Qvc2VhcmNoLXBhcmFtcydcblxuaW1wb3J0IHsgUmVmbGVjdEFkYXB0ZXIgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvd2ViL3NwZWMtZXh0ZW5zaW9uL2FkYXB0ZXJzL3JlZmxlY3QnXG5pbXBvcnQge1xuICBkZXNjcmliZVN0cmluZ1Byb3BlcnR5QWNjZXNzLFxuICBkZXNjcmliZUhhc0NoZWNraW5nU3RyaW5nUHJvcGVydHksXG4gIHdlbGxLbm93blByb3BlcnRpZXMsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvdXRpbHMvcmVmbGVjdC11dGlscydcblxuaW50ZXJmYWNlIENhY2hlTGlmZXRpbWUge31cbmNvbnN0IENhY2hlZFNlYXJjaFBhcmFtcyA9IG5ldyBXZWFrTWFwPENhY2hlTGlmZXRpbWUsIFByb21pc2U8U2VhcmNoUGFyYW1zPj4oKVxuXG5mdW5jdGlvbiBtYWtlVW50cmFja2VkU2VhcmNoUGFyYW1zV2l0aERldldhcm5pbmdzKFxuICB1bmRlcmx5aW5nU2VhcmNoUGFyYW1zOiBTZWFyY2hQYXJhbXNcbik6IFByb21pc2U8U2VhcmNoUGFyYW1zPiB7XG4gIGNvbnN0IGNhY2hlZFNlYXJjaFBhcmFtcyA9IENhY2hlZFNlYXJjaFBhcmFtcy5nZXQodW5kZXJseWluZ1NlYXJjaFBhcmFtcylcbiAgaWYgKGNhY2hlZFNlYXJjaFBhcmFtcykge1xuICAgIHJldHVybiBjYWNoZWRTZWFyY2hQYXJhbXNcbiAgfVxuXG4gIGNvbnN0IHByb3hpZWRQcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgY29uc3QgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlcmx5aW5nU2VhcmNoUGFyYW1zKVxuXG4gIE9iamVjdC5rZXlzKHVuZGVybHlpbmdTZWFyY2hQYXJhbXMpLmZvckVhY2goKHByb3ApID0+IHtcbiAgICBpZiAod2VsbEtub3duUHJvcGVydGllcy5oYXMocHJvcCkpIHtcbiAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgY2Fubm90IGJlIHNoYWRvd2VkIGJlY2F1c2UgdGhleSBuZWVkIHRvIGJlIHRoZVxuICAgICAgLy8gdHJ1ZSB1bmRlcmx5aW5nIHZhbHVlIGZvciBQcm9taXNlcyB0byB3b3JrIGNvcnJlY3RseSBhdCBydW50aW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3hpZWRQcm9wZXJ0aWVzLmFkZChwcm9wKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBwcm94aWVkUHJvbWlzZSA9IG5ldyBQcm94eShwcm9taXNlLCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF3ZWxsS25vd25Qcm9wZXJ0aWVzLmhhcyhwcm9wKSAmJlxuICAgICAgICAgIChwcm94aWVkUHJvcGVydGllcy5oYXMocHJvcCkgfHxcbiAgICAgICAgICAgIC8vIFdlIGFyZSBhY2Nlc3NpbmcgYSBwcm9wZXJ0eSB0aGF0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHByb21pc2Ugbm9yXG4gICAgICAgICAgICAvLyB0aGUgdW5kZXJseWluZyBzZWFyY2hQYXJhbXMuXG4gICAgICAgICAgICBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3ApID09PSBmYWxzZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IGRlc2NyaWJlU3RyaW5nUHJvcGVydHlBY2Nlc3MoJ3NlYXJjaFBhcmFtcycsIHByb3ApXG4gICAgICAgICAgd2FybkZvclN5bmNBY2Nlc3MoZXhwcmVzc2lvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFJlZmxlY3RBZGFwdGVyLmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKVxuICAgIH0sXG4gICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHByb3hpZWRQcm9wZXJ0aWVzLmRlbGV0ZShwcm9wKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKVxuICAgIH0sXG4gICAgaGFzKHRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXdlbGxLbm93blByb3BlcnRpZXMuaGFzKHByb3ApICYmXG4gICAgICAgICAgKHByb3hpZWRQcm9wZXJ0aWVzLmhhcyhwcm9wKSB8fFxuICAgICAgICAgICAgLy8gV2UgYXJlIGFjY2Vzc2luZyBhIHByb3BlcnR5IHRoYXQgZG9lc24ndCBleGlzdCBvbiB0aGUgcHJvbWlzZSBub3JcbiAgICAgICAgICAgIC8vIHRoZSB1bmRlcmx5aW5nIHNlYXJjaFBhcmFtcy5cbiAgICAgICAgICAgIFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcCkgPT09IGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZGVzY3JpYmVIYXNDaGVja2luZ1N0cmluZ1Byb3BlcnR5KFxuICAgICAgICAgICAgJ3NlYXJjaFBhcmFtcycsXG4gICAgICAgICAgICBwcm9wXG4gICAgICAgICAgKVxuICAgICAgICAgIHdhcm5Gb3JTeW5jQWNjZXNzKGV4cHJlc3Npb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3ApXG4gICAgfSxcbiAgICBvd25LZXlzKHRhcmdldCkge1xuICAgICAgd2FybkZvclN5bmNTcHJlYWQoKVxuICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpXG4gICAgfSxcbiAgfSlcblxuICBDYWNoZWRTZWFyY2hQYXJhbXMuc2V0KHVuZGVybHlpbmdTZWFyY2hQYXJhbXMsIHByb3hpZWRQcm9taXNlKVxuICByZXR1cm4gcHJveGllZFByb21pc2Vcbn1cblxuZnVuY3Rpb24gd2FybkZvclN5bmNBY2Nlc3MoZXhwcmVzc2lvbjogc3RyaW5nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgYEEgc2VhcmNoUGFyYW0gcHJvcGVydHkgd2FzIGFjY2Vzc2VkIGRpcmVjdGx5IHdpdGggJHtleHByZXNzaW9ufS4gYCArXG4gICAgICBgXFxgc2VhcmNoUGFyYW1zXFxgIGlzIGEgUHJvbWlzZSBhbmQgbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBcXGBSZWFjdC51c2UoKVxcYCBiZWZvcmUgYWNjZXNzaW5nIGl0cyBwcm9wZXJ0aWVzLiBgICtcbiAgICAgIGBMZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9zeW5jLWR5bmFtaWMtYXBpc2BcbiAgKVxufVxuXG5mdW5jdGlvbiB3YXJuRm9yU3luY1NwcmVhZCgpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICBgVGhlIGtleXMgb2YgXFxgc2VhcmNoUGFyYW1zXFxgIHdlcmUgYWNjZXNzZWQgZGlyZWN0bHkuIGAgK1xuICAgICAgYFxcYHNlYXJjaFBhcmFtc1xcYCBpcyBhIFByb21pc2UgYW5kIG11c3QgYmUgdW53cmFwcGVkIHdpdGggXFxgUmVhY3QudXNlKClcXGAgYmVmb3JlIGFjY2Vzc2luZyBpdHMgcHJvcGVydGllcy4gYCArXG4gICAgICBgTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvc3luYy1keW5hbWljLWFwaXNgXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbmRlclNlYXJjaFBhcmFtc0Zyb21DbGllbnQoXG4gIHVuZGVybHlpbmdTZWFyY2hQYXJhbXM6IFNlYXJjaFBhcmFtc1xuKTogUHJvbWlzZTxTZWFyY2hQYXJhbXM+IHtcbiAgcmV0dXJuIG1ha2VVbnRyYWNrZWRTZWFyY2hQYXJhbXNXaXRoRGV2V2FybmluZ3ModW5kZXJseWluZ1NlYXJjaFBhcmFtcylcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVSZW5kZXJTZWFyY2hQYXJhbXNGcm9tQ2xpZW50IiwiQ2FjaGVkU2VhcmNoUGFyYW1zIiwiV2Vha01hcCIsIm1ha2VVbnRyYWNrZWRTZWFyY2hQYXJhbXNXaXRoRGV2V2FybmluZ3MiLCJ1bmRlcmx5aW5nU2VhcmNoUGFyYW1zIiwiY2FjaGVkU2VhcmNoUGFyYW1zIiwiZ2V0IiwicHJveGllZFByb3BlcnRpZXMiLCJTZXQiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3AiLCJ3ZWxsS25vd25Qcm9wZXJ0aWVzIiwiaGFzIiwiYWRkIiwicHJveGllZFByb21pc2UiLCJQcm94eSIsInRhcmdldCIsInJlY2VpdmVyIiwiUmVmbGVjdCIsImV4cHJlc3Npb24iLCJkZXNjcmliZVN0cmluZ1Byb3BlcnR5QWNjZXNzIiwid2FybkZvclN5bmNBY2Nlc3MiLCJSZWZsZWN0QWRhcHRlciIsInNldCIsInZhbHVlIiwiZGVsZXRlIiwiZGVzY3JpYmVIYXNDaGVja2luZ1N0cmluZ1Byb3BlcnR5Iiwib3duS2V5cyIsIndhcm5Gb3JTeW5jU3ByZWFkIiwiY29uc29sZSIsImVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.dev.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.js": /*!***********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.js ***! \***********************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRenderSearchParamsFromClient\", ({\n enumerable: true,\n get: function() {\n return createRenderSearchParamsFromClient;\n }\n}));\nconst createRenderSearchParamsFromClient = true ? (__webpack_require__(/*! ./search-params.browser.dev */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.dev.js\").createRenderSearchParamsFromClient) : 0;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=search-params.browser.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVxdWVzdC9zZWFyY2gtcGFyYW1zLmJyb3dzZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztzRUFBYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEscUNBQ1hDLEtBQW9CLEdBRWRHLDBUQUNrQyxHQUVsQ0EsQ0FDa0MiLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcmMvY2xpZW50L3JlcXVlc3Qvc2VhcmNoLXBhcmFtcy5icm93c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjcmVhdGVSZW5kZXJTZWFyY2hQYXJhbXNGcm9tQ2xpZW50ID1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcbiAgICA/IChcbiAgICAgICAgcmVxdWlyZSgnLi9zZWFyY2gtcGFyYW1zLmJyb3dzZXIuZGV2JykgYXMgdHlwZW9mIGltcG9ydCgnLi9zZWFyY2gtcGFyYW1zLmJyb3dzZXIuZGV2JylcbiAgICAgICkuY3JlYXRlUmVuZGVyU2VhcmNoUGFyYW1zRnJvbUNsaWVudFxuICAgIDogKFxuICAgICAgICByZXF1aXJlKCcuL3NlYXJjaC1wYXJhbXMuYnJvd3Nlci5wcm9kJykgYXMgdHlwZW9mIGltcG9ydCgnLi9zZWFyY2gtcGFyYW1zLmJyb3dzZXIucHJvZCcpXG4gICAgICApLmNyZWF0ZVJlbmRlclNlYXJjaFBhcmFtc0Zyb21DbGllbnRcbiJdLCJuYW1lcyI6WyJjcmVhdGVSZW5kZXJTZWFyY2hQYXJhbXNGcm9tQ2xpZW50IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicmVxdWlyZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/request/search-params.browser.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/use-merged-ref.js": /*!********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/use-merged-ref.js ***! \********************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useMergedRef\", ({\n enumerable: true,\n get: function() {\n return useMergedRef;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\");\nfunction useMergedRef(refA, refB) {\n const cleanupA = (0, _react.useRef)(null);\n const cleanupB = (0, _react.useRef)(null);\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (previously via ``),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return (0, _react.useCallback)((current)=>{\n if (current === null) {\n const cleanupFnA = cleanupA.current;\n if (cleanupFnA) {\n cleanupA.current = null;\n cleanupFnA();\n }\n const cleanupFnB = cleanupB.current;\n if (cleanupFnB) {\n cleanupB.current = null;\n cleanupFnB();\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current);\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current);\n }\n }\n }, [\n refA,\n refB\n ]);\n}\nfunction applyRef(refA, current) {\n if (typeof refA === 'function') {\n const cleanup = refA(current);\n if (typeof cleanup === 'function') {\n return cleanup;\n } else {\n return ()=>refA(null);\n }\n } else {\n refA.current = current;\n return ()=>{\n refA.current = null;\n };\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-merged-ref.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvdXNlLW1lcmdlZC1yZWYuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFTZ0JBOzs7ZUFBQUE7OzttQ0FUOEI7QUFTdkMsU0FBU0EsYUFDZEMsSUFBbUIsRUFDbkJDLElBQW1CO0lBRW5CLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLE9BQUFBLE1BQUFBLEVBQTRCO0lBQzdDLE1BQU1DLFdBQVdELENBQUFBLEdBQUFBLE9BQUFBLE1BQUFBLEVBQTRCO0lBRTdDLG1GQUFtRjtJQUNuRix5RUFBeUU7SUFDekUsdUdBQXVHO0lBQ3ZHLDhGQUE4RjtJQUM5RixnREFBZ0Q7SUFDaEQsbUdBQW1HO0lBQ25HLHdGQUF3RjtJQUN4RixPQUFPRSxDQUFBQSxHQUFBQSxPQUFBQSxXQUFBQSxFQUNMLENBQUNDO1FBQ0MsSUFBSUEsWUFBWSxNQUFNO1lBQ3BCLE1BQU1DLGFBQWFMLFNBQVNJLE9BQU87WUFDbkMsSUFBSUMsWUFBWTtnQkFDZEwsU0FBU0ksT0FBTyxHQUFHO2dCQUNuQkM7WUFDRjtZQUNBLE1BQU1DLGFBQWFKLFNBQVNFLE9BQU87WUFDbkMsSUFBSUUsWUFBWTtnQkFDZEosU0FBU0UsT0FBTyxHQUFHO2dCQUNuQkU7WUFDRjtRQUNGLE9BQU87WUFDTCxJQUFJUixNQUFNO2dCQUNSRSxTQUFTSSxPQUFPLEdBQUdHLFNBQVNULE1BQU1NO1lBQ3BDO1lBQ0EsSUFBSUwsTUFBTTtnQkFDUkcsU0FBU0UsT0FBTyxHQUFHRyxTQUFTUixNQUFNSztZQUNwQztRQUNGO0lBQ0YsR0FDQTtRQUFDTjtRQUFNQztLQUFLO0FBRWhCO0FBRUEsU0FBU1EsU0FDUFQsSUFBZ0MsRUFDaENNLE9BQWlCO0lBRWpCLElBQUksT0FBT04sU0FBUyxZQUFZO1FBQzlCLE1BQU1VLFVBQVVWLEtBQUtNO1FBQ3JCLElBQUksT0FBT0ksWUFBWSxZQUFZO1lBQ2pDLE9BQU9BO1FBQ1QsT0FBTztZQUNMLE9BQU8sSUFBTVYsS0FBSztRQUNwQjtJQUNGLE9BQU87UUFDTEEsS0FBS00sT0FBTyxHQUFHQTtRQUNmLE9BQU87WUFDTE4sS0FBS00sT0FBTyxHQUFHO1FBQ2pCO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvc3JjL2NsaWVudC91c2UtbWVyZ2VkLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB0eXBlIFJlZiB9IGZyb20gJ3JlYWN0J1xuXG4vLyBUaGlzIGlzIGEgY29tcGF0aWJpbGl0eSBob29rIHRvIHN1cHBvcnQgUmVhY3QgMTggYW5kIDE5IHJlZnMuXG4vLyBJbiAxOSwgYSBjbGVhbnVwIGZ1bmN0aW9uIGZyb20gcmVmcyBtYXkgYmUgcmV0dXJuZWQuXG4vLyBJbiAxOCwgcmV0dXJuaW5nIGEgY2xlYW51cCBmdW5jdGlvbiBjcmVhdGVzIGEgd2FybmluZy5cbi8vIFNpbmNlIHdlIHRha2UgdXNlcnNwYWNlIHJlZnMsIHdlIGRvbid0IGtub3cgYWhlYWQgb2YgdGltZSBpZiBhIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBiZSByZXR1cm5lZC5cbi8vIFRoaXMgaW1wbGVtZW50cyBjbGVhbnVwIGZ1bmN0aW9ucyB3aXRoIHRoZSBvbGQgYmVoYXZpb3IgaW4gMTguXG4vLyBXZSBrbm93IHJlZnMgYXJlIGFsd2F5cyBjYWxsZWQgYWx0ZXJuYXRpbmcgd2l0aCBgbnVsbGAgYW5kIHRoZW4gYFRgLlxuLy8gU28gYSBjYWxsIHdpdGggYG51bGxgIG1lYW5zIHdlIG5lZWQgdG8gY2FsbCB0aGUgcHJldmlvdXMgY2xlYW51cCBmdW5jdGlvbnMuXG5leHBvcnQgZnVuY3Rpb24gdXNlTWVyZ2VkUmVmPFRFbGVtZW50PihcbiAgcmVmQTogUmVmPFRFbGVtZW50PixcbiAgcmVmQjogUmVmPFRFbGVtZW50PlxuKTogUmVmPFRFbGVtZW50PiB7XG4gIGNvbnN0IGNsZWFudXBBID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNsZWFudXBCID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTk9URTogSW4gdGhlb3J5LCB3ZSBjb3VsZCBza2lwIHRoZSB3cmFwcGluZyBpZiBvbmx5IG9uZSBvZiB0aGUgcmVmcyBpcyBub24tbnVsbC5cbiAgLy8gKHRoaXMgaGFwcGVucyBvZnRlbiBpZiB0aGUgdXNlciBkb2Vzbid0IHBhc3MgYSByZWYgdG8gTGluay9Gb3JtL0ltYWdlKVxuICAvLyBCdXQgdGhpcyBjYW4gY2F1c2UgdXMgdG8gbGVhayBhIGNsZWFudXAtcmVmIGludG8gdXNlciBjb2RlIChwcmV2aW91c2x5IHZpYSBgPExpbmsgbGVnYWN5QmVoYXZpb3I+YCksXG4gIC8vIGFuZCB0aGUgdXNlciBtaWdodCBwYXNzIHRoYXQgcmVmIGludG8gcmVmLW1lcmdpbmcgbGlicmFyeSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBjbGVhbnVwIHJlZnNcbiAgLy8gKGJlY2F1c2UgaXQgaGFzbid0IGJlZW4gdXBkYXRlZCBmb3IgUmVhY3QgMTkpXG4gIC8vIHdoaWNoIGNhbiB0aGVuIGNhdXNlIHRoaW5ncyB0byBibG93IHVwLCBiZWNhdXNlIGEgY2xlYW51cC1yZXR1cm5pbmcgcmVmIGdldHMgY2FsbGVkIHdpdGggYG51bGxgLlxuICAvLyBTbyBpbiBwcmFjdGljZSwgaXQncyBzYWZlciB0byBiZSBkZWZlbnNpdmUgYW5kIGFsd2F5cyB3cmFwIHRoZSByZWYsIGV2ZW4gb24gUmVhY3QgMTkuXG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAoY3VycmVudDogVEVsZW1lbnQgfCBudWxsKTogdm9pZCA9PiB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjbGVhbnVwRm5BID0gY2xlYW51cEEuY3VycmVudFxuICAgICAgICBpZiAoY2xlYW51cEZuQSkge1xuICAgICAgICAgIGNsZWFudXBBLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgY2xlYW51cEZuQSgpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xlYW51cEZuQiA9IGNsZWFudXBCLmN1cnJlbnRcbiAgICAgICAgaWYgKGNsZWFudXBGbkIpIHtcbiAgICAgICAgICBjbGVhbnVwQi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGNsZWFudXBGbkIoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVmQSkge1xuICAgICAgICAgIGNsZWFudXBBLmN1cnJlbnQgPSBhcHBseVJlZihyZWZBLCBjdXJyZW50KVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZWZCKSB7XG4gICAgICAgICAgY2xlYW51cEIuY3VycmVudCA9IGFwcGx5UmVmKHJlZkIsIGN1cnJlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZWZBLCByZWZCXVxuICApXG59XG5cbmZ1bmN0aW9uIGFwcGx5UmVmPFRFbGVtZW50PihcbiAgcmVmQTogTm9uTnVsbGFibGU8UmVmPFRFbGVtZW50Pj4sXG4gIGN1cnJlbnQ6IFRFbGVtZW50XG4pIHtcbiAgaWYgKHR5cGVvZiByZWZBID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgY2xlYW51cCA9IHJlZkEoY3VycmVudClcbiAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjbGVhbnVwXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoKSA9PiByZWZBKG51bGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlZkEuY3VycmVudCA9IGN1cnJlbnRcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVmQS5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbInVzZU1lcmdlZFJlZiIsInJlZkEiLCJyZWZCIiwiY2xlYW51cEEiLCJ1c2VSZWYiLCJjbGVhbnVwQiIsInVzZUNhbGxiYWNrIiwiY3VycmVudCIsImNsZWFudXBGbkEiLCJjbGVhbnVwRm5CIiwiYXBwbHlSZWYiLCJjbGVhbnVwIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/use-merged-ref.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/cjs/react-compiler-runtime.development.js": /*!****************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/cjs/react-compiler-runtime.development.js ***! \****************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/**\n * @license React\n * react-compiler-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n var ReactSharedInternals =\n (__webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/index.js\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE);\n exports.c = function (size) {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher.useMemoCache(size);\n };\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QtY29tcGlsZXItcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0EsTUFBTSxnVUFBbUc7QUFDekcsSUFBSSxTQUFTO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTYuMS42X0BiYWJlbCtjb3JlQDcuMjkuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9zYXNzQDEuOTguMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1jb21waWxlci1ydW50aW1lLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWNvbXBpbGVyLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgIHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3RcIikuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFO1xuICAgIGV4cG9ydHMuYyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBudWxsID09PSBkaXNwYXRjaGVyICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW9DYWNoZShzaXplKTtcbiAgICB9O1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/cjs/react-compiler-runtime.development.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/compiler-runtime.js": /*!******************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/compiler-runtime.js ***! \******************************************************************************************************************************************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-compiler-runtime.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/cjs/react-compiler-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9jb21waWxlci1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsbVVBQXVFO0FBQ3pFIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTYuMS42X0BiYWJlbCtjb3JlQDcuMjkuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjFfcmVhY3QtZG9tQDE5LjIuNF9yZWFjdEAxOS4yLjRfX3JlYWN0QDE5LjIuNF9zYXNzQDEuOTguMC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2NvbXBpbGVyLXJ1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1jb21waWxlci1ydW50aW1lLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtY29tcGlsZXItcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/compiler-runtime.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js": /*!******************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js ***! \******************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"IconMark\", ({\n enumerable: true,\n get: function() {\n return IconMark;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst IconMark = ()=>{\n if (true) {\n return null;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"\\xabnxt-icon\\xbb\"\n });\n}; //# sourceMappingURL=icon-mark.js.map\n_c = IconMark;\nvar _c;\n$RefreshReg$(_c, \"IconMark\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvbWV0YWRhdGEvZ2VuZXJhdGUvaWNvbi1tYXJrLmpzIiwibWFwcGluZ3MiOiI7Ozs7NENBUWFBOzs7ZUFBQUE7Ozs7QUFBTixpQkFBaUI7SUFDdEIsSUFBSSxJQUE2QixFQUFFO1FBQ2pDLE9BQU87SUFDVDtJQUNBLHFCQUFPLHFCQUFDRSxRQUFBQTtRQUFLQyxNQUFLOztBQUNwQjtLQUxhSCIsInNvdXJjZXMiOlsiL3NyYy9saWIvbWV0YWRhdGEvZ2VuZXJhdGUvaWNvbi1tYXJrLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuLy8gVGhpcyBpcyBhIGNsaWVudCBjb21wb25lbnQgdGhhdCBvbmx5IHJlbmRlcnMgZHVyaW5nIFNTUixcbi8vIGJ1dCB3aWxsIGJlIHJlcGxhY2VkIGR1cmluZyBzdHJlYW1pbmcgd2l0aCBhbiBpY29uIGluc2VydGlvbiBzY3JpcHQgdGFnLlxuLy8gV2UgZG9uJ3Qgd2FudCBpdCB0byBiZSBwcmVzZW50ZWQgYW55d2hlcmUgc28gaXQncyBvbmx5IHZpc2libGUgZHVyaW5nIHN0cmVhbWluZyxcbi8vIHJpZ2h0IGFmdGVyIHRoZSBpY29uIG1ldGEgdGFncyBzbyB0aGF0IGJyb3dzZXIgY2FuIHBpY2sgaXQgdXAgYXMgc29vbiBhcyBpdCdzIHJlbmRlcmVkLlxuLy8gTm90ZTogd2UgZG9uJ3QganVzdCBlbWl0IHRoZSBzY3JpcHQgaGVyZSBiZWNhdXNlIHdlIG9ubHkgbmVlZCB0aGUgc2NyaXB0IGlmIGl0J3Mgbm90IGluIHRoZSBoZWFkLFxuLy8gYW5kIHdlIG5lZWQgaXQgdG8gYmUgaG9pc3RhYmxlIGFsb25nc2lkZSB0aGUgb3RoZXIgbWV0YWRhdGEgYnV0IHN5bmMgc2NyaXB0cyBhcmUgbm90IGhvaXN0YWJsZS5cbmV4cG9ydCBjb25zdCBJY29uTWFyayA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gPG1ldGEgbmFtZT1cIsKrbnh0LWljb27Cu1wiIC8+XG59XG4iXSwibmFtZXMiOlsiSWNvbk1hcmsiLCJ3aW5kb3ciLCJtZXRhIiwibmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/lib/metadata/generate/icon-mark.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js": /*!*****************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js ***! \*****************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ReflectAdapter\", ({\n enumerable: true,\n get: function() {\n return ReflectAdapter;\n }\n}));\nclass ReflectAdapter {\n static get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n static set(target, prop, value, receiver) {\n return Reflect.set(target, prop, value, receiver);\n }\n static has(target, prop) {\n return Reflect.has(target, prop);\n }\n static deleteProperty(target, prop) {\n return Reflect.deleteProperty(target, prop);\n }\n}\n\n//# sourceMappingURL=reflect.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvd2ViL3NwZWMtZXh0ZW5zaW9uL2FkYXB0ZXJzL3JlZmxlY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixrREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi4xLjZfQGJhYmVsK2NvcmVANy4yOS4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMV9yZWFjdC1kb21AMTkuMi40X3JlYWN0QDE5LjIuNF9fcmVhY3RAMTkuMi40X3Nhc3NAMS45OC4wL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL3dlYi9zcGVjLWV4dGVuc2lvbi9hZGFwdGVycy9yZWZsZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVmbGVjdEFkYXB0ZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3RBZGFwdGVyO1xuICAgIH1cbn0pO1xuY2xhc3MgUmVmbGVjdEFkYXB0ZXIge1xuICAgIHN0YXRpYyBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuYmluZCh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgc3RhdGljIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzKHRhcmdldCwgcHJvcCkge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wKTtcbiAgICB9XG4gICAgc3RhdGljIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCkge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuICAgIH1cbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmbGVjdC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js": /*!********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js ***! \********************************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"disableSmoothScrollDuringRouteTransition\", ({\n enumerable: true,\n get: function() {\n return disableSmoothScrollDuringRouteTransition;\n }\n}));\nconst _warnonce = __webpack_require__(/*! ../../utils/warn-once */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction disableSmoothScrollDuringRouteTransition(fn, options = {}) {\n // if only the hash is changed, we don't need to disable smooth scrolling\n // we only care to prevent smooth scrolling when navigating to a new page to avoid jarring UX\n if (options.onlyHashChange) {\n fn();\n return;\n }\n const htmlElement = document.documentElement;\n const hasDataAttribute = htmlElement.dataset.scrollBehavior === 'smooth';\n if (!hasDataAttribute) {\n // Warn if smooth scrolling is detected but no data attribute is present\n if ( true && getComputedStyle(htmlElement).scrollBehavior === 'smooth') {\n (0, _warnonce.warnOnce)('Detected `scroll-behavior: smooth` on the `` element. To disable smooth scrolling during route transitions, ' + 'add `data-scroll-behavior=\"smooth\"` to your element. ' + 'Learn more: https://nextjs.org/docs/messages/missing-data-scroll-behavior');\n }\n // No smooth scrolling configured, run directly without style manipulation\n fn();\n return;\n }\n // Proceed with temporarily disabling smooth scrolling\n const existing = htmlElement.style.scrollBehavior;\n htmlElement.style.scrollBehavior = 'auto';\n if (!options.dontForceLayout) {\n // In Chrome-based browsers we need to force reflow before calling `scrollTo`.\n // Otherwise it will not pickup the change in scrollBehavior\n // More info here: https://github.com/vercel/next.js/issues/40719#issuecomment-1336248042\n htmlElement.getClientRects();\n }\n fn();\n htmlElement.style.scrollBehavior = existing;\n} //# sourceMappingURL=disable-smooth-scroll.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9kaXNhYmxlLXNtb290aC1zY3JvbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0RUFNZ0JBOzs7ZUFBQUE7OztzQ0FOUztBQU1sQixTQUFTQSx5Q0FDZEMsRUFBYyxFQUNkQyxVQUFtRSxDQUFDLENBQUM7SUFFckUseUVBQXlFO0lBQ3pFLDZGQUE2RjtJQUM3RixJQUFJQSxRQUFRQyxjQUFjLEVBQUU7UUFDMUJGO1FBQ0E7SUFDRjtJQUVBLE1BQU1HLGNBQWNDLFNBQVNDLGVBQWU7SUFDNUMsTUFBTUMsbUJBQW1CSCxZQUFZSSxPQUFPLENBQUNDLGNBQWMsS0FBSztJQUVoRSxJQUFJLENBQUNGLGtCQUFrQjtRQUNyQix3RUFBd0U7UUFDeEUsSUFDRUcsS0FBb0IsSUFDcEJHLGlCQUFpQlQsYUFBYUssY0FBYyxLQUFLLFVBQ2pEO1lBQ0FLLENBQUFBLEdBQUFBLFVBQUFBLFFBQUFBLEVBQ0UsdUhBQ0UsaUVBQ0E7UUFFTjtRQUNBLDBFQUEwRTtRQUMxRWI7UUFDQTtJQUNGO0lBRUEsc0RBQXNEO0lBQ3RELE1BQU1jLFdBQVdYLFlBQVlZLEtBQUssQ0FBQ1AsY0FBYztJQUNqREwsWUFBWVksS0FBSyxDQUFDUCxjQUFjLEdBQUc7SUFDbkMsSUFBSSxDQUFDUCxRQUFRZSxlQUFlLEVBQUU7UUFDNUIsOEVBQThFO1FBQzlFLDREQUE0RDtRQUM1RCx5RkFBeUY7UUFDekZiLFlBQVljLGNBQWM7SUFDNUI7SUFDQWpCO0lBQ0FHLFlBQVlZLEtBQUssQ0FBQ1AsY0FBYyxHQUFHTTtBQUNyQyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9kaXNhYmxlLXNtb290aC1zY3JvbGwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICcuLi8uLi91dGlscy93YXJuLW9uY2UnXG5cbi8qKlxuICogUnVuIGZ1bmN0aW9uIHdpdGggYHNjcm9sbC1iZWhhdmlvcjogYXV0b2AgYXBwbGllZCB0byBgPGh0bWwvPmAuXG4gKiBUaGlzIGNzcyBjaGFuZ2Ugd2lsbCBiZSByZXZlcnRlZCBhZnRlciB0aGUgZnVuY3Rpb24gZmluaXNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU21vb3RoU2Nyb2xsRHVyaW5nUm91dGVUcmFuc2l0aW9uKFxuICBmbjogKCkgPT4gdm9pZCxcbiAgb3B0aW9uczogeyBkb250Rm9yY2VMYXlvdXQ/OiBib29sZWFuOyBvbmx5SGFzaENoYW5nZT86IGJvb2xlYW4gfSA9IHt9XG4pIHtcbiAgLy8gaWYgb25seSB0aGUgaGFzaCBpcyBjaGFuZ2VkLCB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgc21vb3RoIHNjcm9sbGluZ1xuICAvLyB3ZSBvbmx5IGNhcmUgdG8gcHJldmVudCBzbW9vdGggc2Nyb2xsaW5nIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlIHRvIGF2b2lkIGphcnJpbmcgVVhcbiAgaWYgKG9wdGlvbnMub25seUhhc2hDaGFuZ2UpIHtcbiAgICBmbigpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICBjb25zdCBoYXNEYXRhQXR0cmlidXRlID0gaHRtbEVsZW1lbnQuZGF0YXNldC5zY3JvbGxCZWhhdmlvciA9PT0gJ3Ntb290aCdcblxuICBpZiAoIWhhc0RhdGFBdHRyaWJ1dGUpIHtcbiAgICAvLyBXYXJuIGlmIHNtb290aCBzY3JvbGxpbmcgaXMgZGV0ZWN0ZWQgYnV0IG5vIGRhdGEgYXR0cmlidXRlIGlzIHByZXNlbnRcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJlxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShodG1sRWxlbWVudCkuc2Nyb2xsQmVoYXZpb3IgPT09ICdzbW9vdGgnXG4gICAgKSB7XG4gICAgICB3YXJuT25jZShcbiAgICAgICAgJ0RldGVjdGVkIGBzY3JvbGwtYmVoYXZpb3I6IHNtb290aGAgb24gdGhlIGA8aHRtbD5gIGVsZW1lbnQuIFRvIGRpc2FibGUgc21vb3RoIHNjcm9sbGluZyBkdXJpbmcgcm91dGUgdHJhbnNpdGlvbnMsICcgK1xuICAgICAgICAgICdhZGQgYGRhdGEtc2Nyb2xsLWJlaGF2aW9yPVwic21vb3RoXCJgIHRvIHlvdXIgPGh0bWw+IGVsZW1lbnQuICcgK1xuICAgICAgICAgICdMZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9taXNzaW5nLWRhdGEtc2Nyb2xsLWJlaGF2aW9yJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBObyBzbW9vdGggc2Nyb2xsaW5nIGNvbmZpZ3VyZWQsIHJ1biBkaXJlY3RseSB3aXRob3V0IHN0eWxlIG1hbmlwdWxhdGlvblxuICAgIGZuKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFByb2NlZWQgd2l0aCB0ZW1wb3JhcmlseSBkaXNhYmxpbmcgc21vb3RoIHNjcm9sbGluZ1xuICBjb25zdCBleGlzdGluZyA9IGh0bWxFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yXG4gIGh0bWxFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gJ2F1dG8nXG4gIGlmICghb3B0aW9ucy5kb250Rm9yY2VMYXlvdXQpIHtcbiAgICAvLyBJbiBDaHJvbWUtYmFzZWQgYnJvd3NlcnMgd2UgbmVlZCB0byBmb3JjZSByZWZsb3cgYmVmb3JlIGNhbGxpbmcgYHNjcm9sbFRvYC5cbiAgICAvLyBPdGhlcndpc2UgaXQgd2lsbCBub3QgcGlja3VwIHRoZSBjaGFuZ2UgaW4gc2Nyb2xsQmVoYXZpb3JcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy80MDcxOSNpc3N1ZWNvbW1lbnQtMTMzNjI0ODA0MlxuICAgIGh0bWxFbGVtZW50LmdldENsaWVudFJlY3RzKClcbiAgfVxuICBmbigpXG4gIGh0bWxFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gZXhpc3Rpbmdcbn1cbiJdLCJuYW1lcyI6WyJkaXNhYmxlU21vb3RoU2Nyb2xsRHVyaW5nUm91dGVUcmFuc2l0aW9uIiwiZm4iLCJvcHRpb25zIiwib25seUhhc2hDaGFuZ2UiLCJodG1sRWxlbWVudCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiaGFzRGF0YUF0dHJpYnV0ZSIsImRhdGFzZXQiLCJzY3JvbGxCZWhhdmlvciIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImdldENvbXB1dGVkU3R5bGUiLCJ3YXJuT25jZSIsImV4aXN0aW5nIiwic3R5bGUiLCJkb250Rm9yY2VMYXlvdXQiLCJnZXRDbGllbnRSZWN0cyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/format-url.js": /*!*********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/format-url.js ***! \*********************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatUrl: function() {\n return formatUrl;\n },\n formatWithValidation: function() {\n return formatWithValidation;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || '';\n let pathname = urlObj.pathname || '';\n let hash = urlObj.hash || '';\n let query = urlObj.query || '';\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname);\n if (urlObj.port) {\n host += ':' + urlObj.port;\n }\n }\n if (query && typeof query === 'object') {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && `?${query}` || '';\n if (protocol && !protocol.endsWith(':')) protocol += ':';\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n if (hash && hash[0] !== '#') hash = '#' + hash;\n if (search && search[0] !== '?') search = '?' + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace('#', '%23');\n return `${protocol}${host}${pathname}${search}${hash}`;\n}\nconst urlObjectKeys = [\n 'auth',\n 'hash',\n 'host',\n 'hostname',\n 'href',\n 'path',\n 'pathname',\n 'port',\n 'protocol',\n 'query',\n 'search',\n 'slashes'\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(`Unknown key passed via urlObject into url.format: ${key}`);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtdXJsLmpzIiwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QztBQUN2QyxzREFBc0Q7QUFDdEQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSxnRUFBZ0U7QUFDaEUsc0VBQXNFO0FBQ3RFLHNFQUFzRTtBQUN0RSw0RUFBNEU7QUFDNUUscUVBQXFFO0FBQ3JFLHdCQUF3QjtBQUN4QixFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDZEQUE2RDtBQUM3RCw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLHdFQUF3RTtBQUN4RSw0RUFBNEU7QUFDNUUseUNBQXlDOzs7Ozs7Ozs7Ozs7O0lBUXpCQSxTQUFTO2VBQVRBOztJQTZEQUMsb0JBQW9CO2VBQXBCQTs7SUFmSEMsYUFBYTtlQUFiQTs7OzttRkFsRGdCO0FBRTdCLE1BQU1DLG1CQUFtQjtBQUVsQixTQUFTSCxVQUFVSSxNQUFpQjtJQUN6QyxJQUFJLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFLEdBQUdGO0lBQ3pCLElBQUlHLFdBQVdILE9BQU9HLFFBQVEsSUFBSTtJQUNsQyxJQUFJQyxXQUFXSixPQUFPSSxRQUFRLElBQUk7SUFDbEMsSUFBSUMsT0FBT0wsT0FBT0ssSUFBSSxJQUFJO0lBQzFCLElBQUlDLFFBQVFOLE9BQU9NLEtBQUssSUFBSTtJQUM1QixJQUFJQyxPQUF1QjtJQUUzQk4sT0FBT0EsT0FBT08sbUJBQW1CUCxNQUFNUSxPQUFPLENBQUMsUUFBUSxPQUFPLE1BQU07SUFFcEUsSUFBSVQsT0FBT08sSUFBSSxFQUFFO1FBQ2ZBLE9BQU9OLE9BQU9ELE9BQU9PLElBQUk7SUFDM0IsT0FBTyxJQUFJTCxVQUFVO1FBQ25CSyxPQUFPTixPQUFRLEVBQUNDLFNBQVNRLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFUixTQUFTLENBQUMsQ0FBQyxHQUFHQSxRQUFBQSxDQUFPO1FBQ2pFLElBQUlGLE9BQU9XLElBQUksRUFBRTtZQUNmSixRQUFRLE1BQU1QLE9BQU9XLElBQUk7UUFDM0I7SUFDRjtJQUVBLElBQUlMLFNBQVMsT0FBT0EsVUFBVSxVQUFVO1FBQ3RDQSxRQUFRTSxPQUFPQyxhQUFZQyxzQkFBc0IsQ0FBQ1I7SUFDcEQ7SUFFQSxJQUFJUyxTQUFTZixPQUFPZSxNQUFNLElBQUtULFNBQVMsQ0FBQyxDQUFDLEVBQUVBLE9BQU8sSUFBSztJQUV4RCxJQUFJSCxZQUFZLENBQUNBLFNBQVNhLFFBQVEsQ0FBQyxNQUFNYixZQUFZO0lBRXJELElBQ0VILE9BQU9pQixPQUFPLElBQ1osRUFBQ2QsWUFBWUosaUJBQWlCbUIsSUFBSSxDQUFDZixTQUFBQSxDQUFRLElBQU1JLFNBQVMsT0FDNUQ7UUFDQUEsT0FBTyxPQUFRQSxDQUFBQSxRQUFRLEdBQUM7UUFDeEIsSUFBSUgsWUFBWUEsUUFBUSxDQUFDLEVBQUUsS0FBSyxLQUFLQSxXQUFXLE1BQU1BO0lBQ3hELE9BQU8sSUFBSSxDQUFDRyxNQUFNO1FBQ2hCQSxPQUFPO0lBQ1Q7SUFFQSxJQUFJRixRQUFRQSxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUtBLE9BQU8sTUFBTUE7SUFDMUMsSUFBSVUsVUFBVUEsTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLQSxTQUFTLE1BQU1BO0lBRWhEWCxXQUFXQSxTQUFTSyxPQUFPLENBQUMsU0FBU0Q7SUFDckNPLFNBQVNBLE9BQU9OLE9BQU8sQ0FBQyxLQUFLO0lBRTdCLE9BQU8sR0FBR04sV0FBV0ksT0FBT0gsV0FBV1csU0FBU1YsTUFBTTtBQUN4RDtBQUVPLE1BQU1QLGdCQUFnQjtJQUMzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVNLFNBQVNELHFCQUFxQnNCLEdBQWM7SUFDakQsSUFBSUMsSUFBb0IsRUFBb0I7UUFDMUMsSUFBSUQsUUFBUSxRQUFRLE9BQU9BLFFBQVEsVUFBVTtZQUMzQ0ksT0FBT0MsSUFBSSxDQUFDTCxLQUFLTSxPQUFPLENBQUMsQ0FBQ0M7Z0JBQ3hCLElBQUksQ0FBQzVCLGNBQWM2QixRQUFRLENBQUNELE1BQU07b0JBQ2hDRSxRQUFRQyxJQUFJLENBQ1YsQ0FBQyxrREFBa0QsRUFBRUgsS0FBSztnQkFFOUQ7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxPQUFPOUIsVUFBVXVCO0FBQ25CIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0IGZ1bmN0aW9uIG1vZGlmaWVkIGZyb20gbm9kZWpzXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHR5cGUgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICcuL3F1ZXJ5c3RyaW5nJ1xuXG5jb25zdCBzbGFzaGVkUHJvdG9jb2xzID0gL2h0dHBzP3xmdHB8Z29waGVyfGZpbGUvXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRVcmwodXJsT2JqOiBVcmxPYmplY3QpIHtcbiAgbGV0IHsgYXV0aCwgaG9zdG5hbWUgfSA9IHVybE9ialxuICBsZXQgcHJvdG9jb2wgPSB1cmxPYmoucHJvdG9jb2wgfHwgJydcbiAgbGV0IHBhdGhuYW1lID0gdXJsT2JqLnBhdGhuYW1lIHx8ICcnXG4gIGxldCBoYXNoID0gdXJsT2JqLmhhc2ggfHwgJydcbiAgbGV0IHF1ZXJ5ID0gdXJsT2JqLnF1ZXJ5IHx8ICcnXG4gIGxldCBob3N0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlXG5cbiAgYXV0aCA9IGF1dGggPyBlbmNvZGVVUklDb21wb25lbnQoYXV0aCkucmVwbGFjZSgvJTNBL2ksICc6JykgKyAnQCcgOiAnJ1xuXG4gIGlmICh1cmxPYmouaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdXJsT2JqLmhvc3RcbiAgfSBlbHNlIGlmIChob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKH5ob3N0bmFtZS5pbmRleE9mKCc6JykgPyBgWyR7aG9zdG5hbWV9XWAgOiBob3N0bmFtZSlcbiAgICBpZiAodXJsT2JqLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdXJsT2JqLnBvcnRcbiAgICB9XG4gIH1cblxuICBpZiAocXVlcnkgJiYgdHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0Jykge1xuICAgIHF1ZXJ5ID0gU3RyaW5nKHF1ZXJ5c3RyaW5nLnVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMocXVlcnkgYXMgUGFyc2VkVXJsUXVlcnkpKVxuICB9XG5cbiAgbGV0IHNlYXJjaCA9IHVybE9iai5zZWFyY2ggfHwgKHF1ZXJ5ICYmIGA/JHtxdWVyeX1gKSB8fCAnJ1xuXG4gIGlmIChwcm90b2NvbCAmJiAhcHJvdG9jb2wuZW5kc1dpdGgoJzonKSkgcHJvdG9jb2wgKz0gJzonXG5cbiAgaWYgKFxuICAgIHVybE9iai5zbGFzaGVzIHx8XG4gICAgKCghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29scy50ZXN0KHByb3RvY29sKSkgJiYgaG9zdCAhPT0gZmFsc2UpXG4gICkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpXG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lWzBdICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWVcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJ1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaFswXSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaFxuICBpZiAoc2VhcmNoICYmIHNlYXJjaFswXSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2hcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZW5jb2RlVVJJQ29tcG9uZW50KVxuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKVxuXG4gIHJldHVybiBgJHtwcm90b2NvbH0ke2hvc3R9JHtwYXRobmFtZX0ke3NlYXJjaH0ke2hhc2h9YFxufVxuXG5leHBvcnQgY29uc3QgdXJsT2JqZWN0S2V5cyA9IFtcbiAgJ2F1dGgnLFxuICAnaGFzaCcsXG4gICdob3N0JyxcbiAgJ2hvc3RuYW1lJyxcbiAgJ2hyZWYnLFxuICAncGF0aCcsXG4gICdwYXRobmFtZScsXG4gICdwb3J0JyxcbiAgJ3Byb3RvY29sJyxcbiAgJ3F1ZXJ5JyxcbiAgJ3NlYXJjaCcsXG4gICdzbGFzaGVzJyxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHVybDogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgaWYgKHVybCAhPT0gbnVsbCAmJiB0eXBlb2YgdXJsID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXModXJsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKCF1cmxPYmplY3RLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgVW5rbm93biBrZXkgcGFzc2VkIHZpYSB1cmxPYmplY3QgaW50byB1cmwuZm9ybWF0OiAke2tleX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtYXRVcmwodXJsKVxufVxuIl0sIm5hbWVzIjpbImZvcm1hdFVybCIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwidXJsT2JqZWN0S2V5cyIsInNsYXNoZWRQcm90b2NvbHMiLCJ1cmxPYmoiLCJhdXRoIiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwiaGFzaCIsInF1ZXJ5IiwiaG9zdCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJpbmRleE9mIiwicG9ydCIsIlN0cmluZyIsInF1ZXJ5c3RyaW5nIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaCIsImVuZHNXaXRoIiwic2xhc2hlcyIsInRlc3QiLCJ1cmwiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIiwiY29uc29sZSIsIndhcm4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/format-url.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js": /*!***********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***! \***********************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1sb2NhbC11cmwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs4Q0FNZ0JBOzs7ZUFBQUE7OzttQ0FOaUM7eUNBQ3JCO0FBS3JCLFNBQVNBLFdBQVdDLEdBQVc7SUFDcEMsZ0VBQWdFO0lBQ2hFLElBQUksQ0FBQ0MsQ0FBQUEsR0FBQUEsT0FBQUEsYUFBQUEsRUFBY0QsTUFBTSxPQUFPO0lBQ2hDLElBQUk7UUFDRiw0REFBNEQ7UUFDNUQsTUFBTUUsaUJBQWlCQyxDQUFBQSxHQUFBQSxPQUFBQSxpQkFBQUE7UUFDdkIsTUFBTUMsV0FBVyxJQUFJQyxJQUFJTCxLQUFLRTtRQUM5QixPQUFPRSxTQUFTRSxNQUFNLEtBQUtKLGtCQUFrQkssQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWUgsU0FBU0ksUUFBUTtJQUM1RSxFQUFFLE9BQU9DLEdBQUc7UUFDVixPQUFPO0lBQ1Q7QUFDRiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1sb2NhbC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBYnNvbHV0ZVVybCwgZ2V0TG9jYXRpb25PcmlnaW4gfSBmcm9tICcuLi8uLi91dGlscydcbmltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2xpZW50L2hhcy1iYXNlLXBhdGgnXG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGEgZ2l2ZW4gdXJsIGlzIHJvdXRhYmxlIGJ5IHRoZSBOZXh0LmpzIHJvdXRlciAoYnJvd3NlciBvbmx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYWxVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gcHJldmVudCBhIGh5ZHJhdGlvbiBtaXNtYXRjaCBvbiBocmVmIGZvciB1cmwgd2l0aCBhbmNob3IgcmVmc1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICAvLyBhYnNvbHV0ZSB1cmxzIGNhbiBiZSBsb2NhbCBpZiB0aGV5IGFyZSBvbiB0aGUgc2FtZSBvcmlnaW5cbiAgICBjb25zdCBsb2NhdGlvbk9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbk9yaWdpbilcbiAgICByZXR1cm4gcmVzb2x2ZWQub3JpZ2luID09PSBsb2NhdGlvbk9yaWdpbiAmJiBoYXNCYXNlUGF0aChyZXNvbHZlZC5wYXRobmFtZSlcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXSwibmFtZXMiOlsiaXNMb2NhbFVSTCIsInVybCIsImlzQWJzb2x1dGVVcmwiLCJsb2NhdGlvbk9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWQiLCJVUkwiLCJvcmlnaW4iLCJoYXNCYXNlUGF0aCIsInBhdGhuYW1lIiwiXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/querystring.js": /*!**********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/querystring.js ***! \**********************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n assign: function() {\n return assign;\n },\n searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n for (const [key, value] of searchParams.entries()){\n const existing = query[key];\n if (typeof existing === 'undefined') {\n query[key] = value;\n } else if (Array.isArray(existing)) {\n existing.push(value);\n } else {\n query[key] = [\n existing,\n value\n ];\n }\n }\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === 'string') {\n return param;\n }\n if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {\n return String(param);\n } else {\n return '';\n }\n}\nfunction urlQueryToSearchParams(query) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(query)){\n if (Array.isArray(value)) {\n for (const item of value){\n searchParams.append(key, stringifyUrlQueryParam(item));\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value));\n }\n }\n return searchParams;\n}\nfunction assign(target, ...searchParamsList) {\n for (const searchParams of searchParamsList){\n for (const key of searchParams.keys()){\n target.delete(key);\n }\n for (const [key, value] of searchParams.entries()){\n target.append(key, value);\n }\n }\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnRGdCQSxNQUFNO2VBQU5BOztJQTlDQUMsc0JBQXNCO2VBQXRCQTs7SUFnQ0FDLHNCQUFzQjtlQUF0QkE7OztBQWhDVCxTQUFTRCx1QkFDZEUsWUFBNkI7SUFFN0IsTUFBTUMsUUFBd0IsQ0FBQztJQUMvQixLQUFLLE1BQU0sQ0FBQ0MsS0FBS0MsTUFBTSxJQUFJSCxhQUFhSSxPQUFPLEdBQUk7UUFDakQsTUFBTUMsV0FBV0osS0FBSyxDQUFDQyxJQUFJO1FBQzNCLElBQUksT0FBT0csYUFBYSxhQUFhO1lBQ25DSixLQUFLLENBQUNDLElBQUksR0FBR0M7UUFDZixPQUFPLElBQUlHLE1BQU1DLE9BQU8sQ0FBQ0YsV0FBVztZQUNsQ0EsU0FBU0csSUFBSSxDQUFDTDtRQUNoQixPQUFPO1lBQ0xGLEtBQUssQ0FBQ0MsSUFBSSxHQUFHO2dCQUFDRztnQkFBVUY7YUFBTTtRQUNoQztJQUNGO0lBQ0EsT0FBT0Y7QUFDVDtBQUVBLFNBQVNRLHVCQUF1QkMsS0FBYztJQUM1QyxJQUFJLE9BQU9BLFVBQVUsVUFBVTtRQUM3QixPQUFPQTtJQUNUO0lBRUEsSUFDRyxPQUFPQSxVQUFVLFlBQVksQ0FBQ0MsTUFBTUQsVUFDckMsT0FBT0EsVUFBVSxXQUNqQjtRQUNBLE9BQU9FLE9BQU9GO0lBQ2hCLE9BQU87UUFDTCxPQUFPO0lBQ1Q7QUFDRjtBQUVPLFNBQVNYLHVCQUF1QkUsS0FBcUI7SUFDMUQsTUFBTUQsZUFBZSxJQUFJYTtJQUN6QixLQUFLLE1BQU0sQ0FBQ1gsS0FBS0MsTUFBTSxJQUFJVyxPQUFPVixPQUFPLENBQUNILE9BQVE7UUFDaEQsSUFBSUssTUFBTUMsT0FBTyxDQUFDSixRQUFRO1lBQ3hCLEtBQUssTUFBTVksUUFBUVosTUFBTztnQkFDeEJILGFBQWFnQixNQUFNLENBQUNkLEtBQUtPLHVCQUF1Qk07WUFDbEQ7UUFDRixPQUFPO1lBQ0xmLGFBQWFpQixHQUFHLENBQUNmLEtBQUtPLHVCQUF1Qk47UUFDL0M7SUFDRjtJQUNBLE9BQU9IO0FBQ1Q7QUFFTyxTQUFTSCxPQUNkcUIsTUFBdUIsRUFDdkIsR0FBR0MsZ0JBQW1DO0lBRXRDLEtBQUssTUFBTW5CLGdCQUFnQm1CLGlCQUFrQjtRQUMzQyxLQUFLLE1BQU1qQixPQUFPRixhQUFhb0IsSUFBSSxHQUFJO1lBQ3JDRixPQUFPRyxNQUFNLENBQUNuQjtRQUNoQjtRQUVBLEtBQUssTUFBTSxDQUFDQSxLQUFLQyxNQUFNLElBQUlILGFBQWFJLE9BQU8sR0FBSTtZQUNqRGMsT0FBT0YsTUFBTSxDQUFDZCxLQUFLQztRQUNyQjtJQUNGO0lBRUEsT0FBT2U7QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KFxuICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc1xuKTogUGFyc2VkVXJsUXVlcnkge1xuICBjb25zdCBxdWVyeTogUGFyc2VkVXJsUXVlcnkgPSB7fVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzZWFyY2hQYXJhbXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBxdWVyeVtrZXldXG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHF1ZXJ5W2tleV0gPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgIGV4aXN0aW5nLnB1c2godmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5W2tleV0gPSBbZXhpc3RpbmcsIHZhbHVlXVxuICAgIH1cbiAgfVxuICByZXR1cm4gcXVlcnlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5VXJsUXVlcnlQYXJhbShwYXJhbTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcmFtXG4gIH1cblxuICBpZiAoXG4gICAgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHBhcmFtKSkgfHxcbiAgICB0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSk6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhxdWVyeSkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgc3RyaW5naWZ5VXJsUXVlcnlQYXJhbShpdGVtKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VhcmNoUGFyYW1zLnNldChrZXksIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0odmFsdWUpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2VhcmNoUGFyYW1zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24oXG4gIHRhcmdldDogVVJMU2VhcmNoUGFyYW1zLFxuICAuLi5zZWFyY2hQYXJhbXNMaXN0OiBVUkxTZWFyY2hQYXJhbXNbXVxuKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgZm9yIChjb25zdCBzZWFyY2hQYXJhbXMgb2Ygc2VhcmNoUGFyYW1zTGlzdCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHNlYXJjaFBhcmFtcy5rZXlzKCkpIHtcbiAgICAgIHRhcmdldC5kZWxldGUoa2V5KVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNlYXJjaFBhcmFtcy5lbnRyaWVzKCkpIHtcbiAgICAgIHRhcmdldC5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0XG59XG4iXSwibmFtZXMiOlsiYXNzaWduIiwic2VhcmNoUGFyYW1zVG9VcmxRdWVyeSIsInVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMiLCJzZWFyY2hQYXJhbXMiLCJxdWVyeSIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImV4aXN0aW5nIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsInN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0iLCJwYXJhbSIsImlzTmFOIiwiU3RyaW5nIiwiVVJMU2VhcmNoUGFyYW1zIiwiT2JqZWN0IiwiaXRlbSIsImFwcGVuZCIsInNldCIsInRhcmdldCIsInNlYXJjaFBhcmFtc0xpc3QiLCJrZXlzIiwiZGVsZXRlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/router/utils/querystring.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils.js": /*!***************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils.js ***! \***************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DecodeError: function() {\n return DecodeError;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n isResSent: function() {\n return isResSent;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n 'CLS',\n 'FCP',\n 'FID',\n 'INP',\n 'LCP',\n 'TTFB'\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return (...args)=>{\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return `${protocol}//${hostname}${port ? ':' + port : ''}`;\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split('?');\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/').replace(/\\/\\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '');\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(App)}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`;\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = `\"${getDisplayName(App)}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`;\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(`${getDisplayName(App)} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`);\n }\n }\n return props;\n}\nconst SP = typeof performance !== 'undefined';\nconst ST = SP && [\n 'mark',\n 'measure',\n 'getEntriesByName'\n].every((method)=>typeof performance[method] === 'function');\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = 'ENOENT';\n this.name = 'PageNotFoundError';\n this.message = `Cannot find module for page: ${page}`;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = `Failed to load static file for page: ${page} ${message}`;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = 'ENOENT';\n this.message = `Cannot find the middleware module`;\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3V0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQW1hYUEsV0FBVztlQUFYQTs7SUFvQkFDLHVCQUF1QjtlQUF2QkE7O0lBUEFDLGlCQUFpQjtlQUFqQkE7O0lBWkFDLGNBQWM7ZUFBZEE7O0lBQ0FDLGlCQUFpQjtlQUFqQkE7O0lBVEFDLEVBQUU7ZUFBRkE7O0lBQ0FDLEVBQUU7ZUFBRkE7O0lBalhBQyxVQUFVO2VBQVZBOztJQXFRR0MsUUFBUTtlQUFSQTs7SUErQkFDLGNBQWM7ZUFBZEE7O0lBWEFDLGlCQUFpQjtlQUFqQkE7O0lBS0FDLE1BQU07ZUFBTkE7O0lBUEhDLGFBQWE7ZUFBYkE7O0lBbUJHQyxTQUFTO2VBQVRBOztJQWtCTUMsbUJBQW1CO2VBQW5CQTs7SUFkTkMsd0JBQXdCO2VBQXhCQTs7SUErR0FDLGNBQWM7ZUFBZEE7OztBQTdaVCxNQUFNVCxhQUFhO0lBQUM7SUFBTztJQUFPO0lBQU87SUFBTztJQUFPO0NBQU87QUFxUTlELFNBQVNDLFNBQ2RTLEVBQUs7SUFFTCxJQUFJQyxPQUFPO0lBQ1gsSUFBSUM7SUFFSixPQUFRLENBQUMsR0FBR0M7UUFDVixJQUFJLENBQUNGLE1BQU07WUFDVEEsT0FBTztZQUNQQyxTQUFTRixNQUFNRztRQUNqQjtRQUNBLE9BQU9EO0lBQ1Q7QUFDRjtBQUVBLDBEQUEwRDtBQUMxRCxnRUFBZ0U7QUFDaEUsTUFBTUUscUJBQXFCO0FBQ3BCLE1BQU1ULGdCQUFnQixDQUFDVSxNQUFnQkQsbUJBQW1CRSxJQUFJLENBQUNEO0FBRS9ELFNBQVNaO0lBQ2QsTUFBTSxFQUFFYyxR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QmtEO0FBQU87QUFDcEMsTUFBTWpELDBCQUEwQmlEO0lBR3JDVSxZQUFZQyxJQUFZLENBQUU7UUFDeEIsS0FBSztRQUNMLElBQUksQ0FBQ0MsSUFBSSxHQUFHO1FBQ1osSUFBSSxDQUFDOUIsSUFBSSxHQUFHO1FBQ1osSUFBSSxDQUFDaUIsT0FBTyxHQUFHLENBQUMsNkJBQTZCLEVBQUVZLE1BQU07SUFDdkQ7QUFDRjtBQUVPLE1BQU05RCwwQkFBMEJtRDtJQUNyQ1UsWUFBWUMsSUFBWSxFQUFFWixPQUFlLENBQUU7UUFDekMsS0FBSztRQUNMLElBQUksQ0FBQ0EsT0FBTyxHQUFHLENBQUMscUNBQXFDLEVBQUVZLEtBQUssQ0FBQyxFQUFFWixTQUFTO0lBQzFFO0FBQ0Y7QUFFTyxNQUFNbkQsZ0NBQWdDb0Q7SUFFM0NVLGFBQWM7UUFDWixLQUFLO1FBQ0wsSUFBSSxDQUFDRSxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNiLE9BQU8sR0FBRyxDQUFDLGlDQUFpQyxDQUFDO0lBQ3BEO0FBQ0Y7QUFXTyxTQUFTcEMsZUFBZWtELEtBQVk7SUFDekMsT0FBT0MsS0FBS0MsU0FBUyxDQUFDO1FBQUVoQixTQUFTYyxNQUFNZCxPQUFPO1FBQUVpQixPQUFPSCxNQUFNRyxLQUFLO0lBQUM7QUFDckUiLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcmMvc2hhcmVkL2xpYi91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEh0bWxQcm9wcyB9IGZyb20gJy4vaHRtbC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlLCBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vc2VydmVyL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgRW52IH0gZnJvbSAnQG5leHQvZW52J1xuaW1wb3J0IHR5cGUgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyL3JvdXRlcidcbmltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB0eXBlIHsgUHJldmlld0RhdGEgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ09NUElMRVJfTkFNRVMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGZzIGZyb20gJ2ZzJ1xuXG5leHBvcnQgdHlwZSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQ29udGV4dCBleHRlbmRzIEJhc2VDb250ZXh0ID0gTmV4dFBhZ2VDb250ZXh0LFxuICBJbml0aWFsUHJvcHMgPSB7fSxcbiAgUHJvcHMgPSB7fSxcbj4gPSBDb21wb25lbnRUeXBlPFByb3BzPiAmIHtcbiAgLyoqXG4gICAqIFVzZWQgZm9yIGluaXRpYWwgcGFnZSBsb2FkIGRhdGEgcG9wdWxhdGlvbi4gRGF0YSByZXR1cm5lZCBmcm9tIGBnZXRJbml0aWFsUHJvcHNgIGlzIHNlcmlhbGl6ZWQgd2hlbiBzZXJ2ZXIgcmVuZGVyZWQuXG4gICAqIE1ha2Ugc3VyZSB0byByZXR1cm4gcGxhaW4gYE9iamVjdGAgd2l0aG91dCB1c2luZyBgRGF0ZWAsIGBNYXBgLCBgU2V0YC5cbiAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBgcGFnZWBcbiAgICovXG4gIGdldEluaXRpYWxQcm9wcz8oY29udGV4dDogQ29udGV4dCk6IEluaXRpYWxQcm9wcyB8IFByb21pc2U8SW5pdGlhbFByb3BzPlxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFR5cGUgPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgRG9jdW1lbnRDb250ZXh0LFxuICBEb2N1bWVudEluaXRpYWxQcm9wcyxcbiAgRG9jdW1lbnRQcm9wc1xuPlxuXG5leHBvcnQgdHlwZSBBcHBUeXBlPFAgPSB7fT4gPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQXBwQ29udGV4dFR5cGUsXG4gIFAsXG4gIEFwcFByb3BzVHlwZTxhbnksIFA+XG4+XG5cbmV4cG9ydCB0eXBlIEFwcFRyZWVUeXBlID0gQ29tcG9uZW50VHlwZTxcbiAgQXBwSW5pdGlhbFByb3BzICYgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbj5cblxuLyoqXG4gKiBXZWIgdml0YWxzIHByb3ZpZGVkIHRvIF9hcHAucmVwb3J0V2ViVml0YWxzIGJ5IENvcmUgV2ViIFZpdGFscyBwbHVnaW4gZGV2ZWxvcGVkIGJ5IEdvb2dsZSBDaHJvbWUgdGVhbS5cbiAqIGh0dHBzOi8vbmV4dGpzLm9yZy9ibG9nL25leHQtOS00I2ludGVncmF0ZWQtd2ViLXZpdGFscy1yZXBvcnRpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9WSVRBTFMgPSBbJ0NMUycsICdGQ1AnLCAnRklEJywgJ0lOUCcsICdMQ1AnLCAnVFRGQiddIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBOZXh0V2ViVml0YWxzTWV0cmljID0ge1xuICBpZDogc3RyaW5nXG4gIHN0YXJ0VGltZTogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbiAgYXR0cmlidXRpb24/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfVxufSAmIChcbiAgfCB7XG4gICAgICBsYWJlbDogJ3dlYi12aXRhbCdcbiAgICAgIG5hbWU6ICh0eXBlb2YgV0VCX1ZJVEFMUylbbnVtYmVyXVxuICAgIH1cbiAgfCB7XG4gICAgICBsYWJlbDogJ2N1c3RvbSdcbiAgICAgIG5hbWU6XG4gICAgICAgIHwgJ05leHQuanMtaHlkcmF0aW9uJ1xuICAgICAgICB8ICdOZXh0LmpzLXJvdXRlLWNoYW5nZS10by1yZW5kZXInXG4gICAgICAgIHwgJ05leHQuanMtcmVuZGVyJ1xuICAgIH1cbilcblxuZXhwb3J0IHR5cGUgRW5oYW5jZXI8Qz4gPSAoQ29tcG9uZW50OiBDKSA9PiBDXG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudHNFbmhhbmNlciA9XG4gIHwge1xuICAgICAgZW5oYW5jZUFwcD86IEVuaGFuY2VyPEFwcFR5cGU+XG4gICAgICBlbmhhbmNlQ29tcG9uZW50PzogRW5oYW5jZXI8TmV4dENvbXBvbmVudFR5cGU+XG4gICAgfVxuICB8IEVuaGFuY2VyPE5leHRDb21wb25lbnRUeXBlPlxuXG5leHBvcnQgdHlwZSBSZW5kZXJQYWdlUmVzdWx0ID0ge1xuICBodG1sOiBzdHJpbmdcbiAgaGVhZD86IEFycmF5PEpTWC5FbGVtZW50IHwgbnVsbD5cbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyUGFnZSA9IChcbiAgb3B0aW9ucz86IENvbXBvbmVudHNFbmhhbmNlclxuKSA9PiBEb2N1bWVudEluaXRpYWxQcm9wcyB8IFByb21pc2U8RG9jdW1lbnRJbml0aWFsUHJvcHM+XG5cbmV4cG9ydCB0eXBlIEJhc2VDb250ZXh0ID0ge1xuICByZXM/OiBTZXJ2ZXJSZXNwb25zZVxuICBbazogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIE5FWFRfREFUQSA9IHtcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgcGFnZTogc3RyaW5nXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuICBidWlsZElkOiBzdHJpbmdcbiAgYXNzZXRQcmVmaXg/OiBzdHJpbmdcbiAgbmV4dEV4cG9ydD86IGJvb2xlYW5cbiAgYXV0b0V4cG9ydD86IGJvb2xlYW5cbiAgaXNGYWxsYmFjaz86IGJvb2xlYW5cbiAgaXNFeHBlcmltZW50YWxDb21waWxlPzogYm9vbGVhblxuICBkeW5hbWljSWRzPzogKHN0cmluZyB8IG51bWJlcilbXVxuICBlcnI/OiBFcnJvciAmIHtcbiAgICBzdGF0dXNDb2RlPzogbnVtYmVyXG4gICAgc291cmNlPzogdHlwZW9mIENPTVBJTEVSX05BTUVTLnNlcnZlciB8IHR5cGVvZiBDT01QSUxFUl9OQU1FUy5lZGdlU2VydmVyXG4gIH1cbiAgZ3NwPzogYm9vbGVhblxuICBnc3NwPzogYm9vbGVhblxuICBjdXN0b21TZXJ2ZXI/OiBib29sZWFuXG4gIGdpcD86IGJvb2xlYW5cbiAgYXBwR2lwPzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmdcbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmdcbiAgZG9tYWluTG9jYWxlcz86IHJlYWRvbmx5IERvbWFpbkxvY2FsZVtdXG4gIHNjcmlwdExvYWRlcj86IGFueVtdXG4gIGlzUHJldmlldz86IGJvb2xlYW5cbiAgbm90Rm91bmRTcmNQYWdlPzogc3RyaW5nXG59XG5cbi8qKlxuICogYE5leHRgIGNvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0UGFnZUNvbnRleHQge1xuICAvKipcbiAgICogRXJyb3Igb2JqZWN0IGlmIGVuY291bnRlcmVkIGR1cmluZyByZW5kZXJpbmdcbiAgICovXG4gIGVycj86IChFcnJvciAmIHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSB8IG51bGxcbiAgLyoqXG4gICAqIGBIVFRQYCByZXF1ZXN0IG9iamVjdC5cbiAgICovXG4gIHJlcT86IEluY29taW5nTWVzc2FnZVxuICAvKipcbiAgICogYEhUVFBgIHJlc3BvbnNlIG9iamVjdC5cbiAgICovXG4gIHJlcz86IFNlcnZlclJlc3BvbnNlXG4gIC8qKlxuICAgKiBQYXRoIHNlY3Rpb24gb2YgYFVSTGAuXG4gICAqL1xuICBwYXRobmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBRdWVyeSBzdHJpbmcgc2VjdGlvbiBvZiBgVVJMYCBwYXJzZWQgYXMgYW4gb2JqZWN0LlxuICAgKi9cbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIC8qKlxuICAgKiBgU3RyaW5nYCBvZiB0aGUgYWN0dWFsIHBhdGggaW5jbHVkaW5nIHF1ZXJ5LlxuICAgKi9cbiAgYXNQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBsb2NhbGVcbiAgICovXG4gIGxvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogQWxsIGNvbmZpZ3VyZWQgbG9jYWxlc1xuICAgKi9cbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJlZCBkZWZhdWx0IGxvY2FsZVxuICAgKi9cbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogYENvbXBvbmVudGAgdGhlIHRyZWUgb2YgdGhlIEFwcCB0byB1c2UgaWYgbmVlZGluZyB0byByZW5kZXIgc2VwYXJhdGVseVxuICAgKi9cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbn1cblxuZXhwb3J0IHR5cGUgQXBwQ29udGV4dFR5cGU8Um91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXI+ID0ge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dD5cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbiAgY3R4OiBOZXh0UGFnZUNvbnRleHRcbiAgcm91dGVyOiBSb3V0ZXJcbn1cblxuZXhwb3J0IHR5cGUgQXBwSW5pdGlhbFByb3BzPFBhZ2VQcm9wcyA9IGFueT4gPSB7XG4gIHBhZ2VQcm9wczogUGFnZVByb3BzXG59XG5cbmV4cG9ydCB0eXBlIEFwcFByb3BzVHlwZTxcbiAgUm91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXIsXG4gIFBhZ2VQcm9wcyA9IHt9LFxuPiA9IEFwcEluaXRpYWxQcm9wczxQYWdlUHJvcHM+ICYge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dCwgYW55LCBhbnk+XG4gIHJvdXRlcjogUm91dGVyXG4gIF9fTl9TU0c/OiBib29sZWFuXG4gIF9fTl9TU1A/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50Q29udGV4dCA9IE5leHRQYWdlQ29udGV4dCAmIHtcbiAgcmVuZGVyUGFnZTogUmVuZGVyUGFnZVxuICBkZWZhdWx0R2V0SW5pdGlhbFByb3BzKFxuICAgIGN0eDogRG9jdW1lbnRDb250ZXh0LFxuICAgIG9wdGlvbnM/OiB7IG5vbmNlPzogc3RyaW5nIH1cbiAgKTogUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz5cbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRJbml0aWFsUHJvcHMgPSBSZW5kZXJQYWdlUmVzdWx0ICYge1xuICBzdHlsZXM/OiBSZWFjdC5SZWFjdEVsZW1lbnRbXSB8IEl0ZXJhYmxlPFJlYWN0LlJlYWN0Tm9kZT4gfCBKU1guRWxlbWVudFxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFByb3BzID0gRG9jdW1lbnRJbml0aWFsUHJvcHMgJiBIdG1sUHJvcHNcblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0QXBpUmVxdWVzdCBleHRlbmRzIEluY29taW5nTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgYHF1ZXJ5YCB2YWx1ZXMgZnJvbSB1cmxcbiAgICovXG4gIHF1ZXJ5OiBQYXJ0aWFsPHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXVxuICB9PlxuICAvKipcbiAgICogT2JqZWN0IG9mIGBjb29raWVzYCBmcm9tIGhlYWRlclxuICAgKi9cbiAgY29va2llczogUGFydGlhbDx7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nXG4gIH0+XG5cbiAgYm9keTogYW55XG5cbiAgZW52OiBFbnZcblxuICBkcmFmdE1vZGU/OiBib29sZWFuXG5cbiAgcHJldmlldz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFByZXZpZXcgZGF0YSBzZXQgb24gdGhlIHJlcXVlc3QsIGlmIGFueVxuICAgKiAqL1xuICBwcmV2aWV3RGF0YT86IFByZXZpZXdEYXRhXG59XG5cbi8qKlxuICogU2VuZCBib2R5IG9mIHJlc3BvbnNlXG4gKi9cbnR5cGUgU2VuZDxUPiA9IChib2R5OiBUKSA9PiB2b2lkXG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSByZXNwb25zZVxuICovXG5leHBvcnQgdHlwZSBOZXh0QXBpUmVzcG9uc2U8RGF0YSA9IGFueT4gPSBTZXJ2ZXJSZXNwb25zZSAmIHtcbiAgLyoqXG4gICAqIFNlbmQgZGF0YSBgYW55YCBkYXRhIGluIHJlc3BvbnNlXG4gICAqL1xuICBzZW5kOiBTZW5kPERhdGE+XG4gIC8qKlxuICAgKiBTZW5kIGRhdGEgYGpzb25gIGRhdGEgaW4gcmVzcG9uc2VcbiAgICovXG4gIGpzb246IFNlbmQ8RGF0YT5cbiAgc3RhdHVzOiAoc3RhdHVzQ29kZTogbnVtYmVyKSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3QodXJsOiBzdHJpbmcpOiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3Qoc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKTogTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIFNldCBkcmFmdCBtb2RlXG4gICAqL1xuICBzZXREcmFmdE1vZGU6IChvcHRpb25zOiB7IGVuYWJsZTogYm9vbGVhbiB9KSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogU2V0IHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIHNldFByZXZpZXdEYXRhOiAoXG4gICAgZGF0YTogb2JqZWN0IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIChpbiBzZWNvbmRzKSBmb3IgdGhlIHByZXZpZXcgc2Vzc2lvbiB0byBsYXN0IGZvci5cbiAgICAgICAqIFRoZSBnaXZlbiBudW1iZXIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBieSByb3VuZGluZyBkb3duLlxuICAgICAgICogQnkgZGVmYXVsdCwgbm8gbWF4aW11bSBhZ2UgaXMgc2V0IGFuZCB0aGUgcHJldmlldyBzZXNzaW9uIGZpbmlzaGVzXG4gICAgICAgKiB3aGVuIHRoZSBjbGllbnQgc2h1dHMgZG93biAoYnJvd3NlciBpcyBjbG9zZWQpLlxuICAgICAgICovXG4gICAgICBtYXhBZ2U/OiBudW1iZXJcbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoZSBwYXRoIGZvciB0aGUgcHJldmlldyBzZXNzaW9uIHRvIHdvcmsgdW5kZXIuIEJ5IGRlZmF1bHQsXG4gICAgICAgKiB0aGUgcGF0aCBpcyBjb25zaWRlcmVkIHRoZSBcImRlZmF1bHQgcGF0aFwiLCBpLmUuLCBhbnkgcGFnZXMgdW5kZXIgXCIvXCIuXG4gICAgICAgKi9cbiAgICAgIHBhdGg/OiBzdHJpbmdcbiAgICB9XG4gICkgPT4gTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIENsZWFyIHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIGNsZWFyUHJldmlld0RhdGE6IChvcHRpb25zPzogeyBwYXRoPzogc3RyaW5nIH0pID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlIGEgc3BlY2lmaWMgcGFnZSBhbmQgcmVnZW5lcmF0ZSBpdCB1c2luZyBPbi1EZW1hbmQgSW5jcmVtZW50YWxcbiAgICogU3RhdGljIFJlZ2VuZXJhdGlvbi5cbiAgICogVGhlIHBhdGggc2hvdWxkIGJlIGFuIGFjdHVhbCBwYXRoLCBub3QgYSByZXdyaXR0ZW4gcGF0aC4gRS5nLiBmb3JcbiAgICogXCIvYmxvZy9bc2x1Z11cIiB0aGlzIHNob3VsZCBiZSBcIi9ibG9nL3Bvc3QtMVwiLlxuICAgKiBAbGluayBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL2luY3JlbWVudGFsLXN0YXRpYy1yZWdlbmVyYXRpb24jb24tZGVtYW5kLXJldmFsaWRhdGlvbi13aXRoLXJldmFsaWRhdGVwYXRoXG4gICAqL1xuICByZXZhbGlkYXRlOiAoXG4gICAgdXJsUGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkPzogYm9vbGVhblxuICAgIH1cbiAgKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSBoYW5kbGVyXG4gKi9cbmV4cG9ydCB0eXBlIE5leHRBcGlIYW5kbGVyPFQgPSBhbnk+ID0gKFxuICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICByZXM6IE5leHRBcGlSZXNwb25zZTxUPlxuKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPlxuXG4vKipcbiAqIFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjT25jZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBSZXR1cm5UeXBlPFQ+PihcbiAgZm46IFRcbik6IFQge1xuICBsZXQgdXNlZCA9IGZhbHNlXG4gIGxldCByZXN1bHQ6IFJldHVyblR5cGU8VD5cblxuICByZXR1cm4gKCguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGlmICghdXNlZCkge1xuICAgICAgdXNlZCA9IHRydWVcbiAgICAgIHJlc3VsdCA9IGZuKC4uLmFyZ3MpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSkgYXMgVFxufVxuXG4vLyBTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG4vLyBBYnNvbHV0ZSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zXG5jb25zdCBBQlNPTFVURV9VUkxfUkVHRVggPSAvXlthLXpBLVpdW2EtekEtWlxcZCtcXC0uXSo/Oi9cbmV4cG9ydCBjb25zdCBpc0Fic29sdXRlVXJsID0gKHVybDogc3RyaW5nKSA9PiBBQlNPTFVURV9VUkxfUkVHRVgudGVzdCh1cmwpXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhdGlvbk9yaWdpbigpIHtcbiAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/ICc6JyArIHBvcnQgOiAnJ31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVUkwoKSB7XG4gIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93LmxvY2F0aW9uXG4gIGNvbnN0IG9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgcmV0dXJuIGhyZWYuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZTxQPihDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8UD4pIHtcbiAgcmV0dXJuIHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gICAgPyBDb21wb25lbnRcbiAgICA6IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnVW5rbm93bidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzU2VudChyZXM6IFNlcnZlclJlc3BvbnNlKSB7XG4gIHJldHVybiByZXMuZmluaXNoZWQgfHwgcmVzLmhlYWRlcnNTZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXBlYXRlZFNsYXNoZXModXJsOiBzdHJpbmcpIHtcbiAgY29uc3QgdXJsUGFydHMgPSB1cmwuc3BsaXQoJz8nKVxuICBjb25zdCB1cmxOb1F1ZXJ5ID0gdXJsUGFydHNbMF1cblxuICByZXR1cm4gKFxuICAgIHVybE5vUXVlcnlcbiAgICAgIC8vIGZpcnN0IHdlIHJlcGxhY2UgYW55IG5vbi1lbmNvZGVkIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZFxuICAgICAgLy8gdGhlbiBub3JtYWxpemUgcmVwZWF0ZWQgZm9yd2FyZCBzbGFzaGVzXG4gICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpICtcbiAgICAodXJsUGFydHNbMV0gPyBgPyR7dXJsUGFydHMuc2xpY2UoMSkuam9pbignPycpfWAgOiAnJylcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEdldEluaXRpYWxQcm9wczxcbiAgQyBleHRlbmRzIEJhc2VDb250ZXh0LFxuICBJUCA9IHt9LFxuICBQID0ge30sXG4+KEFwcDogTmV4dENvbXBvbmVudFR5cGU8QywgSVAsIFA+LCBjdHg6IEMpOiBQcm9taXNlPElQPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKEFwcC5wcm90b3R5cGU/LmdldEluaXRpYWxQcm9wcykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBcIiR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICAgIEFwcFxuICAgICAgKX0uZ2V0SW5pdGlhbFByb3BzKClcIiBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAtIHZpc2l0IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dldC1pbml0aWFsLXByb3BzLWFzLWFuLWluc3RhbmNlLW1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgICB9XG4gIH1cbiAgLy8gd2hlbiBjYWxsZWQgZnJvbSBfYXBwIGBjdHhgIGlzIG5lc3RlZCBpbiBgY3R4YFxuICBjb25zdCByZXMgPSBjdHgucmVzIHx8IChjdHguY3R4ICYmIGN0eC5jdHgucmVzKVxuXG4gIGlmICghQXBwLmdldEluaXRpYWxQcm9wcykge1xuICAgIGlmIChjdHguY3R4ICYmIGN0eC5Db21wb25lbnQpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgcGFnZVByb3BzIGRlZmF1bHRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VQcm9wczogYXdhaXQgbG9hZEdldEluaXRpYWxQcm9wcyhjdHguQ29tcG9uZW50LCBjdHguY3R4KSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9IGFzIElQXG4gIH1cblxuICBjb25zdCBwcm9wcyA9IGF3YWl0IEFwcC5nZXRJbml0aWFsUHJvcHMoY3R4KVxuXG4gIGlmIChyZXMgJiYgaXNSZXNTZW50KHJlcykpIHtcbiAgICByZXR1cm4gcHJvcHNcbiAgfVxuXG4gIGlmICghcHJvcHMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYFwiJHtnZXREaXNwbGF5TmFtZShcbiAgICAgIEFwcFxuICAgICl9LmdldEluaXRpYWxQcm9wcygpXCIgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0LiBCdXQgZm91bmQgXCIke3Byb3BzfVwiIGluc3RlYWQuYFxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMCAmJiAhY3R4LmN0eCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgJHtnZXREaXNwbGF5TmFtZShcbiAgICAgICAgICBBcHBcbiAgICAgICAgKX0gcmV0dXJuZWQgYW4gZW1wdHkgb2JqZWN0IGZyb20gXFxgZ2V0SW5pdGlhbFByb3BzXFxgLiBUaGlzIGRlLW9wdGltaXplcyBhbmQgcHJldmVudHMgYXV0b21hdGljIHN0YXRpYyBvcHRpbWl6YXRpb24uIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2VtcHR5LW9iamVjdC1nZXRJbml0aWFsUHJvcHNgXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb3BzXG59XG5cbmV4cG9ydCBjb25zdCBTUCA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCdcbmV4cG9ydCBjb25zdCBTVCA9XG4gIFNQICYmXG4gIChbJ21hcmsnLCAnbWVhc3VyZScsICdnZXRFbnRyaWVzQnlOYW1lJ10gYXMgY29uc3QpLmV2ZXJ5KFxuICAgIChtZXRob2QpID0+IHR5cGVvZiBwZXJmb3JtYW5jZVttZXRob2RdID09PSAnZnVuY3Rpb24nXG4gIClcblxuZXhwb3J0IGNsYXNzIERlY29kZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmV4cG9ydCBjbGFzcyBOb3JtYWxpemVFcnJvciBleHRlbmRzIEVycm9yIHt9XG5leHBvcnQgY2xhc3MgUGFnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNvZGUgPSAnRU5PRU5UJ1xuICAgIHRoaXMubmFtZSA9ICdQYWdlTm90Rm91bmRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBgQ2Fubm90IGZpbmQgbW9kdWxlIGZvciBwYWdlOiAke3BhZ2V9YFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nU3RhdGljUGFnZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocGFnZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIHN0YXRpYyBmaWxlIGZvciBwYWdlOiAke3BhZ2V9ICR7bWVzc2FnZX1gXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb2RlOiBzdHJpbmdcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29kZSA9ICdFTk9FTlQnXG4gICAgdGhpcy5tZXNzYWdlID0gYENhbm5vdCBmaW5kIHRoZSBtaWRkbGV3YXJlIG1vZHVsZWBcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlRnMge1xuICBleGlzdHNTeW5jOiB0eXBlb2YgZnMuZXhpc3RzU3luY1xuICByZWFkRmlsZTogdHlwZW9mIGZzLnByb21pc2VzLnJlYWRGaWxlXG4gIHJlYWRGaWxlU3luYzogdHlwZW9mIGZzLnJlYWRGaWxlU3luY1xuICB3cml0ZUZpbGUoZjogc3RyaW5nLCBkOiBhbnkpOiBQcm9taXNlPHZvaWQ+XG4gIG1rZGlyKGRpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgc3RyaW5nPlxuICBzdGF0KGY6IHN0cmluZyk6IFByb21pc2U8eyBtdGltZTogRGF0ZSB9PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFjayB9KVxufVxuIl0sIm5hbWVzIjpbIkRlY29kZUVycm9yIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJNaXNzaW5nU3RhdGljUGFnZSIsIk5vcm1hbGl6ZUVycm9yIiwiUGFnZU5vdEZvdW5kRXJyb3IiLCJTUCIsIlNUIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiZ2V0RGlzcGxheU5hbWUiLCJnZXRMb2NhdGlvbk9yaWdpbiIsImdldFVSTCIsImlzQWJzb2x1dGVVcmwiLCJpc1Jlc1NlbnQiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwic3RyaW5naWZ5RXJyb3IiLCJmbiIsInVzZWQiLCJyZXN1bHQiLCJhcmdzIiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJuYW1lIiwicmVzIiwiZmluaXNoZWQiLCJoZWFkZXJzU2VudCIsInVybFBhcnRzIiwic3BsaXQiLCJ1cmxOb1F1ZXJ5IiwicmVwbGFjZSIsInNsaWNlIiwiam9pbiIsIkFwcCIsImN0eCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3RvdHlwZSIsImdldEluaXRpYWxQcm9wcyIsIm1lc3NhZ2UiLCJFcnJvciIsInBhZ2VQcm9wcyIsInByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImNvbnNvbGUiLCJ3YXJuIiwicGVyZm9ybWFuY2UiLCJldmVyeSIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiwicGFnZSIsImNvZGUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFjayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/error-once.js": /*!**************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/error-once.js ***! \**************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"errorOnce\", ({\n enumerable: true,\n get: function() {\n return errorOnce;\n }\n}));\nlet errorOnce = (_)=>{};\nif (true) {\n const errors = new Set();\n errorOnce = (msg)=>{\n if (!errors.has(msg)) {\n console.error(msg);\n }\n errors.add(msg);\n };\n} //# sourceMappingURL=error-once.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3V0aWxzL2Vycm9yLW9uY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs2Q0FXU0E7OztlQUFBQTs7O0FBWFQsSUFBSUEsWUFBWSxDQUFDQyxLQUFlO0FBQ2hDLElBQUlDLElBQW9CLEVBQW1CO0lBQ3pDLE1BQU1HLFNBQVMsSUFBSUM7SUFDbkJOLFlBQVksQ0FBQ087UUFDWCxJQUFJLENBQUNGLE9BQU9HLEdBQUcsQ0FBQ0QsTUFBTTtZQUNwQkUsUUFBUUMsS0FBSyxDQUFDSDtRQUNoQjtRQUNBRixPQUFPTSxHQUFHLENBQUNKO0lBQ2I7QUFDRiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3V0aWxzL2Vycm9yLW9uY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IGVycm9yT25jZSA9IChfOiBzdHJpbmcpID0+IHt9XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBjb25zdCBlcnJvcnMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBlcnJvck9uY2UgPSAobXNnOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWVycm9ycy5oYXMobXNnKSkge1xuICAgICAgY29uc29sZS5lcnJvcihtc2cpXG4gICAgfVxuICAgIGVycm9ycy5hZGQobXNnKVxuICB9XG59XG5cbmV4cG9ydCB7IGVycm9yT25jZSB9XG4iXSwibmFtZXMiOlsiZXJyb3JPbmNlIiwiXyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImVycm9ycyIsIlNldCIsIm1zZyIsImhhcyIsImNvbnNvbGUiLCJlcnJvciIsImFkZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/error-once.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/reflect-utils.js": /*!*****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/reflect-utils.js ***! \*****************************************************************************************************************************************************************************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("// This regex will have fast negatives meaning valid identifiers may not pass\n// this test. However this is only used during static generation to provide hints\n// about why a page bailed out of some or all prerendering and we can use bracket notation\n// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']`\n// even if this would have been fine too `searchParams.ಠ_ಠ`\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n describeHasCheckingStringProperty: function() {\n return describeHasCheckingStringProperty;\n },\n describeStringPropertyAccess: function() {\n return describeStringPropertyAccess;\n },\n wellKnownProperties: function() {\n return wellKnownProperties;\n }\n});\nconst isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nfunction describeStringPropertyAccess(target, prop) {\n if (isDefinitelyAValidIdentifier.test(prop)) {\n return `\\`${target}.${prop}\\``;\n }\n return `\\`${target}[${JSON.stringify(prop)}]\\``;\n}\nfunction describeHasCheckingStringProperty(target, prop) {\n const stringifiedProp = JSON.stringify(prop);\n return `\\`Reflect.has(${target}, ${stringifiedProp})\\`, \\`${stringifiedProp} in ${target}\\`, or similar`;\n}\nconst wellKnownProperties = new Set([\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n // Promise prototype\n 'then',\n 'catch',\n 'finally',\n // React Promise extension\n 'status',\n // 'value',\n // 'error',\n // React introspection\n 'displayName',\n '_debugInfo',\n // Common tested properties\n 'toJSON',\n '$$typeof',\n '__esModule'\n]); //# sourceMappingURL=reflect-utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2LjEuNl9AYmFiZWwrY29yZUA3LjI5LjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4xX3JlYWN0LWRvbUAxOS4yLjRfcmVhY3RAMTkuMi40X19yZWFjdEAxOS4yLjRfc2Fzc0AxLjk4LjAvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3V0aWxzL3JlZmxlY3QtdXRpbHMuanMiLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLGlGQUFpRjtBQUNqRiwwRkFBMEY7QUFDMUYsdUZBQXVGO0FBQ3ZGLDJEQUEyRDs7Ozs7Ozs7Ozs7OztJQVUzQ0EsaUNBQWlDO2VBQWpDQTs7SUFQQUMsNEJBQTRCO2VBQTVCQTs7SUFlSEMsbUJBQW1CO2VBQW5CQTs7O0FBakJiLE1BQU1DLCtCQUErQjtBQUU5QixTQUFTRiw2QkFBNkJHLE1BQWMsRUFBRUMsSUFBWTtJQUN2RSxJQUFJRiw2QkFBNkJHLElBQUksQ0FBQ0QsT0FBTztRQUMzQyxPQUFPLENBQUMsRUFBRSxFQUFFRCxPQUFPLENBQUMsRUFBRUMsS0FBSyxFQUFFLENBQUM7SUFDaEM7SUFDQSxPQUFPLENBQUMsRUFBRSxFQUFFRCxPQUFPLENBQUMsRUFBRUcsS0FBS0MsU0FBUyxDQUFDSCxNQUFNLEdBQUcsQ0FBQztBQUNqRDtBQUVPLFNBQVNMLGtDQUNkSSxNQUFjLEVBQ2RDLElBQVk7SUFFWixNQUFNSSxrQkFBa0JGLEtBQUtDLFNBQVMsQ0FBQ0g7SUFDdkMsT0FBTyxDQUFDLGNBQWMsRUFBRUQsT0FBTyxFQUFFLEVBQUVLLGdCQUFnQixPQUFPLEVBQUVBLGdCQUFnQixJQUFJLEVBQUVMLE9BQU8sY0FBYyxDQUFDO0FBQzFHO0FBRU8sTUFBTUYsc0JBQXNCLElBQUlRLElBQUk7SUFDekM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUEsb0JBQW9CO0lBQ3BCO0lBQ0E7SUFDQTtJQUVBLDBCQUEwQjtJQUMxQjtJQUNBLFdBQVc7SUFDWCxXQUFXO0lBRVgsc0JBQXNCO0lBQ3RCO0lBQ0E7SUFFQSwyQkFBMkI7SUFDM0I7SUFDQTtJQUNBO0NBQ0QiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi91dGlscy9yZWZsZWN0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgcmVnZXggd2lsbCBoYXZlIGZhc3QgbmVnYXRpdmVzIG1lYW5pbmcgdmFsaWQgaWRlbnRpZmllcnMgbWF5IG5vdCBwYXNzXG4vLyB0aGlzIHRlc3QuIEhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVzZWQgZHVyaW5nIHN0YXRpYyBnZW5lcmF0aW9uIHRvIHByb3ZpZGUgaGludHNcbi8vIGFib3V0IHdoeSBhIHBhZ2UgYmFpbGVkIG91dCBvZiBzb21lIG9yIGFsbCBwcmVyZW5kZXJpbmcgYW5kIHdlIGNhbiB1c2UgYnJhY2tldCBub3RhdGlvblxuLy8gZm9yIGV4YW1wbGUgd2hpbGUgYOCyoF/gsqBgIGlzIGEgdmFsaWQgaWRlbnRpZmllciBpdCdzIG9rIHRvIHByaW50IGBzZWFyY2hQYXJhbXNbJ+CyoF/gsqAnXWBcbi8vIGV2ZW4gaWYgdGhpcyB3b3VsZCBoYXZlIGJlZW4gZmluZSB0b28gYHNlYXJjaFBhcmFtcy7gsqBf4LKgYFxuY29uc3QgaXNEZWZpbml0ZWx5QVZhbGlkSWRlbnRpZmllciA9IC9eW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJC9cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlU3RyaW5nUHJvcGVydHlBY2Nlc3ModGFyZ2V0OiBzdHJpbmcsIHByb3A6IHN0cmluZykge1xuICBpZiAoaXNEZWZpbml0ZWx5QVZhbGlkSWRlbnRpZmllci50ZXN0KHByb3ApKSB7XG4gICAgcmV0dXJuIGBcXGAke3RhcmdldH0uJHtwcm9wfVxcYGBcbiAgfVxuICByZXR1cm4gYFxcYCR7dGFyZ2V0fVske0pTT04uc3RyaW5naWZ5KHByb3ApfV1cXGBgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZUhhc0NoZWNraW5nU3RyaW5nUHJvcGVydHkoXG4gIHRhcmdldDogc3RyaW5nLFxuICBwcm9wOiBzdHJpbmdcbikge1xuICBjb25zdCBzdHJpbmdpZmllZFByb3AgPSBKU09OLnN0cmluZ2lmeShwcm9wKVxuICByZXR1cm4gYFxcYFJlZmxlY3QuaGFzKCR7dGFyZ2V0fSwgJHtzdHJpbmdpZmllZFByb3B9KVxcYCwgXFxgJHtzdHJpbmdpZmllZFByb3B9IGluICR7dGFyZ2V0fVxcYCwgb3Igc2ltaWxhcmBcbn1cblxuZXhwb3J0IGNvbnN0IHdlbGxLbm93blByb3BlcnRpZXMgPSBuZXcgU2V0KFtcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZicsXG4gICd0b0xvY2FsZVN0cmluZycsXG5cbiAgLy8gUHJvbWlzZSBwcm90b3R5cGVcbiAgJ3RoZW4nLFxuICAnY2F0Y2gnLFxuICAnZmluYWxseScsXG5cbiAgLy8gUmVhY3QgUHJvbWlzZSBleHRlbnNpb25cbiAgJ3N0YXR1cycsXG4gIC8vICd2YWx1ZScsXG4gIC8vICdlcnJvcicsXG5cbiAgLy8gUmVhY3QgaW50cm9zcGVjdGlvblxuICAnZGlzcGxheU5hbWUnLFxuICAnX2RlYnVnSW5mbycsXG5cbiAgLy8gQ29tbW9uIHRlc3RlZCBwcm9wZXJ0aWVzXG4gICd0b0pTT04nLFxuICAnJCR0eXBlb2YnLFxuICAnX19lc01vZHVsZScsXG5dKVxuIl0sIm5hbWVzIjpbImRlc2NyaWJlSGFzQ2hlY2tpbmdTdHJpbmdQcm9wZXJ0eSIsImRlc2NyaWJlU3RyaW5nUHJvcGVydHlBY2Nlc3MiLCJ3ZWxsS25vd25Qcm9wZXJ0aWVzIiwiaXNEZWZpbml0ZWx5QVZhbGlkSWRlbnRpZmllciIsInRhcmdldCIsInByb3AiLCJ0ZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0cmluZ2lmaWVkUHJvcCIsIlNldCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/shared/lib/utils/reflect-utils.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/defaultAccess.js": /*!****************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/defaultAccess.js ***! \****************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defaultAccess: () => (/* binding */ defaultAccess)\n/* harmony export */ });\nconst defaultAccess = ({ req: { user } })=>Boolean(user);\n\n//# sourceMappingURL=defaultAccess.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2F1dGgvZGVmYXVsdEFjY2Vzcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8seUJBQXlCLE9BQU8sUUFBUTs7QUFFL0MiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC9hdXRoL2RlZmF1bHRBY2Nlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGRlZmF1bHRBY2Nlc3MgPSAoeyByZXE6IHsgdXNlciB9IH0pPT5Cb29sZWFuKHVzZXIpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0QWNjZXNzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/defaultAccess.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/defaults.js": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/defaults.js ***! \*************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addDefaultsToAuthConfig: () => (/* binding */ addDefaultsToAuthConfig),\n/* harmony export */ addDefaultsToCollectionConfig: () => (/* binding */ addDefaultsToCollectionConfig),\n/* harmony export */ addDefaultsToLoginWithUsernameConfig: () => (/* binding */ addDefaultsToLoginWithUsernameConfig),\n/* harmony export */ authDefaults: () => (/* binding */ authDefaults),\n/* harmony export */ defaults: () => (/* binding */ defaults),\n/* harmony export */ loginWithUsernameDefaults: () => (/* binding */ loginWithUsernameDefaults)\n/* harmony export */ });\n/* harmony import */ var _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../auth/defaultAccess.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/auth/defaultAccess.js\");\n\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */ const defaults = {\n access: {\n create: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n delete: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n read: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n unlock: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n update: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess\n },\n admin: {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n pagination: {\n defaultLimit: 10,\n limits: [\n 5,\n 10,\n 25,\n 50,\n 100\n ]\n },\n useAsTitle: 'id'\n },\n auth: false,\n custom: {},\n endpoints: [],\n fields: [],\n hooks: {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: []\n },\n indexes: [],\n timestamps: true,\n upload: false,\n versions: false\n};\nconst addDefaultsToCollectionConfig = (collection)=>{\n collection.access = {\n create: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n delete: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n read: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n unlock: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n update: _auth_defaultAccess_js__WEBPACK_IMPORTED_MODULE_0__.defaultAccess,\n ...collection.access || {}\n };\n collection.admin = {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n useAsTitle: 'id',\n ...collection.admin || {},\n pagination: {\n defaultLimit: 10,\n limits: [\n 5,\n 10,\n 25,\n 50,\n 100\n ],\n ...collection.admin?.pagination || {}\n }\n };\n collection.auth = collection.auth ?? false;\n collection.custom = collection.custom ?? {};\n collection.endpoints = collection.endpoints ?? [];\n collection.fields = collection.fields ?? [];\n collection.folders = collection.folders ?? false;\n collection.hooks = {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: [],\n ...collection.hooks || {}\n };\n collection.timestamps = collection.timestamps ?? true;\n collection.upload = collection.upload ?? false;\n collection.versions = collection.versions ?? false;\n collection.indexes = collection.indexes ?? [];\n return collection;\n};\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */ const authDefaults = {\n cookies: {\n sameSite: 'Lax',\n secure: false\n },\n forgotPassword: {},\n lockTime: 600000,\n loginWithUsername: false,\n maxLoginAttempts: 5,\n tokenExpiration: 7200,\n useSessions: true,\n verify: false\n};\nconst addDefaultsToAuthConfig = (auth)=>{\n auth.cookies = {\n sameSite: 'Lax',\n secure: false,\n ...auth.cookies || {}\n };\n auth.forgotPassword = auth.forgotPassword ?? {};\n auth.lockTime = auth.lockTime ?? 600000; // 10 minutes\n auth.loginWithUsername = auth.loginWithUsername ?? false;\n auth.maxLoginAttempts = auth.maxLoginAttempts ?? 5;\n auth.tokenExpiration = auth.tokenExpiration ?? 7200;\n auth.useSessions = auth.useSessions ?? true;\n auth.verify = auth.verify ?? false;\n auth.strategies = auth.strategies ?? [];\n if (!auth.disableLocalStrategy && auth.verify === true) {\n auth.verify = {};\n }\n return auth;\n};\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */ const loginWithUsernameDefaults = {\n allowEmailLogin: false,\n requireEmail: false,\n requireUsername: true\n};\nconst addDefaultsToLoginWithUsernameConfig = (loginWithUsername)=>({\n allowEmailLogin: false,\n requireEmail: false,\n requireUsername: true,\n ...loginWithUsername || {}\n });\n\n//# sourceMappingURL=defaults.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2NvbGxlY3Rpb25zL2NvbmZpZy9kZWZhdWx0cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTREO0FBQzVEO0FBQ0E7QUFDQSxJQUFXO0FBQ1g7QUFDQSxnQkFBZ0IsaUVBQWE7QUFDN0IsZ0JBQWdCLGlFQUFhO0FBQzdCLGNBQWMsaUVBQWE7QUFDM0IsZ0JBQWdCLGlFQUFhO0FBQzdCLGdCQUFnQixpRUFBYTtBQUM3QixLQUFLO0FBQ0w7QUFDQSxzQkFBc0I7QUFDdEIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLGdCQUFnQixpRUFBYTtBQUM3QixnQkFBZ0IsaUVBQWE7QUFDN0IsY0FBYyxpRUFBYTtBQUMzQixnQkFBZ0IsaUVBQWE7QUFDN0IsZ0JBQWdCLGlFQUFhO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2NvbGxlY3Rpb25zL2NvbmZpZy9kZWZhdWx0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0QWNjZXNzIH0gZnJvbSAnLi4vLi4vYXV0aC9kZWZhdWx0QWNjZXNzLmpzJztcbi8qKlxuICogQGRlcHJlY2F0ZWQgLSByZW1vdmUgaW4gNC4wLiBUaGlzIGlzIGVycm9yLXByb25lLCBhcyBtdXRhdGluZyB0aGlzIG9iamVjdCB3aWxsIGFmZmVjdCBhbnkgb2JqZWN0cyB0aGF0IHVzZSB0aGUgZGVmYXVsdHMgYXMgYSBiYXNlLlxuICovIGV4cG9ydCBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBhY2Nlc3M6IHtcbiAgICAgICAgY3JlYXRlOiBkZWZhdWx0QWNjZXNzLFxuICAgICAgICBkZWxldGU6IGRlZmF1bHRBY2Nlc3MsXG4gICAgICAgIHJlYWQ6IGRlZmF1bHRBY2Nlc3MsXG4gICAgICAgIHVubG9jazogZGVmYXVsdEFjY2VzcyxcbiAgICAgICAgdXBkYXRlOiBkZWZhdWx0QWNjZXNzXG4gICAgfSxcbiAgICBhZG1pbjoge1xuICAgICAgICBjb21wb25lbnRzOiB7fSxcbiAgICAgICAgY3VzdG9tOiB7fSxcbiAgICAgICAgZW5hYmxlUmljaFRleHRMaW5rOiB0cnVlLFxuICAgICAgICBlbmFibGVSaWNoVGV4dFJlbGF0aW9uc2hpcDogdHJ1ZSxcbiAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgZGVmYXVsdExpbWl0OiAxMCxcbiAgICAgICAgICAgIGxpbWl0czogW1xuICAgICAgICAgICAgICAgIDUsXG4gICAgICAgICAgICAgICAgMTAsXG4gICAgICAgICAgICAgICAgMjUsXG4gICAgICAgICAgICAgICAgNTAsXG4gICAgICAgICAgICAgICAgMTAwXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHVzZUFzVGl0bGU6ICdpZCdcbiAgICB9LFxuICAgIGF1dGg6IGZhbHNlLFxuICAgIGN1c3RvbToge30sXG4gICAgZW5kcG9pbnRzOiBbXSxcbiAgICBmaWVsZHM6IFtdLFxuICAgIGhvb2tzOiB7XG4gICAgICAgIGFmdGVyQ2hhbmdlOiBbXSxcbiAgICAgICAgYWZ0ZXJEZWxldGU6IFtdLFxuICAgICAgICBhZnRlckZvcmdvdFBhc3N3b3JkOiBbXSxcbiAgICAgICAgYWZ0ZXJMb2dpbjogW10sXG4gICAgICAgIGFmdGVyTG9nb3V0OiBbXSxcbiAgICAgICAgYWZ0ZXJNZTogW10sXG4gICAgICAgIGFmdGVyT3BlcmF0aW9uOiBbXSxcbiAgICAgICAgYWZ0ZXJSZWFkOiBbXSxcbiAgICAgICAgYWZ0ZXJSZWZyZXNoOiBbXSxcbiAgICAgICAgYmVmb3JlQ2hhbmdlOiBbXSxcbiAgICAgICAgYmVmb3JlRGVsZXRlOiBbXSxcbiAgICAgICAgYmVmb3JlTG9naW46IFtdLFxuICAgICAgICBiZWZvcmVPcGVyYXRpb246IFtdLFxuICAgICAgICBiZWZvcmVSZWFkOiBbXSxcbiAgICAgICAgYmVmb3JlVmFsaWRhdGU6IFtdLFxuICAgICAgICBtZTogW10sXG4gICAgICAgIHJlZnJlc2g6IFtdXG4gICAgfSxcbiAgICBpbmRleGVzOiBbXSxcbiAgICB0aW1lc3RhbXBzOiB0cnVlLFxuICAgIHVwbG9hZDogZmFsc2UsXG4gICAgdmVyc2lvbnM6IGZhbHNlXG59O1xuZXhwb3J0IGNvbnN0IGFkZERlZmF1bHRzVG9Db2xsZWN0aW9uQ29uZmlnID0gKGNvbGxlY3Rpb24pPT57XG4gICAgY29sbGVjdGlvbi5hY2Nlc3MgPSB7XG4gICAgICAgIGNyZWF0ZTogZGVmYXVsdEFjY2VzcyxcbiAgICAgICAgZGVsZXRlOiBkZWZhdWx0QWNjZXNzLFxuICAgICAgICByZWFkOiBkZWZhdWx0QWNjZXNzLFxuICAgICAgICB1bmxvY2s6IGRlZmF1bHRBY2Nlc3MsXG4gICAgICAgIHVwZGF0ZTogZGVmYXVsdEFjY2VzcyxcbiAgICAgICAgLi4uY29sbGVjdGlvbi5hY2Nlc3MgfHwge31cbiAgICB9O1xuICAgIGNvbGxlY3Rpb24uYWRtaW4gPSB7XG4gICAgICAgIGNvbXBvbmVudHM6IHt9LFxuICAgICAgICBjdXN0b206IHt9LFxuICAgICAgICBlbmFibGVSaWNoVGV4dExpbms6IHRydWUsXG4gICAgICAgIGVuYWJsZVJpY2hUZXh0UmVsYXRpb25zaGlwOiB0cnVlLFxuICAgICAgICB1c2VBc1RpdGxlOiAnaWQnLFxuICAgICAgICAuLi5jb2xsZWN0aW9uLmFkbWluIHx8IHt9LFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBkZWZhdWx0TGltaXQ6IDEwLFxuICAgICAgICAgICAgbGltaXRzOiBbXG4gICAgICAgICAgICAgICAgNSxcbiAgICAgICAgICAgICAgICAxMCxcbiAgICAgICAgICAgICAgICAyNSxcbiAgICAgICAgICAgICAgICA1MCxcbiAgICAgICAgICAgICAgICAxMDBcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAuLi5jb2xsZWN0aW9uLmFkbWluPy5wYWdpbmF0aW9uIHx8IHt9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbGxlY3Rpb24uYXV0aCA9IGNvbGxlY3Rpb24uYXV0aCA/PyBmYWxzZTtcbiAgICBjb2xsZWN0aW9uLmN1c3RvbSA9IGNvbGxlY3Rpb24uY3VzdG9tID8/IHt9O1xuICAgIGNvbGxlY3Rpb24uZW5kcG9pbnRzID0gY29sbGVjdGlvbi5lbmRwb2ludHMgPz8gW107XG4gICAgY29sbGVjdGlvbi5maWVsZHMgPSBjb2xsZWN0aW9uLmZpZWxkcyA/PyBbXTtcbiAgICBjb2xsZWN0aW9uLmZvbGRlcnMgPSBjb2xsZWN0aW9uLmZvbGRlcnMgPz8gZmFsc2U7XG4gICAgY29sbGVjdGlvbi5ob29rcyA9IHtcbiAgICAgICAgYWZ0ZXJDaGFuZ2U6IFtdLFxuICAgICAgICBhZnRlckRlbGV0ZTogW10sXG4gICAgICAgIGFmdGVyRm9yZ290UGFzc3dvcmQ6IFtdLFxuICAgICAgICBhZnRlckxvZ2luOiBbXSxcbiAgICAgICAgYWZ0ZXJMb2dvdXQ6IFtdLFxuICAgICAgICBhZnRlck1lOiBbXSxcbiAgICAgICAgYWZ0ZXJPcGVyYXRpb246IFtdLFxuICAgICAgICBhZnRlclJlYWQ6IFtdLFxuICAgICAgICBhZnRlclJlZnJlc2g6IFtdLFxuICAgICAgICBiZWZvcmVDaGFuZ2U6IFtdLFxuICAgICAgICBiZWZvcmVEZWxldGU6IFtdLFxuICAgICAgICBiZWZvcmVMb2dpbjogW10sXG4gICAgICAgIGJlZm9yZU9wZXJhdGlvbjogW10sXG4gICAgICAgIGJlZm9yZVJlYWQ6IFtdLFxuICAgICAgICBiZWZvcmVWYWxpZGF0ZTogW10sXG4gICAgICAgIG1lOiBbXSxcbiAgICAgICAgcmVmcmVzaDogW10sXG4gICAgICAgIC4uLmNvbGxlY3Rpb24uaG9va3MgfHwge31cbiAgICB9O1xuICAgIGNvbGxlY3Rpb24udGltZXN0YW1wcyA9IGNvbGxlY3Rpb24udGltZXN0YW1wcyA/PyB0cnVlO1xuICAgIGNvbGxlY3Rpb24udXBsb2FkID0gY29sbGVjdGlvbi51cGxvYWQgPz8gZmFsc2U7XG4gICAgY29sbGVjdGlvbi52ZXJzaW9ucyA9IGNvbGxlY3Rpb24udmVyc2lvbnMgPz8gZmFsc2U7XG4gICAgY29sbGVjdGlvbi5pbmRleGVzID0gY29sbGVjdGlvbi5pbmRleGVzID8/IFtdO1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xufTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgLSByZW1vdmUgaW4gNC4wLiBUaGlzIGlzIGVycm9yLXByb25lLCBhcyBtdXRhdGluZyB0aGlzIG9iamVjdCB3aWxsIGFmZmVjdCBhbnkgb2JqZWN0cyB0aGF0IHVzZSB0aGUgZGVmYXVsdHMgYXMgYSBiYXNlLlxuICovIGV4cG9ydCBjb25zdCBhdXRoRGVmYXVsdHMgPSB7XG4gICAgY29va2llczoge1xuICAgICAgICBzYW1lU2l0ZTogJ0xheCcsXG4gICAgICAgIHNlY3VyZTogZmFsc2VcbiAgICB9LFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7fSxcbiAgICBsb2NrVGltZTogNjAwMDAwLFxuICAgIGxvZ2luV2l0aFVzZXJuYW1lOiBmYWxzZSxcbiAgICBtYXhMb2dpbkF0dGVtcHRzOiA1LFxuICAgIHRva2VuRXhwaXJhdGlvbjogNzIwMCxcbiAgICB1c2VTZXNzaW9uczogdHJ1ZSxcbiAgICB2ZXJpZnk6IGZhbHNlXG59O1xuZXhwb3J0IGNvbnN0IGFkZERlZmF1bHRzVG9BdXRoQ29uZmlnID0gKGF1dGgpPT57XG4gICAgYXV0aC5jb29raWVzID0ge1xuICAgICAgICBzYW1lU2l0ZTogJ0xheCcsXG4gICAgICAgIHNlY3VyZTogZmFsc2UsXG4gICAgICAgIC4uLmF1dGguY29va2llcyB8fCB7fVxuICAgIH07XG4gICAgYXV0aC5mb3Jnb3RQYXNzd29yZCA9IGF1dGguZm9yZ290UGFzc3dvcmQgPz8ge307XG4gICAgYXV0aC5sb2NrVGltZSA9IGF1dGgubG9ja1RpbWUgPz8gNjAwMDAwOyAvLyAxMCBtaW51dGVzXG4gICAgYXV0aC5sb2dpbldpdGhVc2VybmFtZSA9IGF1dGgubG9naW5XaXRoVXNlcm5hbWUgPz8gZmFsc2U7XG4gICAgYXV0aC5tYXhMb2dpbkF0dGVtcHRzID0gYXV0aC5tYXhMb2dpbkF0dGVtcHRzID8/IDU7XG4gICAgYXV0aC50b2tlbkV4cGlyYXRpb24gPSBhdXRoLnRva2VuRXhwaXJhdGlvbiA/PyA3MjAwO1xuICAgIGF1dGgudXNlU2Vzc2lvbnMgPSBhdXRoLnVzZVNlc3Npb25zID8/IHRydWU7XG4gICAgYXV0aC52ZXJpZnkgPSBhdXRoLnZlcmlmeSA/PyBmYWxzZTtcbiAgICBhdXRoLnN0cmF0ZWdpZXMgPSBhdXRoLnN0cmF0ZWdpZXMgPz8gW107XG4gICAgaWYgKCFhdXRoLmRpc2FibGVMb2NhbFN0cmF0ZWd5ICYmIGF1dGgudmVyaWZ5ID09PSB0cnVlKSB7XG4gICAgICAgIGF1dGgudmVyaWZ5ID0ge307XG4gICAgfVxuICAgIHJldHVybiBhdXRoO1xufTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgLSByZW1vdmUgaW4gNC4wLiBUaGlzIGlzIGVycm9yLXByb25lLCBhcyBtdXRhdGluZyB0aGlzIG9iamVjdCB3aWxsIGFmZmVjdCBhbnkgb2JqZWN0cyB0aGF0IHVzZSB0aGUgZGVmYXVsdHMgYXMgYSBiYXNlLlxuICovIGV4cG9ydCBjb25zdCBsb2dpbldpdGhVc2VybmFtZURlZmF1bHRzID0ge1xuICAgIGFsbG93RW1haWxMb2dpbjogZmFsc2UsXG4gICAgcmVxdWlyZUVtYWlsOiBmYWxzZSxcbiAgICByZXF1aXJlVXNlcm5hbWU6IHRydWVcbn07XG5leHBvcnQgY29uc3QgYWRkRGVmYXVsdHNUb0xvZ2luV2l0aFVzZXJuYW1lQ29uZmlnID0gKGxvZ2luV2l0aFVzZXJuYW1lKT0+KHtcbiAgICAgICAgYWxsb3dFbWFpbExvZ2luOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZUVtYWlsOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZVVzZXJuYW1lOiB0cnVlLFxuICAgICAgICAuLi5sb2dpbldpdGhVc2VybmFtZSB8fCB7fVxuICAgIH0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0cy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/collections/config/defaults.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/types.js": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/types.js ***! \*****************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ fieldAffectsData: () => (/* binding */ fieldAffectsData),\n/* harmony export */ fieldHasMaxDepth: () => (/* binding */ fieldHasMaxDepth),\n/* harmony export */ fieldHasSubFields: () => (/* binding */ fieldHasSubFields),\n/* harmony export */ fieldIsArrayType: () => (/* binding */ fieldIsArrayType),\n/* harmony export */ fieldIsBlockType: () => (/* binding */ fieldIsBlockType),\n/* harmony export */ fieldIsGroupType: () => (/* binding */ fieldIsGroupType),\n/* harmony export */ fieldIsHiddenOrDisabled: () => (/* binding */ fieldIsHiddenOrDisabled),\n/* harmony export */ fieldIsID: () => (/* binding */ fieldIsID),\n/* harmony export */ fieldIsLocalized: () => (/* binding */ fieldIsLocalized),\n/* harmony export */ fieldIsPresentationalOnly: () => (/* binding */ fieldIsPresentationalOnly),\n/* harmony export */ fieldIsSidebar: () => (/* binding */ fieldIsSidebar),\n/* harmony export */ fieldIsVirtual: () => (/* binding */ fieldIsVirtual),\n/* harmony export */ fieldShouldBeLocalized: () => (/* binding */ fieldShouldBeLocalized),\n/* harmony export */ fieldSupportsMany: () => (/* binding */ fieldSupportsMany),\n/* harmony export */ groupHasName: () => (/* binding */ groupHasName),\n/* harmony export */ optionIsObject: () => (/* binding */ optionIsObject),\n/* harmony export */ optionIsValue: () => (/* binding */ optionIsValue),\n/* harmony export */ optionsAreObjects: () => (/* binding */ optionsAreObjects),\n/* harmony export */ tabHasName: () => (/* binding */ tabHasName),\n/* harmony export */ valueIsValueWithRelation: () => (/* binding */ valueIsValueWithRelation)\n/* harmony export */ });\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n/* eslint-disable @typescript-eslint/no-explicit-any */ function valueIsValueWithRelation(value) {\n return value !== null && typeof value === 'object' && 'relationTo' in value && 'value' in value;\n}\nfunction fieldHasSubFields(field) {\n return field.type === 'group' || field.type === 'array' || field.type === 'row' || field.type === 'collapsible';\n}\nfunction fieldIsArrayType(field) {\n return field.type === 'array';\n}\nfunction fieldIsBlockType(field) {\n return field.type === 'blocks';\n}\nfunction fieldIsGroupType(field) {\n return field.type === 'group';\n}\nfunction optionIsObject(option) {\n return typeof option === 'object';\n}\nfunction optionsAreObjects(options) {\n return Array.isArray(options) && typeof options?.[0] === 'object';\n}\nfunction optionIsValue(option) {\n return typeof option === 'string';\n}\nfunction fieldSupportsMany(field) {\n return field.type === 'select' || field.type === 'relationship' || field.type === 'upload';\n}\nfunction fieldHasMaxDepth(field) {\n return (field.type === 'upload' || field.type === 'relationship' || field.type === 'join') && typeof field.maxDepth === 'number';\n}\nfunction fieldIsPresentationalOnly(field) {\n return field.type === 'ui';\n}\nfunction fieldIsSidebar(field) {\n return 'admin' in field && 'position' in field.admin && field.admin.position === 'sidebar';\n}\nfunction fieldIsID(field) {\n return 'name' in field && field.name === 'id';\n}\nfunction fieldIsHiddenOrDisabled(field) {\n return 'hidden' in field && field.hidden || 'admin' in field && 'disabled' in field.admin && field.admin.disabled;\n}\nfunction fieldAffectsData(field) {\n return 'name' in field && !fieldIsPresentationalOnly(field);\n}\nfunction tabHasName(tab) {\n return 'name' in tab;\n}\nfunction groupHasName(group) {\n return 'name' in group;\n}\n/**\n * Check if a field has localized: true set. This does not check if a field *should*\n * be localized. To check if a field should be localized, use `fieldShouldBeLocalized`.\n *\n * @deprecated this will be removed or modified in v4.0, as `fieldIsLocalized` can easily lead to bugs due to\n * parent field localization not being taken into account.\n */ function fieldIsLocalized(field) {\n return 'localized' in field && field.localized;\n}\n/**\n * Similar to `fieldIsLocalized`, but returns `false` if any parent field is localized.\n */ function fieldShouldBeLocalized({ field, parentIsLocalized }) {\n return 'localized' in field && field.localized && (!parentIsLocalized || process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized === 'true');\n}\nfunction fieldIsVirtual(field) {\n return 'virtual' in field && Boolean(field.virtual);\n}\n\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2ZpZWxkcy9jb25maWcvdHlwZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQStEO0FBQy9EO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXLGtDQUFrQywwQkFBMEI7QUFDdkUsNkVBQTZFLE9BQU87QUFDcEY7QUFDTztBQUNQO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC9maWVsZHMvY29uZmlnL3R5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8gZXhwb3J0IGZ1bmN0aW9uIHZhbHVlSXNWYWx1ZVdpdGhSZWxhdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdyZWxhdGlvblRvJyBpbiB2YWx1ZSAmJiAndmFsdWUnIGluIHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSB7XG4gICAgcmV0dXJuIGZpZWxkLnR5cGUgPT09ICdncm91cCcgfHwgZmllbGQudHlwZSA9PT0gJ2FycmF5JyB8fCBmaWVsZC50eXBlID09PSAncm93JyB8fCBmaWVsZC50eXBlID09PSAnY29sbGFwc2libGUnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSXNBcnJheVR5cGUoZmllbGQpIHtcbiAgICByZXR1cm4gZmllbGQudHlwZSA9PT0gJ2FycmF5Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZElzQmxvY2tUeXBlKGZpZWxkKSB7XG4gICAgcmV0dXJuIGZpZWxkLnR5cGUgPT09ICdibG9ja3MnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSXNHcm91cFR5cGUoZmllbGQpIHtcbiAgICByZXR1cm4gZmllbGQudHlwZSA9PT0gJ2dyb3VwJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25Jc09iamVjdChvcHRpb24pIHtcbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCc7XG59XG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uc0FyZU9iamVjdHMob3B0aW9ucykge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIHR5cGVvZiBvcHRpb25zPy5bMF0gPT09ICdvYmplY3QnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbklzVmFsdWUob3B0aW9uKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkU3VwcG9ydHNNYW55KGZpZWxkKSB7XG4gICAgcmV0dXJuIGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnIHx8IGZpZWxkLnR5cGUgPT09ICdyZWxhdGlvbnNoaXAnIHx8IGZpZWxkLnR5cGUgPT09ICd1cGxvYWQnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSGFzTWF4RGVwdGgoZmllbGQpIHtcbiAgICByZXR1cm4gKGZpZWxkLnR5cGUgPT09ICd1cGxvYWQnIHx8IGZpZWxkLnR5cGUgPT09ICdyZWxhdGlvbnNoaXAnIHx8IGZpZWxkLnR5cGUgPT09ICdqb2luJykgJiYgdHlwZW9mIGZpZWxkLm1heERlcHRoID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5KGZpZWxkKSB7XG4gICAgcmV0dXJuIGZpZWxkLnR5cGUgPT09ICd1aSc7XG59XG5leHBvcnQgZnVuY3Rpb24gZmllbGRJc1NpZGViYXIoZmllbGQpIHtcbiAgICByZXR1cm4gJ2FkbWluJyBpbiBmaWVsZCAmJiAncG9zaXRpb24nIGluIGZpZWxkLmFkbWluICYmIGZpZWxkLmFkbWluLnBvc2l0aW9uID09PSAnc2lkZWJhcic7XG59XG5leHBvcnQgZnVuY3Rpb24gZmllbGRJc0lEKGZpZWxkKSB7XG4gICAgcmV0dXJuICduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lID09PSAnaWQnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSXNIaWRkZW5PckRpc2FibGVkKGZpZWxkKSB7XG4gICAgcmV0dXJuICdoaWRkZW4nIGluIGZpZWxkICYmIGZpZWxkLmhpZGRlbiB8fCAnYWRtaW4nIGluIGZpZWxkICYmICdkaXNhYmxlZCcgaW4gZmllbGQuYWRtaW4gJiYgZmllbGQuYWRtaW4uZGlzYWJsZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkge1xuICAgIHJldHVybiAnbmFtZScgaW4gZmllbGQgJiYgIWZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkoZmllbGQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRhYkhhc05hbWUodGFiKSB7XG4gICAgcmV0dXJuICduYW1lJyBpbiB0YWI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBIYXNOYW1lKGdyb3VwKSB7XG4gICAgcmV0dXJuICduYW1lJyBpbiBncm91cDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBmaWVsZCBoYXMgbG9jYWxpemVkOiB0cnVlIHNldC4gVGhpcyBkb2VzIG5vdCBjaGVjayBpZiBhIGZpZWxkICpzaG91bGQqXG4gKiBiZSBsb2NhbGl6ZWQuIFRvIGNoZWNrIGlmIGEgZmllbGQgc2hvdWxkIGJlIGxvY2FsaXplZCwgdXNlIGBmaWVsZFNob3VsZEJlTG9jYWxpemVkYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBvciBtb2RpZmllZCBpbiB2NC4wLCBhcyBgZmllbGRJc0xvY2FsaXplZGAgY2FuIGVhc2lseSBsZWFkIHRvIGJ1Z3MgZHVlIHRvXG4gKiBwYXJlbnQgZmllbGQgbG9jYWxpemF0aW9uIG5vdCBiZWluZyB0YWtlbiBpbnRvIGFjY291bnQuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSXNMb2NhbGl6ZWQoZmllbGQpIHtcbiAgICByZXR1cm4gJ2xvY2FsaXplZCcgaW4gZmllbGQgJiYgZmllbGQubG9jYWxpemVkO1xufVxuLyoqXG4gKiBTaW1pbGFyIHRvIGBmaWVsZElzTG9jYWxpemVkYCwgYnV0IHJldHVybnMgYGZhbHNlYCBpZiBhbnkgcGFyZW50IGZpZWxkIGlzIGxvY2FsaXplZC5cbiAqLyBleHBvcnQgZnVuY3Rpb24gZmllbGRTaG91bGRCZUxvY2FsaXplZCh7IGZpZWxkLCBwYXJlbnRJc0xvY2FsaXplZCB9KSB7XG4gICAgcmV0dXJuICdsb2NhbGl6ZWQnIGluIGZpZWxkICYmIGZpZWxkLmxvY2FsaXplZCAmJiAoIXBhcmVudElzTG9jYWxpemVkIHx8IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX1BBWUxPQURfQ09NUEFUSUJJTElUWV9hbGxvd0xvY2FsaXplZFdpdGhpbkxvY2FsaXplZCA9PT0gJ3RydWUnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZElzVmlydHVhbChmaWVsZCkge1xuICAgIHJldHVybiAndmlydHVhbCcgaW4gZmllbGQgJiYgQm9vbGVhbihmaWVsZC52aXJ0dWFsKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/types.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/getFieldPaths.js": /*!******************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/getFieldPaths.js ***! \******************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getFieldPaths: () => (/* binding */ getFieldPaths)\n/* harmony export */ });\nfunction getFieldPaths({ field, index, parentIndexPath, parentPath = '', parentSchemaPath }) {\n const parentPathSegments = parentPath.split('.');\n const parentPathIsUnnamed = parentPathSegments?.[parentPathSegments.length - 1]?.startsWith('_index-');\n const parentWithoutIndex = parentPathIsUnnamed ? parentPathSegments.slice(0, -1).join('.') : parentPath;\n const parentPathToUse = parentPathIsUnnamed ? parentWithoutIndex : parentPath;\n if ('name' in field) {\n return {\n indexPath: '',\n path: `${parentPathToUse ? parentPathToUse + '.' : ''}${field.name}`,\n schemaPath: `${parentSchemaPath ? parentSchemaPath + '.' : ''}${field.name}`\n };\n }\n const indexSuffix = `_index-${`${parentIndexPath ? parentIndexPath + '-' : ''}${index}`}`;\n const parentSchemaPathSegments = parentSchemaPath.split('.');\n const parentSchemaPathIsUnnamed = parentSchemaPathSegments?.[parentSchemaPathSegments.length - 1]?.startsWith('_index-');\n return {\n indexPath: `${parentIndexPath ? parentIndexPath + '-' : ''}${index}`,\n path: `${parentPathToUse ? parentPathToUse + '.' : ''}${indexSuffix}`,\n schemaPath: parentSchemaPathIsUnnamed ? `${parentSchemaPath}-${index}` : `${parentSchemaPath ? parentSchemaPath + '.' : ''}${indexSuffix}`\n };\n}\n\n//# sourceMappingURL=getFieldPaths.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2ZpZWxkcy9nZXRGaWVsZFBhdGhzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyx5QkFBeUIsa0VBQWtFO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDZDQUE2QyxFQUFFLFdBQVc7QUFDL0UsMkJBQTJCLCtDQUErQyxFQUFFLFdBQVc7QUFDdkY7QUFDQTtBQUNBLGtDQUFrQyxHQUFHLDZDQUE2QyxFQUFFLE1BQU0sRUFBRTtBQUM1RjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsNkNBQTZDLEVBQUUsTUFBTTtBQUMzRSxpQkFBaUIsNkNBQTZDLEVBQUUsWUFBWTtBQUM1RSxtREFBbUQsaUJBQWlCLEdBQUcsTUFBTSxPQUFPLCtDQUErQyxFQUFFLFlBQVk7QUFDako7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2ZpZWxkcy9nZXRGaWVsZFBhdGhzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZFBhdGhzKHsgZmllbGQsIGluZGV4LCBwYXJlbnRJbmRleFBhdGgsIHBhcmVudFBhdGggPSAnJywgcGFyZW50U2NoZW1hUGF0aCB9KSB7XG4gICAgY29uc3QgcGFyZW50UGF0aFNlZ21lbnRzID0gcGFyZW50UGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHBhcmVudFBhdGhJc1VubmFtZWQgPSBwYXJlbnRQYXRoU2VnbWVudHM/LltwYXJlbnRQYXRoU2VnbWVudHMubGVuZ3RoIC0gMV0/LnN0YXJ0c1dpdGgoJ19pbmRleC0nKTtcbiAgICBjb25zdCBwYXJlbnRXaXRob3V0SW5kZXggPSBwYXJlbnRQYXRoSXNVbm5hbWVkID8gcGFyZW50UGF0aFNlZ21lbnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJykgOiBwYXJlbnRQYXRoO1xuICAgIGNvbnN0IHBhcmVudFBhdGhUb1VzZSA9IHBhcmVudFBhdGhJc1VubmFtZWQgPyBwYXJlbnRXaXRob3V0SW5kZXggOiBwYXJlbnRQYXRoO1xuICAgIGlmICgnbmFtZScgaW4gZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4UGF0aDogJycsXG4gICAgICAgICAgICBwYXRoOiBgJHtwYXJlbnRQYXRoVG9Vc2UgPyBwYXJlbnRQYXRoVG9Vc2UgKyAnLicgOiAnJ30ke2ZpZWxkLm5hbWV9YCxcbiAgICAgICAgICAgIHNjaGVtYVBhdGg6IGAke3BhcmVudFNjaGVtYVBhdGggPyBwYXJlbnRTY2hlbWFQYXRoICsgJy4nIDogJyd9JHtmaWVsZC5uYW1lfWBcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhTdWZmaXggPSBgX2luZGV4LSR7YCR7cGFyZW50SW5kZXhQYXRoID8gcGFyZW50SW5kZXhQYXRoICsgJy0nIDogJyd9JHtpbmRleH1gfWA7XG4gICAgY29uc3QgcGFyZW50U2NoZW1hUGF0aFNlZ21lbnRzID0gcGFyZW50U2NoZW1hUGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHBhcmVudFNjaGVtYVBhdGhJc1VubmFtZWQgPSBwYXJlbnRTY2hlbWFQYXRoU2VnbWVudHM/LltwYXJlbnRTY2hlbWFQYXRoU2VnbWVudHMubGVuZ3RoIC0gMV0/LnN0YXJ0c1dpdGgoJ19pbmRleC0nKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRleFBhdGg6IGAke3BhcmVudEluZGV4UGF0aCA/IHBhcmVudEluZGV4UGF0aCArICctJyA6ICcnfSR7aW5kZXh9YCxcbiAgICAgICAgcGF0aDogYCR7cGFyZW50UGF0aFRvVXNlID8gcGFyZW50UGF0aFRvVXNlICsgJy4nIDogJyd9JHtpbmRleFN1ZmZpeH1gLFxuICAgICAgICBzY2hlbWFQYXRoOiBwYXJlbnRTY2hlbWFQYXRoSXNVbm5hbWVkID8gYCR7cGFyZW50U2NoZW1hUGF0aH0tJHtpbmRleH1gIDogYCR7cGFyZW50U2NoZW1hUGF0aCA/IHBhcmVudFNjaGVtYVBhdGggKyAnLicgOiAnJ30ke2luZGV4U3VmZml4fWBcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRGaWVsZFBhdGhzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/getFieldPaths.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/validations.js": /*!****************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/validations.js ***! \****************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ array: () => (/* binding */ array),\n/* harmony export */ blocks: () => (/* binding */ blocks),\n/* harmony export */ checkbox: () => (/* binding */ checkbox),\n/* harmony export */ code: () => (/* binding */ code),\n/* harmony export */ confirmPassword: () => (/* binding */ confirmPassword),\n/* harmony export */ date: () => (/* binding */ date),\n/* harmony export */ email: () => (/* binding */ email),\n/* harmony export */ json: () => (/* binding */ json),\n/* harmony export */ number: () => (/* binding */ number),\n/* harmony export */ password: () => (/* binding */ password),\n/* harmony export */ point: () => (/* binding */ point),\n/* harmony export */ radio: () => (/* binding */ radio),\n/* harmony export */ relationship: () => (/* binding */ relationship),\n/* harmony export */ richText: () => (/* binding */ richText),\n/* harmony export */ select: () => (/* binding */ select),\n/* harmony export */ text: () => (/* binding */ text),\n/* harmony export */ textarea: () => (/* binding */ textarea),\n/* harmony export */ upload: () => (/* binding */ upload),\n/* harmony export */ username: () => (/* binding */ username),\n/* harmony export */ validateBlocksFilterOptions: () => (/* binding */ validateBlocksFilterOptions),\n/* harmony export */ validations: () => (/* binding */ validations)\n/* harmony export */ });\n/* harmony import */ var ajv__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ajv */ \"(app-pages-browser)/./node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js\");\n/* harmony import */ var bson_objectid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bson-objectid */ \"(app-pages-browser)/./node_modules/.pnpm/bson-objectid@2.0.4/node_modules/bson-objectid/objectid.js\");\n/* harmony import */ var _utilities_isNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utilities/isNumber.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isNumber.js\");\n/* harmony import */ var _utilities_isValidID_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utilities/isValidID.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isValidID.js\");\n\n\nconst ObjectId = \"default\" in bson_objectid__WEBPACK_IMPORTED_MODULE_0__ ? bson_objectid__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : bson_objectid__WEBPACK_IMPORTED_MODULE_0__;\n\n\nconst text = (value, { hasMany, maxLength: fieldMaxLength, maxRows, minLength, minRows, req: { payload: { config }, t }, required })=>{\n let maxLength;\n if (!required) {\n if (value === undefined || value === null) {\n return true;\n }\n }\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, {\n maxRows,\n minRows,\n required,\n t\n });\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult;\n }\n }\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength;\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength;\n }\n const stringsToValidate = Array.isArray(value) ? value : [\n value\n ];\n for (const stringValue of stringsToValidate){\n const length = stringValue?.length || 0;\n if (typeof maxLength === 'number' && length > maxLength) {\n return t('validation:shorterThanMax', {\n label: t('general:value'),\n maxLength,\n stringValue\n });\n }\n if (typeof minLength === 'number' && length < minLength) {\n return t('validation:longerThanMin', {\n label: t('general:value'),\n minLength,\n stringValue\n });\n }\n }\n if (required) {\n if (!value || (typeof value === 'string' || Array.isArray(value)) && value.length === 0) {\n return t('validation:required');\n }\n }\n return true;\n};\nconst password = (value, { maxLength: fieldMaxLength, minLength = 3, req: { payload: { config }, t }, required })=>{\n let maxLength;\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength;\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength;\n }\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', {\n maxLength\n });\n }\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', {\n minLength\n });\n }\n if (required && !value) {\n return t('validation:required');\n }\n return true;\n};\nconst confirmPassword = (value, { req: { t }, required, siblingData })=>{\n if (required && !value) {\n return t('validation:required');\n }\n if (value && value !== siblingData.password) {\n return t('fields:passwordsDoNotMatch');\n }\n return true;\n};\nconst email = (value, { collectionSlug, req: { payload: { collections, config }, t }, required, siblingData })=>{\n if (collectionSlug) {\n const collection = collections?.[collectionSlug]?.config ?? config.collections.find(({ slug })=>slug === collectionSlug) // If this is run on the client, `collections` will be undefined, but `config.collections` will be available\n ;\n if (collection.auth.loginWithUsername && !collection.auth.loginWithUsername?.requireUsername && !collection.auth.loginWithUsername?.requireEmail) {\n if (!value && !siblingData?.username) {\n return t('validation:required');\n }\n }\n }\n /**\n * Disallows emails with double quotes (e.g., \"user\"@example.com, user@\"example.com\", \"user@example.com\")\n * Rejects spaces anywhere in the email (e.g., user @example.com, user@ example.com, user name@example.com)\n * Prevents consecutive dots in the local or domain part (e.g., user..name@example.com, user@example..com)\n * Disallows domains that start or end with a hyphen (e.g., user@-example.com, user@example-.com)\n * Allows standard email formats (e.g., user@example.com, user.name+alias@example.co.uk, user-name@example.org)\n * Allows domains with consecutive hyphens as long as they are not leading/trailing (e.g., user@ex--ample.com)\n * Supports multiple subdomains (e.g., user@sub.domain.example.com)\n */ const emailRegex = /^(?!.*\\.\\.)[\\w!#$%&'*+/=?^`{|}~-](?:[\\w!#$%&'*+/=?^`{|}~.-]*[\\w!#$%&'*+/=?^`{|}~-])?@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\\.[a-z]{2,}$/i;\n if (value && !emailRegex.test(value) || !value && required) {\n return t('validation:emailAddress');\n }\n return true;\n};\nconst username = (value, { collectionSlug, req: { payload: { collections, config }, t }, required, siblingData })=>{\n let maxLength;\n if (collectionSlug) {\n const collection = collections?.[collectionSlug]?.config ?? config.collections.find(({ slug })=>slug === collectionSlug) // If this is run on the client, `collections` will be undefined, but `config.collections` will be available\n ;\n if (collection.auth.loginWithUsername && !collection.auth.loginWithUsername?.requireUsername && !collection.auth.loginWithUsername?.requireEmail) {\n if (!value && !siblingData?.email) {\n return t('validation:required');\n }\n }\n }\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength;\n }\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', {\n maxLength\n });\n }\n if (!value && required) {\n return t('validation:required');\n }\n return true;\n};\nconst textarea = (value, { maxLength: fieldMaxLength, minLength, req: { payload: { config }, t }, required })=>{\n let maxLength;\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength;\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength;\n }\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', {\n maxLength\n });\n }\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', {\n minLength\n });\n }\n if (required && !value) {\n return t('validation:required');\n }\n return true;\n};\nconst code = (value, { req: { t }, required })=>{\n if (required && value === undefined) {\n return t('validation:required');\n }\n return true;\n};\nconst json = (value, { jsonError, jsonSchema, req: { t }, required })=>{\n const isNotEmpty = (value)=>{\n if (value === undefined || value === null) {\n return false;\n }\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n if (typeof value === 'object' && Object.keys(value).length === 0) {\n return false;\n }\n return true;\n };\n const fetchSchema = ({ schema, uri })=>{\n if (uri && schema) {\n return schema;\n }\n return fetch(uri).then((response)=>{\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n }).then((_json)=>{\n const json = _json;\n const jsonSchemaSanitizations = {\n id: undefined,\n $id: json.id,\n $schema: 'http://json-schema.org/draft-07/schema#'\n };\n return Object.assign(json, jsonSchemaSanitizations);\n });\n };\n if (required && !value) {\n return t('validation:required');\n }\n if (jsonError !== undefined) {\n return t('validation:invalidInput');\n }\n if (jsonSchema && isNotEmpty(value)) {\n try {\n jsonSchema.schema = fetchSchema(jsonSchema);\n const { schema } = jsonSchema;\n // @ts-expect-error missing types\n const ajv = new ajv__WEBPACK_IMPORTED_MODULE_1__();\n if (!ajv.validate(schema, value)) {\n return ajv.errorsText();\n }\n } catch (error) {\n return error instanceof Error ? error.message : 'Unknown error';\n }\n }\n return true;\n};\nconst checkbox = (value, { req: { t }, required })=>{\n if (value && typeof value !== 'boolean' || required && typeof value !== 'boolean') {\n return t('validation:trueOrFalse');\n }\n return true;\n};\nconst date = (value, { name, req: { t }, required, siblingData, timezone })=>{\n const validDate = value && !isNaN(Date.parse(value.toString()));\n // We need to also check for the timezone data based on this field's config\n // We cannot do this inside the timezone field validation as it's visually hidden\n const hasRequiredTimezone = timezone && required;\n const selectedTimezone = siblingData?.[`${name}_tz`];\n // Always resolve to true if the field is not required, as timezone may be optional too then\n const validTimezone = hasRequiredTimezone ? Boolean(selectedTimezone) : true;\n if (validDate && validTimezone) {\n return true;\n }\n if (validDate && !validTimezone) {\n return t('validation:timezoneRequired');\n }\n if (value) {\n return t('validation:notValidDate', {\n value\n });\n }\n if (required) {\n return t('validation:required');\n }\n return true;\n};\nconst richText = async (value, options)=>{\n if (!options?.editor) {\n throw new Error('richText field has no editor property.');\n }\n if (typeof options?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.');\n }\n const editor = options?.editor;\n return editor.validate(value, options);\n};\nconst validateArrayLength = (value, options)=>{\n const { maxRows, minRows, required, t } = options;\n const arrayLength = Array.isArray(value) ? value.length : value || 0;\n if (!required && arrayLength === 0) {\n return true;\n }\n if (minRows && arrayLength < minRows) {\n return t('validation:requiresAtLeast', {\n count: minRows,\n label: t('general:rows')\n });\n }\n if (maxRows && arrayLength > maxRows) {\n return t('validation:requiresNoMoreThan', {\n count: maxRows,\n label: t('general:rows')\n });\n }\n if (required && !arrayLength) {\n return t('validation:requiresAtLeast', {\n count: 1,\n label: t('general:row')\n });\n }\n return true;\n};\nconst number = (value, { hasMany, max, maxRows, min, minRows, req: { t }, required })=>{\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, {\n maxRows,\n minRows,\n required,\n t\n });\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult;\n }\n }\n if (!value && !(0,_utilities_isNumber_js__WEBPACK_IMPORTED_MODULE_2__.isNumber)(value)) {\n // if no value is present, validate based on required\n if (required) {\n return t('validation:required');\n }\n if (!required) {\n return true;\n }\n }\n const numbersToValidate = Array.isArray(value) ? value : [\n value\n ];\n for (const number of numbersToValidate){\n if (!(0,_utilities_isNumber_js__WEBPACK_IMPORTED_MODULE_2__.isNumber)(number)) {\n return t('validation:enterNumber');\n }\n const numberValue = parseFloat(number);\n if (typeof max === 'number' && numberValue > max) {\n return t('validation:greaterThanMax', {\n label: t('general:value'),\n max,\n value\n });\n }\n if (typeof min === 'number' && numberValue < min) {\n return t('validation:lessThanMin', {\n label: t('general:value'),\n min,\n value\n });\n }\n }\n return true;\n};\nconst array = (value, { maxRows, minRows, req: { t }, required })=>{\n return validateArrayLength(value, {\n maxRows,\n minRows,\n required,\n t\n });\n};\n/**\n * This function validates the blocks in a blocks field against the provided filterOptions.\n * It will return a list of all block slugs found in the value, the allowed block slugs (if any),\n * and a list of invalid block slugs that are used despite being disallowed.\n *\n * @internal - this may break or be removed at any time\n */ async function validateBlocksFilterOptions({ id, data, filterOptions, req, siblingData, value }) {\n const allBlockSlugs = Array.isArray(value) ? value.map((b)=>b.blockType).filter((s)=>Boolean(s)) : [];\n // if undefined => all blocks allowed\n let allowedBlockSlugs = undefined;\n if (typeof filterOptions === 'function') {\n const result = await filterOptions({\n id: id,\n data,\n req,\n siblingData,\n user: req.user\n });\n if (result !== true && Array.isArray(result)) {\n allowedBlockSlugs = result;\n }\n } else if (Array.isArray(filterOptions)) {\n allowedBlockSlugs = filterOptions;\n }\n const invalidBlockSlugs = [];\n if (allowedBlockSlugs) {\n for (const blockSlug of allBlockSlugs){\n if (!allowedBlockSlugs.includes(blockSlug)) {\n invalidBlockSlugs.push(blockSlug);\n }\n }\n }\n return {\n allBlockSlugs,\n allowedBlockSlugs,\n invalidBlockSlugs\n };\n}\nconst blocks = async (value, { id, data, filterOptions, maxRows, minRows, req: { t }, req, required, siblingData })=>{\n const lengthValidationResult = validateArrayLength(value, {\n maxRows,\n minRows,\n required,\n t\n });\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult;\n }\n if (filterOptions) {\n const { invalidBlockSlugs } = await validateBlocksFilterOptions({\n id,\n data,\n filterOptions,\n req,\n siblingData,\n value\n });\n if (invalidBlockSlugs?.length) {\n return t('validation:invalidBlocks', {\n blocks: invalidBlockSlugs.join(', ')\n });\n }\n }\n return true;\n};\nconst validateFilterOptions = async (value, { id, blockData, data, filterOptions, relationTo, req, req: { t, user }, siblingData })=>{\n if (typeof filterOptions !== 'undefined' && value) {\n const options = {};\n const falseCollections = [];\n const collections = !Array.isArray(relationTo) ? [\n relationTo\n ] : relationTo;\n const values = Array.isArray(value) ? value : [\n value\n ];\n for (const collection of collections){\n try {\n let optionFilter = typeof filterOptions === 'function' ? await filterOptions({\n id: id,\n blockData,\n data,\n relationTo: collection,\n req,\n siblingData,\n user\n }) : filterOptions;\n if (optionFilter === true) {\n optionFilter = null;\n }\n const valueIDs = [];\n values.forEach((val)=>{\n if (typeof val === 'object') {\n if (val?.value) {\n valueIDs.push(val.value);\n } else if (ObjectId.isValid(val)) {\n valueIDs.push(new ObjectId(val).toHexString());\n }\n }\n if (typeof val === 'string' || typeof val === 'number') {\n valueIDs.push(val);\n }\n });\n if (valueIDs.length > 0) {\n const findWhere = {\n and: [\n {\n id: {\n in: valueIDs\n }\n }\n ]\n };\n // @ts-expect-error - I don't understand why optionFilter is inferred as `false | Where | null` instead of `boolean | Where | null`\n if (optionFilter && optionFilter !== true) {\n findWhere.and?.push(optionFilter);\n }\n if (optionFilter === false) {\n falseCollections.push(collection);\n }\n const result = await req.payloadDataLoader.find({\n collection,\n depth: 0,\n limit: 0,\n pagination: false,\n req,\n where: findWhere\n });\n options[collection] = result.docs.map((doc)=>doc.id);\n } else {\n options[collection] = [];\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Error validating filter options for collection ${collection}`\n });\n options[collection] = [];\n }\n }\n const invalidRelationships = values.filter((val)=>{\n let collection;\n let requestedID;\n if (typeof relationTo === 'string') {\n collection = relationTo;\n if (typeof val === 'string' || typeof val === 'number') {\n requestedID = val;\n }\n if (typeof val === 'object' && ObjectId.isValid(val)) {\n requestedID = new ObjectId(val).toHexString();\n }\n }\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collection = val.relationTo;\n requestedID = val.value;\n }\n if (falseCollections.find((slug)=>relationTo === slug)) {\n return true;\n }\n if (!options[collection]) {\n return true;\n }\n return options[collection].indexOf(requestedID) === -1;\n });\n if (invalidRelationships.length > 0) {\n return invalidRelationships.reduce((err, invalid, i)=>{\n return `${err} ${JSON.stringify(invalid)}${invalidRelationships.length === i + 1 ? ',' : ''} `;\n }, t('validation:invalidSelections'));\n }\n return true;\n }\n return true;\n};\nconst upload = async (value, options)=>{\n const { event, maxRows, minRows, relationTo, req: { payload, t }, required } = options;\n if ((!value && typeof value !== 'number' || Array.isArray(value) && value.length === 0) && required) {\n return t('validation:required');\n }\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length\n });\n }\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length\n });\n }\n }\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [\n value\n ];\n const invalidRelationships = values.filter((val)=>{\n let collectionSlug;\n let requestedID;\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo;\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val;\n }\n }\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo;\n requestedID = val.value;\n }\n if (requestedID === null) {\n return false;\n }\n const idType = payload.collections[collectionSlug]?.customIDType || payload?.db?.defaultIDType || 'text';\n return !(0,_utilities_isValidID_js__WEBPACK_IMPORTED_MODULE_3__.isValidID)(requestedID, idType);\n });\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships.map((err, invalid)=>{\n return `${err} ${JSON.stringify(invalid)}`;\n }).join(', ')}`;\n }\n }\n if (event === 'onChange') {\n return true;\n }\n return validateFilterOptions(value, options);\n};\nconst relationship = async (value, options)=>{\n const { event, maxRows, minRows, relationTo, req: { payload, t }, required } = options;\n if ((!value && typeof value !== 'number' || Array.isArray(value) && value.length === 0) && required) {\n return t('validation:required');\n }\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length\n });\n }\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length\n });\n }\n }\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [\n value\n ];\n const invalidRelationships = values.filter((val)=>{\n let collectionSlug;\n let requestedID;\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo;\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val;\n }\n }\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo;\n requestedID = val.value;\n }\n if (requestedID === null) {\n return false;\n }\n const idType = payload.collections[collectionSlug]?.customIDType || payload?.db?.defaultIDType || 'text';\n return !(0,_utilities_isValidID_js__WEBPACK_IMPORTED_MODULE_3__.isValidID)(requestedID, idType);\n });\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships.map((err, invalid)=>{\n return `${err} ${JSON.stringify(invalid)}`;\n }).join(', ')}`;\n }\n }\n if (event === 'onChange') {\n return true;\n }\n return validateFilterOptions(value, options);\n};\nconst select = (value, { data, filterOptions, hasMany, options, req, req: { t }, required, siblingData })=>{\n const filteredOptions = typeof filterOptions === 'function' ? filterOptions({\n data,\n options,\n req,\n siblingData\n }) : options;\n if (Array.isArray(value) && value.some((input)=>!filteredOptions.some((option)=>option === input || typeof option !== 'string' && option?.value === input))) {\n return t('validation:invalidSelection');\n }\n // Check for duplicate values when hasMany is true\n if (hasMany && Array.isArray(value) && value.length > 1) {\n const counts = new Map();\n for (const item of value){\n counts.set(item, (counts.get(item) || 0) + 1);\n }\n const duplicates = [];\n for (const [item, count] of counts.entries()){\n if (count > 1) {\n // Add the item 'count' times to show all occurrences\n for(let i = 0; i < count; i++){\n duplicates.push(item);\n }\n }\n }\n if (duplicates.length > 0) {\n return duplicates.reduce((err, duplicate, i)=>{\n return `${err} ${JSON.stringify(duplicate)}${i < duplicates.length - 1 ? ',' : ''}`;\n }, t('validation:invalidSelections'));\n }\n }\n if (typeof value === 'string' && !filteredOptions.some((option)=>option === value || typeof option !== 'string' && option.value === value)) {\n return t('validation:invalidSelection');\n }\n if (required && (typeof value === 'undefined' || value === null || hasMany && Array.isArray(value) && value?.length === 0)) {\n return t('validation:required');\n }\n return true;\n};\nconst radio = (value, { options, req: { t }, required })=>{\n if (value) {\n const valueMatchesOption = options.some((option)=>option === value || typeof option !== 'string' && option.value === value);\n return valueMatchesOption || t('validation:invalidSelection');\n }\n return required ? t('validation:required') : true;\n};\nconst point = (value = [\n '',\n ''\n], { req: { t }, required })=>{\n if (value === null) {\n if (required) {\n return t('validation:required');\n }\n return true;\n }\n const lng = parseFloat(String(value[0]));\n const lat = parseFloat(String(value[1]));\n if (required && (value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number' || Number.isNaN(lng) || Number.isNaN(lat) || Array.isArray(value) && value.length !== 2)) {\n return t('validation:requiresTwoNumbers');\n }\n if (value[1] && Number.isNaN(lng) || value[0] && Number.isNaN(lat)) {\n return t('validation:invalidInput');\n }\n // Validate longitude bounds (-180 to 180)\n if (value[0] && !Number.isNaN(lng) && (lng < -180 || lng > 180)) {\n return t('validation:longitudeOutOfBounds');\n }\n // Validate latitude bounds (-90 to 90)\n if (value[1] && !Number.isNaN(lat) && (lat < -90 || lat > 90)) {\n return t('validation:latitudeOutOfBounds');\n }\n return true;\n};\n/**\n * Built-in field validations used by Payload\n *\n * These can be re-used in custom validations\n */ const validations = {\n array,\n blocks,\n checkbox,\n code,\n confirmPassword,\n date,\n email,\n json,\n number,\n password,\n point,\n radio,\n relationship,\n richText,\n select,\n text,\n textarea,\n upload\n};\n\n//# sourceMappingURL=validations.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2ZpZWxkcy92YWxpZGF0aW9ucy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXNCO0FBQ3FCO0FBQzNDLGlCQUFpQix1REFBMkIsR0FBRyxxREFBc0IsR0FBRywwQ0FBYztBQUNsQztBQUNFO0FBQy9DLHVCQUF1Qix3RUFBd0UsV0FBVyxRQUFRLEtBQUssWUFBWTtBQUMxSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sMkJBQTJCLGlEQUFpRCxXQUFXLFFBQVEsS0FBSyxZQUFZO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLGtDQUFrQyxPQUFPLEdBQUcseUJBQXlCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyx3QkFBd0IsdUJBQXVCLFdBQVcscUJBQXFCLEtBQUsseUJBQXlCO0FBQ3BIO0FBQ0EsK0ZBQStGLE1BQU07QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsbUZBQW1GLEdBQUc7QUFDL0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLDJCQUEyQix1QkFBdUIsV0FBVyxxQkFBcUIsS0FBSyx5QkFBeUI7QUFDdkg7QUFDQTtBQUNBLCtGQUErRixNQUFNO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLDJCQUEyQiw2Q0FBNkMsV0FBVyxRQUFRLEtBQUssWUFBWTtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyx1QkFBdUIsT0FBTyxHQUFHLFlBQVk7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLHVCQUF1Qiw4QkFBOEIsR0FBRyxZQUFZO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixhQUFhO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBLDRCQUE0QixnQ0FBRztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLDJCQUEyQixPQUFPLEdBQUcsWUFBWTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sdUJBQXVCLGFBQWEsR0FBRyxtQ0FBbUM7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsS0FBSztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdDQUFnQztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDTyx5QkFBeUIsNENBQTRDLEdBQUcsWUFBWTtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZ0VBQVE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnRUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNPLHdCQUF3Qix5QkFBeUIsR0FBRyxZQUFZO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXLDZDQUE2QyxrREFBa0Q7QUFDMUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sK0JBQStCLGtEQUFrRCxHQUFHLDhCQUE4QjtBQUN6SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLDREQUE0RCxTQUFTLGVBQWU7QUFDbEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLDJFQUEyRSxXQUFXO0FBQ3RGLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSwwQkFBMEIsS0FBSyxFQUFFLHdCQUF3QixFQUFFLGtEQUFrRDtBQUM3RyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsWUFBWSw0Q0FBNEMsWUFBWSxhQUFhO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGtFQUFTO0FBQzdCLFNBQVM7QUFDVDtBQUNBLHVGQUF1RjtBQUN2RiwwQkFBMEIsS0FBSyxFQUFFLHdCQUF3QjtBQUN6RCxhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLFlBQVksNENBQTRDLFlBQVksYUFBYTtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrRUFBUztBQUM3QixTQUFTO0FBQ1Q7QUFDQSx1RkFBdUY7QUFDdkYsMEJBQTBCLEtBQUssRUFBRSx3QkFBd0I7QUFDekQsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08seUJBQXlCLG1EQUFtRCxHQUFHLHlCQUF5QjtBQUMvRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFdBQVc7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxxQ0FBcUM7QUFDbEcsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sd0JBQXdCLGdCQUFnQixHQUFHLFlBQVk7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EsS0FBSyxPQUFPLEdBQUcsWUFBWTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2ZpZWxkcy92YWxpZGF0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgT2JqZWN0SWRJbXBvcnQgZnJvbSAnYnNvbi1vYmplY3RpZCc7XG5jb25zdCBPYmplY3RJZCA9ICdkZWZhdWx0JyBpbiBPYmplY3RJZEltcG9ydCA/IE9iamVjdElkSW1wb3J0LmRlZmF1bHQgOiBPYmplY3RJZEltcG9ydDtcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2lzTnVtYmVyLmpzJztcbmltcG9ydCB7IGlzVmFsaWRJRCB9IGZyb20gJy4uL3V0aWxpdGllcy9pc1ZhbGlkSUQuanMnO1xuZXhwb3J0IGNvbnN0IHRleHQgPSAodmFsdWUsIHsgaGFzTWFueSwgbWF4TGVuZ3RoOiBmaWVsZE1heExlbmd0aCwgbWF4Um93cywgbWluTGVuZ3RoLCBtaW5Sb3dzLCByZXE6IHsgcGF5bG9hZDogeyBjb25maWcgfSwgdCB9LCByZXF1aXJlZCB9KT0+e1xuICAgIGxldCBtYXhMZW5ndGg7XG4gICAgaWYgKCFyZXF1aXJlZCkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc01hbnkgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoVmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHtcbiAgICAgICAgICAgIG1heFJvd3MsXG4gICAgICAgICAgICBtaW5Sb3dzLFxuICAgICAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgICAgICB0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIGxlbmd0aFZhbGlkYXRpb25SZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVuZ3RoVmFsaWRhdGlvblJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZz8uZGVmYXVsdE1heFRleHRMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgIG1heExlbmd0aCA9IGNvbmZpZy5kZWZhdWx0TWF4VGV4dExlbmd0aDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmaWVsZE1heExlbmd0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbWF4TGVuZ3RoID0gZmllbGRNYXhMZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHN0cmluZ3NUb1ZhbGlkYXRlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtcbiAgICAgICAgdmFsdWVcbiAgICBdO1xuICAgIGZvciAoY29uc3Qgc3RyaW5nVmFsdWUgb2Ygc3RyaW5nc1RvVmFsaWRhdGUpe1xuICAgICAgICBjb25zdCBsZW5ndGggPSBzdHJpbmdWYWx1ZT8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIGlmICh0eXBlb2YgbWF4TGVuZ3RoID09PSAnbnVtYmVyJyAmJiBsZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4Jywge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOnZhbHVlJyksXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1pbkxlbmd0aCA9PT0gJ251bWJlcicgJiYgbGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpsb25nZXJUaGFuTWluJywge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOnZhbHVlJyksXG4gICAgICAgICAgICAgICAgbWluTGVuZ3RoLFxuICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydCBjb25zdCBwYXNzd29yZCA9ICh2YWx1ZSwgeyBtYXhMZW5ndGg6IGZpZWxkTWF4TGVuZ3RoLCBtaW5MZW5ndGggPSAzLCByZXE6IHsgcGF5bG9hZDogeyBjb25maWcgfSwgdCB9LCByZXF1aXJlZCB9KT0+e1xuICAgIGxldCBtYXhMZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBjb25maWc/LmRlZmF1bHRNYXhUZXh0TGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICBtYXhMZW5ndGggPSBjb25maWcuZGVmYXVsdE1heFRleHRMZW5ndGg7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZmllbGRNYXhMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgIG1heExlbmd0aCA9IGZpZWxkTWF4TGVuZ3RoO1xuICAgIH1cbiAgICBpZiAodmFsdWUgJiYgbWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpzaG9ydGVyVGhhbk1heCcsIHtcbiAgICAgICAgICAgIG1heExlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmIG1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtaW5MZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHtcbiAgICAgICAgICAgIG1pbkxlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJlcXVpcmVkICYmICF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgY29uZmlybVBhc3N3b3JkID0gKHZhbHVlLCB7IHJlcTogeyB0IH0sIHJlcXVpcmVkLCBzaWJsaW5nRGF0YSB9KT0+e1xuICAgIGlmIChyZXF1aXJlZCAmJiAhdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSBzaWJsaW5nRGF0YS5wYXNzd29yZCkge1xuICAgICAgICByZXR1cm4gdCgnZmllbGRzOnBhc3N3b3Jkc0RvTm90TWF0Y2gnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IGNvbnN0IGVtYWlsID0gKHZhbHVlLCB7IGNvbGxlY3Rpb25TbHVnLCByZXE6IHsgcGF5bG9hZDogeyBjb2xsZWN0aW9ucywgY29uZmlnIH0sIHQgfSwgcmVxdWlyZWQsIHNpYmxpbmdEYXRhIH0pPT57XG4gICAgaWYgKGNvbGxlY3Rpb25TbHVnKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9ucz8uW2NvbGxlY3Rpb25TbHVnXT8uY29uZmlnID8/IGNvbmZpZy5jb2xsZWN0aW9ucy5maW5kKCh7IHNsdWcgfSk9PnNsdWcgPT09IGNvbGxlY3Rpb25TbHVnKSAvLyBJZiB0aGlzIGlzIHJ1biBvbiB0aGUgY2xpZW50LCBgY29sbGVjdGlvbnNgIHdpbGwgYmUgdW5kZWZpbmVkLCBidXQgYGNvbmZpZy5jb2xsZWN0aW9uc2Agd2lsbCBiZSBhdmFpbGFibGVcbiAgICAgICAgO1xuICAgICAgICBpZiAoY29sbGVjdGlvbi5hdXRoLmxvZ2luV2l0aFVzZXJuYW1lICYmICFjb2xsZWN0aW9uLmF1dGgubG9naW5XaXRoVXNlcm5hbWU/LnJlcXVpcmVVc2VybmFtZSAmJiAhY29sbGVjdGlvbi5hdXRoLmxvZ2luV2l0aFVzZXJuYW1lPy5yZXF1aXJlRW1haWwpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUgJiYgIXNpYmxpbmdEYXRhPy51c2VybmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAqIERpc2FsbG93cyBlbWFpbHMgd2l0aCBkb3VibGUgcXVvdGVzIChlLmcuLCBcInVzZXJcIkBleGFtcGxlLmNvbSwgdXNlckBcImV4YW1wbGUuY29tXCIsIFwidXNlckBleGFtcGxlLmNvbVwiKVxuICAgKiBSZWplY3RzIHNwYWNlcyBhbnl3aGVyZSBpbiB0aGUgZW1haWwgKGUuZy4sIHVzZXIgQGV4YW1wbGUuY29tLCB1c2VyQCBleGFtcGxlLmNvbSwgdXNlciBuYW1lQGV4YW1wbGUuY29tKVxuICAgKiBQcmV2ZW50cyBjb25zZWN1dGl2ZSBkb3RzIGluIHRoZSBsb2NhbCBvciBkb21haW4gcGFydCAoZS5nLiwgdXNlci4ubmFtZUBleGFtcGxlLmNvbSwgdXNlckBleGFtcGxlLi5jb20pXG4gICAqIERpc2FsbG93cyBkb21haW5zIHRoYXQgc3RhcnQgb3IgZW5kIHdpdGggYSBoeXBoZW4gKGUuZy4sIHVzZXJALWV4YW1wbGUuY29tLCB1c2VyQGV4YW1wbGUtLmNvbSlcbiAgICogQWxsb3dzIHN0YW5kYXJkIGVtYWlsIGZvcm1hdHMgKGUuZy4sIHVzZXJAZXhhbXBsZS5jb20sIHVzZXIubmFtZSthbGlhc0BleGFtcGxlLmNvLnVrLCB1c2VyLW5hbWVAZXhhbXBsZS5vcmcpXG4gICAqIEFsbG93cyBkb21haW5zIHdpdGggY29uc2VjdXRpdmUgaHlwaGVucyBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBsZWFkaW5nL3RyYWlsaW5nIChlLmcuLCB1c2VyQGV4LS1hbXBsZS5jb20pXG4gICAqIFN1cHBvcnRzIG11bHRpcGxlIHN1YmRvbWFpbnMgKGUuZy4sIHVzZXJAc3ViLmRvbWFpbi5leGFtcGxlLmNvbSlcbiAgICovIGNvbnN0IGVtYWlsUmVnZXggPSAvXig/IS4qXFwuXFwuKVtcXHchIyQlJicqKy89P15ge3x9fi1dKD86W1xcdyEjJCUmJyorLz0/XmB7fH1+Li1dKltcXHchIyQlJicqKy89P15ge3x9fi1dKT9AW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT8pKlxcLlthLXpdezIsfSQvaTtcbiAgICBpZiAodmFsdWUgJiYgIWVtYWlsUmVnZXgudGVzdCh2YWx1ZSkgfHwgIXZhbHVlICYmIHJlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmVtYWlsQWRkcmVzcycpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgdXNlcm5hbWUgPSAodmFsdWUsIHsgY29sbGVjdGlvblNsdWcsIHJlcTogeyBwYXlsb2FkOiB7IGNvbGxlY3Rpb25zLCBjb25maWcgfSwgdCB9LCByZXF1aXJlZCwgc2libGluZ0RhdGEgfSk9PntcbiAgICBsZXQgbWF4TGVuZ3RoO1xuICAgIGlmIChjb2xsZWN0aW9uU2x1Zykge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uU2x1Z10/LmNvbmZpZyA/PyBjb25maWcuY29sbGVjdGlvbnMuZmluZCgoeyBzbHVnIH0pPT5zbHVnID09PSBjb2xsZWN0aW9uU2x1ZykgLy8gSWYgdGhpcyBpcyBydW4gb24gdGhlIGNsaWVudCwgYGNvbGxlY3Rpb25zYCB3aWxsIGJlIHVuZGVmaW5lZCwgYnV0IGBjb25maWcuY29sbGVjdGlvbnNgIHdpbGwgYmUgYXZhaWxhYmxlXG4gICAgICAgIDtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24uYXV0aC5sb2dpbldpdGhVc2VybmFtZSAmJiAhY29sbGVjdGlvbi5hdXRoLmxvZ2luV2l0aFVzZXJuYW1lPy5yZXF1aXJlVXNlcm5hbWUgJiYgIWNvbGxlY3Rpb24uYXV0aC5sb2dpbldpdGhVc2VybmFtZT8ucmVxdWlyZUVtYWlsKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlICYmICFzaWJsaW5nRGF0YT8uZW1haWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnPy5kZWZhdWx0TWF4VGV4dExlbmd0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbWF4TGVuZ3RoID0gY29uZmlnLmRlZmF1bHRNYXhUZXh0TGVuZ3RoO1xuICAgIH1cbiAgICBpZiAodmFsdWUgJiYgbWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpzaG9ydGVyVGhhbk1heCcsIHtcbiAgICAgICAgICAgIG1heExlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF2YWx1ZSAmJiByZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgdGV4dGFyZWEgPSAodmFsdWUsIHsgbWF4TGVuZ3RoOiBmaWVsZE1heExlbmd0aCwgbWluTGVuZ3RoLCByZXE6IHsgcGF5bG9hZDogeyBjb25maWcgfSwgdCB9LCByZXF1aXJlZCB9KT0+e1xuICAgIGxldCBtYXhMZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBjb25maWc/LmRlZmF1bHRNYXhUZXh0TGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICBtYXhMZW5ndGggPSBjb25maWcuZGVmYXVsdE1heFRleHRMZW5ndGg7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZmllbGRNYXhMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgIG1heExlbmd0aCA9IGZpZWxkTWF4TGVuZ3RoO1xuICAgIH1cbiAgICBpZiAodmFsdWUgJiYgbWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpzaG9ydGVyVGhhbk1heCcsIHtcbiAgICAgICAgICAgIG1heExlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmIG1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtaW5MZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHtcbiAgICAgICAgICAgIG1pbkxlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJlcXVpcmVkICYmICF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgY29kZSA9ICh2YWx1ZSwgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9KT0+e1xuICAgIGlmIChyZXF1aXJlZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydCBjb25zdCBqc29uID0gKHZhbHVlLCB7IGpzb25FcnJvciwganNvblNjaGVtYSwgcmVxOiB7IHQgfSwgcmVxdWlyZWQgfSk9PntcbiAgICBjb25zdCBpc05vdEVtcHR5ID0gKHZhbHVlKT0+e1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBmZXRjaFNjaGVtYSA9ICh7IHNjaGVtYSwgdXJpIH0pPT57XG4gICAgICAgIGlmICh1cmkgJiYgc2NoZW1hKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmZXRjaCh1cmkpLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmV0d29yayByZXNwb25zZSB3YXMgbm90IG9rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9KS50aGVuKChfanNvbik9PntcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICAgICAgICAgIGNvbnN0IGpzb25TY2hlbWFTYW5pdGl6YXRpb25zID0ge1xuICAgICAgICAgICAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJGlkOiBqc29uLmlkLFxuICAgICAgICAgICAgICAgICRzY2hlbWE6ICdodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwganNvblNjaGVtYVNhbml0aXphdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChyZXF1aXJlZCAmJiAhdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKGpzb25FcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmludmFsaWRJbnB1dCcpO1xuICAgIH1cbiAgICBpZiAoanNvblNjaGVtYSAmJiBpc05vdEVtcHR5KHZhbHVlKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAganNvblNjaGVtYS5zY2hlbWEgPSBmZXRjaFNjaGVtYShqc29uU2NoZW1hKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBqc29uU2NoZW1hO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBtaXNzaW5nIHR5cGVzXG4gICAgICAgICAgICBjb25zdCBhanYgPSBuZXcgQWp2KCk7XG4gICAgICAgICAgICBpZiAoIWFqdi52YWxpZGF0ZShzY2hlbWEsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhanYuZXJyb3JzVGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydCBjb25zdCBjaGVja2JveCA9ICh2YWx1ZSwgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9KT0+e1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJyB8fCByZXF1aXJlZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjp0cnVlT3JGYWxzZScpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgZGF0ZSA9ICh2YWx1ZSwgeyBuYW1lLCByZXE6IHsgdCB9LCByZXF1aXJlZCwgc2libGluZ0RhdGEsIHRpbWV6b25lIH0pPT57XG4gICAgY29uc3QgdmFsaWREYXRlID0gdmFsdWUgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUudG9TdHJpbmcoKSkpO1xuICAgIC8vIFdlIG5lZWQgdG8gYWxzbyBjaGVjayBmb3IgdGhlIHRpbWV6b25lIGRhdGEgYmFzZWQgb24gdGhpcyBmaWVsZCdzIGNvbmZpZ1xuICAgIC8vIFdlIGNhbm5vdCBkbyB0aGlzIGluc2lkZSB0aGUgdGltZXpvbmUgZmllbGQgdmFsaWRhdGlvbiBhcyBpdCdzIHZpc3VhbGx5IGhpZGRlblxuICAgIGNvbnN0IGhhc1JlcXVpcmVkVGltZXpvbmUgPSB0aW1lem9uZSAmJiByZXF1aXJlZDtcbiAgICBjb25zdCBzZWxlY3RlZFRpbWV6b25lID0gc2libGluZ0RhdGE/LltgJHtuYW1lfV90emBdO1xuICAgIC8vIEFsd2F5cyByZXNvbHZlIHRvIHRydWUgaWYgdGhlIGZpZWxkIGlzIG5vdCByZXF1aXJlZCwgYXMgdGltZXpvbmUgbWF5IGJlIG9wdGlvbmFsIHRvbyB0aGVuXG4gICAgY29uc3QgdmFsaWRUaW1lem9uZSA9IGhhc1JlcXVpcmVkVGltZXpvbmUgPyBCb29sZWFuKHNlbGVjdGVkVGltZXpvbmUpIDogdHJ1ZTtcbiAgICBpZiAodmFsaWREYXRlICYmIHZhbGlkVGltZXpvbmUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh2YWxpZERhdGUgJiYgIXZhbGlkVGltZXpvbmUpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246dGltZXpvbmVSZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bm90VmFsaWREYXRlJywge1xuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgcmljaFRleHQgPSBhc3luYyAodmFsdWUsIG9wdGlvbnMpPT57XG4gICAgaWYgKCFvcHRpb25zPy5lZGl0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyaWNoVGV4dCBmaWVsZCBoYXMgbm8gZWRpdG9yIHByb3BlcnR5LicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnM/LmVkaXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBhY2Nlc3MgdW5zYW5pdGl6ZWQgcmljaCB0ZXh0IGVkaXRvci4nKTtcbiAgICB9XG4gICAgY29uc3QgZWRpdG9yID0gb3B0aW9ucz8uZWRpdG9yO1xuICAgIHJldHVybiBlZGl0b3IudmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpO1xufTtcbmNvbnN0IHZhbGlkYXRlQXJyYXlMZW5ndGggPSAodmFsdWUsIG9wdGlvbnMpPT57XG4gICAgY29uc3QgeyBtYXhSb3dzLCBtaW5Sb3dzLCByZXF1aXJlZCwgdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBhcnJheUxlbmd0aCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoIDogdmFsdWUgfHwgMDtcbiAgICBpZiAoIXJlcXVpcmVkICYmIGFycmF5TGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobWluUm93cyAmJiBhcnJheUxlbmd0aCA8IG1pblJvd3MpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZXNBdExlYXN0Jywge1xuICAgICAgICAgICAgY291bnQ6IG1pblJvd3MsXG4gICAgICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDpyb3dzJylcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChtYXhSb3dzICYmIGFycmF5TGVuZ3RoID4gbWF4Um93cykge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlc05vTW9yZVRoYW4nLCB7XG4gICAgICAgICAgICBjb3VudDogbWF4Um93cyxcbiAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOnJvd3MnKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHJlcXVpcmVkICYmICFhcnJheUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlc0F0TGVhc3QnLCB7XG4gICAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOnJvdycpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgbnVtYmVyID0gKHZhbHVlLCB7IGhhc01hbnksIG1heCwgbWF4Um93cywgbWluLCBtaW5Sb3dzLCByZXE6IHsgdCB9LCByZXF1aXJlZCB9KT0+e1xuICAgIGlmIChoYXNNYW55ID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aFZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUFycmF5TGVuZ3RoKHZhbHVlLCB7XG4gICAgICAgICAgICBtYXhSb3dzLFxuICAgICAgICAgICAgbWluUm93cyxcbiAgICAgICAgICAgIHJlcXVpcmVkLFxuICAgICAgICAgICAgdFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiBsZW5ndGhWYWxpZGF0aW9uUmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxlbmd0aFZhbGlkYXRpb25SZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF2YWx1ZSAmJiAhaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIC8vIGlmIG5vIHZhbHVlIGlzIHByZXNlbnQsIHZhbGlkYXRlIGJhc2VkIG9uIHJlcXVpcmVkXG4gICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlcXVpcmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBudW1iZXJzVG9WYWxpZGF0ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXG4gICAgICAgIHZhbHVlXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IG51bWJlciBvZiBudW1iZXJzVG9WYWxpZGF0ZSl7XG4gICAgICAgIGlmICghaXNOdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246ZW50ZXJOdW1iZXInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW1iZXJWYWx1ZSA9IHBhcnNlRmxvYXQobnVtYmVyKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXggPT09ICdudW1iZXInICYmIG51bWJlclZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpncmVhdGVyVGhhbk1heCcsIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDp2YWx1ZScpLFxuICAgICAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtaW4gPT09ICdudW1iZXInICYmIG51bWJlclZhbHVlIDwgbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpsZXNzVGhhbk1pbicsIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDp2YWx1ZScpLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IGNvbnN0IGFycmF5ID0gKHZhbHVlLCB7IG1heFJvd3MsIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0pPT57XG4gICAgcmV0dXJuIHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHtcbiAgICAgICAgbWF4Um93cyxcbiAgICAgICAgbWluUm93cyxcbiAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgIHRcbiAgICB9KTtcbn07XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBibG9ja3MgaW4gYSBibG9ja3MgZmllbGQgYWdhaW5zdCB0aGUgcHJvdmlkZWQgZmlsdGVyT3B0aW9ucy5cbiAqIEl0IHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBhbGwgYmxvY2sgc2x1Z3MgZm91bmQgaW4gdGhlIHZhbHVlLCB0aGUgYWxsb3dlZCBibG9jayBzbHVncyAoaWYgYW55KSxcbiAqIGFuZCBhIGxpc3Qgb2YgaW52YWxpZCBibG9jayBzbHVncyB0aGF0IGFyZSB1c2VkIGRlc3BpdGUgYmVpbmcgZGlzYWxsb3dlZC5cbiAqXG4gKiBAaW50ZXJuYWwgLSB0aGlzIG1heSBicmVhayBvciBiZSByZW1vdmVkIGF0IGFueSB0aW1lXG4gKi8gZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlQmxvY2tzRmlsdGVyT3B0aW9ucyh7IGlkLCBkYXRhLCBmaWx0ZXJPcHRpb25zLCByZXEsIHNpYmxpbmdEYXRhLCB2YWx1ZSB9KSB7XG4gICAgY29uc3QgYWxsQmxvY2tTbHVncyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKChiKT0+Yi5ibG9ja1R5cGUpLmZpbHRlcigocyk9PkJvb2xlYW4ocykpIDogW107XG4gICAgLy8gaWYgdW5kZWZpbmVkID0+IGFsbCBibG9ja3MgYWxsb3dlZFxuICAgIGxldCBhbGxvd2VkQmxvY2tTbHVncyA9IHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIGZpbHRlck9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlsdGVyT3B0aW9ucyh7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgc2libGluZ0RhdGEsXG4gICAgICAgICAgICB1c2VyOiByZXEudXNlclxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiBBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFsbG93ZWRCbG9ja1NsdWdzID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpbHRlck9wdGlvbnMpKSB7XG4gICAgICAgIGFsbG93ZWRCbG9ja1NsdWdzID0gZmlsdGVyT3B0aW9ucztcbiAgICB9XG4gICAgY29uc3QgaW52YWxpZEJsb2NrU2x1Z3MgPSBbXTtcbiAgICBpZiAoYWxsb3dlZEJsb2NrU2x1Z3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBibG9ja1NsdWcgb2YgYWxsQmxvY2tTbHVncyl7XG4gICAgICAgICAgICBpZiAoIWFsbG93ZWRCbG9ja1NsdWdzLmluY2x1ZGVzKGJsb2NrU2x1ZykpIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkQmxvY2tTbHVncy5wdXNoKGJsb2NrU2x1Zyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxsQmxvY2tTbHVncyxcbiAgICAgICAgYWxsb3dlZEJsb2NrU2x1Z3MsXG4gICAgICAgIGludmFsaWRCbG9ja1NsdWdzXG4gICAgfTtcbn1cbmV4cG9ydCBjb25zdCBibG9ja3MgPSBhc3luYyAodmFsdWUsIHsgaWQsIGRhdGEsIGZpbHRlck9wdGlvbnMsIG1heFJvd3MsIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcSwgcmVxdWlyZWQsIHNpYmxpbmdEYXRhIH0pPT57XG4gICAgY29uc3QgbGVuZ3RoVmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHtcbiAgICAgICAgbWF4Um93cyxcbiAgICAgICAgbWluUm93cyxcbiAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgIHRcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGxlbmd0aFZhbGlkYXRpb25SZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBsZW5ndGhWYWxpZGF0aW9uUmVzdWx0O1xuICAgIH1cbiAgICBpZiAoZmlsdGVyT3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGludmFsaWRCbG9ja1NsdWdzIH0gPSBhd2FpdCB2YWxpZGF0ZUJsb2Nrc0ZpbHRlck9wdGlvbnMoe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZmlsdGVyT3B0aW9ucyxcbiAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgIHNpYmxpbmdEYXRhLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbnZhbGlkQmxvY2tTbHVncz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjppbnZhbGlkQmxvY2tzJywge1xuICAgICAgICAgICAgICAgIGJsb2NrczogaW52YWxpZEJsb2NrU2x1Z3Muam9pbignLCAnKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuY29uc3QgdmFsaWRhdGVGaWx0ZXJPcHRpb25zID0gYXN5bmMgKHZhbHVlLCB7IGlkLCBibG9ja0RhdGEsIGRhdGEsIGZpbHRlck9wdGlvbnMsIHJlbGF0aW9uVG8sIHJlcSwgcmVxOiB7IHQsIHVzZXIgfSwgc2libGluZ0RhdGEgfSk9PntcbiAgICBpZiAodHlwZW9mIGZpbHRlck9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3QgZmFsc2VDb2xsZWN0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9ucyA9ICFBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pID8gW1xuICAgICAgICAgICAgcmVsYXRpb25Ub1xuICAgICAgICBdIDogcmVsYXRpb25UbztcbiAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucyl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBvcHRpb25GaWx0ZXIgPSB0eXBlb2YgZmlsdGVyT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGZpbHRlck9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgICAgICAgICBzaWJsaW5nRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdXNlclxuICAgICAgICAgICAgICAgIH0pIDogZmlsdGVyT3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uRmlsdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkZpbHRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlSURzID0gW107XG4gICAgICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goKHZhbCk9PntcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsPy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSURzLnB1c2godmFsLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0SWQuaXNWYWxpZCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJRHMucHVzaChuZXcgT2JqZWN0SWQodmFsKS50b0hleFN0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSURzLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZUlEcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRXaGVyZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluOiB2YWx1ZUlEc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBvcHRpb25GaWx0ZXIgaXMgaW5mZXJyZWQgYXMgYGZhbHNlIHwgV2hlcmUgfCBudWxsYCBpbnN0ZWFkIG9mIGBib29sZWFuIHwgV2hlcmUgfCBudWxsYFxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uRmlsdGVyICYmIG9wdGlvbkZpbHRlciAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluZFdoZXJlLmFuZD8ucHVzaChvcHRpb25GaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25GaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZUNvbGxlY3Rpb25zLnB1c2goY29sbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLnBheWxvYWREYXRhTG9hZGVyLmZpbmQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlOiBmaW5kV2hlcmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbY29sbGVjdGlvbl0gPSByZXN1bHQuZG9jcy5tYXAoKGRvYyk9PmRvYy5pZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1tjb2xsZWN0aW9uXSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlcS5wYXlsb2FkLmxvZ2dlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBgRXJyb3IgdmFsaWRhdGluZyBmaWx0ZXIgb3B0aW9ucyBmb3IgY29sbGVjdGlvbiAke2NvbGxlY3Rpb259YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbY29sbGVjdGlvbl0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnZhbGlkUmVsYXRpb25zaGlwcyA9IHZhbHVlcy5maWx0ZXIoKHZhbCk9PntcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RlZElEO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWxhdGlvblRvID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24gPSByZWxhdGlvblRvO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRJRCA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIE9iamVjdElkLmlzVmFsaWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRJRCA9IG5ldyBPYmplY3RJZCh2YWwpLnRvSGV4U3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsPy5yZWxhdGlvblRvKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbiA9IHZhbC5yZWxhdGlvblRvO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RlZElEID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZhbHNlQ29sbGVjdGlvbnMuZmluZCgoc2x1Zyk9PnJlbGF0aW9uVG8gPT09IHNsdWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnNbY29sbGVjdGlvbl0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zW2NvbGxlY3Rpb25dLmluZGV4T2YocmVxdWVzdGVkSUQpID09PSAtMTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbnZhbGlkUmVsYXRpb25zaGlwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaW52YWxpZFJlbGF0aW9uc2hpcHMucmVkdWNlKChlcnIsIGludmFsaWQsIGkpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2Vycn0gJHtKU09OLnN0cmluZ2lmeShpbnZhbGlkKX0ke2ludmFsaWRSZWxhdGlvbnNoaXBzLmxlbmd0aCA9PT0gaSArIDEgPyAnLCcgOiAnJ30gYDtcbiAgICAgICAgICAgIH0sIHQoJ3ZhbGlkYXRpb246aW52YWxpZFNlbGVjdGlvbnMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmV4cG9ydCBjb25zdCB1cGxvYWQgPSBhc3luYyAodmFsdWUsIG9wdGlvbnMpPT57XG4gICAgY29uc3QgeyBldmVudCwgbWF4Um93cywgbWluUm93cywgcmVsYXRpb25UbywgcmVxOiB7IHBheWxvYWQsIHQgfSwgcmVxdWlyZWQgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCghdmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApICYmIHJlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChtaW5Sb3dzICYmIHZhbHVlLmxlbmd0aCA8IG1pblJvd3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmxlc3NUaGFuTWluJywge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0KCdnZW5lcmFsOnJvd3MnKSxcbiAgICAgICAgICAgICAgICBtaW46IG1pblJvd3MsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFJvd3MgJiYgdmFsdWUubGVuZ3RoID4gbWF4Um93cykge1xuICAgICAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246Z3JlYXRlclRoYW5NYXgnLCB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHQoJ2dlbmVyYWw6cm93cycpLFxuICAgICAgICAgICAgICAgIG1heDogbWF4Um93cyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW1xuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaW52YWxpZFJlbGF0aW9uc2hpcHMgPSB2YWx1ZXMuZmlsdGVyKCh2YWwpPT57XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvblNsdWc7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdGVkSUQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlbGF0aW9uVG8gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcgPSByZWxhdGlvblRvO1xuICAgICAgICAgICAgICAgIC8vIGN1c3RvbSBpZFxuICAgICAgICAgICAgICAgIGlmICh2YWwgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkSUQgPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsPy5yZWxhdGlvblRvKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcgPSB2YWwucmVsYXRpb25UbztcbiAgICAgICAgICAgICAgICByZXF1ZXN0ZWRJRCA9IHZhbC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWRJRCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlkVHlwZSA9IHBheWxvYWQuY29sbGVjdGlvbnNbY29sbGVjdGlvblNsdWddPy5jdXN0b21JRFR5cGUgfHwgcGF5bG9hZD8uZGI/LmRlZmF1bHRJRFR5cGUgfHwgJ3RleHQnO1xuICAgICAgICAgICAgcmV0dXJuICFpc1ZhbGlkSUQocmVxdWVzdGVkSUQsIGlkVHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW52YWxpZFJlbGF0aW9uc2hpcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGBUaGlzIHJlbGF0aW9uc2hpcCBmaWVsZCBoYXMgdGhlIGZvbGxvd2luZyBpbnZhbGlkIHJlbGF0aW9uc2hpcHM6ICR7aW52YWxpZFJlbGF0aW9uc2hpcHMubWFwKChlcnIsIGludmFsaWQpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2Vycn0gJHtKU09OLnN0cmluZ2lmeShpbnZhbGlkKX1gO1xuICAgICAgICAgICAgfSkuam9pbignLCAnKX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gJ29uQ2hhbmdlJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRlRmlsdGVyT3B0aW9ucyh2YWx1ZSwgb3B0aW9ucyk7XG59O1xuZXhwb3J0IGNvbnN0IHJlbGF0aW9uc2hpcCA9IGFzeW5jICh2YWx1ZSwgb3B0aW9ucyk9PntcbiAgICBjb25zdCB7IGV2ZW50LCBtYXhSb3dzLCBtaW5Sb3dzLCByZWxhdGlvblRvLCByZXE6IHsgcGF5bG9hZCwgdCB9LCByZXF1aXJlZCB9ID0gb3B0aW9ucztcbiAgICBpZiAoKCF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgJiYgcmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG1pblJvd3MgJiYgdmFsdWUubGVuZ3RoIDwgbWluUm93cykge1xuICAgICAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bGVzc1RoYW5NaW4nLCB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHQoJ2dlbmVyYWw6cm93cycpLFxuICAgICAgICAgICAgICAgIG1pbjogbWluUm93cyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4Um93cyAmJiB2YWx1ZS5sZW5ndGggPiBtYXhSb3dzKSB7XG4gICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpncmVhdGVyVGhhbk1heCcsIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDpyb3dzJyksXG4gICAgICAgICAgICAgICAgbWF4OiBtYXhSb3dzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBpbnZhbGlkUmVsYXRpb25zaGlwcyA9IHZhbHVlcy5maWx0ZXIoKHZhbCk9PntcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uU2x1ZztcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ZWRJRDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyA9IHJlbGF0aW9uVG87XG4gICAgICAgICAgICAgICAgLy8gY3VzdG9tIGlkXG4gICAgICAgICAgICAgICAgaWYgKHZhbCB8fCB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRJRCA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWxhdGlvblRvKSAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWw/LnJlbGF0aW9uVG8pIHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyA9IHZhbC5yZWxhdGlvblRvO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RlZElEID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RlZElEID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWRUeXBlID0gcGF5bG9hZC5jb2xsZWN0aW9uc1tjb2xsZWN0aW9uU2x1Z10/LmN1c3RvbUlEVHlwZSB8fCBwYXlsb2FkPy5kYj8uZGVmYXVsdElEVHlwZSB8fCAndGV4dCc7XG4gICAgICAgICAgICByZXR1cm4gIWlzVmFsaWRJRChyZXF1ZXN0ZWRJRCwgaWRUeXBlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbnZhbGlkUmVsYXRpb25zaGlwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYFRoaXMgcmVsYXRpb25zaGlwIGZpZWxkIGhhcyB0aGUgZm9sbG93aW5nIGludmFsaWQgcmVsYXRpb25zaGlwczogJHtpbnZhbGlkUmVsYXRpb25zaGlwcy5tYXAoKGVyciwgaW52YWxpZCk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZXJyfSAke0pTT04uc3RyaW5naWZ5KGludmFsaWQpfWA7XG4gICAgICAgICAgICB9KS5qb2luKCcsICcpfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGVGaWx0ZXJPcHRpb25zKHZhbHVlLCBvcHRpb25zKTtcbn07XG5leHBvcnQgY29uc3Qgc2VsZWN0ID0gKHZhbHVlLCB7IGRhdGEsIGZpbHRlck9wdGlvbnMsIGhhc01hbnksIG9wdGlvbnMsIHJlcSwgcmVxOiB7IHQgfSwgcmVxdWlyZWQsIHNpYmxpbmdEYXRhIH0pPT57XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gdHlwZW9mIGZpbHRlck9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBmaWx0ZXJPcHRpb25zKHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLFxuICAgICAgICBzaWJsaW5nRGF0YVxuICAgIH0pIDogb3B0aW9ucztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuc29tZSgoaW5wdXQpPT4hZmlsdGVyZWRPcHRpb25zLnNvbWUoKG9wdGlvbik9Pm9wdGlvbiA9PT0gaW5wdXQgfHwgdHlwZW9mIG9wdGlvbiAhPT0gJ3N0cmluZycgJiYgb3B0aW9uPy52YWx1ZSA9PT0gaW5wdXQpKSkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjppbnZhbGlkU2VsZWN0aW9uJyk7XG4gICAgfVxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgdmFsdWVzIHdoZW4gaGFzTWFueSBpcyB0cnVlXG4gICAgaWYgKGhhc01hbnkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBjb3VudHMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSl7XG4gICAgICAgICAgICBjb3VudHMuc2V0KGl0ZW0sIChjb3VudHMuZ2V0KGl0ZW0pIHx8IDApICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtpdGVtLCBjb3VudF0gb2YgY291bnRzLmVudHJpZXMoKSl7XG4gICAgICAgICAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBpdGVtICdjb3VudCcgdGltZXMgdG8gc2hvdyBhbGwgb2NjdXJyZW5jZXNcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZXMucmVkdWNlKChlcnIsIGR1cGxpY2F0ZSwgaSk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZXJyfSAke0pTT04uc3RyaW5naWZ5KGR1cGxpY2F0ZSl9JHtpIDwgZHVwbGljYXRlcy5sZW5ndGggLSAxID8gJywnIDogJyd9YDtcbiAgICAgICAgICAgIH0sIHQoJ3ZhbGlkYXRpb246aW52YWxpZFNlbGVjdGlvbnMnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIWZpbHRlcmVkT3B0aW9ucy5zb21lKChvcHRpb24pPT5vcHRpb24gPT09IHZhbHVlIHx8IHR5cGVvZiBvcHRpb24gIT09ICdzdHJpbmcnICYmIG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmludmFsaWRTZWxlY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKHJlcXVpcmVkICYmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsIHx8IGhhc01hbnkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWU/Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IGNvbnN0IHJhZGlvID0gKHZhbHVlLCB7IG9wdGlvbnMsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0pPT57XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlc09wdGlvbiA9IG9wdGlvbnMuc29tZSgob3B0aW9uKT0+b3B0aW9uID09PSB2YWx1ZSB8fCB0eXBlb2Ygb3B0aW9uICE9PSAnc3RyaW5nJyAmJiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlTWF0Y2hlc09wdGlvbiB8fCB0KCd2YWxpZGF0aW9uOmludmFsaWRTZWxlY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVpcmVkID8gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpIDogdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgcG9pbnQgPSAodmFsdWUgPSBbXG4gICAgJycsXG4gICAgJydcbl0sIHsgcmVxOiB7IHQgfSwgcmVxdWlyZWQgfSk9PntcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBsbmcgPSBwYXJzZUZsb2F0KFN0cmluZyh2YWx1ZVswXSkpO1xuICAgIGNvbnN0IGxhdCA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbHVlWzFdKSk7XG4gICAgaWYgKHJlcXVpcmVkICYmICh2YWx1ZVswXSAmJiB2YWx1ZVsxXSAmJiB0eXBlb2YgbG5nICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGF0ICE9PSAnbnVtYmVyJyB8fCBOdW1iZXIuaXNOYU4obG5nKSB8fCBOdW1iZXIuaXNOYU4obGF0KSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggIT09IDIpKSB7XG4gICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVzVHdvTnVtYmVycycpO1xuICAgIH1cbiAgICBpZiAodmFsdWVbMV0gJiYgTnVtYmVyLmlzTmFOKGxuZykgfHwgdmFsdWVbMF0gJiYgTnVtYmVyLmlzTmFOKGxhdCkpIHtcbiAgICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246aW52YWxpZElucHV0Jyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGxvbmdpdHVkZSBib3VuZHMgKC0xODAgdG8gMTgwKVxuICAgIGlmICh2YWx1ZVswXSAmJiAhTnVtYmVyLmlzTmFOKGxuZykgJiYgKGxuZyA8IC0xODAgfHwgbG5nID4gMTgwKSkge1xuICAgICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpsb25naXR1ZGVPdXRPZkJvdW5kcycpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBsYXRpdHVkZSBib3VuZHMgKC05MCB0byA5MClcbiAgICBpZiAodmFsdWVbMV0gJiYgIU51bWJlci5pc05hTihsYXQpICYmIChsYXQgPCAtOTAgfHwgbGF0ID4gOTApKSB7XG4gICAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmxhdGl0dWRlT3V0T2ZCb3VuZHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBmaWVsZCB2YWxpZGF0aW9ucyB1c2VkIGJ5IFBheWxvYWRcbiAqXG4gKiBUaGVzZSBjYW4gYmUgcmUtdXNlZCBpbiBjdXN0b20gdmFsaWRhdGlvbnNcbiAqLyBleHBvcnQgY29uc3QgdmFsaWRhdGlvbnMgPSB7XG4gICAgYXJyYXksXG4gICAgYmxvY2tzLFxuICAgIGNoZWNrYm94LFxuICAgIGNvZGUsXG4gICAgY29uZmlybVBhc3N3b3JkLFxuICAgIGRhdGUsXG4gICAgZW1haWwsXG4gICAganNvbixcbiAgICBudW1iZXIsXG4gICAgcGFzc3dvcmQsXG4gICAgcG9pbnQsXG4gICAgcmFkaW8sXG4gICAgcmVsYXRpb25zaGlwLFxuICAgIHJpY2hUZXh0LFxuICAgIHNlbGVjdCxcbiAgICB0ZXh0LFxuICAgIHRleHRhcmVhLFxuICAgIHVwbG9hZFxufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdGlvbnMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/validations.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/formatFolderOrDocumentItem.js": /*!**************************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/formatFolderOrDocumentItem.js ***! \**************************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ formatFolderOrDocumentItem: () => (/* binding */ formatFolderOrDocumentItem)\n/* harmony export */ });\n/* harmony import */ var _uploads_isImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../uploads/isImage.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/isImage.js\");\n/* harmony import */ var _utilities_getBestFitFromSizes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utilities/getBestFitFromSizes.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getBestFitFromSizes.js\");\n\n\nfunction formatFolderOrDocumentItem({ folderFieldName, isUpload, relationTo, useAsTitle, value }) {\n const itemValue = {\n id: value?.id,\n _folderOrDocumentTitle: String(useAsTitle && value?.[useAsTitle] || value['id']),\n createdAt: value?.createdAt,\n folderID: value?.[folderFieldName],\n folderType: value?.folderType || [],\n updatedAt: value?.updatedAt\n };\n if (isUpload) {\n itemValue.filename = value.filename;\n itemValue.mimeType = value.mimeType;\n itemValue.url = value.thumbnailURL || ((0,_uploads_isImage_js__WEBPACK_IMPORTED_MODULE_0__.isImage)(value.mimeType) ? (0,_utilities_getBestFitFromSizes_js__WEBPACK_IMPORTED_MODULE_1__.getBestFitFromSizes)({\n sizes: value.sizes,\n targetSizeMax: 520,\n targetSizeMin: 300,\n url: value.url,\n width: value.width\n }) : undefined);\n }\n return {\n itemKey: `${relationTo}-${value.id}`,\n relationTo,\n value: itemValue\n };\n}\n\n//# sourceMappingURL=formatFolderOrDocumentItem.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2ZvbGRlcnMvdXRpbHMvZm9ybWF0Rm9sZGVyT3JEb2N1bWVudEl0ZW0uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1EO0FBQzBCO0FBQ3RFLHNDQUFzQywwREFBMEQ7QUFDdkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyw0REFBTyxtQkFBbUIsc0ZBQW1CO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLG9CQUFvQixXQUFXLEdBQUcsU0FBUztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L2ZvbGRlcnMvdXRpbHMvZm9ybWF0Rm9sZGVyT3JEb2N1bWVudEl0ZW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJbWFnZSB9IGZyb20gJy4uLy4uL3VwbG9hZHMvaXNJbWFnZS5qcyc7XG5pbXBvcnQgeyBnZXRCZXN0Rml0RnJvbVNpemVzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2dldEJlc3RGaXRGcm9tU2l6ZXMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZvbGRlck9yRG9jdW1lbnRJdGVtKHsgZm9sZGVyRmllbGROYW1lLCBpc1VwbG9hZCwgcmVsYXRpb25UbywgdXNlQXNUaXRsZSwgdmFsdWUgfSkge1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHtcbiAgICAgICAgaWQ6IHZhbHVlPy5pZCxcbiAgICAgICAgX2ZvbGRlck9yRG9jdW1lbnRUaXRsZTogU3RyaW5nKHVzZUFzVGl0bGUgJiYgdmFsdWU/Llt1c2VBc1RpdGxlXSB8fCB2YWx1ZVsnaWQnXSksXG4gICAgICAgIGNyZWF0ZWRBdDogdmFsdWU/LmNyZWF0ZWRBdCxcbiAgICAgICAgZm9sZGVySUQ6IHZhbHVlPy5bZm9sZGVyRmllbGROYW1lXSxcbiAgICAgICAgZm9sZGVyVHlwZTogdmFsdWU/LmZvbGRlclR5cGUgfHwgW10sXG4gICAgICAgIHVwZGF0ZWRBdDogdmFsdWU/LnVwZGF0ZWRBdFxuICAgIH07XG4gICAgaWYgKGlzVXBsb2FkKSB7XG4gICAgICAgIGl0ZW1WYWx1ZS5maWxlbmFtZSA9IHZhbHVlLmZpbGVuYW1lO1xuICAgICAgICBpdGVtVmFsdWUubWltZVR5cGUgPSB2YWx1ZS5taW1lVHlwZTtcbiAgICAgICAgaXRlbVZhbHVlLnVybCA9IHZhbHVlLnRodW1ibmFpbFVSTCB8fCAoaXNJbWFnZSh2YWx1ZS5taW1lVHlwZSkgPyBnZXRCZXN0Rml0RnJvbVNpemVzKHtcbiAgICAgICAgICAgIHNpemVzOiB2YWx1ZS5zaXplcyxcbiAgICAgICAgICAgIHRhcmdldFNpemVNYXg6IDUyMCxcbiAgICAgICAgICAgIHRhcmdldFNpemVNaW46IDMwMCxcbiAgICAgICAgICAgIHVybDogdmFsdWUudXJsLFxuICAgICAgICAgICAgd2lkdGg6IHZhbHVlLndpZHRoXG4gICAgICAgIH0pIDogdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXRlbUtleTogYCR7cmVsYXRpb25Ub30tJHt2YWx1ZS5pZH1gLFxuICAgICAgICByZWxhdGlvblRvLFxuICAgICAgICB2YWx1ZTogaXRlbVZhbHVlXG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0Rm9sZGVyT3JEb2N1bWVudEl0ZW0uanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/folders/utils/formatFolderOrDocumentItem.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/preferences/keys.js": /*!**************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/preferences/keys.js ***! \**************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PREFERENCE_KEYS: () => (/* binding */ PREFERENCE_KEYS)\n/* harmony export */ });\n/**\n * Centralized preference keys used throughout Payload admin UI.\n * Import these constants instead of using string literals to prevent typos.\n */ const PREFERENCE_KEYS = {\n /**\n * Stores browse by folder view state\n */ BROWSE_BY_FOLDER: 'browse-by-folder',\n /**\n * Stores dashboard layout configuration\n */ DASHBOARD_LAYOUT: 'dashboard-layout',\n /**\n * Stores navigation group collapse/expand state and nav open/closed state\n */ NAV: 'nav'\n};\n\n//# sourceMappingURL=keys.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3ByZWZlcmVuY2VzL2tleXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3ByZWZlcmVuY2VzL2tleXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZW50cmFsaXplZCBwcmVmZXJlbmNlIGtleXMgdXNlZCB0aHJvdWdob3V0IFBheWxvYWQgYWRtaW4gVUkuXG4gKiBJbXBvcnQgdGhlc2UgY29uc3RhbnRzIGluc3RlYWQgb2YgdXNpbmcgc3RyaW5nIGxpdGVyYWxzIHRvIHByZXZlbnQgdHlwb3MuXG4gKi8gZXhwb3J0IGNvbnN0IFBSRUZFUkVOQ0VfS0VZUyA9IHtcbiAgICAvKipcbiAgICogU3RvcmVzIGJyb3dzZSBieSBmb2xkZXIgdmlldyBzdGF0ZVxuICAgKi8gQlJPV1NFX0JZX0ZPTERFUjogJ2Jyb3dzZS1ieS1mb2xkZXInLFxuICAgIC8qKlxuICAgKiBTdG9yZXMgZGFzaGJvYXJkIGxheW91dCBjb25maWd1cmF0aW9uXG4gICAqLyBEQVNIQk9BUkRfTEFZT1VUOiAnZGFzaGJvYXJkLWxheW91dCcsXG4gICAgLyoqXG4gICAqIFN0b3JlcyBuYXZpZ2F0aW9uIGdyb3VwIGNvbGxhcHNlL2V4cGFuZCBzdGF0ZSBhbmQgbmF2IG9wZW4vY2xvc2VkIHN0YXRlXG4gICAqLyBOQVY6ICduYXYnXG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXlzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/preferences/keys.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/constants.js": /*!*************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/constants.js ***! \*************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SAFE_FIELD_PATH_REGEX: () => (/* binding */ SAFE_FIELD_PATH_REGEX),\n/* harmony export */ validOperatorSet: () => (/* binding */ validOperatorSet),\n/* harmony export */ validOperators: () => (/* binding */ validOperators)\n/* harmony export */ });\nconst validOperators = [\n 'equals',\n 'contains',\n 'not_equals',\n 'in',\n 'all',\n 'not_in',\n 'exists',\n 'greater_than',\n 'greater_than_equal',\n 'less_than',\n 'less_than_equal',\n 'like',\n 'not_like',\n 'within',\n 'intersects',\n 'near'\n];\nconst validOperatorSet = new Set(validOperators);\n/**\n * Matches a dot-separated path where each segment is a word character (a-zA-Z0-9_).\n * Used to validate field paths before they are processed by query builders.\n */ const SAFE_FIELD_PATH_REGEX = /^\\w+(?:\\.\\w+)*$/;\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3R5cGVzL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLElBQVc7O0FBRVgiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC90eXBlcy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHZhbGlkT3BlcmF0b3JzID0gW1xuICAgICdlcXVhbHMnLFxuICAgICdjb250YWlucycsXG4gICAgJ25vdF9lcXVhbHMnLFxuICAgICdpbicsXG4gICAgJ2FsbCcsXG4gICAgJ25vdF9pbicsXG4gICAgJ2V4aXN0cycsXG4gICAgJ2dyZWF0ZXJfdGhhbicsXG4gICAgJ2dyZWF0ZXJfdGhhbl9lcXVhbCcsXG4gICAgJ2xlc3NfdGhhbicsXG4gICAgJ2xlc3NfdGhhbl9lcXVhbCcsXG4gICAgJ2xpa2UnLFxuICAgICdub3RfbGlrZScsXG4gICAgJ3dpdGhpbicsXG4gICAgJ2ludGVyc2VjdHMnLFxuICAgICduZWFyJ1xuXTtcbmV4cG9ydCBjb25zdCB2YWxpZE9wZXJhdG9yU2V0ID0gbmV3IFNldCh2YWxpZE9wZXJhdG9ycyk7XG4vKipcbiAqIE1hdGNoZXMgYSBkb3Qtc2VwYXJhdGVkIHBhdGggd2hlcmUgZWFjaCBzZWdtZW50IGlzIGEgd29yZCBjaGFyYWN0ZXIgKGEtekEtWjAtOV8pLlxuICogVXNlZCB0byB2YWxpZGF0ZSBmaWVsZCBwYXRocyBiZWZvcmUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5IHF1ZXJ5IGJ1aWxkZXJzLlxuICovIGV4cG9ydCBjb25zdCBTQUZFX0ZJRUxEX1BBVEhfUkVHRVggPSAvXlxcdysoPzpcXC5cXHcrKSokLztcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/constants.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/formatFilesize.js": /*!********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/formatFilesize.js ***! \********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ formatFilesize: () => (/* binding */ formatFilesize)\n/* harmony export */ });\nfunction formatFilesize(bytes, decimals = 0) {\n if (bytes === 0) {\n return '0 bytes';\n }\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\n ' bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB',\n 'PB',\n 'EB',\n 'ZB',\n 'YB'\n ];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / k ** i).toFixed(dm))}${sizes[i]}`;\n}\n\n//# sourceMappingURL=formatFilesize.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3VwbG9hZHMvZm9ybWF0RmlsZXNpemUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMseUNBQXlDLEVBQUUsU0FBUztBQUNsRTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3VwbG9hZHMvZm9ybWF0RmlsZXNpemUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVzaXplKGJ5dGVzLCBkZWNpbWFscyA9IDApIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuICcwIGJ5dGVzJztcbiAgICB9XG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3QgZG0gPSBkZWNpbWFscyA8IDAgPyAwIDogZGVjaW1hbHM7XG4gICAgY29uc3Qgc2l6ZXMgPSBbXG4gICAgICAgICcgYnl0ZXMnLFxuICAgICAgICAnS0InLFxuICAgICAgICAnTUInLFxuICAgICAgICAnR0InLFxuICAgICAgICAnVEInLFxuICAgICAgICAnUEInLFxuICAgICAgICAnRUInLFxuICAgICAgICAnWkInLFxuICAgICAgICAnWUInXG4gICAgXTtcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XG4gICAgcmV0dXJuIGAke3BhcnNlRmxvYXQoKGJ5dGVzIC8gayAqKiBpKS50b0ZpeGVkKGRtKSl9JHtzaXplc1tpXX1gO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXRGaWxlc2l6ZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/formatFilesize.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/isImage.js": /*!*************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/isImage.js ***! \*************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isImage: () => (/* binding */ isImage)\n/* harmony export */ });\nfunction isImage(mimeType) {\n return [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp',\n 'image/avif',\n 'image/jxl'\n ].indexOf(mimeType) > -1;\n}\n\n//# sourceMappingURL=isImage.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3VwbG9hZHMvaXNJbWFnZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3VwbG9hZHMvaXNJbWFnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaXNJbWFnZShtaW1lVHlwZSkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdpbWFnZS9qcGVnJyxcbiAgICAgICAgJ2ltYWdlL3BuZycsXG4gICAgICAgICdpbWFnZS9naWYnLFxuICAgICAgICAnaW1hZ2Uvc3ZnK3htbCcsXG4gICAgICAgICdpbWFnZS93ZWJwJyxcbiAgICAgICAgJ2ltYWdlL2F2aWYnLFxuICAgICAgICAnaW1hZ2UvanhsJ1xuICAgIF0uaW5kZXhPZihtaW1lVHlwZSkgPiAtMTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNJbWFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/uploads/isImage.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/appendUploadSelectFields.js": /*!********************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/appendUploadSelectFields.js ***! \********************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ appendUploadSelectFields: () => (/* binding */ appendUploadSelectFields)\n/* harmony export */ });\n/**\n * Mutates the incoming select object to append fields required for upload thumbnails\n * @param collectionConfig\n * @param select\n */ const appendUploadSelectFields = ({ collectionConfig, select })=>{\n if (!collectionConfig.upload || !select) {\n return;\n }\n select.mimeType = true;\n select.thumbnailURL = true;\n if (collectionConfig.upload.imageSizes && collectionConfig.upload.imageSizes.length > 0) {\n if (collectionConfig.upload.adminThumbnail && typeof collectionConfig.upload.adminThumbnail === 'string') {\n /** Only return image size properties that are required to generate the adminThumbnailURL */ select.sizes = {\n [collectionConfig.upload.adminThumbnail]: {\n filename: true\n }\n };\n } else {\n /** Only return image size properties that are required for thumbnails */ select.sizes = collectionConfig.upload.imageSizes.reduce((acc, imageSizeConfig)=>{\n return {\n ...acc,\n [imageSizeConfig.name]: {\n filename: true,\n url: true,\n width: true\n }\n };\n }, {});\n }\n } else {\n select.url = true;\n }\n};\n\n//# sourceMappingURL=appendUploadSelectFields.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9hcHBlbmRVcGxvYWRTZWxlY3RGaWVsZHMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVyxvQ0FBb0MsMEJBQTBCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLElBQUk7QUFDakI7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2FwcGVuZFVwbG9hZFNlbGVjdEZpZWxkcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE11dGF0ZXMgdGhlIGluY29taW5nIHNlbGVjdCBvYmplY3QgdG8gYXBwZW5kIGZpZWxkcyByZXF1aXJlZCBmb3IgdXBsb2FkIHRodW1ibmFpbHNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29uZmlnXG4gKiBAcGFyYW0gc2VsZWN0XG4gKi8gZXhwb3J0IGNvbnN0IGFwcGVuZFVwbG9hZFNlbGVjdEZpZWxkcyA9ICh7IGNvbGxlY3Rpb25Db25maWcsIHNlbGVjdCB9KT0+e1xuICAgIGlmICghY29sbGVjdGlvbkNvbmZpZy51cGxvYWQgfHwgIXNlbGVjdCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlbGVjdC5taW1lVHlwZSA9IHRydWU7XG4gICAgc2VsZWN0LnRodW1ibmFpbFVSTCA9IHRydWU7XG4gICAgaWYgKGNvbGxlY3Rpb25Db25maWcudXBsb2FkLmltYWdlU2l6ZXMgJiYgY29sbGVjdGlvbkNvbmZpZy51cGxvYWQuaW1hZ2VTaXplcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLnVwbG9hZC5hZG1pblRodW1ibmFpbCAmJiB0eXBlb2YgY29sbGVjdGlvbkNvbmZpZy51cGxvYWQuYWRtaW5UaHVtYm5haWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvKiogT25seSByZXR1cm4gaW1hZ2Ugc2l6ZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoZSBhZG1pblRodW1ibmFpbFVSTCAqLyBzZWxlY3Quc2l6ZXMgPSB7XG4gICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25Db25maWcudXBsb2FkLmFkbWluVGh1bWJuYWlsXToge1xuICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiogT25seSByZXR1cm4gaW1hZ2Ugc2l6ZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aHVtYm5haWxzICovIHNlbGVjdC5zaXplcyA9IGNvbGxlY3Rpb25Db25maWcudXBsb2FkLmltYWdlU2l6ZXMucmVkdWNlKChhY2MsIGltYWdlU2l6ZUNvbmZpZyk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgICAgIFtpbWFnZVNpemVDb25maWcubmFtZV06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3QudXJsID0gdHJ1ZTtcbiAgICB9XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBlbmRVcGxvYWRTZWxlY3RGaWVsZHMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/appendUploadSelectFields.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/combineWhereConstraints.js": /*!*******************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/combineWhereConstraints.js ***! \*******************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ combineWhereConstraints: () => (/* binding */ combineWhereConstraints)\n/* harmony export */ });\nfunction combineWhereConstraints(constraints, as = 'and') {\n if (constraints.length === 0) {\n return {};\n }\n const reducedConstraints = constraints.reduce((acc, constraint)=>{\n if (constraint && typeof constraint === 'object' && Object.keys(constraint).length > 0) {\n if (as in constraint) {\n // merge the objects under the shared key\n acc[as] = [\n ...acc[as],\n ...constraint[as]\n ];\n } else {\n // the constraint does not share the key\n acc[as]?.push(constraint);\n }\n }\n return acc;\n }, {\n [as]: []\n });\n if (reducedConstraints[as]?.length === 0) {\n // If there are no constraints, return an empty object\n return {};\n }\n return reducedConstraints;\n}\n\n//# sourceMappingURL=combineWhereConstraints.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9jb21iaW5lV2hlcmVDb25zdHJhaW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2NvbWJpbmVXaGVyZUNvbnN0cmFpbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb21iaW5lV2hlcmVDb25zdHJhaW50cyhjb25zdHJhaW50cywgYXMgPSAnYW5kJykge1xuICAgIGlmIChjb25zdHJhaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCByZWR1Y2VkQ29uc3RyYWludHMgPSBjb25zdHJhaW50cy5yZWR1Y2UoKGFjYywgY29uc3RyYWludCk9PntcbiAgICAgICAgaWYgKGNvbnN0cmFpbnQgJiYgdHlwZW9mIGNvbnN0cmFpbnQgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGNvbnN0cmFpbnQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChhcyBpbiBjb25zdHJhaW50KSB7XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgdGhlIG9iamVjdHMgdW5kZXIgdGhlIHNoYXJlZCBrZXlcbiAgICAgICAgICAgICAgICBhY2NbYXNdID0gW1xuICAgICAgICAgICAgICAgICAgICAuLi5hY2NbYXNdLFxuICAgICAgICAgICAgICAgICAgICAuLi5jb25zdHJhaW50W2FzXVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBjb25zdHJhaW50IGRvZXMgbm90IHNoYXJlIHRoZSBrZXlcbiAgICAgICAgICAgICAgICBhY2NbYXNdPy5wdXNoKGNvbnN0cmFpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge1xuICAgICAgICBbYXNdOiBbXVxuICAgIH0pO1xuICAgIGlmIChyZWR1Y2VkQ29uc3RyYWludHNbYXNdPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGNvbnN0cmFpbnRzLCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZHVjZWRDb25zdHJhaW50cztcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZVdoZXJlQ29uc3RyYWludHMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/combineWhereConstraints.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepCopyObject.js": /*!**********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepCopyObject.js ***! \**********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepCopyObject: () => (/* binding */ deepCopyObject),\n/* harmony export */ deepCopyObjectComplex: () => (/* binding */ deepCopyObjectComplex),\n/* harmony export */ deepCopyObjectSimple: () => (/* binding */ deepCopyObjectSimple),\n/* harmony export */ deepCopyObjectSimpleWithoutReactComponents: () => (/* binding */ deepCopyObjectSimpleWithoutReactComponents)\n/* harmony export */ });\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"(app-pages-browser)/./node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js\")[\"Buffer\"];\n/* eslint-disable @typescript-eslint/no-explicit-any */ /*\nMain deepCopyObject handling - from rfdc: https://github.com/davidmarkclements/rfdc/blob/master/index.js\n\nCopyright 2019 \"David Mark Clements \"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n*/ function copyBuffer(cur) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur);\n }\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length);\n}\nconst constructorHandlers = new Map();\nconstructorHandlers.set(Date, (o)=>new Date(o));\nconstructorHandlers.set(Map, (o, fn)=>new Map(cloneArray(Array.from(o), fn)));\nconstructorHandlers.set(Set, (o, fn)=>new Set(cloneArray(Array.from(o), fn)));\nconstructorHandlers.set(RegExp, (regex)=>new RegExp(regex.source, regex.flags));\nlet handler = null;\nfunction cloneArray(a, fn) {\n const keys = Object.keys(a);\n const a2 = new Array(keys.length);\n for(let i = 0; i < keys.length; i++){\n const k = keys[i];\n const cur = a[k];\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur;\n } else if (cur instanceof RegExp) {\n a2[k] = new RegExp(cur.source, cur.flags);\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn);\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur);\n } else {\n a2[k] = fn(cur);\n }\n }\n return a2;\n}\nconst deepCopyObject = (o)=>{\n if (typeof o !== 'object' || o === null) {\n return o;\n }\n if (Array.isArray(o)) {\n return cloneArray(o, deepCopyObject);\n }\n if (o instanceof RegExp) {\n return new RegExp(o.source, o.flags);\n }\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, deepCopyObject);\n }\n const o2 = {};\n for(const k in o){\n if (Object.hasOwnProperty.call(o, k) === false) {\n continue;\n }\n const cur = o[k];\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur;\n } else if (cur instanceof RegExp) {\n o2[k] = new RegExp(cur.source, cur.flags);\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, deepCopyObject);\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur);\n } else {\n o2[k] = deepCopyObject(cur);\n }\n }\n return o2;\n};\n/*\nFast deepCopyObjectSimple handling - from fast-json-clone: https://github.com/rhysd/fast-json-clone\n\nBenchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/benchmark.js\n*/ /**\n * A deepCopyObject implementation which only works for JSON objects and arrays, and is faster than\n * JSON.parse(JSON.stringify(obj))\n *\n * @param value The JSON value to be cloned. There are two invariants. 1) It must not contain circles\n * as JSON does not allow it. This function will cause infinite loop for such values by\n * design. 2) It must contain JSON values only. Other values like `Date`, `Regexp`, `Map`,\n * `Set`, `Buffer`, ... are not allowed.\n * @returns The cloned JSON value.\n */ function deepCopyObjectSimple(value, filterUndefined = false) {\n if (typeof value !== 'object' || value === null) {\n return value;\n } else if (Array.isArray(value)) {\n return value.map((e)=>typeof e !== 'object' || e === null ? e : deepCopyObjectSimple(e, filterUndefined));\n } else {\n if (value instanceof Date) {\n return new Date(value);\n }\n const ret = {};\n for(const k in value){\n const v = value[k];\n if (filterUndefined && v === undefined) {\n continue;\n }\n ret[k] = typeof v !== 'object' || v === null ? v : deepCopyObjectSimple(v, filterUndefined);\n }\n return ret;\n }\n}\nfunction deepCopyObjectSimpleWithoutReactComponents(value, opts = {}) {\n if (typeof value === 'object' && value !== null && '$$typeof' in value && typeof value.$$typeof === 'symbol') {\n return undefined;\n } else if (typeof value !== 'object' || value === null) {\n return value;\n } else if (Array.isArray(value)) {\n return value.map((e)=>typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e, opts));\n } else {\n // Handle File objects by returning them as-is (don't serialize to plain object) or exclude if excludeFiles is provided\n if (value instanceof File) {\n if (opts.excludeFiles) {\n return undefined;\n }\n return value;\n }\n if (value instanceof Date) {\n return new Date(value);\n }\n const ret = {};\n for(const k in value){\n const v = value[k];\n ret[k] = typeof v !== 'object' || v === null ? v : deepCopyObjectSimpleWithoutReactComponents(v, opts);\n }\n return ret;\n }\n}\n/**\n * A deepCopyObject implementation which is slower than deepCopyObject, but more correct.\n * Can be used if correctness is more important than speed. Supports circular dependencies\n */ function deepCopyObjectComplex(object, cache = new WeakMap()) {\n if (object === null) {\n return null;\n }\n if (cache.has(object)) {\n return cache.get(object);\n }\n // Handle File\n if (object instanceof File) {\n return object;\n }\n // Handle Date\n if (object instanceof Date) {\n return new Date(object.getTime());\n }\n // Handle RegExp\n if (object instanceof RegExp) {\n return new RegExp(object.source, object.flags);\n }\n // Handle Map\n if (object instanceof Map) {\n const clonedMap = new Map();\n cache.set(object, clonedMap);\n for (const [key, value] of object.entries()){\n clonedMap.set(key, deepCopyObjectComplex(value, cache));\n }\n return clonedMap;\n }\n // Handle Set\n if (object instanceof Set) {\n const clonedSet = new Set();\n cache.set(object, clonedSet);\n for (const value of object.values()){\n clonedSet.add(deepCopyObjectComplex(value, cache));\n }\n return clonedSet;\n }\n // Handle Array and Object\n if (typeof object === 'object' && object !== null) {\n if ('$$typeof' in object && typeof object.$$typeof === 'symbol') {\n return object;\n }\n const clonedObject = Array.isArray(object) ? [] : Object.create(Object.getPrototypeOf(object));\n cache.set(object, clonedObject);\n for(const key in object){\n if (Object.prototype.hasOwnProperty.call(object, key) || Object.getOwnPropertySymbols(object).includes(key)) {\n clonedObject[key] = deepCopyObjectComplex(object[key], cache);\n }\n }\n return clonedObject;\n }\n // Handle all other cases\n return object;\n}\n\n//# sourceMappingURL=deepCopyObject.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9kZWVwQ29weU9iamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsTUFBTTtBQUM3QixlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVztBQUNYO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLG9FQUFvRTtBQUMzRTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2RlZXBDb3B5T2JqZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8gLypcbk1haW4gZGVlcENvcHlPYmplY3QgaGFuZGxpbmcgLSBmcm9tIHJmZGM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZG1hcmtjbGVtZW50cy9yZmRjL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5cbkNvcHlyaWdodCAyMDE5IFwiRGF2aWQgTWFyayBDbGVtZW50cyA8ZGF2aWQubWFyay5jbGVtZW50c0BnbWFpbC5jb20+XCJcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG5kb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxudGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxudG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9uc1xub2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURURcblRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcblRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0ZcbkNPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG5JTiBUSEUgU09GVFdBUkUuXG4qLyBmdW5jdGlvbiBjb3B5QnVmZmVyKGN1cikge1xuICAgIGlmIChjdXIgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGN1cik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgY3VyLmNvbnN0cnVjdG9yKGN1ci5idWZmZXIuc2xpY2UoKSwgY3VyLmJ5dGVPZmZzZXQsIGN1ci5sZW5ndGgpO1xufVxuY29uc3QgY29uc3RydWN0b3JIYW5kbGVycyA9IG5ldyBNYXAoKTtcbmNvbnN0cnVjdG9ySGFuZGxlcnMuc2V0KERhdGUsIChvKT0+bmV3IERhdGUobykpO1xuY29uc3RydWN0b3JIYW5kbGVycy5zZXQoTWFwLCAobywgZm4pPT5uZXcgTWFwKGNsb25lQXJyYXkoQXJyYXkuZnJvbShvKSwgZm4pKSk7XG5jb25zdHJ1Y3RvckhhbmRsZXJzLnNldChTZXQsIChvLCBmbik9Pm5ldyBTZXQoY2xvbmVBcnJheShBcnJheS5mcm9tKG8pLCBmbikpKTtcbmNvbnN0cnVjdG9ySGFuZGxlcnMuc2V0KFJlZ0V4cCwgKHJlZ2V4KT0+bmV3IFJlZ0V4cChyZWdleC5zb3VyY2UsIHJlZ2V4LmZsYWdzKSk7XG5sZXQgaGFuZGxlciA9IG51bGw7XG5mdW5jdGlvbiBjbG9uZUFycmF5KGEsIGZuKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGNvbnN0IGEyID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGsgPSBrZXlzW2ldO1xuICAgICAgICBjb25zdCBjdXIgPSBhW2tdO1xuICAgICAgICBpZiAodHlwZW9mIGN1ciAhPT0gJ29iamVjdCcgfHwgY3VyID09PSBudWxsKSB7XG4gICAgICAgICAgICBhMltrXSA9IGN1cjtcbiAgICAgICAgfSBlbHNlIGlmIChjdXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgIGEyW2tdID0gbmV3IFJlZ0V4cChjdXIuc291cmNlLCBjdXIuZmxhZ3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1ci5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0ICYmIChoYW5kbGVyID0gY29uc3RydWN0b3JIYW5kbGVycy5nZXQoY3VyLmNvbnN0cnVjdG9yKSkpIHtcbiAgICAgICAgICAgIGEyW2tdID0gaGFuZGxlcihjdXIsIGZuKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoY3VyKSkge1xuICAgICAgICAgICAgYTJba10gPSBjb3B5QnVmZmVyKGN1cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhMltrXSA9IGZuKGN1cik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGEyO1xufVxuZXhwb3J0IGNvbnN0IGRlZXBDb3B5T2JqZWN0ID0gKG8pPT57XG4gICAgaWYgKHR5cGVvZiBvICE9PSAnb2JqZWN0JyB8fCBvID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvKSkge1xuICAgICAgICByZXR1cm4gY2xvbmVBcnJheShvLCBkZWVwQ29weU9iamVjdCk7XG4gICAgfVxuICAgIGlmIChvIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKG8uc291cmNlLCBvLmZsYWdzKTtcbiAgICB9XG4gICAgaWYgKG8uY29uc3RydWN0b3IgIT09IE9iamVjdCAmJiAoaGFuZGxlciA9IGNvbnN0cnVjdG9ySGFuZGxlcnMuZ2V0KG8uY29uc3RydWN0b3IpKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlcihvLCBkZWVwQ29weU9iamVjdCk7XG4gICAgfVxuICAgIGNvbnN0IG8yID0ge307XG4gICAgZm9yKGNvbnN0IGsgaW4gbyl7XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1ciA9IG9ba107XG4gICAgICAgIGlmICh0eXBlb2YgY3VyICE9PSAnb2JqZWN0JyB8fCBjdXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG8yW2tdID0gY3VyO1xuICAgICAgICB9IGVsc2UgaWYgKGN1ciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgbzJba10gPSBuZXcgUmVnRXhwKGN1ci5zb3VyY2UsIGN1ci5mbGFncyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VyLmNvbnN0cnVjdG9yICE9PSBPYmplY3QgJiYgKGhhbmRsZXIgPSBjb25zdHJ1Y3RvckhhbmRsZXJzLmdldChjdXIuY29uc3RydWN0b3IpKSkge1xuICAgICAgICAgICAgbzJba10gPSBoYW5kbGVyKGN1ciwgZGVlcENvcHlPYmplY3QpO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhjdXIpKSB7XG4gICAgICAgICAgICBvMltrXSA9IGNvcHlCdWZmZXIoY3VyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG8yW2tdID0gZGVlcENvcHlPYmplY3QoY3VyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbzI7XG59O1xuLypcbkZhc3QgZGVlcENvcHlPYmplY3RTaW1wbGUgaGFuZGxpbmcgLSBmcm9tIGZhc3QtanNvbi1jbG9uZTogaHR0cHM6Ly9naXRodWIuY29tL3JoeXNkL2Zhc3QtanNvbi1jbG9uZVxuXG5CZW5jaG1hcms6IGh0dHBzOi8vZ2l0aHViLmNvbS9BbGVzc2lvR3IvZmFzdGVzdC1kZWVwLWNsb25lLWpzb24vYmxvYi9tYWluL3Rlc3QvYmVuY2htYXJrLmpzXG4qLyAvKipcbiAqIEEgZGVlcENvcHlPYmplY3QgaW1wbGVtZW50YXRpb24gd2hpY2ggb25seSB3b3JrcyBmb3IgSlNPTiBvYmplY3RzIGFuZCBhcnJheXMsIGFuZCBpcyBmYXN0ZXIgdGhhblxuICogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgSlNPTiB2YWx1ZSB0byBiZSBjbG9uZWQuIFRoZXJlIGFyZSB0d28gaW52YXJpYW50cy4gMSkgSXQgbXVzdCBub3QgY29udGFpbiBjaXJjbGVzXG4gKiAgICAgICAgICAgICAgYXMgSlNPTiBkb2VzIG5vdCBhbGxvdyBpdC4gVGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIGluZmluaXRlIGxvb3AgZm9yIHN1Y2ggdmFsdWVzIGJ5XG4gKiAgICAgICAgICAgICAgZGVzaWduLiAyKSBJdCBtdXN0IGNvbnRhaW4gSlNPTiB2YWx1ZXMgb25seS4gT3RoZXIgdmFsdWVzIGxpa2UgYERhdGVgLCBgUmVnZXhwYCwgYE1hcGAsXG4gKiAgICAgICAgICAgICAgYFNldGAsIGBCdWZmZXJgLCAuLi4gYXJlIG5vdCBhbGxvd2VkLlxuICogQHJldHVybnMgVGhlIGNsb25lZCBKU09OIHZhbHVlLlxuICovIGV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weU9iamVjdFNpbXBsZSh2YWx1ZSwgZmlsdGVyVW5kZWZpbmVkID0gZmFsc2UpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChlKT0+dHlwZW9mIGUgIT09ICdvYmplY3QnIHx8IGUgPT09IG51bGwgPyBlIDogZGVlcENvcHlPYmplY3RTaW1wbGUoZSwgZmlsdGVyVW5kZWZpbmVkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB7fTtcbiAgICAgICAgZm9yKGNvbnN0IGsgaW4gdmFsdWUpe1xuICAgICAgICAgICAgY29uc3QgdiA9IHZhbHVlW2tdO1xuICAgICAgICAgICAgaWYgKGZpbHRlclVuZGVmaW5lZCAmJiB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldFtrXSA9IHR5cGVvZiB2ICE9PSAnb2JqZWN0JyB8fCB2ID09PSBudWxsID8gdiA6IGRlZXBDb3B5T2JqZWN0U2ltcGxlKHYsIGZpbHRlclVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHlPYmplY3RTaW1wbGVXaXRob3V0UmVhY3RDb21wb25lbnRzKHZhbHVlLCBvcHRzID0ge30pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAnJCR0eXBlb2YnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS4kJHR5cGVvZiA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZSk9PnR5cGVvZiBlICE9PSAnb2JqZWN0JyB8fCBlID09PSBudWxsID8gZSA6IGRlZXBDb3B5T2JqZWN0U2ltcGxlV2l0aG91dFJlYWN0Q29tcG9uZW50cyhlLCBvcHRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIEZpbGUgb2JqZWN0cyBieSByZXR1cm5pbmcgdGhlbSBhcy1pcyAoZG9uJ3Qgc2VyaWFsaXplIHRvIHBsYWluIG9iamVjdCkgb3IgZXhjbHVkZSBpZiBleGNsdWRlRmlsZXMgaXMgcHJvdmlkZWRcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMuZXhjbHVkZUZpbGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHt9O1xuICAgICAgICBmb3IoY29uc3QgayBpbiB2YWx1ZSl7XG4gICAgICAgICAgICBjb25zdCB2ID0gdmFsdWVba107XG4gICAgICAgICAgICByZXRba10gPSB0eXBlb2YgdiAhPT0gJ29iamVjdCcgfHwgdiA9PT0gbnVsbCA/IHYgOiBkZWVwQ29weU9iamVjdFNpbXBsZVdpdGhvdXRSZWFjdENvbXBvbmVudHModiwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG4vKipcbiAqIEEgZGVlcENvcHlPYmplY3QgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgc2xvd2VyIHRoYW4gZGVlcENvcHlPYmplY3QsIGJ1dCBtb3JlIGNvcnJlY3QuXG4gKiBDYW4gYmUgdXNlZCBpZiBjb3JyZWN0bmVzcyBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHNwZWVkLiBTdXBwb3J0cyBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAqLyBleHBvcnQgZnVuY3Rpb24gZGVlcENvcHlPYmplY3RDb21wbGV4KG9iamVjdCwgY2FjaGUgPSBuZXcgV2Vha01hcCgpKSB7XG4gICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNhY2hlLmhhcyhvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQob2JqZWN0KTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIEZpbGVcbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgICAvLyBIYW5kbGUgRGF0ZVxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShvYmplY3QuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIFJlZ0V4cFxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAob2JqZWN0LnNvdXJjZSwgb2JqZWN0LmZsYWdzKTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIE1hcFxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgY29uc3QgY2xvbmVkTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBjYWNoZS5zZXQob2JqZWN0LCBjbG9uZWRNYXApO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmplY3QuZW50cmllcygpKXtcbiAgICAgICAgICAgIGNsb25lZE1hcC5zZXQoa2V5LCBkZWVwQ29weU9iamVjdENvbXBsZXgodmFsdWUsIGNhY2hlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lZE1hcDtcbiAgICB9XG4gICAgLy8gSGFuZGxlIFNldFxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICBjYWNoZS5zZXQob2JqZWN0LCBjbG9uZWRTZXQpO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdC52YWx1ZXMoKSl7XG4gICAgICAgICAgICBjbG9uZWRTZXQuYWRkKGRlZXBDb3B5T2JqZWN0Q29tcGxleCh2YWx1ZSwgY2FjaGUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVkU2V0O1xuICAgIH1cbiAgICAvLyBIYW5kbGUgQXJyYXkgYW5kIE9iamVjdFxuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCckJHR5cGVvZicgaW4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuJCR0eXBlb2YgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsb25lZE9iamVjdCA9IEFycmF5LmlzQXJyYXkob2JqZWN0KSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSk7XG4gICAgICAgIGNhY2hlLnNldChvYmplY3QsIGNsb25lZE9iamVjdCk7XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gb2JqZWN0KXtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVkT2JqZWN0W2tleV0gPSBkZWVwQ29weU9iamVjdENvbXBsZXgob2JqZWN0W2tleV0sIGNhY2hlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVkT2JqZWN0O1xuICAgIH1cbiAgICAvLyBIYW5kbGUgYWxsIG90aGVyIGNhc2VzXG4gICAgcmV0dXJuIG9iamVjdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVlcENvcHlPYmplY3QuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/deepCopyObject.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/escapeRegExp.js": /*!********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/escapeRegExp.js ***! \********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ escapeRegExp: () => (/* binding */ escapeRegExp)\n/* harmony export */ });\n/**\n * Escapes special characters in a string for use in a regular expression\n * @param string - The string to escape\n * @returns The escaped string safe for use in RegExp\n */ const escapeRegExp = (string)=>string.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n//# sourceMappingURL=escapeRegExp.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9lc2NhcGVSZWdFeHAuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVyxnRUFBZ0U7O0FBRTNFIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2VzY2FwZVJlZ0V4cC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGZvciB1c2UgaW4gYSByZWd1bGFyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGVzY2FwZVxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nIHNhZmUgZm9yIHVzZSBpbiBSZWdFeHBcbiAqLyBleHBvcnQgY29uc3QgZXNjYXBlUmVnRXhwID0gKHN0cmluZyk9PnN0cmluZy5yZXBsYWNlKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1lc2NhcGVSZWdFeHAuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/escapeRegExp.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/extractID.js": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/extractID.js ***! \*****************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ extractID: () => (/* binding */ extractID)\n/* harmony export */ });\nconst extractID = (objectOrID)=>{\n if (typeof objectOrID === 'string' || typeof objectOrID === 'number') {\n return objectOrID;\n }\n return objectOrID.id;\n};\n\n//# sourceMappingURL=extractID.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9leHRyYWN0SUQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9leHRyYWN0SUQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGV4dHJhY3RJRCA9IChvYmplY3RPcklEKT0+e1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0T3JJRCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9iamVjdE9ySUQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RPcklEO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0T3JJRC5pZDtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4dHJhY3RJRC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/extractID.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattenTopLevelFields.js": /*!*****************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattenTopLevelFields.js ***! \*****************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ flattenTopLevelFields: () => (/* binding */ flattenTopLevelFields)\n/* harmony export */ });\n/* harmony import */ var _payloadcms_translations__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @payloadcms/translations */ \"(app-pages-browser)/./node_modules/.pnpm/@payloadcms+translations@3.81.0/node_modules/@payloadcms/translations/dist/utilities/getTranslation.js\");\n/* harmony import */ var _fields_config_types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../fields/config/types.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/fields/config/types.js\");\n\n\n/**\n * Flattens a collection's fields into a single array of fields, optionally\n * extracting nested fields in group fields.\n *\n * @param fields - Array of fields to flatten\n * @param options - Options to control the flattening behavior\n */ function flattenTopLevelFields(fields = [], options) {\n const normalizedOptions = typeof options === 'boolean' ? {\n keepPresentationalFields: options\n } : options ?? {};\n const { i18n, keepPresentationalFields, labelPrefix, moveSubFieldsToTop = false, pathPrefix } = normalizedOptions;\n return fields.reduce((acc, field)=>{\n // If a group field has subfields and has a name, otherwise we catch it below along with collapsible and row fields\n if (field.type === 'group' && 'fields' in field) {\n if (moveSubFieldsToTop) {\n const isNamedGroup = 'name' in field && typeof field.name === 'string' && !!field.name;\n const groupName = 'name' in field ? field.name : undefined;\n const translatedLabel = 'label' in field && field.label && i18n ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_0__.getTranslation)(field.label, i18n) : undefined;\n const labelWithPrefix = labelPrefix ? `${labelPrefix} > ${translatedLabel ?? groupName}` : translatedLabel ?? groupName;\n const nameWithPrefix = 'name' in field && field.name ? pathPrefix ? `${pathPrefix}.${field.name}` : field.name : pathPrefix;\n acc.push(// Need to include the top-level group field when hoisting its subfields,\n // so that `buildColumnState` can detect and render a column if the group\n // has a custom admin Cell component defined in its configuration.\n // See: packages/ui/src/providers/TableColumns/buildColumnState/index.tsx\n field, ...flattenTopLevelFields(field.fields, {\n i18n,\n keepPresentationalFields,\n labelPrefix: isNamedGroup ? labelWithPrefix : labelPrefix,\n moveSubFieldsToTop,\n pathPrefix: isNamedGroup ? nameWithPrefix : pathPrefix\n }));\n } else {\n if ((0,_fields_config_types_js__WEBPACK_IMPORTED_MODULE_1__.fieldAffectsData)(field)) {\n // Hoisting diabled - keep as top level field\n acc.push(field);\n } else {\n acc.push(...flattenTopLevelFields(field.fields, options));\n }\n }\n } else if (field.type === 'tabs' && 'tabs' in field) {\n return [\n ...acc,\n ...field.tabs.reduce((tabFields, tab)=>{\n if ((0,_fields_config_types_js__WEBPACK_IMPORTED_MODULE_1__.tabHasName)(tab)) {\n if (moveSubFieldsToTop) {\n const translatedLabel = 'label' in tab && tab.label && i18n ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_0__.getTranslation)(tab.label, i18n) : undefined;\n const labelWithPrefixForTab = labelPrefix ? `${labelPrefix} > ${translatedLabel ?? tab.name}` : translatedLabel ?? tab.name;\n const pathPrefixForTab = tab.name ? pathPrefix ? `${pathPrefix}.${tab.name}` : tab.name : pathPrefix;\n return [\n ...tabFields,\n ...flattenTopLevelFields(tab.fields, {\n i18n,\n keepPresentationalFields,\n labelPrefix: labelWithPrefixForTab,\n moveSubFieldsToTop,\n pathPrefix: pathPrefixForTab\n })\n ];\n } else {\n // Named tab, hoisting disabled: keep as top-level field\n return [\n ...tabFields,\n {\n ...tab,\n type: 'tab'\n }\n ];\n }\n } else {\n // Unnamed tab: always hoist its fields\n return [\n ...tabFields,\n ...flattenTopLevelFields(tab.fields, options)\n ];\n }\n }, [])\n ];\n } else if ((0,_fields_config_types_js__WEBPACK_IMPORTED_MODULE_1__.fieldHasSubFields)(field) && [\n 'collapsible',\n 'row'\n ].includes(field.type)) {\n // Recurse into row and collapsible\n acc.push(...flattenTopLevelFields(field.fields, options));\n } else if ((0,_fields_config_types_js__WEBPACK_IMPORTED_MODULE_1__.fieldAffectsData)(field) || keepPresentationalFields && (0,_fields_config_types_js__WEBPACK_IMPORTED_MODULE_1__.fieldIsPresentationalOnly)(field)) {\n // Ignore nested `id` fields when inside nested structure\n if (field.name === 'id' && labelPrefix !== undefined) {\n return acc;\n }\n const translatedLabel = 'label' in field && field.label && i18n ? (0,_payloadcms_translations__WEBPACK_IMPORTED_MODULE_0__.getTranslation)(field.label, i18n) : undefined;\n const name = 'name' in field ? field.name : undefined;\n const isHoistingFromGroup = pathPrefix !== undefined || labelPrefix !== undefined;\n acc.push({\n ...field,\n ...moveSubFieldsToTop && isHoistingFromGroup && {\n accessor: pathPrefix && name ? `${pathPrefix}.${name}` : name ?? '',\n labelWithPrefix: labelPrefix ? `${labelPrefix} > ${translatedLabel ?? name}` : translatedLabel ?? name\n }\n });\n }\n return acc;\n }, []);\n}\n\n//# sourceMappingURL=flattenTopLevelFields.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9mbGF0dGVuVG9wTGV2ZWxGaWVsZHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTBEO0FBQzZEO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0EsTUFBTTtBQUNOLFlBQVksc0ZBQXNGO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRix3RUFBYztBQUNoRyx5REFBeUQsYUFBYSxJQUFJLDZCQUE2QjtBQUN2Ryx1RkFBdUYsV0FBVyxHQUFHLFdBQVc7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsY0FBYztBQUNkLG9CQUFvQix5RUFBZ0I7QUFDcEM7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1FQUFVO0FBQ2xDO0FBQ0EsMEZBQTBGLHdFQUFjO0FBQ3hHLDJFQUEyRSxhQUFhLElBQUksNEJBQTRCO0FBQ3hILGdGQUFnRixXQUFXLEdBQUcsU0FBUztBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxVQUFVLFNBQVMsMEVBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFNBQVMseUVBQWdCLHVDQUF1QyxrRkFBeUI7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEUsd0VBQWM7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxXQUFXLEdBQUcsS0FBSztBQUN6RSxzREFBc0QsYUFBYSxJQUFJLHdCQUF3QjtBQUMvRjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2ZsYXR0ZW5Ub3BMZXZlbEZpZWxkcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJ0BwYXlsb2FkY21zL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCBmaWVsZEhhc1N1YkZpZWxkcywgZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSwgdGFiSGFzTmFtZSB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMuanMnO1xuLyoqXG4gKiBGbGF0dGVucyBhIGNvbGxlY3Rpb24ncyBmaWVsZHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBmaWVsZHMsIG9wdGlvbmFsbHlcbiAqIGV4dHJhY3RpbmcgbmVzdGVkIGZpZWxkcyBpbiBncm91cCBmaWVsZHMuXG4gKlxuICogQHBhcmFtIGZpZWxkcyAtIEFycmF5IG9mIGZpZWxkcyB0byBmbGF0dGVuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29udHJvbCB0aGUgZmxhdHRlbmluZyBiZWhhdmlvclxuICovIGV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzID0gW10sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkT3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIGtlZXBQcmVzZW50YXRpb25hbEZpZWxkczogb3B0aW9uc1xuICAgIH0gOiBvcHRpb25zID8/IHt9O1xuICAgIGNvbnN0IHsgaTE4biwga2VlcFByZXNlbnRhdGlvbmFsRmllbGRzLCBsYWJlbFByZWZpeCwgbW92ZVN1YkZpZWxkc1RvVG9wID0gZmFsc2UsIHBhdGhQcmVmaXggfSA9IG5vcm1hbGl6ZWRPcHRpb25zO1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkKT0+e1xuICAgICAgICAvLyBJZiBhIGdyb3VwIGZpZWxkIGhhcyBzdWJmaWVsZHMgYW5kIGhhcyBhIG5hbWUsIG90aGVyd2lzZSB3ZSBjYXRjaCBpdCBiZWxvdyBhbG9uZyB3aXRoIGNvbGxhcHNpYmxlIGFuZCByb3cgZmllbGRzXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnZ3JvdXAnICYmICdmaWVsZHMnIGluIGZpZWxkKSB7XG4gICAgICAgICAgICBpZiAobW92ZVN1YkZpZWxkc1RvVG9wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNOYW1lZEdyb3VwID0gJ25hbWUnIGluIGZpZWxkICYmIHR5cGVvZiBmaWVsZC5uYW1lID09PSAnc3RyaW5nJyAmJiAhIWZpZWxkLm5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBOYW1lID0gJ25hbWUnIGluIGZpZWxkID8gZmllbGQubmFtZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkTGFiZWwgPSAnbGFiZWwnIGluIGZpZWxkICYmIGZpZWxkLmxhYmVsICYmIGkxOG4gPyBnZXRUcmFuc2xhdGlvbihmaWVsZC5sYWJlbCwgaTE4bikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxXaXRoUHJlZml4ID0gbGFiZWxQcmVmaXggPyBgJHtsYWJlbFByZWZpeH0gPiAke3RyYW5zbGF0ZWRMYWJlbCA/PyBncm91cE5hbWV9YCA6IHRyYW5zbGF0ZWRMYWJlbCA/PyBncm91cE5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVdpdGhQcmVmaXggPSAnbmFtZScgaW4gZmllbGQgJiYgZmllbGQubmFtZSA/IHBhdGhQcmVmaXggPyBgJHtwYXRoUHJlZml4fS4ke2ZpZWxkLm5hbWV9YCA6IGZpZWxkLm5hbWUgOiBwYXRoUHJlZml4O1xuICAgICAgICAgICAgICAgIGFjYy5wdXNoKC8vIE5lZWQgdG8gaW5jbHVkZSB0aGUgdG9wLWxldmVsIGdyb3VwIGZpZWxkIHdoZW4gaG9pc3RpbmcgaXRzIHN1YmZpZWxkcyxcbiAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IGBidWlsZENvbHVtblN0YXRlYCBjYW4gZGV0ZWN0IGFuZCByZW5kZXIgYSBjb2x1bW4gaWYgdGhlIGdyb3VwXG4gICAgICAgICAgICAgICAgLy8gaGFzIGEgY3VzdG9tIGFkbWluIENlbGwgY29tcG9uZW50IGRlZmluZWQgaW4gaXRzIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gU2VlOiBwYWNrYWdlcy91aS9zcmMvcHJvdmlkZXJzL1RhYmxlQ29sdW1ucy9idWlsZENvbHVtblN0YXRlL2luZGV4LnRzeFxuICAgICAgICAgICAgICAgIGZpZWxkLCAuLi5mbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGQuZmllbGRzLCB7XG4gICAgICAgICAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgICAgICAgICAgIGtlZXBQcmVzZW50YXRpb25hbEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxQcmVmaXg6IGlzTmFtZWRHcm91cCA/IGxhYmVsV2l0aFByZWZpeCA6IGxhYmVsUHJlZml4LFxuICAgICAgICAgICAgICAgICAgICBtb3ZlU3ViRmllbGRzVG9Ub3AsXG4gICAgICAgICAgICAgICAgICAgIHBhdGhQcmVmaXg6IGlzTmFtZWRHcm91cCA/IG5hbWVXaXRoUHJlZml4IDogcGF0aFByZWZpeFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhvaXN0aW5nIGRpYWJsZWQgLSBrZWVwIGFzIHRvcCBsZXZlbCBmaWVsZFxuICAgICAgICAgICAgICAgICAgICBhY2MucHVzaChmaWVsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goLi4uZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkLmZpZWxkcywgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAndGFicycgJiYgJ3RhYnMnIGluIGZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgICAuLi5maWVsZC50YWJzLnJlZHVjZSgodGFiRmllbGRzLCB0YWIpPT57XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWJIYXNOYW1lKHRhYikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb3ZlU3ViRmllbGRzVG9Ub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkTGFiZWwgPSAnbGFiZWwnIGluIHRhYiAmJiB0YWIubGFiZWwgJiYgaTE4biA/IGdldFRyYW5zbGF0aW9uKHRhYi5sYWJlbCwgaTE4bikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWxXaXRoUHJlZml4Rm9yVGFiID0gbGFiZWxQcmVmaXggPyBgJHtsYWJlbFByZWZpeH0gPiAke3RyYW5zbGF0ZWRMYWJlbCA/PyB0YWIubmFtZX1gIDogdHJhbnNsYXRlZExhYmVsID8/IHRhYi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhQcmVmaXhGb3JUYWIgPSB0YWIubmFtZSA/IHBhdGhQcmVmaXggPyBgJHtwYXRoUHJlZml4fS4ke3RhYi5uYW1lfWAgOiB0YWIubmFtZSA6IHBhdGhQcmVmaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGFiRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5mbGF0dGVuVG9wTGV2ZWxGaWVsZHModGFiLmZpZWxkcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBQcmVzZW50YXRpb25hbEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUHJlZml4OiBsYWJlbFdpdGhQcmVmaXhGb3JUYWIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlU3ViRmllbGRzVG9Ub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoUHJlZml4OiBwYXRoUHJlZml4Rm9yVGFiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmFtZWQgdGFiLCBob2lzdGluZyBkaXNhYmxlZDoga2VlcCBhcyB0b3AtbGV2ZWwgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50YWJGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRhYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0YWInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5uYW1lZCB0YWI6IGFsd2F5cyBob2lzdCBpdHMgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRhYkZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5mbGF0dGVuVG9wTGV2ZWxGaWVsZHModGFiLmZpZWxkcywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBbXSlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGRIYXNTdWJGaWVsZHMoZmllbGQpICYmIFtcbiAgICAgICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICAgICAncm93J1xuICAgICAgICBdLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNlIGludG8gcm93IGFuZCBjb2xsYXBzaWJsZVxuICAgICAgICAgICAgYWNjLnB1c2goLi4uZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkLmZpZWxkcywgb3B0aW9ucykpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpIHx8IGtlZXBQcmVzZW50YXRpb25hbEZpZWxkcyAmJiBmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5KGZpZWxkKSkge1xuICAgICAgICAgICAgLy8gSWdub3JlIG5lc3RlZCBgaWRgIGZpZWxkcyB3aGVuIGluc2lkZSBuZXN0ZWQgc3RydWN0dXJlXG4gICAgICAgICAgICBpZiAoZmllbGQubmFtZSA9PT0gJ2lkJyAmJiBsYWJlbFByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRMYWJlbCA9ICdsYWJlbCcgaW4gZmllbGQgJiYgZmllbGQubGFiZWwgJiYgaTE4biA/IGdldFRyYW5zbGF0aW9uKGZpZWxkLmxhYmVsLCBpMThuKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSAnbmFtZScgaW4gZmllbGQgPyBmaWVsZC5uYW1lIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXNIb2lzdGluZ0Zyb21Hcm91cCA9IHBhdGhQcmVmaXggIT09IHVuZGVmaW5lZCB8fCBsYWJlbFByZWZpeCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkLFxuICAgICAgICAgICAgICAgIC4uLm1vdmVTdWJGaWVsZHNUb1RvcCAmJiBpc0hvaXN0aW5nRnJvbUdyb3VwICYmIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3I6IHBhdGhQcmVmaXggJiYgbmFtZSA/IGAke3BhdGhQcmVmaXh9LiR7bmFtZX1gIDogbmFtZSA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxXaXRoUHJlZml4OiBsYWJlbFByZWZpeCA/IGAke2xhYmVsUHJlZml4fSA+ICR7dHJhbnNsYXRlZExhYmVsID8/IG5hbWV9YCA6IHRyYW5zbGF0ZWRMYWJlbCA/PyBuYW1lXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZsYXR0ZW5Ub3BMZXZlbEZpZWxkcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/flattenTopLevelFields.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatAdminURL.js": /*!**********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatAdminURL.js ***! \**********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ formatAdminURL: () => (/* binding */ formatAdminURL)\n/* harmony export */ });\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\nconst formatAdminURL = (args)=>{\n const { adminRoute, apiRoute, includeBasePath: includeBasePathArg, path = '', relative = false, serverURL } = args;\n const basePath = process.env.NEXT_BASE_PATH || args.basePath || '';\n const routePath = adminRoute || apiRoute;\n const segments = [\n routePath && routePath !== '/' && routePath,\n path && path\n ].filter(Boolean);\n const pathname = segments.join('') || '/';\n const pathnameWithBase = (basePath + pathname).replace(/\\/$/, '') || '/';\n const includeBasePath = includeBasePathArg ?? (adminRoute ? false : true);\n if (relative || !serverURL) {\n if (includeBasePath && basePath) {\n return pathnameWithBase;\n }\n return pathname;\n }\n const serverURLObj = new URL(serverURL);\n return new URL(pathnameWithBase, serverURLObj.origin).toString();\n};\n\n//# sourceMappingURL=formatAdminURL.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9mb3JtYXRBZG1pblVSTC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPO0FBQ1AsWUFBWSxvR0FBb0c7QUFDaEgscUJBQXFCLE9BQU87QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9mb3JtYXRBZG1pblVSTC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0QWRtaW5VUkwgPSAoYXJncyk9PntcbiAgICBjb25zdCB7IGFkbWluUm91dGUsIGFwaVJvdXRlLCBpbmNsdWRlQmFzZVBhdGg6IGluY2x1ZGVCYXNlUGF0aEFyZywgcGF0aCA9ICcnLCByZWxhdGl2ZSA9IGZhbHNlLCBzZXJ2ZXJVUkwgfSA9IGFyZ3M7XG4gICAgY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmVudi5ORVhUX0JBU0VfUEFUSCB8fCBhcmdzLmJhc2VQYXRoIHx8ICcnO1xuICAgIGNvbnN0IHJvdXRlUGF0aCA9IGFkbWluUm91dGUgfHwgYXBpUm91dGU7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBbXG4gICAgICAgIHJvdXRlUGF0aCAmJiByb3V0ZVBhdGggIT09ICcvJyAmJiByb3V0ZVBhdGgsXG4gICAgICAgIHBhdGggJiYgcGF0aFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IHBhdGhuYW1lID0gc2VnbWVudHMuam9pbignJykgfHwgJy8nO1xuICAgIGNvbnN0IHBhdGhuYW1lV2l0aEJhc2UgPSAoYmFzZVBhdGggKyBwYXRobmFtZSkucmVwbGFjZSgvXFwvJC8sICcnKSB8fCAnLyc7XG4gICAgY29uc3QgaW5jbHVkZUJhc2VQYXRoID0gaW5jbHVkZUJhc2VQYXRoQXJnID8/IChhZG1pblJvdXRlID8gZmFsc2UgOiB0cnVlKTtcbiAgICBpZiAocmVsYXRpdmUgfHwgIXNlcnZlclVSTCkge1xuICAgICAgICBpZiAoaW5jbHVkZUJhc2VQYXRoICYmIGJhc2VQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWVXaXRoQmFzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aG5hbWU7XG4gICAgfVxuICAgIGNvbnN0IHNlcnZlclVSTE9iaiA9IG5ldyBVUkwoc2VydmVyVVJMKTtcbiAgICByZXR1cm4gbmV3IFVSTChwYXRobmFtZVdpdGhCYXNlLCBzZXJ2ZXJVUkxPYmoub3JpZ2luKS50b1N0cmluZygpO1xufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0QWRtaW5VUkwuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatAdminURL.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatLabels.js": /*!********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatLabels.js ***! \********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ formatLabels: () => (/* binding */ formatLabels),\n/* harmony export */ formatNames: () => (/* binding */ formatNames),\n/* harmony export */ toWords: () => (/* binding */ toWords)\n/* harmony export */ });\n/* harmony import */ var pluralize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pluralize */ \"(app-pages-browser)/./node_modules/.pnpm/pluralize@8.0.0/node_modules/pluralize/pluralize.js\");\n\nconst { isPlural, singular } = pluralize__WEBPACK_IMPORTED_MODULE_0__;\nconst capitalizeFirstLetter = (string)=>string.charAt(0).toUpperCase() + string.slice(1);\nconst toWords = (inputString, joinWords = false)=>{\n const notNullString = inputString || '';\n const trimmedString = notNullString.trim();\n const arrayOfStrings = trimmedString.split(/[\\s-]/);\n const splitStringsArray = [];\n arrayOfStrings.forEach((tempString)=>{\n if (tempString !== '') {\n const splitWords = tempString.split(/(?=[A-Z])/).join(' ');\n splitStringsArray.push(capitalizeFirstLetter(splitWords));\n }\n });\n return joinWords ? splitStringsArray.join('').replace(/\\s/g, '') : splitStringsArray.join(' ');\n};\nconst formatLabels = (slug)=>{\n const words = toWords(slug);\n return isPlural(slug) ? {\n plural: words,\n singular: singular(words)\n } : {\n plural: pluralize__WEBPACK_IMPORTED_MODULE_0__(words),\n singular: words\n };\n};\nconst formatNames = (slug)=>{\n const words = toWords(slug, true);\n return isPlural(slug) ? {\n plural: words,\n singular: singular(words)\n } : {\n plural: pluralize__WEBPACK_IMPORTED_MODULE_0__(words),\n singular: words\n };\n};\n\n\n//# sourceMappingURL=formatLabels.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9mb3JtYXRMYWJlbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrQztBQUNsQyxRQUFRLHFCQUFxQixFQUFFLHNDQUFTO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sZ0JBQWdCLHNDQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sZ0JBQWdCLHNDQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUM4Qzs7QUFFOUMiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC91dGlsaXRpZXMvZm9ybWF0TGFiZWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwbHVyYWxpemUgZnJvbSAncGx1cmFsaXplJztcbmNvbnN0IHsgaXNQbHVyYWwsIHNpbmd1bGFyIH0gPSBwbHVyYWxpemU7XG5jb25zdCBjYXBpdGFsaXplRmlyc3RMZXR0ZXIgPSAoc3RyaW5nKT0+c3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xuY29uc3QgdG9Xb3JkcyA9IChpbnB1dFN0cmluZywgam9pbldvcmRzID0gZmFsc2UpPT57XG4gICAgY29uc3Qgbm90TnVsbFN0cmluZyA9IGlucHV0U3RyaW5nIHx8ICcnO1xuICAgIGNvbnN0IHRyaW1tZWRTdHJpbmcgPSBub3ROdWxsU3RyaW5nLnRyaW0oKTtcbiAgICBjb25zdCBhcnJheU9mU3RyaW5ncyA9IHRyaW1tZWRTdHJpbmcuc3BsaXQoL1tcXHMtXS8pO1xuICAgIGNvbnN0IHNwbGl0U3RyaW5nc0FycmF5ID0gW107XG4gICAgYXJyYXlPZlN0cmluZ3MuZm9yRWFjaCgodGVtcFN0cmluZyk9PntcbiAgICAgICAgaWYgKHRlbXBTdHJpbmcgIT09ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFdvcmRzID0gdGVtcFN0cmluZy5zcGxpdCgvKD89W0EtWl0pLykuam9pbignICcpO1xuICAgICAgICAgICAgc3BsaXRTdHJpbmdzQXJyYXkucHVzaChjYXBpdGFsaXplRmlyc3RMZXR0ZXIoc3BsaXRXb3JkcykpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGpvaW5Xb3JkcyA/IHNwbGl0U3RyaW5nc0FycmF5LmpvaW4oJycpLnJlcGxhY2UoL1xccy9nLCAnJykgOiBzcGxpdFN0cmluZ3NBcnJheS5qb2luKCcgJyk7XG59O1xuY29uc3QgZm9ybWF0TGFiZWxzID0gKHNsdWcpPT57XG4gICAgY29uc3Qgd29yZHMgPSB0b1dvcmRzKHNsdWcpO1xuICAgIHJldHVybiBpc1BsdXJhbChzbHVnKSA/IHtcbiAgICAgICAgcGx1cmFsOiB3b3JkcyxcbiAgICAgICAgc2luZ3VsYXI6IHNpbmd1bGFyKHdvcmRzKVxuICAgIH0gOiB7XG4gICAgICAgIHBsdXJhbDogcGx1cmFsaXplKHdvcmRzKSxcbiAgICAgICAgc2luZ3VsYXI6IHdvcmRzXG4gICAgfTtcbn07XG5jb25zdCBmb3JtYXROYW1lcyA9IChzbHVnKT0+e1xuICAgIGNvbnN0IHdvcmRzID0gdG9Xb3JkcyhzbHVnLCB0cnVlKTtcbiAgICByZXR1cm4gaXNQbHVyYWwoc2x1ZykgPyB7XG4gICAgICAgIHBsdXJhbDogd29yZHMsXG4gICAgICAgIHNpbmd1bGFyOiBzaW5ndWxhcih3b3JkcylcbiAgICB9IDoge1xuICAgICAgICBwbHVyYWw6IHBsdXJhbGl6ZSh3b3JkcyksXG4gICAgICAgIHNpbmd1bGFyOiB3b3Jkc1xuICAgIH07XG59O1xuZXhwb3J0IHsgZm9ybWF0TGFiZWxzLCBmb3JtYXROYW1lcywgdG9Xb3JkcyB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXRMYWJlbHMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/formatLabels.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getBestFitFromSizes.js": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getBestFitFromSizes.js ***! \***************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getBestFitFromSizes: () => (/* binding */ getBestFitFromSizes)\n/* harmony export */ });\n/**\n * Takes image sizes and a target range and returns the url of the image within that range.\n * If no images fit within the range, it selects the next smallest adequate image, the original,\n * or the largest smaller image if no better fit exists.\n *\n * @param sizes The given FileSizes.\n * @param targetSizeMax The ideal image maximum width. Defaults to 180.\n * @param targetSizeMin The ideal image minimum width. Defaults to 40.\n * @param thumbnailURL The thumbnail url set in config. If passed a url, will return early with it.\n * @param url The url of the original file.\n * @param width The width of the original file.\n * @returns A url of the best fit file.\n */ const getBestFitFromSizes = ({ sizes, targetSizeMax = 180, targetSizeMin = 40, thumbnailURL, url, width })=>{\n if (thumbnailURL) {\n return thumbnailURL;\n }\n if (!sizes) {\n return url;\n }\n const bestFit = Object.values(sizes).reduce((closest, current)=>{\n if (!current.width || current.width < targetSizeMin) {\n return closest;\n }\n if (current.width >= targetSizeMin && current.width <= targetSizeMax) {\n return !closest.width || current.width < closest.width || closest.width < targetSizeMin || closest.width > targetSizeMax ? current : closest;\n }\n if (!closest.width || !closest.original && closest.width < targetSizeMin && current.width > closest.width || closest.width > targetSizeMax && current.width < closest.width) {\n return current;\n }\n return closest;\n }, {\n original: true,\n url,\n width\n });\n return bestFit.url || url;\n};\n\n//# sourceMappingURL=getBestFitFromSizes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXRCZXN0Rml0RnJvbVNpemVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXLCtCQUErQiwwRUFBMEU7QUFDcEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXRCZXN0Rml0RnJvbVNpemVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGFrZXMgaW1hZ2Ugc2l6ZXMgYW5kIGEgdGFyZ2V0IHJhbmdlIGFuZCByZXR1cm5zIHRoZSB1cmwgb2YgdGhlIGltYWdlIHdpdGhpbiB0aGF0IHJhbmdlLlxuICogSWYgbm8gaW1hZ2VzIGZpdCB3aXRoaW4gdGhlIHJhbmdlLCBpdCBzZWxlY3RzIHRoZSBuZXh0IHNtYWxsZXN0IGFkZXF1YXRlIGltYWdlLCB0aGUgb3JpZ2luYWwsXG4gKiBvciB0aGUgbGFyZ2VzdCBzbWFsbGVyIGltYWdlIGlmIG5vIGJldHRlciBmaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBzaXplcyBUaGUgZ2l2ZW4gRmlsZVNpemVzLlxuICogQHBhcmFtIHRhcmdldFNpemVNYXggVGhlIGlkZWFsIGltYWdlIG1heGltdW0gd2lkdGguIERlZmF1bHRzIHRvIDE4MC5cbiAqIEBwYXJhbSB0YXJnZXRTaXplTWluIFRoZSBpZGVhbCBpbWFnZSBtaW5pbXVtIHdpZHRoLiBEZWZhdWx0cyB0byA0MC5cbiAqIEBwYXJhbSB0aHVtYm5haWxVUkwgVGhlIHRodW1ibmFpbCB1cmwgc2V0IGluIGNvbmZpZy4gSWYgcGFzc2VkIGEgdXJsLCB3aWxsIHJldHVybiBlYXJseSB3aXRoIGl0LlxuICogQHBhcmFtIHVybCBUaGUgdXJsIG9mIHRoZSBvcmlnaW5hbCBmaWxlLlxuICogQHBhcmFtIHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgb3JpZ2luYWwgZmlsZS5cbiAqIEByZXR1cm5zIEEgdXJsIG9mIHRoZSBiZXN0IGZpdCBmaWxlLlxuICovIGV4cG9ydCBjb25zdCBnZXRCZXN0Rml0RnJvbVNpemVzID0gKHsgc2l6ZXMsIHRhcmdldFNpemVNYXggPSAxODAsIHRhcmdldFNpemVNaW4gPSA0MCwgdGh1bWJuYWlsVVJMLCB1cmwsIHdpZHRoIH0pPT57XG4gICAgaWYgKHRodW1ibmFpbFVSTCkge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlsVVJMO1xuICAgIH1cbiAgICBpZiAoIXNpemVzKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICAgIGNvbnN0IGJlc3RGaXQgPSBPYmplY3QudmFsdWVzKHNpemVzKS5yZWR1Y2UoKGNsb3Nlc3QsIGN1cnJlbnQpPT57XG4gICAgICAgIGlmICghY3VycmVudC53aWR0aCB8fCBjdXJyZW50LndpZHRoIDwgdGFyZ2V0U2l6ZU1pbikge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQud2lkdGggPj0gdGFyZ2V0U2l6ZU1pbiAmJiBjdXJyZW50LndpZHRoIDw9IHRhcmdldFNpemVNYXgpIHtcbiAgICAgICAgICAgIHJldHVybiAhY2xvc2VzdC53aWR0aCB8fCBjdXJyZW50LndpZHRoIDwgY2xvc2VzdC53aWR0aCB8fCBjbG9zZXN0LndpZHRoIDwgdGFyZ2V0U2l6ZU1pbiB8fCBjbG9zZXN0LndpZHRoID4gdGFyZ2V0U2l6ZU1heCA/IGN1cnJlbnQgOiBjbG9zZXN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2xvc2VzdC53aWR0aCB8fCAhY2xvc2VzdC5vcmlnaW5hbCAmJiBjbG9zZXN0LndpZHRoIDwgdGFyZ2V0U2l6ZU1pbiAmJiBjdXJyZW50LndpZHRoID4gY2xvc2VzdC53aWR0aCB8fCBjbG9zZXN0LndpZHRoID4gdGFyZ2V0U2l6ZU1heCAmJiBjdXJyZW50LndpZHRoIDwgY2xvc2VzdC53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG4gICAgfSwge1xuICAgICAgICBvcmlnaW5hbDogdHJ1ZSxcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aFxuICAgIH0pO1xuICAgIHJldHVybiBiZXN0Rml0LnVybCB8fCB1cmw7XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRCZXN0Rml0RnJvbVNpemVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getBestFitFromSizes.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getDataByPath.js": /*!*********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getDataByPath.js ***! \*********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getDataByPath: () => (/* binding */ getDataByPath)\n/* harmony export */ });\n/* harmony import */ var _unflatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unflatten.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.js\");\n\nconst getDataByPath = (fields, path)=>{\n const pathPrefixToRemove = path.substring(0, path.lastIndexOf('.') + 1);\n const name = path.split('.').pop();\n const data = {};\n Object.keys(fields).forEach((key)=>{\n if (!fields[key]?.disableFormData && (key.indexOf(`${path}.`) === 0 || key === path)) {\n data[key.replace(pathPrefixToRemove, '')] = fields[key]?.value;\n if (fields[key]?.rows && fields[key].rows.length === 0) {\n data[key.replace(pathPrefixToRemove, '')] = [];\n }\n }\n });\n const unflattenedData = (0,_unflatten_js__WEBPACK_IMPORTED_MODULE_0__.unflatten)(data);\n return unflattenedData?.[name];\n};\n\n//# sourceMappingURL=getDataByPath.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXREYXRhQnlQYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTJDO0FBQ3BDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsS0FBSztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDRCQUE0Qix3REFBUztBQUNyQztBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2dldERhdGFCeVBhdGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5mbGF0dGVuIH0gZnJvbSAnLi91bmZsYXR0ZW4uanMnO1xuZXhwb3J0IGNvbnN0IGdldERhdGFCeVBhdGggPSAoZmllbGRzLCBwYXRoKT0+e1xuICAgIGNvbnN0IHBhdGhQcmVmaXhUb1JlbW92ZSA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIGNvbnN0IG5hbWUgPSBwYXRoLnNwbGl0KCcuJykucG9wKCk7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGZpZWxkcykuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBpZiAoIWZpZWxkc1trZXldPy5kaXNhYmxlRm9ybURhdGEgJiYgKGtleS5pbmRleE9mKGAke3BhdGh9LmApID09PSAwIHx8IGtleSA9PT0gcGF0aCkpIHtcbiAgICAgICAgICAgIGRhdGFba2V5LnJlcGxhY2UocGF0aFByZWZpeFRvUmVtb3ZlLCAnJyldID0gZmllbGRzW2tleV0/LnZhbHVlO1xuICAgICAgICAgICAgaWYgKGZpZWxkc1trZXldPy5yb3dzICYmIGZpZWxkc1trZXldLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtrZXkucmVwbGFjZShwYXRoUHJlZml4VG9SZW1vdmUsICcnKV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHVuZmxhdHRlbmVkRGF0YSA9IHVuZmxhdHRlbihkYXRhKTtcbiAgICByZXR1cm4gdW5mbGF0dGVuZWREYXRhPy5bbmFtZV07XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXREYXRhQnlQYXRoLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getDataByPath.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getFieldPermissions.js": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getFieldPermissions.js ***! \***************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getFieldPermissions: () => (/* binding */ getFieldPermissions)\n/* harmony export */ });\n/* eslint-disable @typescript-eslint/no-explicit-any */ /**\n * Gets read and operation-level permissions for a given field based on cascading field permissions.\n * @returns An object with the following properties:\n * - `operation`: Whether the user has permission to perform the operation on the field (`create` or `update`).\n * - `permissions`: The field-level permissions.\n * - `read`: Whether the user has permission to read the field.\n */ const getFieldPermissions = ({ collectionPermissions, field, operation, parentName, permissions })=>{\n // First, calculate permissions using the existing logic\n const fieldOperation = permissions === true || permissions?.[operation] === true || permissions?.[parentName] === true || 'name' in field && typeof permissions === 'object' && permissions?.[field.name] && (permissions[field.name] === true || operation in permissions[field.name] && permissions[field.name][operation]);\n const fieldPermissions = permissions === undefined || permissions === null || permissions === true ? true : 'name' in field ? permissions[field.name] : permissions;\n const fieldRead = permissions === true || permissions?.read === true || permissions?.[parentName] === true || 'name' in field && typeof permissions === 'object' && permissions?.[field.name] && (permissions[field.name] === true || 'read' in permissions[field.name] && permissions[field.name].read);\n // Check if field permissions are effectively empty/missing\n const hasFieldPermissions = permissions === true || typeof permissions === 'object' && permissions !== null && Object.keys(permissions).length > 0;\n // If no field permissions are defined, fallback to collection permissions\n if (!hasFieldPermissions && collectionPermissions) {\n const collectionRead = Boolean(collectionPermissions.read);\n let collectionOperation = false;\n // Check operation-specific permission on collection\n if (operation === 'create' && 'create' in collectionPermissions) {\n collectionOperation = Boolean(collectionPermissions.create);\n } else if (operation === 'update') {\n collectionOperation = Boolean(collectionPermissions.update);\n }\n return {\n operation: collectionOperation,\n permissions: {\n read: collectionRead\n },\n read: collectionRead\n };\n }\n // Return the calculated permissions\n return {\n operation: Boolean(fieldOperation),\n permissions: fieldPermissions,\n read: Boolean(fieldRead)\n };\n};\n\n//# sourceMappingURL=getFieldPermissions.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXRGaWVsZFBlcm1pc3Npb25zLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXLCtCQUErQixrRUFBa0U7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2dldEZpZWxkUGVybWlzc2lvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvKipcbiAqIEdldHMgcmVhZCBhbmQgb3BlcmF0aW9uLWxldmVsIHBlcm1pc3Npb25zIGZvciBhIGdpdmVuIGZpZWxkIGJhc2VkIG9uIGNhc2NhZGluZyBmaWVsZCBwZXJtaXNzaW9ucy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIC0gYG9wZXJhdGlvbmA6IFdoZXRoZXIgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uIG9uIHRoZSBmaWVsZCAoYGNyZWF0ZWAgb3IgYHVwZGF0ZWApLlxuICogLSBgcGVybWlzc2lvbnNgOiBUaGUgZmllbGQtbGV2ZWwgcGVybWlzc2lvbnMuXG4gKiAtIGByZWFkYDogV2hldGhlciB0aGUgdXNlciBoYXMgcGVybWlzc2lvbiB0byByZWFkIHRoZSBmaWVsZC5cbiAqLyBleHBvcnQgY29uc3QgZ2V0RmllbGRQZXJtaXNzaW9ucyA9ICh7IGNvbGxlY3Rpb25QZXJtaXNzaW9ucywgZmllbGQsIG9wZXJhdGlvbiwgcGFyZW50TmFtZSwgcGVybWlzc2lvbnMgfSk9PntcbiAgICAvLyBGaXJzdCwgY2FsY3VsYXRlIHBlcm1pc3Npb25zIHVzaW5nIHRoZSBleGlzdGluZyBsb2dpY1xuICAgIGNvbnN0IGZpZWxkT3BlcmF0aW9uID0gcGVybWlzc2lvbnMgPT09IHRydWUgfHwgcGVybWlzc2lvbnM/LltvcGVyYXRpb25dID09PSB0cnVlIHx8IHBlcm1pc3Npb25zPy5bcGFyZW50TmFtZV0gPT09IHRydWUgfHwgJ25hbWUnIGluIGZpZWxkICYmIHR5cGVvZiBwZXJtaXNzaW9ucyA9PT0gJ29iamVjdCcgJiYgcGVybWlzc2lvbnM/LltmaWVsZC5uYW1lXSAmJiAocGVybWlzc2lvbnNbZmllbGQubmFtZV0gPT09IHRydWUgfHwgb3BlcmF0aW9uIGluIHBlcm1pc3Npb25zW2ZpZWxkLm5hbWVdICYmIHBlcm1pc3Npb25zW2ZpZWxkLm5hbWVdW29wZXJhdGlvbl0pO1xuICAgIGNvbnN0IGZpZWxkUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucyA9PT0gdW5kZWZpbmVkIHx8IHBlcm1pc3Npb25zID09PSBudWxsIHx8IHBlcm1pc3Npb25zID09PSB0cnVlID8gdHJ1ZSA6ICduYW1lJyBpbiBmaWVsZCA/IHBlcm1pc3Npb25zW2ZpZWxkLm5hbWVdIDogcGVybWlzc2lvbnM7XG4gICAgY29uc3QgZmllbGRSZWFkID0gcGVybWlzc2lvbnMgPT09IHRydWUgfHwgcGVybWlzc2lvbnM/LnJlYWQgPT09IHRydWUgfHwgcGVybWlzc2lvbnM/LltwYXJlbnROYW1lXSA9PT0gdHJ1ZSB8fCAnbmFtZScgaW4gZmllbGQgJiYgdHlwZW9mIHBlcm1pc3Npb25zID09PSAnb2JqZWN0JyAmJiBwZXJtaXNzaW9ucz8uW2ZpZWxkLm5hbWVdICYmIChwZXJtaXNzaW9uc1tmaWVsZC5uYW1lXSA9PT0gdHJ1ZSB8fCAncmVhZCcgaW4gcGVybWlzc2lvbnNbZmllbGQubmFtZV0gJiYgcGVybWlzc2lvbnNbZmllbGQubmFtZV0ucmVhZCk7XG4gICAgLy8gQ2hlY2sgaWYgZmllbGQgcGVybWlzc2lvbnMgYXJlIGVmZmVjdGl2ZWx5IGVtcHR5L21pc3NpbmdcbiAgICBjb25zdCBoYXNGaWVsZFBlcm1pc3Npb25zID0gcGVybWlzc2lvbnMgPT09IHRydWUgfHwgdHlwZW9mIHBlcm1pc3Npb25zID09PSAnb2JqZWN0JyAmJiBwZXJtaXNzaW9ucyAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyhwZXJtaXNzaW9ucykubGVuZ3RoID4gMDtcbiAgICAvLyBJZiBubyBmaWVsZCBwZXJtaXNzaW9ucyBhcmUgZGVmaW5lZCwgZmFsbGJhY2sgdG8gY29sbGVjdGlvbiBwZXJtaXNzaW9uc1xuICAgIGlmICghaGFzRmllbGRQZXJtaXNzaW9ucyAmJiBjb2xsZWN0aW9uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblJlYWQgPSBCb29sZWFuKGNvbGxlY3Rpb25QZXJtaXNzaW9ucy5yZWFkKTtcbiAgICAgICAgbGV0IGNvbGxlY3Rpb25PcGVyYXRpb24gPSBmYWxzZTtcbiAgICAgICAgLy8gQ2hlY2sgb3BlcmF0aW9uLXNwZWNpZmljIHBlcm1pc3Npb24gb24gY29sbGVjdGlvblxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnY3JlYXRlJyAmJiAnY3JlYXRlJyBpbiBjb2xsZWN0aW9uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25PcGVyYXRpb24gPSBCb29sZWFuKGNvbGxlY3Rpb25QZXJtaXNzaW9ucy5jcmVhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25PcGVyYXRpb24gPSBCb29sZWFuKGNvbGxlY3Rpb25QZXJtaXNzaW9ucy51cGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcGVyYXRpb246IGNvbGxlY3Rpb25PcGVyYXRpb24sXG4gICAgICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICAgIHJlYWQ6IGNvbGxlY3Rpb25SZWFkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDogY29sbGVjdGlvblJlYWRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBjYWxjdWxhdGVkIHBlcm1pc3Npb25zXG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3BlcmF0aW9uOiBCb29sZWFuKGZpZWxkT3BlcmF0aW9uKSxcbiAgICAgICAgcGVybWlzc2lvbnM6IGZpZWxkUGVybWlzc2lvbnMsXG4gICAgICAgIHJlYWQ6IEJvb2xlYW4oZmllbGRSZWFkKVxuICAgIH07XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRGaWVsZFBlcm1pc3Npb25zLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getFieldPermissions.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getObjectDotNotation.js": /*!****************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getObjectDotNotation.js ***! \****************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getObjectDotNotation: () => (/* binding */ getObjectDotNotation)\n/* harmony export */ });\n/**\n *\n * @deprecated use getObjectDotNotation from `'payload/shared'` instead of `'payload'`\n *\n * @example\n *\n * ```ts\n * import { getObjectDotNotation } from 'payload/shared'\n *\n * const obj = { a: { b: { c: 42 } } }\n * const value = getObjectDotNotation(obj, 'a.b.c', 0) // value is 42\n * const defaultValue = getObjectDotNotation(obj, 'a.b.x', 0) // defaultValue is 0\n * ```\n */ const getObjectDotNotation = (obj, path, defaultValue)=>{\n if (!path || !obj) {\n return defaultValue;\n }\n const result = path.split('.').reduce((o, i)=>o?.[i], obj);\n return result === undefined ? defaultValue : result;\n};\n\n//# sourceMappingURL=getObjectDotNotation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXRPYmplY3REb3ROb3RhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBLGlCQUFpQixLQUFLLEtBQUs7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsSUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXRPYmplY3REb3ROb3RhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgZ2V0T2JqZWN0RG90Tm90YXRpb24gZnJvbSBgJ3BheWxvYWQvc2hhcmVkJ2AgaW5zdGVhZCBvZiBgJ3BheWxvYWQnYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGdldE9iamVjdERvdE5vdGF0aW9uIH0gZnJvbSAncGF5bG9hZC9zaGFyZWQnXG4gKlxuICogY29uc3Qgb2JqID0geyBhOiB7IGI6IHsgYzogNDIgfSB9IH1cbiAqIGNvbnN0IHZhbHVlID0gZ2V0T2JqZWN0RG90Tm90YXRpb248bnVtYmVyPihvYmosICdhLmIuYycsIDApIC8vIHZhbHVlIGlzIDQyXG4gKiBjb25zdCBkZWZhdWx0VmFsdWUgPSBnZXRPYmplY3REb3ROb3RhdGlvbjxudW1iZXI+KG9iaiwgJ2EuYi54JywgMCkgLy8gZGVmYXVsdFZhbHVlIGlzIDBcbiAqIGBgYFxuICovIGV4cG9ydCBjb25zdCBnZXRPYmplY3REb3ROb3RhdGlvbiA9IChvYmosIHBhdGgsIGRlZmF1bHRWYWx1ZSk9PntcbiAgICBpZiAoIXBhdGggfHwgIW9iaikge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChvLCBpKT0+bz8uW2ldLCBvYmopO1xuICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE9iamVjdERvdE5vdGF0aW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getObjectDotNotation.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getSiblingData.js": /*!**********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getSiblingData.js ***! \**********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getSiblingData: () => (/* binding */ getSiblingData)\n/* harmony export */ });\n/* harmony import */ var _reduceFieldsToValues_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reduceFieldsToValues.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/reduceFieldsToValues.js\");\n/* harmony import */ var _unflatten_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./unflatten.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.js\");\n\n\nconst getSiblingData = (fields, path)=>{\n if (!fields) {\n return null;\n }\n if (path.indexOf('.') === -1) {\n return (0,_reduceFieldsToValues_js__WEBPACK_IMPORTED_MODULE_0__.reduceFieldsToValues)(fields, true);\n }\n const siblingFields = {};\n // Determine if the last segment of the path is an array-based row\n const pathSegments = path.split('.');\n const lastSegment = pathSegments[pathSegments.length - 1];\n const lastSegmentIsRowIndex = !Number.isNaN(Number(lastSegment));\n let parentFieldPath;\n if (lastSegmentIsRowIndex) {\n // If the last segment is a row index,\n // the sibling data is that row's contents\n // so create a parent field path that will\n // retrieve all contents of that row index only\n parentFieldPath = `${path}.`;\n } else {\n // Otherwise, the last path segment is a field name\n // and it should be removed\n parentFieldPath = path.substring(0, path.lastIndexOf('.') + 1);\n }\n Object.keys(fields).forEach((fieldKey)=>{\n if (!fields[fieldKey]?.disableFormData && fieldKey.indexOf(parentFieldPath) === 0) {\n siblingFields[fieldKey.replace(parentFieldPath, '')] = fields[fieldKey]?.value;\n }\n });\n return (0,_unflatten_js__WEBPACK_IMPORTED_MODULE_1__.unflatten)(siblingFields);\n};\n\n//# sourceMappingURL=getSiblingData.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXRTaWJsaW5nRGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBaUU7QUFDdEI7QUFDcEM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsOEVBQW9CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixLQUFLO0FBQ2xDLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLFdBQVcsd0RBQVM7QUFDcEI7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC91dGlsaXRpZXMvZ2V0U2libGluZ0RhdGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVkdWNlRmllbGRzVG9WYWx1ZXMgfSBmcm9tICcuL3JlZHVjZUZpZWxkc1RvVmFsdWVzLmpzJztcbmltcG9ydCB7IHVuZmxhdHRlbiB9IGZyb20gJy4vdW5mbGF0dGVuLmpzJztcbmV4cG9ydCBjb25zdCBnZXRTaWJsaW5nRGF0YSA9IChmaWVsZHMsIHBhdGgpPT57XG4gICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHJlZHVjZUZpZWxkc1RvVmFsdWVzKGZpZWxkcywgdHJ1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmdGaWVsZHMgPSB7fTtcbiAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgcGF0aCBpcyBhbiBhcnJheS1iYXNlZCByb3dcbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgbGFzdFNlZ21lbnQgPSBwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGxhc3RTZWdtZW50SXNSb3dJbmRleCA9ICFOdW1iZXIuaXNOYU4oTnVtYmVyKGxhc3RTZWdtZW50KSk7XG4gICAgbGV0IHBhcmVudEZpZWxkUGF0aDtcbiAgICBpZiAobGFzdFNlZ21lbnRJc1Jvd0luZGV4KSB7XG4gICAgICAgIC8vIElmIHRoZSBsYXN0IHNlZ21lbnQgaXMgYSByb3cgaW5kZXgsXG4gICAgICAgIC8vIHRoZSBzaWJsaW5nIGRhdGEgaXMgdGhhdCByb3cncyBjb250ZW50c1xuICAgICAgICAvLyBzbyBjcmVhdGUgYSBwYXJlbnQgZmllbGQgcGF0aCB0aGF0IHdpbGxcbiAgICAgICAgLy8gcmV0cmlldmUgYWxsIGNvbnRlbnRzIG9mIHRoYXQgcm93IGluZGV4IG9ubHlcbiAgICAgICAgcGFyZW50RmllbGRQYXRoID0gYCR7cGF0aH0uYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UsIHRoZSBsYXN0IHBhdGggc2VnbWVudCBpcyBhIGZpZWxkIG5hbWVcbiAgICAgICAgLy8gYW5kIGl0IHNob3VsZCBiZSByZW1vdmVkXG4gICAgICAgIHBhcmVudEZpZWxkUGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhmaWVsZHMpLmZvckVhY2goKGZpZWxkS2V5KT0+e1xuICAgICAgICBpZiAoIWZpZWxkc1tmaWVsZEtleV0/LmRpc2FibGVGb3JtRGF0YSAmJiBmaWVsZEtleS5pbmRleE9mKHBhcmVudEZpZWxkUGF0aCkgPT09IDApIHtcbiAgICAgICAgICAgIHNpYmxpbmdGaWVsZHNbZmllbGRLZXkucmVwbGFjZShwYXJlbnRGaWVsZFBhdGgsICcnKV0gPSBmaWVsZHNbZmllbGRLZXldPy52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1bmZsYXR0ZW4oc2libGluZ0ZpZWxkcyk7XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRTaWJsaW5nRGF0YS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getSiblingData.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getVersionsConfig.js": /*!*************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getVersionsConfig.js ***! \*************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getAutosaveInterval: () => (/* binding */ getAutosaveInterval),\n/* harmony export */ getVersionsMax: () => (/* binding */ getVersionsMax),\n/* harmony export */ hasAutosaveEnabled: () => (/* binding */ hasAutosaveEnabled),\n/* harmony export */ hasDraftValidationEnabled: () => (/* binding */ hasDraftValidationEnabled),\n/* harmony export */ hasDraftsEnabled: () => (/* binding */ hasDraftsEnabled),\n/* harmony export */ hasLocalizeStatusEnabled: () => (/* binding */ hasLocalizeStatusEnabled),\n/* harmony export */ hasScheduledPublishEnabled: () => (/* binding */ hasScheduledPublishEnabled)\n/* harmony export */ });\n/* harmony import */ var _versions_defaults_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../versions/defaults.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/defaults.js\");\n\n/**\n * Check if an entity has drafts enabled\n */ const hasDraftsEnabled = (config)=>{\n return Boolean(config?.versions && typeof config.versions === 'object' && config.versions.drafts);\n};\n/**\n * Check if an entity has localized status enabled\n */ const hasLocalizeStatusEnabled = (config)=>{\n return Boolean(config?.versions && typeof config.versions === 'object' && config.versions.drafts && typeof config.versions.drafts === 'object' && config.versions.drafts.localizeStatus);\n};\n/**\n * Check if an entity has autosave enabled\n */ const hasAutosaveEnabled = (config)=>{\n return Boolean(config?.versions && typeof config.versions === 'object' && config.versions.drafts && typeof config.versions.drafts === 'object' && config.versions.drafts.autosave);\n};\n/**\n * Check if an entity has validate drafts enabled\n */ const hasDraftValidationEnabled = (config)=>{\n return Boolean(config?.versions && typeof config.versions === 'object' && config.versions.drafts && typeof config.versions.drafts === 'object' && config.versions.drafts.validate);\n};\nconst hasScheduledPublishEnabled = (config)=>{\n return Boolean(config?.versions && typeof config.versions === 'object' && config.versions.drafts && typeof config.versions.drafts === 'object' && config.versions.drafts.schedulePublish);\n};\n/**\n * Get the maximum number of versions to keep for an entity\n * Returns maxPerDoc for collections or max for globals\n */ const getVersionsMax = (config)=>{\n if (!config?.versions || typeof config.versions !== 'object') {\n return 0;\n }\n // Collections have maxPerDoc, globals have max\n if ('maxPerDoc' in config.versions) {\n return config.versions.maxPerDoc ?? 100;\n }\n if ('max' in config.versions) {\n return config.versions.max ?? 100;\n }\n return 0;\n};\nconst getAutosaveInterval = (config)=>{\n let interval = _versions_defaults_js__WEBPACK_IMPORTED_MODULE_0__.versionDefaults.autosaveInterval;\n if (config?.versions && typeof config.versions === 'object' && config.versions.drafts && typeof config.versions.drafts === 'object' && config.versions.drafts.autosave && typeof config.versions.drafts.autosave === 'object') {\n interval = config.versions.drafts.autosave.interval ?? _versions_defaults_js__WEBPACK_IMPORTED_MODULE_0__.versionDefaults.autosaveInterval;\n }\n return interval;\n};\n\n//# sourceMappingURL=getVersionsConfig.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9nZXRWZXJzaW9uc0NvbmZpZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUEwRDtBQUMxRDtBQUNBO0FBQ0EsSUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVztBQUNYO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxtQkFBbUIsa0VBQWU7QUFDbEM7QUFDQSwrREFBK0Qsa0VBQWU7QUFDOUU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2dldFZlcnNpb25zQ29uZmlnLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZlcnNpb25EZWZhdWx0cyB9IGZyb20gJy4uL3ZlcnNpb25zL2RlZmF1bHRzLmpzJztcbi8qKlxuICogQ2hlY2sgaWYgYW4gZW50aXR5IGhhcyBkcmFmdHMgZW5hYmxlZFxuICovIGV4cG9ydCBjb25zdCBoYXNEcmFmdHNFbmFibGVkID0gKGNvbmZpZyk9PntcbiAgICByZXR1cm4gQm9vbGVhbihjb25maWc/LnZlcnNpb25zICYmIHR5cGVvZiBjb25maWcudmVyc2lvbnMgPT09ICdvYmplY3QnICYmIGNvbmZpZy52ZXJzaW9ucy5kcmFmdHMpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgYW4gZW50aXR5IGhhcyBsb2NhbGl6ZWQgc3RhdHVzIGVuYWJsZWRcbiAqLyBleHBvcnQgY29uc3QgaGFzTG9jYWxpemVTdGF0dXNFbmFibGVkID0gKGNvbmZpZyk9PntcbiAgICByZXR1cm4gQm9vbGVhbihjb25maWc/LnZlcnNpb25zICYmIHR5cGVvZiBjb25maWcudmVyc2lvbnMgPT09ICdvYmplY3QnICYmIGNvbmZpZy52ZXJzaW9ucy5kcmFmdHMgJiYgdHlwZW9mIGNvbmZpZy52ZXJzaW9ucy5kcmFmdHMgPT09ICdvYmplY3QnICYmIGNvbmZpZy52ZXJzaW9ucy5kcmFmdHMubG9jYWxpemVTdGF0dXMpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgYW4gZW50aXR5IGhhcyBhdXRvc2F2ZSBlbmFibGVkXG4gKi8gZXhwb3J0IGNvbnN0IGhhc0F1dG9zYXZlRW5hYmxlZCA9IChjb25maWcpPT57XG4gICAgcmV0dXJuIEJvb2xlYW4oY29uZmlnPy52ZXJzaW9ucyAmJiB0eXBlb2YgY29uZmlnLnZlcnNpb25zID09PSAnb2JqZWN0JyAmJiBjb25maWcudmVyc2lvbnMuZHJhZnRzICYmIHR5cGVvZiBjb25maWcudmVyc2lvbnMuZHJhZnRzID09PSAnb2JqZWN0JyAmJiBjb25maWcudmVyc2lvbnMuZHJhZnRzLmF1dG9zYXZlKTtcbn07XG4vKipcbiAqIENoZWNrIGlmIGFuIGVudGl0eSBoYXMgdmFsaWRhdGUgZHJhZnRzIGVuYWJsZWRcbiAqLyBleHBvcnQgY29uc3QgaGFzRHJhZnRWYWxpZGF0aW9uRW5hYmxlZCA9IChjb25maWcpPT57XG4gICAgcmV0dXJuIEJvb2xlYW4oY29uZmlnPy52ZXJzaW9ucyAmJiB0eXBlb2YgY29uZmlnLnZlcnNpb25zID09PSAnb2JqZWN0JyAmJiBjb25maWcudmVyc2lvbnMuZHJhZnRzICYmIHR5cGVvZiBjb25maWcudmVyc2lvbnMuZHJhZnRzID09PSAnb2JqZWN0JyAmJiBjb25maWcudmVyc2lvbnMuZHJhZnRzLnZhbGlkYXRlKTtcbn07XG5leHBvcnQgY29uc3QgaGFzU2NoZWR1bGVkUHVibGlzaEVuYWJsZWQgPSAoY29uZmlnKT0+e1xuICAgIHJldHVybiBCb29sZWFuKGNvbmZpZz8udmVyc2lvbnMgJiYgdHlwZW9mIGNvbmZpZy52ZXJzaW9ucyA9PT0gJ29iamVjdCcgJiYgY29uZmlnLnZlcnNpb25zLmRyYWZ0cyAmJiB0eXBlb2YgY29uZmlnLnZlcnNpb25zLmRyYWZ0cyA9PT0gJ29iamVjdCcgJiYgY29uZmlnLnZlcnNpb25zLmRyYWZ0cy5zY2hlZHVsZVB1Ymxpc2gpO1xufTtcbi8qKlxuICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZXJzaW9ucyB0byBrZWVwIGZvciBhbiBlbnRpdHlcbiAqIFJldHVybnMgbWF4UGVyRG9jIGZvciBjb2xsZWN0aW9ucyBvciBtYXggZm9yIGdsb2JhbHNcbiAqLyBleHBvcnQgY29uc3QgZ2V0VmVyc2lvbnNNYXggPSAoY29uZmlnKT0+e1xuICAgIGlmICghY29uZmlnPy52ZXJzaW9ucyB8fCB0eXBlb2YgY29uZmlnLnZlcnNpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgLy8gQ29sbGVjdGlvbnMgaGF2ZSBtYXhQZXJEb2MsIGdsb2JhbHMgaGF2ZSBtYXhcbiAgICBpZiAoJ21heFBlckRvYycgaW4gY29uZmlnLnZlcnNpb25zKSB7XG4gICAgICAgIHJldHVybiBjb25maWcudmVyc2lvbnMubWF4UGVyRG9jID8/IDEwMDtcbiAgICB9XG4gICAgaWYgKCdtYXgnIGluIGNvbmZpZy52ZXJzaW9ucykge1xuICAgICAgICByZXR1cm4gY29uZmlnLnZlcnNpb25zLm1heCA/PyAxMDA7XG4gICAgfVxuICAgIHJldHVybiAwO1xufTtcbmV4cG9ydCBjb25zdCBnZXRBdXRvc2F2ZUludGVydmFsID0gKGNvbmZpZyk9PntcbiAgICBsZXQgaW50ZXJ2YWwgPSB2ZXJzaW9uRGVmYXVsdHMuYXV0b3NhdmVJbnRlcnZhbDtcbiAgICBpZiAoY29uZmlnPy52ZXJzaW9ucyAmJiB0eXBlb2YgY29uZmlnLnZlcnNpb25zID09PSAnb2JqZWN0JyAmJiBjb25maWcudmVyc2lvbnMuZHJhZnRzICYmIHR5cGVvZiBjb25maWcudmVyc2lvbnMuZHJhZnRzID09PSAnb2JqZWN0JyAmJiBjb25maWcudmVyc2lvbnMuZHJhZnRzLmF1dG9zYXZlICYmIHR5cGVvZiBjb25maWcudmVyc2lvbnMuZHJhZnRzLmF1dG9zYXZlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpbnRlcnZhbCA9IGNvbmZpZy52ZXJzaW9ucy5kcmFmdHMuYXV0b3NhdmUuaW50ZXJ2YWwgPz8gdmVyc2lvbkRlZmF1bHRzLmF1dG9zYXZlSW50ZXJ2YWw7XG4gICAgfVxuICAgIHJldHVybiBpbnRlcnZhbDtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldFZlcnNpb25zQ29uZmlnLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/getVersionsConfig.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isNumber.js": /*!****************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isNumber.js ***! \****************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isNumber: () => (/* binding */ isNumber)\n/* harmony export */ });\nfunction isNumber(value) {\n if (value === null || value === undefined || typeof value === 'string' && value.trim() === '') {\n return false;\n }\n return !Number.isNaN(Number(value));\n}\n\n//# sourceMappingURL=isNumber.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9pc051bWJlci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2lzTnVtYmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc051bWJlci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isNumber.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isValidID.js": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isValidID.js ***! \*****************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isValidID: () => (/* binding */ isValidID)\n/* harmony export */ });\n/* harmony import */ var bson_objectid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bson-objectid */ \"(app-pages-browser)/./node_modules/.pnpm/bson-objectid@2.0.4/node_modules/bson-objectid/objectid.js\");\n\nconst ObjectId = \"default\" in bson_objectid__WEBPACK_IMPORTED_MODULE_0__ ? bson_objectid__WEBPACK_IMPORTED_MODULE_0__[\"default\"] : bson_objectid__WEBPACK_IMPORTED_MODULE_0__;\nconst isValidID = (value, type)=>{\n if (type === 'text' && value) {\n if ([\n 'object',\n 'string'\n ].includes(typeof value)) {\n const isObjectID = ObjectId.isValid(value);\n return typeof value === 'string' || isObjectID;\n }\n return false;\n }\n if (type === 'number' && typeof value === 'number' && !Number.isNaN(value)) {\n return true;\n }\n if (type === 'ObjectID') {\n return ObjectId.isValid(String(value));\n }\n return false;\n};\n\n//# sourceMappingURL=isValidID.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9pc1ZhbGlkSUQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMkM7QUFDM0MsaUJBQWlCLHVEQUEyQixHQUFHLHFEQUFzQixHQUFHLDBDQUFjO0FBQy9FO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL2lzVmFsaWRJRC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2JqZWN0SWRJbXBvcnQgZnJvbSAnYnNvbi1vYmplY3RpZCc7XG5jb25zdCBPYmplY3RJZCA9ICdkZWZhdWx0JyBpbiBPYmplY3RJZEltcG9ydCA/IE9iamVjdElkSW1wb3J0LmRlZmF1bHQgOiBPYmplY3RJZEltcG9ydDtcbmV4cG9ydCBjb25zdCBpc1ZhbGlkSUQgPSAodmFsdWUsIHR5cGUpPT57XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0JyAmJiB2YWx1ZSkge1xuICAgICAgICBpZiAoW1xuICAgICAgICAgICAgJ29iamVjdCcsXG4gICAgICAgICAgICAnc3RyaW5nJ1xuICAgICAgICBdLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzT2JqZWN0SUQgPSBPYmplY3RJZC5pc1ZhbGlkKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IGlzT2JqZWN0SUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdPYmplY3RJRCcpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdElkLmlzVmFsaWQoU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzVmFsaWRJRC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/isValidID.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mergeListSearchAndWhere.js": /*!*******************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mergeListSearchAndWhere.js ***! \*******************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ hoistQueryParamsToAnd: () => (/* binding */ hoistQueryParamsToAnd),\n/* harmony export */ mergeListSearchAndWhere: () => (/* binding */ mergeListSearchAndWhere)\n/* harmony export */ });\nconst isEmptyObject = (obj)=>Object.keys(obj).length === 0;\nconst hoistQueryParamsToAnd = (currentWhere, incomingWhere)=>{\n if (isEmptyObject(incomingWhere)) {\n return currentWhere;\n }\n if (isEmptyObject(currentWhere)) {\n return incomingWhere;\n }\n if ('and' in currentWhere && currentWhere.and) {\n currentWhere.and.push(incomingWhere);\n } else if ('or' in currentWhere) {\n currentWhere = {\n and: [\n currentWhere,\n incomingWhere\n ]\n };\n } else {\n currentWhere = {\n and: [\n currentWhere,\n incomingWhere\n ]\n };\n }\n return currentWhere;\n};\nconst mergeListSearchAndWhere = ({ collectionConfig, search, where = {} })=>{\n if (search) {\n let copyOfWhere = {\n ...where || {}\n };\n const searchAsConditions = (collectionConfig.admin.listSearchableFields || [\n collectionConfig.admin?.useAsTitle || 'id'\n ]).map((fieldName)=>({\n [fieldName]: {\n like: search\n }\n }));\n if (searchAsConditions.length > 0) {\n copyOfWhere = hoistQueryParamsToAnd(copyOfWhere, {\n or: searchAsConditions\n });\n }\n if (!isEmptyObject(copyOfWhere)) {\n where = copyOfWhere;\n }\n }\n return where;\n};\n\n//# sourceMappingURL=mergeListSearchAndWhere.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9tZXJnZUxpc3RTZWFyY2hBbmRXaGVyZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxtQ0FBbUMsc0NBQXNDO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9tZXJnZUxpc3RTZWFyY2hBbmRXaGVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc0VtcHR5T2JqZWN0ID0gKG9iaik9Pk9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuZXhwb3J0IGNvbnN0IGhvaXN0UXVlcnlQYXJhbXNUb0FuZCA9IChjdXJyZW50V2hlcmUsIGluY29taW5nV2hlcmUpPT57XG4gICAgaWYgKGlzRW1wdHlPYmplY3QoaW5jb21pbmdXaGVyZSkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRXaGVyZTtcbiAgICB9XG4gICAgaWYgKGlzRW1wdHlPYmplY3QoY3VycmVudFdoZXJlKSkge1xuICAgICAgICByZXR1cm4gaW5jb21pbmdXaGVyZTtcbiAgICB9XG4gICAgaWYgKCdhbmQnIGluIGN1cnJlbnRXaGVyZSAmJiBjdXJyZW50V2hlcmUuYW5kKSB7XG4gICAgICAgIGN1cnJlbnRXaGVyZS5hbmQucHVzaChpbmNvbWluZ1doZXJlKTtcbiAgICB9IGVsc2UgaWYgKCdvcicgaW4gY3VycmVudFdoZXJlKSB7XG4gICAgICAgIGN1cnJlbnRXaGVyZSA9IHtcbiAgICAgICAgICAgIGFuZDogW1xuICAgICAgICAgICAgICAgIGN1cnJlbnRXaGVyZSxcbiAgICAgICAgICAgICAgICBpbmNvbWluZ1doZXJlXG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFdoZXJlID0ge1xuICAgICAgICAgICAgYW5kOiBbXG4gICAgICAgICAgICAgICAgY3VycmVudFdoZXJlLFxuICAgICAgICAgICAgICAgIGluY29taW5nV2hlcmVcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRXaGVyZTtcbn07XG5leHBvcnQgY29uc3QgbWVyZ2VMaXN0U2VhcmNoQW5kV2hlcmUgPSAoeyBjb2xsZWN0aW9uQ29uZmlnLCBzZWFyY2gsIHdoZXJlID0ge30gfSk9PntcbiAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgIGxldCBjb3B5T2ZXaGVyZSA9IHtcbiAgICAgICAgICAgIC4uLndoZXJlIHx8IHt9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlYXJjaEFzQ29uZGl0aW9ucyA9IChjb2xsZWN0aW9uQ29uZmlnLmFkbWluLmxpc3RTZWFyY2hhYmxlRmllbGRzIHx8IFtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25Db25maWcuYWRtaW4/LnVzZUFzVGl0bGUgfHwgJ2lkJ1xuICAgICAgICBdKS5tYXAoKGZpZWxkTmFtZSk9Pih7XG4gICAgICAgICAgICAgICAgW2ZpZWxkTmFtZV06IHtcbiAgICAgICAgICAgICAgICAgICAgbGlrZTogc2VhcmNoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICBpZiAoc2VhcmNoQXNDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvcHlPZldoZXJlID0gaG9pc3RRdWVyeVBhcmFtc1RvQW5kKGNvcHlPZldoZXJlLCB7XG4gICAgICAgICAgICAgICAgb3I6IHNlYXJjaEFzQ29uZGl0aW9uc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KGNvcHlPZldoZXJlKSkge1xuICAgICAgICAgICAgd2hlcmUgPSBjb3B5T2ZXaGVyZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2hlcmU7XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZUxpc3RTZWFyY2hBbmRXaGVyZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/mergeListSearchAndWhere.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/reduceFieldsToValues.js": /*!****************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/reduceFieldsToValues.js ***! \****************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ reduceFieldsToValues: () => (/* binding */ reduceFieldsToValues)\n/* harmony export */ });\n/* harmony import */ var _unflatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unflatten.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.js\");\n\n/**\n * Reduce flattened form fields (Fields) to just map to the respective values instead of the full FormField object\n *\n * @param unflatten This also unflattens the data if `unflatten` is true. The unflattened data should match the original data structure\n * @param ignoreDisableFormData - if true, will include fields that have `disableFormData` set to true, for example, blocks or arrays fields.\n *\n */ const reduceFieldsToValues = (fields, unflatten, ignoreDisableFormData)=>{\n let data = {};\n if (!fields) {\n return data;\n }\n Object.keys(fields).forEach((key)=>{\n if (ignoreDisableFormData === true || !fields[key]?.disableFormData) {\n data[key] = fields[key]?.value;\n }\n });\n if (unflatten) {\n data = (0,_unflatten_js__WEBPACK_IMPORTED_MODULE_0__.unflatten)(data);\n }\n return data;\n};\n\n//# sourceMappingURL=reduceFieldsToValues.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9yZWR1Y2VGaWVsZHNUb1ZhbHVlcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGVBQWUsd0RBQWdCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9yZWR1Y2VGaWVsZHNUb1ZhbHVlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bmZsYXR0ZW4gYXMgZmxhdGxleVVuZmxhdHRlbiB9IGZyb20gJy4vdW5mbGF0dGVuLmpzJztcbi8qKlxuICogUmVkdWNlIGZsYXR0ZW5lZCBmb3JtIGZpZWxkcyAoRmllbGRzKSB0byBqdXN0IG1hcCB0byB0aGUgcmVzcGVjdGl2ZSB2YWx1ZXMgaW5zdGVhZCBvZiB0aGUgZnVsbCBGb3JtRmllbGQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHVuZmxhdHRlbiBUaGlzIGFsc28gdW5mbGF0dGVucyB0aGUgZGF0YSBpZiBgdW5mbGF0dGVuYCBpcyB0cnVlLiBUaGUgdW5mbGF0dGVuZWQgZGF0YSBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsIGRhdGEgc3RydWN0dXJlXG4gKiBAcGFyYW0gaWdub3JlRGlzYWJsZUZvcm1EYXRhIC0gaWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIGZpZWxkcyB0aGF0IGhhdmUgYGRpc2FibGVGb3JtRGF0YWAgc2V0IHRvIHRydWUsIGZvciBleGFtcGxlLCBibG9ja3Mgb3IgYXJyYXlzIGZpZWxkcy5cbiAqXG4gKi8gZXhwb3J0IGNvbnN0IHJlZHVjZUZpZWxkc1RvVmFsdWVzID0gKGZpZWxkcywgdW5mbGF0dGVuLCBpZ25vcmVEaXNhYmxlRm9ybURhdGEpPT57XG4gICAgbGV0IGRhdGEgPSB7fTtcbiAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoZmllbGRzKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGlmIChpZ25vcmVEaXNhYmxlRm9ybURhdGEgPT09IHRydWUgfHwgIWZpZWxkc1trZXldPy5kaXNhYmxlRm9ybURhdGEpIHtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IGZpZWxkc1trZXldPy52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh1bmZsYXR0ZW4pIHtcbiAgICAgICAgZGF0YSA9IGZsYXRsZXlVbmZsYXR0ZW4oZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdWNlRmllbGRzVG9WYWx1ZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/reduceFieldsToValues.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/setsAreEqual.js": /*!********************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/setsAreEqual.js ***! \********************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setsAreEqual: () => (/* binding */ setsAreEqual)\n/* harmony export */ });\nconst setsAreEqual = (xs, ys)=>xs.size === ys.size && [\n ...xs\n ].every((x)=>ys.has(x));\n\n//# sourceMappingURL=setsAreEqual.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9zZXRzQXJlRXF1YWwuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy9zZXRzQXJlRXF1YWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHNldHNBcmVFcXVhbCA9ICh4cywgeXMpPT54cy5zaXplID09PSB5cy5zaXplICYmIFtcbiAgICAgICAgLi4ueHNcbiAgICBdLmV2ZXJ5KCh4KT0+eXMuaGFzKHgpKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2V0c0FyZUVxdWFsLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/setsAreEqual.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/toKebabCase.js": /*!*******************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/toKebabCase.js ***! \*******************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ toKebabCase: () => (/* binding */ toKebabCase)\n/* harmony export */ });\nconst toKebabCase = (string)=>string?.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/\\s+/g, '-').toLowerCase();\n\n//# sourceMappingURL=toKebabCase.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy90b0tlYmFiQ2FzZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87O0FBRVAiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC91dGlsaXRpZXMvdG9LZWJhYkNhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRvS2ViYWJDYXNlID0gKHN0cmluZyk9PnN0cmluZz8ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykucmVwbGFjZSgvXFxzKy9nLCAnLScpLnRvTG93ZXJDYXNlKCk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvS2ViYWJDYXNlLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/toKebabCase.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformColumnPreferences.js": /*!**********************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformColumnPreferences.js ***! \**********************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ transformColumnsToPreferences: () => (/* binding */ transformColumnsToPreferences),\n/* harmony export */ transformColumnsToSearchParams: () => (/* binding */ transformColumnsToSearchParams)\n/* harmony export */ });\n/**\n * Transforms various forms of columns into `ColumnPreference[]` which is what is stored in the user's preferences table\n * In React state, for example, columns are stored in in their entirety, including React components: `[{ accessor: 'title', active: true, Label: React.ReactNode, ... }]`\n * In the URL, they are stored as an array of strings: `['title', '-slug']`, where the `-` prefix is used to indicate that the column is inactive\n * However in the database, columns must be in this exact shape: `[{ accessor: 'title', active: true }, { accessor: 'slug', active: false }]`\n * This means that when handling columns, they need to be consistently transformed back and forth\n */ const transformColumnsToPreferences = (columns)=>{\n if (!columns) {\n return undefined;\n }\n let columnsToTransform = columns;\n // Columns that originate from the URL are a stringified JSON array and need to be parsed first\n if (typeof columns === 'string') {\n try {\n columnsToTransform = JSON.parse(columns);\n } catch (e) {\n console.error('Error parsing columns', columns, e); // eslint-disable-line no-console\n }\n }\n if (columnsToTransform && Array.isArray(columnsToTransform)) {\n return columnsToTransform.map((col)=>{\n if (typeof col === 'string') {\n const active = col[0] !== '-';\n return {\n accessor: active ? col : col.slice(1),\n active\n };\n }\n return {\n accessor: col.accessor,\n active: col.active\n };\n });\n }\n};\n/**\n * Does the opposite of `transformColumnsToPreferences`, where `ColumnPreference[]` and `Column[]` are transformed into `ColumnsFromURL`\n * This is useful for storing the columns in the URL, where it appears as a simple comma delimited array of strings\n * The `-` prefix is used to indicate that the column is inactive\n */ const transformColumnsToSearchParams = (columns)=>{\n return columns?.map((col)=>col.active ? col.accessor : `-${col.accessor}`);\n};\n\n//# sourceMappingURL=transformColumnPreferences.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy90cmFuc2Zvcm1Db2x1bW5QcmVmZXJlbmNlcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQSx5R0FBeUcsOERBQThEO0FBQ3ZLO0FBQ0EscUVBQXFFLGlDQUFpQyxJQUFJLGlDQUFpQztBQUMzSTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVztBQUNYLCtEQUErRCxhQUFhO0FBQzVFOztBQUVBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BheWxvYWRAMy44MS4wX2dyYXBocWxAMTYuMTMuMl90eXBlc2NyaXB0QDUuOS4zL25vZGVfbW9kdWxlcy9wYXlsb2FkL2Rpc3QvdXRpbGl0aWVzL3RyYW5zZm9ybUNvbHVtblByZWZlcmVuY2VzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhbnNmb3JtcyB2YXJpb3VzIGZvcm1zIG9mIGNvbHVtbnMgaW50byBgQ29sdW1uUHJlZmVyZW5jZVtdYCB3aGljaCBpcyB3aGF0IGlzIHN0b3JlZCBpbiB0aGUgdXNlcidzIHByZWZlcmVuY2VzIHRhYmxlXG4gKiBJbiBSZWFjdCBzdGF0ZSwgZm9yIGV4YW1wbGUsIGNvbHVtbnMgYXJlIHN0b3JlZCBpbiBpbiB0aGVpciBlbnRpcmV0eSwgaW5jbHVkaW5nIFJlYWN0IGNvbXBvbmVudHM6IGBbeyBhY2Nlc3NvcjogJ3RpdGxlJywgYWN0aXZlOiB0cnVlLCBMYWJlbDogUmVhY3QuUmVhY3ROb2RlLCAuLi4gfV1gXG4gKiBJbiB0aGUgVVJMLCB0aGV5IGFyZSBzdG9yZWQgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nczogYFsndGl0bGUnLCAnLXNsdWcnXWAsIHdoZXJlIHRoZSBgLWAgcHJlZml4IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY29sdW1uIGlzIGluYWN0aXZlXG4gKiBIb3dldmVyIGluIHRoZSBkYXRhYmFzZSwgY29sdW1ucyBtdXN0IGJlIGluIHRoaXMgZXhhY3Qgc2hhcGU6IGBbeyBhY2Nlc3NvcjogJ3RpdGxlJywgYWN0aXZlOiB0cnVlIH0sIHsgYWNjZXNzb3I6ICdzbHVnJywgYWN0aXZlOiBmYWxzZSB9XWBcbiAqIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGhhbmRsaW5nIGNvbHVtbnMsIHRoZXkgbmVlZCB0byBiZSBjb25zaXN0ZW50bHkgdHJhbnNmb3JtZWQgYmFjayBhbmQgZm9ydGhcbiAqLyBleHBvcnQgY29uc3QgdHJhbnNmb3JtQ29sdW1uc1RvUHJlZmVyZW5jZXMgPSAoY29sdW1ucyk9PntcbiAgICBpZiAoIWNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IGNvbHVtbnNUb1RyYW5zZm9ybSA9IGNvbHVtbnM7XG4gICAgLy8gQ29sdW1ucyB0aGF0IG9yaWdpbmF0ZSBmcm9tIHRoZSBVUkwgYXJlIGEgc3RyaW5naWZpZWQgSlNPTiBhcnJheSBhbmQgbmVlZCB0byBiZSBwYXJzZWQgZmlyc3RcbiAgICBpZiAodHlwZW9mIGNvbHVtbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb2x1bW5zVG9UcmFuc2Zvcm0gPSBKU09OLnBhcnNlKGNvbHVtbnMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGNvbHVtbnMnLCBjb2x1bW5zLCBlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbHVtbnNUb1RyYW5zZm9ybSAmJiBBcnJheS5pc0FycmF5KGNvbHVtbnNUb1RyYW5zZm9ybSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnNUb1RyYW5zZm9ybS5tYXAoKGNvbCk9PntcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29sID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGNvbFswXSAhPT0gJy0nO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yOiBhY3RpdmUgPyBjb2wgOiBjb2wuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFjY2Vzc29yOiBjb2wuYWNjZXNzb3IsXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBjb2wuYWN0aXZlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuLyoqXG4gKiBEb2VzIHRoZSBvcHBvc2l0ZSBvZiBgdHJhbnNmb3JtQ29sdW1uc1RvUHJlZmVyZW5jZXNgLCB3aGVyZSBgQ29sdW1uUHJlZmVyZW5jZVtdYCBhbmQgYENvbHVtbltdYCBhcmUgdHJhbnNmb3JtZWQgaW50byBgQ29sdW1uc0Zyb21VUkxgXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3RvcmluZyB0aGUgY29sdW1ucyBpbiB0aGUgVVJMLCB3aGVyZSBpdCBhcHBlYXJzIGFzIGEgc2ltcGxlIGNvbW1hIGRlbGltaXRlZCBhcnJheSBvZiBzdHJpbmdzXG4gKiBUaGUgYC1gIHByZWZpeCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbHVtbiBpcyBpbmFjdGl2ZVxuICovIGV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Db2x1bW5zVG9TZWFyY2hQYXJhbXMgPSAoY29sdW1ucyk9PntcbiAgICByZXR1cm4gY29sdW1ucz8ubWFwKChjb2wpPT5jb2wuYWN0aXZlID8gY29sLmFjY2Vzc29yIDogYC0ke2NvbC5hY2Nlc3Nvcn1gKTtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYW5zZm9ybUNvbHVtblByZWZlcmVuY2VzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformColumnPreferences.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformWhereQuery.js": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformWhereQuery.js ***! \***************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ transformWhereQuery: () => (/* binding */ transformWhereQuery)\n/* harmony export */ });\n/**\n * Transforms a basic \"where\" query into a format in which the \"where builder\" can understand.\n * Even though basic queries are valid, we need to hoist them into the \"and\" / \"or\" format.\n * Use this function alongside `validateWhereQuery` to check that for valid queries before transforming.\n * @example\n * Inaccurate: [text][equals]=example%20post\n * Accurate: [or][0][and][0][text][equals]=example%20post\n */ const transformWhereQuery = (whereQuery)=>{\n if (!whereQuery) {\n return {};\n }\n // Check if 'whereQuery' has 'or' field but no 'and'. This is the case for \"correct\" queries\n if (whereQuery.or && !whereQuery.and) {\n return {\n or: whereQuery.or.map((query)=>{\n // ...but if the or query does not have an and, we need to add it\n if (!query.and) {\n return {\n and: [\n query\n ]\n };\n }\n return query;\n })\n };\n }\n // Check if 'whereQuery' has 'and' field but no 'or'.\n if (whereQuery.and && !whereQuery.or) {\n return {\n or: [\n {\n and: whereQuery.and\n }\n ]\n };\n }\n // Check if 'whereQuery' has neither 'or' nor 'and'.\n if (!whereQuery.or && !whereQuery.and) {\n return {\n or: [\n {\n and: [\n whereQuery\n ]\n }\n ]\n };\n }\n // If 'whereQuery' has 'or' and 'and', just return it as it is.\n return whereQuery;\n};\n\n//# sourceMappingURL=transformWhereQuery.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy90cmFuc2Zvcm1XaGVyZVF1ZXJ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC91dGlsaXRpZXMvdHJhbnNmb3JtV2hlcmVRdWVyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zZm9ybXMgYSBiYXNpYyBcIndoZXJlXCIgcXVlcnkgaW50byBhIGZvcm1hdCBpbiB3aGljaCB0aGUgXCJ3aGVyZSBidWlsZGVyXCIgY2FuIHVuZGVyc3RhbmQuXG4gKiBFdmVuIHRob3VnaCBiYXNpYyBxdWVyaWVzIGFyZSB2YWxpZCwgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8gdGhlIFwiYW5kXCIgLyBcIm9yXCIgZm9ybWF0LlxuICogVXNlIHRoaXMgZnVuY3Rpb24gYWxvbmdzaWRlIGB2YWxpZGF0ZVdoZXJlUXVlcnlgIHRvIGNoZWNrIHRoYXQgZm9yIHZhbGlkIHF1ZXJpZXMgYmVmb3JlIHRyYW5zZm9ybWluZy5cbiAqIEBleGFtcGxlXG4gKiBJbmFjY3VyYXRlOiBbdGV4dF1bZXF1YWxzXT1leGFtcGxlJTIwcG9zdFxuICogQWNjdXJhdGU6IFtvcl1bMF1bYW5kXVswXVt0ZXh0XVtlcXVhbHNdPWV4YW1wbGUlMjBwb3N0XG4gKi8gZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVdoZXJlUXVlcnkgPSAod2hlcmVRdWVyeSk9PntcbiAgICBpZiAoIXdoZXJlUXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiAnd2hlcmVRdWVyeScgaGFzICdvcicgZmllbGQgYnV0IG5vICdhbmQnLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBcImNvcnJlY3RcIiBxdWVyaWVzXG4gICAgaWYgKHdoZXJlUXVlcnkub3IgJiYgIXdoZXJlUXVlcnkuYW5kKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcjogd2hlcmVRdWVyeS5vci5tYXAoKHF1ZXJ5KT0+e1xuICAgICAgICAgICAgICAgIC8vIC4uLmJ1dCBpZiB0aGUgb3IgcXVlcnkgZG9lcyBub3QgaGF2ZSBhbiBhbmQsIHdlIG5lZWQgdG8gYWRkIGl0XG4gICAgICAgICAgICAgICAgaWYgKCFxdWVyeS5hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIENoZWNrIGlmICd3aGVyZVF1ZXJ5JyBoYXMgJ2FuZCcgZmllbGQgYnV0IG5vICdvcicuXG4gICAgaWYgKHdoZXJlUXVlcnkuYW5kICYmICF3aGVyZVF1ZXJ5Lm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYW5kOiB3aGVyZVF1ZXJ5LmFuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgJ3doZXJlUXVlcnknIGhhcyBuZWl0aGVyICdvcicgbm9yICdhbmQnLlxuICAgIGlmICghd2hlcmVRdWVyeS5vciAmJiAhd2hlcmVRdWVyeS5hbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9yOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhbmQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlUXVlcnlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gSWYgJ3doZXJlUXVlcnknIGhhcyAnb3InIGFuZCAnYW5kJywganVzdCByZXR1cm4gaXQgYXMgaXQgaXMuXG4gICAgcmV0dXJuIHdoZXJlUXVlcnk7XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc2Zvcm1XaGVyZVF1ZXJ5LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/transformWhereQuery.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.js": /*!*****************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.js ***! \*****************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ unflatten: () => (/* binding */ unflatten)\n/* harmony export */ });\n/* eslint-disable @typescript-eslint/no-explicit-any */ /*\n * Copyright (c) 2014, Hugh Kennedy\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */ /*\n * Copyright (c) 2020, Feross Aboukhadijeh \n * Reference: https://www.npmjs.com/package/is-buffer\n * All rights reserved.\n */ function isBuffer(obj) {\n return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);\n}\nconst unflatten = (target, opts)=>{\n opts = opts || {};\n const delimiter = opts.delimiter || '.';\n const overwrite = opts.overwrite || false;\n const recursive = opts.recursive || false;\n const result = {};\n const isbuffer = isBuffer(target);\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target;\n }\n // safely ensure that the key is an integer.\n const getkey = (key)=>{\n const parsedKey = Number(key);\n return isNaN(parsedKey) || key.indexOf('.') !== -1 || opts.object ? key : parsedKey;\n };\n const sortedKeys = Object.keys(target).sort((keyA, keyB)=>keyA.length - keyB.length);\n sortedKeys.forEach((key)=>{\n const split = key.split(delimiter);\n let key1 = getkey(split.shift());\n let key2 = getkey(split[0]);\n let recipient = result;\n while(key2 !== undefined){\n if (key1 === '__proto__') {\n return;\n }\n const type = Object.prototype.toString.call(recipient[key1]);\n const isobject = type === '[object Object]' || type === '[object Array]';\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return;\n }\n if (overwrite && !isobject || !overwrite && recipient[key1] == null) {\n recipient[key1] = typeof key2 === 'number' && !opts.object ? [] : {};\n }\n recipient = recipient[key1];\n if (split.length > 0) {\n key1 = getkey(split.shift());\n key2 = getkey(split[0]);\n }\n }\n // unflatten again for 'messy objects'\n recipient[key1] = recursive ? unflatten(target[key], opts) : target[key];\n });\n return result;\n};\n\n//# sourceMappingURL=unflatten.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy91bmZsYXR0ZW4uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFkQUFxZCwrQkFBK0I7QUFDcGY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy91bmZsYXR0ZW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBIdWdoIEtlbm5lZHlcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi8gLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCwgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogUmVmZXJlbmNlOiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9pcy1idWZmZXJcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi8gZnVuY3Rpb24gaXNCdWZmZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaik7XG59XG5leHBvcnQgY29uc3QgdW5mbGF0dGVuID0gKHRhcmdldCwgb3B0cyk9PntcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRzLmRlbGltaXRlciB8fCAnLic7XG4gICAgY29uc3Qgb3ZlcndyaXRlID0gb3B0cy5vdmVyd3JpdGUgfHwgZmFsc2U7XG4gICAgY29uc3QgcmVjdXJzaXZlID0gb3B0cy5yZWN1cnNpdmUgfHwgZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgaXNidWZmZXIgPSBpc0J1ZmZlcih0YXJnZXQpO1xuICAgIGlmIChpc2J1ZmZlciB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgLy8gc2FmZWx5IGVuc3VyZSB0aGF0IHRoZSBrZXkgaXMgYW4gaW50ZWdlci5cbiAgICBjb25zdCBnZXRrZXkgPSAoa2V5KT0+e1xuICAgICAgICBjb25zdCBwYXJzZWRLZXkgPSBOdW1iZXIoa2V5KTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlZEtleSkgfHwga2V5LmluZGV4T2YoJy4nKSAhPT0gLTEgfHwgb3B0cy5vYmplY3QgPyBrZXkgOiBwYXJzZWRLZXk7XG4gICAgfTtcbiAgICBjb25zdCBzb3J0ZWRLZXlzID0gT2JqZWN0LmtleXModGFyZ2V0KS5zb3J0KChrZXlBLCBrZXlCKT0+a2V5QS5sZW5ndGggLSBrZXlCLmxlbmd0aCk7XG4gICAgc29ydGVkS2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGNvbnN0IHNwbGl0ID0ga2V5LnNwbGl0KGRlbGltaXRlcik7XG4gICAgICAgIGxldCBrZXkxID0gZ2V0a2V5KHNwbGl0LnNoaWZ0KCkpO1xuICAgICAgICBsZXQga2V5MiA9IGdldGtleShzcGxpdFswXSk7XG4gICAgICAgIGxldCByZWNpcGllbnQgPSByZXN1bHQ7XG4gICAgICAgIHdoaWxlKGtleTIgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZiAoa2V5MSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlY2lwaWVudFtrZXkxXSk7XG4gICAgICAgICAgICBjb25zdCBpc29iamVjdCA9IHR5cGUgPT09ICdbb2JqZWN0IE9iamVjdF0nIHx8IHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgICAgICAvLyBkbyBub3Qgd3JpdGUgb3ZlciBmYWxzZXksIG5vbi11bmRlZmluZWQgdmFsdWVzIGlmIG92ZXJ3cml0ZSBpcyBmYWxzZVxuICAgICAgICAgICAgaWYgKCFvdmVyd3JpdGUgJiYgIWlzb2JqZWN0ICYmIHR5cGVvZiByZWNpcGllbnRba2V5MV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSAmJiAhaXNvYmplY3QgfHwgIW92ZXJ3cml0ZSAmJiByZWNpcGllbnRba2V5MV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlY2lwaWVudFtrZXkxXSA9IHR5cGVvZiBrZXkyID09PSAnbnVtYmVyJyAmJiAhb3B0cy5vYmplY3QgPyBbXSA6IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVjaXBpZW50ID0gcmVjaXBpZW50W2tleTFdO1xuICAgICAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBrZXkxID0gZ2V0a2V5KHNwbGl0LnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIGtleTIgPSBnZXRrZXkoc3BsaXRbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHVuZmxhdHRlbiBhZ2FpbiBmb3IgJ21lc3N5IG9iamVjdHMnXG4gICAgICAgIHJlY2lwaWVudFtrZXkxXSA9IHJlY3Vyc2l2ZSA/IHVuZmxhdHRlbih0YXJnZXRba2V5XSwgb3B0cykgOiB0YXJnZXRba2V5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5mbGF0dGVuLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/unflatten.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateMimeType.js": /*!************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateMimeType.js ***! \************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ validateMimeType: () => (/* binding */ validateMimeType)\n/* harmony export */ });\nconst validateMimeType = (mimeType, allowedMimeTypes)=>{\n if (allowedMimeTypes.length === 0) {\n return true;\n }\n const cleanedMimeTypes = allowedMimeTypes.map((v)=>v.replace('*', ''));\n return cleanedMimeTypes.some((cleanedMimeType)=>mimeType.startsWith(cleanedMimeType));\n};\n\n//# sourceMappingURL=validateMimeType.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy92YWxpZGF0ZU1pbWVUeXBlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy92YWxpZGF0ZU1pbWVUeXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB2YWxpZGF0ZU1pbWVUeXBlID0gKG1pbWVUeXBlLCBhbGxvd2VkTWltZVR5cGVzKT0+e1xuICAgIGlmIChhbGxvd2VkTWltZVR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgY2xlYW5lZE1pbWVUeXBlcyA9IGFsbG93ZWRNaW1lVHlwZXMubWFwKCh2KT0+di5yZXBsYWNlKCcqJywgJycpKTtcbiAgICByZXR1cm4gY2xlYW5lZE1pbWVUeXBlcy5zb21lKChjbGVhbmVkTWltZVR5cGUpPT5taW1lVHlwZS5zdGFydHNXaXRoKGNsZWFuZWRNaW1lVHlwZSkpO1xufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdGVNaW1lVHlwZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateMimeType.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateWhereQuery.js": /*!**************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateWhereQuery.js ***! \**************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ validateWhereQuery: () => (/* binding */ validateWhereQuery)\n/* harmony export */ });\n/* harmony import */ var _types_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types/constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/types/constants.js\");\n\n/**\n * Validates that a \"where\" query is in a format in which the \"where builder\" can understand.\n * Even though basic queries are valid, we need to hoist them into the \"and\" / \"or\" format.\n * Use this function alongside `transformWhereQuery` to perform a transformation if the query is not valid.\n * @example\n * Inaccurate: [text][equals]=example%20post\n * Accurate: [or][0][and][0][text][equals]=example%20post\n */ const validateWhereQuery = (whereQuery)=>{\n if (whereQuery?.or && (whereQuery?.or?.length === 0 || whereQuery?.or?.length > 0 && whereQuery?.or?.[0]?.and && whereQuery?.or?.[0]?.and?.length > 0)) {\n // At this point we know that the whereQuery has 'or' and 'and' fields,\n // now let's check the structure and content of these fields.\n const isValid = whereQuery.or.every((orQuery)=>{\n if (orQuery.and && Array.isArray(orQuery.and)) {\n return orQuery.and.every((andQuery)=>{\n if (typeof andQuery !== 'object') {\n return false;\n }\n const andKeys = Object.keys(andQuery);\n // If there are no keys, it's not a valid WhereField.\n if (andKeys.length === 0) {\n return false;\n }\n for (const key of andKeys){\n const operator = Object.keys(andQuery[key])[0];\n // Check if the key is a valid Operator.\n if (!operator || !_types_constants_js__WEBPACK_IMPORTED_MODULE_0__.validOperatorSet.has(operator)) {\n return false;\n }\n }\n return true;\n });\n }\n return false;\n });\n return isValid;\n }\n return false;\n};\n\n//# sourceMappingURL=validateWhereQuery.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy92YWxpZGF0ZVdoZXJlUXVlcnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxpRUFBZ0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy92YWxpZGF0ZVdoZXJlUXVlcnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmFsaWRPcGVyYXRvclNldCB9IGZyb20gJy4uL3R5cGVzL2NvbnN0YW50cy5qcyc7XG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IGEgXCJ3aGVyZVwiIHF1ZXJ5IGlzIGluIGEgZm9ybWF0IGluIHdoaWNoIHRoZSBcIndoZXJlIGJ1aWxkZXJcIiBjYW4gdW5kZXJzdGFuZC5cbiAqIEV2ZW4gdGhvdWdoIGJhc2ljIHF1ZXJpZXMgYXJlIHZhbGlkLCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50byB0aGUgXCJhbmRcIiAvIFwib3JcIiBmb3JtYXQuXG4gKiBVc2UgdGhpcyBmdW5jdGlvbiBhbG9uZ3NpZGUgYHRyYW5zZm9ybVdoZXJlUXVlcnlgIHRvIHBlcmZvcm0gYSB0cmFuc2Zvcm1hdGlvbiBpZiB0aGUgcXVlcnkgaXMgbm90IHZhbGlkLlxuICogQGV4YW1wbGVcbiAqIEluYWNjdXJhdGU6IFt0ZXh0XVtlcXVhbHNdPWV4YW1wbGUlMjBwb3N0XG4gKiBBY2N1cmF0ZTogW29yXVswXVthbmRdWzBdW3RleHRdW2VxdWFsc109ZXhhbXBsZSUyMHBvc3RcbiAqLyBleHBvcnQgY29uc3QgdmFsaWRhdGVXaGVyZVF1ZXJ5ID0gKHdoZXJlUXVlcnkpPT57XG4gICAgaWYgKHdoZXJlUXVlcnk/Lm9yICYmICh3aGVyZVF1ZXJ5Py5vcj8ubGVuZ3RoID09PSAwIHx8IHdoZXJlUXVlcnk/Lm9yPy5sZW5ndGggPiAwICYmIHdoZXJlUXVlcnk/Lm9yPy5bMF0/LmFuZCAmJiB3aGVyZVF1ZXJ5Py5vcj8uWzBdPy5hbmQ/Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHRoZSB3aGVyZVF1ZXJ5IGhhcyAnb3InIGFuZCAnYW5kJyBmaWVsZHMsXG4gICAgICAgIC8vIG5vdyBsZXQncyBjaGVjayB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIHRoZXNlIGZpZWxkcy5cbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IHdoZXJlUXVlcnkub3IuZXZlcnkoKG9yUXVlcnkpPT57XG4gICAgICAgICAgICBpZiAob3JRdWVyeS5hbmQgJiYgQXJyYXkuaXNBcnJheShvclF1ZXJ5LmFuZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JRdWVyeS5hbmQuZXZlcnkoKGFuZFF1ZXJ5KT0+e1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFuZFF1ZXJ5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZEtleXMgPSBPYmplY3Qua2V5cyhhbmRRdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBrZXlzLCBpdCdzIG5vdCBhIHZhbGlkIFdoZXJlRmllbGQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFuZEtleXMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBPYmplY3Qua2V5cyhhbmRRdWVyeVtrZXldKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYSB2YWxpZCBPcGVyYXRvci5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmF0b3IgfHwgIXZhbGlkT3BlcmF0b3JTZXQuaGFzKG9wZXJhdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0ZVdoZXJlUXVlcnkuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/validateWhereQuery.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wait.js": /*!************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wait.js ***! \************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ wait: () => (/* binding */ wait)\n/* harmony export */ });\nasync function wait(ms) {\n return new Promise((resolve)=>{\n setTimeout(resolve, ms);\n });\n}\n\n//# sourceMappingURL=wait.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy93YWl0LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC91dGlsaXRpZXMvd2FpdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdChtcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gICAgfSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhaXQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wait.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wordBoundariesRegex.js": /*!***************************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wordBoundariesRegex.js ***! \***************************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ wordBoundariesRegex: () => (/* binding */ wordBoundariesRegex)\n/* harmony export */ });\n/* harmony import */ var _escapeRegExp_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./escapeRegExp.js */ \"(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/escapeRegExp.js\");\n\nconst wordBoundariesRegex = (input)=>{\n const words = input.split(' ');\n // Regex word boundaries that work for cyrillic characters - https://stackoverflow.com/a/47062016/1717697\n const wordBoundaryBefore = '(?:(?:[^\\\\p{L}\\\\p{N}])|^)' // Converted to a non-matching group instead of positive lookbehind for Safari\n ;\n const wordBoundaryAfter = '(?=[^\\\\p{L}\\\\p{N}]|$)';\n const regex = words.reduce((pattern, word, i)=>{\n const escapedWord = (0,_escapeRegExp_js__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)(word);\n return `${pattern}(?=.*${wordBoundaryBefore}.*${escapedWord}.*${wordBoundaryAfter})${i + 1 === words.length ? '.+' : ''}`;\n }, '');\n return new RegExp(regex, 'i');\n};\n\n//# sourceMappingURL=wordBoundariesRegex.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3V0aWxpdGllcy93b3JkQm91bmRhcmllc1JlZ2V4LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWlEO0FBQzFDO0FBQ1A7QUFDQTtBQUNBLDRDQUE0QyxFQUFFLElBQUksRUFBRTtBQUNwRDtBQUNBLHdDQUF3QyxFQUFFLElBQUksRUFBRTtBQUNoRDtBQUNBLDRCQUE0Qiw4REFBWTtBQUN4QyxrQkFBa0IsUUFBUSxPQUFPLG1CQUFtQixJQUFJLFlBQVksSUFBSSxrQkFBa0IsR0FBRyxtQ0FBbUM7QUFDaEksS0FBSztBQUNMO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC91dGlsaXRpZXMvd29yZEJvdW5kYXJpZXNSZWdleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICcuL2VzY2FwZVJlZ0V4cC5qcyc7XG5leHBvcnQgY29uc3Qgd29yZEJvdW5kYXJpZXNSZWdleCA9IChpbnB1dCk9PntcbiAgICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KCcgJyk7XG4gICAgLy8gUmVnZXggd29yZCBib3VuZGFyaWVzIHRoYXQgd29yayBmb3IgY3lyaWxsaWMgY2hhcmFjdGVycyAtIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NzA2MjAxNi8xNzE3Njk3XG4gICAgY29uc3Qgd29yZEJvdW5kYXJ5QmVmb3JlID0gJyg/Oig/OlteXFxcXHB7TH1cXFxccHtOfV0pfF4pJyAvLyBDb252ZXJ0ZWQgdG8gYSBub24tbWF0Y2hpbmcgZ3JvdXAgaW5zdGVhZCBvZiBwb3NpdGl2ZSBsb29rYmVoaW5kIGZvciBTYWZhcmlcbiAgICA7XG4gICAgY29uc3Qgd29yZEJvdW5kYXJ5QWZ0ZXIgPSAnKD89W15cXFxccHtMfVxcXFxwe059XXwkKSc7XG4gICAgY29uc3QgcmVnZXggPSB3b3Jkcy5yZWR1Y2UoKHBhdHRlcm4sIHdvcmQsIGkpPT57XG4gICAgICAgIGNvbnN0IGVzY2FwZWRXb3JkID0gZXNjYXBlUmVnRXhwKHdvcmQpO1xuICAgICAgICByZXR1cm4gYCR7cGF0dGVybn0oPz0uKiR7d29yZEJvdW5kYXJ5QmVmb3JlfS4qJHtlc2NhcGVkV29yZH0uKiR7d29yZEJvdW5kYXJ5QWZ0ZXJ9KSR7aSArIDEgPT09IHdvcmRzLmxlbmd0aCA/ICcuKycgOiAnJ31gO1xuICAgIH0sICcnKTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdleCwgJ2knKTtcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdvcmRCb3VuZGFyaWVzUmVnZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/utilities/wordBoundariesRegex.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/defaults.js": /*!***************************************************************************************************************************!*\ !*** ./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/defaults.js ***! \***************************************************************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ versionDefaults: () => (/* binding */ versionDefaults)\n/* harmony export */ });\nconst versionDefaults = {\n autosaveInterval: 2000\n};\n\n//# sourceMappingURL=defaults.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXlsb2FkQDMuODEuMF9ncmFwaHFsQDE2LjEzLjJfdHlwZXNjcmlwdEA1LjkuMy9ub2RlX21vZHVsZXMvcGF5bG9hZC9kaXN0L3ZlcnNpb25zL2RlZmF1bHRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXJjbWludGVsL1Byb2plY3RzL2UtdGliLmNvbS9ub2RlX21vZHVsZXMvLnBucG0vcGF5bG9hZEAzLjgxLjBfZ3JhcGhxbEAxNi4xMy4yX3R5cGVzY3JpcHRANS45LjMvbm9kZV9tb2R1bGVzL3BheWxvYWQvZGlzdC92ZXJzaW9ucy9kZWZhdWx0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbkRlZmF1bHRzID0ge1xuICAgIGF1dG9zYXZlSW50ZXJ2YWw6IDIwMDBcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/payload@3.81.0_graphql@16.13.2_typescript@5.9.3/node_modules/payload/dist/versions/defaults.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/pluralize@8.0.0/node_modules/pluralize/pluralize.js": /*!********************************************************************************!*\ !*** ./node_modules/.pnpm/pluralize@8.0.0/node_modules/pluralize/pluralize.js ***! \********************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval(__webpack_require__.ts("/* global define */\n\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (true) {\n // Node.\n module.exports = pluralize();\n } else {}\n})(this, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wbHVyYWxpemVAOC4wLjAvbm9kZV9tb2R1bGVzL3BsdXJhbGl6ZS9wbHVyYWxpemUuanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLE1BQU0sSUFBMEY7QUFDaEc7QUFDQTtBQUNBLElBQUksS0FBSyxFQVFOO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFVBQVU7QUFDeEIsY0FBYyxVQUFVO0FBQ3hCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYztBQUNkO0FBQ0E7QUFDQSw4QkFBOEIsSUFBSTtBQUNsQztBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCLGNBQWMsVUFBVTtBQUN4QixjQUFjLFVBQVU7QUFDeEIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsVUFBVTtBQUN4QixjQUFjLFVBQVU7QUFDeEIsY0FBYyxVQUFVO0FBQ3hCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFNBQVM7QUFDdkIsY0FBYyxTQUFTO0FBQ3ZCLGNBQWMsU0FBUztBQUN2QixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUIsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUIsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3BsdXJhbGl6ZUA4LjAuMC9ub2RlX21vZHVsZXMvcGx1cmFsaXplL3BsdXJhbGl6ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAocm9vdCwgcGx1cmFsaXplKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gcGx1cmFsaXplKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELCByZWdpc3RlcnMgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBsdXJhbGl6ZSgpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsLlxuICAgIHJvb3QucGx1cmFsaXplID0gcGx1cmFsaXplKCk7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgLy8gUnVsZSBzdG9yYWdlIC0gcGx1cmFsaXplIGFuZCBzaW5ndWxhcml6ZSBuZWVkIHRvIGJlIHJ1biBzZXF1ZW50aWFsbHksXG4gIC8vIHdoaWxlIG90aGVyIHJ1bGVzIGNhbiBiZSBvcHRpbWl6ZWQgdXNpbmcgYW4gb2JqZWN0IGZvciBpbnN0YW50IGxvb2t1cHMuXG4gIHZhciBwbHVyYWxSdWxlcyA9IFtdO1xuICB2YXIgc2luZ3VsYXJSdWxlcyA9IFtdO1xuICB2YXIgdW5jb3VudGFibGVzID0ge307XG4gIHZhciBpcnJlZ3VsYXJQbHVyYWxzID0ge307XG4gIHZhciBpcnJlZ3VsYXJTaW5nbGVzID0ge307XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIGEgcGx1cmFsaXphdGlvbiBydWxlIHRvIGEgdXNhYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtICB7KFJlZ0V4cHxzdHJpbmcpfSBydWxlXG4gICAqIEByZXR1cm4ge1JlZ0V4cH1cbiAgICovXG4gIGZ1bmN0aW9uIHNhbml0aXplUnVsZSAocnVsZSkge1xuICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJ1bGUgKyAnJCcsICdpJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogUGFzcyBpbiBhIHdvcmQgdG9rZW4gdG8gcHJvZHVjZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIHJlcGxpY2F0ZSB0aGUgY2FzZSBvblxuICAgKiBhbm90aGVyIHdvcmQuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB0b2tlblxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVDYXNlICh3b3JkLCB0b2tlbikge1xuICAgIC8vIFRva2VucyBhcmUgYW4gZXhhY3QgbWF0Y2guXG4gICAgaWYgKHdvcmQgPT09IHRva2VuKSByZXR1cm4gdG9rZW47XG5cbiAgICAvLyBMb3dlciBjYXNlZCB3b3Jkcy4gRS5nLiBcImhlbGxvXCIuXG4gICAgaWYgKHdvcmQgPT09IHdvcmQudG9Mb3dlckNhc2UoKSkgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBVcHBlciBjYXNlZCB3b3Jkcy4gRS5nLiBcIldISVNLWVwiLlxuICAgIGlmICh3b3JkID09PSB3b3JkLnRvVXBwZXJDYXNlKCkpIHJldHVybiB0b2tlbi50b1VwcGVyQ2FzZSgpO1xuXG4gICAgLy8gVGl0bGUgY2FzZWQgd29yZHMuIEUuZy4gXCJUaXRsZVwiLlxuICAgIGlmICh3b3JkWzBdID09PSB3b3JkWzBdLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiB0b2tlbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRva2VuLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8vIExvd2VyIGNhc2VkIHdvcmRzLiBFLmcuIFwidGVzdFwiLlxuICAgIHJldHVybiB0b2tlbi50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycG9sYXRlIGEgcmVnZXhwIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtICB7QXJyYXl9ICBhcmdzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGludGVycG9sYXRlIChzdHIsIGFyZ3MpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcJChcXGR7MSwyfSkvZywgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdIHx8ICcnO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHVzaW5nIGEgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgcnVsZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlICh3b3JkLCBydWxlKSB7XG4gICAgcmV0dXJuIHdvcmQucmVwbGFjZShydWxlWzBdLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGUocnVsZVsxXSwgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKG1hdGNoID09PSAnJykge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUNhc2Uod29yZFtpbmRleCAtIDFdLCByZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdG9yZUNhc2UobWF0Y2gsIHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemUgYSB3b3JkIGJ5IHBhc3NpbmcgaW4gdGhlIHdvcmQgYW5kIHNhbml0aXphdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIHRva2VuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gICB3b3JkXG4gICAqIEBwYXJhbSAge0FycmF5fSAgICBydWxlc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBzYW5pdGl6ZVdvcmQgKHRva2VuLCB3b3JkLCBydWxlcykge1xuICAgIC8vIEVtcHR5IHN0cmluZyBvciBkb2Vzbid0IG5lZWQgZml4aW5nLlxuICAgIGlmICghdG9rZW4ubGVuZ3RoIHx8IHVuY291bnRhYmxlcy5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgIHJldHVybiB3b3JkO1xuICAgIH1cblxuICAgIHZhciBsZW4gPSBydWxlcy5sZW5ndGg7XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHNhbml0aXphdGlvbiBydWxlcyBhbmQgdXNlIHRoZSBmaXJzdCBvbmUgdG8gbWF0Y2guXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICB2YXIgcnVsZSA9IHJ1bGVzW2xlbl07XG5cbiAgICAgIGlmIChydWxlWzBdLnRlc3Qod29yZCkpIHJldHVybiByZXBsYWNlKHdvcmQsIHJ1bGUpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSB3b3JkIHdpdGggdGhlIHVwZGF0ZWQgd29yZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIHJlcGxhY2VNYXBcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgIGtlZXBNYXBcbiAgICogQHBhcmFtICB7QXJyYXl9ICAgIHJ1bGVzXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVdvcmQgKHJlcGxhY2VNYXAsIGtlZXBNYXAsIHJ1bGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3b3JkKSB7XG4gICAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdG9rZW4gYW5kIGNhc2UgcmVzdG9yYXRpb24gZnVuY3Rpb25zLlxuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBrZWVwIG9iamVjdCBtYXAuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVDYXNlKHdvcmQsIHRva2VuKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgcmVwbGFjZW1lbnQgbWFwIGZvciBhIGRpcmVjdCB3b3JkIHJlcGxhY2VtZW50LlxuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlQ2FzZSh3b3JkLCByZXBsYWNlTWFwW3Rva2VuXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBhbGwgdGhlIHJ1bGVzIGFnYWluc3QgdGhlIHdvcmQuXG4gICAgICByZXR1cm4gc2FuaXRpemVXb3JkKHRva2VuLCB3b3JkLCBydWxlcyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGFydCBvZiB0aGUgbWFwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tXb3JkIChyZXBsYWNlTWFwLCBrZWVwTWFwLCBydWxlcywgYm9vbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAod29yZCkge1xuICAgICAgdmFyIHRva2VuID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAoa2VlcE1hcC5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHJlcGxhY2VNYXAuaGFzT3duUHJvcGVydHkodG9rZW4pKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBzYW5pdGl6ZVdvcmQodG9rZW4sIHRva2VuLCBydWxlcykgPT09IHRva2VuO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGx1cmFsaXplIG9yIHNpbmd1bGFyaXplIGEgd29yZCBiYXNlZCBvbiB0aGUgcGFzc2VkIGluIGNvdW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9ICB3b3JkICAgICAgVGhlIHdvcmQgdG8gcGx1cmFsaXplXG4gICAqIEBwYXJhbSAge251bWJlcn0gIGNvdW50ICAgICBIb3cgbWFueSBvZiB0aGUgd29yZCBleGlzdFxuICAgKiBAcGFyYW0gIHtib29sZWFufSBpbmNsdXNpdmUgV2hldGhlciB0byBwcmVmaXggd2l0aCB0aGUgbnVtYmVyIChlLmcuIDMgZHVja3MpXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHBsdXJhbGl6ZSAod29yZCwgY291bnQsIGluY2x1c2l2ZSkge1xuICAgIHZhciBwbHVyYWxpemVkID0gY291bnQgPT09IDFcbiAgICAgID8gcGx1cmFsaXplLnNpbmd1bGFyKHdvcmQpIDogcGx1cmFsaXplLnBsdXJhbCh3b3JkKTtcblxuICAgIHJldHVybiAoaW5jbHVzaXZlID8gY291bnQgKyAnICcgOiAnJykgKyBwbHVyYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsdXJhbGl6ZSBhIHdvcmQuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHBsdXJhbGl6ZS5wbHVyYWwgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJTaW5nbGVzLCBpcnJlZ3VsYXJQbHVyYWxzLCBwbHVyYWxSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgcGx1cmFsLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuaXNQbHVyYWwgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyU2luZ2xlcywgaXJyZWd1bGFyUGx1cmFscywgcGx1cmFsUnVsZXNcbiAgKTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemUgYSB3b3JkLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBwbHVyYWxpemUuc2luZ3VsYXIgPSByZXBsYWNlV29yZChcbiAgICBpcnJlZ3VsYXJQbHVyYWxzLCBpcnJlZ3VsYXJTaW5nbGVzLCBzaW5ndWxhclJ1bGVzXG4gICk7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBzaW5ndWxhci5cbiAgICpcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgcGx1cmFsaXplLmlzU2luZ3VsYXIgPSBjaGVja1dvcmQoXG4gICAgaXJyZWd1bGFyUGx1cmFscywgaXJyZWd1bGFyU2luZ2xlcywgc2luZ3VsYXJSdWxlc1xuICApO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwbHVyYWxpemF0aW9uIHJ1bGUgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBydWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICByZXBsYWNlbWVudFxuICAgKi9cbiAgcGx1cmFsaXplLmFkZFBsdXJhbFJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBwbHVyYWxSdWxlcy5wdXNoKFtzYW5pdGl6ZVJ1bGUocnVsZSksIHJlcGxhY2VtZW50XSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmd1bGFyaXphdGlvbiBydWxlIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcnVsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgcmVwbGFjZW1lbnRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRTaW5ndWxhclJ1bGUgPSBmdW5jdGlvbiAocnVsZSwgcmVwbGFjZW1lbnQpIHtcbiAgICBzaW5ndWxhclJ1bGVzLnB1c2goW3Nhbml0aXplUnVsZShydWxlKSwgcmVwbGFjZW1lbnRdKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIHVuY291bnRhYmxlIHdvcmQgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHdvcmRcbiAgICovXG4gIHBsdXJhbGl6ZS5hZGRVbmNvdW50YWJsZVJ1bGUgPSBmdW5jdGlvbiAod29yZCkge1xuICAgIGlmICh0eXBlb2Ygd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVuY291bnRhYmxlc1t3b3JkLnRvTG93ZXJDYXNlKCldID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgc2luZ3VsYXIgYW5kIHBsdXJhbCByZWZlcmVuY2VzIGZvciB0aGUgd29yZC5cbiAgICBwbHVyYWxpemUuYWRkUGx1cmFsUnVsZSh3b3JkLCAnJDAnKTtcbiAgICBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHdvcmQsICckMCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gaXJyZWd1bGFyIHdvcmQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpbmdsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGx1cmFsXG4gICAqL1xuICBwbHVyYWxpemUuYWRkSXJyZWd1bGFyUnVsZSA9IGZ1bmN0aW9uIChzaW5nbGUsIHBsdXJhbCkge1xuICAgIHBsdXJhbCA9IHBsdXJhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHNpbmdsZSA9IHNpbmdsZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaXJyZWd1bGFyU2luZ2xlc1tzaW5nbGVdID0gcGx1cmFsO1xuICAgIGlycmVndWxhclBsdXJhbHNbcGx1cmFsXSA9IHNpbmdsZTtcbiAgfTtcblxuICAvKipcbiAgICogSXJyZWd1bGFyIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIC8vIFByb25vdW5zLlxuICAgIFsnSScsICd3ZSddLFxuICAgIFsnbWUnLCAndXMnXSxcbiAgICBbJ2hlJywgJ3RoZXknXSxcbiAgICBbJ3NoZScsICd0aGV5J10sXG4gICAgWyd0aGVtJywgJ3RoZW0nXSxcbiAgICBbJ215c2VsZicsICdvdXJzZWx2ZXMnXSxcbiAgICBbJ3lvdXJzZWxmJywgJ3lvdXJzZWx2ZXMnXSxcbiAgICBbJ2l0c2VsZicsICd0aGVtc2VsdmVzJ10sXG4gICAgWydoZXJzZWxmJywgJ3RoZW1zZWx2ZXMnXSxcbiAgICBbJ2hpbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsndGhlbXNlbGYnLCAndGhlbXNlbHZlcyddLFxuICAgIFsnaXMnLCAnYXJlJ10sXG4gICAgWyd3YXMnLCAnd2VyZSddLFxuICAgIFsnaGFzJywgJ2hhdmUnXSxcbiAgICBbJ3RoaXMnLCAndGhlc2UnXSxcbiAgICBbJ3RoYXQnLCAndGhvc2UnXSxcbiAgICAvLyBXb3JkcyBlbmRpbmcgaW4gd2l0aCBhIGNvbnNvbmFudCBhbmQgYG9gLlxuICAgIFsnZWNobycsICdlY2hvZXMnXSxcbiAgICBbJ2RpbmdvJywgJ2RpbmdvZXMnXSxcbiAgICBbJ3ZvbGNhbm8nLCAndm9sY2Fub2VzJ10sXG4gICAgWyd0b3JuYWRvJywgJ3Rvcm5hZG9lcyddLFxuICAgIFsndG9ycGVkbycsICd0b3JwZWRvZXMnXSxcbiAgICAvLyBFbmRzIHdpdGggYHVzYC5cbiAgICBbJ2dlbnVzJywgJ2dlbmVyYSddLFxuICAgIFsndmlzY3VzJywgJ3Zpc2NlcmEnXSxcbiAgICAvLyBFbmRzIHdpdGggYG1hYC5cbiAgICBbJ3N0aWdtYScsICdzdGlnbWF0YSddLFxuICAgIFsnc3RvbWEnLCAnc3RvbWF0YSddLFxuICAgIFsnZG9nbWEnLCAnZG9nbWF0YSddLFxuICAgIFsnbGVtbWEnLCAnbGVtbWF0YSddLFxuICAgIFsnc2NoZW1hJywgJ3NjaGVtYXRhJ10sXG4gICAgWydhbmF0aGVtYScsICdhbmF0aGVtYXRhJ10sXG4gICAgLy8gT3RoZXIgaXJyZWd1bGFyIHJ1bGVzLlxuICAgIFsnb3gnLCAnb3hlbiddLFxuICAgIFsnYXhlJywgJ2F4ZXMnXSxcbiAgICBbJ2RpZScsICdkaWNlJ10sXG4gICAgWyd5ZXMnLCAneWVzZXMnXSxcbiAgICBbJ2Zvb3QnLCAnZmVldCddLFxuICAgIFsnZWF2ZScsICdlYXZlcyddLFxuICAgIFsnZ29vc2UnLCAnZ2Vlc2UnXSxcbiAgICBbJ3Rvb3RoJywgJ3RlZXRoJ10sXG4gICAgWydxdWl6JywgJ3F1aXp6ZXMnXSxcbiAgICBbJ2h1bWFuJywgJ2h1bWFucyddLFxuICAgIFsncHJvb2YnLCAncHJvb2ZzJ10sXG4gICAgWydjYXJ2ZScsICdjYXJ2ZXMnXSxcbiAgICBbJ3ZhbHZlJywgJ3ZhbHZlcyddLFxuICAgIFsnbG9vZXknLCAnbG9vaWVzJ10sXG4gICAgWyd0aGllZicsICd0aGlldmVzJ10sXG4gICAgWydncm9vdmUnLCAnZ3Jvb3ZlcyddLFxuICAgIFsncGlja2F4ZScsICdwaWNrYXhlcyddLFxuICAgIFsncGFzc2VyYnknLCAncGFzc2Vyc2J5J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRJcnJlZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogUGx1cmFsaXphdGlvbiBydWxlcy5cbiAgICovXG4gIFtcbiAgICBbL3M/JC9pLCAncyddLFxuICAgIFsvW15cXHUwMDAwLVxcdTAwN0ZdJC9pLCAnJDAnXSxcbiAgICBbLyhbXmFlaW91XWVzZSkkL2ksICckMSddLFxuICAgIFsvKGF4fHRlc3QpaXMkL2ksICckMWVzJ10sXG4gICAgWy8oYWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8cmlzKSQvaSwgJyQxZXMnXSxcbiAgICBbLyhlW21uXXUpcz8kL2ksICckMXMnXSxcbiAgICBbLyhbXmxdaWFzfFthZWlvdV1sYXN8W2VqenJdYXN8W2l1XWFtKSQvaSwgJyQxJ10sXG4gICAgWy8oYWx1bW58c3lsbGFifHZpcnxyYWRpfG51Y2xlfGZ1bmd8Y2FjdHxzdGltdWx8dGVybWlufGJhY2lsbHxmb2N8dXRlcnxsb2N8c3RyYXQpKD86dXN8aSkkL2ksICckMWknXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicikoPzphfGFlKSQvaSwgJyQxYWUnXSxcbiAgICBbLyhzZXJhcGh8Y2hlcnViKSg/OmltKT8kL2ksICckMWltJ10sXG4gICAgWy8oaGVyfGF0fGdyKW8kL2ksICckMW9lcyddLFxuICAgIFsvKGFnZW5kfGFkZGVuZHxtaWxsZW5uaXxkYXR8ZXh0cmVtfGJhY3Rlcml8ZGVzaWRlcmF0fHN0cmF0fGNhbmRlbGFicnxlcnJhdHxvdnxzeW1wb3NpfGN1cnJpY3VsfGF1dG9tYXR8cXVvcikoPzphfHVtKSQvaSwgJyQxYSddLFxuICAgIFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KSg/OmF8b24pJC9pLCAnJDFhJ10sXG4gICAgWy9zaXMkL2ksICdzZXMnXSxcbiAgICBbLyg/Oihrbml8d2l8bGkpZmV8KGFyfGx8ZWF8ZW98b2F8aG9vKWYpJC9pLCAnJDEkMnZlcyddLFxuICAgIFsvKFteYWVpb3V5XXxxdSl5JC9pLCAnJDFpZXMnXSxcbiAgICBbLyhbXmNoXVtpZW9dW2xuXSlleSQvaSwgJyQxaWVzJ10sXG4gICAgWy8oeHxjaHxzc3xzaHx6eikkL2ksICckMWVzJ10sXG4gICAgWy8obWF0cnxjb2R8bXVyfHNpbHx2ZXJ0fGluZHxhcHBlbmQpKD86aXh8ZXgpJC9pLCAnJDFpY2VzJ10sXG4gICAgWy9cXGIoKD86dGl0KT9tfGwpKD86aWNlfG91c2UpJC9pLCAnJDFpY2UnXSxcbiAgICBbLyhwZSkoPzpyc29ufG9wbGUpJC9pLCAnJDFvcGxlJ10sXG4gICAgWy8oY2hpbGQpKD86cmVuKT8kL2ksICckMXJlbiddLFxuICAgIFsvZWF1eCQvaSwgJyQwJ10sXG4gICAgWy9tW2FlXW4kL2ksICdtZW4nXSxcbiAgICBbJ3Rob3UnLCAneW91J11cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZS5hZGRQbHVyYWxSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogU2luZ3VsYXJpemF0aW9uIHJ1bGVzLlxuICAgKi9cbiAgW1xuICAgIFsvcyQvaSwgJyddLFxuICAgIFsvKHNzKSQvaSwgJyQxJ10sXG4gICAgWy8od2l8a25pfCg/OmFmdGVyfGhhbGZ8aGlnaHxsb3d8bWlkfG5vbnxuaWdodHxbXlxcd118XilsaSl2ZXMkL2ksICckMWZlJ10sXG4gICAgWy8oYXJ8KD86d298W2FlXSlsfFtlb11bYW9dKXZlcyQvaSwgJyQxZiddLFxuICAgIFsvaWVzJC9pLCAneSddLFxuICAgIFsvXFxiKFtwbF18em9tYnwoPzpuZWNrfGNyb3NzKT90fGNvbGx8ZmFlcnxmb29kfGdlbnxnb29ufGdyb3VwfGxhc3N8dGFsa3xnb2FsfGN1dClpZXMkL2ksICckMWllJ10sXG4gICAgWy9cXGIobW9ufHNtaWwpaWVzJC9pLCAnJDFleSddLFxuICAgIFsvXFxiKCg/OnRpdCk/bXxsKWljZSQvaSwgJyQxb3VzZSddLFxuICAgIFsvKHNlcmFwaHxjaGVydWIpaW0kL2ksICckMSddLFxuICAgIFsvKHh8Y2h8c3N8c2h8enp8dHRvfGdvfGNob3xhbGlhc3xbXmFvdV11c3x0W2xtXWFzfGdhc3woPzpoZXJ8YXR8Z3Ipb3xbYWVpb3VdcmlzKSg/OmVzKT8kL2ksICckMSddLFxuICAgIFsvKGFuYWx5fGRpYWdub3xwYXJlbnRoZXxwcm9nbm98c3lub3B8dGhlfGVtcGhhfGNyaXxuZSkoPzpzaXN8c2VzKSQvaSwgJyQxc2lzJ10sXG4gICAgWy8obW92aWV8dHdlbHZlfGFidXNlfGVbbW5ddSlzJC9pLCAnJDEnXSxcbiAgICBbLyh0ZXN0KSg/OmlzfGVzKSQvaSwgJyQxaXMnXSxcbiAgICBbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSwgJyQxdXMnXSxcbiAgICBbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxxdW9yKWEkL2ksICckMXVtJ10sXG4gICAgWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpYSQvaSwgJyQxb24nXSxcbiAgICBbLyhhbHVtbnxhbGd8dmVydGVicilhZSQvaSwgJyQxYSddLFxuICAgIFsvKGNvZHxtdXJ8c2lsfHZlcnR8aW5kKWljZXMkL2ksICckMWV4J10sXG4gICAgWy8obWF0cnxhcHBlbmQpaWNlcyQvaSwgJyQxaXgnXSxcbiAgICBbLyhwZSkocnNvbnxvcGxlKSQvaSwgJyQxcnNvbiddLFxuICAgIFsvKGNoaWxkKXJlbiQvaSwgJyQxJ10sXG4gICAgWy8oZWF1KXg/JC9pLCAnJDEnXSxcbiAgICBbL21lbiQvaSwgJ21hbiddXG4gIF0uZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgIHJldHVybiBwbHVyYWxpemUuYWRkU2luZ3VsYXJSdWxlKHJ1bGVbMF0sIHJ1bGVbMV0pO1xuICB9KTtcblxuICAvKipcbiAgICogVW5jb3VudGFibGUgcnVsZXMuXG4gICAqL1xuICBbXG4gICAgLy8gU2luZ3VsYXIgd29yZHMgd2l0aCBubyBwbHVyYWxzLlxuICAgICdhZHVsdGhvb2QnLFxuICAgICdhZHZpY2UnLFxuICAgICdhZ2VuZGEnLFxuICAgICdhaWQnLFxuICAgICdhaXJjcmFmdCcsXG4gICAgJ2FsY29ob2wnLFxuICAgICdhbW1vJyxcbiAgICAnYW5hbHl0aWNzJyxcbiAgICAnYW5pbWUnLFxuICAgICdhdGhsZXRpY3MnLFxuICAgICdhdWRpbycsXG4gICAgJ2Jpc29uJyxcbiAgICAnYmxvb2QnLFxuICAgICdicmVhbScsXG4gICAgJ2J1ZmZhbG8nLFxuICAgICdidXR0ZXInLFxuICAgICdjYXJwJyxcbiAgICAnY2FzaCcsXG4gICAgJ2NoYXNzaXMnLFxuICAgICdjaGVzcycsXG4gICAgJ2Nsb3RoaW5nJyxcbiAgICAnY29kJyxcbiAgICAnY29tbWVyY2UnLFxuICAgICdjb29wZXJhdGlvbicsXG4gICAgJ2NvcnBzJyxcbiAgICAnZGVicmlzJyxcbiAgICAnZGlhYmV0ZXMnLFxuICAgICdkaWdlc3Rpb24nLFxuICAgICdlbGsnLFxuICAgICdlbmVyZ3knLFxuICAgICdlcXVpcG1lbnQnLFxuICAgICdleGNyZXRpb24nLFxuICAgICdleHBlcnRpc2UnLFxuICAgICdmaXJtd2FyZScsXG4gICAgJ2Zsb3VuZGVyJyxcbiAgICAnZnVuJyxcbiAgICAnZ2FsbG93cycsXG4gICAgJ2dhcmJhZ2UnLFxuICAgICdncmFmZml0aScsXG4gICAgJ2hhcmR3YXJlJyxcbiAgICAnaGVhZHF1YXJ0ZXJzJyxcbiAgICAnaGVhbHRoJyxcbiAgICAnaGVycGVzJyxcbiAgICAnaGlnaGppbmtzJyxcbiAgICAnaG9tZXdvcmsnLFxuICAgICdob3VzZXdvcmsnLFxuICAgICdpbmZvcm1hdGlvbicsXG4gICAgJ2plYW5zJyxcbiAgICAnanVzdGljZScsXG4gICAgJ2t1ZG9zJyxcbiAgICAnbGFib3VyJyxcbiAgICAnbGl0ZXJhdHVyZScsXG4gICAgJ21hY2hpbmVyeScsXG4gICAgJ21hY2tlcmVsJyxcbiAgICAnbWFpbCcsXG4gICAgJ21lZGlhJyxcbiAgICAnbWV3cycsXG4gICAgJ21vb3NlJyxcbiAgICAnbXVzaWMnLFxuICAgICdtdWQnLFxuICAgICdtYW5nYScsXG4gICAgJ25ld3MnLFxuICAgICdvbmx5JyxcbiAgICAncGVyc29ubmVsJyxcbiAgICAncGlrZScsXG4gICAgJ3BsYW5rdG9uJyxcbiAgICAncGxpZXJzJyxcbiAgICAncG9saWNlJyxcbiAgICAncG9sbHV0aW9uJyxcbiAgICAncHJlbWlzZXMnLFxuICAgICdyYWluJyxcbiAgICAncmVzZWFyY2gnLFxuICAgICdyaWNlJyxcbiAgICAnc2FsbW9uJyxcbiAgICAnc2Npc3NvcnMnLFxuICAgICdzZXJpZXMnLFxuICAgICdzZXdhZ2UnLFxuICAgICdzaGFtYmxlcycsXG4gICAgJ3NocmltcCcsXG4gICAgJ3NvZnR3YXJlJyxcbiAgICAnc3BlY2llcycsXG4gICAgJ3N0YWZmJyxcbiAgICAnc3dpbmUnLFxuICAgICd0ZW5uaXMnLFxuICAgICd0cmFmZmljJyxcbiAgICAndHJhbnNwb3J0YXRpb24nLFxuICAgICd0cm91dCcsXG4gICAgJ3R1bmEnLFxuICAgICd3ZWFsdGgnLFxuICAgICd3ZWxmYXJlJyxcbiAgICAnd2hpdGluZycsXG4gICAgJ3dpbGRlYmVlc3QnLFxuICAgICd3aWxkbGlmZScsXG4gICAgJ3lvdScsXG4gICAgL3Bva1tlw6ldbW9uJC9pLFxuICAgIC8vIFJlZ2V4ZXMuXG4gICAgL1teYWVpb3VdZXNlJC9pLCAvLyBcImNoaW5lc2VcIiwgXCJqYXBhbmVzZVwiXG4gICAgL2RlZXIkL2ksIC8vIFwiZGVlclwiLCBcInJlaW5kZWVyXCJcbiAgICAvZmlzaCQvaSwgLy8gXCJmaXNoXCIsIFwiYmxvd2Zpc2hcIiwgXCJhbmdlbGZpc2hcIlxuICAgIC9tZWFzbGVzJC9pLFxuICAgIC9vW2l1XXMkL2ksIC8vIFwiY2Fybml2b3JvdXNcIlxuICAgIC9wb3gkL2ksIC8vIFwiY2hpY2twb3hcIiwgXCJzbWFsbHBveFwiXG4gICAgL3NoZWVwJC9pXG4gIF0uZm9yRWFjaChwbHVyYWxpemUuYWRkVW5jb3VudGFibGVSdWxlKTtcblxuICByZXR1cm4gcGx1cmFsaXplO1xufSk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/pluralize@8.0.0/node_modules/pluralize/pluralize.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/formats.js": /*!****************************************************************************!*\ !*** ./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/formats.js ***! \****************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RFC1738: () => (/* binding */ RFC1738),\n/* harmony export */ RFC3986: () => (/* binding */ RFC3986),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ formatters: () => (/* binding */ formatters)\n/* harmony export */ });\n\n\nconst replace = String.prototype.replace\nconst percentTwenties = /%20/g\n\nconst Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986',\n}\n\nconst formatters = {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+')\n },\n RFC3986: function (value) {\n return String(value)\n },\n}\nconst RFC1738 = Format.RFC1738\nconst RFC3986 = Format.RFC3986\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Format.RFC3986);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9xcy1lc21AOC4wLjEvbm9kZV9tb2R1bGVzL3FzLWVzbS9saWIvZm9ybWF0cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQVk7O0FBRVo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ0E7O0FBRVAsaUVBQWUsY0FBYyIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9xcy1lc21AOC4wLjEvbm9kZV9tb2R1bGVzL3FzLWVzbS9saWIvZm9ybWF0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuY29uc3QgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuY29uc3QgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nXG5cbmNvbnN0IEZvcm1hdCA9IHtcbiAgUkZDMTczODogJ1JGQzE3MzgnLFxuICBSRkMzOTg2OiAnUkZDMzk4NicsXG59XG5cbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXJzID0ge1xuICBSRkMxNzM4OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLCBwZXJjZW50VHdlbnRpZXMsICcrJylcbiAgfSxcbiAgUkZDMzk4NjogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgfSxcbn1cbmV4cG9ydCBjb25zdCBSRkMxNzM4ID0gRm9ybWF0LlJGQzE3MzhcbmV4cG9ydCBjb25zdCBSRkMzOTg2ID0gRm9ybWF0LlJGQzM5ODZcblxuZXhwb3J0IGRlZmF1bHQgRm9ybWF0LlJGQzM5ODZcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/formats.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/parse.js": /*!**************************************************************************!*\ !*** ./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/parse.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ parse: () => (/* binding */ parse)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/utils.js\");\n\n\n;\n\nconst has = Object.prototype.hasOwnProperty\nconst isArray = Array.isArray\n\nconst defaults = {\n allowDots: false,\n allowEmptyArrays: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n comma: false,\n decodeDotInKeys: false,\n decoder: _utils_js__WEBPACK_IMPORTED_MODULE_0__.decode,\n delimiter: '&',\n depth: 5,\n duplicates: 'combine',\n ignoreQueryPrefix: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false,\n}\n\nconst parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',')\n }\n\n return val\n}\n\nconst parseValues = function parseQueryStringValues(str, options) {\n const obj = { __proto__: null }\n\n const cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str\n const limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit\n const parts = cleanStr.split(options.delimiter, limit)\n let i\n\n for (i = 0; i < parts.length; ++i) {\n const part = parts[i]\n\n const bracketEqualsPos = part.indexOf(']=')\n const pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1\n\n let key, val\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, 'key')\n val = options.strictNullHandling ? null : ''\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, 'key')\n val = _utils_js__WEBPACK_IMPORTED_MODULE_0__.maybeMap(parseArrayValue(part.slice(pos + 1), options), function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, 'value')\n })\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val\n }\n\n if (options.comma && isArray(val) && val.length > options.arrayLimit) {\n val = _utils_js__WEBPACK_IMPORTED_MODULE_0__.combine([], val, options.arrayLimit, options.plainObjects)\n }\n\n const existing = has.call(obj, key)\n if (existing && options.duplicates === 'combine') {\n obj[key] = _utils_js__WEBPACK_IMPORTED_MODULE_0__.combine(obj[key], val, options.arrayLimit, options.plainObjects)\n } else if (!existing || options.duplicates === 'last') {\n obj[key] = val\n }\n }\n\n return obj\n}\n\nconst parseObject = function (chain, val, options, valuesParsed) {\n let leaf = valuesParsed ? val : parseArrayValue(val, options)\n\n for (let i = chain.length - 1; i >= 0; --i) {\n let obj\n const root = chain[i]\n\n if (root === '[]' && options.parseArrays) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__.isOverflow(leaf)) {\n // leaf is already an overflow object, preserve it\n obj = leaf\n } else {\n obj =\n options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n ? []\n : _utils_js__WEBPACK_IMPORTED_MODULE_0__.combine([], leaf, options.arrayLimit, options.plainObjects)\n }\n } else {\n obj = options.plainObjects ? Object.create(null) : {}\n const cleanRoot =\n root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root\n const decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot\n const index = parseInt(decodedRoot, 10)\n if (!options.parseArrays && decodedRoot === '') {\n obj = { 0: leaf }\n } else if (\n !isNaN(index) &&\n root !== decodedRoot &&\n String(index) === decodedRoot &&\n index >= 0 &&\n options.parseArrays &&\n index <= options.arrayLimit\n ) {\n obj = []\n obj[index] = leaf\n } else if (decodedRoot !== '__proto__') {\n obj[decodedRoot] = leaf\n }\n }\n\n leaf = obj\n }\n\n return leaf\n}\n\nconst parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return\n }\n\n // Transform dot notation to bracket notation\n const key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey\n\n // The regex chunks\n\n const brackets = /(\\[[^[\\]]*])/\n const child = /(\\[[^[\\]]*])/g\n\n // Get the parent\n\n let segment = options.depth > 0 && brackets.exec(key)\n const parent = segment ? key.slice(0, segment.index) : key\n\n // Stash the parent if it exists\n\n const keys = []\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return\n }\n }\n\n keys.push(parent)\n }\n\n // Loop through children appending to the array until we hit depth\n\n let i = 0\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return\n }\n }\n keys.push(segment[1])\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']')\n }\n\n return parseObject(keys, val, options, valuesParsed)\n}\n\nconst normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided')\n }\n\n if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided')\n }\n\n if (\n opts.decoder !== null &&\n typeof opts.decoder !== 'undefined' &&\n typeof opts.decoder !== 'function'\n ) {\n throw new TypeError('Decoder has to be a function.')\n }\n\n const duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates\n\n if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n throw new TypeError('The duplicates option must be either combine, first, or last')\n }\n\n const allowDots =\n typeof opts.allowDots === 'undefined'\n ? opts.decodeDotInKeys === true\n ? true\n : defaults.allowDots\n : !!opts.allowDots\n\n return {\n allowDots: allowDots,\n allowEmptyArrays:\n typeof opts.allowEmptyArrays === 'boolean'\n ? !!opts.allowEmptyArrays\n : defaults.allowEmptyArrays,\n allowPrototypes:\n typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decodeDotInKeys:\n typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter:\n typeof opts.delimiter === 'string' || _utils_js__WEBPACK_IMPORTED_MODULE_0__.isRegExp(opts.delimiter)\n ? opts.delimiter\n : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: typeof opts.depth === 'number' || opts.depth === false ? +opts.depth : defaults.depth,\n duplicates: duplicates,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n parameterLimit:\n typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects:\n typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling:\n typeof opts.strictNullHandling === 'boolean'\n ? opts.strictNullHandling\n : defaults.strictNullHandling,\n }\n}\n\nfunction parse(str, opts) {\n const options = normalizeParseOptions(opts)\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {}\n }\n\n const tempObj = typeof str === 'string' ? parseValues(str, options) : str\n let obj = options.plainObjects ? Object.create(null) : {}\n\n // Iterate over the keys and setup the new object\n\n const keys = Object.keys(tempObj)\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n const newObj = parseKeys(key, tempObj[key], options, typeof str === 'string')\n obj = _utils_js__WEBPACK_IMPORTED_MODULE_0__.merge(obj, newObj, options)\n }\n\n if (options.allowSparse === true) {\n return obj\n }\n\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__.compact(obj)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9xcy1lc21AOC4wLjEvbm9kZV9tb2R1bGVzL3FzLWVzbS9saWIvcGFyc2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBWTs7QUFFWixDQUFtQzs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw2Q0FBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxrQkFBa0I7QUFDaEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLFlBQVksK0NBQWM7QUFDMUI7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSw4Q0FBYTtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLDhDQUFhO0FBQzlCLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDQUFpQyxRQUFRO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLGlEQUFnQjtBQUMxQjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLGNBQWMsOENBQWE7QUFDM0I7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QywrQ0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQSxVQUFVLDRDQUFXO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDhDQUFhO0FBQ3RCIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3FzLWVzbUA4LjAuMS9ub2RlX21vZHVsZXMvcXMtZXNtL2xpYi9wYXJzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscy5qcydcblxuY29uc3QgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIGFsbG93RG90czogZmFsc2UsXG4gIGFsbG93RW1wdHlBcnJheXM6IGZhbHNlLFxuICBhbGxvd1Byb3RvdHlwZXM6IGZhbHNlLFxuICBhbGxvd1NwYXJzZTogZmFsc2UsXG4gIGFycmF5TGltaXQ6IDIwLFxuICBjb21tYTogZmFsc2UsXG4gIGRlY29kZURvdEluS2V5czogZmFsc2UsXG4gIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgZGVsaW1pdGVyOiAnJicsXG4gIGRlcHRoOiA1LFxuICBkdXBsaWNhdGVzOiAnY29tYmluZScsXG4gIGlnbm9yZVF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gIHBhcnNlQXJyYXlzOiB0cnVlLFxuICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlLFxufVxuXG5jb25zdCBwYXJzZUFycmF5VmFsdWUgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICByZXR1cm4gdmFsLnNwbGl0KCcsJylcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuY29uc3QgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICBjb25zdCBvYmogPSB7IF9fcHJvdG9fXzogbnVsbCB9XG5cbiAgY29uc3QgY2xlYW5TdHIgPSBvcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4ID8gc3RyLnJlcGxhY2UoL15cXD8vLCAnJykgOiBzdHJcbiAgY29uc3QgbGltaXQgPSBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMucGFyYW1ldGVyTGltaXRcbiAgY29uc3QgcGFydHMgPSBjbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlciwgbGltaXQpXG4gIGxldCBpXG5cbiAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2ldXG5cbiAgICBjb25zdCBicmFja2V0RXF1YWxzUG9zID0gcGFydC5pbmRleE9mKCddPScpXG4gICAgY29uc3QgcG9zID0gYnJhY2tldEVxdWFsc1BvcyA9PT0gLTEgPyBwYXJ0LmluZGV4T2YoJz0nKSA6IGJyYWNrZXRFcXVhbHNQb3MgKyAxXG5cbiAgICBsZXQga2V5LCB2YWxcbiAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQsIGRlZmF1bHRzLmRlY29kZXIsICdrZXknKVxuICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJydcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UoMCwgcG9zKSwgZGVmYXVsdHMuZGVjb2RlciwgJ2tleScpXG4gICAgICB2YWwgPSB1dGlscy5tYXliZU1hcChwYXJzZUFycmF5VmFsdWUocGFydC5zbGljZShwb3MgKyAxKSwgb3B0aW9ucyksIGZ1bmN0aW9uIChlbmNvZGVkVmFsKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlY29kZXIoZW5jb2RlZFZhbCwgZGVmYXVsdHMuZGVjb2RlciwgJ3ZhbHVlJylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHBhcnQuaW5kZXhPZignW109JykgPiAtMSkge1xuICAgICAgdmFsID0gaXNBcnJheSh2YWwpID8gW3ZhbF0gOiB2YWxcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jb21tYSAmJiBpc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA+IG9wdGlvbnMuYXJyYXlMaW1pdCkge1xuICAgICAgdmFsID0gdXRpbHMuY29tYmluZShbXSwgdmFsLCBvcHRpb25zLmFycmF5TGltaXQsIG9wdGlvbnMucGxhaW5PYmplY3RzKVxuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gaGFzLmNhbGwob2JqLCBrZXkpXG4gICAgaWYgKGV4aXN0aW5nICYmIG9wdGlvbnMuZHVwbGljYXRlcyA9PT0gJ2NvbWJpbmUnKSB7XG4gICAgICBvYmpba2V5XSA9IHV0aWxzLmNvbWJpbmUob2JqW2tleV0sIHZhbCwgb3B0aW9ucy5hcnJheUxpbWl0LCBvcHRpb25zLnBsYWluT2JqZWN0cylcbiAgICB9IGVsc2UgaWYgKCFleGlzdGluZyB8fCBvcHRpb25zLmR1cGxpY2F0ZXMgPT09ICdsYXN0Jykge1xuICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmNvbnN0IHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gKGNoYWluLCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICBsZXQgbGVhZiA9IHZhbHVlc1BhcnNlZCA/IHZhbCA6IHBhcnNlQXJyYXlWYWx1ZSh2YWwsIG9wdGlvbnMpXG5cbiAgZm9yIChsZXQgaSA9IGNoYWluLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgbGV0IG9ialxuICAgIGNvbnN0IHJvb3QgPSBjaGFpbltpXVxuXG4gICAgaWYgKHJvb3QgPT09ICdbXScgJiYgb3B0aW9ucy5wYXJzZUFycmF5cykge1xuICAgICAgaWYgKHV0aWxzLmlzT3ZlcmZsb3cobGVhZikpIHtcbiAgICAgICAgLy8gbGVhZiBpcyBhbHJlYWR5IGFuIG92ZXJmbG93IG9iamVjdCwgcHJlc2VydmUgaXRcbiAgICAgICAgb2JqID0gbGVhZlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID1cbiAgICAgICAgICBvcHRpb25zLmFsbG93RW1wdHlBcnJheXMgJiYgKGxlYWYgPT09ICcnIHx8IChvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyAmJiBsZWFmID09PSBudWxsKSlcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogdXRpbHMuY29tYmluZShbXSwgbGVhZiwgb3B0aW9ucy5hcnJheUxpbWl0LCBvcHRpb25zLnBsYWluT2JqZWN0cylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge31cbiAgICAgIGNvbnN0IGNsZWFuUm9vdCA9XG4gICAgICAgIHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290XG4gICAgICBjb25zdCBkZWNvZGVkUm9vdCA9IG9wdGlvbnMuZGVjb2RlRG90SW5LZXlzID8gY2xlYW5Sb290LnJlcGxhY2UoLyUyRS9nLCAnLicpIDogY2xlYW5Sb290XG4gICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGRlY29kZWRSb290LCAxMClcbiAgICAgIGlmICghb3B0aW9ucy5wYXJzZUFycmF5cyAmJiBkZWNvZGVkUm9vdCA9PT0gJycpIHtcbiAgICAgICAgb2JqID0geyAwOiBsZWFmIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICFpc05hTihpbmRleCkgJiZcbiAgICAgICAgcm9vdCAhPT0gZGVjb2RlZFJvb3QgJiZcbiAgICAgICAgU3RyaW5nKGluZGV4KSA9PT0gZGVjb2RlZFJvb3QgJiZcbiAgICAgICAgaW5kZXggPj0gMCAmJlxuICAgICAgICBvcHRpb25zLnBhcnNlQXJyYXlzICYmXG4gICAgICAgIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdFxuICAgICAgKSB7XG4gICAgICAgIG9iaiA9IFtdXG4gICAgICAgIG9ialtpbmRleF0gPSBsZWFmXG4gICAgICB9IGVsc2UgaWYgKGRlY29kZWRSb290ICE9PSAnX19wcm90b19fJykge1xuICAgICAgICBvYmpbZGVjb2RlZFJvb3RdID0gbGVhZlxuICAgICAgfVxuICAgIH1cblxuICAgIGxlYWYgPSBvYmpcbiAgfVxuXG4gIHJldHVybiBsZWFmXG59XG5cbmNvbnN0IHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICBpZiAoIWdpdmVuS2V5KSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gZG90IG5vdGF0aW9uIHRvIGJyYWNrZXQgbm90YXRpb25cbiAgY29uc3Qga2V5ID0gb3B0aW9ucy5hbGxvd0RvdHMgPyBnaXZlbktleS5yZXBsYWNlKC9cXC4oW14uW10rKS9nLCAnWyQxXScpIDogZ2l2ZW5LZXlcblxuICAvLyBUaGUgcmVnZXggY2h1bmtzXG5cbiAgY29uc3QgYnJhY2tldHMgPSAvKFxcW1teW1xcXV0qXSkvXG4gIGNvbnN0IGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2dcblxuICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gIGxldCBzZWdtZW50ID0gb3B0aW9ucy5kZXB0aCA+IDAgJiYgYnJhY2tldHMuZXhlYyhrZXkpXG4gIGNvbnN0IHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXlcblxuICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gIGNvbnN0IGtleXMgPSBbXVxuICBpZiAocGFyZW50KSB7XG4gICAgLy8gSWYgd2UgYXJlbid0IHVzaW5nIHBsYWluIG9iamVjdHMsIG9wdGlvbmFsbHkgcHJlZml4IGtleXMgdGhhdCB3b3VsZCBvdmVyd3JpdGUgb2JqZWN0IHByb3RvdHlwZSBwcm9wZXJ0aWVzXG4gICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBwYXJlbnQpKSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGtleXMucHVzaChwYXJlbnQpXG4gIH1cblxuICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKG9wdGlvbnMuZGVwdGggPiAwICYmIChzZWdtZW50ID0gY2hpbGQuZXhlYyhrZXkpKSAhPT0gbnVsbCAmJiBpIDwgb3B0aW9ucy5kZXB0aCkge1xuICAgIGkgKz0gMVxuICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc2VnbWVudFsxXS5zbGljZSgxLCAtMSkpKSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBrZXlzLnB1c2goc2VnbWVudFsxXSlcbiAgfVxuXG4gIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICBpZiAoc2VnbWVudCkge1xuICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpXG4gIH1cblxuICByZXR1cm4gcGFyc2VPYmplY3Qoa2V5cywgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpXG59XG5cbmNvbnN0IG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKSB7XG4gIGlmICghb3B0cykge1xuICAgIHJldHVybiBkZWZhdWx0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzLmRlY29kZURvdEluS2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZGVjb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKVxuICB9XG5cbiAgaWYgKFxuICAgIG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiBvcHRzLmRlY29kZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIG9wdHMuZGVjb2RlciAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEZWNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVzID0gdHlwZW9mIG9wdHMuZHVwbGljYXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kdXBsaWNhdGVzIDogb3B0cy5kdXBsaWNhdGVzXG5cbiAgaWYgKGR1cGxpY2F0ZXMgIT09ICdjb21iaW5lJyAmJiBkdXBsaWNhdGVzICE9PSAnZmlyc3QnICYmIGR1cGxpY2F0ZXMgIT09ICdsYXN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBkdXBsaWNhdGVzIG9wdGlvbiBtdXN0IGJlIGVpdGhlciBjb21iaW5lLCBmaXJzdCwgb3IgbGFzdCcpXG4gIH1cblxuICBjb25zdCBhbGxvd0RvdHMgPVxuICAgIHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gb3B0cy5kZWNvZGVEb3RJbktleXMgPT09IHRydWVcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZGVmYXVsdHMuYWxsb3dEb3RzXG4gICAgICA6ICEhb3B0cy5hbGxvd0RvdHNcblxuICByZXR1cm4ge1xuICAgIGFsbG93RG90czogYWxsb3dEb3RzLFxuICAgIGFsbG93RW1wdHlBcnJheXM6XG4gICAgICB0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzID09PSAnYm9vbGVhbidcbiAgICAgICAgPyAhIW9wdHMuYWxsb3dFbXB0eUFycmF5c1xuICAgICAgICA6IGRlZmF1bHRzLmFsbG93RW1wdHlBcnJheXMsXG4gICAgYWxsb3dQcm90b3R5cGVzOlxuICAgICAgdHlwZW9mIG9wdHMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRzLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcyxcbiAgICBhbGxvd1NwYXJzZTogdHlwZW9mIG9wdHMuYWxsb3dTcGFyc2UgPT09ICdib29sZWFuJyA/IG9wdHMuYWxsb3dTcGFyc2UgOiBkZWZhdWx0cy5hbGxvd1NwYXJzZSxcbiAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgZGVjb2RlRG90SW5LZXlzOlxuICAgICAgdHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzID09PSAnYm9vbGVhbicgPyBvcHRzLmRlY29kZURvdEluS2V5cyA6IGRlZmF1bHRzLmRlY29kZURvdEluS2V5cyxcbiAgICBkZWNvZGVyOiB0eXBlb2Ygb3B0cy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcixcbiAgICBkZWxpbWl0ZXI6XG4gICAgICB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdHMuZGVsaW1pdGVyKVxuICAgICAgICA/IG9wdHMuZGVsaW1pdGVyXG4gICAgICAgIDogZGVmYXVsdHMuZGVsaW1pdGVyLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvbiwgbm8tZXh0cmEtcGFyZW5zXG4gICAgZGVwdGg6IHR5cGVvZiBvcHRzLmRlcHRoID09PSAnbnVtYmVyJyB8fCBvcHRzLmRlcHRoID09PSBmYWxzZSA/ICtvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgZHVwbGljYXRlczogZHVwbGljYXRlcyxcbiAgICBpZ25vcmVRdWVyeVByZWZpeDogb3B0cy5pZ25vcmVRdWVyeVByZWZpeCA9PT0gdHJ1ZSxcbiAgICBwYXJhbWV0ZXJMaW1pdDpcbiAgICAgIHR5cGVvZiBvcHRzLnBhcmFtZXRlckxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMucGFyYW1ldGVyTGltaXQgOiBkZWZhdWx0cy5wYXJhbWV0ZXJMaW1pdCxcbiAgICBwYXJzZUFycmF5czogb3B0cy5wYXJzZUFycmF5cyAhPT0gZmFsc2UsXG4gICAgcGxhaW5PYmplY3RzOlxuICAgICAgdHlwZW9mIG9wdHMucGxhaW5PYmplY3RzID09PSAnYm9vbGVhbicgPyBvcHRzLnBsYWluT2JqZWN0cyA6IGRlZmF1bHRzLnBsYWluT2JqZWN0cyxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6XG4gICAgICB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJ1xuICAgICAgICA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgICAgIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShzdHIsIG9wdHMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKVxuXG4gIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fVxuICB9XG5cbiAgY29uc3QgdGVtcE9iaiA9IHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gcGFyc2VWYWx1ZXMoc3RyLCBvcHRpb25zKSA6IHN0clxuICBsZXQgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge31cblxuICAvLyBJdGVyYXRlIG92ZXIgdGhlIGtleXMgYW5kIHNldHVwIHRoZSBuZXcgb2JqZWN0XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRlbXBPYmopXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICBjb25zdCBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMsIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKVxuICAgIG9iaiA9IHV0aWxzLm1lcmdlKG9iaiwgbmV3T2JqLCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuYWxsb3dTcGFyc2UgPT09IHRydWUpIHtcbiAgICByZXR1cm4gb2JqXG4gIH1cblxuICByZXR1cm4gdXRpbHMuY29tcGFjdChvYmopXG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/parse.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/stringify.js": /*!******************************************************************************!*\ !*** ./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/stringify.js ***! \******************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ stringify: () => (/* binding */ stringify)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/utils.js\");\n/* harmony import */ var _formats_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formats.js */ \"(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/formats.js\");\n\n\n;\n\n\nconst has = Object.prototype.hasOwnProperty\n\nconst arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]'\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']'\n },\n repeat: function repeat(prefix) {\n return prefix\n },\n}\n\nconst isArray = Array.isArray\nconst push = Array.prototype.push\nconst pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray])\n}\n\nconst toISO = Date.prototype.toISOString\n\nconst defaultFormat = _formats_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: _utils_js__WEBPACK_IMPORTED_MODULE_1__.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: _formats_js__WEBPACK_IMPORTED_MODULE_0__.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date)\n },\n skipNulls: false,\n strictNullHandling: false,\n}\n\nconst isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return (\n typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint'\n )\n}\n\nconst sentinel = {}\n\nconst _stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n sideChannel,\n) {\n let obj = object\n\n let tmpSc = sideChannel\n let step = 0\n let findFlag = false\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n const pos = tmpSc.get(object)\n step += 1\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value')\n } else {\n findFlag = true // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj)\n } else if (obj instanceof Date) {\n obj = serializeDate(obj)\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = _utils_js__WEBPACK_IMPORTED_MODULE_1__.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value)\n }\n return value\n })\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly\n ? encoder(prefix, defaults.encoder, 'key', format)\n : prefix\n }\n\n obj = ''\n }\n\n if (isNonNullishPrimitive(obj) || _utils_js__WEBPACK_IMPORTED_MODULE_1__.isBuffer(obj)) {\n if (encoder) {\n const keyValue = encodeValuesOnly\n ? prefix\n : encoder(prefix, defaults.encoder, 'key', format)\n return [\n formatter(keyValue) +\n '=' +\n formatter(encoder(obj, defaults.encoder, 'value', format)),\n ]\n }\n return [formatter(prefix) + '=' + formatter(String(obj))]\n }\n\n const values = []\n\n if (typeof obj === 'undefined') {\n return values\n }\n\n let objKeys\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = _utils_js__WEBPACK_IMPORTED_MODULE_1__.maybeMap(obj, encoder)\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]\n } else if (isArray(filter)) {\n objKeys = filter\n } else {\n const keys = Object.keys(obj)\n objKeys = sort ? keys.sort(sort) : keys\n }\n\n const encodedPrefix = encodeDotInKeys ? prefix.replace(/\\./g, '%2E') : prefix\n\n const adjustedPrefix =\n commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix\n\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjustedPrefix + '[]'\n }\n\n for (let j = 0; j < objKeys.length; ++j) {\n const key = objKeys[j]\n const value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]\n\n if (skipNulls && value === null) {\n continue\n }\n\n const encodedKey = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key\n const keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function'\n ? generateArrayPrefix(adjustedPrefix, encodedKey)\n : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']')\n\n sideChannel.set(object, step)\n const valueSideChannel = new WeakMap()\n valueSideChannel.set(sentinel, sideChannel)\n pushToArray(\n values,\n _stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n valueSideChannel,\n ),\n )\n }\n\n return values\n}\n\nconst normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided')\n }\n\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided')\n }\n\n if (\n opts.encoder !== null &&\n typeof opts.encoder !== 'undefined' &&\n typeof opts.encoder !== 'function'\n ) {\n throw new TypeError('Encoder has to be a function.')\n }\n\n let format = _formats_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n if (typeof opts.format !== 'undefined') {\n if (!has.call(_formats_js__WEBPACK_IMPORTED_MODULE_0__.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.')\n }\n format = opts.format\n }\n const formatter = _formats_js__WEBPACK_IMPORTED_MODULE_0__.formatters[format]\n\n let filter = defaults.filter\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter\n }\n\n let arrayFormat\n if (opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat\n } else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat'\n } else {\n arrayFormat = defaults.arrayFormat\n }\n\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent')\n }\n\n const allowDots =\n typeof opts.allowDots === 'undefined'\n ? opts.encodeDotInKeys === true\n ? true\n : defaults.allowDots\n : !!opts.allowDots\n\n return {\n addQueryPrefix:\n typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: allowDots,\n allowEmptyArrays:\n typeof opts.allowEmptyArrays === 'boolean'\n ? !!opts.allowEmptyArrays\n : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n commaRoundTrip: opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys:\n typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly:\n typeof opts.encodeValuesOnly === 'boolean'\n ? opts.encodeValuesOnly\n : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate:\n typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling:\n typeof opts.strictNullHandling === 'boolean'\n ? opts.strictNullHandling\n : defaults.strictNullHandling,\n }\n}\n\nfunction stringify(object, opts) {\n let obj = object\n const options = normalizeStringifyOptions(opts)\n\n let objKeys\n let filter\n\n if (typeof options.filter === 'function') {\n filter = options.filter\n obj = filter('', obj)\n } else if (isArray(options.filter)) {\n filter = options.filter\n objKeys = filter\n }\n\n const keys = []\n\n if (typeof obj !== 'object' || obj === null) {\n return ''\n }\n\n const generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat]\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip\n\n if (!objKeys) {\n objKeys = Object.keys(obj)\n }\n\n if (options.sort) {\n objKeys.sort(options.sort)\n }\n\n const sideChannel = new WeakMap()\n for (let i = 0; i < objKeys.length; ++i) {\n const key = objKeys[i]\n\n if (options.skipNulls && obj[key] === null) {\n continue\n }\n pushToArray(\n keys,\n _stringify(\n obj[key],\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.allowEmptyArrays,\n options.strictNullHandling,\n options.skipNulls,\n options.encodeDotInKeys,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n sideChannel,\n ),\n )\n }\n\n const joined = keys.join(options.delimiter)\n const prefix = options.addQueryPrefix === true ? '?' : ''\n\n return joined.length > 0 ? prefix + joined : ''\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9xcy1lc21AOC4wLjEvbm9kZV9tb2R1bGVzL3FzLWVzbS9saWIvc3RyaW5naWZ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFZOztBQUVaLENBQW1DO0FBQ0k7O0FBRXZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNCQUFzQixtREFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNkNBQVk7QUFDdkI7QUFDQTtBQUNBLGFBQWEsbURBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKLFVBQVUsK0NBQWM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0NBQW9DLCtDQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtDQUFjO0FBQzFCO0FBQ0EsaUJBQWlCLGdFQUFnRTtBQUNqRixJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixvQkFBb0I7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsbURBQWtCO0FBQ2pDO0FBQ0Esa0JBQWtCLG1EQUFrQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtREFBa0I7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0Isb0JBQW9CO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyIvVXNlcnMvbWFyY21pbnRlbC9Qcm9qZWN0cy9lLXRpYi5jb20vbm9kZV9tb2R1bGVzLy5wbnBtL3FzLWVzbUA4LjAuMS9ub2RlX21vZHVsZXMvcXMtZXNtL2xpYi9zdHJpbmdpZnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMuanMnXG5pbXBvcnQgKiBhcyBmb3JtYXRzIGZyb20gJy4vZm9ybWF0cy5qcydcblxuY29uc3QgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuXG5jb25zdCBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gIGJyYWNrZXRzOiBmdW5jdGlvbiBicmFja2V0cyhwcmVmaXgpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ1tdJ1xuICB9LFxuICBjb21tYTogJ2NvbW1hJyxcbiAgaW5kaWNlczogZnVuY3Rpb24gaW5kaWNlcyhwcmVmaXgsIGtleSkge1xuICAgIHJldHVybiBwcmVmaXggKyAnWycgKyBrZXkgKyAnXSdcbiAgfSxcbiAgcmVwZWF0OiBmdW5jdGlvbiByZXBlYXQocHJlZml4KSB7XG4gICAgcmV0dXJuIHByZWZpeFxuICB9LFxufVxuXG5jb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuY29uc3QgcHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoXG5jb25zdCBwdXNoVG9BcnJheSA9IGZ1bmN0aW9uIChhcnIsIHZhbHVlT3JBcnJheSkge1xuICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pXG59XG5cbmNvbnN0IHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcblxuY29uc3QgZGVmYXVsdEZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXVxuY29uc3QgZGVmYXVsdHMgPSB7XG4gIGFkZFF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgYWxsb3dFbXB0eUFycmF5czogZmFsc2UsXG4gIGFycmF5Rm9ybWF0OiAnaW5kaWNlcycsXG4gIGRlbGltaXRlcjogJyYnLFxuICBlbmNvZGU6IHRydWUsXG4gIGVuY29kZURvdEluS2V5czogZmFsc2UsXG4gIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgZW5jb2RlVmFsdWVzT25seTogZmFsc2UsXG4gIGZvcm1hdDogZGVmYXVsdEZvcm1hdCxcbiAgZm9ybWF0dGVyOiBmb3JtYXRzLmZvcm1hdHRlcnNbZGVmYXVsdEZvcm1hdF0sXG4gIC8vIGRlcHJlY2F0ZWRcbiAgaW5kaWNlczogZmFsc2UsXG4gIHNlcmlhbGl6ZURhdGU6IGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGUoZGF0ZSkge1xuICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpXG4gIH0sXG4gIHNraXBOdWxsczogZmFsc2UsXG4gIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2UsXG59XG5cbmNvbnN0IGlzTm9uTnVsbGlzaFByaW1pdGl2ZSA9IGZ1bmN0aW9uIGlzTm9uTnVsbGlzaFByaW1pdGl2ZSh2KSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHYgPT09ICdudW1iZXInIHx8XG4gICAgdHlwZW9mIHYgPT09ICdib29sZWFuJyB8fFxuICAgIHR5cGVvZiB2ID09PSAnc3ltYm9sJyB8fFxuICAgIHR5cGVvZiB2ID09PSAnYmlnaW50J1xuICApXG59XG5cbmNvbnN0IHNlbnRpbmVsID0ge31cblxuY29uc3QgX3N0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgb2JqZWN0LFxuICBwcmVmaXgsXG4gIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gIGNvbW1hUm91bmRUcmlwLFxuICBhbGxvd0VtcHR5QXJyYXlzLFxuICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gIHNraXBOdWxscyxcbiAgZW5jb2RlRG90SW5LZXlzLFxuICBlbmNvZGVyLFxuICBmaWx0ZXIsXG4gIHNvcnQsXG4gIGFsbG93RG90cyxcbiAgc2VyaWFsaXplRGF0ZSxcbiAgZm9ybWF0LFxuICBmb3JtYXR0ZXIsXG4gIGVuY29kZVZhbHVlc09ubHksXG4gIHNpZGVDaGFubmVsLFxuKSB7XG4gIGxldCBvYmogPSBvYmplY3RcblxuICBsZXQgdG1wU2MgPSBzaWRlQ2hhbm5lbFxuICBsZXQgc3RlcCA9IDBcbiAgbGV0IGZpbmRGbGFnID0gZmFsc2VcbiAgd2hpbGUgKCh0bXBTYyA9IHRtcFNjLmdldChzZW50aW5lbCkpICE9PSB2b2lkIHVuZGVmaW5lZCAmJiAhZmluZEZsYWcpIHtcbiAgICAvLyBXaGVyZSBvYmplY3QgbGFzdCBhcHBlYXJlZCBpbiB0aGUgcmVmIHRyZWVcbiAgICBjb25zdCBwb3MgPSB0bXBTYy5nZXQob2JqZWN0KVxuICAgIHN0ZXAgKz0gMVxuICAgIGlmICh0eXBlb2YgcG9zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHBvcyA9PT0gc3RlcCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ3ljbGljIG9iamVjdCB2YWx1ZScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5kRmxhZyA9IHRydWUgLy8gQnJlYWsgd2hpbGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0bXBTYy5nZXQoc2VudGluZWwpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgc3RlcCA9IDBcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9iaiA9IGZpbHRlcihwcmVmaXgsIG9iailcbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopXG4gIH0gZWxzZSBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICBvYmogPSB1dGlscy5tYXliZU1hcChvYmosIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0pXG4gIH1cblxuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHlcbiAgICAgICAgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgJ2tleScsIGZvcm1hdClcbiAgICAgICAgOiBwcmVmaXhcbiAgICB9XG5cbiAgICBvYmogPSAnJ1xuICB9XG5cbiAgaWYgKGlzTm9uTnVsbGlzaFByaW1pdGl2ZShvYmopIHx8IHV0aWxzLmlzQnVmZmVyKG9iaikpIHtcbiAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgY29uc3Qga2V5VmFsdWUgPSBlbmNvZGVWYWx1ZXNPbmx5XG4gICAgICAgID8gcHJlZml4XG4gICAgICAgIDogZW5jb2RlcihwcmVmaXgsIGRlZmF1bHRzLmVuY29kZXIsICdrZXknLCBmb3JtYXQpXG4gICAgICByZXR1cm4gW1xuICAgICAgICBmb3JtYXR0ZXIoa2V5VmFsdWUpICtcbiAgICAgICAgICAnPScgK1xuICAgICAgICAgIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgJ3ZhbHVlJywgZm9ybWF0KSksXG4gICAgICBdXG4gICAgfVxuICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXVxuICB9XG5cbiAgY29uc3QgdmFsdWVzID0gW11cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdmFsdWVzXG4gIH1cblxuICBsZXQgb2JqS2V5c1xuICBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAvLyB3ZSBuZWVkIHRvIGpvaW4gZWxlbWVudHMgaW5cbiAgICBpZiAoZW5jb2RlVmFsdWVzT25seSAmJiBlbmNvZGVyKSB7XG4gICAgICBvYmogPSB1dGlscy5tYXliZU1hcChvYmosIGVuY29kZXIpXG4gICAgfVxuICAgIG9iaktleXMgPSBbeyB2YWx1ZTogb2JqLmxlbmd0aCA+IDAgPyBvYmouam9pbignLCcpIHx8IG51bGwgOiB2b2lkIHVuZGVmaW5lZCB9XVxuICB9IGVsc2UgaWYgKGlzQXJyYXkoZmlsdGVyKSkge1xuICAgIG9iaktleXMgPSBmaWx0ZXJcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKVxuICAgIG9iaktleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5c1xuICB9XG5cbiAgY29uc3QgZW5jb2RlZFByZWZpeCA9IGVuY29kZURvdEluS2V5cyA/IHByZWZpeC5yZXBsYWNlKC9cXC4vZywgJyUyRScpIDogcHJlZml4XG5cbiAgY29uc3QgYWRqdXN0ZWRQcmVmaXggPVxuICAgIGNvbW1hUm91bmRUcmlwICYmIGlzQXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAxID8gZW5jb2RlZFByZWZpeCArICdbXScgOiBlbmNvZGVkUHJlZml4XG5cbiAgaWYgKGFsbG93RW1wdHlBcnJheXMgJiYgaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYWRqdXN0ZWRQcmVmaXggKyAnW10nXG4gIH1cblxuICBmb3IgKGxldCBqID0gMDsgaiA8IG9iaktleXMubGVuZ3RoOyArK2opIHtcbiAgICBjb25zdCBrZXkgPSBvYmpLZXlzW2pdXG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Yga2V5LnZhbHVlICE9PSAndW5kZWZpbmVkJyA/IGtleS52YWx1ZSA6IG9ialtrZXldXG5cbiAgICBpZiAoc2tpcE51bGxzICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGVuY29kZWRLZXkgPSBhbGxvd0RvdHMgJiYgZW5jb2RlRG90SW5LZXlzID8ga2V5LnJlcGxhY2UoL1xcLi9nLCAnJTJFJykgOiBrZXlcbiAgICBjb25zdCBrZXlQcmVmaXggPSBpc0FycmF5KG9iailcbiAgICAgID8gdHlwZW9mIGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBnZW5lcmF0ZUFycmF5UHJlZml4KGFkanVzdGVkUHJlZml4LCBlbmNvZGVkS2V5KVxuICAgICAgICA6IGFkanVzdGVkUHJlZml4XG4gICAgICA6IGFkanVzdGVkUHJlZml4ICsgKGFsbG93RG90cyA/ICcuJyArIGVuY29kZWRLZXkgOiAnWycgKyBlbmNvZGVkS2V5ICsgJ10nKVxuXG4gICAgc2lkZUNoYW5uZWwuc2V0KG9iamVjdCwgc3RlcClcbiAgICBjb25zdCB2YWx1ZVNpZGVDaGFubmVsID0gbmV3IFdlYWtNYXAoKVxuICAgIHZhbHVlU2lkZUNoYW5uZWwuc2V0KHNlbnRpbmVsLCBzaWRlQ2hhbm5lbClcbiAgICBwdXNoVG9BcnJheShcbiAgICAgIHZhbHVlcyxcbiAgICAgIF9zdHJpbmdpZnkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBrZXlQcmVmaXgsXG4gICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgIGNvbW1hUm91bmRUcmlwLFxuICAgICAgICBhbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgIHNraXBOdWxscyxcbiAgICAgICAgZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGVuY29kZVZhbHVlc09ubHkgJiYgaXNBcnJheShvYmopID8gbnVsbCA6IGVuY29kZXIsXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc29ydCxcbiAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICBzZXJpYWxpemVEYXRlLFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgdmFsdWVTaWRlQ2hhbm5lbCxcbiAgICAgICksXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5jb25zdCBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKSB7XG4gIGlmICghb3B0cykge1xuICAgIHJldHVybiBkZWZhdWx0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZW5jb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKVxuICB9XG5cbiAgaWYgKFxuICAgIG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBsZXQgZm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddXG4gIGlmICh0eXBlb2Ygb3B0cy5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCFoYXMuY2FsbChmb3JtYXRzLmZvcm1hdHRlcnMsIG9wdHMuZm9ybWF0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLicpXG4gICAgfVxuICAgIGZvcm1hdCA9IG9wdHMuZm9ybWF0XG4gIH1cbiAgY29uc3QgZm9ybWF0dGVyID0gZm9ybWF0cy5mb3JtYXR0ZXJzW2Zvcm1hdF1cblxuICBsZXQgZmlsdGVyID0gZGVmYXVsdHMuZmlsdGVyXG4gIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicgfHwgaXNBcnJheShvcHRzLmZpbHRlcikpIHtcbiAgICBmaWx0ZXIgPSBvcHRzLmZpbHRlclxuICB9XG5cbiAgbGV0IGFycmF5Rm9ybWF0XG4gIGlmIChvcHRzLmFycmF5Rm9ybWF0IGluIGFycmF5UHJlZml4R2VuZXJhdG9ycykge1xuICAgIGFycmF5Rm9ybWF0ID0gb3B0cy5hcnJheUZvcm1hdFxuICB9IGVsc2UgaWYgKCdpbmRpY2VzJyBpbiBvcHRzKSB7XG4gICAgYXJyYXlGb3JtYXQgPSBvcHRzLmluZGljZXMgPyAnaW5kaWNlcycgOiAncmVwZWF0J1xuICB9IGVsc2Uge1xuICAgIGFycmF5Rm9ybWF0ID0gZGVmYXVsdHMuYXJyYXlGb3JtYXRcbiAgfVxuXG4gIGlmICgnY29tbWFSb3VuZFRyaXAnIGluIG9wdHMgJiYgdHlwZW9mIG9wdHMuY29tbWFSb3VuZFRyaXAgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Bjb21tYVJvdW5kVHJpcGAgbXVzdCBiZSBhIGJvb2xlYW4sIG9yIGFic2VudCcpXG4gIH1cblxuICBjb25zdCBhbGxvd0RvdHMgPVxuICAgIHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gb3B0cy5lbmNvZGVEb3RJbktleXMgPT09IHRydWVcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZGVmYXVsdHMuYWxsb3dEb3RzXG4gICAgICA6ICEhb3B0cy5hbGxvd0RvdHNcblxuICByZXR1cm4ge1xuICAgIGFkZFF1ZXJ5UHJlZml4OlxuICAgICAgdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICBhbGxvd0RvdHM6IGFsbG93RG90cyxcbiAgICBhbGxvd0VtcHR5QXJyYXlzOlxuICAgICAgdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gISFvcHRzLmFsbG93RW1wdHlBcnJheXNcbiAgICAgICAgOiBkZWZhdWx0cy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgIGFycmF5Rm9ybWF0OiBhcnJheUZvcm1hdCxcbiAgICBjb21tYVJvdW5kVHJpcDogb3B0cy5jb21tYVJvdW5kVHJpcCxcbiAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICBlbmNvZGU6IHR5cGVvZiBvcHRzLmVuY29kZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGUgOiBkZWZhdWx0cy5lbmNvZGUsXG4gICAgZW5jb2RlRG90SW5LZXlzOlxuICAgICAgdHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZURvdEluS2V5cyA6IGRlZmF1bHRzLmVuY29kZURvdEluS2V5cyxcbiAgICBlbmNvZGVyOiB0eXBlb2Ygb3B0cy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcixcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OlxuICAgICAgdHlwZW9mIG9wdHMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gb3B0cy5lbmNvZGVWYWx1ZXNPbmx5XG4gICAgICAgIDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seSxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICBzZXJpYWxpemVEYXRlOlxuICAgICAgdHlwZW9mIG9wdHMuc2VyaWFsaXplRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuc2VyaWFsaXplRGF0ZSA6IGRlZmF1bHRzLnNlcmlhbGl6ZURhdGUsXG4gICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgIHNvcnQ6IHR5cGVvZiBvcHRzLnNvcnQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNvcnQgOiBudWxsLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzpcbiAgICAgIHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICAgICAgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmcsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeShvYmplY3QsIG9wdHMpIHtcbiAgbGV0IG9iaiA9IG9iamVjdFxuICBjb25zdCBvcHRpb25zID0gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKVxuXG4gIGxldCBvYmpLZXlzXG4gIGxldCBmaWx0ZXJcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXJcbiAgICBvYmogPSBmaWx0ZXIoJycsIG9iailcbiAgfSBlbHNlIGlmIChpc0FycmF5KG9wdGlvbnMuZmlsdGVyKSkge1xuICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyXG4gICAgb2JqS2V5cyA9IGZpbHRlclxuICB9XG5cbiAgY29uc3Qga2V5cyA9IFtdXG5cbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgY29uc3QgZ2VuZXJhdGVBcnJheVByZWZpeCA9IGFycmF5UHJlZml4R2VuZXJhdG9yc1tvcHRpb25zLmFycmF5Rm9ybWF0XVxuICBjb25zdCBjb21tYVJvdW5kVHJpcCA9IGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgb3B0aW9ucy5jb21tYVJvdW5kVHJpcFxuXG4gIGlmICghb2JqS2V5cykge1xuICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyhvYmopXG4gIH1cblxuICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgb2JqS2V5cy5zb3J0KG9wdGlvbnMuc29ydClcbiAgfVxuXG4gIGNvbnN0IHNpZGVDaGFubmVsID0gbmV3IFdlYWtNYXAoKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBrZXkgPSBvYmpLZXlzW2ldXG5cbiAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHB1c2hUb0FycmF5KFxuICAgICAga2V5cyxcbiAgICAgIF9zdHJpbmdpZnkoXG4gICAgICAgIG9ialtrZXldLFxuICAgICAgICBrZXksXG4gICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgIGNvbW1hUm91bmRUcmlwLFxuICAgICAgICBvcHRpb25zLmFsbG93RW1wdHlBcnJheXMsXG4gICAgICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICBvcHRpb25zLnNraXBOdWxscyxcbiAgICAgICAgb3B0aW9ucy5lbmNvZGVEb3RJbktleXMsXG4gICAgICAgIG9wdGlvbnMuZW5jb2RlID8gb3B0aW9ucy5lbmNvZGVyIDogbnVsbCxcbiAgICAgICAgb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgIG9wdGlvbnMuc29ydCxcbiAgICAgICAgb3B0aW9ucy5hbGxvd0RvdHMsXG4gICAgICAgIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgb3B0aW9ucy5mb3JtYXQsXG4gICAgICAgIG9wdGlvbnMuZm9ybWF0dGVyLFxuICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgIHNpZGVDaGFubmVsLFxuICAgICAgKSxcbiAgICApXG4gIH1cblxuICBjb25zdCBqb2luZWQgPSBrZXlzLmpvaW4ob3B0aW9ucy5kZWxpbWl0ZXIpXG4gIGNvbnN0IHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJ1xuXG4gIHJldHVybiBqb2luZWQubGVuZ3RoID4gMCA/IHByZWZpeCArIGpvaW5lZCA6ICcnXG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/stringify.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/utils.js": /*!**************************************************************************!*\ !*** ./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/utils.js ***! \**************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ arrayToObject: () => (/* binding */ arrayToObject),\n/* harmony export */ assign: () => (/* binding */ assign),\n/* harmony export */ combine: () => (/* binding */ combine),\n/* harmony export */ compact: () => (/* binding */ compact),\n/* harmony export */ decode: () => (/* binding */ decode),\n/* harmony export */ encode: () => (/* binding */ encode),\n/* harmony export */ isBuffer: () => (/* binding */ isBuffer),\n/* harmony export */ isOverflow: () => (/* binding */ isOverflow),\n/* harmony export */ isRegExp: () => (/* binding */ isRegExp),\n/* harmony export */ maybeMap: () => (/* binding */ maybeMap),\n/* harmony export */ merge: () => (/* binding */ merge)\n/* harmony export */ });\n/* harmony import */ var _formats_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formats.js */ \"(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/formats.js\");\n\n\n;\n\nconst has = Object.prototype.hasOwnProperty\nconst isArray = Array.isArray\n\nconst overflowChannel = new WeakMap()\n\nvar markOverflow = function markOverflow(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex)\n return obj\n}\n\nfunction isOverflow(obj) {\n return overflowChannel.has(obj)\n}\n\nvar getMaxIndex = function getMaxIndex(obj) {\n return overflowChannel.get(obj)\n}\n\nvar setMaxIndex = function setMaxIndex(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex)\n}\n\nconst hexTable = (function () {\n const array = []\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase())\n }\n\n return array\n})()\n\nconst compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n const item = queue.pop()\n const obj = item.obj[item.prop]\n\n if (isArray(obj)) {\n const compacted = []\n\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j])\n }\n }\n\n item.obj[item.prop] = compacted\n }\n }\n}\n\nconst arrayToObject = function arrayToObject(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {}\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i]\n }\n }\n\n return obj\n}\n\nconst merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source)\n } else if (target && typeof target === 'object') {\n if (isOverflow(target)) {\n // Add at next numeric index for overflow objects\n var newIndex = getMaxIndex(target) + 1\n target[newIndex] = source\n setMaxIndex(target, newIndex)\n } else if (\n (options && (options.plainObjects || options.allowPrototypes)) ||\n !has.call(Object.prototype, source)\n ) {\n target[source] = true\n }\n } else {\n return [target, source]\n }\n\n return target\n }\n\n if (!target || typeof target !== 'object') {\n if (isOverflow(source)) {\n // Create new object with target at 0, source values shifted by 1\n var sourceKeys = Object.keys(source)\n var result = options && options.plainObjects ? { __proto__: null, 0: target } : { 0: target }\n for (var m = 0; m < sourceKeys.length; m++) {\n var oldKey = parseInt(sourceKeys[m], 10)\n result[oldKey + 1] = source[sourceKeys[m]]\n }\n return markOverflow(result, getMaxIndex(source) + 1)\n }\n return [target].concat(source)\n }\n\n let mergeTarget = target\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options)\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n const targetItem = target[i]\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options)\n } else {\n target.push(item)\n }\n } else {\n target[i] = item\n }\n })\n return target\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key]\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options)\n } else {\n acc[key] = value\n }\n return acc\n }, mergeTarget)\n}\n\nconst assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key]\n return acc\n }, target)\n}\n\nconst decode = function (str) {\n const strWithoutPlus = str.replace(/\\+/g, ' ')\n try {\n return decodeURIComponent(strWithoutPlus)\n } catch (e) {\n return strWithoutPlus\n }\n}\n\nconst limit = 1024\n\nconst encode = function encode(str, _defaultEncoder, _kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str\n }\n\n let string = str\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str)\n } else if (typeof str !== 'string') {\n string = String(str)\n }\n\n let out = ''\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string\n const arr = []\n\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i)\n if (\n c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === _formats_js__WEBPACK_IMPORTED_MODULE_0__.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i)\n continue\n }\n\n if (c < 0x80) {\n arr[arr.length] = hexTable[c]\n continue\n }\n\n if (c < 0x800) {\n arr[arr.length] = hexTable[0xc0 | (c >> 6)] + hexTable[0x80 | (c & 0x3f)]\n continue\n }\n\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hexTable[0xe0 | (c >> 12)] +\n hexTable[0x80 | ((c >> 6) & 0x3f)] +\n hexTable[0x80 | (c & 0x3f)]\n continue\n }\n\n i += 1\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff))\n\n arr[arr.length] =\n hexTable[0xf0 | (c >> 18)] +\n hexTable[0x80 | ((c >> 12) & 0x3f)] +\n hexTable[0x80 | ((c >> 6) & 0x3f)] +\n hexTable[0x80 | (c & 0x3f)]\n }\n\n out += arr.join('')\n }\n\n return out\n}\n\nconst compact = function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }]\n const refs = []\n\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i]\n const obj = item.obj[item.prop]\n\n const keys = Object.keys(obj)\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j]\n const val = obj[key]\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key })\n refs.push(val)\n }\n }\n }\n\n compactQueue(queue)\n\n return value\n}\n\nconst isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]'\n}\n\nconst isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj))\n}\n\nconst combine = function combine(a, b, arrayLimit, plainObjects) {\n // If 'a' is already an overflow object, add to it\n if (isOverflow(a)) {\n var newIndex = getMaxIndex(a) + 1\n a[newIndex] = b\n setMaxIndex(a, newIndex)\n return a\n }\n\n var result = [].concat(a, b)\n if (result.length > arrayLimit) {\n return markOverflow(arrayToObject(result, { plainObjects: plainObjects }), result.length - 1)\n }\n return result\n}\n\nconst maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n const mapped = []\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]))\n }\n return mapped\n }\n return fn(val)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9xcy1lc21AOC4wLjEvbm9kZV9tb2R1bGVzL3FzLWVzbS9saWIvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQVk7O0FBRVosQ0FBdUM7O0FBRXZDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsNkJBQTZCLElBQUk7QUFDeEYsc0JBQXNCLHVCQUF1QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBOztBQUVBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdEQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQLG1CQUFtQixPQUFPLFVBQVUsYUFBYTtBQUNqRDs7QUFFQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixxQkFBcUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0QsNEJBQTRCO0FBQzVFO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9xcy1lc21AOC4wLjEvbm9kZV9tb2R1bGVzL3FzLWVzbS9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCAqIGFzIGZvcm1hdHMgZnJvbSAnLi9mb3JtYXRzLmpzJ1xuXG5jb25zdCBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG5jb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5jb25zdCBvdmVyZmxvd0NoYW5uZWwgPSBuZXcgV2Vha01hcCgpXG5cbnZhciBtYXJrT3ZlcmZsb3cgPSBmdW5jdGlvbiBtYXJrT3ZlcmZsb3cob2JqLCBtYXhJbmRleCkge1xuICBvdmVyZmxvd0NoYW5uZWwuc2V0KG9iaiwgbWF4SW5kZXgpXG4gIHJldHVybiBvYmpcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT3ZlcmZsb3cob2JqKSB7XG4gIHJldHVybiBvdmVyZmxvd0NoYW5uZWwuaGFzKG9iailcbn1cblxudmFyIGdldE1heEluZGV4ID0gZnVuY3Rpb24gZ2V0TWF4SW5kZXgob2JqKSB7XG4gIHJldHVybiBvdmVyZmxvd0NoYW5uZWwuZ2V0KG9iailcbn1cblxudmFyIHNldE1heEluZGV4ID0gZnVuY3Rpb24gc2V0TWF4SW5kZXgob2JqLCBtYXhJbmRleCkge1xuICBvdmVyZmxvd0NoYW5uZWwuc2V0KG9iaiwgbWF4SW5kZXgpXG59XG5cbmNvbnN0IGhleFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYXJyYXkgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKVxuICB9XG5cbiAgcmV0dXJuIGFycmF5XG59KSgpXG5cbmNvbnN0IGNvbXBhY3RRdWV1ZSA9IGZ1bmN0aW9uIGNvbXBhY3RRdWV1ZShxdWV1ZSkge1xuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5wb3AoKVxuICAgIGNvbnN0IG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF1cblxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgIGNvbnN0IGNvbXBhY3RlZCA9IFtdXG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb2JqLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2pdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbXBhY3RlZC5wdXNoKG9ialtqXSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpdGVtLm9ialtpdGVtLnByb3BdID0gY29tcGFjdGVkXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgY29uc3Qgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb2JqW2ldID0gc291cmNlW2ldXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbiAgaWYgKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gdGFyZ2V0XG4gIH1cblxuICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICB0YXJnZXQucHVzaChzb3VyY2UpXG4gICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc092ZXJmbG93KHRhcmdldCkpIHtcbiAgICAgICAgLy8gQWRkIGF0IG5leHQgbnVtZXJpYyBpbmRleCBmb3Igb3ZlcmZsb3cgb2JqZWN0c1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBnZXRNYXhJbmRleCh0YXJnZXQpICsgMVxuICAgICAgICB0YXJnZXRbbmV3SW5kZXhdID0gc291cmNlXG4gICAgICAgIHNldE1heEluZGV4KHRhcmdldCwgbmV3SW5kZXgpXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAob3B0aW9ucyAmJiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpKSB8fFxuICAgICAgICAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKVxuICAgICAgKSB7XG4gICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRcbiAgfVxuXG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgaWYgKGlzT3ZlcmZsb3coc291cmNlKSkge1xuICAgICAgLy8gQ3JlYXRlIG5ldyBvYmplY3Qgd2l0aCB0YXJnZXQgYXQgMCwgc291cmNlIHZhbHVlcyBzaGlmdGVkIGJ5IDFcbiAgICAgIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKVxuICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wbGFpbk9iamVjdHMgPyB7IF9fcHJvdG9fXzogbnVsbCwgMDogdGFyZ2V0IH0gOiB7IDA6IHRhcmdldCB9XG4gICAgICBmb3IgKHZhciBtID0gMDsgbSA8IHNvdXJjZUtleXMubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgdmFyIG9sZEtleSA9IHBhcnNlSW50KHNvdXJjZUtleXNbbV0sIDEwKVxuICAgICAgICByZXN1bHRbb2xkS2V5ICsgMV0gPSBzb3VyY2Vbc291cmNlS2V5c1ttXV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXJrT3ZlcmZsb3cocmVzdWx0LCBnZXRNYXhJbmRleChzb3VyY2UpICsgMSlcbiAgICB9XG4gICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpXG4gIH1cblxuICBsZXQgbWVyZ2VUYXJnZXQgPSB0YXJnZXRcbiAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiAhaXNBcnJheShzb3VyY2UpKSB7XG4gICAgbWVyZ2VUYXJnZXQgPSBhcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucylcbiAgfVxuXG4gIGlmIChpc0FycmF5KHRhcmdldCkgJiYgaXNBcnJheShzb3VyY2UpKSB7XG4gICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEl0ZW0gPSB0YXJnZXRbaV1cbiAgICAgICAgaWYgKHRhcmdldEl0ZW0gJiYgdHlwZW9mIHRhcmdldEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGFyZ2V0W2ldID0gbWVyZ2UodGFyZ2V0SXRlbSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXQucHVzaChpdGVtKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbaV0gPSBpdGVtXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdGFyZ2V0XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2Vba2V5XVxuXG4gICAgaWYgKGhhcy5jYWxsKGFjYywga2V5KSkge1xuICAgICAgYWNjW2tleV0gPSBtZXJnZShhY2Nba2V5XSwgdmFsdWUsIG9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1trZXldID0gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGFjY1xuICB9LCBtZXJnZVRhcmdldClcbn1cblxuZXhwb3J0IGNvbnN0IGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnblNpbmdsZVNvdXJjZSh0YXJnZXQsIHNvdXJjZSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgYWNjW2tleV0gPSBzb3VyY2Vba2V5XVxuICAgIHJldHVybiBhY2NcbiAgfSwgdGFyZ2V0KVxufVxuXG5leHBvcnQgY29uc3QgZGVjb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICBjb25zdCBzdHJXaXRob3V0UGx1cyA9IHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyV2l0aG91dFBsdXMpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gc3RyV2l0aG91dFBsdXNcbiAgfVxufVxuXG5jb25zdCBsaW1pdCA9IDEwMjRcblxuZXhwb3J0IGNvbnN0IGVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHIsIF9kZWZhdWx0RW5jb2RlciwgX2tpbmQsIGZvcm1hdCkge1xuICAvLyBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBCcmlhbiBXaGl0ZSAobXNjZGV4KSBmb3IgdGhlIGlvLmpzIGNvcmUgcXVlcnlzdHJpbmcgbGlicmFyeS5cbiAgLy8gSXQgaGFzIGJlZW4gYWRhcHRlZCBoZXJlIGZvciBzdHJpY3RlciBhZGhlcmVuY2UgdG8gUkZDIDM5ODZcbiAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cblxuICBsZXQgc3RyaW5nID0gc3RyXG4gIGlmICh0eXBlb2Ygc3RyID09PSAnc3ltYm9sJykge1xuICAgIHN0cmluZyA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSBTdHJpbmcoc3RyKVxuICB9XG5cbiAgbGV0IG91dCA9ICcnXG4gIGZvciAobGV0IGogPSAwOyBqIDwgc3RyaW5nLmxlbmd0aDsgaiArPSBsaW1pdCkge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzdHJpbmcubGVuZ3RoID49IGxpbWl0ID8gc3RyaW5nLnNsaWNlKGosIGogKyBsaW1pdCkgOiBzdHJpbmdcbiAgICBjb25zdCBhcnIgPSBbXVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZXQgYyA9IHNlZ21lbnQuY2hhckNvZGVBdChpKVxuICAgICAgaWYgKFxuICAgICAgICBjID09PSAweDJkIHx8IC8vIC1cbiAgICAgICAgYyA9PT0gMHgyZSB8fCAvLyAuXG4gICAgICAgIGMgPT09IDB4NWYgfHwgLy8gX1xuICAgICAgICBjID09PSAweDdlIHx8IC8vIH5cbiAgICAgICAgKGMgPj0gMHgzMCAmJiBjIDw9IDB4MzkpIHx8IC8vIDAtOVxuICAgICAgICAoYyA+PSAweDQxICYmIGMgPD0gMHg1YSkgfHwgLy8gYS16XG4gICAgICAgIChjID49IDB4NjEgJiYgYyA8PSAweDdhKSB8fCAvLyBBLVpcbiAgICAgICAgKGZvcm1hdCA9PT0gZm9ybWF0cy5SRkMxNzM4ICYmIChjID09PSAweDI4IHx8IGMgPT09IDB4MjkpKSAvLyAoIClcbiAgICAgICkge1xuICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBzZWdtZW50LmNoYXJBdChpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4VGFibGVbY11cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweGMwIHwgKGMgPj4gNildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzZildXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChjIDwgMHhkODAwIHx8IGMgPj0gMHhlMDAwKSB7XG4gICAgICAgIGFyclthcnIubGVuZ3RoXSA9XG4gICAgICAgICAgaGV4VGFibGVbMHhlMCB8IChjID4+IDEyKV0gK1xuICAgICAgICAgIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNmKV0gK1xuICAgICAgICAgIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M2YpXVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpICs9IDFcbiAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAmIDB4M2ZmKSA8PCAxMCkgfCAoc2VnbWVudC5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKVxuXG4gICAgICBhcnJbYXJyLmxlbmd0aF0gPVxuICAgICAgICBoZXhUYWJsZVsweGYwIHwgKGMgPj4gMTgpXSArXG4gICAgICAgIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gMTIpICYgMHgzZildICtcbiAgICAgICAgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpXSArXG4gICAgICAgIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M2YpXVxuICAgIH1cblxuICAgIG91dCArPSBhcnIuam9pbignJylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gIGNvbnN0IHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XVxuICBjb25zdCByZWZzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgaXRlbSA9IHF1ZXVlW2ldXG4gICAgY29uc3Qgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iailcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbal1cbiAgICAgIGNvbnN0IHZhbCA9IG9ialtrZXldXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICBxdWV1ZS5wdXNoKHsgb2JqOiBvYmosIHByb3A6IGtleSB9KVxuICAgICAgICByZWZzLnB1c2godmFsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbXBhY3RRdWV1ZShxdWV1ZSlcblxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGNvbnN0IGlzUmVnRXhwID0gZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcbn1cblxuZXhwb3J0IGNvbnN0IGlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIob2JqKSB7XG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gISEob2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKSlcbn1cblxuZXhwb3J0IGNvbnN0IGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIsIGFycmF5TGltaXQsIHBsYWluT2JqZWN0cykge1xuICAvLyBJZiAnYScgaXMgYWxyZWFkeSBhbiBvdmVyZmxvdyBvYmplY3QsIGFkZCB0byBpdFxuICBpZiAoaXNPdmVyZmxvdyhhKSkge1xuICAgIHZhciBuZXdJbmRleCA9IGdldE1heEluZGV4KGEpICsgMVxuICAgIGFbbmV3SW5kZXhdID0gYlxuICAgIHNldE1heEluZGV4KGEsIG5ld0luZGV4KVxuICAgIHJldHVybiBhXG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW10uY29uY2F0KGEsIGIpXG4gIGlmIChyZXN1bHQubGVuZ3RoID4gYXJyYXlMaW1pdCkge1xuICAgIHJldHVybiBtYXJrT3ZlcmZsb3coYXJyYXlUb09iamVjdChyZXN1bHQsIHsgcGxhaW5PYmplY3RzOiBwbGFpbk9iamVjdHMgfSksIHJlc3VsdC5sZW5ndGggLSAxKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IG1heWJlTWFwID0gZnVuY3Rpb24gbWF5YmVNYXAodmFsLCBmbikge1xuICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgbWFwcGVkID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgbWFwcGVkLnB1c2goZm4odmFsW2ldKSlcbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlZFxuICB9XG4gIHJldHVybiBmbih2YWwpXG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/qs-esm@8.0.1/node_modules/qs-esm/lib/utils.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/.pnpm/react-image-crop@10.1.8_react@19.2.4/node_modules/react-image-crop/dist/ReactCrop.css": /*!******************************************************************************************************************!*\ !*** ./node_modules/.pnpm/react-image-crop@10.1.8_react@19.2.4/node_modules/react-image-crop/dist/ReactCrop.css ***! \******************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"87c13f937626\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1pbWFnZS1jcm9wQDEwLjEuOF9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlLWNyb3AvZGlzdC9SZWFjdENyb3AuY3NzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxpRUFBZSxjQUFjO0FBQzdCLElBQUksSUFBVSxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1pbWFnZS1jcm9wQDEwLjEuOF9yZWFjdEAxOS4yLjQvbm9kZV9tb2R1bGVzL3JlYWN0LWltYWdlLWNyb3AvZGlzdC9SZWFjdENyb3AuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiODdjMTNmOTM3NjI2XCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/react-image-crop@10.1.8_react@19.2.4/node_modules/react-image-crop/dist/ReactCrop.css\n")); /***/ }) }, /******/ __webpack_require__ => { // webpackRuntimeModules /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) /******/ __webpack_require__.O(0, ["main-app"], () => (__webpack_exec__("(app-pages-browser)/./node_modules/.pnpm/next@16.1.6_@babel+core@7.29.0_@opentelemetry+api@1.9.1_react-dom@19.2.4_react@19.2.4__react@19.2.4_sass@1.98.0/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FAiMediaButtons.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FAiFieldButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateSlugButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FFieldGenerators%2FGenerateThumbnailButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2F%40mintel%2Bpayload-ai%401.9.15_patch_hash%3D934315d3f15180552789a94bf76c34624501f601cc7409c24d_800993f7f4c98f524ffa273087c50c59%2Fnode_modules%2F%40mintel%2Fpayload-ai%2Fdist%2Fcomponents%2FOptimizeButton.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fframework%2Fboundary-components.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fmetadata%2Fgenerate%2Ficon-mark.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmarcmintel%2FProjects%2Fe-tib.com%2Fnode_modules%2F.pnpm%2Fnext%4016.1.6_%40babel%2Bcore%407.29.0_%40opentelemetry%2Bapi%401.9.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4_sass%401.98.0%2Fnode_modules%2Fnext%2Fdist%2Fnext-devtools%2Fuserspace%2Fapp%2Fsegment-explorer-node.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"))); /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ _N_E = __webpack_exports__; /******/ } ]);